Ecwid Ecommerce Shopping Cart - Version 3.4

Version Description

  • New look for the categories menu widget. The old Ecwid categories menu widget (horizontal categories) was created long time ago and has been working in thousands of Ecwid stores. However, it doesn't adapt itself for the customer screen size as well as the other Ecwid widgets do. This has been always be a problem for responsive sites which look good on mobile devices. The new widget is fully responsive and looks great on mobile devices. To enable the new look of the categories widget on your site, navigate to Ecwid plugin settings -> "Advanced" tab and tick the "Enable the new category menu" checkbox. Once enabled, it will your store menu widget to the new look. If you don't have this option on the Advanced page, that means you installed the plugin after this change and the new categories are already enabled in your store. Enjoy!
  • Bigger product images for search engines. The plugin used to generate small product thumbnails on special store pages for search engines. Now it displays the original large product pictures there to assure better indexing of your product images in Google. Please make sure you're on one of Ecwid paid plans to make your products along with the pictures indexable by search engines.
  • A few improvements and fixes to make plugin perfectly compatible with Wordpress 4.3 and the new Twenty Sixteen Wordpress theme. Please feel free to update your sites to the newest Wordpress version, if you haven't yet, and try the brand new Wordpress theme (Twenty Sixteen) your store should work OK with them.
  • Fixed SEO issues on the sites with Genesis theme. The Genesis theme places a special 'canonical' tag on each site page to improve the SEO of the pages. This in some cases conflicted with Ecwid plugin. We overcame this from our side and now the plugin is compatible with SEO features of Genesis theme your store should be better indexed by search engines with this improvement.
  • Fixed a bug with duplicate store pages that appeared if the user re-installed the plugin. If you for some reason need to remove the plugin and install it again, everything will work smoothly now with no extra store pages drafts.
  • Improve the search widget layout. On a lot of Wordpress themes, the product search widget was displayed with 100% width, which makes the search input all-page-width. We fixed that and now it looks better.
  • Minor improvements and bug fixes.
Download this release

Release Info

Developer Ecwid
Plugin Icon 128x128 Ecwid Ecommerce Shopping Cart
Version 3.4
Comparing to
See all releases

Code changes from version 3.3 to 3.4

Files changed (85) hide show
  1. css/admin.3.8.css +39 -39
  2. css/admin.css +299 -285
  3. css/frontend.css +17 -8
  4. css/landing.css +495 -495
  5. css/page-editor.css +57 -57
  6. css/products-list.css +200 -200
  7. css/pure-min.css +10 -10
  8. css/recently-viewed.css +109 -109
  9. css/settings.3.8.css +228 -228
  10. css/settings.css +728 -729
  11. css/store-popup.css +449 -422
  12. css/themes/2014.css +7 -7
  13. css/themes/2015.css +11 -11
  14. css/themes/responsive-adjustments.css +385 -385
  15. css/themes/responsive.css +21 -21
  16. ecwid-shopping-cart.php +2708 -2687
  17. fonts/ecwid-icons.svg +16 -16
  18. images/add-store.svg +39 -39
  19. images/categories.svg +11 -11
  20. images/ecwid_logo_symbol_RGB.svg +37 -37
  21. images/grid.svg +23 -23
  22. images/landing/global.svg +4 -4
  23. images/landing/responsive-grow.svg +5 -5
  24. images/list.svg +15 -15
  25. images/minicart.svg +13 -13
  26. images/product_browser.svg +24 -24
  27. images/search.svg +12 -12
  28. images/store.svg +20 -20
  29. images/table.svg +32 -32
  30. includes/class-ecwid-integration-aiosp.php +60 -60
  31. includes/class-ecwid-integration-wpseo.php +104 -104
  32. includes/class-ecwid-message-manager.php +252 -252
  33. includes/class-ecwid-oauth.php +117 -117
  34. includes/class-ecwid-sitemap-builder.php +85 -85
  35. includes/class-ecwid-store-editor.php +84 -84
  36. includes/themes.php +79 -67
  37. includes/themes/class-ecwid-theme-base.php +24 -24
  38. includes/themes/class-ecwid-theme-bretheon.php +35 -35
  39. includes/themes/class-ecwid-theme-customizr.php +19 -19
  40. includes/themes/class-ecwid-theme-envision.php +33 -33
  41. includes/themes/class-ecwid-theme-pagelines.php +18 -18
  42. includes/themes/class-ecwid-theme-responsive.php +75 -75
  43. includes/themes/class-ecwid-theme-twentyfifteen.php +42 -42
  44. includes/themes/class-ecwid-theme-twentyfourteen.php +20 -20
  45. includes/themes/class-ecwid-theme-twentytwelve.php +21 -0
  46. js/admin.js +72 -72
  47. js/appearance.js +6 -6
  48. js/create_scroller.js +4 -4
  49. js/dashboard.js +25 -25
  50. js/landing.js +4 -4
  51. js/modernizr.js +1406 -1406
  52. js/products-list.js +292 -292
  53. js/recently-viewed.js +81 -81
  54. js/store-editor-common.js +24 -24
  55. js/store-editor-mce.js +595 -595
  56. js/store-editor-page.js +352 -352
  57. js/themes/2012.js +4 -0
  58. js/themes/customizr.js +10 -10
  59. js/themes/pagelines.js +8 -8
  60. js/themes/responsive.js +88 -88
  61. languages/ecwid-shopping-cart-es_ES.po +261 -261
  62. languages/ecwid-shopping-cart-fr_FR.po +261 -261
  63. languages/ecwid-shopping-cart-pt_BR.po +268 -268
  64. languages/ecwid-shopping-cart-ru_RU.mo +0 -0
  65. languages/ecwid-shopping-cart-ru_RU.po +497 -482
  66. languages/ecwid-shopping-cart-tr_TR.po +462 -462
  67. languages/ecwid-shopping-cart.pot +23 -14
  68. lib/JSONStreamingParser/LICENSE.txt +8 -8
  69. lib/JSONStreamingParser/Listener.php +19 -19
  70. lib/JSONStreamingParser/Listener/SubsetConsumer.php +74 -74
  71. lib/JSONStreamingParser/Parser.php +492 -492
  72. lib/JSONStreamingParser/ParsingError.php +12 -12
  73. lib/ecwid_catalog.php +366 -366
  74. lib/ecwid_platform.php +46 -46
  75. lib/ecwid_product_api.php +232 -232
  76. readme.txt +15 -2
  77. templates/admin-message.php +50 -50
  78. templates/advanced-settings.php +152 -123
  79. templates/appearance-settings.php +222 -222
  80. templates/connect.php +52 -52
  81. templates/dashboard.php +58 -58
  82. templates/landing.php +162 -162
  83. templates/reconnect.php +31 -31
  84. templates/store-popup.php +267 -267
  85. templates/store-svg.php +36 -36
css/admin.3.8.css CHANGED
@@ -1,39 +1,39 @@
1
- #adminmenu #toplevel_page_ecwid div.wp-menu-image:before {
2
- font-family: 'ecwid-icons' !important;
3
- content: "\e603";
4
- -webkit-font-smoothing: antialiased;
5
- -moz-osx-font-smoothing: grayscale;
6
- }
7
-
8
- #adminmenu #toplevel_page_ecwid div.wp-menu-image {
9
- margin: 0px;
10
- width: 34px;
11
- height: 30px;
12
- }
13
-
14
- #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon.ecwid-top-menu-item {
15
- font: 400 20px/1 'ecwid-icons' !important;
16
- -webkit-font-smoothing: antialiased;
17
- -moz-osx-font-smoothing: grayscale;
18
- background-image: none;
19
- color: white;
20
- width: auto;
21
- margin-right: 0px;
22
- margin-top: 2px;
23
- }
24
-
25
- #wpadminbar #wp-admin-bar-ecwid-main .ab-icon.ecwid-top-menu-item:before {
26
- content: "\e603";
27
- width: auto;
28
- margin-right: 0px;
29
- }
30
-
31
- @media screen and (max-width: 782px) {
32
- #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon.ecwid-top-menu-item {
33
- font: 400 32px/46px 'ecwid-icons' !important;
34
- width: 46px;
35
- padding: 0px 2px;
36
- text-align: center;
37
- margin-top: 0px;
38
- }
39
- }
1
+ #adminmenu #toplevel_page_ecwid div.wp-menu-image:before {
2
+ font-family: 'ecwid-icons' !important;
3
+ content: "\e603";
4
+ -webkit-font-smoothing: antialiased;
5
+ -moz-osx-font-smoothing: grayscale;
6
+ }
7
+
8
+ #adminmenu #toplevel_page_ecwid div.wp-menu-image {
9
+ margin: 0px;
10
+ width: 34px;
11
+ height: 30px;
12
+ }
13
+
14
+ #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon.ecwid-top-menu-item {
15
+ font: 400 20px/1 'ecwid-icons' !important;
16
+ -webkit-font-smoothing: antialiased;
17
+ -moz-osx-font-smoothing: grayscale;
18
+ background-image: none;
19
+ color: white;
20
+ width: auto;
21
+ margin-right: 0px;
22
+ margin-top: 2px;
23
+ }
24
+
25
+ #wpadminbar #wp-admin-bar-ecwid-main .ab-icon.ecwid-top-menu-item:before {
26
+ content: "\e603";
27
+ width: auto;
28
+ margin-right: 0px;
29
+ }
30
+
31
+ @media screen and (max-width: 782px) {
32
+ #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon.ecwid-top-menu-item {
33
+ font: 400 32px/46px 'ecwid-icons' !important;
34
+ width: 46px;
35
+ padding: 0px 2px;
36
+ text-align: center;
37
+ margin-top: 0px;
38
+ }
39
+ }
css/admin.css CHANGED
@@ -1,285 +1,299 @@
1
- #wpadminbar .ecwid-top-menu-item {
2
- margin-top: 0px;
3
- width: 23px;
4
- height: 28px;
5
- background: url(../images/icon-head-default.png) no-repeat 0% 2px;
6
- }
7
-
8
- #wpadminbar .ecwid-top-menu-item:hover,
9
- #wpadminbar .hover .ecwid-top-menu-item{
10
- background-image: url(../images/icon-head-active.png);
11
- }
12
-
13
- #adminmenu #toplevel_page_ecwid div.wp-menu-image {
14
- background: url(../images/icon-sidebar-default.png) no-repeat 5px 2px;
15
- margin: 2px 3px 2px 2px;
16
- width: 23px;
17
- height: 23px;
18
- }
19
-
20
- #adminmenu #toplevel_page_ecwid:hover div.wp-menu-image,
21
- #adminmenu #toplevel_page_ecwid.wp-has-current-submenu div.wp-menu-image
22
- {
23
- background-image: url(../images/icon-sidebar-active.png);
24
- }
25
-
26
- .ecwid-settings h2 {
27
- background:url(../images/icon-title.png) no-repeat 0% 50%;
28
- padding-left: 43px;
29
- line-height: 32px;
30
- margin-bottom: 30px;
31
- }
32
-
33
- #hide-vote-message {
34
- text-decoration: underline;
35
- cursor: pointer;
36
- }
37
-
38
- #hide-vote-message.hiding {
39
- cursor: wait;
40
- }
41
-
42
- #wp-toolbar > ul > li#wp-admin-bar-ecwid-main {
43
- display: block;
44
- }
45
-
46
- .ecwid-badge {
47
- display: table;
48
- width: 70%;
49
- min-width: 200px;
50
- padding: 3px;
51
- }
52
-
53
- .ecwid-badge > div {
54
- display: table-cell;
55
- vertical-align: middle;
56
- height: 55px;
57
- }
58
-
59
- .ecwid-badge .checkbox {
60
- width: 15px;
61
- }
62
- .ecwid-badge .image {
63
- text-align: center;
64
- }
65
-
66
- div.ecwid-message {
67
- padding: 27px 29px 20px 30px;
68
- }
69
-
70
- .ecwid-message a {
71
- color: #0074A2;
72
- }
73
-
74
- .ecwid-message a:hover {
75
- color: #2EA2CC;
76
- }
77
-
78
- .ecwid-message .ecwid-message-title {
79
- font-size: 18px;
80
- margin-bottom: 12px;
81
- font-weight: bold;
82
- }
83
-
84
- .ecwid-message .ecwid-message-content {
85
- line-height: 20px;
86
- }
87
-
88
- .ecwid-message .ecwid-message-buttons {
89
- margin-top: 19px;
90
- position: relative;
91
- display: table;
92
- width: 100%;
93
- }
94
-
95
- .ecwid-message .ecwid-message-buttons > div {
96
- display: inline-block;
97
- vertical-align: middle;
98
- }
99
-
100
- .ecwid-message .ecwid-message-buttons > div:not(:first-child) {
101
- padding-left: 9px;
102
- }
103
-
104
- .ecwid-message .ecwid-message-buttons > div:last-child {
105
- position: absolute;
106
-
107
- padding-left: 0px;
108
-
109
- top: 0px;
110
- right: 0px;
111
- }
112
-
113
- .ecwid-message .ecwid-message-buttons > div a{
114
- text-decoration: none;
115
- }
116
-
117
- .ecwid-message .ecwid-message-hide:not(:hover) {
118
- color: #bbb;
119
- }
120
-
121
- .ecwid-message .ecwid-message-hide {
122
- font-size: 12px;
123
- font-weight: 100;
124
- cursor: pointer;
125
- text-decoration: none;
126
- }
127
-
128
- .ecwid-message .ecwid-message-hide:before {
129
- content: "\e606";
130
- font-family: ecwid-icons;
131
- font-size: 26px;
132
- position: relative;
133
- left: 1px;
134
- top: 6px;
135
- }
136
-
137
- @media screen and (max-width: 768px) {
138
- .ecwid-message .ecwid-message-buttons > div:last-child {
139
- position: inherit;
140
- }
141
-
142
- div.ecwid-message,
143
- div.ecwid-message.updated{
144
- padding: 27px 29px 20px 30px;
145
- }
146
-
147
- .ecwid-message .ecwid-message-buttons > div:not(:first-child) {
148
- padding-left: 0px;
149
- }
150
-
151
- .ecwid-message .ecwid-message-buttons > div {
152
- display: block;
153
- }
154
-
155
- .ecwid-message .ecwid-message-buttons > div a {
156
- text-align: center;
157
- white-space: normal;
158
- width: 100%;
159
- }
160
-
161
- .ecwid-message .ecwid-message-hide:before {
162
- font-size: 21px;
163
- top: 5px;
164
- }
165
-
166
- .ecwid-message-buttons .hide-wrapper {
167
- margin-top: 10px;
168
- }
169
- }
170
-
171
- body[class*="_page_ecwid"] .ecwid-message {
172
- margin: 20px 20px 20px 0px;
173
- }
174
-
175
-
176
- .ecwid-message.dev {
177
- outline: 2px solid red;
178
- width: 434px;
179
- }
180
-
181
- .ecwid-message.dev .ecwid-message-title {
182
- letter-spacing: -0.4px;
183
- }
184
-
185
- .ecwid-message.dev .ecwid-message-content {
186
- letter-spacing: -0.62px;
187
- }
188
-
189
- .ecwid-message.dev .ecwid-message-hide {
190
- letter-spacing: -0.22px;
191
- }
192
-
193
- #available-widgets .widget-top.ecwid-widget-highlighted {
194
- background: #1d7ac4;
195
- color: white;
196
- font-weight: normal;
197
- }
198
-
199
- #available-widgets .ecwid-widget .widget-top h4 {
200
- padding-left: 42px;
201
- }
202
-
203
- #available-widgets .ecwid-widget .widget-top h4:before {
204
- font-size: 20px;
205
- position: absolute;
206
- top: 12px;
207
- left: 16px;
208
- margin-right: -4px;
209
- line-height: 10px;
210
- font-family: 'ecwid-icons';
211
- speak: none;
212
- font-style: normal;
213
- font-weight: normal;
214
- font-variant: normal;
215
- text-transform: none;
216
- line-height: 1;
217
-
218
- /* Better Font Rendering =========== */
219
- -webkit-font-smoothing: antialiased;
220
- -moz-osx-font-smoothing: grayscale;
221
-
222
- color: #1d7ac4;
223
- opacity: .5;
224
- }
225
- #available-widgets .ecwid-widget .widget-top:hover h4:before {
226
- opacity: 1;
227
- }
228
-
229
- #available-widgets .ecwid-widget .widget-top.ecwid-widget-highlighted h4:before {
230
- color: white;
231
- opacity: 1;
232
- }
233
-
234
- @font-face {
235
- font-family: 'ecwid-icons';
236
- src:url('../fonts/ecwid-icons.eot?-b8sbws');
237
- src:url('../fonts/ecwid-icons.eot?#iefix-b8sbws') format('embedded-opentype'),
238
- url('../fonts/ecwid-icons.woff?-b8sbws') format('woff'),
239
- url('../fonts/ecwid-icons.ttf?-b8sbws') format('truetype'),
240
- url('../fonts/ecwid-icons.svg?-b8sbws#ecwid-icons') format('svg');
241
- font-weight: normal;
242
- font-style: normal;
243
- }
244
-
245
- [class^="icon-"], [class*=" icon-"] {
246
- font-family: 'ecwid-icons';
247
- speak: none;
248
- font-style: normal;
249
- font-weight: normal;
250
- font-variant: normal;
251
- text-transform: none;
252
- line-height: 1;
253
-
254
- /* Better Font Rendering =========== */
255
- -webkit-font-smoothing: antialiased;
256
- -moz-osx-font-smoothing: grayscale;
257
- }
258
-
259
- #available-widgets .widget-top.ecwid-widget-badge h4:before {
260
- content: "\e603";
261
- }
262
-
263
- #available-widgets .widget-top.ecwid-widget-minicart h4:before,
264
- #available-widgets .widget-top.ecwid-widget-minicart_miniview h4:before
265
- {
266
- content: "\e601";
267
- }
268
-
269
- #available-widgets .widget-top.ecwid-widget-vcategories h4:before,
270
- #available-widgets .widget-top.ecwid-widget-categories h4:before
271
- {
272
- content: "\e602";
273
- }
274
-
275
- #available-widgets .widget-top.ecwid-widget-search h4:before {
276
- content: "\e604";
277
- }
278
-
279
- #available-widgets .widget-top.ecwid-widget-storelink h4:before {
280
- content: "\e605";
281
- }
282
-
283
- #available-widgets .widget-top.ecwid-widget-recentlyviewed h4:before {
284
- content: "\e600";
285
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #wpadminbar .ecwid-top-menu-item {
2
+ margin-top: 0px;
3
+ width: 23px;
4
+ height: 28px;
5
+ background: url(../images/icon-head-default.png) no-repeat 0% 2px;
6
+ }
7
+
8
+ #wpadminbar .ecwid-top-menu-item:hover,
9
+ #wpadminbar .hover .ecwid-top-menu-item{
10
+ background-image: url(../images/icon-head-active.png);
11
+ }
12
+
13
+ #adminmenu #toplevel_page_ecwid div.wp-menu-image {
14
+ background: url(../images/icon-sidebar-default.png) no-repeat 5px 2px;
15
+ margin: 2px 3px 2px 2px;
16
+ width: 23px;
17
+ height: 23px;
18
+ }
19
+
20
+ #adminmenu #toplevel_page_ecwid:hover div.wp-menu-image,
21
+ #adminmenu #toplevel_page_ecwid.wp-has-current-submenu div.wp-menu-image
22
+ {
23
+ background-image: url(../images/icon-sidebar-active.png);
24
+ }
25
+
26
+ .ecwid-settings h2 {
27
+ background:url(../images/icon-title.png) no-repeat 0% 50%;
28
+ padding-left: 43px;
29
+ line-height: 32px;
30
+ margin-bottom: 30px;
31
+ }
32
+
33
+ #hide-vote-message {
34
+ text-decoration: underline;
35
+ cursor: pointer;
36
+ }
37
+
38
+ #hide-vote-message.hiding {
39
+ cursor: wait;
40
+ }
41
+
42
+ #wp-toolbar > ul > li#wp-admin-bar-ecwid-main {
43
+ display: block;
44
+ }
45
+
46
+ .ecwid-badge {
47
+ display: table;
48
+ width: 70%;
49
+ min-width: 200px;
50
+ padding: 3px;
51
+ }
52
+
53
+ .ecwid-badge > div {
54
+ display: table-cell;
55
+ vertical-align: middle;
56
+ height: 55px;
57
+ }
58
+
59
+ .ecwid-badge .checkbox {
60
+ width: 15px;
61
+ }
62
+ .ecwid-badge .image {
63
+ text-align: center;
64
+ }
65
+
66
+ div.ecwid-message {
67
+ padding: 27px 29px 20px 30px;
68
+ }
69
+
70
+ .ecwid-message a {
71
+ color: #0074A2;
72
+ }
73
+
74
+ .ecwid-message a:hover {
75
+ color: #2EA2CC;
76
+ }
77
+
78
+ .ecwid-message .ecwid-message-title {
79
+ font-size: 18px;
80
+ margin-bottom: 12px;
81
+ font-weight: bold;
82
+ }
83
+
84
+ .ecwid-message .ecwid-message-content {
85
+ line-height: 20px;
86
+ }
87
+
88
+ .ecwid-message .ecwid-message-buttons {
89
+ margin-top: 19px;
90
+ position: relative;
91
+ display: table;
92
+ width: 100%;
93
+ }
94
+
95
+ .ecwid-message .ecwid-message-buttons > div {
96
+ display: inline-block;
97
+ vertical-align: middle;
98
+ }
99
+
100
+ .ecwid-message .ecwid-message-buttons > div:not(:first-child) {
101
+ padding-left: 9px;
102
+ }
103
+
104
+ .ecwid-message .ecwid-message-buttons > div:last-child {
105
+ position: absolute;
106
+
107
+ padding-left: 0px;
108
+
109
+ top: 0px;
110
+ right: 0px;
111
+ }
112
+
113
+ .ecwid-message .ecwid-message-buttons > div a{
114
+ text-decoration: none;
115
+ }
116
+
117
+ .ecwid-message .ecwid-message-hide:not(:hover) {
118
+ color: #bbb;
119
+ }
120
+
121
+ .ecwid-message .ecwid-message-hide {
122
+ font-size: 12px;
123
+ font-weight: 100;
124
+ cursor: pointer;
125
+ text-decoration: none;
126
+ }
127
+
128
+ .ecwid-message .ecwid-message-hide:before {
129
+ content: "\e606";
130
+ font-family: ecwid-icons;
131
+ font-size: 26px;
132
+ position: relative;
133
+ left: 1px;
134
+ top: 6px;
135
+ }
136
+
137
+ @media screen and (max-width: 768px) {
138
+ .ecwid-message .ecwid-message-buttons > div:last-child {
139
+ position: inherit;
140
+ }
141
+
142
+ div.ecwid-message,
143
+ div.ecwid-message.updated{
144
+ padding: 27px 29px 20px 30px;
145
+ }
146
+
147
+ .ecwid-message .ecwid-message-buttons > div:not(:first-child) {
148
+ padding-left: 0px;
149
+ }
150
+
151
+ .ecwid-message .ecwid-message-buttons > div {
152
+ display: block;
153
+ }
154
+
155
+ .ecwid-message .ecwid-message-buttons > div a {
156
+ text-align: center;
157
+ white-space: normal;
158
+ width: 100%;
159
+ }
160
+
161
+ .ecwid-message .ecwid-message-hide:before {
162
+ font-size: 21px;
163
+ top: 5px;
164
+ }
165
+
166
+ .ecwid-message-buttons .hide-wrapper {
167
+ margin-top: 10px;
168
+ }
169
+ }
170
+
171
+ body[class*="_page_ecwid"] .ecwid-message {
172
+ margin: 20px 20px 20px 0px;
173
+ }
174
+
175
+
176
+ .ecwid-message.dev {
177
+ outline: 2px solid red;
178
+ width: 434px;
179
+ }
180
+
181
+ .ecwid-message.dev .ecwid-message-title {
182
+ letter-spacing: -0.4px;
183
+ }
184
+
185
+ .ecwid-message.dev .ecwid-message-content {
186
+ letter-spacing: -0.62px;
187
+ }
188
+
189
+ .ecwid-message.dev .ecwid-message-hide {
190
+ letter-spacing: -0.22px;
191
+ }
192
+
193
+ #available-widgets .widget-top.ecwid-widget-highlighted {
194
+ background: #1d7ac4;
195
+ color: white;
196
+ font-weight: normal;
197
+ }
198
+
199
+ .widgets-php #available-widgets .ecwid-widget .widget-top .widget-title h4 {
200
+ padding-left: 42px;
201
+ }
202
+
203
+ .wp-customizer #available-widgets .ecwid-widget .widget-top .widget-title {
204
+ padding-left: 0px;
205
+ }
206
+
207
+
208
+ #available-widgets .ecwid-widget .widget-top .widget-title:before {
209
+ font-size: 20px;
210
+ position: absolute;
211
+ top: 12px;
212
+ left: 16px;
213
+ margin-right: -4px;
214
+ line-height: 10px;
215
+ font-family: 'ecwid-icons';
216
+ speak: none;
217
+ font-style: normal;
218
+ font-weight: normal;
219
+ font-variant: normal;
220
+ text-transform: none;
221
+ line-height: 1;
222
+
223
+ /* Better Font Rendering =========== */
224
+ -webkit-font-smoothing: antialiased;
225
+ -moz-osx-font-smoothing: grayscale;
226
+
227
+ color: #1d7ac4;
228
+ opacity: .5;
229
+ }
230
+
231
+ .wp-customizer #available-widgets .ecwid-widget .widget-top .widget-title:before {
232
+ left: -40px;
233
+ top: -1px;
234
+ font-size: 18px;
235
+ opacity: 1;
236
+ color: #32373c;
237
+ }
238
+
239
+ #available-widgets .ecwid-widget .widget-top:hover .widget-title:before {
240
+ opacity: 1;
241
+ }
242
+
243
+ #available-widgets .ecwid-widget .widget-top.ecwid-widget-highlighted .widget-title:before {
244
+ color: white;
245
+ opacity: 1;
246
+ }
247
+
248
+ @font-face {
249
+ font-family: 'ecwid-icons';
250
+ src:url('../fonts/ecwid-icons.eot?-b8sbws');
251
+ src:url('../fonts/ecwid-icons.eot?#iefix-b8sbws') format('embedded-opentype'),
252
+ url('../fonts/ecwid-icons.woff?-b8sbws') format('woff'),
253
+ url('../fonts/ecwid-icons.ttf?-b8sbws') format('truetype'),
254
+ url('../fonts/ecwid-icons.svg?-b8sbws#ecwid-icons') format('svg');
255
+ font-weight: normal;
256
+ font-style: normal;
257
+ }
258
+
259
+ [class^="icon-"], [class*=" icon-"] {
260
+ font-family: 'ecwid-icons';
261
+ speak: none;
262
+ font-style: normal;
263
+ font-weight: normal;
264
+ font-variant: normal;
265
+ text-transform: none;
266
+ line-height: 1;
267
+
268
+ /* Better Font Rendering =========== */
269
+ -webkit-font-smoothing: antialiased;
270
+ -moz-osx-font-smoothing: grayscale;
271
+ }
272
+
273
+ #available-widgets .ecwid-widget-badge .widget-title:before {
274
+ content: "\e603";
275
+ }
276
+
277
+ #available-widgets .widget-top.ecwid-widget-minicart .widget-title:before,
278
+ #available-widgets .widget-top.ecwid-widget-minicart_miniview .widget-title:before
279
+ {
280
+ content: "\e601";
281
+ }
282
+
283
+ #available-widgets .widget-top.ecwid-widget-vcategories .widget-title:before,
284
+ #available-widgets .widget-top.ecwid-widget-categories .widget-title:before
285
+ {
286
+ content: "\e602";
287
+ }
288
+
289
+ #available-widgets .widget-top.ecwid-widget-search .widget-title:before {
290
+ content: "\e604";
291
+ }
292
+
293
+ #available-widgets .widget-top.ecwid-widget-storelink .widget-title:before {
294
+ content: "\e605";
295
+ }
296
+
297
+ #available-widgets .widget-top.ecwid-widget-recentlyviewed .widget-title:before {
298
+ content: "\e600";
299
+ }
css/frontend.css CHANGED
@@ -1,9 +1,18 @@
1
- html#ecwid_html body#ecwid_body div#mini-cart-attached-to-categories.ecwid-cart-narrow-screen, div.ecwid-categories-horizontal.ecwid-categories-narrow-screen {
2
- display: none;
3
- }
4
-
5
- html#ecwid_html body#ecwid_body .ecwid.ecwid-SingleProduct a ,
6
- .ecwid-SingleProduct a div.ecwid-title {
7
- text-decoration: none;
8
- color: #000000;
 
 
 
 
 
 
 
 
 
9
  }
1
+ html#ecwid_html body#ecwid_body div#mini-cart-attached-to-categories.ecwid-cart-narrow-screen, div.ecwid-categories-horizontal.ecwid-categories-narrow-screen {
2
+ display: none;
3
+ }
4
+
5
+ html#ecwid_html body#ecwid_body .ecwid.ecwid-SingleProduct a ,
6
+ .ecwid-SingleProduct a div.ecwid-title {
7
+ text-decoration: none;
8
+ color: #000000;
9
+ }
10
+
11
+ html#ecwid_html body#ecwid_body .ecwid-SearchPanel input {
12
+ max-width: 300px;
13
+ }
14
+
15
+ .ecwid-shopping-cart-categories #horizontal-menu {
16
+ margin-top: 10px;
17
+ margin-bottom: 10px;
18
  }
css/landing.css CHANGED
@@ -1,496 +1,496 @@
1
- /* http://meyerweb.com/eric/tools/css/reset/
2
- * v2.0 | 20110126
3
- * License: none (public domain) */
4
- html, body, div, span, applet, object, iframe,
5
- h1, h2, h3, h4, h5, h6, p, blockquote, pre,
6
- a, abbr, acronym, address, big, cite, code,
7
- del, dfn, em, img, ins, kbd, q, s, samp,
8
- small, strike, strong, sub, sup, tt, var,
9
- b, u, i, center,
10
- dl, dt, dd, ol, ul, li,
11
- fieldset, form, label, legend,
12
- table, caption, tbody, tfoot, thead, tr, th, td,
13
- article, aside, canvas, details, embed,
14
- figure, figcaption, footer, header, hgroup,
15
- menu, nav, output, ruby, section, summary,
16
- time, mark, audio, video, button {
17
- margin: 0;
18
- padding: 0;
19
- border: 0;
20
- font-size: 100%;
21
- font: inherit;
22
- box-sizing: border-box;
23
- vertical-align: baseline; }
24
-
25
- /* HTML5 display-role reset for older browsers */
26
- article, aside, details, figcaption, figure,
27
- footer, header, hgroup, menu, nav, section {
28
- display: block; }
29
-
30
- body {
31
- line-height: 1; }
32
-
33
- ol, ul {
34
- list-style: none; }
35
-
36
- blockquote, q {
37
- quotes: none; }
38
-
39
- blockquote:before, blockquote:after,
40
- q:before, q:after {
41
- content: "";
42
- content: none; }
43
-
44
- table {
45
- border-collapse: collapse;
46
- border-spacing: 0; }
47
-
48
- body {
49
- font-family: "Open sans", sans-serif;
50
- font-weight: 400;
51
- color: #363636;
52
- min-width: 320px; }
53
-
54
- .ecwid-thank {
55
- padding-top: 36px; }
56
- .ecwid-thank h1 {
57
- text-align: center;
58
- font-size: 28px;
59
- color: #000000;
60
- line-height: 1.4;
61
- margin-bottom: 30px; }
62
- @media (max-width: 767px) {
63
- .ecwid-thank h1 {
64
- font-size: 22px;
65
- max-width: 490px;
66
- padding: 0 2%;
67
- margin: 0 auto 15px; }
68
- .ecwid-thank h1 br {
69
- display: none; } }
70
- @media (max-width: 500px) {
71
- .ecwid-thank h1 {
72
- max-width: 320px; } }
73
- .ecwid-thank h1 span {
74
- display: block;
75
- font-size: 14px;
76
- margin-bottom: 14px; }
77
-
78
- .ecwid-thank-steps {
79
- margin: 0 auto 51px;
80
- max-width: 1000px; }
81
- @media (max-width: 767px) {
82
- .ecwid-thank-steps {
83
- max-width: 450px;
84
- margin-bottom: 0;
85
- padding: 0 2%; } }
86
- .ecwid-thank-steps:after {
87
- content: "";
88
- display: table;
89
- clear: both; }
90
-
91
- .ecwid-thank-step {
92
- text-align: center;
93
- width: 33.33333%;
94
- float: left;
95
- position: relative;
96
- padding: 0 2%; }
97
- .ecwid-thank-step.active .ecwid-thank-step-image:before {
98
- position: absolute;
99
- content: url("../images/landing/correct.svg");
100
- width: 17px;
101
- left: 61%; }
102
- .ecwid-thank-step.active .ecwid-thank-step-image img.none-active {
103
- display: none; }
104
- .ecwid-thank-step.active .ecwid-thank-step-image img.active {
105
- display: inline-block; }
106
- @media (max-width: 767px) {
107
- .ecwid-thank-step {
108
- display: none; } }
109
- .ecwid-thank-step .ecwid-thank-step-image {
110
- height: 92px;
111
- position: relative; }
112
- .ecwid-thank-step .ecwid-thank-step-image:after {
113
- content: "";
114
- position: absolute;
115
- overflow: hidden; }
116
- @media (min-width: 768px) {
117
- .ecwid-thank-step .ecwid-thank-step-image:after {
118
- top: 40px;
119
- left: 77%;
120
- width: 64%;
121
- height: 7px;
122
- background: url("../images/landing/arrow.png") center right; } }
123
- .ecwid-thank-step img {
124
- margin: 3px 0 10px; }
125
- .ecwid-thank-step img.active {
126
- display: none; }
127
- .ecwid-thank-step h2 {
128
- font-size: 18px;
129
- line-height: 1.5;
130
- margin-bottom: 6px; }
131
- .ecwid-thank-step p {
132
- font-size: 14px;
133
- line-height: 1.5; }
134
- .ecwid-thank-step.ecwid-thank-step-one img {
135
- height: 77px; }
136
- .ecwid-thank-step.ecwid-thank-step-two img {
137
- height: 60px;
138
- margin-top: 13px; }
139
- .ecwid-thank-step.ecwid-thank-step-three .ecwid-thank-step-image:after {
140
- display: none; }
141
- .ecwid-thank-step.ecwid-thank-step-three h2 {
142
- font-weight: 600; }
143
- .ecwid-thank-step.ecwid-thank-step-three img {
144
- height: 82px; }
145
-
146
- .ecwid-thank-background {
147
- background: url("../images/landing/background-think.jpg");
148
- background-size: cover; }
149
- @media (min-width: 768px) {
150
- .ecwid-thank-background {
151
- background-position: center bottom; } }
152
- @media (min-width: 1440px) {
153
- .ecwid-thank-background {
154
- background-position: left -50px; } }
155
- .ecwid-thank-background .ecwid-thank-background-tablet {
156
- padding: 52px 5% 0; }
157
- .ecwid-thank-background .ecwid-thank-background-tablet img {
158
- display: block;
159
- margin: 0 auto;
160
- max-width: 100%; }
161
-
162
- .ecwid-description {
163
- padding: 0 2%; }
164
- .ecwid-description:after {
165
- content: "";
166
- display: table;
167
- clear: both; }
168
-
169
- .ecwid-description-inner {
170
- max-width: 930px;
171
- margin: 0 auto;
172
- table-layout: fixed;
173
- width: 100%; }
174
- @media (min-width: 768px) {
175
- .ecwid-description-inner {
176
- display: table;
177
- padding-top: 35px; } }
178
- @media (min-width: 992px) {
179
- .ecwid-description-inner {
180
- padding-top: 95px; } }
181
- @media (max-width: 767px) {
182
- .ecwid-description-inner {
183
- display: -webkit-flex;
184
- display: -ms-flexbox;
185
- display: flex;
186
- -webkit-flex-direction: column-reverse;
187
- -ms-flex-direction: column-reverse;
188
- flex-direction: column-reverse; } }
189
-
190
- .ecwid-description-image {
191
- padding-right: 5%;
192
- vertical-align: bottom; }
193
- @media (min-width: 768px) {
194
- .ecwid-description-image {
195
- display: table-cell;
196
- width: 60%; } }
197
- @media (min-width: 992px) {
198
- .ecwid-description-image {
199
- width: 65%; } }
200
- @media (max-width: 767px) {
201
- .ecwid-description-image {
202
- width: 100%;
203
- padding: 0 4%; } }
204
- .ecwid-description-image img {
205
- display: block;
206
- max-width: 100%; }
207
- @media (max-width: 767px) {
208
- .ecwid-description-image img {
209
- margin: 0 auto; } }
210
-
211
- .ecwid-description-text {
212
- padding-top: 35px;
213
- padding-bottom: 35px; }
214
- @media (min-width: 768px) {
215
- .ecwid-description-text {
216
- width: 40%;
217
- display: table-cell;
218
- vertical-align: middle; } }
219
- @media (min-width: 992px) {
220
- .ecwid-description-text {
221
- width: 35%;
222
- vertical-align: baseline; } }
223
- @media (max-width: 767px) {
224
- .ecwid-description-text {
225
- padding: 44px 4% 0;
226
- max-width: 500px;
227
- margin: 0 auto 50px;
228
- width: 100%; } }
229
- .ecwid-description-text h2 {
230
- line-height: 1.2;
231
- margin-bottom: 18px; }
232
- @media (min-width: 768px) {
233
- .ecwid-description-text h2 {
234
- font-size: 24px; } }
235
- @media (min-width: 992px) {
236
- .ecwid-description-text h2 {
237
- font-size: 28px; } }
238
- @media (max-width: 767px) {
239
- .ecwid-description-text h2 {
240
- font-size: 22px;
241
- text-align: center; } }
242
- .ecwid-description-text p {
243
- font-size: 14px;
244
- line-height: 1.5;
245
- padding: 0.8em 0; }
246
-
247
- .ecwid-features {
248
- background-color: #F4F4F4;
249
- padding: 44px 0 60px; }
250
- @media (max-width: 767px) {
251
- .ecwid-features {
252
- padding-bottom: 9px; } }
253
- .ecwid-features h2 {
254
- font-size: 28px;
255
- color: #1F1F1F;
256
- font-weight: 400;
257
- text-align: center;
258
- margin-bottom: 62px; }
259
- @media (max-width: 767px) {
260
- .ecwid-features h2 {
261
- font-size: 22px;
262
- margin-bottom: 40px; } }
263
-
264
- .ecwid-features-inner {
265
- margin: 0 auto;
266
- max-width: 930px;
267
- padding: 0 3%; }
268
-
269
- .ecwid-features-top {
270
- margin-bottom: 70px; }
271
- @media (max-width: 767px) {
272
- .ecwid-features-top {
273
- margin-bottom: 0; } }
274
- .ecwid-features-top:after {
275
- content: "";
276
- display: table;
277
- clear: both; }
278
- .ecwid-features-top .ecwid-features-top-item {
279
- width: 50%;
280
- float: left;
281
- text-align: center; }
282
- @media (max-width: 767px) {
283
- .ecwid-features-top .ecwid-features-top-item {
284
- padding: 0 2%;
285
- width: 100%;
286
- max-width: 320px;
287
- margin: 0 auto 35px;
288
- float: none; } }
289
- .ecwid-features-top .ecwid-features-top-item .ecwid-features-top-item-image {
290
- height: 82px; }
291
- @media (max-width: 767px) {
292
- .ecwid-features-top .ecwid-features-top-item .ecwid-features-top-item-image {
293
- height: 75px; } }
294
- .ecwid-features-top .ecwid-features-top-item img {
295
- height: 61px;
296
- margin-bottom: 36px; }
297
- @media (max-width: 767px) {
298
- .ecwid-features-top .ecwid-features-top-item img {
299
- margin-bottom: 20px; } }
300
- .ecwid-features-top .ecwid-features-top-item img.gift {
301
- height: 80px;
302
- margin-top: -10px; }
303
- .ecwid-features-top .ecwid-features-top-item h3 {
304
- font-size: 21px;
305
- font-weight: 600;
306
- margin-bottom: 15px; }
307
- @media (max-width: 767px) {
308
- .ecwid-features-top .ecwid-features-top-item h3 {
309
- font-size: 18px;
310
- margin-bottom: 6px; } }
311
- .ecwid-features-top .ecwid-features-top-item p {
312
- font-size: 14px;
313
- line-height: 1.45; }
314
- @media (max-width: 767px) {
315
- .ecwid-features-top .ecwid-features-top-item p {
316
- font-size: 13px; } }
317
-
318
- .ecwid-features-bottom:after {
319
- content: "";
320
- display: table;
321
- clear: both; }
322
- .ecwid-features-bottom .ecwid-features-bottom-item {
323
- width: 33.33333%;
324
- float: left;
325
- text-align: center; }
326
- @media (max-width: 767px) {
327
- .ecwid-features-bottom .ecwid-features-bottom-item {
328
- float: none;
329
- width: 100%;
330
- max-width: 270px;
331
- margin: 0 auto 35px; } }
332
- .ecwid-features-bottom .ecwid-features-bottom-item .ecwid-features-bottom-item-image {
333
- height: 82px; }
334
- @media (max-width: 767px) {
335
- .ecwid-features-bottom .ecwid-features-bottom-item .ecwid-features-bottom-item-image {
336
- height: 75px; } }
337
- .ecwid-features-bottom .ecwid-features-bottom-item img {
338
- height: 63px;
339
- margin-bottom: 17px; }
340
- .ecwid-features-bottom .ecwid-features-bottom-item img.secure {
341
- height: 67px; }
342
- @media (min-width: 768px) {
343
- .ecwid-features-bottom .ecwid-features-bottom-item img.secure {
344
- margin-top: -8px; } }
345
- .ecwid-features-bottom .ecwid-features-bottom-item h3 {
346
- font-size: 18px;
347
- font-weight: 600;
348
- margin-bottom: 6px; }
349
- .ecwid-features-bottom .ecwid-features-bottom-item p {
350
- font-size: 14px;
351
- line-height: 1.45; }
352
- @media (max-width: 767px) {
353
- .ecwid-features-bottom .ecwid-features-bottom-item p {
354
- font-size: 13px; }
355
- .ecwid-features-bottom .ecwid-features-bottom-item p br {
356
- display: none; } }
357
-
358
- .ecwid-start {
359
- text-align: center;
360
- padding: 64px 0 194px; }
361
- @media (max-width: 767px) {
362
- .ecwid-start {
363
- padding: 44px 0 64px; }
364
- .ecwid-start .ecwid-button .button {
365
- margin-bottom: 29px; } }
366
- .ecwid-start:after {
367
- content: "";
368
- display: table;
369
- clear: both; }
370
- .ecwid-start h2 {
371
- font-size: 28px;
372
- line-height: 1.4;
373
- margin-bottom: 32px; }
374
- @media (max-width: 767px) {
375
- .ecwid-start h2 {
376
- font-size: 22px;
377
- padding: 0 2%;
378
- margin-bottom: 1px; } }
379
-
380
- .ecwid-button {
381
- text-align: center; }
382
- .ecwid-button a,
383
- .ecwid-button button {
384
- background-image: none; }
385
- .ecwid-button .button {
386
- border-radius: 4px;
387
- border: 0;
388
- font-size: 20px;
389
- color: #ffffff;
390
- line-height: 2.6;
391
- letter-spacing: 0.01em;
392
- padding: 0.12em 1.5em;
393
- margin-bottom: 46px;
394
- outline: none;
395
- cursor: pointer; }
396
- @media (max-width: 767px) {
397
- .ecwid-button .button {
398
- font-size: 18px;
399
- margin-top: 25px;
400
- margin-bottom: 14px;
401
- padding: 0.12em 1em; } }
402
- @media (max-width: 500px) {
403
- .ecwid-button .button {
404
- font-size: 16px; } }
405
- .ecwid-button .button:hover {
406
- opacity: 0.8; }
407
- .ecwid-button .button.button--blue {
408
- background-color: #189DEE; }
409
- .ecwid-button .button.button--green {
410
- background-color: #59BB00; }
411
- .ecwid-button .button-description-mobile {
412
- font-size: 12px;
413
- line-height: 1.5;
414
- margin-bottom: 38px;
415
- color: #999; }
416
- .ecwid-button .button-description-mobile h3 {
417
- font-size: 18px;
418
- color: #363636;
419
- font-weight: 600;
420
- margin-bottom: -70px; }
421
- @media (min-width: 768px) {
422
- .ecwid-button .button-description-mobile {
423
- display: none; } }
424
- .ecwid-button .ecwid-button-description {
425
- font-size: 14px; }
426
- .ecwid-button .ecwid-button-description a {
427
- display: block;
428
- font-size: 20px;
429
- color: #288FB5;
430
- margin-top: 12px;
431
- text-decoration: none; }
432
- .ecwid-button .ecwid-button-description a:hover {
433
- opacity: 0.8; }
434
- @media (max-width: 767px) {
435
- .ecwid-button .ecwid-button-description a {
436
- margin-bottom: 10px;
437
- font-size: 18px; } }
438
-
439
-
440
- /*
441
- * Adapt landing to wordpress actual environment
442
- */
443
- .ecwid-button .button {
444
- height: auto;
445
- }
446
-
447
- #wpcontent {
448
- background: white;
449
- padding-left: 0px;
450
- }
451
- ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu>li.current>a.current:after
452
- {
453
- border-right-color:white;
454
- }
455
-
456
- .ecwid-landing.register .on-connect {
457
- display: none;
458
- }
459
-
460
-
461
- .ecwid-landing.connect .on-register {
462
- display: none;
463
- }
464
-
465
- .ecwid-landing .on-error {
466
- display: none;
467
- }
468
-
469
- .ecwid-landing.conn-error .on-error {
470
- display: inherit;
471
- }
472
-
473
- .ecwid-landing.conn-error .on-no-error {
474
- display: none;
475
- }
476
-
477
- .ecwid-button .ecwid-connection-error {
478
- color: red;
479
- }
480
-
481
- @media (min-width: 768px) {
482
- .ecwid-button .ecwid-connection-error {
483
- position: relative;
484
- top: -30px;
485
- margin-bottom: 8px;
486
- }
487
- }
488
-
489
- .ecwid-landing a:focus {
490
- outline: 0px none;
491
- box-shadow: none;
492
- }
493
-
494
- .ecwid-landing .button:hover {
495
- color: white;
496
  }
1
+ /* http://meyerweb.com/eric/tools/css/reset/
2
+ * v2.0 | 20110126
3
+ * License: none (public domain) */
4
+ html, body, div, span, applet, object, iframe,
5
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
6
+ a, abbr, acronym, address, big, cite, code,
7
+ del, dfn, em, img, ins, kbd, q, s, samp,
8
+ small, strike, strong, sub, sup, tt, var,
9
+ b, u, i, center,
10
+ dl, dt, dd, ol, ul, li,
11
+ fieldset, form, label, legend,
12
+ table, caption, tbody, tfoot, thead, tr, th, td,
13
+ article, aside, canvas, details, embed,
14
+ figure, figcaption, footer, header, hgroup,
15
+ menu, nav, output, ruby, section, summary,
16
+ time, mark, audio, video, button {
17
+ margin: 0;
18
+ padding: 0;
19
+ border: 0;
20
+ font-size: 100%;
21
+ font: inherit;
22
+ box-sizing: border-box;
23
+ vertical-align: baseline; }
24
+
25
+ /* HTML5 display-role reset for older browsers */
26
+ article, aside, details, figcaption, figure,
27
+ footer, header, hgroup, menu, nav, section {
28
+ display: block; }
29
+
30
+ body {
31
+ line-height: 1; }
32
+
33
+ ol, ul {
34
+ list-style: none; }
35
+
36
+ blockquote, q {
37
+ quotes: none; }
38
+
39
+ blockquote:before, blockquote:after,
40
+ q:before, q:after {
41
+ content: "";
42
+ content: none; }
43
+
44
+ table {
45
+ border-collapse: collapse;
46
+ border-spacing: 0; }
47
+
48
+ body {
49
+ font-family: "Open sans", sans-serif;
50
+ font-weight: 400;
51
+ color: #363636;
52
+ min-width: 320px; }
53
+
54
+ .ecwid-thank {
55
+ padding-top: 36px; }
56
+ .ecwid-thank h1 {
57
+ text-align: center;
58
+ font-size: 28px;
59
+ color: #000000;
60
+ line-height: 1.4;
61
+ margin-bottom: 30px; }
62
+ @media (max-width: 767px) {
63
+ .ecwid-thank h1 {
64
+ font-size: 22px;
65
+ max-width: 490px;
66
+ padding: 0 2%;
67
+ margin: 0 auto 15px; }
68
+ .ecwid-thank h1 br {
69
+ display: none; } }
70
+ @media (max-width: 500px) {
71
+ .ecwid-thank h1 {
72
+ max-width: 320px; } }
73
+ .ecwid-thank h1 span {
74
+ display: block;
75
+ font-size: 14px;
76
+ margin-bottom: 14px; }
77
+
78
+ .ecwid-thank-steps {
79
+ margin: 0 auto 51px;
80
+ max-width: 1000px; }
81
+ @media (max-width: 767px) {
82
+ .ecwid-thank-steps {
83
+ max-width: 450px;
84
+ margin-bottom: 0;
85
+ padding: 0 2%; } }
86
+ .ecwid-thank-steps:after {
87
+ content: "";
88
+ display: table;
89
+ clear: both; }
90
+
91
+ .ecwid-thank-step {
92
+ text-align: center;
93
+ width: 33.33333%;
94
+ float: left;
95
+ position: relative;
96
+ padding: 0 2%; }
97
+ .ecwid-thank-step.active .ecwid-thank-step-image:before {
98
+ position: absolute;
99
+ content: url("../images/landing/correct.svg");
100
+ width: 17px;
101
+ left: 61%; }
102
+ .ecwid-thank-step.active .ecwid-thank-step-image img.none-active {
103
+ display: none; }
104
+ .ecwid-thank-step.active .ecwid-thank-step-image img.active {
105
+ display: inline-block; }
106
+ @media (max-width: 767px) {
107
+ .ecwid-thank-step {
108
+ display: none; } }
109
+ .ecwid-thank-step .ecwid-thank-step-image {
110
+ height: 92px;
111
+ position: relative; }
112
+ .ecwid-thank-step .ecwid-thank-step-image:after {
113
+ content: "";
114
+ position: absolute;
115
+ overflow: hidden; }
116
+ @media (min-width: 768px) {
117
+ .ecwid-thank-step .ecwid-thank-step-image:after {
118
+ top: 40px;
119
+ left: 77%;
120
+ width: 64%;
121
+ height: 7px;
122
+ background: url("../images/landing/arrow.png") center right; } }
123
+ .ecwid-thank-step img {
124
+ margin: 3px 0 10px; }
125
+ .ecwid-thank-step img.active {
126
+ display: none; }
127
+ .ecwid-thank-step h2 {
128
+ font-size: 18px;
129
+ line-height: 1.5;
130
+ margin-bottom: 6px; }
131
+ .ecwid-thank-step p {
132
+ font-size: 14px;
133
+ line-height: 1.5; }
134
+ .ecwid-thank-step.ecwid-thank-step-one img {
135
+ height: 77px; }
136
+ .ecwid-thank-step.ecwid-thank-step-two img {
137
+ height: 60px;
138
+ margin-top: 13px; }
139
+ .ecwid-thank-step.ecwid-thank-step-three .ecwid-thank-step-image:after {
140
+ display: none; }
141
+ .ecwid-thank-step.ecwid-thank-step-three h2 {
142
+ font-weight: 600; }
143
+ .ecwid-thank-step.ecwid-thank-step-three img {
144
+ height: 82px; }
145
+
146
+ .ecwid-thank-background {
147
+ background: url("../images/landing/background-think.jpg");
148
+ background-size: cover; }
149
+ @media (min-width: 768px) {
150
+ .ecwid-thank-background {
151
+ background-position: center bottom; } }
152
+ @media (min-width: 1440px) {
153
+ .ecwid-thank-background {
154
+ background-position: left -50px; } }
155
+ .ecwid-thank-background .ecwid-thank-background-tablet {
156
+ padding: 52px 5% 0; }
157
+ .ecwid-thank-background .ecwid-thank-background-tablet img {
158
+ display: block;
159
+ margin: 0 auto;
160
+ max-width: 100%; }
161
+
162
+ .ecwid-description {
163
+ padding: 0 2%; }
164
+ .ecwid-description:after {
165
+ content: "";
166
+ display: table;
167
+ clear: both; }
168
+
169
+ .ecwid-description-inner {
170
+ max-width: 930px;
171
+ margin: 0 auto;
172
+ table-layout: fixed;
173
+ width: 100%; }
174
+ @media (min-width: 768px) {
175
+ .ecwid-description-inner {
176
+ display: table;
177
+ padding-top: 35px; } }
178
+ @media (min-width: 992px) {
179
+ .ecwid-description-inner {
180
+ padding-top: 95px; } }
181
+ @media (max-width: 767px) {
182
+ .ecwid-description-inner {
183
+ display: -webkit-flex;
184
+ display: -ms-flexbox;
185
+ display: flex;
186
+ -webkit-flex-direction: column-reverse;
187
+ -ms-flex-direction: column-reverse;
188
+ flex-direction: column-reverse; } }
189
+
190
+ .ecwid-description-image {
191
+ padding-right: 5%;
192
+ vertical-align: bottom; }
193
+ @media (min-width: 768px) {
194
+ .ecwid-description-image {
195
+ display: table-cell;
196
+ width: 60%; } }
197
+ @media (min-width: 992px) {
198
+ .ecwid-description-image {
199
+ width: 65%; } }
200
+ @media (max-width: 767px) {
201
+ .ecwid-description-image {
202
+ width: 100%;
203
+ padding: 0 4%; } }
204
+ .ecwid-description-image img {
205
+ display: block;
206
+ max-width: 100%; }
207
+ @media (max-width: 767px) {
208
+ .ecwid-description-image img {
209
+ margin: 0 auto; } }
210
+
211
+ .ecwid-description-text {
212
+ padding-top: 35px;
213
+ padding-bottom: 35px; }
214
+ @media (min-width: 768px) {
215
+ .ecwid-description-text {
216
+ width: 40%;
217
+ display: table-cell;
218
+ vertical-align: middle; } }
219
+ @media (min-width: 992px) {
220
+ .ecwid-description-text {
221
+ width: 35%;
222
+ vertical-align: baseline; } }
223
+ @media (max-width: 767px) {
224
+ .ecwid-description-text {
225
+ padding: 44px 4% 0;
226
+ max-width: 500px;
227
+ margin: 0 auto 50px;
228
+ width: 100%; } }
229
+ .ecwid-description-text h2 {
230
+ line-height: 1.2;
231
+ margin-bottom: 18px; }
232
+ @media (min-width: 768px) {
233
+ .ecwid-description-text h2 {
234
+ font-size: 24px; } }
235
+ @media (min-width: 992px) {
236
+ .ecwid-description-text h2 {
237
+ font-size: 28px; } }
238
+ @media (max-width: 767px) {
239
+ .ecwid-description-text h2 {
240
+ font-size: 22px;
241
+ text-align: center; } }
242
+ .ecwid-description-text p {
243
+ font-size: 14px;
244
+ line-height: 1.5;
245
+ padding: 0.8em 0; }
246
+
247
+ .ecwid-features {
248
+ background-color: #F4F4F4;
249
+ padding: 44px 0 60px; }
250
+ @media (max-width: 767px) {
251
+ .ecwid-features {
252
+ padding-bottom: 9px; } }
253
+ .ecwid-features h2 {
254
+ font-size: 28px;
255
+ color: #1F1F1F;
256
+ font-weight: 400;
257
+ text-align: center;
258
+ margin-bottom: 62px; }
259
+ @media (max-width: 767px) {
260
+ .ecwid-features h2 {
261
+ font-size: 22px;
262
+ margin-bottom: 40px; } }
263
+
264
+ .ecwid-features-inner {
265
+ margin: 0 auto;
266
+ max-width: 930px;
267
+ padding: 0 3%; }
268
+
269
+ .ecwid-features-top {
270
+ margin-bottom: 70px; }
271
+ @media (max-width: 767px) {
272
+ .ecwid-features-top {
273
+ margin-bottom: 0; } }
274
+ .ecwid-features-top:after {
275
+ content: "";
276
+ display: table;
277
+ clear: both; }
278
+ .ecwid-features-top .ecwid-features-top-item {
279
+ width: 50%;
280
+ float: left;
281
+ text-align: center; }
282
+ @media (max-width: 767px) {
283
+ .ecwid-features-top .ecwid-features-top-item {
284
+ padding: 0 2%;
285
+ width: 100%;
286
+ max-width: 320px;
287
+ margin: 0 auto 35px;
288
+ float: none; } }
289
+ .ecwid-features-top .ecwid-features-top-item .ecwid-features-top-item-image {
290
+ height: 82px; }
291
+ @media (max-width: 767px) {
292
+ .ecwid-features-top .ecwid-features-top-item .ecwid-features-top-item-image {
293
+ height: 75px; } }
294
+ .ecwid-features-top .ecwid-features-top-item img {
295
+ height: 61px;
296
+ margin-bottom: 36px; }
297
+ @media (max-width: 767px) {
298
+ .ecwid-features-top .ecwid-features-top-item img {
299
+ margin-bottom: 20px; } }
300
+ .ecwid-features-top .ecwid-features-top-item img.gift {
301
+ height: 80px;
302
+ margin-top: -10px; }
303
+ .ecwid-features-top .ecwid-features-top-item h3 {
304
+ font-size: 21px;
305
+ font-weight: 600;
306
+ margin-bottom: 15px; }
307
+ @media (max-width: 767px) {
308
+ .ecwid-features-top .ecwid-features-top-item h3 {
309
+ font-size: 18px;
310
+ margin-bottom: 6px; } }
311
+ .ecwid-features-top .ecwid-features-top-item p {
312
+ font-size: 14px;
313
+ line-height: 1.45; }
314
+ @media (max-width: 767px) {
315
+ .ecwid-features-top .ecwid-features-top-item p {
316
+ font-size: 13px; } }
317
+
318
+ .ecwid-features-bottom:after {
319
+ content: "";
320
+ display: table;
321
+ clear: both; }
322
+ .ecwid-features-bottom .ecwid-features-bottom-item {
323
+ width: 33.33333%;
324
+ float: left;
325
+ text-align: center; }
326
+ @media (max-width: 767px) {
327
+ .ecwid-features-bottom .ecwid-features-bottom-item {
328
+ float: none;
329
+ width: 100%;
330
+ max-width: 270px;
331
+ margin: 0 auto 35px; } }
332
+ .ecwid-features-bottom .ecwid-features-bottom-item .ecwid-features-bottom-item-image {
333
+ height: 82px; }
334
+ @media (max-width: 767px) {
335
+ .ecwid-features-bottom .ecwid-features-bottom-item .ecwid-features-bottom-item-image {
336
+ height: 75px; } }
337
+ .ecwid-features-bottom .ecwid-features-bottom-item img {
338
+ height: 63px;
339
+ margin-bottom: 17px; }
340
+ .ecwid-features-bottom .ecwid-features-bottom-item img.secure {
341
+ height: 67px; }
342
+ @media (min-width: 768px) {
343
+ .ecwid-features-bottom .ecwid-features-bottom-item img.secure {
344
+ margin-top: -8px; } }
345
+ .ecwid-features-bottom .ecwid-features-bottom-item h3 {
346
+ font-size: 18px;
347
+ font-weight: 600;
348
+ margin-bottom: 6px; }
349
+ .ecwid-features-bottom .ecwid-features-bottom-item p {
350
+ font-size: 14px;
351
+ line-height: 1.45; }
352
+ @media (max-width: 767px) {
353
+ .ecwid-features-bottom .ecwid-features-bottom-item p {
354
+ font-size: 13px; }
355
+ .ecwid-features-bottom .ecwid-features-bottom-item p br {
356
+ display: none; } }
357
+
358
+ .ecwid-start {
359
+ text-align: center;
360
+ padding: 64px 0 194px; }
361
+ @media (max-width: 767px) {
362
+ .ecwid-start {
363
+ padding: 44px 0 64px; }
364
+ .ecwid-start .ecwid-button .button {
365
+ margin-bottom: 29px; } }
366
+ .ecwid-start:after {
367
+ content: "";
368
+ display: table;
369
+ clear: both; }
370
+ .ecwid-start h2 {
371
+ font-size: 28px;
372
+ line-height: 1.4;
373
+ margin-bottom: 32px; }
374
+ @media (max-width: 767px) {
375
+ .ecwid-start h2 {
376
+ font-size: 22px;
377
+ padding: 0 2%;
378
+ margin-bottom: 1px; } }
379
+
380
+ .ecwid-button {
381
+ text-align: center; }
382
+ .ecwid-button a,
383
+ .ecwid-button button {
384
+ background-image: none; }
385
+ .ecwid-button .button {
386
+ border-radius: 4px;
387
+ border: 0;
388
+ font-size: 20px;
389
+ color: #ffffff;
390
+ line-height: 2.6;
391
+ letter-spacing: 0.01em;
392
+ padding: 0.12em 1.5em;
393
+ margin-bottom: 46px;
394
+ outline: none;
395
+ cursor: pointer; }
396
+ @media (max-width: 767px) {
397
+ .ecwid-button .button {
398
+ font-size: 18px;
399
+ margin-top: 25px;
400
+ margin-bottom: 14px;
401
+ padding: 0.12em 1em; } }
402
+ @media (max-width: 500px) {
403
+ .ecwid-button .button {
404
+ font-size: 16px; } }
405
+ .ecwid-button .button:hover {
406
+ opacity: 0.8; }
407
+ .ecwid-button .button.button--blue {
408
+ background-color: #189DEE; }
409
+ .ecwid-button .button.button--green {
410
+ background-color: #59BB00; }
411
+ .ecwid-button .button-description-mobile {
412
+ font-size: 12px;
413
+ line-height: 1.5;
414
+ margin-bottom: 38px;
415
+ color: #999; }
416
+ .ecwid-button .button-description-mobile h3 {
417
+ font-size: 18px;
418
+ color: #363636;
419
+ font-weight: 600;
420
+ margin-bottom: -70px; }
421
+ @media (min-width: 768px) {
422
+ .ecwid-button .button-description-mobile {
423
+ display: none; } }
424
+ .ecwid-button .ecwid-button-description {
425
+ font-size: 14px; }
426
+ .ecwid-button .ecwid-button-description a {
427
+ display: block;
428
+ font-size: 20px;
429
+ color: #288FB5;
430
+ margin-top: 12px;
431
+ text-decoration: none; }
432
+ .ecwid-button .ecwid-button-description a:hover {
433
+ opacity: 0.8; }
434
+ @media (max-width: 767px) {
435
+ .ecwid-button .ecwid-button-description a {
436
+ margin-bottom: 10px;
437
+ font-size: 18px; } }
438
+
439
+
440
+ /*
441
+ * Adapt landing to wordpress actual environment
442
+ */
443
+ .ecwid-button .button {
444
+ height: auto;
445
+ }
446
+
447
+ #wpcontent {
448
+ background: white;
449
+ padding-left: 0px;
450
+ }
451
+ ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu>li.current>a.current:after
452
+ {
453
+ border-right-color:white;
454
+ }
455
+
456
+ .ecwid-landing.register .on-connect {
457
+ display: none;
458
+ }
459
+
460
+
461
+ .ecwid-landing.connect .on-register {
462
+ display: none;
463
+ }
464
+
465
+ .ecwid-landing .on-error {
466
+ display: none;
467
+ }
468
+
469
+ .ecwid-landing.conn-error .on-error {
470
+ display: inherit;
471
+ }
472
+
473
+ .ecwid-landing.conn-error .on-no-error {
474
+ display: none;
475
+ }
476
+
477
+ .ecwid-button .ecwid-connection-error {
478
+ color: red;
479
+ }
480
+
481
+ @media (min-width: 768px) {
482
+ .ecwid-button .ecwid-connection-error {
483
+ position: relative;
484
+ top: -30px;
485
+ margin-bottom: 8px;
486
+ }
487
+ }
488
+
489
+ .ecwid-landing a:focus {
490
+ outline: 0px none;
491
+ box-shadow: none;
492
+ }
493
+
494
+ .ecwid-landing .button:hover {
495
+ color: white;
496
  }
css/page-editor.css CHANGED
@@ -1,58 +1,58 @@
1
- .mce-content-body img.ecwid-store-editor,
2
- .mceContentBody img.ecwid-store-editor
3
- {
4
- padding-top: 30px;
5
- background: #F1F1F1;
6
- border: 1px solid #E7E7E7;
7
- height: 200px;
8
- width: 100%;
9
- display: block;
10
- }
11
-
12
- .mce-content-body .ecwid-store-editor[data-ecwid-store-select="1"],
13
- .mceContentBody .ecwid-store-editor[data-ecwid-store-select="1"]
14
- {
15
- outline: 1px solid #777;
16
- }
17
-
18
- #ecwid-store-toolbar {
19
- position: absolute;
20
- }
21
-
22
- #ecwid-store-toolbar div {
23
- margin-top: 7px;
24
- margin-left: 7px;
25
- padding: 2px;
26
- width: 30px;
27
- height: 30px;
28
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
29
- background-color: #000;
30
- background-color: rgba(0, 0, 0, 0.9);
31
- cursor: pointer;
32
- color: #FFF;
33
- font-size: 30px;
34
- }
35
-
36
-
37
-
38
- #ecwid-edit-store-button {
39
- padding: 0 12px 2px;
40
- height: 30px;
41
- line-height: 28px;
42
-
43
- font-size: 12px;
44
-
45
- background: #2EA2CC;
46
- color: #FFF;
47
-
48
- border: 1px solid #0074A2;
49
- border-radius: 3px;
50
- box-shadow: inset 0 1px 0 rgba(120, 200, 230, 0.5), 0 1px 0 rgba(0, 0, 0, 0.15);
51
-
52
- cursor: pointer;
53
- }
54
-
55
-
56
- #ecwid-edit-store-button:hover {
57
- background: #1E8CBE;
58
  }
1
+ .mce-content-body img.ecwid-store-editor,
2
+ .mceContentBody img.ecwid-store-editor
3
+ {
4
+ padding-top: 30px;
5
+ background: #F1F1F1;
6
+ border: 1px solid #E7E7E7;
7
+ height: 200px;
8
+ width: 100%;
9
+ display: block;
10
+ }
11
+
12
+ .mce-content-body .ecwid-store-editor[data-ecwid-store-select="1"],
13
+ .mceContentBody .ecwid-store-editor[data-ecwid-store-select="1"]
14
+ {
15
+ outline: 1px solid #777;
16
+ }
17
+
18
+ #ecwid-store-toolbar {
19
+ position: absolute;
20
+ }
21
+
22
+ #ecwid-store-toolbar div {
23
+ margin-top: 7px;
24
+ margin-left: 7px;
25
+ padding: 2px;
26
+ width: 30px;
27
+ height: 30px;
28
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
29
+ background-color: #000;
30
+ background-color: rgba(0, 0, 0, 0.9);
31
+ cursor: pointer;
32
+ color: #FFF;
33
+ font-size: 30px;
34
+ }
35
+
36
+
37
+
38
+ #ecwid-edit-store-button {
39
+ padding: 0 12px 2px;
40
+ height: 30px;
41
+ line-height: 28px;
42
+
43
+ font-size: 12px;
44
+
45
+ background: #2EA2CC;
46
+ color: #FFF;
47
+
48
+ border: 1px solid #0074A2;
49
+ border-radius: 3px;
50
+ box-shadow: inset 0 1px 0 rgba(120, 200, 230, 0.5), 0 1px 0 rgba(0, 0, 0, 0.15);
51
+
52
+ cursor: pointer;
53
+ }
54
+
55
+
56
+ #ecwid-edit-store-button:hover {
57
+ background: #1E8CBE;
58
  }
css/products-list.css CHANGED
@@ -1,201 +1,201 @@
1
- /**
2
- * Common styles
3
- */
4
-
5
- .ecwid-initial-productsList-content {
6
- display: none;
7
- }
8
-
9
- .ecwid-productsList ul li.hide {
10
- display: none;
11
- }
12
-
13
- .ecwid-productsList {
14
- overflow: hidden;
15
- position: relative;
16
- }
17
-
18
-
19
- .ecwid-productsList ul,
20
- #widgets .ecwid-productsList ul
21
- {
22
- padding: 0px;
23
- margin: 0px;
24
- }
25
-
26
- .ecwid-productsList ul li {
27
- list-style: none;
28
- display: block;
29
- padding: 0px;
30
- }
31
-
32
- .ecwid-productsList ul li a,
33
- #widgets .ecwid-productsList ul li a
34
- {
35
- display: block;
36
- position: relative;
37
-
38
- border-radius: 5px;
39
- overflow: hidden;
40
-
41
- background: white;
42
- }
43
-
44
- .ecwid-productsList ul li a {
45
- opacity : .9;
46
- }
47
-
48
- .ecwid-productsList ul li:hover a {
49
- opacity: 1;
50
- }
51
-
52
- .ecwid-productsList .ecwid-productsList-name {
53
- color: #1E7EC8;
54
- }
55
-
56
- html#ecwid_html body#ecwid_body .ecwid-productsList .ecwid-productsList-image .ecwid-noimage {
57
- background-color: white;
58
- opacity: 1;
59
- }
60
-
61
- .ecwid-productsList ul li .ecwid-productsList-name,
62
- .ecwid-productsList ul li .ecwid-productsList-price,
63
- .ecwid-productsList ul li .ecwid-productsList-image,
64
- .ecwid-productsList ul li .ecwid-productsList-image img
65
- {
66
- width: 100%;
67
- text-align: center;
68
- }
69
-
70
- html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-name
71
- {
72
- font-size: 12px;
73
-
74
- white-space: nowrap;
75
- overflow: hidden;
76
- text-overflow: ellipsis;
77
- }
78
-
79
- html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-price
80
- {
81
- font-size: 14px;
82
- }
83
-
84
- /*
85
- * Narrow layout
86
- */
87
- .ecwid-productsList.width-s ul li .ecwid-productsList-name,
88
- .ecwid-productsList.width-s ul li .ecwid-productsList-price
89
- {
90
- display: none;
91
- }
92
-
93
- .ecwid-productsList.width-s ul li {
94
- padding: 5px 0px;
95
- }
96
-
97
- /*
98
- * Medium width layout
99
- */
100
-
101
- .ecwid-productsList.width-m ul li {
102
- padding-top: 10px;
103
- padding-bottom: 14px;
104
- }
105
-
106
- .ecwid-productsList.width-m ul li .ecwid-productsList-image {
107
- border-bottom-left-radius: 0px;
108
- border-bottom-right-radius: 0px;
109
- }
110
-
111
- html#ecwid_html body#ecwid_body .ecwid-productsList.width-m ul li .ecwid-productsList-name {
112
- padding-top: 3px;
113
- }
114
-
115
- html#ecwid_html body#ecwid_body .ecwid-productsList.width-m ul li .ecwid-productsList-price
116
- {
117
- padding-bottom: 8px;
118
- }
119
-
120
- .ecwid-productsList.width-m ul li .ecwid-productsList-price,
121
- .ecwid-productsList.width-m ul li .ecwid-productsList-name {
122
- width: auto;
123
- margin: 0 5px;
124
- }
125
-
126
-
127
- /*
128
- * Wide layout
129
- */
130
- .ecwid-productsList.width-l ul li
131
- {
132
- margin: 6px 0px;
133
- }
134
-
135
- .ecwid-productsList.width-l ul li a {
136
- min-height: 60px;
137
- }
138
-
139
-
140
- .ecwid-productsList.width-l ul li .ecwid-productsList-image,
141
- .ecwid-productsList.width-l ul li .ecwid-productsList-name,
142
- .ecwid-productsList.width-l ul li .ecwid-productsList-price
143
- {
144
- text-align: left;
145
- }
146
-
147
- .ecwid-productsList.width-l ul li .ecwid-productsList-image {
148
- display: table-cell;
149
- vertical-align: middle;
150
- height: 60px;
151
- padding: 5px;
152
- }
153
-
154
- .ecwid-productsList.width-l ul li .ecwid-productsList-image img {
155
- width: auto;
156
- max-width: 75px;
157
- display: block;
158
- margin: 0px auto;
159
- }
160
-
161
- html#ecwid_html body#ecwid_body .ecwid-productsList div.ecwid-productsList-image.ecwid-noimage {
162
- background-position: 50% 50%;
163
- background-size: 55px 55px;
164
- opacity: 1;
165
- width: 75px;
166
- height: 60px;
167
- padding: 5px;
168
- }
169
-
170
- .ecwid-productsList.width-l ul li .ecwid-productsList-name,
171
- .ecwid-productsList.width-l ul li .ecwid-productsList-price
172
- {
173
- width: auto;
174
- position: absolute;
175
- left: 93px;
176
- right: 0px;
177
- overflow: hidden;
178
- white-space: nowrap;
179
- text-overflow: ellipsis;
180
- }
181
-
182
- .ecwid-productsList.width-l ul li .ecwid-productsList-name {
183
- bottom: 50%;
184
- margin-bottom: 4px;
185
- }
186
-
187
-
188
- .ecwid-productsList.width-l ul li .ecwid-productsList-price {
189
- top: 50%;
190
- margin-top: -2px;
191
- }
192
-
193
- html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-name
194
- {
195
- font-size: 12px;
196
- }
197
-
198
- html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-price
199
- {
200
- font-size: 14px;
201
  }
1
+ /**
2
+ * Common styles
3
+ */
4
+
5
+ .ecwid-initial-productsList-content {
6
+ display: none;
7
+ }
8
+
9
+ .ecwid-productsList ul li.hide {
10
+ display: none;
11
+ }
12
+
13
+ .ecwid-productsList {
14
+ overflow: hidden;
15
+ position: relative;
16
+ }
17
+
18
+
19
+ .ecwid-productsList ul,
20
+ #widgets .ecwid-productsList ul
21
+ {
22
+ padding: 0px;
23
+ margin: 0px;
24
+ }
25
+
26
+ .ecwid-productsList ul li {
27
+ list-style: none;
28
+ display: block;
29
+ padding: 0px;
30
+ }
31
+
32
+ .ecwid-productsList ul li a,
33
+ #widgets .ecwid-productsList ul li a
34
+ {
35
+ display: block;
36
+ position: relative;
37
+
38
+ border-radius: 5px;
39
+ overflow: hidden;
40
+
41
+ background: white;
42
+ }
43
+
44
+ .ecwid-productsList ul li a {
45
+ opacity : .9;
46
+ }
47
+
48
+ .ecwid-productsList ul li:hover a {
49
+ opacity: 1;
50
+ }
51
+
52
+ .ecwid-productsList .ecwid-productsList-name {
53
+ color: #1E7EC8;
54
+ }
55
+
56
+ html#ecwid_html body#ecwid_body .ecwid-productsList .ecwid-productsList-image .ecwid-noimage {
57
+ background-color: white;
58
+ opacity: 1;
59
+ }
60
+
61
+ .ecwid-productsList ul li .ecwid-productsList-name,
62
+ .ecwid-productsList ul li .ecwid-productsList-price,
63
+ .ecwid-productsList ul li .ecwid-productsList-image,
64
+ .ecwid-productsList ul li .ecwid-productsList-image img
65
+ {
66
+ width: 100%;
67
+ text-align: center;
68
+ }
69
+
70
+ html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-name
71
+ {
72
+ font-size: 12px;
73
+
74
+ white-space: nowrap;
75
+ overflow: hidden;
76
+ text-overflow: ellipsis;
77
+ }
78
+
79
+ html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-price
80
+ {
81
+ font-size: 14px;
82
+ }
83
+
84
+ /*
85
+ * Narrow layout
86
+ */
87
+ .ecwid-productsList.width-s ul li .ecwid-productsList-name,
88
+ .ecwid-productsList.width-s ul li .ecwid-productsList-price
89
+ {
90
+ display: none;
91
+ }
92
+
93
+ .ecwid-productsList.width-s ul li {
94
+ padding: 5px 0px;
95
+ }
96
+
97
+ /*
98
+ * Medium width layout
99
+ */
100
+
101
+ .ecwid-productsList.width-m ul li {
102
+ padding-top: 10px;
103
+ padding-bottom: 14px;
104
+ }
105
+
106
+ .ecwid-productsList.width-m ul li .ecwid-productsList-image {
107
+ border-bottom-left-radius: 0px;
108
+ border-bottom-right-radius: 0px;
109
+ }
110
+
111
+ html#ecwid_html body#ecwid_body .ecwid-productsList.width-m ul li .ecwid-productsList-name {
112
+ padding-top: 3px;
113
+ }
114
+
115
+ html#ecwid_html body#ecwid_body .ecwid-productsList.width-m ul li .ecwid-productsList-price
116
+ {
117
+ padding-bottom: 8px;
118
+ }
119
+
120
+ .ecwid-productsList.width-m ul li .ecwid-productsList-price,
121
+ .ecwid-productsList.width-m ul li .ecwid-productsList-name {
122
+ width: auto;
123
+ margin: 0 5px;
124
+ }
125
+
126
+
127
+ /*
128
+ * Wide layout
129
+ */
130
+ .ecwid-productsList.width-l ul li
131
+ {
132
+ margin: 6px 0px;
133
+ }
134
+
135
+ .ecwid-productsList.width-l ul li a {
136
+ min-height: 60px;
137
+ }
138
+
139
+
140
+ .ecwid-productsList.width-l ul li .ecwid-productsList-image,
141
+ .ecwid-productsList.width-l ul li .ecwid-productsList-name,
142
+ .ecwid-productsList.width-l ul li .ecwid-productsList-price
143
+ {
144
+ text-align: left;
145
+ }
146
+
147
+ .ecwid-productsList.width-l ul li .ecwid-productsList-image {
148
+ display: table-cell;
149
+ vertical-align: middle;
150
+ height: 60px;
151
+ padding: 5px;
152
+ }
153
+
154
+ .ecwid-productsList.width-l ul li .ecwid-productsList-image img {
155
+ width: auto;
156
+ max-width: 75px;
157
+ display: block;
158
+ margin: 0px auto;
159
+ }
160
+
161
+ html#ecwid_html body#ecwid_body .ecwid-productsList div.ecwid-productsList-image.ecwid-noimage {
162
+ background-position: 50% 50%;
163
+ background-size: 55px 55px;
164
+ opacity: 1;
165
+ width: 75px;
166
+ height: 60px;
167
+ padding: 5px;
168
+ }
169
+
170
+ .ecwid-productsList.width-l ul li .ecwid-productsList-name,
171
+ .ecwid-productsList.width-l ul li .ecwid-productsList-price
172
+ {
173
+ width: auto;
174
+ position: absolute;
175
+ left: 93px;
176
+ right: 0px;
177
+ overflow: hidden;
178
+ white-space: nowrap;
179
+ text-overflow: ellipsis;
180
+ }
181
+
182
+ .ecwid-productsList.width-l ul li .ecwid-productsList-name {
183
+ bottom: 50%;
184
+ margin-bottom: 4px;
185
+ }
186
+
187
+
188
+ .ecwid-productsList.width-l ul li .ecwid-productsList-price {
189
+ top: 50%;
190
+ margin-top: -2px;
191
+ }
192
+
193
+ html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-name
194
+ {
195
+ font-size: 12px;
196
+ }
197
+
198
+ html#ecwid_html body#ecwid_body .ecwid-productsList ul li .ecwid-productsList-price
199
+ {
200
+ font-size: 14px;
201
  }
css/pure-min.css CHANGED
@@ -1,11 +1,11 @@
1
- /*!
2
- Pure v0.3.0
3
- Copyright 2013 Yahoo! Inc. All rights reserved.
4
- Licensed under the BSD License.
5
- https://github.com/yui/pure/blob/master/LICENSE.md
6
- */
7
- /*!
8
- normalize.css v1.1.2 | MIT License | git.io/normalize
9
- Copyright (c) Nicolas Gallagher and Jonathan Neal
10
- */
11
  /*! normalize.css v1.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1.5em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px;-webkit-transition:.1s linear -webkit-box-shadow;-moz-transition:.1s linear -moz-box-shadow;-ms-transition:.1s linear box-shadow;-o-transition:.1s linear box-shadow;transition:.1s linear box-shadow}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-ms-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;font-size:.8em;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-transition:.3s linear border;-moz-transition:.3s linear border;-ms-transition:.3s linear border;-o-transition:.3s linear border;transition:.3s linear border;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin dotted #333;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border:1px solid #ee5f5b}.pure-form input:focus:invalid:focus,.pure-form textarea:focus:invalid:focus,.pure-form select:focus:invalid:focus{border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em;font-size:90%}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;font-size:125%;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 10em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input{display:block;padding:10px;margin:0;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus{z-index:2}.pure-form .pure-group input:first-child{top:1px;border-radius:4px 4px 0 0}.pure-form .pure-group input:last-child{top:-2px;border-radius:0 0 4px 4px}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.pure-form-message{display:block;color:#666;font-size:90%}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:80%;padding:.2em 0 .8em}}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-5-24,.pure-u-7-24,.pure-u-11-24,.pure-u-13-24,.pure-u-17-24,.pure-u-19-24,.pure-u-23-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1{width:100%}.pure-u-1-2{width:50%;*width:49.969%}.pure-u-1-3{width:33.3333%;*width:33.3023%}.pure-u-2-3{width:66.6667%;*width:66.6357%}.pure-u-1-4{width:25%;*width:24.969%}.pure-u-3-4{width:75%;*width:74.969%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-1-6{width:16.6667%;*width:16.6357%}.pure-u-5-6{width:83.3333%;*width:83.3023%}.pure-u-1-8{width:12.5%;*width:12.469%}.pure-u-3-8{width:37.5%;*width:37.469%}.pure-u-5-8{width:62.5%;*width:62.469%}.pure-u-7-8{width:87.5%;*width:87.469%}.pure-u-1-12{width:8.3333%;*width:8.3023%}.pure-u-5-12{width:41.6667%;*width:41.6357%}.pure-u-7-12{width:58.3333%;*width:58.3023%}.pure-u-11-12{width:91.6667%;*width:91.6357%}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-g-r{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g-r{word-spacing:-.43em}.pure-g-r [class *="pure-u"]{font-family:sans-serif}.pure-g-r img{max-width:100%;height:auto}@media (min-width:980px){.pure-visible-phone{display:none}.pure-visible-tablet{display:none}.pure-hidden-desktop{display:none}}@media (max-width:480px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}}@media (max-width:767px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}.pure-hidden-phone{display:none}.pure-visible-desktop{display:none}}@media (min-width:768px) and (max-width:979px){.pure-hidden-tablet{display:none}.pure-visible-desktop{display:none}}.pure-menu ul{position:absolute;visibility:hidden}.pure-menu.pure-menu-open{visibility:visible;z-index:2;width:100%}.pure-menu ul{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.pure-menu>ul{position:relative}.pure-menu-open>ul{left:0;top:0;visibility:visible}.pure-menu-open>ul:focus{outline:0}.pure-menu li{position:relative}.pure-menu a,.pure-menu .pure-menu-heading{display:block;color:inherit;line-height:1.5em;padding:5px 20px;text-decoration:none;white-space:nowrap}.pure-menu.pure-menu-horizontal>.pure-menu-heading{display:inline-block;*display:inline;zoom:1;margin:0;vertical-align:middle}.pure-menu.pure-menu-horizontal>ul{display:inline-block;*display:inline;zoom:1;vertical-align:middle;height:2.4em}.pure-menu li a{padding:5px 20px}.pure-menu-can-have-children>.pure-menu-label:after{content:'\25B8';float:right;font-family:'Lucida Grande','Lucida Sans Unicode','DejaVu Sans',sans-serif;margin-right:-20px;margin-top:-1px}.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px 2px;overflow:hidden}.pure-menu-hidden{display:none}.pure-menu-fixed{position:fixed;top:0;left:0;width:100%}.pure-menu-horizontal li{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-horizontal li li{display:block}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label:after{content:"\25BE"}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-horizontal li.pure-menu-separator{height:50%;width:1px;margin:0 7px}.pure-menu-horizontal li li.pure-menu-separator{height:1px;width:auto;margin:7px 2px}.pure-menu.pure-menu-open,.pure-menu.pure-menu-horizontal li .pure-menu-children{background:#fff;border:1px solid #b7b7b7}.pure-menu.pure-menu-horizontal,.pure-menu.pure-menu-horizontal .pure-menu-heading{border:0}.pure-menu a{border:1px solid transparent;border-left:0;border-right:0}.pure-menu a,.pure-menu .pure-menu-can-have-children>li:after{color:#777}.pure-menu .pure-menu-can-have-children>li:hover:after{color:#fff}.pure-menu .pure-menu-open{background:#dedede}.pure-menu li a:hover,.pure-menu li a:focus{background:#eee}.pure-menu li.pure-menu-disabled a:hover,.pure-menu li.pure-menu-disabled a:focus{background:#fff;color:#bfbfbf}.pure-menu .pure-menu-disabled>a{background-image:none;border-color:transparent;cursor:default}.pure-menu .pure-menu-disabled>a,.pure-menu .pure-menu-can-have-children.pure-menu-disabled>a:after{color:#bfbfbf}.pure-menu .pure-menu-heading{color:#565d64;text-transform:uppercase;font-size:90%;margin-top:.5em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dfdfdf}.pure-menu .pure-menu-selected a{color:#000}.pure-menu.pure-menu-open.pure-menu-fixed{border:0;border-bottom:1px solid #b7b7b7}.pure-paginator{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;list-style:none;margin:0;padding:0}.opera-only :-o-prefocus,.pure-paginator{word-spacing:-.43em}.pure-paginator li{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-paginator .pure-button{border-radius:0;padding:.8em 1.4em;vertical-align:top;height:1.1em}.pure-paginator .pure-button:focus,.pure-paginator .pure-button:active{outline-style:none}.pure-paginator .prev,.pure-paginator .next{color:#C0C1C3;text-shadow:0 -1px 0 rgba(0,0,0,.45)}.pure-paginator .prev{border-radius:2px 0 0 2px}.pure-paginator .next{border-radius:0 2px 2px 0}@media (max-width:480px){.pure-menu-horizontal{width:100%}.pure-menu-children li{display:block;border-bottom:1px solid #000}}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:6px 12px}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}
1
+ /*!
2
+ Pure v0.3.0
3
+ Copyright 2013 Yahoo! Inc. All rights reserved.
4
+ Licensed under the BSD License.
5
+ https://github.com/yui/pure/blob/master/LICENSE.md
6
+ */
7
+ /*!
8
+ normalize.css v1.1.2 | MIT License | git.io/normalize
9
+ Copyright (c) Nicolas Gallagher and Jonathan Neal
10
+ */
11
  /*! normalize.css v1.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1.5em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px;-webkit-transition:.1s linear -webkit-box-shadow;-moz-transition:.1s linear -moz-box-shadow;-ms-transition:.1s linear box-shadow;-o-transition:.1s linear box-shadow;transition:.1s linear box-shadow}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-ms-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;font-size:.8em;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-transition:.3s linear border;-moz-transition:.3s linear border;-ms-transition:.3s linear border;-o-transition:.3s linear border;transition:.3s linear border;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin dotted #333;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border:1px solid #ee5f5b}.pure-form input:focus:invalid:focus,.pure-form textarea:focus:invalid:focus,.pure-form select:focus:invalid:focus{border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em;font-size:90%}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;font-size:125%;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 10em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input{display:block;padding:10px;margin:0;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus{z-index:2}.pure-form .pure-group input:first-child{top:1px;border-radius:4px 4px 0 0}.pure-form .pure-group input:last-child{top:-2px;border-radius:0 0 4px 4px}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.pure-form-message{display:block;color:#666;font-size:90%}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:80%;padding:.2em 0 .8em}}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-5-24,.pure-u-7-24,.pure-u-11-24,.pure-u-13-24,.pure-u-17-24,.pure-u-19-24,.pure-u-23-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1{width:100%}.pure-u-1-2{width:50%;*width:49.969%}.pure-u-1-3{width:33.3333%;*width:33.3023%}.pure-u-2-3{width:66.6667%;*width:66.6357%}.pure-u-1-4{width:25%;*width:24.969%}.pure-u-3-4{width:75%;*width:74.969%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-1-6{width:16.6667%;*width:16.6357%}.pure-u-5-6{width:83.3333%;*width:83.3023%}.pure-u-1-8{width:12.5%;*width:12.469%}.pure-u-3-8{width:37.5%;*width:37.469%}.pure-u-5-8{width:62.5%;*width:62.469%}.pure-u-7-8{width:87.5%;*width:87.469%}.pure-u-1-12{width:8.3333%;*width:8.3023%}.pure-u-5-12{width:41.6667%;*width:41.6357%}.pure-u-7-12{width:58.3333%;*width:58.3023%}.pure-u-11-12{width:91.6667%;*width:91.6357%}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-g-r{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g-r{word-spacing:-.43em}.pure-g-r [class *="pure-u"]{font-family:sans-serif}.pure-g-r img{max-width:100%;height:auto}@media (min-width:980px){.pure-visible-phone{display:none}.pure-visible-tablet{display:none}.pure-hidden-desktop{display:none}}@media (max-width:480px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}}@media (max-width:767px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}.pure-hidden-phone{display:none}.pure-visible-desktop{display:none}}@media (min-width:768px) and (max-width:979px){.pure-hidden-tablet{display:none}.pure-visible-desktop{display:none}}.pure-menu ul{position:absolute;visibility:hidden}.pure-menu.pure-menu-open{visibility:visible;z-index:2;width:100%}.pure-menu ul{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.pure-menu>ul{position:relative}.pure-menu-open>ul{left:0;top:0;visibility:visible}.pure-menu-open>ul:focus{outline:0}.pure-menu li{position:relative}.pure-menu a,.pure-menu .pure-menu-heading{display:block;color:inherit;line-height:1.5em;padding:5px 20px;text-decoration:none;white-space:nowrap}.pure-menu.pure-menu-horizontal>.pure-menu-heading{display:inline-block;*display:inline;zoom:1;margin:0;vertical-align:middle}.pure-menu.pure-menu-horizontal>ul{display:inline-block;*display:inline;zoom:1;vertical-align:middle;height:2.4em}.pure-menu li a{padding:5px 20px}.pure-menu-can-have-children>.pure-menu-label:after{content:'\25B8';float:right;font-family:'Lucida Grande','Lucida Sans Unicode','DejaVu Sans',sans-serif;margin-right:-20px;margin-top:-1px}.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px 2px;overflow:hidden}.pure-menu-hidden{display:none}.pure-menu-fixed{position:fixed;top:0;left:0;width:100%}.pure-menu-horizontal li{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-horizontal li li{display:block}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label:after{content:"\25BE"}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-horizontal li.pure-menu-separator{height:50%;width:1px;margin:0 7px}.pure-menu-horizontal li li.pure-menu-separator{height:1px;width:auto;margin:7px 2px}.pure-menu.pure-menu-open,.pure-menu.pure-menu-horizontal li .pure-menu-children{background:#fff;border:1px solid #b7b7b7}.pure-menu.pure-menu-horizontal,.pure-menu.pure-menu-horizontal .pure-menu-heading{border:0}.pure-menu a{border:1px solid transparent;border-left:0;border-right:0}.pure-menu a,.pure-menu .pure-menu-can-have-children>li:after{color:#777}.pure-menu .pure-menu-can-have-children>li:hover:after{color:#fff}.pure-menu .pure-menu-open{background:#dedede}.pure-menu li a:hover,.pure-menu li a:focus{background:#eee}.pure-menu li.pure-menu-disabled a:hover,.pure-menu li.pure-menu-disabled a:focus{background:#fff;color:#bfbfbf}.pure-menu .pure-menu-disabled>a{background-image:none;border-color:transparent;cursor:default}.pure-menu .pure-menu-disabled>a,.pure-menu .pure-menu-can-have-children.pure-menu-disabled>a:after{color:#bfbfbf}.pure-menu .pure-menu-heading{color:#565d64;text-transform:uppercase;font-size:90%;margin-top:.5em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dfdfdf}.pure-menu .pure-menu-selected a{color:#000}.pure-menu.pure-menu-open.pure-menu-fixed{border:0;border-bottom:1px solid #b7b7b7}.pure-paginator{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;list-style:none;margin:0;padding:0}.opera-only :-o-prefocus,.pure-paginator{word-spacing:-.43em}.pure-paginator li{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-paginator .pure-button{border-radius:0;padding:.8em 1.4em;vertical-align:top;height:1.1em}.pure-paginator .pure-button:focus,.pure-paginator .pure-button:active{outline-style:none}.pure-paginator .prev,.pure-paginator .next{color:#C0C1C3;text-shadow:0 -1px 0 rgba(0,0,0,.45)}.pure-paginator .prev{border-radius:2px 0 0 2px}.pure-paginator .next{border-radius:0 2px 2px 0}@media (max-width:480px){.pure-menu-horizontal{width:100%}.pure-menu-children li{display:block;border-bottom:1px solid #000}}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:6px 12px}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}
css/recently-viewed.css CHANGED
@@ -1,109 +1,109 @@
1
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product {
2
- display: block;
3
- position: relative;
4
- opacity: .85;
5
- }
6
-
7
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:not(:first-child) {
8
- border-top: 1px solid #CCC;
9
- }
10
-
11
-
12
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-price {
13
- font-size: 14px;
14
- }
15
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title {
16
- font-size: 12px;
17
- height: 2em;
18
- line-height: 1em;
19
- }
20
-
21
-
22
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product.hidden {
23
- display: none;
24
- }
25
-
26
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:hover {
27
- cursor: pointer;
28
- opacity: 1;
29
- }
30
-
31
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:active,
32
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:focus
33
- {
34
- outline: none;
35
- }
36
-
37
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title {
38
- overflow: hidden;
39
- max-height: 55px;
40
-
41
- font-size: 12px;
42
- }
43
-
44
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:hover .ecwid-title {
45
- text-decoration: underline;
46
- }
47
-
48
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product div[itemprop="offers"] {
49
- position: static;
50
- }
51
-
52
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-SingleProduct-picture img {
53
- height: auto !important;
54
- width: auto !important;
55
- max-width: 100px;
56
- max-height: 100px;
57
- margin-top: 10px !important;
58
- vertical-align: middle;
59
- }
60
-
61
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-price,
62
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title,
63
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product div[itemprop="image"]
64
- {
65
- text-align: center;
66
- }
67
-
68
-
69
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product {
70
- height: 120px;
71
- }
72
-
73
-
74
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title,
75
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-price {
76
- display: none;
77
- }
78
-
79
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-title,
80
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-price {
81
- display: block;
82
- position: absolute;
83
- left: 120px;
84
- text-align: left;
85
- margin-right: 5px;
86
- text-overflow: ellipsis;
87
- white-space: nowrap;
88
- }
89
-
90
-
91
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-title {
92
- top: 25px;
93
- }
94
-
95
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-price {
96
- bottom: 25px;
97
- }
98
-
99
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-SingleProduct-picture {
100
- vertical-align: middle;
101
- display: table-cell;
102
- line-height: 120px;
103
- width: 100px;
104
- padding: 0px 10px !important;
105
- }
106
-
107
- html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-SingleProduct-picture img {
108
- margin-top: 0px !important;
109
- }
1
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product {
2
+ display: block;
3
+ position: relative;
4
+ opacity: .85;
5
+ }
6
+
7
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:not(:first-child) {
8
+ border-top: 1px solid #CCC;
9
+ }
10
+
11
+
12
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-price {
13
+ font-size: 14px;
14
+ }
15
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title {
16
+ font-size: 12px;
17
+ height: 2em;
18
+ line-height: 1em;
19
+ }
20
+
21
+
22
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product.hidden {
23
+ display: none;
24
+ }
25
+
26
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:hover {
27
+ cursor: pointer;
28
+ opacity: 1;
29
+ }
30
+
31
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:active,
32
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:focus
33
+ {
34
+ outline: none;
35
+ }
36
+
37
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title {
38
+ overflow: hidden;
39
+ max-height: 55px;
40
+
41
+ font-size: 12px;
42
+ }
43
+
44
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product:hover .ecwid-title {
45
+ text-decoration: underline;
46
+ }
47
+
48
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product div[itemprop="offers"] {
49
+ position: static;
50
+ }
51
+
52
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-SingleProduct-picture img {
53
+ height: auto !important;
54
+ width: auto !important;
55
+ max-width: 100px;
56
+ max-height: 100px;
57
+ margin-top: 10px !important;
58
+ vertical-align: middle;
59
+ }
60
+
61
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-price,
62
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title,
63
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product div[itemprop="image"]
64
+ {
65
+ text-align: center;
66
+ }
67
+
68
+
69
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product {
70
+ height: 120px;
71
+ }
72
+
73
+
74
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-title,
75
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products .product .ecwid-price {
76
+ display: none;
77
+ }
78
+
79
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-title,
80
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-price {
81
+ display: block;
82
+ position: absolute;
83
+ left: 120px;
84
+ text-align: left;
85
+ margin-right: 5px;
86
+ text-overflow: ellipsis;
87
+ white-space: nowrap;
88
+ }
89
+
90
+
91
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-title {
92
+ top: 25px;
93
+ }
94
+
95
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-price {
96
+ bottom: 25px;
97
+ }
98
+
99
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-SingleProduct-picture {
100
+ vertical-align: middle;
101
+ display: table-cell;
102
+ line-height: 120px;
103
+ width: 100px;
104
+ padding: 0px 10px !important;
105
+ }
106
+
107
+ html#ecwid_html body#ecwid_body .ecwid-recently-viewed-products.wide .product .ecwid-SingleProduct-picture img {
108
+ margin-top: 0px !important;
109
+ }
css/settings.3.8.css CHANGED
@@ -1,228 +1,228 @@
1
- .ecwid-pb-view-size .main-area {
2
- border-color: rgba(30, 140, 190, 0.5);
3
- }
4
-
5
- .ecwid-pb-view-size .main-area path,
6
- .ecwid-pb-view-size .main-area rect {
7
- fill: rgb(30, 140, 190);
8
- }
9
-
10
- .ecwid-pb-view-size .bottom {
11
- margin-top: 11px;
12
- }
13
-
14
- .ecwid-settings h2 {
15
- background: none;
16
- padding-left: 12px;
17
- }
18
-
19
- .ecwid-settings hr {
20
- background: #cacaca;
21
- }
22
-
23
- .ecwid-settings .pure-control-group {
24
- margin-bottom: 22px;
25
- }
26
-
27
- .pure-form.ecwid-settings .pure-control-group label {
28
- font-size: 14px;
29
- width: 265px;
30
- }
31
-
32
- .pure-form.ecwid-settings.general-settings .pure-button-secondary,
33
- .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover
34
- {
35
- color: #0074a2;
36
- }
37
-
38
- .pure-form.ecwid-settings.general-settings .pure-button-secondary:hover,
39
- .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover
40
- {
41
- border-color: #0074a2;
42
- }
43
-
44
- .ecwid-settings.general-settings button {
45
- top: 1px;
46
- padding: 2px 10px 1px;
47
- height: 32px;
48
- }
49
-
50
- .ecwid-pb-view-size .ruler {
51
- background: #cacaca;
52
- }
53
-
54
- @media screen and (max-width: 782px) {
55
- .ecwid-settings.general-settings,
56
- .ecwid-settings.appearance-settings,
57
- .ecwid-settings.advanced-settings
58
- {
59
- max-width: inherit;
60
- width: inherit;
61
- }
62
-
63
- .ecwid-settings h2 {
64
- margin-bottom: 0px;
65
- }
66
-
67
- .ecwid-settings.pure-form fieldset > :not(legend) {
68
- margin-left: 0px;
69
- }
70
-
71
-
72
- .general-settings.ecwid-settings .greeting-box {
73
- height: inherit;
74
- text-align: center;
75
- }
76
-
77
- .general-settings.ecwid-settings .greeting-box > div {
78
- display: block;
79
- }
80
- .general-settings.ecwid-settings ol {
81
- padding-left: 0px;
82
- }
83
-
84
- .general-settings.ecwid-settings .section {
85
- width: 100%;
86
- }
87
-
88
- .general-settings.ecwid-settings .section .left,
89
- .general-settings.ecwid-settings .note {
90
- margin-top: 0px;
91
- }
92
-
93
- .general-settings.ecwid-settings .section .left,
94
- .general-settings.ecwid-settings .section .right {
95
- text-align: left;
96
- display: block;
97
- }
98
-
99
- .general-settings.ecwid-settings button,
100
- .general-settings.ecwid-settings #ecwid_store_id,
101
- .general-settings.ecwid-settings .pure-button {
102
- display: block;
103
- width: inherit;
104
- margin: 10px 0px 10px 0px;
105
- padding: 0px 5px;
106
- }
107
- .general-settings.ecwid-settings button,
108
- .general-settings.ecwid-settings #ecwid_store_id {
109
- width: 100%;
110
- }
111
-
112
- .general-settings.ecwid-settings .button-primary {
113
- width: 100%;
114
- text-align: center;
115
- margin-top: 10px;
116
- }
117
-
118
- .general-settings.ecwid-settings .two-buttons {
119
- position: relative;
120
- }
121
-
122
- .general-settings.ecwid-settings .two-buttons .pure-button:last-child {
123
- position: absolute;
124
- right: 0px;
125
- }
126
- .general-settings.ecwid-settings .two-buttons .pure-button {
127
- display: inline-block;
128
- min-width: 44%;
129
- width: inherit;
130
- }
131
-
132
- .general-settings.ecwid-settings input {
133
- display: block;
134
- width: 100%;
135
- }
136
-
137
- .ecwid-settings .pure-control-group {
138
- position: relative;
139
- }
140
-
141
- .appearance-settings.ecwid-settings .ecwid-pb-view-size {
142
- display: block;
143
- }
144
-
145
- .appearance-settings.ecwid-settings .ecwid-pb-view-size input {
146
- position: relative;
147
- z-index: 2;
148
- }
149
-
150
- .appearance-settings.ecwid-settings .pure-control-group.small-input input {
151
- margin: 0px auto;
152
- }
153
-
154
- .appearance-settings.ecwid-settings .ecwid-pb-view-size {
155
- margin: 0px auto 33px;
156
- padding: 0px;
157
- }
158
-
159
- .appearance-settings.ecwid-settings .ecwid-pb-view-size .ruler {
160
- z-index: 1;
161
- position: absolute;
162
- }
163
-
164
- .appearance-settings.ecwid-settings .ecwid-pb-view-size .bottom {
165
- margin-top: 5px;
166
- }
167
-
168
- .appearance-settings.ecwid-settings .ecwid-pb-view-size.list,
169
- .appearance-settings.ecwid-settings .ecwid-pb-view-size.table {
170
- margin-bottom: 0px;
171
- }
172
-
173
- .appearance-settings.ecwid-settings .note.pb-note {
174
- margin: 0px;
175
- }
176
-
177
- .appearance-settings.ecwid-settings select {
178
- width: 100%;
179
- }
180
-
181
- .advanced-settings.ecwid-settings .pure-control-group:not(.checkbox) label {
182
- margin-top:35px;
183
- }
184
-
185
- .advanced-settings.ecwid-settings .pure-control-group:not(.checkbox) input,
186
- .advanced-settings.ecwid-settings select {
187
- width: 100%;
188
- }
189
-
190
- .advanced-settings.ecwid-settings label {
191
- margin-bottom: 10px;
192
- }
193
-
194
- .advanced-settings.ecwid-settings .note {
195
- margin-top: 5px;
196
- }
197
-
198
- .ecwid-settings fieldset {
199
- min-width: 0px !important;
200
- }
201
-
202
- .ecwid-pb-view-size .bottom .ruler {
203
- bottom: 15px;
204
- }
205
- .ecwid-settings .pure-control-group.small-input .input > div,
206
- .ecwid-settings .pure-control-group.small-input .input input,
207
- .ecwid-settings .pure-control-group.small-input .label > label {
208
- position: static;
209
- }
210
-
211
- .ecwid-settings .pure-control-group.small-input .label,
212
- .ecwid-settings .pure-control-group.small-input .label label {
213
- width: auto;
214
- margin-bottom: 0px;
215
- }
216
-
217
- .ecwid-settings .pure-control-group.small-input .note {
218
- display: block;
219
- position: relative;
220
- left: 45px;
221
- margin-right: 45px;
222
- }
223
-
224
- .ecwid-settings .pure-control-group.checkbox label {
225
- display: inline-block;
226
- }
227
- }
228
-
1
+ .ecwid-pb-view-size .main-area {
2
+ border-color: rgba(30, 140, 190, 0.5);
3
+ }
4
+
5
+ .ecwid-pb-view-size .main-area path,
6
+ .ecwid-pb-view-size .main-area rect {
7
+ fill: rgb(30, 140, 190);
8
+ }
9
+
10
+ .ecwid-pb-view-size .bottom {
11
+ margin-top: 11px;
12
+ }
13
+
14
+ .ecwid-settings h2 {
15
+ background: none;
16
+ padding-left: 12px;
17
+ }
18
+
19
+ .ecwid-settings hr {
20
+ background: #cacaca;
21
+ }
22
+
23
+ .ecwid-settings .pure-control-group {
24
+ margin-bottom: 22px;
25
+ }
26
+
27
+ .pure-form.ecwid-settings .pure-control-group label {
28
+ font-size: 14px;
29
+ width: 265px;
30
+ }
31
+
32
+ .pure-form.ecwid-settings.general-settings .pure-button-secondary,
33
+ .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover
34
+ {
35
+ color: #0074a2;
36
+ }
37
+
38
+ .pure-form.ecwid-settings.general-settings .pure-button-secondary:hover,
39
+ .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover
40
+ {
41
+ border-color: #0074a2;
42
+ }
43
+
44
+ .ecwid-settings.general-settings button {
45
+ top: 1px;
46
+ padding: 2px 10px 1px;
47
+ height: 32px;
48
+ }
49
+
50
+ .ecwid-pb-view-size .ruler {
51
+ background: #cacaca;
52
+ }
53
+
54
+ @media screen and (max-width: 782px) {
55
+ .ecwid-settings.general-settings,
56
+ .ecwid-settings.appearance-settings,
57
+ .ecwid-settings.advanced-settings
58
+ {
59
+ max-width: inherit;
60
+ width: inherit;
61
+ }
62
+
63
+ .ecwid-settings h2 {
64
+ margin-bottom: 0px;
65
+ }
66
+
67
+ .ecwid-settings.pure-form fieldset > :not(legend) {
68
+ margin-left: 0px;
69
+ }
70
+
71
+
72
+ .general-settings.ecwid-settings .greeting-box {
73
+ height: inherit;
74
+ text-align: center;
75
+ }
76
+
77
+ .general-settings.ecwid-settings .greeting-box > div {
78
+ display: block;
79
+ }
80
+ .general-settings.ecwid-settings ol {
81
+ padding-left: 0px;
82
+ }
83
+
84
+ .general-settings.ecwid-settings .section {
85
+ width: 100%;
86
+ }
87
+
88
+ .general-settings.ecwid-settings .section .left,
89
+ .general-settings.ecwid-settings .note {
90
+ margin-top: 0px;
91
+ }
92
+
93
+ .general-settings.ecwid-settings .section .left,
94
+ .general-settings.ecwid-settings .section .right {
95
+ text-align: left;
96
+ display: block;
97
+ }
98
+
99
+ .general-settings.ecwid-settings button,
100
+ .general-settings.ecwid-settings #ecwid_store_id,
101
+ .general-settings.ecwid-settings .pure-button {
102
+ display: block;
103
+ width: inherit;
104
+ margin: 10px 0px 10px 0px;
105
+ padding: 0px 5px;
106
+ }
107
+ .general-settings.ecwid-settings button,
108
+ .general-settings.ecwid-settings #ecwid_store_id {
109
+ width: 100%;
110
+ }
111
+
112
+ .general-settings.ecwid-settings .button-primary {
113
+ width: 100%;
114
+ text-align: center;
115
+ margin-top: 10px;
116
+ }
117
+
118
+ .general-settings.ecwid-settings .two-buttons {
119
+ position: relative;
120
+ }
121
+
122
+ .general-settings.ecwid-settings .two-buttons .pure-button:last-child {
123
+ position: absolute;
124
+ right: 0px;
125
+ }
126
+ .general-settings.ecwid-settings .two-buttons .pure-button {
127
+ display: inline-block;
128
+ min-width: 44%;
129
+ width: inherit;
130
+ }
131
+
132
+ .general-settings.ecwid-settings input {
133
+ display: block;
134
+ width: 100%;
135
+ }
136
+
137
+ .ecwid-settings .pure-control-group {
138
+ position: relative;
139
+ }
140
+
141
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size {
142
+ display: block;
143
+ }
144
+
145
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size input {
146
+ position: relative;
147
+ z-index: 2;
148
+ }
149
+
150
+ .appearance-settings.ecwid-settings .pure-control-group.small-input input {
151
+ margin: 0px auto;
152
+ }
153
+
154
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size {
155
+ margin: 0px auto 33px;
156
+ padding: 0px;
157
+ }
158
+
159
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size .ruler {
160
+ z-index: 1;
161
+ position: absolute;
162
+ }
163
+
164
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size .bottom {
165
+ margin-top: 5px;
166
+ }
167
+
168
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size.list,
169
+ .appearance-settings.ecwid-settings .ecwid-pb-view-size.table {
170
+ margin-bottom: 0px;
171
+ }
172
+
173
+ .appearance-settings.ecwid-settings .note.pb-note {
174
+ margin: 0px;
175
+ }
176
+
177
+ .appearance-settings.ecwid-settings select {
178
+ width: 100%;
179
+ }
180
+
181
+ .advanced-settings.ecwid-settings .pure-control-group:not(.checkbox) label {
182
+ margin-top:35px;
183
+ }
184
+
185
+ .advanced-settings.ecwid-settings .pure-control-group:not(.checkbox) input,
186
+ .advanced-settings.ecwid-settings select {
187
+ width: 100%;
188
+ }
189
+
190
+ .advanced-settings.ecwid-settings label {
191
+ margin-bottom: 10px;
192
+ }
193
+
194
+ .advanced-settings.ecwid-settings .note {
195
+ margin-top: 5px;
196
+ }
197
+
198
+ .ecwid-settings fieldset {
199
+ min-width: 0px !important;
200
+ }
201
+
202
+ .ecwid-pb-view-size .bottom .ruler {
203
+ bottom: 15px;
204
+ }
205
+ .ecwid-settings .pure-control-group.small-input .input > div,
206
+ .ecwid-settings .pure-control-group.small-input .input input,
207
+ .ecwid-settings .pure-control-group.small-input .label > label {
208
+ position: static;
209
+ }
210
+
211
+ .ecwid-settings .pure-control-group.small-input .label,
212
+ .ecwid-settings .pure-control-group.small-input .label label {
213
+ width: auto;
214
+ margin-bottom: 0px;
215
+ }
216
+
217
+ .ecwid-settings .pure-control-group.small-input .note {
218
+ display: block;
219
+ position: relative;
220
+ left: 45px;
221
+ margin-right: 45px;
222
+ }
223
+
224
+ .ecwid-settings .pure-control-group.checkbox label {
225
+ display: inline-block;
226
+ }
227
+ }
228
+
css/settings.css CHANGED
@@ -1,729 +1,728 @@
1
- .pure-form.ecwid-settings fieldset {
2
- font-size: 14px;
3
- }
4
-
5
- .pure-form.ecwid-settings fieldset > :not(legend) {
6
- margin-left:14px;
7
- }
8
-
9
- .pure-form.ecwid-settings .pure-button {
10
- height: auto;
11
- line-height: 32px;
12
- padding: 0px 20px;
13
- font-size: 14px;
14
- background-image: none;
15
- background-color: #f6f6f6;
16
- font-weight: normal;
17
- color: #333333;
18
- border: 1px solid #cccccc;
19
- border-radius: 3px;
20
- }
21
-
22
- .pure-form.ecwid-settings .pure-button-secondary {
23
- font-weight: bold;
24
- color: #246fba;
25
- }
26
-
27
- .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover {
28
- border-color: #137ebe;
29
- color: #137ebe;
30
- }
31
-
32
- .pure-form.ecwid-settings .pure-button.pure-button-primary {
33
- color: white;
34
- font-weight: normal;
35
- border-color: #189DEE;
36
- background-color: #189DEE;
37
- }
38
-
39
- .pure-form.ecwid-settings .pure-button.pure-button-primary:hover {
40
- border-color: #137ebe;
41
- background-color: #137ebe;
42
- }
43
-
44
- .pure-form.ecwid-settings .link {
45
- border: 0px none;
46
- background: transparent;
47
- box-shadow: none;
48
- }
49
-
50
- .pure-control-group.small-input > div {
51
- display: table-cell;
52
- vertical-align: middle;
53
- position: relative;
54
- }
55
-
56
- .pure-control-group.small-input .label {
57
- width: 265px;
58
- font-weight: bold;
59
- }
60
-
61
- .pure-control-group.small-input .input > div {
62
- width: 45px;
63
- text-align: center;
64
- vertical-align: middle;
65
- z-index: 10;
66
- position: relative;
67
- left: 265px;
68
- }
69
-
70
- .pure-control-group.small-input .input input {
71
- margin: 0px auto;
72
- }
73
-
74
- .pure-control-group.small-input .label > * {
75
- position: relative;
76
- left: -45px;
77
- }
78
-
79
- /* 2.8 compatibility for left menu icon */
80
- .wp-menu-image>a>img {
81
- display: none;
82
- }
83
-
84
- @media screen and (max-width: 782px) {
85
- .ecwid-settings {
86
- width: 100%;
87
- }
88
- }
89
-
90
- .ecwid-settings {
91
- width: 650px;
92
- }
93
-
94
- .ecwid-settings .pure-control-group {
95
- margin-bottom: 19px;
96
- }
97
-
98
- .ecwid-settings legend {
99
- margin-bottom: 10px;
100
- }
101
-
102
- .ecwid-settings hr {
103
- margin-left: 0px;
104
- border: 0px none;
105
- height: 1px;
106
- background: #e5e5e5;
107
- margin-bottom: 20px;
108
- }
109
-
110
- .pure-form.ecwid-settings .pure-control-group label {
111
- width: 232px;
112
- font-weight: bold;
113
- text-align: left;
114
- margin-right: 5px;
115
- }
116
-
117
- .ecwid-settings.general-settings button {
118
- position: relative;
119
- top: 2px;
120
- padding: 5px 31px 5px 31px;
121
- margin-left: 5px;
122
- }
123
-
124
- .ecwid-settings.general-settings hr {
125
- margin-bottom: 6px;
126
- }
127
-
128
- .ecwid-settings .warning {
129
- background: #FFF797;
130
- font-size: 12px;
131
- padding: 8px 14px 8px 14px;
132
- font-weight: bold;
133
- color: #444444;
134
- }
135
-
136
- .ecwid-settings.appearance-settings h3 {
137
- font-size: 12px;
138
- }
139
-
140
- .ecwid-settings.appearance-settings input[type=text] {
141
- font-size: 13px;
142
- padding: 5px 3px 4px 3px;
143
- outline-offset: 0px;
144
- }
145
-
146
- .ecwid-settings input[type=text].number {
147
- width: 27px;
148
- text-align: center;
149
- }
150
-
151
- .ecwid-settings select {
152
- padding: 5px;
153
- }
154
-
155
- .ecwid-settings .note.pb-note {
156
- margin-right: 30px;
157
- margin-left: 30px;
158
- }
159
-
160
- .ecwid-settings.appearance-settings {
161
- max-width: 650px;
162
- }
163
-
164
- .ecwid-settings.appearance-settings .products-per-page-label {
165
- padding-top: 5px;
166
- padding-bottom: 15px;
167
- display: block;
168
- }
169
-
170
- .ecwid-settings.appearance-settings input[type=checkbox] {
171
- margin-right: 3px;
172
- margin-left: 7px;
173
- }
174
-
175
- .ecwid-pb-view-size {
176
- display: inline-block;
177
- position: relative;
178
- width: 153px;
179
- height: 153px;
180
- margin-left: 30px;
181
- margin-right: 25px;
182
- }
183
-
184
- .ecwid-pb-view-size .title {
185
- margin: 8px;
186
- width: 110px;
187
- text-align: center;
188
- }
189
-
190
- .ecwid-pb-view-size * {
191
- transition: background-image .3s, border-color .3s, font-weight .3s;
192
- }
193
-
194
-
195
- .ecwid-pb-view-size .main-area {
196
- width: 116px;
197
- height: 82px;
198
- border: 2px solid rgb(125, 209, 227);
199
- border-color: rgba(125, 209, 227, .5);
200
- border-radius: 2px;
201
- float: left;
202
- background-position: 50% 50%;
203
- background-repeat: no-repeat;
204
- text-align: center;
205
- }
206
-
207
- .ecwid-pb-view-size .main-area svg {
208
- margin-top: 7px;
209
- }
210
-
211
- .ecwid-pb-view-size .main-area path,
212
- .ecwid-pb-view-size .main-area rect {
213
- fill: rgb(125, 209, 227);
214
- }
215
-
216
- .ecwid-pb-view-size .fallback-image {
217
- width: 100px;
218
- height: 66px;
219
- background-repeat: no-repeat;
220
- margin-top:7px;
221
- margin-left:8px;
222
- }
223
-
224
- .ecwid-pb-view-size .grid-image {
225
- background-image: url(../images/grid.png);
226
- }
227
-
228
- .ecwid-pb-view-size .list-image {
229
- background-image: url(../images/list.png);
230
- }
231
-
232
- .ecwid-pb-view-size .table-image {
233
- background-image: url(../images/table.png);
234
- }
235
-
236
- .ecwid-pb-view-size .right {
237
- height:86px;
238
- float: right;
239
- position: relative;
240
- }
241
-
242
- .ecwid-pb-view-size .right input
243
- {
244
- margin-top: 30px;
245
- }
246
-
247
- .ecwid-pb-view-size .bottom input
248
- {
249
- margin-left: 48px;
250
- }
251
-
252
- .ecwid-pb-view-size .bottom {
253
- width: 120px;
254
- margin-top: 8px;
255
- position: absolute;
256
- top: 114px;
257
- }
258
-
259
- .ecwid-pb-view-size .ruler {
260
- position: absolute;
261
- background: #cccccc;
262
- z-index: -1;
263
- }
264
-
265
- .ecwid-pb-view-size .right .ruler {
266
- width: 1px;
267
- height: 100%;
268
- right: 13px;
269
- }
270
-
271
- .ecwid-pb-view-size .bottom .ruler {
272
- width: 100%;
273
- height: 1px;
274
- bottom: 12px;
275
- }
276
-
277
- .ecwid-settings.advanced-settings .pure-control-group {
278
- margin-bottom: 20px;
279
- }
280
-
281
- .ecwid-settings.advanced-settings .pure-control-group.last {
282
- margin-bottom: 0px;
283
- }
284
-
285
- .ecwid-settings.advanced-settings .pure-control-group input:not([type=checkbox]),
286
- .ecwid-settings.advanced-settings select
287
- {
288
- width: 200px;
289
- height: 30px;
290
- margin-right: 15px;
291
- font-size: 13px;
292
- border-color: #cacaca;
293
- }
294
-
295
- .ecwid-settings.advanced-settings .note {
296
- margin-top: 15px;
297
- }
298
-
299
- .ecwid-settings.advanced-settings sup {
300
- color: #298CBA;
301
- }
302
-
303
- .ecwid-settings .note.inline-note {
304
- max-width: 300px;
305
- margin-left: 15px;
306
- vertical-align: middle;
307
- }
308
-
309
- .ecwid-settings .note.grayed-links,
310
- .ecwid-settings .note.grayed-links a:not(:hover)
311
- {
312
- font-size: 11px;
313
- color: #A0A0A0;
314
- margin-top:10px;
315
- margin-bottom: 10px;
316
- }
317
-
318
- /* Common main */
319
- .ecwid-admin .box {
320
- position: relative;
321
- margin-top: 25px;
322
- padding: 0 15px;
323
-
324
- border: 1px solid #E5E5E5;
325
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
326
- background: #FFF;
327
- }
328
-
329
-
330
- .ecwid-admin h2:before {
331
- background: url(../images/ecwid_logo_symbol_RGB.svg);
332
- width: 100px;
333
- height: 20px;
334
- border: 2px solid blue;
335
- }
336
-
337
- .ecwid-admin h3 {
338
- position: relative;
339
- padding: 0px;
340
- margin: 0px;
341
- left: 60px;
342
-
343
- display: inline-block;
344
- height: 70px;
345
- line-height: 70px;
346
-
347
- text-align: left;
348
-
349
- font-size: 18px;
350
- font-weight: normal;
351
- }
352
-
353
- .ecwid-admin .head {
354
- border-bottom: 1px solid #EEE;
355
- height: 70px;
356
- }
357
-
358
- .ecwid-admin .box .head {
359
- text-align: left;
360
- margin-bottom: 20px;
361
- }
362
-
363
- .ecwid-admin .head svg {
364
- width: 32px;
365
- height: 32px;
366
- position: absolute;
367
- top: 20px;
368
- left: 20px;
369
- margin-right: 10px;
370
- }
371
- /* END Common main */
372
-
373
-
374
- /* CONNECT - positioning */
375
- .ecwid-connect .box > div {
376
- margin: 0px auto;
377
- text-align: center;
378
- }
379
-
380
- .ecwid-connect .box h3 + div {
381
- margin-top: 40px;
382
- }
383
-
384
- .ecwid-connect .box div:last-child {
385
- margin-bottom: 40px;
386
- }
387
-
388
- .ecwid-connect .box .greeting-message {
389
- margin-top: 11px;
390
- line-height: 1.3em;
391
- margin-bottom: 38px;
392
- }
393
-
394
- .ecwid-connect .box .connect-button {
395
- margin-top: 8px;
396
- }
397
- .ecwid-connect .where-to-find-store-id {
398
- margin-top: 25px;
399
- margin-bottom: 0;
400
- }
401
-
402
- .ecwid-connect .box .note {
403
- margin-top: 6px;
404
- max-width: 760px;
405
- font-size: 13px;
406
- }
407
-
408
- .ecwid-connect .box .create-account-link {
409
- margin-top: 35px;
410
- }
411
-
412
-
413
- /* CONNECT - styles */
414
- .ecwid-connect .box .greeting-message {
415
- font-size: 24px;
416
- font-weight: lighter;
417
- }
418
-
419
- .ecwid-connect .box .connect-button a {
420
- padding: 14px 40px;
421
- border: 0px none;
422
- border-radius: 4px;
423
- box-sizing: border-box;
424
- width: 260px;
425
-
426
- background: #59bb00;
427
- color: white;
428
- font-size: 18px;
429
- font-weight: lighter;
430
- text-decoration: none;
431
-
432
- transition: color 0.1s linear, background-color 0.1s linear, border-color 0.1s linear;
433
- display: inline-block;
434
- }
435
-
436
- .ecwid-connect .box .connect-button a:hover {
437
- background: #64A52F;
438
- }
439
-
440
- .ecwid-connect .box .note {
441
- color: #A0A0A0;
442
- line-height: 18px;
443
- max-width: 400px;
444
- }
445
-
446
- .ecwid-connect .box .note.initial {
447
- }
448
-
449
- .ecwid-connect .box .note.auth-error {
450
- max-width: 350px;
451
- color: red;
452
- }
453
-
454
- /* wpcontent to stress the rule without using !mportant */
455
- #wpcontent .ecwid-connect.no-oauth .with-oauth,
456
- #wpcontent .ecwid-connect.with-oauth .no-oauth
457
- {
458
- display: none;
459
- }
460
-
461
- .ecwid-connect .connect-store-id {
462
-
463
- }
464
-
465
- .ecwid-connect #ecwid-store-id {
466
- line-height: 38px;
467
- width: 260px;
468
- border-radius: 4px;
469
- font-size: 16px;
470
- font-weight: lighter;
471
- padding-left: 10px;
472
- font-family: 'Open Sans';
473
- }
474
-
475
- .ecwid-connect .box .create-account-link a {
476
- text-decoration: none;
477
- font-size: 14px;
478
- }
479
-
480
- .ecwid-dashboard .body {
481
- padding: 70px 50px;
482
- }
483
-
484
- .ecwid-dashboard .greeting-image {
485
- padding-right: 37px;
486
- display: table-cell;
487
- }
488
-
489
- .ecwid-dashboard .greeting {
490
- display: table-cell;
491
- vertical-align: middle;
492
- }
493
-
494
- .ecwid-dashboard .greeting .greeting-title {
495
- font-size: 24px;
496
- margin-bottom: 12px;
497
- }
498
-
499
- .ecwid-dashboard .greeting .greeting-message {
500
- font-size: 16px;
501
- margin-bottom: 5px;
502
- line-height: 1.3em;
503
- }
504
-
505
- .ecwid-dashboard .drop-down.store-id {
506
- font-size: 14px;
507
- padding: 10px 16px;
508
- position: absolute;
509
- right: 6px;
510
- top: 13px;
511
- line-height: 20px;
512
- display: inline-block;
513
- border: 1px solid transparent;
514
- border-bottom: none;
515
- height: 21px;
516
-
517
- cursor: pointer;
518
- }
519
-
520
- .ecwid-dashboard .drop-down.store-id.hover {
521
- cursor: default;
522
- }
523
-
524
- .ecwid-dashboard .drop-down.hover
525
- {
526
- border: 1px solid #CCC;
527
- border-bottom: none;
528
- background: white;
529
- }
530
-
531
- .ecwid-dashboard .store-id a {
532
- text-decoration: none;
533
- }
534
-
535
- .ecwid-dashboard .drop-down > *:first-child:after {
536
- font-family: 'dashicons';
537
- content: '\f347';
538
- position: relative;
539
- top: .2em;
540
- font-weight: lighter;
541
- }
542
-
543
- .ecwid-dashboard .drop-down.hover > *:first-child:after {
544
- font-family: 'dashicons';
545
- content: '\f343';
546
- }
547
-
548
-
549
- .ecwid-dashboard .drop-down > *:first-child {
550
- color: #0074A2;
551
- white-space: nowrap;
552
- }
553
-
554
- .ecwid-dashboard .drop-down > *:first-child:hover {
555
- color: #2EA2CC;
556
- }
557
-
558
- .ecwid-dashboard .drop-down {
559
- position: relative;
560
- }
561
-
562
- .ecwid-dashboard .drop-down.hover {
563
- color: #2EA2CC;
564
- }
565
-
566
- .ecwid-dashboard .drop-down ul
567
- {
568
- display: none;
569
- }
570
- .ecwid-dashboard .drop-down.hover ul
571
- {
572
- display: inline-block;
573
- }
574
-
575
-
576
- .ecwid-dashboard .drop-down ul {
577
- position: absolute;
578
- top: 100%;
579
- width: 100%;
580
- font-size: 14px;
581
- left: 0px;
582
- margin: 0px;
583
- padding-left: 0px;
584
-
585
- outline: 1px solid #ccc;
586
- }
587
-
588
- .ecwid-dashboard .drop-down ul li {
589
- border-bottom: 1px solid #ccc;
590
- margin-bottom: 0;
591
- background: white;
592
- text-align: left;
593
- }
594
-
595
- .ecwid-dashboard .drop-down ul li:last-child {
596
- border-bottom: none;
597
- }
598
-
599
-
600
- .ecwid-dashboard .drop-down ul a {
601
- display: block;
602
- padding: 10px 16px;
603
- text-decoration: none;
604
- }
605
-
606
- .ecwid-dashboard .drop-down ul li:hover {
607
- background: #0074A2;
608
- }
609
-
610
- .ecwid-dashboard .drop-down ul li:hover a {
611
- color: white;
612
- }
613
-
614
- .ecwid-dashboard .drop-down * {
615
- transition: color .2s, background .2s;
616
- }
617
-
618
- .ecwid-dashboard .greeting-links {
619
- padding-left: 0px;
620
- margin-top: 5px;
621
- }
622
-
623
- .ecwid-dashboard .greeting-links > * {
624
- display: inline-block;
625
- margin: 15px 15px;
626
- }
627
-
628
- .ecwid-dashboard .greeting-links > *:first-child {
629
- margin-left: 0;
630
- }
631
-
632
- .ecwid-dashboard .greeting-links a {
633
- text-decoration: none;
634
- font-size: 14px;
635
- }
636
-
637
- .ecwid-dashboard.width-smaller .head {
638
- height: 74px;
639
- }
640
-
641
- .ecwid-dashboard.width-smaller .head svg {
642
- left: 20px;
643
- top: 24px;
644
- }
645
-
646
- .ecwid-dashboard.width-smaller .head h3 {
647
- left: 68px;
648
- top: -4px;
649
- }
650
-
651
- .ecwid-dashboard.width-smaller .store-id {
652
- right: inherit;
653
- left: 51px;
654
- top: 30px;
655
- }
656
-
657
- .ecwid-dashboard.width-smaller .body {
658
- text-align: center;
659
- padding: 20px 0px;
660
- }
661
-
662
- .ecwid-dashboard.width-smaller .greeting-image,
663
- .ecwid-dashboard.width-smaller .greeting
664
- {
665
- display: block;
666
- padding-right: 0px;
667
- }
668
-
669
- .ecwid-dashboard.width-smaller .greeting-title {
670
- margin-top: 10px;
671
- }
672
-
673
-
674
- .ecwid-admin .mobile-br br {
675
- display: none;
676
- }
677
-
678
- .ecwid-admin.width-smaller .mobile-br br {
679
- display: inherit;
680
- }
681
-
682
- .ecwid-popup {
683
- position: fixed;
684
- left: 170px;
685
- top: 42px;
686
- right: 10px;
687
- bottom: 10px;
688
- }
689
-
690
- .ecwid-popup .wrap {
691
- margin: 0px;
692
- }
693
-
694
- .ecwid-popup .box {
695
- margin: 0px;
696
- position: absolute;
697
- left: 0;
698
- right: 0;
699
- top: 0;
700
- bottom: 0;
701
- }
702
- .ecwid-popup h3 span.close {
703
- position: absolute;
704
- right: 15px;
705
- cursor: pointer;
706
- color: #2EA2CC;
707
- }
708
-
709
- .ecwid-popup h3 span.close:before {
710
- content: "\e606";
711
- font-family: ecwid-icons;
712
- font-size: 36px;
713
- }
714
-
715
-
716
- @media screen and (max-width: 960px) {
717
- .ecwid-popup {
718
- left: 44px;
719
- }
720
- }
721
-
722
- @media screen and (max-width: 782px) {
723
- .ecwid-popup {
724
- left: 0px;
725
- right: 0px;
726
- top: 46px;
727
- bottom: 0px;
728
- }
729
- }
1
+ .pure-form.ecwid-settings fieldset {
2
+ font-size: 14px;
3
+ }
4
+
5
+ .pure-form.ecwid-settings fieldset > :not(legend) {
6
+ margin-left:14px;
7
+ }
8
+
9
+ .pure-form.ecwid-settings .pure-button {
10
+ height: auto;
11
+ line-height: 32px;
12
+ padding: 0px 20px;
13
+ font-size: 14px;
14
+ background-image: none;
15
+ background-color: #f6f6f6;
16
+ font-weight: normal;
17
+ color: #333333;
18
+ border: 1px solid #cccccc;
19
+ border-radius: 3px;
20
+ }
21
+
22
+ .pure-form.ecwid-settings .pure-button-secondary {
23
+ font-weight: bold;
24
+ color: #246fba;
25
+ }
26
+
27
+ .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover {
28
+ border-color: #137ebe;
29
+ color: #137ebe;
30
+ }
31
+
32
+ .pure-form.ecwid-settings .pure-button.pure-button-primary {
33
+ color: white;
34
+ font-weight: normal;
35
+ border-color: #189DEE;
36
+ background-color: #189DEE;
37
+ }
38
+
39
+ .pure-form.ecwid-settings .pure-button.pure-button-primary:hover {
40
+ border-color: #137ebe;
41
+ background-color: #137ebe;
42
+ }
43
+
44
+ .pure-form.ecwid-settings .link {
45
+ border: 0px none;
46
+ background: transparent;
47
+ box-shadow: none;
48
+ }
49
+
50
+ .pure-control-group.small-input > div {
51
+ display: table-cell;
52
+ vertical-align: middle;
53
+ position: relative;
54
+ }
55
+
56
+ .pure-control-group.small-input .label {
57
+ width: 265px;
58
+ font-weight: bold;
59
+ }
60
+
61
+ .pure-control-group.small-input .input > div {
62
+ width: 45px;
63
+ text-align: center;
64
+ vertical-align: middle;
65
+ z-index: 10;
66
+ position: relative;
67
+ left: 265px;
68
+ }
69
+
70
+ .pure-control-group.small-input .input input {
71
+ margin: 0px auto;
72
+ }
73
+
74
+ .pure-control-group.small-input .label > * {
75
+ position: relative;
76
+ left: -45px;
77
+ }
78
+
79
+ /* 2.8 compatibility for left menu icon */
80
+ .wp-menu-image>a>img {
81
+ display: none;
82
+ }
83
+
84
+ @media screen and (max-width: 782px) {
85
+ .ecwid-settings {
86
+ width: 100%;
87
+ }
88
+ }
89
+
90
+ .ecwid-settings {
91
+ width: 650px;
92
+ }
93
+
94
+ .ecwid-settings .pure-control-group {
95
+ margin-bottom: 19px;
96
+ }
97
+
98
+ .ecwid-settings legend {
99
+ margin-bottom: 10px;
100
+ }
101
+
102
+ .ecwid-settings hr {
103
+ margin-left: 0px;
104
+ border: 0px none;
105
+ height: 1px;
106
+ background: #e5e5e5;
107
+ margin-bottom: 20px;
108
+ }
109
+
110
+ .pure-form.ecwid-settings .pure-control-group label {
111
+ width: 232px;
112
+ font-weight: bold;
113
+ text-align: left;
114
+ margin-right: 5px;
115
+ }
116
+
117
+ .ecwid-settings.general-settings button {
118
+ position: relative;
119
+ top: 2px;
120
+ padding: 5px 31px 5px 31px;
121
+ margin-left: 5px;
122
+ }
123
+
124
+ .ecwid-settings.general-settings hr {
125
+ margin-bottom: 6px;
126
+ }
127
+
128
+ .ecwid-settings .warning {
129
+ background: #FFF797;
130
+ font-size: 12px;
131
+ padding: 8px 14px 8px 14px;
132
+ font-weight: bold;
133
+ color: #444444;
134
+ }
135
+
136
+ .ecwid-settings.appearance-settings h3 {
137
+ font-size: 12px;
138
+ }
139
+
140
+ .ecwid-settings.appearance-settings input[type=text] {
141
+ font-size: 13px;
142
+ padding: 5px 3px 4px 3px;
143
+ outline-offset: 0px;
144
+ }
145
+
146
+ .ecwid-settings input[type=text].number {
147
+ width: 27px;
148
+ text-align: center;
149
+ }
150
+
151
+ .ecwid-settings select {
152
+ padding: 5px;
153
+ }
154
+
155
+ .ecwid-settings .note.pb-note {
156
+ margin-right: 30px;
157
+ margin-left: 30px;
158
+ }
159
+
160
+ .ecwid-settings.appearance-settings {
161
+ max-width: 650px;
162
+ }
163
+
164
+ .ecwid-settings.appearance-settings .products-per-page-label {
165
+ padding-top: 5px;
166
+ padding-bottom: 15px;
167
+ display: block;
168
+ }
169
+
170
+ .ecwid-settings.appearance-settings input[type=checkbox] {
171
+ margin-right: 3px;
172
+ margin-left: 7px;
173
+ }
174
+
175
+ .ecwid-pb-view-size {
176
+ display: inline-block;
177
+ position: relative;
178
+ width: 153px;
179
+ height: 153px;
180
+ margin-left: 30px;
181
+ margin-right: 25px;
182
+ }
183
+
184
+ .ecwid-pb-view-size .title {
185
+ margin: 8px;
186
+ width: 110px;
187
+ text-align: center;
188
+ }
189
+
190
+ .ecwid-pb-view-size * {
191
+ transition: background-image .3s, border-color .3s, font-weight .3s;
192
+ }
193
+
194
+
195
+ .ecwid-pb-view-size .main-area {
196
+ width: 116px;
197
+ height: 82px;
198
+ border: 2px solid rgb(125, 209, 227);
199
+ border-color: rgba(125, 209, 227, .5);
200
+ border-radius: 2px;
201
+ float: left;
202
+ background-position: 50% 50%;
203
+ background-repeat: no-repeat;
204
+ text-align: center;
205
+ }
206
+
207
+ .ecwid-pb-view-size .main-area svg {
208
+ margin-top: 7px;
209
+ }
210
+
211
+ .ecwid-pb-view-size .main-area path,
212
+ .ecwid-pb-view-size .main-area rect {
213
+ fill: rgb(125, 209, 227);
214
+ }
215
+
216
+ .ecwid-pb-view-size .fallback-image {
217
+ width: 100px;
218
+ height: 66px;
219
+ background-repeat: no-repeat;
220
+ margin-top:7px;
221
+ margin-left:8px;
222
+ }
223
+
224
+ .ecwid-pb-view-size .grid-image {
225
+ background-image: url(../images/grid.png);
226
+ }
227
+
228
+ .ecwid-pb-view-size .list-image {
229
+ background-image: url(../images/list.png);
230
+ }
231
+
232
+ .ecwid-pb-view-size .table-image {
233
+ background-image: url(../images/table.png);
234
+ }
235
+
236
+ .ecwid-pb-view-size .right {
237
+ height:86px;
238
+ float: right;
239
+ position: relative;
240
+ }
241
+
242
+ .ecwid-pb-view-size .right input
243
+ {
244
+ margin-top: 30px;
245
+ }
246
+
247
+ .ecwid-pb-view-size .bottom input
248
+ {
249
+ margin-left: 48px;
250
+ }
251
+
252
+ .ecwid-pb-view-size .bottom {
253
+ width: 120px;
254
+ margin-top: 8px;
255
+ position: absolute;
256
+ top: 114px;
257
+ }
258
+
259
+ .ecwid-pb-view-size .ruler {
260
+ position: absolute;
261
+ background: #cccccc;
262
+ z-index: -1;
263
+ }
264
+
265
+ .ecwid-pb-view-size .right .ruler {
266
+ width: 1px;
267
+ height: 100%;
268
+ right: 13px;
269
+ }
270
+
271
+ .ecwid-pb-view-size .bottom .ruler {
272
+ width: 100%;
273
+ height: 1px;
274
+ bottom: 12px;
275
+ }
276
+
277
+ .ecwid-settings.advanced-settings .pure-control-group {
278
+ margin-bottom: 20px;
279
+ }
280
+
281
+ .ecwid-settings.advanced-settings .pure-control-group.last {
282
+ margin-bottom: 0px;
283
+ }
284
+
285
+ .ecwid-settings.advanced-settings .pure-control-group input:not([type=checkbox]),
286
+ .ecwid-settings.advanced-settings select
287
+ {
288
+ width: 200px;
289
+ height: 30px;
290
+ margin-right: 15px;
291
+ font-size: 13px;
292
+ border-color: #cacaca;
293
+ }
294
+
295
+ .ecwid-settings.advanced-settings .note {
296
+ margin-top: 15px;
297
+ }
298
+
299
+ .ecwid-settings.advanced-settings sup {
300
+ color: #298CBA;
301
+ }
302
+
303
+ .ecwid-settings .note.inline-note {
304
+ max-width: 300px;
305
+ margin-left: 15px;
306
+ vertical-align: middle;
307
+ }
308
+
309
+ .ecwid-settings .note.grayed-links,
310
+ .ecwid-settings .note.grayed-links a:not(:hover)
311
+ {
312
+ font-size: 11px;
313
+ color: #A0A0A0;
314
+ margin-top:10px;
315
+ margin-bottom: 10px;
316
+ }
317
+
318
+ /* Common main */
319
+ .ecwid-admin .box {
320
+ position: relative;
321
+ margin-top: 25px;
322
+ padding: 0 15px;
323
+
324
+ border: 1px solid #E5E5E5;
325
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
326
+ background: #FFF;
327
+ }
328
+
329
+
330
+ .ecwid-admin h2:before {
331
+ background: url(../images/ecwid_logo_symbol_RGB.svg);
332
+ width: 100px;
333
+ height: 20px;
334
+ border: 2px solid blue;
335
+ }
336
+
337
+ .ecwid-admin h3 {
338
+ position: relative;
339
+ padding: 0px;
340
+ margin: 0px;
341
+ left: 60px;
342
+
343
+ display: inline-block;
344
+ height: 70px;
345
+ line-height: 70px;
346
+
347
+ text-align: left;
348
+
349
+ font-size: 18px;
350
+ font-weight: normal;
351
+ }
352
+
353
+ .ecwid-admin .head {
354
+ border-bottom: 1px solid #EEE;
355
+ height: 70px;
356
+ }
357
+
358
+ .ecwid-admin .box .head {
359
+ text-align: left;
360
+ margin-bottom: 20px;
361
+ }
362
+
363
+ .ecwid-admin .head svg {
364
+ width: 32px;
365
+ height: 32px;
366
+ position: absolute;
367
+ top: 20px;
368
+ left: 20px;
369
+ margin-right: 10px;
370
+ }
371
+ /* END Common main */
372
+
373
+
374
+ /* CONNECT - positioning */
375
+ .ecwid-connect .box > div {
376
+ margin: 0px auto;
377
+ text-align: center;
378
+ }
379
+
380
+ .ecwid-connect .box h3 + div {
381
+ margin-top: 40px;
382
+ }
383
+
384
+ .ecwid-connect .box div:last-child {
385
+ margin-bottom: 40px;
386
+ }
387
+
388
+ .ecwid-connect .box .greeting-message {
389
+ margin-top: 11px;
390
+ line-height: 1.3em;
391
+ margin-bottom: 38px;
392
+ }
393
+
394
+ .ecwid-connect .box .connect-button {
395
+ margin-top: 8px;
396
+ }
397
+ .ecwid-connect .where-to-find-store-id {
398
+ margin-top: 25px;
399
+ margin-bottom: 0;
400
+ }
401
+
402
+ .ecwid-connect .box .note {
403
+ margin-top: 6px;
404
+ max-width: 760px;
405
+ font-size: 13px;
406
+ }
407
+
408
+ .ecwid-connect .box .create-account-link {
409
+ margin-top: 35px;
410
+ }
411
+
412
+
413
+ /* CONNECT - styles */
414
+ .ecwid-connect .box .greeting-message {
415
+ font-size: 24px;
416
+ font-weight: lighter;
417
+ }
418
+
419
+ .ecwid-connect .box .connect-button a {
420
+ padding: 14px 40px;
421
+ border: 0px none;
422
+ border-radius: 4px;
423
+ width: 180px;
424
+
425
+ background: #59bb00;
426
+ color: white;
427
+ font-size: 18px;
428
+ font-weight: lighter;
429
+ text-decoration: none;
430
+
431
+ transition: color 0.1s linear, background-color 0.1s linear, border-color 0.1s linear;
432
+ display: inline-block;
433
+ }
434
+
435
+ .ecwid-connect .box .connect-button a:hover {
436
+ background: #64A52F;
437
+ }
438
+
439
+ .ecwid-connect .box .note {
440
+ color: #A0A0A0;
441
+ line-height: 18px;
442
+ max-width: 400px;
443
+ }
444
+
445
+ .ecwid-connect .box .note.initial {
446
+ }
447
+
448
+ .ecwid-connect .box .note.auth-error {
449
+ max-width: 350px;
450
+ color: red;
451
+ }
452
+
453
+ /* wpcontent to stress the rule without using !mportant */
454
+ #wpcontent .ecwid-connect.no-oauth .with-oauth,
455
+ #wpcontent .ecwid-connect.with-oauth .no-oauth
456
+ {
457
+ display: none;
458
+ }
459
+
460
+ .ecwid-connect .connect-store-id {
461
+
462
+ }
463
+
464
+ .ecwid-connect #ecwid-store-id {
465
+ line-height: 38px;
466
+ width: 260px;
467
+ border-radius: 4px;
468
+ font-size: 16px;
469
+ font-weight: lighter;
470
+ padding-left: 10px;
471
+ font-family: 'Open Sans';
472
+ }
473
+
474
+ .ecwid-connect .box .create-account-link a {
475
+ text-decoration: none;
476
+ font-size: 14px;
477
+ }
478
+
479
+ .ecwid-dashboard .body {
480
+ padding: 70px 50px;
481
+ }
482
+
483
+ .ecwid-dashboard .greeting-image {
484
+ padding-right: 37px;
485
+ display: table-cell;
486
+ }
487
+
488
+ .ecwid-dashboard .greeting {
489
+ display: table-cell;
490
+ vertical-align: middle;
491
+ }
492
+
493
+ .ecwid-dashboard .greeting .greeting-title {
494
+ font-size: 24px;
495
+ margin-bottom: 12px;
496
+ }
497
+
498
+ .ecwid-dashboard .greeting .greeting-message {
499
+ font-size: 16px;
500
+ margin-bottom: 5px;
501
+ line-height: 1.3em;
502
+ }
503
+
504
+ .ecwid-dashboard .drop-down.store-id {
505
+ font-size: 14px;
506
+ padding: 10px 16px;
507
+ position: absolute;
508
+ right: 6px;
509
+ top: 13px;
510
+ line-height: 20px;
511
+ display: inline-block;
512
+ border: 1px solid transparent;
513
+ border-bottom: none;
514
+ height: 21px;
515
+
516
+ cursor: pointer;
517
+ }
518
+
519
+ .ecwid-dashboard .drop-down.store-id.hover {
520
+ cursor: default;
521
+ }
522
+
523
+ .ecwid-dashboard .drop-down.hover
524
+ {
525
+ border: 1px solid #CCC;
526
+ border-bottom: none;
527
+ background: white;
528
+ }
529
+
530
+ .ecwid-dashboard .store-id a {
531
+ text-decoration: none;
532
+ }
533
+
534
+ .ecwid-dashboard .drop-down > *:first-child:after {
535
+ font-family: 'dashicons';
536
+ content: '\f347';
537
+ position: relative;
538
+ top: .2em;
539
+ font-weight: lighter;
540
+ }
541
+
542
+ .ecwid-dashboard .drop-down.hover > *:first-child:after {
543
+ font-family: 'dashicons';
544
+ content: '\f343';
545
+ }
546
+
547
+
548
+ .ecwid-dashboard .drop-down > *:first-child {
549
+ color: #0074A2;
550
+ white-space: nowrap;
551
+ }
552
+
553
+ .ecwid-dashboard .drop-down > *:first-child:hover {
554
+ color: #2EA2CC;
555
+ }
556
+
557
+ .ecwid-dashboard .drop-down {
558
+ position: relative;
559
+ }
560
+
561
+ .ecwid-dashboard .drop-down.hover {
562
+ color: #2EA2CC;
563
+ }
564
+
565
+ .ecwid-dashboard .drop-down ul
566
+ {
567
+ display: none;
568
+ }
569
+ .ecwid-dashboard .drop-down.hover ul
570
+ {
571
+ display: inline-block;
572
+ }
573
+
574
+
575
+ .ecwid-dashboard .drop-down ul {
576
+ position: absolute;
577
+ top: 100%;
578
+ width: 100%;
579
+ font-size: 14px;
580
+ left: 0px;
581
+ margin: 0px;
582
+ padding-left: 0px;
583
+
584
+ outline: 1px solid #ccc;
585
+ }
586
+
587
+ .ecwid-dashboard .drop-down ul li {
588
+ border-bottom: 1px solid #ccc;
589
+ margin-bottom: 0;
590
+ background: white;
591
+ text-align: left;
592
+ }
593
+
594
+ .ecwid-dashboard .drop-down ul li:last-child {
595
+ border-bottom: none;
596
+ }
597
+
598
+
599
+ .ecwid-dashboard .drop-down ul a {
600
+ display: block;
601
+ padding: 10px 16px;
602
+ text-decoration: none;
603
+ }
604
+
605
+ .ecwid-dashboard .drop-down ul li:hover {
606
+ background: #0074A2;
607
+ }
608
+
609
+ .ecwid-dashboard .drop-down ul li:hover a {
610
+ color: white;
611
+ }
612
+
613
+ .ecwid-dashboard .drop-down * {
614
+ transition: color .2s, background .2s;
615
+ }
616
+
617
+ .ecwid-dashboard .greeting-links {
618
+ padding-left: 0px;
619
+ margin-top: 5px;
620
+ }
621
+
622
+ .ecwid-dashboard .greeting-links > * {
623
+ display: inline-block;
624
+ margin: 15px 15px;
625
+ }
626
+
627
+ .ecwid-dashboard .greeting-links > *:first-child {
628
+ margin-left: 0;
629
+ }
630
+
631
+ .ecwid-dashboard .greeting-links a {
632
+ text-decoration: none;
633
+ font-size: 14px;
634
+ }
635
+
636
+ .ecwid-dashboard.width-smaller .head {
637
+ height: 74px;
638
+ }
639
+
640
+ .ecwid-dashboard.width-smaller .head svg {
641
+ left: 20px;
642
+ top: 24px;
643
+ }
644
+
645
+ .ecwid-dashboard.width-smaller .head h3 {
646
+ left: 68px;
647
+ top: -4px;
648
+ }
649
+
650
+ .ecwid-dashboard.width-smaller .store-id {
651
+ right: inherit;
652
+ left: 51px;
653
+ top: 30px;
654
+ }
655
+
656
+ .ecwid-dashboard.width-smaller .body {
657
+ text-align: center;
658
+ padding: 20px 0px;
659
+ }
660
+
661
+ .ecwid-dashboard.width-smaller .greeting-image,
662
+ .ecwid-dashboard.width-smaller .greeting
663
+ {
664
+ display: block;
665
+ padding-right: 0px;
666
+ }
667
+
668
+ .ecwid-dashboard.width-smaller .greeting-title {
669
+ margin-top: 10px;
670
+ }
671
+
672
+
673
+ .ecwid-admin .mobile-br br {
674
+ display: none;
675
+ }
676
+
677
+ .ecwid-admin.width-smaller .mobile-br br {
678
+ display: inherit;
679
+ }
680
+
681
+ .ecwid-popup {
682
+ position: fixed;
683
+ left: 170px;
684
+ top: 42px;
685
+ right: 10px;
686
+ bottom: 10px;
687
+ }
688
+
689
+ .ecwid-popup .wrap {
690
+ margin: 0px;
691
+ }
692
+
693
+ .ecwid-popup .box {
694
+ margin: 0px;
695
+ position: absolute;
696
+ left: 0;
697
+ right: 0;
698
+ top: 0;
699
+ bottom: 0;
700
+ }
701
+ .ecwid-popup h3 span.close {
702
+ position: absolute;
703
+ right: 15px;
704
+ cursor: pointer;
705
+ color: #2EA2CC;
706
+ }
707
+
708
+ .ecwid-popup h3 span.close:before {
709
+ content: "\e606";
710
+ font-family: ecwid-icons;
711
+ font-size: 36px;
712
+ }
713
+
714
+
715
+ @media screen and (max-width: 960px) {
716
+ .ecwid-popup {
717
+ left: 44px;
718
+ }
719
+ }
720
+
721
+ @media screen and (max-width: 782px) {
722
+ .ecwid-popup {
723
+ left: 0px;
724
+ right: 0px;
725
+ top: 46px;
726
+ bottom: 0px;
727
+ }
728
+ }
 
css/store-popup.css CHANGED
@@ -1,422 +1,449 @@
1
- .ecwid-store-icon {
2
- padding-right: 3px;
3
- position: relative;
4
- display: inline-block;
5
- width: 16px;
6
- top: 3px;
7
- height: 16px;
8
- max-height: 16px;
9
- }
10
-
11
- .ecwid-store-icon svg * {
12
- fill: #888;
13
- }
14
-
15
- #ecwid-store-popup-content {
16
- display: none;
17
- }
18
-
19
- #ecwid-store-popup-content a {
20
- text-decoration: none;
21
- }
22
-
23
- #ecwid-store-popup-content .media-frame-content {
24
- }
25
-
26
- #ecwid-store-popup-content.open {
27
- display: block;
28
- }
29
-
30
- .wp-media-buttons:not(.has-ecwid) .update-ecwid {
31
- display: none;
32
- }
33
-
34
- .wp-media-buttons.has-ecwid .add-ecwid {
35
- display: none;
36
- }
37
-
38
- #ecwid-store-popup-content .media-modal-close:hover {
39
- text-decoration: none;
40
- }
41
-
42
- /*
43
- * Menu items visibility
44
- */
45
- #ecwid-store-popup-content .media-modal-content .media-menu a {
46
- display: none
47
- }
48
-
49
- #ecwid-store-popup-content .media-modal-content[data-mode=store-settings] .media-menu a[data-content=store-settings],
50
- #ecwid-store-popup-content .media-modal-content[data-mode=add-store] .media-menu a[data-content=add-store],
51
- #ecwid-store-popup-content .media-modal-content .media-menu a[data-content=appearance]
52
- {
53
- display: inherit;
54
- }
55
-
56
- body[class*=branch-3] #ecwid-store-popup-content .media-frame-title span.dashicons {
57
- display: none;
58
- }
59
- /*
60
- * Content area visibility
61
- */
62
- #ecwid-store-popup-content .media-modal-content .media-frame-title,
63
- #ecwid-store-popup-content .media-modal-content .media-frame-content,
64
- #ecwid-store-popup-content .media-modal-content .media-toolbar-primary
65
- {
66
- display: none;
67
- }
68
-
69
- #ecwid-store-popup-content .media-modal-content[data-active-dialog=add-store] .media-frame-title.add-store,
70
- #ecwid-store-popup-content .media-modal-content[data-active-dialog=add-store] .media-frame-content.store-settings,
71
-
72
- #ecwid-store-popup-content .media-modal-content[data-active-dialog=store-settings] .media-frame-title.store-settings,
73
- #ecwid-store-popup-content .media-modal-content[data-active-dialog=store-settings] .media-frame-content.store-settings,
74
-
75
- #ecwid-store-popup-content .media-modal-content[data-active-dialog=appearance] .media-frame-title.appearance,
76
- #ecwid-store-popup-content .media-modal-content[data-active-dialog=appearance] .media-frame-content.appearance,
77
-
78
- #ecwid-store-popup-content .media-modal-content[data-mode=add-store] .media-frame-toolbar .media-toolbar-primary.add-store,
79
- #ecwid-store-popup-content .media-modal-content[data-mode=store-settings] .media-frame-toolbar .media-toolbar-primary.store-settings
80
- {
81
- display: inherit;
82
- }
83
-
84
- /*
85
- * Size and centering
86
- */
87
-
88
- @media only screen and (min-width: 960px) and (min-height: 660px) {
89
-
90
- html:not(.ie8) #ecwid-store-popup-content .media-modal-content {
91
- position: absolute;
92
- width: 900px;
93
- height: 650px;
94
- top: 50%;
95
- left: 50%;
96
- right: inherit;
97
- bottom: inherit;
98
- transform: translate(-50%,-50%);
99
- -moz-transform: translate(-50%,-50%);
100
- -ms-transform: translate(-50%,-50%);
101
- -webkit-transform: translate(-50%,-50%);
102
- }
103
- }
104
-
105
- @media only screen and (min-width: 960px) and (min-height: 400px) and (max-height: 660px) {
106
-
107
- html:not(.ie8) #ecwid-store-popup-content .media-modal-content {
108
- position: absolute;
109
- width: 900px;
110
- left: 50%;
111
- right: inherit;
112
- transform: translate(-50%,0%);
113
- -moz-transform: translate(-50%,0%);
114
- -ms-transform: translate(-50%,0%);
115
- -webkit-transform: translate(-50%,0%);
116
- }
117
- }
118
-
119
- @media only screen and (min-width: 640px) and (max-width: 960px) and (min-height: 660px) {
120
-
121
- html:not(.ie8) #ecwid-store-popup-content .media-modal-content {
122
- position: absolute;
123
- height: 650px;
124
- top: 50%;
125
- bottom: inherit;
126
- transform: translate(0%,-50%);
127
- -moz-transform: translate(0%,-50%);
128
- -ms-transform: translate(0%,-50%);
129
- -webkit-transform: translate(0%,-50%);
130
- }
131
- }
132
-
133
- @media only screen and (max-width: 750px) {
134
- #ecwid-store-popup-content .store-settings-preview {
135
- display: none !important;
136
- }
137
-
138
- #ecwid-store-popup-content .store-settings-wrapper {
139
- padding-left: 0px;
140
- }
141
- }
142
-
143
- html:not(.ie8) #ecwid-store-popup-content .store-settings-wrapper {
144
- position: absolute;
145
- top: 50%;
146
- transform: translate(0%,-50%);
147
- -moz-transform: translate(0%,-50%);
148
- -ms-transform: translate(0%,-50%);
149
- -webkit-transform: translate(0%,-50%);
150
- }
151
- /*
152
- *
153
- */
154
- .ecwid-store-editor {
155
- padding: 13px 19px;
156
- }
157
-
158
- #ecwid-store-popup-content .pure-control-group {
159
- margin: 10px 0px;
160
- }
161
-
162
- #ecwid-store-popup-content label {
163
- font-size: 14px;
164
- font-weight: 400;
165
- display: inline-block;
166
- width: 270px;
167
- }
168
-
169
- #ecwid-store-popup-content .products-per-page-label {
170
- display: block;
171
- }
172
-
173
- #ecwid-store-popup-content .ecwid-pb-view-size {
174
- margin-left: 15px;
175
- margin-right: 30px;
176
- margin-top: 15px;
177
- }
178
-
179
- #ecwid-store-popup-content .ecwid-pb-view-size:nth-child(4) {
180
- margin-right: 0px;
181
- }
182
-
183
-
184
- #ecwid-store-popup-content .ecwid-pb-view-size .title {
185
- font-size: 14px;
186
- }
187
-
188
- #ecwid-store-popup-content .ecwid-pb-view-size .ruler {
189
- z-index: 0;
190
- }
191
-
192
- #ecwid-store-popup-content input {
193
- position: relative;
194
- font-size: 13px;
195
- }
196
-
197
- #ecwid-store-popup-content input.number {
198
- border-radius: 4px;
199
- width: 27px;
200
- padding: 3px;
201
- text-align: center;
202
- }
203
-
204
- #ecwid-store-popup-content .note.pb-note {
205
- max-width: 595px;
206
- font-size: 11px;
207
- margin: 8px 5px;
208
- line-height: 16px;
209
- }
210
-
211
- #ecwid-store-popup-content hr.after-pb {
212
- margin-bottom: 25px;
213
- }
214
-
215
- #ecwid-store-popup-content .media-toolbar-secondary {
216
- font-size: 14px;
217
- margin-left:5px;
218
- }
219
-
220
- #ecwid-store-popup-content .media-toolbar-secondary .store-id {
221
- margin-top: 10px;
222
- font-weight: bold;
223
- }
224
-
225
-
226
- #ecwid-store-popup-content .ecwid-store-editor.add-store {
227
- padding-top: 125px;
228
- }
229
-
230
- #ecwid-store-popup-content .store-settings-preview {
231
- display: inline-block;
232
- width: 162px;
233
- height: 200px;
234
- }
235
-
236
- #ecwid-store-popup-content .store-settings,
237
- #ecwid-store-popup-content .store-settings-preview
238
- {
239
- vertical-align: top;
240
- display: inline-block;
241
- }
242
-
243
- #ecwid-store-popup-content .store-settings h3 {
244
- font-size: 20px;
245
- margin-bottom: 5px;
246
- }
247
-
248
- #ecwid-store-popup-content .store-settings-preview {
249
- width: 145px;
250
- margin-top: 17px;
251
- position: relative;
252
- }
253
-
254
- #ecwid-store-popup-content .store-settings-preview label {
255
- position: absolute;
256
- background: transparent;
257
- cursor: pointer;
258
- display: inline-block;
259
- }
260
-
261
- #ecwid-store-popup-content .store-settings .note {
262
- margin-right: 30px;
263
- }
264
-
265
- #ecwid-store-popup-content .note {
266
- color: #BBBBBB;
267
- }
268
-
269
- #ecwid-store-popup-content .store-settings-preview .ecwid-search {
270
- top: 0px;
271
- width: 45px;
272
- height: 45px;
273
- }
274
-
275
- #ecwid-store-popup-content .store-settings-preview .ecwid-minicart {
276
- top: 0px;
277
- right: 0px;
278
- width: 45px;
279
- height: 45px;
280
- }
281
-
282
- #ecwid-store-popup-content .store-settings-preview .ecwid-categories {
283
- top: 45px;
284
- width: 100%;
285
- height: 20px;
286
- }
287
-
288
- #ecwid-store-popup-content .store-settings-wrapper path {
289
- fill: #d1ecf5;
290
- }
291
-
292
- #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=categories] path.categories,
293
- #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=minicart] path.minicart,
294
- #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=search] path.search,
295
- #ecwid-store-popup-content .store-settings-wrapper.ecwid-categories[data-ecwid-widget-hover=categories] path.categories,
296
- #ecwid-store-popup-content .store-settings-wrapper.ecwid-minicart[data-ecwid-widget-hover=minicart] path.minicart,
297
- #ecwid-store-popup-content .store-settings-wrapper.ecwid-search[data-ecwid-widget-hover=search] path.search
298
- {
299
- fill: #56d5ff;
300
- }
301
-
302
- #ecwid-store-popup-content .store-settings-wrapper.ecwid-categories path.categories,
303
- #ecwid-store-popup-content .store-settings-wrapper.ecwid-minicart path.minicart,
304
- #ecwid-store-popup-content .store-settings-wrapper.ecwid-search path.search,
305
- #ecwid-store-popup-content .store-settings-wrapper path.productbrowser
306
- {
307
- fill: #298cba;
308
- }
309
-
310
- #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=categories] label[data-ecwid-widget=categories],
311
- #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=minicart] label[data-ecwid-widget=minicart],
312
- #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=search] label[data-ecwid-widget=search]
313
- {
314
- color: #40c1ec;
315
- }
316
-
317
- #ecwid-store-popup-content .media-frame-content.store-settings {
318
- padding-left: 43px;
319
- }
320
-
321
- #ecwid-store-popup-content .media-frame-content .store-settings-wrapper .store-settings {
322
- padding-left: 43px;
323
- }
324
-
325
- #ecwid-store-popup-content .store-settings .pure-control-group {
326
- margin: 20px 0px;
327
- }
328
-
329
- #ecwid-store-popup-content .store-settings .pure-control-group label {
330
- font-size: 16px;
331
- color: black;
332
- font-weight: 400;
333
- }
334
-
335
- #ecwid-store-popup-content .appearance label {
336
- font-weight: 600;
337
- }
338
-
339
- #ecwid-store-popup-content .pure-control-group.default-category-id {
340
- display: table;
341
- }
342
-
343
- #ecwid-store-popup-content .pure-control-group.default-category-id label {
344
- width: 270px;
345
- min-width: 270px;
346
- max-width: 270px;
347
- display: table-cell;
348
- }
349
-
350
- #ecwid-store-popup-content .pure-control-group.default-category-id .value {
351
- display: table-cell;
352
- }
353
-
354
- #ecwid-store-popup-content .pure-control-group.default-category-id .value select,
355
- #ecwid-store-popup-content .pure-control-group.default-category-id .value input {
356
- width:100%;
357
- }
358
-
359
-
360
- @media only screen and (max-width: 440px) {
361
- #ecwid-store-popup-content .appearance .pure-control-group.params-list {
362
- margin: 35px 0px;
363
- position: relative;
364
- }
365
-
366
- #ecwid-store-popup-content .appearance .pure-control-group.params-list select,
367
- #ecwid-store-popup-content .appearance .pure-control-group.params-list input {
368
- width: 100%;
369
- }
370
-
371
- #ecwid-store-popup-content .appearance .pure-control-group.params-list label,
372
- #ecwid-store-popup-content .appearance .pure-control-group.params-list .value {
373
- display: inline-block;
374
- width: 100%;
375
- }
376
-
377
- #ecwid-store-popup-content .appearance .pure-control-group.params-list input#ecwid_pb_categoriesperrow {
378
- width: 27px;
379
- position: absolute;
380
- right: 0px;
381
- }
382
-
383
- #ecwid-store-popup-content .media-frame-content .store-settings-wrapper .store-settings {
384
- padding-left: 0px;
385
- }
386
-
387
-
388
- #ecwid-store-popup-content .appearance .pure-control-group.params-list label {
389
- width: auto;
390
- min-width: inherit;
391
- max-width: inherit;
392
- }
393
- }
394
-
395
- #ecwid-store-popup-content .store-settings .pure-control-group input[type=checkbox] {
396
- margin-right: 15px;
397
- }
398
-
399
- @media only screen and (max-width: 640px) {
400
- #ecwid-store-popup-content .note.pb-note {
401
- width: auto;
402
- text-align: left;
403
- }
404
-
405
- #ecwid-store-popup-content .pb-views {
406
- text-align: center;
407
- }
408
-
409
-
410
- #ecwid-store-popup-content .appearance input.number {
411
- margin-left: inherit;
412
- }
413
-
414
- #ecwid-store-popup-content .ecwid-pb-view-size {
415
- margin-left: 25px;
416
- margin-right: 25px;
417
- }
418
-
419
- #ecwid-store-popup-content .media-frame-content .store-settings-wrapper {
420
- padding-left: 0px;
421
- }
422
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .ecwid-store-icon {
2
+ padding-right: 3px;
3
+ position: relative;
4
+ display: inline-block;
5
+ width: 16px;
6
+ top: 3px;
7
+ height: 16px;
8
+ max-height: 16px;
9
+ }
10
+
11
+ .ecwid-store-icon svg * {
12
+ fill: #888;
13
+ }
14
+
15
+ #ecwid-store-popup-content {
16
+ display: none;
17
+ }
18
+
19
+ #ecwid-store-popup-content a {
20
+ text-decoration: none;
21
+ }
22
+
23
+ #ecwid-store-popup-content .media-frame-content {
24
+ }
25
+
26
+ #ecwid-store-popup-content.open {
27
+ display: block;
28
+ }
29
+
30
+ .wp-media-buttons:not(.has-ecwid) .update-ecwid {
31
+ display: none;
32
+ }
33
+
34
+ .wp-media-buttons.has-ecwid .add-ecwid {
35
+ display: none;
36
+ }
37
+
38
+ #ecwid-store-popup-content .media-modal-close:hover {
39
+ text-decoration: none;
40
+ }
41
+
42
+ /*
43
+ * Menu items visibility
44
+ */
45
+ #ecwid-store-popup-content .media-modal-content .media-menu a {
46
+ display: none
47
+ }
48
+
49
+ #ecwid-store-popup-content .media-modal-content[data-mode=store-settings] .media-menu a[data-content=store-settings],
50
+ #ecwid-store-popup-content .media-modal-content[data-mode=add-store] .media-menu a[data-content=add-store],
51
+ #ecwid-store-popup-content .media-modal-content .media-menu a[data-content=appearance]
52
+ {
53
+ display: inherit;
54
+ }
55
+
56
+ body[class*=branch-3] #ecwid-store-popup-content .media-frame-title span.dashicons {
57
+ display: none;
58
+ }
59
+ /*
60
+ * Content area visibility
61
+ */
62
+ #ecwid-store-popup-content .media-modal-content .media-frame-title,
63
+ #ecwid-store-popup-content .media-modal-content .media-frame-content,
64
+ #ecwid-store-popup-content .media-modal-content .media-toolbar-primary
65
+ {
66
+ display: none;
67
+ }
68
+
69
+ #ecwid-store-popup-content .media-modal-content[data-active-dialog=add-store] .media-frame-title.add-store,
70
+ #ecwid-store-popup-content .media-modal-content[data-active-dialog=add-store] .media-frame-content.store-settings,
71
+
72
+ #ecwid-store-popup-content .media-modal-content[data-active-dialog=store-settings] .media-frame-title.store-settings,
73
+ #ecwid-store-popup-content .media-modal-content[data-active-dialog=store-settings] .media-frame-content.store-settings,
74
+
75
+ #ecwid-store-popup-content .media-modal-content[data-active-dialog=appearance] .media-frame-title.appearance,
76
+ #ecwid-store-popup-content .media-modal-content[data-active-dialog=appearance] .media-frame-content.appearance,
77
+
78
+ #ecwid-store-popup-content .media-modal-content[data-mode=add-store] .media-frame-toolbar .media-toolbar-primary.add-store,
79
+ #ecwid-store-popup-content .media-modal-content[data-mode=store-settings] .media-frame-toolbar .media-toolbar-primary.store-settings
80
+ {
81
+ display: inherit;
82
+ }
83
+
84
+ /*
85
+ * Size and centering
86
+ */
87
+
88
+ @media only screen and (min-width: 960px) and (min-height: 660px) {
89
+
90
+ html:not(.ie8) #ecwid-store-popup-content .media-modal-content {
91
+ position: absolute;
92
+ width: 900px;
93
+ height: 650px;
94
+ top: 50%;
95
+ left: 50%;
96
+ right: inherit;
97
+ bottom: inherit;
98
+ transform: translate(-50%,-50%);
99
+ -moz-transform: translate(-50%,-50%);
100
+ -ms-transform: translate(-50%,-50%);
101
+ -webkit-transform: translate(-50%,-50%);
102
+ }
103
+ }
104
+
105
+ @media only screen and (min-width: 960px) and (min-height: 400px) and (max-height: 660px) {
106
+
107
+ html:not(.ie8) #ecwid-store-popup-content .media-modal-content {
108
+ position: absolute;
109
+ width: 900px;
110
+ left: 50%;
111
+ right: inherit;
112
+ transform: translate(-50%,0%);
113
+ -moz-transform: translate(-50%,0%);
114
+ -ms-transform: translate(-50%,0%);
115
+ -webkit-transform: translate(-50%,0%);
116
+ }
117
+ }
118
+
119
+ @media only screen and (min-width: 640px) and (max-width: 960px) and (min-height: 660px) {
120
+
121
+ html:not(.ie8) #ecwid-store-popup-content .media-modal-content {
122
+ position: absolute;
123
+ height: 650px;
124
+ top: 50%;
125
+ bottom: inherit;
126
+ transform: translate(0%,-50%);
127
+ -moz-transform: translate(0%,-50%);
128
+ -ms-transform: translate(0%,-50%);
129
+ -webkit-transform: translate(0%,-50%);
130
+ }
131
+ }
132
+
133
+ @media only screen and (max-width: 750px) {
134
+ #ecwid-store-popup-content .store-settings-preview {
135
+ display: none !important;
136
+ }
137
+
138
+ #ecwid-store-popup-content .store-settings-wrapper {
139
+ padding-left: 0px;
140
+ }
141
+ }
142
+
143
+ html:not(.ie8) #ecwid-store-popup-content .store-settings-wrapper {
144
+ position: absolute;
145
+ top: 50%;
146
+ transform: translate(0%,-50%);
147
+ -moz-transform: translate(0%,-50%);
148
+ -ms-transform: translate(0%,-50%);
149
+ -webkit-transform: translate(0%,-50%);
150
+ }
151
+ /*
152
+ *
153
+ */
154
+ .ecwid-store-editor {
155
+ padding: 13px 19px;
156
+ }
157
+
158
+ #ecwid-store-popup-content .pure-control-group {
159
+ margin: 10px 0px;
160
+ }
161
+
162
+ #ecwid-store-popup-content label {
163
+ font-size: 14px;
164
+ font-weight: 400;
165
+ display: inline-block;
166
+ width: 270px;
167
+ }
168
+
169
+ #ecwid-store-popup-content .products-per-page-label {
170
+ display: block;
171
+ }
172
+
173
+ #ecwid-store-popup-content .ecwid-pb-view-size {
174
+ margin-left: 15px;
175
+ margin-right: 30px;
176
+ margin-top: 15px;
177
+ }
178
+
179
+ #ecwid-store-popup-content .ecwid-pb-view-size:nth-child(4) {
180
+ margin-right: 0px;
181
+ }
182
+
183
+
184
+ #ecwid-store-popup-content .ecwid-pb-view-size .title {
185
+ font-size: 14px;
186
+ }
187
+
188
+ #ecwid-store-popup-content .ecwid-pb-view-size .ruler {
189
+ z-index: 0;
190
+ }
191
+
192
+ #ecwid-store-popup-content input {
193
+ position: relative;
194
+ font-size: 13px;
195
+ }
196
+
197
+ #ecwid-store-popup-content input.number {
198
+ border-radius: 4px;
199
+ width: 27px;
200
+ padding: 3px;
201
+ text-align: center;
202
+ }
203
+
204
+ #ecwid-store-popup-content .note.pb-note {
205
+ max-width: 595px;
206
+ font-size: 11px;
207
+ margin: 8px 5px;
208
+ line-height: 16px;
209
+ }
210
+
211
+ #ecwid-store-popup-content hr.after-pb {
212
+ margin-bottom: 25px;
213
+ }
214
+
215
+ #ecwid-store-popup-content .media-toolbar-secondary {
216
+ font-size: 14px;
217
+ margin-left:5px;
218
+ }
219
+
220
+ #ecwid-store-popup-content .media-toolbar-secondary .store-id {
221
+ margin-top: 10px;
222
+ font-weight: bold;
223
+ }
224
+
225
+
226
+ #ecwid-store-popup-content .ecwid-store-editor.add-store {
227
+ padding-top: 125px;
228
+ }
229
+
230
+ #ecwid-store-popup-content .store-settings-preview {
231
+ display: inline-block;
232
+ width: 162px;
233
+ height: 200px;
234
+ }
235
+
236
+ #ecwid-store-popup-content .store-settings,
237
+ #ecwid-store-popup-content .store-settings-preview
238
+ {
239
+ vertical-align: top;
240
+ display: inline-block;
241
+ }
242
+
243
+ #ecwid-store-popup-content .store-settings h3 {
244
+ font-size: 20px;
245
+ margin-bottom: 5px;
246
+ }
247
+
248
+ #ecwid-store-popup-content .store-settings-preview {
249
+ width: 145px;
250
+ margin-top: 17px;
251
+ position: relative;
252
+ }
253
+
254
+ #ecwid-store-popup-content .store-settings-preview label {
255
+ position: absolute;
256
+ background: transparent;
257
+ cursor: pointer;
258
+ display: inline-block;
259
+ }
260
+
261
+ #ecwid-store-popup-content .store-settings .note {
262
+ margin-right: 30px;
263
+ }
264
+
265
+ #ecwid-store-popup-content .note {
266
+ color: #BBBBBB;
267
+ }
268
+
269
+ #ecwid-store-popup-content .store-settings-preview .ecwid-search {
270
+ top: 0px;
271
+ width: 45px;
272
+ height: 45px;
273
+ }
274
+
275
+ #ecwid-store-popup-content .store-settings-preview .ecwid-minicart {
276
+ top: 0px;
277
+ right: 0px;
278
+ width: 45px;
279
+ height: 45px;
280
+ }
281
+
282
+ #ecwid-store-popup-content .store-settings-preview .ecwid-categories {
283
+ top: 45px;
284
+ width: 100%;
285
+ height: 20px;
286
+ }
287
+
288
+ #ecwid-store-popup-content .store-settings-wrapper path {
289
+ fill: #d1ecf5;
290
+ }
291
+
292
+ #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=categories] path.categories,
293
+ #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=minicart] path.minicart,
294
+ #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=search] path.search,
295
+ #ecwid-store-popup-content .store-settings-wrapper.ecwid-categories[data-ecwid-widget-hover=categories] path.categories,
296
+ #ecwid-store-popup-content .store-settings-wrapper.ecwid-minicart[data-ecwid-widget-hover=minicart] path.minicart,
297
+ #ecwid-store-popup-content .store-settings-wrapper.ecwid-search[data-ecwid-widget-hover=search] path.search
298
+ {
299
+ fill: #56d5ff;
300
+ }
301
+
302
+ #ecwid-store-popup-content .store-settings-wrapper.ecwid-categories path.categories,
303
+ #ecwid-store-popup-content .store-settings-wrapper.ecwid-minicart path.minicart,
304
+ #ecwid-store-popup-content .store-settings-wrapper.ecwid-search path.search,
305
+ #ecwid-store-popup-content .store-settings-wrapper path.productbrowser
306
+ {
307
+ fill: #298cba;
308
+ }
309
+
310
+ #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=categories] label[data-ecwid-widget=categories],
311
+ #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=minicart] label[data-ecwid-widget=minicart],
312
+ #ecwid-store-popup-content .store-settings-wrapper[data-ecwid-widget-hover=search] label[data-ecwid-widget=search]
313
+ {
314
+ color: #40c1ec;
315
+ }
316
+
317
+ #ecwid-store-popup-content .media-frame-content.store-settings {
318
+ padding-left: 43px;
319
+ }
320
+
321
+ #ecwid-store-popup-content .media-frame-content .store-settings-wrapper .store-settings {
322
+ padding-left: 43px;
323
+ }
324
+
325
+ #ecwid-store-popup-content .store-settings .pure-control-group {
326
+ margin: 20px 0px;
327
+ }
328
+
329
+ #ecwid-store-popup-content .store-settings .pure-control-group label {
330
+ font-size: 16px;
331
+ color: black;
332
+ font-weight: 400;
333
+ }
334
+
335
+ #ecwid-store-popup-content .appearance label {
336
+ font-weight: 600;
337
+ }
338
+
339
+ #ecwid-store-popup-content .pure-control-group.default-category-id {
340
+ display: table;
341
+ }
342
+
343
+ #ecwid-store-popup-content .pure-control-group.default-category-id label {
344
+ width: 270px;
345
+ min-width: 270px;
346
+ max-width: 270px;
347
+ display: table-cell;
348
+ }
349
+
350
+ #ecwid-store-popup-content .pure-control-group.default-category-id .value {
351
+ display: table-cell;
352
+ }
353
+
354
+ #ecwid-store-popup-content .pure-control-group.default-category-id .value select,
355
+ #ecwid-store-popup-content .pure-control-group.default-category-id .value input {
356
+ width:100%;
357
+ }
358
+
359
+
360
+ @media only screen and (max-width: 440px) {
361
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list {
362
+ margin: 35px 0px;
363
+ position: relative;
364
+ }
365
+
366
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list select,
367
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list input {
368
+ width: 100%;
369
+ }
370
+
371
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list label,
372
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list .value {
373
+ display: inline-block;
374
+ width: 100%;
375
+ }
376
+
377
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list input#ecwid_pb_categoriesperrow {
378
+ width: 27px;
379
+ position: absolute;
380
+ right: 0px;
381
+ }
382
+
383
+ #ecwid-store-popup-content .media-frame-content .store-settings-wrapper .store-settings {
384
+ padding-left: 0px;
385
+ }
386
+
387
+
388
+ #ecwid-store-popup-content .appearance .pure-control-group.params-list label {
389
+ width: auto;
390
+ min-width: inherit;
391
+ max-width: inherit;
392
+ }
393
+ }
394
+
395
+ #ecwid-store-popup-content .store-settings .pure-control-group input[type=checkbox] {
396
+ margin-right: 15px;
397
+ }
398
+
399
+
400
+ /*
401
+ * Two styles below are the copy of wp pre-4.3 styles for close cross in the up right corner
402
+ * Need to use those to make sure it is displayed the same way across different wp versions
403
+ */
404
+ #ecwid-store-popup-content .media-modal-close {
405
+ position: absolute;
406
+ text-decoration: none;
407
+ top: 10px;
408
+ right: 10px;
409
+ width: 30px;
410
+ height: 30px;
411
+ z-index: 1000;
412
+ -webkit-transition: color .1s ease-in-out,background .1s ease-in-out;
413
+ transition: color .1s ease-in-out,background .1s ease-in-out;
414
+ }
415
+
416
+ #ecwid-store-popup-content .media-modal-close span.media-modal-icon {
417
+ display: block;
418
+ margin-top: 5px;
419
+ width: 30px;
420
+ height: 15px;
421
+ background-image: none;
422
+ text-align: center;
423
+ }
424
+
425
+
426
+ @media only screen and (max-width: 640px) {
427
+ #ecwid-store-popup-content .note.pb-note {
428
+ width: auto;
429
+ text-align: left;
430
+ }
431
+
432
+ #ecwid-store-popup-content .pb-views {
433
+ text-align: center;
434
+ }
435
+
436
+
437
+ #ecwid-store-popup-content .appearance input.number {
438
+ margin-left: inherit;
439
+ }
440
+
441
+ #ecwid-store-popup-content .ecwid-pb-view-size {
442
+ margin-left: 25px;
443
+ margin-right: 25px;
444
+ }
445
+
446
+ #ecwid-store-popup-content .media-frame-content .store-settings-wrapper {
447
+ padding-left: 0px;
448
+ }
449
+ }
css/themes/2014.css CHANGED
@@ -1,8 +1,8 @@
1
- .site-content .entry-header, .site-content .entry-content, .site-content .entry-summary, .site-content .entry-meta {
2
- max-width: none;
3
- }
4
-
5
- #ecwid_product_browser_scroller.ecwid-scroller-adjustment {
6
- position: relative;
7
- top: -48px;
8
  }
1
+ .site-content .entry-header, .site-content .entry-content, .site-content .entry-summary, .site-content .entry-meta {
2
+ max-width: none;
3
+ }
4
+
5
+ #ecwid_product_browser_scroller.ecwid-scroller-adjustment {
6
+ position: relative;
7
+ top: -48px;
8
  }
css/themes/2015.css CHANGED
@@ -1,12 +1,12 @@
1
- html#ecwid_html body#ecwid_body .ecwid-SearchPanel-field {
2
- width: inherit;
3
- }
4
-
5
- html#ecwid_html body#ecwid_body p+.ecwid-shopping-cart-search {
6
- position: relative;
7
- top: -1.6842em;
8
- }
9
-
10
- html#ecwid_html body.ecwid-shopping-cart h1.entry-title {
11
- margin-bottom: 1.1em;
12
  }
1
+ html#ecwid_html body#ecwid_body .ecwid-SearchPanel-field {
2
+ width: inherit;
3
+ }
4
+
5
+ html#ecwid_html body#ecwid_body p+.ecwid-shopping-cart-search {
6
+ position: relative;
7
+ top: -1.6842em;
8
+ }
9
+
10
+ html#ecwid_html body.ecwid-shopping-cart h1.entry-title {
11
+ margin-bottom: 1.1em;
12
  }
css/themes/responsive-adjustments.css CHANGED
@@ -1,385 +1,385 @@
1
- /* Page Adjustments */
2
- body.ecwid-shopping-cart #wrapper {
3
- padding: 0 47px 20px 47px;
4
- }
5
-
6
- body.ecwid-shopping-cart .page {
7
- position: relative;
8
- }
9
-
10
- body.ecwid-shopping-cart #content-full {
11
- margin-top: 55px;
12
- }
13
-
14
- .ecwid-shopping-cart .breadcrumb-list {
15
- display: none;
16
- }
17
-
18
- body.ecwid-shopping-cart h1.entry-title {
19
- padding-left: 1px;
20
- font-size: 37px;
21
- margin-top: 16px;
22
- }
23
-
24
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a,
25
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-link,
26
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath-categoryLink a,
27
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-results-topPanel .ecwid-results-topPanel-viewAsPanel-link,
28
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-productsTable-addToBagLink
29
- {
30
- text-decoration: none;
31
- }
32
-
33
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a:hover,
34
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-link:hover,
35
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath-categoryLink a:hover,
36
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-results-topPanel .ecwid-results-topPanel-viewAsPanel-link:hover,
37
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-productsTable-addToBagLink:hover
38
- {
39
- text-decoration: underline;
40
- }
41
-
42
- html#ecwid_html body#ecwid_body #container .ecwid-categories-category {
43
- font-family: Open Sans, Trebuchet MS, Helvetica, Verdana, sans-serif;
44
- font-size: 22px;
45
- }
46
-
47
- /* Minicart */
48
-
49
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-minicart {
50
- position: absolute;
51
- top: 58px;
52
- display: inline-block;
53
- right: 0px;
54
- }
55
-
56
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-minicart div.ecwid-minicart-mini {
57
- width: 100px;
58
- text-align: right;
59
- }
60
- .ecwid-shopping-cart-minicart {
61
- visibility: hidden;
62
- }
63
-
64
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-rolloverContainer {
65
- display: block;
66
- }
67
-
68
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-minicart {
69
- margin-right: 5px;
70
- height: 35px;
71
- }
72
-
73
- /* Search */
74
-
75
-
76
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel input.ecwid-SearchPanel-field {
77
- width:30px;
78
- }
79
-
80
- .ecwid-shopping-cart .ecwid-shopping-cart-search {
81
- position: absolute;
82
- right: 5px;
83
- top: 8px;
84
- z-index: 1;
85
- height: 45px;
86
- }
87
-
88
- .ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel {
89
- display: none;
90
- width: 40px;
91
- }
92
-
93
- .ecwid-shopping-cart.ecwid-search-open .ecwid-search-placeholder {
94
- display: none;
95
- }
96
-
97
- .ecwid-shopping-cart.ecwid-search-open .ecwid-shopping-cart-search .ecwid-SearchPanel {
98
- display: block;
99
- width: 180px;
100
- -webkit-transition: width 0.1s;
101
- transition: width 0.1s;
102
- }
103
-
104
- .ecwid-shopping-cart-search,
105
- .ecwid-SearchPanel {
106
- white-space: nowrap;
107
- }
108
-
109
- .ecwid-shopping-cart-search .ecwid-SearchPanel-button,
110
- .ecwid-SearchPanel .ecwid-SearchPanel-button {
111
- border: 0 none;
112
- background: transparent;
113
- line-height: normal;
114
- vertical-align: top;
115
- padding: 0;
116
- margin: 0;
117
- width: 0px;
118
- height:30px;
119
- position: relative;
120
- right: 0px;
121
- cursor: pointer;
122
- font-size: 0px;
123
- }
124
-
125
- .ecwid-shopping-cart-search .ecwid-search-placeholder {
126
- width: 1px;
127
- height: 20px;
128
- position: absolute;
129
- right: 23px;
130
- top: -2px;
131
- z-index: 1;
132
- }
133
-
134
- .ecwid-shopping-cart .ecwid-search-placeholder:after,
135
- .ecwid-SearchPanel .ecwid-SearchPanel-button:before {
136
- content: '\f179';
137
- font-weight: bold;
138
- font-family: 'dashicons';
139
- font-size: 18px;
140
- color: #AAA;
141
- position: relative;
142
- }
143
-
144
- .ecwid-shopping-cart .ecwid-search-placeholder:after
145
- {
146
- top: 7px;
147
- cursor: pointer;
148
- }
149
-
150
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-search input,
151
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-search input:focus
152
- {
153
- border: 1px solid #D1D1D1;
154
- outline: none;
155
- }
156
-
157
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart.ecwid-search-open .ecwid-shopping-cart-search input.ecwid-SearchPanel-field,
158
- html#ecwid_html body#ecwid_body .ecwid-productBrowser-search-SearchPanel input[type=search],
159
- html#ecwid_html body#ecwid_body .ecwid-SearchPanel input.ecwid-SearchPanel-field
160
- {
161
- -webkit-appearance: none;
162
- border-radius: 3px;
163
- margin-right: -24px;
164
- padding: 6px 0px 6px 3px;
165
- box-shadow: none;
166
- border: 1px solid #D1D1D1;
167
- width:100%;
168
- box-sizing: border-box;
169
- }
170
-
171
- input.ecwid-SearchPanel-field::-webkit-search-cancel-button {
172
- -webkit-appearance: none;
173
- margin: 0px;
174
- }
175
-
176
- /* Auth */
177
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-categories {
178
- margin-top: 60px;
179
- }
180
-
181
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-product-browser {
182
- margin-top: 50px;
183
- }
184
-
185
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini,
186
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-search,
187
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-minicart {
188
- position: absolute;
189
- }
190
-
191
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini {
192
- margin-bottom: 5px;
193
- display: inline-block;
194
- width: inherit;
195
- right: 0px;
196
- }
197
-
198
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart.ecwid-with-search .ecwid-productBrowser-auth-mini {
199
- margin-right: 25px;
200
- }
201
-
202
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini td {
203
- height: 45px;
204
- }
205
-
206
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-ProductBrowser-auth-anonim,
207
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-ProductBrowser-auth-logged {
208
- margin-right: 0px;
209
- }
210
-
211
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart.ecwid-search-open .ecwid-productBrowser-auth-mini {
212
- margin-right: 195px;
213
- -webkit-transition: margin-right 0.1s;
214
- transition: margin-right 0.1s;
215
- }
216
-
217
- /* Product browser */
218
-
219
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser {
220
- padding: 0;
221
- }
222
-
223
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser-head {
224
- font-size: 26px;
225
- margin-top: 2px;
226
- }
227
-
228
- body.ecwid-shopping-cart h1,
229
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a,
230
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a:active,
231
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-head,
232
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a,
233
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a:active,
234
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-price,
235
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser-categoryPath a,
236
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-results-topPanel div
237
- {
238
- font-family: Open Sans, Trebuchet MS, Helvetica, Verdana, sans-serif;
239
- }
240
-
241
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath a,
242
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath a:active
243
- {
244
- font-size: 14px;
245
- }
246
-
247
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath-categoryLabel
248
- {
249
- font-size: 13px;
250
- }
251
-
252
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath {
253
- padding-top: 5px;
254
- }
255
-
256
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productsGrid-mainTable {
257
- margin-top: 18px;
258
- }
259
-
260
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productsGrid div.ecwid-productBrowser-productNameLink {
261
- text-align: center;
262
- }
263
-
264
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a,
265
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a:active,
266
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a:visited
267
- {
268
- text-decoration: none;
269
- font-size: 20px;
270
- }
271
-
272
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productsGrid div.ecwid-productBrowser-sku {
273
- display: none;
274
- }
275
-
276
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-price {
277
- margin-top: 0;
278
- font-weight: 600;
279
- }
280
-
281
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser td.ecwid-productBrowser-productsGrid-cellSpace {
282
- height: 62px;
283
- }
284
-
285
- /* Product details */
286
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-details-rightPanel {
287
- margin-right: 4px;
288
- }
289
-
290
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-details-inStockLabel,
291
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-fieldLabel,
292
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-details-qtyLabel
293
- {
294
- font-family: Open Sans, Trebuchet MS, Helvetica, Verdana, sans-serif;
295
- }
296
-
297
- @media screen and (max-width: 650px) {
298
-
299
- body.ecwid-shopping-cart #content-full {
300
- margin-top: 32px;
301
- }
302
- body.ecwid-shopping-cart h1.entry-title {
303
- display: none;
304
- }
305
-
306
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser {
307
- padding: 0 4px !important;
308
- }
309
-
310
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-categories {
311
- display: none;
312
-
313
- }
314
- /* Search */
315
-
316
- .ecwid-shopping-cart .ecwid-shopping-cart-search {
317
- top: -35px;
318
- right: auto;
319
- width: 100%;
320
- white-space: nowrap;
321
- }
322
-
323
- .ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel {
324
- display: block;
325
- width:100%;
326
- }
327
-
328
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel input.ecwid-SearchPanel-field {
329
- width: 100%;
330
- box-sizing: border-box;
331
- display: inline-block;
332
- }
333
-
334
- /* Auth */
335
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini {
336
- top: -25px;
337
- }
338
-
339
- html#ecwid_html body#ecwid_body .ecwid-productBrowser-auth > div,
340
- html#ecwid_html body#ecwid_body.ecwid-with-search .ecwid-productBrowser-auth > div,
341
- html#ecwid_html body#ecwid_body.ecwid-with-minicart .ecwid-productBrowser-auth > div,
342
- html#ecwid_html body#ecwid_body.ecwid-with-minicart.ecwid-with-search .ecwid-productBrowser-auth > div {
343
- margin-right: 0px;
344
- }
345
-
346
-
347
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini td {
348
- height: auto;
349
- }
350
-
351
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-ProductBrowser-auth-space {
352
- display: none;
353
- }
354
- /* Minicart */
355
-
356
- .ecwid-shopping-cart-minicart {
357
- position: absolute;
358
- right: auto;
359
- left: 31px;
360
- top: -204px;
361
- }
362
-
363
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-minicart,
364
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-rolloverContainer
365
- {
366
- display: none;
367
- }
368
-
369
- /* Product Browser */
370
- html#ecwid_html body#ecwid_body .ecwid-shopping-cart-product-browser {
371
- margin-top: 40px;
372
- }
373
-
374
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser-head {
375
- }
376
-
377
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath {
378
- padding-top: 6px;
379
- }
380
-
381
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productNameLink {
382
- margin-top: 10px;
383
- }
384
-
385
- }
1
+ /* Page Adjustments */
2
+ body.ecwid-shopping-cart #wrapper {
3
+ padding: 0 47px 20px 47px;
4
+ }
5
+
6
+ body.ecwid-shopping-cart .page {
7
+ position: relative;
8
+ }
9
+
10
+ body.ecwid-shopping-cart #content-full {
11
+ margin-top: 55px;
12
+ }
13
+
14
+ .ecwid-shopping-cart .breadcrumb-list {
15
+ display: none;
16
+ }
17
+
18
+ body.ecwid-shopping-cart h1.entry-title {
19
+ padding-left: 1px;
20
+ font-size: 37px;
21
+ margin-top: 16px;
22
+ }
23
+
24
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a,
25
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-link,
26
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath-categoryLink a,
27
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-results-topPanel .ecwid-results-topPanel-viewAsPanel-link,
28
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-productsTable-addToBagLink
29
+ {
30
+ text-decoration: none;
31
+ }
32
+
33
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a:hover,
34
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-link:hover,
35
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath-categoryLink a:hover,
36
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-results-topPanel .ecwid-results-topPanel-viewAsPanel-link:hover,
37
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-productsTable-addToBagLink:hover
38
+ {
39
+ text-decoration: underline;
40
+ }
41
+
42
+ html#ecwid_html body#ecwid_body #container .ecwid-categories-category {
43
+ font-family: Open Sans, Trebuchet MS, Helvetica, Verdana, sans-serif;
44
+ font-size: 22px;
45
+ }
46
+
47
+ /* Minicart */
48
+
49
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-minicart {
50
+ position: absolute;
51
+ top: 58px;
52
+ display: inline-block;
53
+ right: 0px;
54
+ }
55
+
56
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-minicart div.ecwid-minicart-mini {
57
+ width: 100px;
58
+ text-align: right;
59
+ }
60
+ .ecwid-shopping-cart-minicart {
61
+ visibility: hidden;
62
+ }
63
+
64
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-rolloverContainer {
65
+ display: block;
66
+ }
67
+
68
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-minicart {
69
+ margin-right: 5px;
70
+ height: 35px;
71
+ }
72
+
73
+ /* Search */
74
+
75
+
76
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel input.ecwid-SearchPanel-field {
77
+ width:30px;
78
+ }
79
+
80
+ .ecwid-shopping-cart .ecwid-shopping-cart-search {
81
+ position: absolute;
82
+ right: 5px;
83
+ top: 8px;
84
+ z-index: 1;
85
+ height: 45px;
86
+ }
87
+
88
+ .ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel {
89
+ display: none;
90
+ width: 40px;
91
+ }
92
+
93
+ .ecwid-shopping-cart.ecwid-search-open .ecwid-search-placeholder {
94
+ display: none;
95
+ }
96
+
97
+ .ecwid-shopping-cart.ecwid-search-open .ecwid-shopping-cart-search .ecwid-SearchPanel {
98
+ display: block;
99
+ width: 180px;
100
+ -webkit-transition: width 0.1s;
101
+ transition: width 0.1s;
102
+ }
103
+
104
+ .ecwid-shopping-cart-search,
105
+ .ecwid-SearchPanel {
106
+ white-space: nowrap;
107
+ }
108
+
109
+ .ecwid-shopping-cart-search .ecwid-SearchPanel-button,
110
+ .ecwid-SearchPanel .ecwid-SearchPanel-button {
111
+ border: 0 none;
112
+ background: transparent;
113
+ line-height: normal;
114
+ vertical-align: top;
115
+ padding: 0;
116
+ margin: 0;
117
+ width: 0px;
118
+ height:30px;
119
+ position: relative;
120
+ right: 0px;
121
+ cursor: pointer;
122
+ font-size: 0px;
123
+ }
124
+
125
+ .ecwid-shopping-cart-search .ecwid-search-placeholder {
126
+ width: 1px;
127
+ height: 20px;
128
+ position: absolute;
129
+ right: 23px;
130
+ top: -2px;
131
+ z-index: 1;
132
+ }
133
+
134
+ .ecwid-shopping-cart .ecwid-search-placeholder:after,
135
+ .ecwid-SearchPanel .ecwid-SearchPanel-button:before {
136
+ content: '\f179';
137
+ font-weight: bold;
138
+ font-family: 'dashicons';
139
+ font-size: 18px;
140
+ color: #AAA;
141
+ position: relative;
142
+ }
143
+
144
+ .ecwid-shopping-cart .ecwid-search-placeholder:after
145
+ {
146
+ top: 7px;
147
+ cursor: pointer;
148
+ }
149
+
150
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-search input,
151
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-search input:focus
152
+ {
153
+ border: 1px solid #D1D1D1;
154
+ outline: none;
155
+ }
156
+
157
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart.ecwid-search-open .ecwid-shopping-cart-search input.ecwid-SearchPanel-field,
158
+ html#ecwid_html body#ecwid_body .ecwid-productBrowser-search-SearchPanel input[type=search],
159
+ html#ecwid_html body#ecwid_body .ecwid-SearchPanel input.ecwid-SearchPanel-field
160
+ {
161
+ -webkit-appearance: none;
162
+ border-radius: 3px;
163
+ margin-right: -24px;
164
+ padding: 6px 0px 6px 3px;
165
+ box-shadow: none;
166
+ border: 1px solid #D1D1D1;
167
+ width:100%;
168
+ box-sizing: border-box;
169
+ }
170
+
171
+ input.ecwid-SearchPanel-field::-webkit-search-cancel-button {
172
+ -webkit-appearance: none;
173
+ margin: 0px;
174
+ }
175
+
176
+ /* Auth */
177
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-categories {
178
+ margin-top: 60px;
179
+ }
180
+
181
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-product-browser {
182
+ margin-top: 50px;
183
+ }
184
+
185
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini,
186
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-search,
187
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-minicart {
188
+ position: absolute;
189
+ }
190
+
191
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini {
192
+ margin-bottom: 5px;
193
+ display: inline-block;
194
+ width: inherit;
195
+ right: 0px;
196
+ }
197
+
198
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart.ecwid-with-search .ecwid-productBrowser-auth-mini {
199
+ margin-right: 25px;
200
+ }
201
+
202
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini td {
203
+ height: 45px;
204
+ }
205
+
206
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-ProductBrowser-auth-anonim,
207
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-ProductBrowser-auth-logged {
208
+ margin-right: 0px;
209
+ }
210
+
211
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart.ecwid-search-open .ecwid-productBrowser-auth-mini {
212
+ margin-right: 195px;
213
+ -webkit-transition: margin-right 0.1s;
214
+ transition: margin-right 0.1s;
215
+ }
216
+
217
+ /* Product browser */
218
+
219
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser {
220
+ padding: 0;
221
+ }
222
+
223
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser-head {
224
+ font-size: 26px;
225
+ margin-top: 2px;
226
+ }
227
+
228
+ body.ecwid-shopping-cart h1,
229
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a,
230
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth a:active,
231
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-head,
232
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a,
233
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a:active,
234
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-price,
235
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser-categoryPath a,
236
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-results-topPanel div
237
+ {
238
+ font-family: Open Sans, Trebuchet MS, Helvetica, Verdana, sans-serif;
239
+ }
240
+
241
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath a,
242
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath a:active
243
+ {
244
+ font-size: 14px;
245
+ }
246
+
247
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath-categoryLabel
248
+ {
249
+ font-size: 13px;
250
+ }
251
+
252
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath {
253
+ padding-top: 5px;
254
+ }
255
+
256
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productsGrid-mainTable {
257
+ margin-top: 18px;
258
+ }
259
+
260
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productsGrid div.ecwid-productBrowser-productNameLink {
261
+ text-align: center;
262
+ }
263
+
264
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a,
265
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a:active,
266
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-productNameLink a:visited
267
+ {
268
+ text-decoration: none;
269
+ font-size: 20px;
270
+ }
271
+
272
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productsGrid div.ecwid-productBrowser-sku {
273
+ display: none;
274
+ }
275
+
276
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-price {
277
+ margin-top: 0;
278
+ font-weight: 600;
279
+ }
280
+
281
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser td.ecwid-productBrowser-productsGrid-cellSpace {
282
+ height: 62px;
283
+ }
284
+
285
+ /* Product details */
286
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser div.ecwid-productBrowser-details-rightPanel {
287
+ margin-right: 4px;
288
+ }
289
+
290
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-details-inStockLabel,
291
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-fieldLabel,
292
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-details-qtyLabel
293
+ {
294
+ font-family: Open Sans, Trebuchet MS, Helvetica, Verdana, sans-serif;
295
+ }
296
+
297
+ @media screen and (max-width: 650px) {
298
+
299
+ body.ecwid-shopping-cart #content-full {
300
+ margin-top: 32px;
301
+ }
302
+ body.ecwid-shopping-cart h1.entry-title {
303
+ display: none;
304
+ }
305
+
306
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser {
307
+ padding: 0 4px !important;
308
+ }
309
+
310
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-categories {
311
+ display: none;
312
+
313
+ }
314
+ /* Search */
315
+
316
+ .ecwid-shopping-cart .ecwid-shopping-cart-search {
317
+ top: -35px;
318
+ right: auto;
319
+ width: 100%;
320
+ white-space: nowrap;
321
+ }
322
+
323
+ .ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel {
324
+ display: block;
325
+ width:100%;
326
+ }
327
+
328
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel input.ecwid-SearchPanel-field {
329
+ width: 100%;
330
+ box-sizing: border-box;
331
+ display: inline-block;
332
+ }
333
+
334
+ /* Auth */
335
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini {
336
+ top: -25px;
337
+ }
338
+
339
+ html#ecwid_html body#ecwid_body .ecwid-productBrowser-auth > div,
340
+ html#ecwid_html body#ecwid_body.ecwid-with-search .ecwid-productBrowser-auth > div,
341
+ html#ecwid_html body#ecwid_body.ecwid-with-minicart .ecwid-productBrowser-auth > div,
342
+ html#ecwid_html body#ecwid_body.ecwid-with-minicart.ecwid-with-search .ecwid-productBrowser-auth > div {
343
+ margin-right: 0px;
344
+ }
345
+
346
+
347
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-auth-mini td {
348
+ height: auto;
349
+ }
350
+
351
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-ProductBrowser-auth-space {
352
+ display: none;
353
+ }
354
+ /* Minicart */
355
+
356
+ .ecwid-shopping-cart-minicart {
357
+ position: absolute;
358
+ right: auto;
359
+ left: 31px;
360
+ top: -204px;
361
+ }
362
+
363
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-minicart,
364
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-minicart-mini-rolloverContainer
365
+ {
366
+ display: none;
367
+ }
368
+
369
+ /* Product Browser */
370
+ html#ecwid_html body#ecwid_body .ecwid-shopping-cart-product-browser {
371
+ margin-top: 40px;
372
+ }
373
+
374
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart div.ecwid-productBrowser-head {
375
+ }
376
+
377
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-productBrowser-categoryPath {
378
+ padding-top: 6px;
379
+ }
380
+
381
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-shopping-cart-product-browser .ecwid-productBrowser-productNameLink {
382
+ margin-top: 10px;
383
+ }
384
+
385
+ }
css/themes/responsive.css CHANGED
@@ -1,22 +1,22 @@
1
- /* Mobile */
2
- @media screen and (max-width: 400px) {
3
-
4
- body.ecwid-shopping-cart #container {
5
- padding: 0 10px;
6
- }
7
-
8
- body.ecwid-shopping-cart #wrapper {
9
- padding: 0 10px;
10
- }
11
- }
12
-
13
- @media screen and (max-width: 650px) {
14
-
15
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart #select-State-Box,
16
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart #select-Country-Box,
17
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-AddressForm-state,
18
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-AddressForm-country,
19
- html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-fieldEnvelope {
20
- width: 100%;
21
- }
22
  }
1
+ /* Mobile */
2
+ @media screen and (max-width: 400px) {
3
+
4
+ body.ecwid-shopping-cart #container {
5
+ padding: 0 10px;
6
+ }
7
+
8
+ body.ecwid-shopping-cart #wrapper {
9
+ padding: 0 10px;
10
+ }
11
+ }
12
+
13
+ @media screen and (max-width: 650px) {
14
+
15
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart #select-State-Box,
16
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart #select-Country-Box,
17
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-AddressForm-state,
18
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-AddressForm-country,
19
+ html#ecwid_html body#ecwid_body.ecwid-shopping-cart .ecwid-fieldEnvelope {
20
+ width: 100%;
21
+ }
22
  }
ecwid-shopping-cart.php CHANGED
@@ -1,2687 +1,2708 @@
1
- <?php
2
- /*
3
- Plugin Name: Ecwid Shopping Cart
4
- Plugin URI: http://www.ecwid.com?source=wporg
5
- Description: Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up.
6
- Text Domain: ecwid-shopping-cart
7
- Author: Ecwid Team
8
- Version: 3.3
9
- Author URI: http://www.ecwid.com?source=wporg
10
- */
11
-
12
- register_activation_hook( __FILE__, 'ecwid_store_activate' );
13
- register_deactivation_hook( __FILE__, 'ecwid_store_deactivate' );
14
- register_uninstall_hook( __FILE__, 'ecwid_uninstall' );
15
-
16
-
17
- define("APP_ECWID_COM", 'app.ecwid.com');
18
- define("ECWID_DEMO_STORE_ID", 1003);
19
-
20
-
21
- if ( ! defined( 'ECWID_PLUGIN_DIR' ) ) {
22
- define( 'ECWID_PLUGIN_DIR', plugin_dir_path( realpath(__FILE__) ) );
23
- }
24
-
25
- if ( ! defined( 'ECWID_PLUGIN_URL' ) ) {
26
- define( 'ECWID_PLUGIN_URL', plugin_dir_url( realpath(__FILE__) ) );
27
- }
28
-
29
-
30
- // Older versions of Google XML Sitemaps plugin generate it in admin, newer in site area, so the hook should be assigned in both of them
31
- add_action('sm_buildmap', 'ecwid_build_google_xml_sitemap');
32
-
33
- // Needs to be in both front-end and back-end to allow admin zone recognize the shortcode
34
- add_shortcode('ecwid_productbrowser', 'ecwid_productbrowser_shortcode');
35
- add_shortcode('ecwid', 'ecwid_shortcode');
36
-
37
- add_action( 'plugins_loaded', 'ecwid_init_integrations' );
38
- add_filter('plugins_loaded', 'ecwid_load_textdomain');
39
-
40
- if ( is_admin() ){
41
- add_action('admin_init', 'ecwid_settings_api_init');
42
- add_action('admin_init', 'ecwid_check_version');
43
- add_action('admin_notices', 'ecwid_show_admin_messages');
44
- add_action('admin_menu', 'ecwid_options_add_page');
45
- add_action('wp_dashboard_setup', 'ecwid_add_dashboard_widgets' );
46
- add_action('admin_enqueue_scripts', 'ecwid_common_admin_scripts');
47
- add_action('admin_enqueue_scripts', 'ecwid_register_admin_styles');
48
- add_action('admin_enqueue_scripts', 'ecwid_register_settings_styles');
49
- add_action('wp_ajax_ecwid_hide_vote_message', 'ecwid_hide_vote_message');
50
- add_action('wp_ajax_ecwid_hide_message', 'ecwid_ajax_hide_message');
51
- add_filter('plugin_action_links_ecwid-shopping-cart/ecwid-shopping-cart.php', 'ecwid_plugin_actions');
52
- add_action('admin_head', 'ecwid_ie8_fonts_inclusion');
53
- add_action('admin_head', 'ecwid_send_stats');
54
- add_action('save_post', 'ecwid_save_post');
55
- add_action('init', 'ecwid_apply_theme');
56
- add_action('get_footer', 'ecwid_admin_get_footer');
57
- add_action('admin_post_ecwid_connect', 'ecwid_admin_post_connect');
58
- } else {
59
- add_shortcode('ecwid_script', 'ecwid_script_shortcode');
60
- add_shortcode('ecwid_minicart', 'ecwid_minicart_shortcode');
61
- add_shortcode('ecwid_searchbox', 'ecwid_searchbox_shortcode');
62
- add_shortcode('ecwid_categories', 'ecwid_categories_shortcode');
63
- add_shortcode('ecwid_product', 'ecwid_product_shortcode');
64
- add_action('init', 'ecwid_backward_compatibility');
65
- add_action('send_headers', 'ecwid_503_on_store_closed');
66
- add_action('template_redirect', 'ecwid_404_on_broken_escaped_fragment');
67
- add_action('template_redirect', 'ecwid_apply_theme');
68
- add_action('wp_enqueue_scripts', 'ecwid_add_frontend_styles');
69
- add_action('wp', 'ecwid_seo_ultimate_compatibility', 0);
70
- add_action('wp', 'ecwid_remove_default_canonical');
71
- add_filter('wp', 'ecwid_seo_compatibility_init', 0);
72
- add_filter('wp_title', 'ecwid_seo_title', 20);
73
- add_action('plugins_loaded', 'ecwid_minifier_compatibility', 0);
74
- add_action('wp_head', 'ecwid_meta_description', 0);
75
- add_action('wp_head', 'ecwid_ajax_crawling_fragment');
76
- add_action('wp_head', 'ecwid_meta');
77
- add_action('wp_head', 'ecwid_canonical');
78
- add_action('wp_head', 'ecwid_seo_compatibility_restore', 1000);
79
- add_action('wp_head', 'ecwid_send_stats');
80
- add_filter( 'widget_meta_poweredby', 'ecwid_add_credits');
81
- add_filter('the_content', 'ecwid_content_started', 0);
82
- add_filter('body_class', 'ecwid_body_class');
83
- $ecwid_seo_title = '';
84
- }
85
- add_action('admin_bar_menu', 'add_ecwid_admin_bar_node', 1000);
86
- if (get_option('ecwid_last_oauth_fail_time') > 0) {
87
- add_action('plugins_loaded', 'ecwid_test_oauth');
88
- }
89
-
90
- $ecwid_script_rendered = false; // controls single script.js on page
91
-
92
- require_once ECWID_PLUGIN_DIR . '/includes/themes.php';
93
- require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-message-manager.php';
94
- require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-store-editor.php';
95
- require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-oauth.php';
96
-
97
- function ecwid_init_integrations()
98
- {
99
- if ( !function_exists( 'get_plugins' ) ) { require_once ( ABSPATH . 'wp-admin/includes/plugin.php' ); }
100
-
101
- $integrations = array(
102
- 'aiosp' => 'all-in-one-seo-pack/all_in_one_seo_pack.php',
103
- 'wpseo' => 'wordpress-seo/wp-seo.php'
104
- );
105
-
106
- foreach ($integrations as $key => $plugin) {
107
- if ( is_plugin_active($plugin) ) {
108
- require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-integration-' . $key . '.php';
109
- }
110
- }
111
- }
112
-
113
- $version = get_bloginfo('version');
114
-
115
- function ecwid_add_breadcrumbs_navxt($trail)
116
- {
117
- $breadcrumb = new bcn_breadcrumb('Ecwid', '', '', 'http://ecwid.com');
118
- $trail->add($breadcrumb);
119
- }
120
-
121
- /*
122
- add_filter('wpseo_sitemap_index', 'ecwid_wpseo_do_sitemap_index');
123
-
124
- function ecwid_wpseo_do_sitemap_index($params)
125
- {
126
- $now = date('Y-m-dTH:i:sP', time());
127
- $sitemap_url = wpseo_xml_sitemaps_base_url('ecwid-sitemap.xml');
128
- return <<<XML
129
- <sitemap>
130
- <loc>$sitemap_url</loc>
131
- <lastmod>$now</lastmod>
132
- </sitemap>
133
- XML;
134
-
135
- // should return index string
136
- }
137
-
138
- add_action('wpseo_do_sitemap_ecwid', 'ecwid_wpseo_do_sitemap');
139
-
140
- add_action('wpseo_do_sitemap_ecwid_content', 'ecwid_wpseo_do_sitemap');
141
-
142
- function ecwid_wpseo_build_sitemap_callback($loc, $priority, $freq)
143
- {
144
- global $ecwid_wpseo_sitemap;
145
-
146
- $ecwid_wpseo_sitemap .= <<<XML
147
- <url>
148
- <loc>$loc</loc>
149
- <changefreq>$freq</changefreq>
150
- <priority>$priority</priority>
151
- </url>
152
-
153
- XML;
154
- }
155
-
156
-
157
- function ecwid_wpseo_do_sitemap($params)
158
- {
159
- global $ecwid_wpseo_sitemap;
160
-
161
- $ecwid_wpseo_sitemap = <<<XML
162
- <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
163
- XML;
164
-
165
- ecwid_build_sitemap('ecwid_wpseo_build_sitemap_callback');
166
-
167
- $ecwid_wpseo_sitemap .= '</urlset>';
168
- $GLOBALS['wpseo_sitemaps']->set_sitemap($ecwid_wpseo_sitemap);
169
- }
170
- */
171
- function ecwid_add_breadcrumb_links_wpseo($links)
172
- {
173
- return array_merge((array)$links, array(
174
- array(
175
- 'text' => 'ecwid.com',
176
- 'url' => 'http://ecwid.com'
177
- )
178
- ));
179
- }
180
- if (version_compare($version, '3.6') < 0) {
181
- /**
182
- * A copy of has_shortcode functionality from wordpress 3.6
183
- * http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/shortcodes.php
184
- */
185
-
186
- if (!function_exists('shortcode_exists')) {
187
- function shortcode_exists( $tag ) {
188
- global $shortcode_tags;
189
- return array_key_exists( $tag, $shortcode_tags );
190
- }
191
- }
192
-
193
- if (!function_exists('has_shortcode')) {
194
- function has_shortcode( $content, $tag ) {
195
- if ( false === strpos( $content, '[' ) ) {
196
- return false;
197
- }
198
-
199
- if ( shortcode_exists( $tag ) ) {
200
- preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
201
- if ( empty( $matches ) )
202
- return false;
203
-
204
- foreach ( $matches as $shortcode ) {
205
- if ( $tag === $shortcode[2] ) {
206
- return true;
207
- } elseif ( ! empty( $shortcode[5] ) && has_shortcode( $shortcode[5], $tag ) ) {
208
- return true;
209
- }
210
- }
211
- }
212
- return false;
213
- }
214
- }
215
- }
216
-
217
- if (is_admin()) {
218
- $main_button_class = "";
219
- if (version_compare($version, '3.8-beta') > 0) {
220
- $main_button_class = "button-primary";
221
- } else {
222
- $main_button_class = "pure-button pure-button-primary";
223
- }
224
-
225
- define('ECWID_MAIN_BUTTON_CLASS', $main_button_class);
226
- }
227
-
228
- function ecwid_body_class($classes)
229
- {
230
- if (ecwid_page_has_productbrowser()) {
231
- $classes[] = 'ecwid-shopping-cart';
232
- }
233
-
234
- return $classes;
235
- }
236
-
237
- function ecwid_ie8_fonts_inclusion()
238
- {
239
- if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 8') === false) return;
240
-
241
- $url = ECWID_PLUGIN_URL . '/fonts/ecwid-logo.eot';
242
- echo <<<HTML
243
- <style>
244
- @font-face {
245
- font-family: 'ecwid-logo';
246
- src:url($url);
247
- }
248
- </style>
249
- HTML;
250
-
251
- }
252
-
253
- add_action('wp_ajax_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
254
- add_action('wp_ajax_nopriv_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
255
-
256
-
257
- function ecwid_add_frontend_styles() {
258
- wp_register_script('ecwid-products-list-js', plugins_url('ecwid-shopping-cart/js/products-list.js'), array('jquery-ui-widget'));
259
- wp_register_style('ecwid-products-list-css', plugins_url('ecwid-shopping-cart/css/products-list.css'), array(), get_option('ecwid_plugin_version'));
260
- wp_enqueue_style('ecwid-css', plugins_url('ecwid-shopping-cart/css/frontend.css'),array(), get_option('ecwid_plugin_version'));
261
-
262
- if ((bool)get_option('ecwid_use_chameleon')) {
263
- wp_enqueue_script('ecwid-chameleon-js', plugins_url('ecwid-shopping-cart/js/ecwid-chameleon.js'), array(), get_option('ecwid_plugin_version'), true);
264
-
265
- $primary = get_option('ecwid_chameleon_primary');
266
- $background = get_option('ecwid_chameleon_background');
267
- $links = get_option('ecwid_chameleon_links');
268
-
269
- $localize = array();
270
-
271
- if (get_option('ecwid_chameleon_primary')) {
272
- $localize['primary_color'] = get_option('ecwid_chameleon_primary');
273
- }
274
- if (get_option('ecwid_chameleon_background')) {
275
- $localize['primary_background'] = get_option('ecwid_chameleon_background');
276
- }
277
- if (get_option('ecwid_chameleon_links')) {
278
- $localize['primary_link'] = get_option('ecwid_chameleon_links');
279
- }
280
-
281
- if (!empty($localize)) {
282
- wp_localize_script('ecwid-chameleon-js', 'ecwidChameleon', $localize);
283
- }
284
-
285
- }
286
-
287
- if (is_active_widget(false, false, 'ecwidrecentlyviewed')) {
288
- wp_enqueue_script('ecwid-recently-viewed', plugins_url('ecwid-shopping-cart/js/recently-viewed-common.js'), array('jquery', 'utils'), get_option('ecwid_plugin_version'), true);
289
-
290
- wp_localize_script(
291
- 'ecwid-products-list-js',
292
- 'wp_ecwid_products_list_vars',
293
- array(
294
- 'ajax_url' => admin_url( 'admin-ajax.php' ),
295
- 'is_api_available' => ecwid_is_paid_account()
296
- )
297
- );
298
- }
299
- }
300
-
301
- function ecwid_load_textdomain() {
302
- load_plugin_textdomain( 'ecwid-shopping-cart', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
303
-
304
- }
305
-
306
- function ecwid_404_on_broken_escaped_fragment() {
307
- if (!ecwid_is_api_enabled()) {
308
- return;
309
- }
310
-
311
- if (!isset($_GET['_escaped_fragment_'])) {
312
- return;
313
- }
314
-
315
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
316
- $api = ecwid_new_product_api();
317
-
318
- if (isset($params['mode']) && !empty($params['mode']) && isset($params['id'])) {
319
- $result = array();
320
- if ($params['mode'] == 'product') {
321
- $result = $api->get_product($params['id']);
322
- } elseif ($params['mode'] == 'category') {
323
- $result = $api->get_category($params['id']);
324
- }
325
- if (empty($result)) {
326
- global $wp_query;
327
-
328
- $wp_query->set_404();
329
- }
330
- }
331
- }
332
-
333
- function ecwid_503_on_store_closed() {
334
- if (!ecwid_is_api_enabled()) {
335
- return;
336
- }
337
-
338
- if (!isset($_GET['_escaped_fragment_'])) {
339
- return;
340
- }
341
-
342
- $api = ecwid_new_product_api();
343
- $profile = $api->get_profile();
344
-
345
- if ($profile['closed']) {
346
- header('HTTP/1.1 503 Service Temporarily Unavailable');
347
- header('Status: 503 Service Temporarily Unavailable');
348
- }
349
- }
350
-
351
- function ecwid_backward_compatibility() {
352
- // Backward compatibility with 1.1.2 and earlier
353
- if (isset($_GET['ecwid_product_id']) || isset($_GET['ecwid_category_id'])) {
354
-
355
- if (isset($_GET['ecwid_product_id']))
356
- $redirect = ecwid_get_product_url(intval($_GET['ecwid_product_id']));
357
- elseif (isset($_GET['ecwid_category_id']))
358
- $redirect = ecwid_get_category_url(intval($_GET['ecwid_category_id']));
359
-
360
- wp_redirect($redirect, 301);
361
- exit();
362
- }
363
- }
364
-
365
-
366
- function ecwid_build_sitemap($callback)
367
- {
368
- if (!ecwid_is_paid_account() || !ecwid_is_store_page_available()) return;
369
-
370
- $page_id = ecwid_get_current_store_page_id();
371
-
372
- if (get_post_status($page_id) == 'publish') {
373
- require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-sitemap-builder.php';
374
-
375
- $sitemap = new EcwidSitemapBuilder(ecwid_get_store_page_url(), $callback, ecwid_new_product_api());
376
-
377
- $sitemap->generate();
378
- }
379
- }
380
-
381
- function ecwid_build_google_xml_sitemap()
382
- {
383
- return ecwid_build_sitemap('ecwid_google_xml_sitemap_build_sitemap_callback');
384
- }
385
-
386
- function ecwid_google_xml_sitemap_build_sitemap_callback($url, $priority, $frequency)
387
- {
388
- static $generatorObject = null;
389
- if (is_null($generatorObject)) {
390
- $generatorObject = GoogleSitemapGenerator::GetInstance(); //Please note the "&" sign!
391
- }
392
-
393
- if($generatorObject != null) {
394
- $page = new GoogleSitemapGeneratorPage($url, $priority, $frequency);
395
- $generatorObject->AddElement($page);
396
- }
397
- }
398
-
399
- function ecwid_minifier_compatibility()
400
- {
401
- if ( !function_exists( 'get_plugins' ) ) { require_once ( ABSPATH . 'wp-admin/includes/plugin.php' ); }
402
-
403
- $plugins = get_plugins();
404
- $wp_minify_plugin = 'wp-minify/wp-minify.php';
405
- if (array_key_exists($wp_minify_plugin, $plugins) && is_plugin_active($wp_minify_plugin)) {
406
- global $wp_minify;
407
-
408
- if (is_object($wp_minify) && array_key_exists('default_exclude', get_object_vars($wp_minify)) && is_array($wp_minify->default_exclude)) {
409
- $wp_minify->default_exclude[] = 'ecwid.com/script.js';
410
- }
411
- }
412
- }
413
-
414
- function ecwid_check_version()
415
- {
416
- $plugin_data = get_plugin_data(__FILE__);
417
- $current_version = $plugin_data['Version'];
418
- $stored_version = get_option('ecwid_plugin_version', null);
419
-
420
- $fresh_install = !$stored_version;
421
- $upgrade = $stored_version && version_compare($current_version, $stored_version) > 0;
422
-
423
- if ($fresh_install) {
424
-
425
- ecwid_plugin_add_oauth();
426
- do_action('ecwid_plugin_installed', $current_version);
427
- add_option('ecwid_plugin_version', $current_version);
428
-
429
- if (get_option('ecwid_installation_date') % 4 == 0) {
430
- update_option('ecwid_use_chameleon', true);
431
- }
432
-
433
- } elseif ($upgrade) {
434
-
435
- ecwid_plugin_add_oauth();
436
- do_action('ecwid_plugin_upgraded', array( 'old' => $stored_version, 'new' => $current_version ) );
437
- update_option('ecwid_plugin_version', $current_version);
438
-
439
- add_option('ecwid_chameleon_primary', '');
440
- add_option('ecwid_chameleon_background', '');
441
- add_option('ecwid_chameleon_links', '');
442
- }
443
- }
444
-
445
- function ecwid_log_error($message)
446
- {
447
- $errors = get_option('ecwid_error_log');
448
- if (!$errors) {
449
- $errors = array();
450
- } else {
451
- $errors = json_decode($errors);
452
- if (!is_array($errors)) {
453
- $errors = array();
454
- }
455
- }
456
-
457
- while (count($errors) > 10) {
458
- array_shift($errors);
459
- }
460
-
461
- $errors[] = array(
462
- 'message' => $message,
463
- 'date' => strftime('%c')
464
- );
465
-
466
- update_option('ecwid_error_log', json_encode($errors));
467
- }
468
-
469
- function ecwid_get_last_logged_error()
470
- {
471
-
472
-
473
- return '';
474
- }
475
-
476
- function ecwid_plugin_add_oauth()
477
- {
478
- add_option('ecwid_oauth_client_id', 'RD4o2KQimiGUrFZc');
479
- add_option('ecwid_oauth_client_secret', 'jEPVdcA3KbzKVrG8FZDgNnsY3wKHDTF8');
480
-
481
- update_option('ecwid_oauth_client_id', 'RD4o2KQimiGUrFZc');
482
- update_option('ecwid_oauth_client_secret', 'jEPVdcA3KbzKVrG8FZDgNnsY3wKHDTF8');
483
- }
484
-
485
- function ecwid_override_option($name, $new_value = null)
486
- {
487
- static $overridden = array();
488
-
489
- if (!array_key_exists($name, $overridden)) {
490
- $overridden[$name] = get_option($name);
491
- }
492
-
493
- if (!is_null($new_value)) {
494
- update_option($name, $new_value);
495
- } else {
496
- update_option($name, $overridden[$name]);
497
- }
498
- }
499
-
500
- function ecwid_seo_ultimate_compatibility()
501
- {
502
- global $seo_ultimate;
503
-
504
- if ($seo_ultimate && ecwid_page_has_productbrowser()) {
505
- remove_action('template_redirect', array($seo_ultimate->modules['titles'], 'before_header'), 0);
506
- remove_action('wp_head', array($seo_ultimate->modules['titles'], 'after_header'), 1000);
507
- remove_action('su_head', array($seo_ultimate->modules['meta-descriptions'], 'head_tag_output'));
508
- remove_action('su_head', array($seo_ultimate->modules['canonical'], 'link_rel_canonical_tag'));
509
- remove_action('su_head', array($seo_ultimate->modules['canonical'], 'http_link_rel_canonical'));
510
- }
511
- }
512
-
513
- function ecwid_remove_default_canonical()
514
- {
515
- if (array_key_exists('_escaped_fragment_', $_GET) && ecwid_page_has_productbrowser()) {
516
- remove_action( 'wp_head','rel_canonical');
517
- }
518
- }
519
-
520
- function ecwid_seo_compatibility_init($title)
521
- {
522
- if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
523
- return $title;
524
- }
525
-
526
- // Platinum SEO Pack
527
- // Canonical
528
- ecwid_override_option('psp_canonical', false);
529
- // Title
530
- ecwid_override_option('aiosp_rewrite_titles', false);
531
-
532
- return $title;
533
-
534
- }
535
-
536
- function ecwid_seo_compatibility_restore()
537
- {
538
- if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
539
- return;
540
- }
541
-
542
- ecwid_override_option('psp_canonical');
543
- ecwid_override_option('aiosp_rewrite_titles');
544
- }
545
-
546
- function add_ecwid_admin_bar_node() {
547
- global $wp_admin_bar;
548
- if ( !is_super_admin() || !is_admin_bar_showing() )
549
- return;
550
-
551
- $wp_admin_bar->add_menu( array(
552
- 'id' => 'ecwid-main',
553
- 'title' => '<span class="ab-icon ecwid-top-menu-item"></span>',
554
- 'href' => 'admin.php?page=ecwid',
555
- ));
556
- $wp_admin_bar->add_menu(array(
557
- "id" => "ecwid-help",
558
- "title" => __("Get help", 'ecwid-shopping-cart'),
559
- "parent" => "ecwid-main",
560
- 'href' => 'http://help.ecwid.com'
561
- )
562
- );
563
- $wp_admin_bar->add_menu(array(
564
- "id" => "ecwid-home",
565
- "title" => __("Go to Ecwid site", 'ecwid-shopping-cart'),
566
- "parent" => "ecwid-main",
567
- 'href' => 'http://www.ecwid.com?source=wporg'
568
- )
569
- );
570
- $wp_admin_bar->add_menu(array(
571
- "id" => "ecwid-go-to-page",
572
- "title" => __("Visit storefront", 'ecwid-shopping-cart'),
573
- "parent" => "ecwid-main",
574
- 'href' => ecwid_get_store_page_url()
575
- )
576
- );
577
- $wp_admin_bar->add_menu(array(
578
- "id" => "ecwid-control-panel",
579
- "title" => __("Manage my store", 'ecwid-shopping-cart'),
580
- "parent" => "ecwid-main",
581
- 'href' => 'https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard'
582
- )
583
- );
584
- $wp_admin_bar->add_menu(array(
585
- "id" => "ecwid-settings",
586
- "title" => __("Manage plugin settings", 'ecwid-shopping-cart'),
587
- "parent" => "ecwid-main",
588
- 'href' => admin_url('admin.php?page=ecwid')
589
- )
590
- );
591
- $wp_admin_bar->add_menu(array(
592
- "id" => "ecwid-fb-app",
593
- "title" => __("→ Sell on Facebook", 'ecwid-shopping-cart'),
594
- "parent" => "ecwid-main",
595
- 'href' => 'http://apps.facebook.com/ecwid-shop/?fb_source=wp'
596
- )
597
- );
598
- }
599
-
600
- function ecwid_content_has_productbrowser($content) {
601
-
602
- $result = has_shortcode($content, 'ecwid_productbrowser');
603
-
604
- if (!$result && has_shortcode($content, 'ecwid')) {
605
- $shortcodes = ecwid_find_shortcodes($content, 'ecwid');
606
- if ($shortcodes) foreach ($shortcodes as $shortcode) {
607
-
608
- $attributes = shortcode_parse_atts($shortcode[3]);
609
-
610
- if (isset($attributes['widgets'])) {
611
- $widgets = preg_split('![^0-9^a-z^A-Z^-^_]!', $attributes['widgets']);
612
- if (is_array($widgets) && in_array('productbrowser', $widgets)) {
613
- $result = true;
614
- }
615
- }
616
- }
617
- }
618
-
619
- return $result;
620
- }
621
-
622
- function ecwid_page_has_productbrowser($post_id = null)
623
- {
624
- static $results = null;
625
-
626
- if (is_null($post_id)) {
627
- $post_id = get_the_ID();
628
- }
629
-
630
- if (!isset($results[$post_id])) {
631
- $post = get_post($post_id);
632
-
633
- if ($post) {
634
- $post_content = get_post($post_id)->post_content;
635
-
636
- $results[$post_id] = ecwid_content_has_productbrowser($post_content);
637
- $results[$post_id] = apply_filters( 'ecwid_page_has_product_browser', $results[$post_id] );
638
- }
639
- }
640
-
641
- return $results[$post_id];
642
- }
643
-
644
- function ecwid_ajax_crawling_fragment() {
645
- if (ecwid_is_api_enabled() && !isset($_GET['_escaped_fragment_']) && ecwid_page_has_productbrowser())
646
- echo '<meta name="fragment" content="!">' . PHP_EOL;
647
- }
648
-
649
- function ecwid_meta() {
650
-
651
- echo '<link rel="dns-prefetch" href="//images-cdn.ecwid.com/">' . PHP_EOL;
652
- echo '<link rel="dns-prefetch" href="//images.ecwid.com/">' . PHP_EOL;
653
- echo '<link rel="dns-prefetch" href="//app.ecwid.com/">' . PHP_EOL;
654
-
655
- if (!ecwid_page_has_productbrowser() && ecwid_is_store_page_available()) {
656
- $page_url = ecwid_get_store_page_url();
657
- echo '<link rel="prefetch" href="' . $page_url . '" />' . PHP_EOL;
658
- echo '<link rel="prerender" href="' . $page_url . '" />' . PHP_EOL;
659
- }
660
- }
661
-
662
- function ecwid_canonical() {
663
- $allowed = ecwid_is_api_enabled() && isset($_GET['_escaped_fragment_']);
664
- if (!$allowed) return;
665
-
666
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
667
- if (!$params) return;
668
-
669
- if (!in_array($params['mode'], array('category', 'product')) || !isset($params['id'])) return;
670
-
671
- $api = ecwid_new_product_api();
672
-
673
- if ($params['mode'] == 'product') {
674
- $product = $api->get_product($params['id']);
675
- $link = ecwid_get_product_url($product);
676
- } else if ($params['mode'] == 'category') {
677
- $category = $api->get_category($params['id']);
678
- $link = ecwid_get_category_url($category);
679
- }
680
-
681
- echo '<link rel="canonical" href="' . esc_attr($link) . '" />' . PHP_EOL;
682
- }
683
-
684
- function ecwid_meta_description() {
685
-
686
- $allowed = ecwid_is_api_enabled() && isset($_GET['_escaped_fragment_']);
687
- if (!$allowed) return;
688
-
689
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
690
- if (!$params) return;
691
-
692
- if (!in_array($params['mode'], array('category', 'product')) || !isset($params['id'])) return;
693
-
694
- $api = ecwid_new_product_api();
695
- if ($params['mode'] == 'product') {
696
- $product = $api->get_product($params['id']);
697
- $description = $product['description'];
698
- } elseif ($params['mode'] == 'category') {
699
- $category = $api->get_category($params['id']);
700
- $description = $category['description'];
701
- } else return;
702
-
703
- $description = strip_tags($description);
704
- $description = html_entity_decode($description, ENT_NOQUOTES, 'UTF-8');
705
-
706
- $description = preg_replace('![\p{Z}\s]{1,}!u', ' ', $description);
707
- $description = trim($description, " \t\xA0\n\r"); // Space, tab, non-breaking space, newline, carriage return
708
- $description = mb_substr($description, 0, 160, 'UTF-8');
709
- $description = htmlspecialchars($description, ENT_COMPAT, 'UTF-8');
710
-
711
- echo <<<HTML
712
- <meta name="description" content="$description" />
713
- HTML;
714
- }
715
-
716
- function ecwid_ajax_hide_message($params)
717
- {
718
- if (Ecwid_Message_Manager::disable_message($_GET['message'])) {
719
- wp_send_json(array('status' => 'success'));
720
- }
721
- }
722
-
723
- function ecwid_hide_vote_message()
724
- {
725
- update_option('ecwid_show_vote_message', false);
726
- }
727
-
728
- function ecwid_get_product_and_category($category_id, $product_id) {
729
- $params = array
730
- (
731
- array("alias" => "c", "action" => "category", "params" => array("id" => $category_id)),
732
- array("alias" => "p", "action" => "product", "params" => array("id" => $product_id)),
733
- );
734
-
735
- $api = ecwid_new_product_api();
736
- $batch_result = $api->get_batch_request($params);
737
-
738
- if (false == $batch_result) {
739
- $product = $api->get_product($product_id);
740
- $category = false;
741
- } else {
742
- $category = $batch_result["c"];
743
- $product = $batch_result["p"];
744
- }
745
-
746
- $return = "";
747
-
748
- if (is_array($product)) {
749
- $return .=$product["name"];
750
- }
751
-
752
- if(is_array($category)) {
753
- $return.=" | ";
754
- $return .=$category["name"];
755
- }
756
- return $return;
757
- }
758
-
759
- function ecwid_get_title_separator()
760
- {
761
- return apply_filters('ecwid_title_separator', '|');
762
- }
763
-
764
- function ecwid_seo_title($content) {
765
- if (isset($_GET['_escaped_fragment_']) && ecwid_is_api_enabled()) {
766
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
767
- $ecwid_seo_title = '';
768
-
769
- $separator = ecwid_get_title_separator();
770
-
771
- $api = ecwid_new_product_api();
772
-
773
- if (isset($params['mode']) && !empty($params['mode'])) {
774
- if ($params['mode'] == 'product') {
775
- if (isset($params['category']) && !empty($params['category'])){
776
- $ecwid_seo_title = ecwid_get_product_and_category($params['category'], $params['id']);
777
- } elseif (empty($params['category'])) {
778
- $ecwid_product = $api->get_product($params['id']);
779
- $ecwid_seo_title = $ecwid_product['name'];
780
- if(is_array($ecwid_product['categories'])){
781
- foreach ($ecwid_product['categories'] as $ecwid_category){
782
- if ( $ecwid_category['defaultCategory'] == true ) {
783
- $ecwid_seo_title .= ' ' . $separator . ' ';
784
- $ecwid_seo_title .= $ecwid_category['name'];
785
- }
786
- }
787
- }
788
- }
789
- }
790
-
791
- elseif ($params['mode'] == 'category') {
792
- $api = ecwid_new_product_api();
793
- $ecwid_category = $api->get_category($params['id']);
794
- $ecwid_seo_title = $ecwid_category['name'];
795
- }
796
- }
797
-
798
- if (!empty($ecwid_seo_title))
799
- return "$ecwid_seo_title $separator $content";
800
- else
801
- return $content;
802
-
803
- } else {
804
- return $content;
805
- }
806
- }
807
-
808
- function ecwid_add_credits($powered_by)
809
- {
810
- if (!ecwid_is_paid_account()) {
811
-
812
- $new_powered_by = '<li>';
813
- $new_powered_by .= sprintf(
814
- __('<a %s>Online store powered by Ecwid</a>', 'ecwid-shopping-cart'),
815
- 'target="_blank" href="//www.ecwid.com?source=wporg-metalink"'
816
- );
817
- $new_powered_by .= '</li>';
818
-
819
- $powered_by .= $new_powered_by;
820
- }
821
-
822
- return $powered_by;
823
- }
824
-
825
- function ecwid_content_started($content)
826
- {
827
- global $ecwid_script_rendered;
828
-
829
- $ecwid_script_rendered = false;
830
-
831
- return $content;
832
- }
833
-
834
- function ecwid_wrap_shortcode_content($content, $name, $attrs)
835
- {
836
- return "<!-- Ecwid shopping cart plugin v 3.3 --><!-- noptimize -->"
837
- . ecwid_get_scriptjs_code(@$attrs['lang'])
838
- . "<div class=\"ecwid-shopping-cart-$name\">$content</div>"
839
- . "<!-- /noptimize --><!-- END Ecwid Shopping Cart v 3.3 -->";
840
- }
841
-
842
- function ecwid_get_scriptjs_code($force_lang = null) {
843
- global $ecwid_script_rendered;
844
-
845
- if (!$ecwid_script_rendered) {
846
- $store_id = get_ecwid_store_id();
847
- $force_lang_str = !empty($force_lang) ? "&lang=$force_lang" : '';
848
- $s = '<script data-cfasync="false" type="text/javascript" src="https://' . APP_ECWID_COM . '/script.js?' . $store_id . '&data_platform=wporg' . $force_lang_str . '"></script>';
849
- $s = $s . ecwid_sso();
850
- $ecwid_script_rendered = true;
851
-
852
- return $s;
853
- } else {
854
- return '';
855
- }
856
- }
857
-
858
- function ecwid_script_shortcode($params) {
859
-
860
- $attributes = shortcode_atts(
861
- array(
862
- 'lang' => null
863
- ), $params
864
- );
865
-
866
- $content = "";
867
- if (!is_null($attributes['lang'])) {
868
- $content = ecwid_get_scriptjs_code($attributes['lang']);
869
- }
870
-
871
- return ecwid_wrap_shortcode_content($content, 'script', $params);
872
- }
873
-
874
- function ecwid_minicart_shortcode($attributes) {
875
-
876
- $params = shortcode_atts(
877
- array(
878
- 'layout' => null,
879
- 'is_ecwid_shortcode' => false,
880
- 'lang' => null
881
- ), $attributes
882
- );
883
-
884
- $layout = $params['layout'];
885
- if (!in_array($layout, array('', 'attachToCategories', 'floating', 'Mini', 'MiniAttachToProductBrowser'), true)) {
886
- $layout = 'attachToCategories';
887
- }
888
-
889
- if ($params['is_ecwid_shortcode']) {
890
- // it is a part of the ecwid shortcode, we need to show it anyways
891
- $ecwid_enable_minicart = $ecwid_show_categories = true;
892
- } else {
893
- // it is a ecwid_minicart widget that works based on appearance settings
894
- $ecwid_enable_minicart = get_option('ecwid_enable_minicart');
895
- $ecwid_show_categories = get_option('ecwid_show_categories');
896
- }
897
-
898
- $result = '';
899
-
900
- if (!empty($ecwid_enable_minicart) && !empty($ecwid_show_categories)) {
901
- $result = <<<EOT
902
- <script data-cfasync="false" type="text/javascript"> xMinicart("style=","layout=$layout"); </script>
903
- EOT;
904
- }
905
-
906
- $result = apply_filters('ecwid_minicart_shortcode_content', $result);
907
-
908
- if (!empty($result)) {
909
- $result = ecwid_wrap_shortcode_content($result, 'minicart', $params);
910
- }
911
-
912
- return $result;
913
- }
914
-
915
- function ecwid_searchbox_shortcode($attributes) {
916
-
917
- $params = shortcode_atts(
918
- array(
919
- 'is_ecwid_shortcode' => false,
920
- 'lang' => null
921
- ), $attributes
922
- );
923
-
924
- $ecwid_show_search_box = $params['is_ecwid_shortcode'] ? true : get_option('ecwid_show_search_box');
925
-
926
- $result = '';
927
- if (!empty($ecwid_show_search_box)) {
928
- $result = <<<EOT
929
- <script data-cfasync="false" type="text/javascript"> xSearchPanel("style="); </script>
930
- EOT;
931
- }
932
-
933
- $result = apply_filters('ecwid_search_shortcode_content', $result);
934
-
935
- if (!empty($result)) {
936
- $result = ecwid_wrap_shortcode_content($result, 'search', $params);
937
- }
938
-
939
- return $result;
940
- }
941
-
942
- function ecwid_categories_shortcode($attributes) {
943
-
944
- $params = shortcode_atts(
945
- array(
946
- 'is_ecwid_shortcode' => false,
947
- 'lang' => null
948
- ), $attributes
949
- );
950
-
951
- $ecwid_show_categories = $params['is_ecwid_shortcode'] ? true : get_option('ecwid_show_categories');
952
-
953
- $result = '';
954
- if (!empty($ecwid_show_categories)) {
955
- $result = <<<EOT
956
- <script data-cfasync="false" type="text/javascript"> xCategories("style="); </script>
957
- EOT;
958
- }
959
-
960
- $result = apply_filters('ecwid_categories_shortcode_content', $result);
961
-
962
- if (!empty($result)) {
963
- $result = ecwid_wrap_shortcode_content($result, 'categories', $params);
964
- }
965
-
966
- return $result;
967
- }
968
-
969
- function ecwid_product_shortcode($shortcode_attributes) {
970
-
971
- $attributes = shortcode_atts(
972
- array(
973
- 'id' => null,
974
- 'display' => 'picture title price options addtobag',
975
- 'link' => 'yes'
976
- ),
977
- $shortcode_attributes
978
- );
979
-
980
- $id = $attributes['id'];
981
-
982
- if (is_null($id) || !is_numeric($id) || $id <= 0) return;
983
-
984
- if ($attributes['link'] == 'yes' && !ecwid_is_store_page_available()) {
985
- $attributes['link'] = 'no';
986
- }
987
-
988
- $display_items = array(
989
- 'picture' => '<div itemprop="picture"></div>',
990
- 'title' => '<div class="ecwid-title" itemprop="title"></div>',
991
- 'price' => '<div itemtype="http://schema.org/Offer" itemscope itemprop="offers">'
992
- . '<div class="ecwid-productBrowser-price ecwid-price" itemprop="price"></div>'
993
- . '</div>',
994
- 'options' => '<div itemprop="options"></div>',
995
- 'qty' => '<div itemprop="qty"></div>',
996
- 'addtobag' => '<div itemprop="addtobag"></div>'
997
- );
998
-
999
- $result = sprintf(
1000
- '<div class="ecwid ecwid-SingleProduct ecwid-Product ecwid-Product-%d" '
1001
- . 'itemscope itemtype="http://schema.org/Product" '
1002
- . 'data-single-product-id="%d">',
1003
- $id, $id
1004
- );
1005
-
1006
- $items = preg_split('![^0-9^a-z^A-Z^\-^_]!', $attributes['display']);
1007
-
1008
- if (is_array($items) && count($items) > 0) foreach ($items as $item) {
1009
- if (array_key_exists($item, $display_items)) {
1010
- if ($attributes['link'] == 'yes' && in_array($item, array('title', 'picture'))) {
1011
- $product_link = ecwid_get_store_page_url() . '#!/~/product/id=' . $id;
1012
- $result .= '<a href="' . esc_url($product_link) . '">' . $display_items[$item] . '</a>';
1013
- } else {
1014
- $result .= $display_items[$item];
1015
- }
1016
- }
1017
- }
1018
-
1019
- $result .= '</div>';
1020
-
1021
- $result .= ecwid_get_product_browser_url_script();
1022
- $result .= '<script data-cfasync="false" type="text/javascript">xSingleProduct()</script>';
1023
-
1024
- update_option('ecwid_single_product_used', time());
1025
-
1026
- return ecwid_wrap_shortcode_content($result, 'product');
1027
- }
1028
-
1029
- function ecwid_shortcode($attributes)
1030
- {
1031
- $attributes = shortcode_atts(
1032
- array(
1033
- 'widgets' => 'productbrowser',
1034
- 'categories_per_row' => '3',
1035
- 'category_view' => 'grid',
1036
- 'search_view' => 'grid',
1037
- 'grid' => '3,3',
1038
- 'list' => '10',
1039
- 'table' => '20',
1040
- 'minicart_layout' => 'attachToCategories',
1041
- 'default_category_id' => 0,
1042
- 'lang' => ''
1043
- )
1044
- , $attributes
1045
- );
1046
-
1047
- $allowed_widgets = array('productbrowser', 'search', 'categories', 'minicart');
1048
- $widgets = preg_split('![^0-9^a-z^A-Z^-^_]!', $attributes['widgets']);
1049
- foreach ($widgets as $key => $widget) {
1050
- if (!in_array($widget, $allowed_widgets)) {
1051
- unset($widgets[$key]);
1052
- }
1053
- }
1054
-
1055
- if (empty($widgets)) {
1056
- $widgets = array('productbrowser');
1057
- }
1058
-
1059
- $attributes['layout'] = $attributes['minicart_layout'];
1060
- $attributes['is_ecwid_shortcode'] = true;
1061
-
1062
- $result = '';
1063
-
1064
- $widgets_order = array('minicart', 'search', 'categories', 'productbrowser');
1065
- foreach ($widgets_order as $widget) {
1066
- if (in_array($widget, $widgets)) {
1067
- if ($widget == 'search') {
1068
- $widget = 'searchbox';
1069
- }
1070
-
1071
- $result .= call_user_func_array('ecwid_' . $widget . '_shortcode', array($attributes));
1072
- }
1073
- }
1074
-
1075
- update_option('ecwid_store_shortcode_used', time());
1076
-
1077
- return $result;
1078
- }
1079
-
1080
- function ecwid_productbrowser_shortcode($shortcode_params) {
1081
-
1082
- $atts = shortcode_atts(
1083
- array(
1084
- 'categories_per_row' => false,
1085
- 'grid' => false,
1086
- 'list' => false,
1087
- 'table' => false,
1088
- 'search_view' => false,
1089
- 'category_view' => false
1090
- ), $shortcode_params
1091
- );
1092
-
1093
- $grid = explode(',', $atts['grid']);
1094
- if (count($grid) == 2) {
1095
- $atts['grid_rows'] = intval($grid[0]);
1096
- $atts['grid_cols'] = intval($grid[1]);
1097
- } else {
1098
- list($atts['grid_rows'], $atts['grid_cols']) = array(false, false);
1099
- }
1100
-
1101
- $store_id = get_ecwid_store_id();
1102
- $list_of_views = array('list','grid','table');
1103
-
1104
- $ecwid_pb_categoriesperrow = $atts['categories_per_row'] ? $atts['categories_per_row'] : get_option('ecwid_pb_categoriesperrow');
1105
- $ecwid_pb_productspercolumn_grid = $atts['grid_rows'] ? $atts['grid_rows'] : get_option('ecwid_pb_productspercolumn_grid');
1106
- $ecwid_pb_productsperrow_grid = $atts['grid_cols'] ? $atts['grid_cols'] : get_option('ecwid_pb_productsperrow_grid');
1107
- $ecwid_pb_productsperpage_list = $atts['list'] ? $atts['list'] : get_option('ecwid_pb_productsperpage_list');
1108
- $ecwid_pb_productsperpage_table = $atts['table'] ? $atts['table'] : get_option('ecwid_pb_productsperpage_table');
1109
- $ecwid_pb_defaultview = $atts['category_view'] ? $atts['category_view'] : get_option('ecwid_pb_defaultview');
1110
- $ecwid_pb_searchview = $atts['search_view'] ? $atts['search_view'] : get_option('ecwid_pb_searchview');
1111
-
1112
- $ecwid_mobile_catalog_link = get_option('ecwid_mobile_catalog_link');
1113
- $ecwid_default_category_id =
1114
- !empty($shortcode_params) && array_key_exists('default_category_id', $shortcode_params)
1115
- ? $shortcode_params['default_category_id']
1116
- : get_option('ecwid_default_category_id');
1117
-
1118
- if (empty($ecwid_pb_categoriesperrow)) {
1119
- $ecwid_pb_categoriesperrow = 3;
1120
- }
1121
- if (empty($ecwid_pb_productspercolumn_grid)) {
1122
- $ecwid_pb_productspercolumn_grid = 3;
1123
- }
1124
- if (empty($ecwid_pb_productsperrow_grid)) {
1125
- $ecwid_pb_productsperrow_grid = 3;
1126
- }
1127
- if (empty($ecwid_pb_productsperpage_list)) {
1128
- $ecwid_pb_productsperpage_list = 10;
1129
- }
1130
- if (empty($ecwid_pb_productsperpage_table)) {
1131
- $ecwid_pb_productsperpage_table = 20;
1132
- }
1133
-
1134
- if (empty($ecwid_pb_defaultview) || !in_array($ecwid_pb_defaultview, $list_of_views)) {
1135
- $ecwid_pb_defaultview = 'grid';
1136
- }
1137
- if (empty($ecwid_pb_searchview) || !in_array($ecwid_pb_searchview, $list_of_views)) {
1138
- $ecwid_pb_searchview = 'list';
1139
- }
1140
-
1141
- if (empty($ecwid_default_category_id)) {
1142
- $ecwid_default_category_str = '';
1143
- } else {
1144
- $ecwid_default_category_str = ',"defaultCategoryId='. $ecwid_default_category_id .'"';
1145
- }
1146
-
1147
- $plain_content = '';
1148
-
1149
- if (ecwid_can_display_html_catalog()) {
1150
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
1151
- include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
1152
- include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_catalog.php';
1153
-
1154
- $page_url = get_page_link();
1155
-
1156
- $catalog = new EcwidCatalog($store_id, $page_url);
1157
-
1158
- if (isset($params['mode']) && !empty($params['mode'])) {
1159
- if ($params['mode'] == 'product') {
1160
- $plain_content = $catalog->get_product($params['id']);
1161
- $url = ecwid_get_product_url(ecwid_new_product_api()->get_product($params['id']));
1162
- } elseif ($params['mode'] == 'category') {
1163
- $plain_content = $catalog->get_category($params['id']);
1164
- $ecwid_default_category_str = ',"defaultCategoryId=' . $params['id'] . '"';
1165
- $url = ecwid_get_category_url(ecwid_new_product_api()->get_category($params['id']));
1166
- }
1167
-
1168
- } else {
1169
- $plain_content = $catalog->get_category(intval($ecwid_default_category_id));
1170
- if (empty($plain_content)) {
1171
- $plain_content = $catalog->get_category(0);
1172
- } else {
1173
- $url = ecwid_get_category_url(ecwid_new_product_api()->get_category($params['id']));
1174
- }
1175
- }
1176
- if ($url) {
1177
- $parsed = parse_url($url);
1178
- $plain_content .= '<script data-cfasync="false" type="text/javascript"> if (!document.location.hash) document.location.hash = "'. $parsed['fragment'] . '";</script>';
1179
- }
1180
- }
1181
-
1182
- $s = '';
1183
-
1184
- $s = <<<EOT
1185
- <div id="ecwid-store-$store_id">
1186
- {$plain_content}
1187
- </div>
1188
- <script data-cfasync="false" type="text/javascript"> xProductBrowser("categoriesPerRow=$ecwid_pb_categoriesperrow","views=grid($ecwid_pb_productspercolumn_grid,$ecwid_pb_productsperrow_grid) list($ecwid_pb_productsperpage_list) table($ecwid_pb_productsperpage_table)","categoryView=$ecwid_pb_defaultview","searchView=$ecwid_pb_searchview","style="$ecwid_default_category_str, "id=ecwid-store-$store_id");</script>
1189
- EOT;
1190
- return ecwid_wrap_shortcode_content($s, 'product-browser', $params);
1191
- }
1192
-
1193
-
1194
- function ecwid_parse_escaped_fragment($escaped_fragment) {
1195
- $fragment = urldecode($escaped_fragment);
1196
- $return = array();
1197
-
1198
- if (preg_match('/^(\/~\/)([a-z]+)\/(.*)$/', $fragment, $matches)) {
1199
- parse_str($matches[3], $return);
1200
- $return['mode'] = $matches[2];
1201
- } elseif (preg_match('!.*/(p|c)/([0-9]*)!', $fragment, $matches)) {
1202
- if (count($matches) == 3 && in_array($matches[1], array('p', 'c'))) {
1203
- $return = array(
1204
- 'mode' => 'p' == $matches[1] ? 'product' : 'category',
1205
- 'id' => $matches[2]
1206
- );
1207
- }
1208
- }
1209
-
1210
- return $return;
1211
- }
1212
-
1213
- function ecwid_ajax_get_product_info() {
1214
- $id = $_GET['id'];
1215
-
1216
- if (ecwid_is_api_enabled()) {
1217
- $api = ecwid_new_product_api();
1218
- $product = $api->get_product_https($id);
1219
-
1220
- echo json_encode($product);
1221
- }
1222
-
1223
- die();
1224
- }
1225
-
1226
- add_filter('autoptimize_filter_js_exclude','ecwid_override_jsexclude',10,1);
1227
- function ecwid_override_jsexclude($exclude)
1228
- {
1229
- return $exclude . ', xSearchPanel("style=")';
1230
- }
1231
-
1232
- function ecwid_store_activate() {
1233
- $my_post = array();
1234
- $content = <<<EOT
1235
- <!-- Ecwid code. Please do not remove this line otherwise your Ecwid shopping cart will not work properly. --> [ecwid widgets="productbrowser search" grid="3,3" list="10" table="20" default_category_id="0" category_view="grid" search_view="grid" minicart_layout="attachToCategories" ] <!-- Ecwid code end -->
1236
- EOT;
1237
- add_option("ecwid_store_page_id", '', '', 'yes');
1238
- add_option("ecwid_store_page_id_auto", '', '', 'yes');
1239
-
1240
- add_option("ecwid_store_id", ECWID_DEMO_STORE_ID, '', 'yes');
1241
-
1242
- add_option("ecwid_enable_minicart", 'Y', '', 'yes');
1243
- add_option("ecwid_show_categories", '', '', 'yes');
1244
- add_option("ecwid_show_search_box", '', '', 'yes');
1245
-
1246
- add_option("ecwid_pb_categoriesperrow", '3', '', 'yes');
1247
-
1248
- add_option("ecwid_pb_productspercolumn_grid", '3', '', 'yes');
1249
- add_option("ecwid_pb_productsperrow_grid", '3', '', 'yes');
1250
- add_option("ecwid_pb_productsperpage_list", '10', '', 'yes');
1251
- add_option("ecwid_pb_productsperpage_table", '20', '', 'yes');
1252
-
1253
- add_option("ecwid_pb_defaultview", 'grid', '', 'yes');
1254
- add_option("ecwid_pb_searchview", 'list', '', 'yes');
1255
-
1256
- add_option("ecwid_mobile_catalog_link", '', '', 'yes');
1257
- add_option("ecwid_default_category_id", '', '', 'yes');
1258
-
1259
- add_option('ecwid_is_api_enabled', 'on', '', 'yes');
1260
- add_option('ecwid_api_check_time', 0, '', 'yes');
1261
-
1262
- add_option('ecwid_show_vote_message', true);
1263
-
1264
- add_option("ecwid_sso_secret_key", '', '', 'yes');
1265
-
1266
- add_option("ecwid_installation_date", time());
1267
-
1268
- add_option('ecwid_hide_appearance_menu', get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID ? 'Y' : 'N', 'yes');
1269
- // Does not affect updates, automatically turned on for new users only
1270
- add_option("ecwid_advanced_theme_layout", get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID ? 'Y' : 'N', 'yes');
1271
-
1272
- add_option('ecwid_chameleon_primary', '');
1273
- add_option('ecwid_chameleon_background', '');
1274
- add_option('ecwid_chameleon_links', '');
1275
-
1276
- /* All new options should go to check_version thing */
1277
-
1278
- $id = get_option("ecwid_store_page_id");
1279
- $_tmp_page = null;
1280
- if (!empty($id) and ($id > 0)) {
1281
- $_tmp_page = get_post($id);
1282
- }
1283
- if ($_tmp_page !== null) {
1284
- $my_post = array();
1285
- $my_post['ID'] = $id;
1286
- $my_post['post_status'] = 'publish';
1287
- wp_update_post( $my_post );
1288
-
1289
- } else {
1290
- ecwid_load_textdomain();
1291
- $my_post['post_title'] = __('Store', 'ecwid-shopping-cart');
1292
- $my_post['post_content'] = $content;
1293
- $my_post['post_status'] = 'publish';
1294
- $my_post['post_author'] = 1;
1295
- $my_post['post_type'] = 'page';
1296
- $my_post['comment_status'] = 'closed';
1297
- $id = wp_insert_post( $my_post );
1298
- update_option('ecwid_store_page_id', $id);
1299
-
1300
- if (ecwid_get_theme_identification() == 'responsive') {
1301
- update_post_meta($id, '_wp_page_template', 'full-width-page.php');
1302
- update_option("ecwid_show_search_box", 'Y');
1303
- }
1304
- }
1305
-
1306
- Ecwid_Message_Manager::enable_message('on_activate');
1307
-
1308
- }
1309
-
1310
- function ecwid_show_admin_messages() {
1311
- if (is_admin()) {
1312
- Ecwid_Message_Manager::show_messages();
1313
- }
1314
- }
1315
-
1316
- function ecwid_show_admin_message($message) {
1317
-
1318
- $class = version_compare(get_bloginfo('version'), '3.0') < 0 ? "updated fade" : "update-nag";
1319
- echo sprintf('<div class="%s" style="margin-top: 5px">%s</div>', $class, $message);
1320
- }
1321
-
1322
- function ecwid_store_deactivate() {
1323
- $ecwid_page_id = get_option("ecwid_store_page_id");
1324
- $_tmp_page = null;
1325
- if (!empty($ecwid_page_id) and ($ecwid_page_id > 0)) {
1326
- $_tmp_page = get_page($ecwid_page_id);
1327
- if ($_tmp_page !== null) {
1328
- $my_post = array();
1329
- $my_post['ID'] = $ecwid_page_id;
1330
- $my_post['post_status'] = 'draft';
1331
- wp_update_post( $my_post );
1332
- } else {
1333
- update_option('ecwid_store_page_id', '');
1334
- }
1335
- }
1336
-
1337
- Ecwid_Message_Manager::reset_hidden_messages();
1338
- }
1339
-
1340
- function ecwid_uninstall() {
1341
- delete_option("ecwid_store_page_id");
1342
- delete_option("ecwid_store_page_id_auto");
1343
- delete_option("ecwid_store_id");
1344
- delete_option("ecwid_enable_minicart");
1345
- delete_option("ecwid_show_categories");
1346
- delete_option("ecwid_show_search_box");
1347
- delete_option("ecwid_pb_categoriesperrow");
1348
- delete_option("ecwid_pb_productspercolumn_grid");
1349
- delete_option("ecwid_pb_productsperrow_grid");
1350
- delete_option("ecwid_pb_productsperpage_list");
1351
- delete_option("ecwid_pb_productsperpage_table");
1352
- delete_option("ecwid_pb_defaultview");
1353
- delete_option("ecwid_pb_searchview");
1354
- delete_option("ecwid_mobile_catalog_link");
1355
- delete_option("ecwid_default_category_id");
1356
- delete_option('ecwid_is_api_enabled');
1357
- delete_option('ecwid_api_check_time');
1358
- delete_option('ecwid_show_vote_message');
1359
- delete_option("ecwid_sso_secret_key");
1360
- delete_option("ecwid_installation_date");
1361
- delete_option('ecwid_hide_appearance_menu');
1362
- delete_option("ecwid_advanced_theme_layout");
1363
-
1364
- delete_option("ecwid_plugin_version");
1365
- delete_option("ecwid_use_chameleon");
1366
- }
1367
-
1368
- function ecwid_abs_intval($value) {
1369
- if (!is_null($value))
1370
- return abs(intval($value));
1371
- else
1372
- return null;
1373
- }
1374
-
1375
- function ecwid_options_add_page() {
1376
-
1377
- $is_newbie = get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
1378
-
1379
- add_menu_page(
1380
- __('Ecwid shopping cart settings', 'ecwid-shopping-cart'),
1381
- __('Ecwid Store', 'ecwid-shopping-cart'),
1382
- 'manage_options',
1383
- 'ecwid',
1384
- 'ecwid_general_settings_do_page'
1385
- );
1386
-
1387
-
1388
- if ($is_newbie) {
1389
- $title = __('Setup', 'ecwid-shopping-cart');
1390
- } else {
1391
- $title = __('Dashboard', 'ecwid-shopping-cart');
1392
- }
1393
- add_submenu_page(
1394
- 'ecwid',
1395
- $title,
1396
- $title,
1397
- 'manage_options',
1398
- 'ecwid',
1399
- 'ecwid_general_settings_do_page'
1400
- );
1401
-
1402
- if (get_option('ecwid_hide_appearance_menu') != 'Y') {
1403
- add_submenu_page(
1404
- 'ecwid',
1405
- __('Appearance settings', 'ecwid-shopping-cart'),
1406
- __('Appearance', 'ecwid-shopping-cart'),
1407
- 'manage_options',
1408
- 'ecwid-appearance',
1409
- 'ecwid_appearance_settings_do_page'
1410
- );
1411
- }
1412
-
1413
- if (!$is_newbie || (isset($_GET['page']) && $_GET['page'] == 'ecwid-advanced')) {
1414
- add_submenu_page(
1415
- 'ecwid',
1416
- __('Advanced settings', 'ecwid-shopping-cart'),
1417
- __('Advanced', 'ecwid-shopping-cart'),
1418
- 'manage_options',
1419
- 'ecwid-advanced',
1420
- 'ecwid_advanced_settings_do_page'
1421
- );
1422
- }
1423
- }
1424
-
1425
- function ecwid_register_admin_styles($hook_suffix) {
1426
-
1427
- wp_enqueue_style('ecwid-admin-css', plugins_url('ecwid-shopping-cart/css/admin.css'), array(), get_option('ecwid_plugin_version'));
1428
-
1429
- if (version_compare(get_bloginfo('version'), '3.8-beta') > 0) {
1430
- wp_enqueue_style('ecwid-admin38-css', plugins_url('ecwid-shopping-cart/css/admin.3.8.css'), array('ecwid-admin-css'), get_option('ecwid_plugin_version'), 'all');
1431
- }
1432
-
1433
- if (isset($_GET['page']) && $_GET['page'] == 'ecwid') {
1434
-
1435
- if (get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID) {
1436
- // Open dashboard for the first time, ecwid store id is set to demo => need landing styles/scripts
1437
- wp_enqueue_script('ecwid-landing-js', plugins_url('ecwid-shopping-cart/js/landing.js'), array(), get_option('ecwid_plugin_version'));
1438
- wp_enqueue_style('ecwid-landing-css', plugins_url('ecwid-shopping-cart/css/landing.css'), array(), get_option('ecwid_plugin_version'), 'all');
1439
- wp_enqueue_style('ecwid-landing-fonts', 'http://fonts.googleapis.com/css?family=Open+Sans:400,600,700,300', array(), get_option('ecwid_plugin_version'));
1440
- } else {
1441
- // We already connected and disconnected the store, no need for fancy landing
1442
- wp_enqueue_script('ecwid-connect-js', plugins_url('ecwid-shopping-cart/js/dashboard.js'), array(), get_option('ecwid_plugin_version'));
1443
- }
1444
- }
1445
- }
1446
-
1447
- function ecwid_register_settings_styles($hook_suffix) {
1448
-
1449
- if ( ($hook_suffix != 'post.php' && $hook_suffix != 'post-new.php') && strpos($hook_suffix, 'ecwid') === false) return;
1450
-
1451
- wp_enqueue_style('ecwid-settings-pure-css', plugins_url('ecwid-shopping-cart/css/pure-min.css'), array(), get_option('ecwid_plugin_version'), 'all');
1452
- wp_enqueue_style('ecwid-settings-css', plugins_url('ecwid-shopping-cart/css/settings.css'), array(), get_option('ecwid_plugin_version'), 'all');
1453
-
1454
- if (version_compare(get_bloginfo('version'), '3.8-beta') > 0) {
1455
- wp_enqueue_style('ecwid-settings38-css', plugins_url('ecwid-shopping-cart/css/settings.3.8.css'), array('ecwid-settings-css'), '', 'all');
1456
- }}
1457
-
1458
- function ecwid_plugin_actions($links) {
1459
- $settings_link = "<a href='admin.php?page=ecwid'>"
1460
- . (get_ecwid_store_id() == ECWID_DEMO_STORE_ID ? __('Setup', 'ecwid-shopping-cart') : __('Settings') )
1461
- . "</a>";
1462
- array_unshift( $links, $settings_link );
1463
-
1464
- return $links;
1465
- }
1466
-
1467
- function ecwid_settings_api_init() {
1468
-
1469
- if (isset($_POST['settings_section'])) switch ($_POST['settings_section']) {
1470
- case 'appearance':
1471
- register_setting('ecwid_options_page', 'ecwid_enable_minicart');
1472
-
1473
- register_setting('ecwid_options_page', 'ecwid_show_categories');
1474
- register_setting('ecwid_options_page', 'ecwid_show_search_box');
1475
-
1476
- register_setting('ecwid_options_page', 'ecwid_pb_categoriesperrow', 'ecwid_abs_intval');
1477
- register_setting('ecwid_options_page', 'ecwid_pb_productspercolumn_grid', 'ecwid_abs_intval');
1478
- register_setting('ecwid_options_page', 'ecwid_pb_productsperrow_grid', 'ecwid_abs_intval');
1479
- register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_list', 'ecwid_abs_intval');
1480
- register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_table', 'ecwid_abs_intval');
1481
- register_setting('ecwid_options_page', 'ecwid_pb_defaultview');
1482
- register_setting('ecwid_options_page', 'ecwid_pb_searchview');
1483
- break;
1484
-
1485
- case 'general':
1486
- register_setting('ecwid_options_page', 'ecwid_store_id','ecwid_abs_intval' );
1487
- if (isset($_POST['ecwid_store_id']) && intval($_POST['ecwid_store_id']) == 0) {
1488
- Ecwid_Message_Manager::reset_hidden_messages();
1489
- }
1490
- break;
1491
-
1492
- case 'advanced':
1493
- register_setting('ecwid_options_page', 'ecwid_default_category_id', 'ecwid_abs_intval');
1494
- register_setting('ecwid_options_page', 'ecwid_sso_secret_key');
1495
- register_setting('ecwid_options_page', 'ecwid_enable_advanced_theme_layout');
1496
- register_setting('ecwid_options_page', 'ecwid_use_chameleon');
1497
- break;
1498
- }
1499
-
1500
- if (isset($_POST['ecwid_store_id'])) {
1501
- update_option('ecwid_is_api_enabled', 'off');
1502
- update_option('ecwid_api_check_time', 0);
1503
- update_option('ecwid_last_oauth_fail_time', 0);
1504
- }
1505
- }
1506
-
1507
- function ecwid_common_admin_scripts() {
1508
-
1509
- wp_enqueue_script('ecwid-admin-js', plugins_url('ecwid-shopping-cart/js/admin.js'), array(), get_option('ecwid_plugin_version'));
1510
- wp_enqueue_script('ecwid-modernizr-js', plugins_url('ecwid-shopping-cart/js/modernizr.js'), array(), get_option('ecwid_plugin_version'));
1511
- }
1512
-
1513
- function ecwid_get_register_link()
1514
- {
1515
- $link = 'https://my.ecwid.com/cp/?source=wporg%s#register';
1516
-
1517
- global $current_user;
1518
- get_currentuserinfo();
1519
-
1520
- $user_data = '';
1521
- if ($current_user->ID && function_exists('get_user_meta')) {
1522
- $meta = get_user_meta($current_user->ID);
1523
-
1524
- $data = array(
1525
- 'name' => get_user_meta($current_user->ID, 'first_name', true) . ' ' . get_user_meta($current_user->ID, 'last_name', true),
1526
- 'nickname' => $current_user->display_name,
1527
- 'email' => $current_user->user_email
1528
- );
1529
-
1530
- foreach ($data as $key => $value) {
1531
- if (trim($value) == '') {
1532
- unset($data[$key]);
1533
- }
1534
- }
1535
- $user_data = '&' . build_query($data);
1536
- }
1537
-
1538
- $link = sprintf($link, $user_data);
1539
-
1540
- return $link;
1541
- }
1542
-
1543
- function ecwid_general_settings_do_page() {
1544
-
1545
- $connection_error = isset($_GET['connection_error']);
1546
-
1547
- $no_oauth = isset($_GET['oauth']) && @$_GET['oauth'] == 'no';
1548
-
1549
- if (!$no_oauth) {
1550
- $last_check = get_option('ecwid_last_oauth_fail_time');
1551
-
1552
- // if something was not right last time
1553
- if ($last_check > 0) {
1554
- // then we consider it not working
1555
- $no_oauth = ecwid_test_oauth();
1556
- }
1557
- }
1558
-
1559
- if (get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID && !$no_oauth) {
1560
- global $ecwid_oauth;
1561
-
1562
- $register = !$connection_error && !isset($_GET['connect']) && !@$_COOKIE['ecwid_create_store_clicked'];
1563
-
1564
- require_once(ECWID_PLUGIN_DIR . '/templates/landing.php');
1565
- } else {
1566
-
1567
- if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID) {
1568
- global $ecwid_oauth;
1569
-
1570
- require_once ECWID_PLUGIN_DIR . '/templates/connect.php';
1571
- } else {
1572
- require_once ECWID_PLUGIN_DIR . '/templates/dashboard.php';
1573
- }
1574
- }
1575
- }
1576
-
1577
- function ecwid_admin_post_connect()
1578
- {
1579
- if (isset($_GET['force_store_id'])) {
1580
- update_option('ecwid_store_id', $_GET['force_store_id']);
1581
- update_option('ecwid_is_api_enabled', 'off');
1582
- update_option('ecwid_api_check_time', 0);
1583
- update_option('ecwid_last_oauth_fail_time', 1);
1584
- wp_redirect('admin.php?page=ecwid');
1585
- }
1586
- global $ecwid_oauth;
1587
-
1588
- if (ecwid_test_oauth(true)) {
1589
- wp_redirect($ecwid_oauth->get_auth_dialog_url());
1590
- } else {
1591
- wp_redirect('admin.php?page=ecwid&oauth=no');
1592
- }
1593
- }
1594
-
1595
- function ecwid_test_oauth($force = false)
1596
- {
1597
- global $ecwid_oauth;
1598
-
1599
- $last_fail = get_option('ecwid_last_oauth_fail_time');
1600
-
1601
- if ($last_fail < time() + 60*60*24 || $force) {
1602
- $result = $ecwid_oauth->test_post();
1603
- if ($result) {
1604
- update_option('ecwid_last_oauth_fail_time', $last_fail = 0);
1605
- } else {
1606
- update_option('ecwid_last_oauth_fail_time', $last_fail = time());
1607
- }
1608
- }
1609
-
1610
- return $last_fail == 0;
1611
- }
1612
-
1613
- function ecwid_get_categories_for_selector() {
1614
- $categories = false;
1615
- if (ecwid_is_paid_account()) {
1616
- $api = ecwid_new_product_api();
1617
- $categories = $api->get_all_categories();
1618
- $by_id = array();
1619
-
1620
- if (empty($categories)) return array();
1621
-
1622
- if (is_array($categories)) {
1623
- foreach ($categories as $key => $category) {
1624
- $by_id[$category['id']] = $category;
1625
- }
1626
- }
1627
- unset($categories);
1628
-
1629
- foreach ($by_id as $id => $category) {
1630
- $name_path = array($category['name']);
1631
- while (is_array($category) && isset($category['parentId'])) {
1632
- $name = '';
1633
- if (isset($by_id[$category['parentId']])) {
1634
- $name = $by_id[$category['parentId']]['name'];
1635
- } else {
1636
- $name = __('Hidden category', 'ecwid-shopping-cart');
1637
- }
1638
- $name_path[] = $name;
1639
- $category = isset($by_id[$category['parentId']]) ? $by_id[$category['parentId']] : false;
1640
- }
1641
-
1642
- $by_id[$id]['path'] = array_reverse($name_path);
1643
- $by_id[$id]['path_str'] = implode(" > ", $by_id[$id]['path']);
1644
- }
1645
-
1646
- function sort_by_path($a, $b) {
1647
- return strcmp($a['path_str'], $b['path_str']);
1648
- }
1649
-
1650
- uasort($by_id, 'sort_by_path');
1651
-
1652
- $categories = $by_id;
1653
- }
1654
-
1655
- return $categories;
1656
- }
1657
-
1658
- function ecwid_advanced_settings_do_page() {
1659
- $categories = ecwid_get_categories_for_selector();
1660
-
1661
- require_once ECWID_PLUGIN_DIR . '/templates/advanced-settings.php';
1662
- }
1663
-
1664
- function ecwid_appearance_settings_do_page() {
1665
-
1666
- wp_register_script('ecwid-appearance-js', plugins_url('ecwid-shopping-cart/js/appearance.js'), array(), get_option('ecwid_plugin_version'), true);
1667
- wp_enqueue_script('ecwid-appearance-js');
1668
-
1669
- $disabled = false;
1670
- if (!empty($ecwid_page_id) && ($ecwid_page_id > 0)) {
1671
- $_tmp_page = get_post($ecwid_page_id);
1672
- $content = $_tmp_page->post_content;
1673
- if ( (strpos($content, "[ecwid_productbrowser]") === false) && (strpos($content, "xProductBrowser") !== false) )
1674
- $disabled = true;
1675
- }
1676
- // $disabled_str is used in appearance settings template
1677
- if ($disabled)
1678
- $disabled_str = 'disabled = "disabled"';
1679
- else
1680
- $disabled_str = "";
1681
-
1682
- require_once ECWID_PLUGIN_DIR . 'templates/appearance-settings.php';
1683
- }
1684
-
1685
- function get_ecwid_store_id() {
1686
- static $store_id = null;
1687
- if (is_null($store_id)) {
1688
- $store_id = get_option('ecwid_store_id');
1689
- if (empty($store_id))
1690
- $store_id = ECWID_DEMO_STORE_ID;
1691
- }
1692
-
1693
- return $store_id;
1694
- }
1695
-
1696
- function ecwid_dashboard_widget_function() {
1697
- require_once ECWID_PLUGIN_DIR . 'templates/wp-dashboard-widget.php';
1698
- }
1699
-
1700
- function ecwid_add_dashboard_widgets() {
1701
- if (current_user_can('administrator')) {
1702
- wp_add_dashboard_widget('ecwid_dashboard_widget', __('Recommendations for Your Online Store', 'ecwid-shopping-cart'), 'ecwid_dashboard_widget_function');
1703
- }
1704
- }
1705
-
1706
- function ecwid_save_post($post_id)
1707
- {
1708
- // If primary or auto store page gets updated
1709
- if ($post_id == get_option('ecwid_store_page_id') || $post_id == get_option('ecwid_store_page_id_auto')) {
1710
- $new_status = get_post_status($post_id);
1711
-
1712
- // and the update either disables the page or removes product browser
1713
- if (!in_array($new_status, array('publish', 'private')) || !ecwid_page_has_productbrowser($post_id)) {
1714
-
1715
- // then look for another enabled page that has a product browser in it
1716
- $pages = get_pages(array('post_status' => 'publish,private'));
1717
-
1718
- foreach ($pages as $page) {
1719
- if (ecwid_page_has_productbrowser($page->ID)) {
1720
- update_option('ecwid_store_page_id_auto', $page->ID);
1721
- return;
1722
- }
1723
- }
1724
- }
1725
- }
1726
-
1727
- // if there is no current store page and this new page has a product browser
1728
- if (ecwid_page_has_productbrowser($post_id) && !ecwid_get_current_store_page_id()) {
1729
- // then this page becomes a new store page
1730
- update_option('ecwid_store_page_id_auto', $post_id);
1731
- }
1732
- }
1733
-
1734
- function ecwid_get_current_store_page_id()
1735
- {
1736
- static $page_id = null;
1737
-
1738
- if (is_null($page_id)) {
1739
- $page_id = false;
1740
- foreach(array('ecwid_store_page_id', 'ecwid_store_page_id_auto') as $option) {
1741
- $id = get_option($option);
1742
- if ($id) {
1743
- $status = get_post_status($id);
1744
-
1745
- if ($status == 'publish' || $status == 'private') {
1746
- $page_id = $id;
1747
- break;
1748
- }
1749
- }
1750
- }
1751
- }
1752
-
1753
- return $page_id;
1754
- }
1755
-
1756
- function ecwid_get_store_page_url()
1757
- {
1758
- static $link = null;
1759
-
1760
- if (is_null($link)) {
1761
- $link = get_page_link(ecwid_get_current_store_page_id());
1762
- }
1763
-
1764
- return $link;
1765
- }
1766
-
1767
- function ecwid_is_store_page_available()
1768
- {
1769
- return ecwid_get_current_store_page_id() != false;
1770
- }
1771
-
1772
- function ecwid_get_product_url($product)
1773
- {
1774
- return ecwid_get_entity_url($product, 'p');
1775
- }
1776
-
1777
- function ecwid_get_category_url($category)
1778
- {
1779
- return ecwid_get_entity_url($category, 'c');
1780
- }
1781
-
1782
- function ecwid_get_entity_url($entity, $type) {
1783
-
1784
- $link = ecwid_get_store_page_url();
1785
-
1786
- if (is_numeric($entity)) {
1787
- return $link . '#!/' . $type . '/' . $entity;
1788
- } elseif (is_array($entity) && isset($entity['url'])) {
1789
- $link .= substr($entity['url'], strpos($entity['url'], '#'));
1790
- }
1791
-
1792
- return $link;
1793
-
1794
- }
1795
-
1796
- function ecwid_get_product_browser_url_script()
1797
- {
1798
- $str = '';
1799
- if (ecwid_is_store_page_available()) {
1800
- $url = ecwid_get_store_page_url();
1801
-
1802
- $str = '<script data-cfasync="false" type="text/javascript">var ecwid_ProductBrowserURL = "' . esc_js($url) . '";</script>';
1803
- }
1804
-
1805
- return $str;
1806
-
1807
- }
1808
-
1809
- class EcwidBadgeWidget extends WP_Widget {
1810
-
1811
- var $url_template = "//static.ecwid.com/badges/%s.png";
1812
- var $available_badges;
1813
-
1814
- function EcwidBadgeWidget() {
1815
- $widget_ops = array('classname' => 'widget_ecwid_badge', 'description' => __("If you like Ecwid and want to help it grow and become the most popular e-commerce solution, you can now add a fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid.", 'ecwid-shopping-cart') );
1816
- $this->WP_Widget('ecwidbadge', __('Ecwid Badge', 'ecwid-shopping-cart'), $widget_ops);
1817
-
1818
- $this->available_badges = array(
1819
- 'ecwid-shopping-cart-widget-5' => array (
1820
- 'name' => 'ecwid-shopping-cart-widget-5',
1821
- 'width' => '73',
1822
- 'height' => '20',
1823
- 'alt' => __('Ecwid shopping cart widget', 'ecwid-shopping-cart')
1824
- ),
1825
- 'ecwid-shopping-cart-widget-6' => array (
1826
- 'name' => 'ecwid-shopping-cart-widget-6',
1827
- 'width' => '73',
1828
- 'height' => '20',
1829
- 'alt' => __('Ecwid shopping cart widget', 'ecwid-shopping-cart')
1830
- ),
1831
- 'ecwid-ecommerce-solution-2' => array (
1832
- 'name' => 'ecwid-ecommerce-solution-2',
1833
- 'width' => '165',
1834
- 'height' => '58',
1835
- 'alt' => __('Ecwid ecommerce solution', 'ecwid-shopping-cart')
1836
- ),
1837
- 'ecwid-free-shopping-cart-2' => array (
1838
- 'name' => 'ecwid-free-shopping-cart-2',
1839
- 'width' => '175',
1840
- 'height' => '58',
1841
- 'alt' => __('Ecwid free shopping cart', 'ecwid-shopping-cart')
1842
- ),
1843
- 'ecwid-shopping-cart-3' => array (
1844
- 'name' => 'ecwid-shopping-cart-3',
1845
- 'width' => '165',
1846
- 'height' => '56',
1847
- 'alt' => __('Ecwid shopping cart', 'ecwid-shopping-cart')
1848
- ),
1849
- 'ecwid-ecommerce-widgets-3' => array (
1850
- 'name' => 'ecwid-ecommerce-widgets-3',
1851
- 'width' => '165',
1852
- 'height' => '58',
1853
- 'alt' => __('Ecwid e-commerce widgets', 'ecwid-shopping-cart')
1854
- ),
1855
- 'ecwid-shopping-cart-3' => array (
1856
- 'name' => 'ecwid-shopping-cart-3',
1857
- 'width' => '165',
1858
- 'height' => '56',
1859
- 'alt' => __('Ecwid shopping cart', 'ecwid-shopping-cart')
1860
- ),
1861
- 'ecwid-ecommerce-widgets-3' => array (
1862
- 'name' => 'ecwid-ecommerce-widgets-3',
1863
- 'width' => '165',
1864
- 'height' => '58',
1865
- 'alt' => __('Ecwid e-commerce widgets', 'ecwid-shopping-cart')
1866
- ),
1867
- 'ecwid-ecommerce-solution-3' => array (
1868
- 'name' => 'ecwid-ecommerce-solution-3',
1869
- 'width' => '165',
1870
- 'height' => '58',
1871
- 'alt' => __('Ecwid ecommerce solution', 'ecwid-shopping-cart')
1872
- ),
1873
- 'ecwid-free-shopping-cart-3' => array (
1874
- 'name' => 'ecwid-free-shopping-cart-3',
1875
- 'width' => '175',
1876
- 'height' => '58',
1877
- 'alt' => __('Ecwid free shopping cart', 'ecwid-shopping-cart')
1878
- )
1879
- );
1880
- }
1881
-
1882
- function widget($args, $instance)
1883
- {
1884
- extract($args);
1885
-
1886
- if (!isset($instance['badge_id']) || !array_key_exists($instance['badge_id'], $this->available_badges)) {
1887
- return;
1888
- }
1889
- $badge = $this->available_badges[$instance['badge_id']];
1890
- $url = sprintf($this->url_template, $badge['name']);
1891
-
1892
- echo $before_widget;
1893
-
1894
- echo <<<HTML
1895
- <div>
1896
- <a target="_blank" rel="nofollow" href="http://www.ecwid.com?source=wporg-badge">
1897
- <img src="$url" width="$badge[width]" height="$badge[height]" alt="$badge[alt]" />
1898
- </a>
1899
- </div>
1900
- HTML;
1901
-
1902
- echo $after_widget;
1903
- }
1904
-
1905
- function update($new_instance, $old_instance){
1906
- $instance = $old_instance;
1907
- $instance['badge_id'] =
1908
- array_key_exists($new_instance['badge_id'], $this->available_badges)
1909
- ? $new_instance['badge_id']
1910
- : '';
1911
-
1912
- return $instance;
1913
- }
1914
-
1915
- function form($instance) {
1916
- $instance = wp_parse_args( (array) $instance, array('badge_id' => 'ecwid-shopping-cart-widget-5') );
1917
-
1918
- foreach ($this->available_badges as $id => $widget) {
1919
- $element_id = "badge-$id";
1920
- $name = $this->get_field_name('badge_id');
1921
- $checked = '';
1922
- if (isset($instance['badge_id']) && $instance['badge_id'] == $id) {
1923
- $checked = 'checked="checked"';
1924
- }
1925
- $url = sprintf($this->url_template, $id);
1926
- $content = <<<HTML
1927
- <label class="ecwid-badge">
1928
- <div class="checkbox">
1929
- <input name="$name" type="radio" value="$widget[name]"$checked/>
1930
- </div>
1931
- <div class="image">
1932
- <img src="$url" width="$widget[width]" height="$widget[height]" alt="$widget[alt]" />
1933
- </div>
1934
- </label>
1935
- HTML;
1936
- echo $content;
1937
- }
1938
- }
1939
- }
1940
-
1941
- class EcwidMinicartWidget extends WP_Widget {
1942
-
1943
- function EcwidMinicartWidget() {
1944
- $widget_ops = array('classname' => 'widget_ecwid_minicart', 'description' => __("Your store's minicart", 'ecwid-shopping-cart') );
1945
- $this->WP_Widget('ecwidminicart', __('Ecwid Shopping Bag (Normal)', 'ecwid-shopping-cart'), $widget_ops);
1946
-
1947
- }
1948
-
1949
- function widget($args, $instance) {
1950
- extract($args);
1951
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1952
-
1953
- echo $before_widget;
1954
-
1955
- if ( $title )
1956
- echo $before_title . $title . $after_title;
1957
-
1958
- echo '<div>';
1959
-
1960
- echo ecwid_get_scriptjs_code();
1961
- echo ecwid_get_product_browser_url_script();
1962
- echo '<script data-cfasync="false" type="text/javascript"> xMinicart("style="); </script>';
1963
-
1964
- echo '</div>';
1965
-
1966
- echo $after_widget;
1967
- }
1968
-
1969
- function update($new_instance, $old_instance){
1970
- $instance = $old_instance;
1971
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1972
-
1973
- return $instance;
1974
- }
1975
-
1976
- function form($instance){
1977
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1978
-
1979
- $title = htmlspecialchars($instance['title']);
1980
-
1981
- echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
1982
- }
1983
-
1984
- }
1985
-
1986
- class EcwidMinicartMiniViewWidget extends WP_Widget {
1987
-
1988
- function EcwidMinicartMiniViewWidget() {
1989
- $widget_ops = array('classname' => 'widget_ecwid_minicart_miniview', 'description' => __("Your store's minicart", 'ecwid-shopping-cart') );
1990
- $this->WP_Widget('ecwidminicart_miniview', __('Ecwid Shopping Bag (Mini view)', 'ecwid-shopping-cart'), $widget_ops);
1991
- }
1992
-
1993
- function widget($args, $instance) {
1994
- extract($args);
1995
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1996
-
1997
- echo $before_widget;
1998
-
1999
- if ( $title )
2000
- echo $before_title . $title . $after_title;
2001
-
2002
-
2003
- echo '<div>';
2004
-
2005
- echo ecwid_get_scriptjs_code();
2006
- echo ecwid_get_product_browser_url_script();
2007
- echo '<script data-cfasync="false" type="text/javascript"> xMinicart("style=left:10px","layout=Mini"); </script>';
2008
-
2009
- echo '</div>';
2010
-
2011
- echo $after_widget;
2012
- }
2013
-
2014
- function update($new_instance, $old_instance){
2015
- $instance = $old_instance;
2016
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2017
-
2018
- return $instance;
2019
- }
2020
-
2021
- function form($instance){
2022
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
2023
-
2024
- $title = htmlspecialchars($instance['title']);
2025
-
2026
- echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2027
- }
2028
-
2029
- }
2030
-
2031
-
2032
- class EcwidSearchWidget extends WP_Widget {
2033
-
2034
- function EcwidSearchWidget() {
2035
- $widget_ops = array('classname' => 'widget_ecwid_search', 'description' => __("Your store's search box", 'ecwid-shopping-cart'));
2036
- $this->WP_Widget('ecwidsearch', __('Ecwid Search Box', 'ecwid-shopping-cart'), $widget_ops);
2037
- }
2038
-
2039
- function widget($args, $instance) {
2040
- extract($args);
2041
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2042
-
2043
- echo $before_widget;
2044
-
2045
- if ( $title )
2046
- echo $before_title . $title . $after_title;
2047
-
2048
- echo '<div>';
2049
-
2050
- echo ecwid_get_scriptjs_code();
2051
- echo ecwid_get_product_browser_url_script();
2052
- echo '<script data-cfasync="false" type="text/javascript"> xSearchPanel("style="); </script>';
2053
-
2054
- echo '</div>';
2055
-
2056
- echo $after_widget;
2057
- }
2058
-
2059
- function update($new_instance, $old_instance){
2060
- $instance = $old_instance;
2061
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2062
-
2063
- return $instance;
2064
- }
2065
-
2066
- function form($instance){
2067
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
2068
-
2069
- $title = htmlspecialchars($instance['title']);
2070
-
2071
- echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2072
- }
2073
-
2074
- }
2075
-
2076
- class EcwidVCategoriesWidget extends WP_Widget {
2077
-
2078
- function EcwidVCategoriesWidget() {
2079
- $widget_ops = array('classname' => 'widget_ecwid_vcategories', 'description' => __('Vertical menu of categories', 'ecwid-shopping-cart'));
2080
- $this->WP_Widget('ecwidvcategories', __('Ecwid Vertical Categories', 'ecwid-shopping-cart'), $widget_ops);
2081
- }
2082
-
2083
- function widget($args, $instance) {
2084
- extract($args);
2085
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2086
-
2087
- echo $before_widget;
2088
-
2089
- if ( $title )
2090
- echo $before_title . $title . $after_title;
2091
-
2092
- echo '<div>';
2093
-
2094
- echo ecwid_get_scriptjs_code();
2095
- echo ecwid_get_product_browser_url_script();
2096
- echo '<script data-cfasync="false" type="text/javascript"> xVCategories("style="); </script>';
2097
-
2098
- echo '</div>';
2099
-
2100
- echo $after_widget;
2101
- }
2102
-
2103
- function update($new_instance, $old_instance){
2104
- $instance = $old_instance;
2105
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2106
-
2107
- return $instance;
2108
- }
2109
-
2110
- function form($instance){
2111
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
2112
-
2113
- $title = htmlspecialchars($instance['title']);
2114
-
2115
- echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2116
- }
2117
-
2118
- }
2119
-
2120
- class EcwidStoreLinkWidget extends WP_Widget {
2121
-
2122
- function EcwidStoreLinkWidget() {
2123
- $widget_ops = array('classname' => 'widget_ecwid_store_link', 'description' => __('A link to your store page', 'ecwid-shopping-cart'));
2124
- $this->WP_Widget('ecwidstorelink', __('Ecwid Store Page Link', 'ecwid-shopping-cart'), $widget_ops);
2125
- }
2126
-
2127
- function widget($args, $instance) {
2128
- extract($args);
2129
- echo $before_widget;
2130
-
2131
- echo '<div>';
2132
-
2133
- echo '<a href="' . ecwid_get_store_page_url() . '">' . $instance['label'] . '</a>';
2134
- echo '</div>';
2135
-
2136
- echo $after_widget;
2137
- }
2138
-
2139
- function update($new_instance, $old_instance){
2140
- $instance = $old_instance;
2141
- $instance['label'] = strip_tags(stripslashes($new_instance['label']));
2142
-
2143
- return $instance;
2144
- }
2145
-
2146
- function form($instance){
2147
- $instance = wp_parse_args( (array) $instance, array( 'label' => __('Shop', 'ecwid-shopping-cart') ) );
2148
-
2149
- $label = htmlspecialchars($instance['label']);
2150
-
2151
- echo '<p><label for="' . $this->get_field_name('label') . '">' . __('Text') . ': <input style="width:100%;" id="' . $this->get_field_id('label') . '" name="' . $this->get_field_name('label') . '" type="text" value="' . $label . '" /></label></p>';
2152
- }
2153
-
2154
- }
2155
-
2156
- class EcwidRecentlyViewedWidget extends WP_Widget {
2157
-
2158
- var $max = 10;
2159
- var $min = 1;
2160
- var $default = 3;
2161
- function EcwidRecentlyViewedWidget() {
2162
- $widget_ops = array('classname' => 'widget_ecwid_recently_viewed', 'description' => __('A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop.', 'ecwid-shopping-cart'));
2163
- $this->WP_Widget('ecwidrecentlyviewed', __('Recently Viewed Products', 'ecwid-shopping-cart'), $widget_ops);
2164
- $recently_viewed = json_decode(stripslashes(@$_COOKIE['ecwid-shopping-cart-recently-viewed']));
2165
-
2166
- if ($recently_viewed && $recently_viewed->store_id != get_ecwid_store_id()) {
2167
- setcookie('ecwid-shopping-cart-recently-viewed', null, strftime('-1 day'));
2168
- }
2169
- }
2170
-
2171
- function widget($args, $instance) {
2172
-
2173
- wp_enqueue_script('ecwid-recently-viewed-js', plugins_url('ecwid-shopping-cart/js/recently-viewed.js'), array('jquery', 'utils', 'ecwid-products-list-js'), get_option('ecwid_plugin_version'));
2174
- wp_enqueue_style('ecwid-products-list-css');
2175
- wp_enqueue_style('ecwid-recently-viewed-css', plugins_url('ecwid-shopping-cart/css/recently-viewed.css'), array(), get_option('ecwid_plugin_version'));
2176
- extract($args);
2177
-
2178
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2179
-
2180
- echo $before_widget;
2181
-
2182
- if ( $title )
2183
- echo $before_title . $title . $after_title;
2184
-
2185
- echo ecwid_get_scriptjs_code();
2186
-
2187
- $recently_viewed = false;
2188
- if (isset($_COOKIE['ecwid-shopping-cart-recently-viewed'])) {
2189
- $recently_viewed = json_decode($_COOKIE['ecwid-shopping-cart-recently-viewed']);
2190
- }
2191
- $recently_viewed = json_decode(stripslashes($_COOKIE['ecwid-shopping-cart-recently-viewed']));
2192
-
2193
- if ($recently_viewed && $recently_viewed->store_id != get_ecwid_store_id()) {
2194
- $recently_viewed = null;
2195
- }
2196
-
2197
- echo '<div class="ecwid-recently-viewed-products" data-ecwid-max="' . $instance['number_of_products'] . '">';
2198
-
2199
-
2200
- $api = false;
2201
- if (ecwid_is_api_enabled()) {
2202
- $api = ecwid_new_product_api();
2203
- }
2204
-
2205
- $ids = array();
2206
- if ($recently_viewed && isset($recently_viewed->products)) {
2207
-
2208
- for ($i = count($recently_viewed->products) - 1; $i >= 0; $i--) {
2209
- $product = $recently_viewed->products[$i];
2210
-
2211
- $counter++;
2212
- if (isset($product->id) && isset($product->link)) {
2213
- $ids[] = $product->id;
2214
- $hide = $counter > $instance['number_of_products'] ? ' hidden' : '';
2215
-
2216
- if ($api) {
2217
- $product_https = $api->get_product_https($product->id);
2218
- }
2219
-
2220
- echo <<<HTML
2221
- <a class="product$hide" href="$product->link" alt="$product->name" title="$product->name">
2222
- <div class="ecwid ecwid-SingleProduct ecwid-Product ecwid-Product-$product->id" data-single-product-link="$product->link" itemscope itemtype="http://schema.org/Product" data-single-product-id="$product->id">
2223
- <div itemprop="image" data-force-image="$product_https[imageUrl]"></div>
2224
- <div class="ecwid-title" itemprop="name"></div>
2225
- <div itemtype="http://schema.org/Offer" itemscope itemprop="offers"><div class="ecwid-productBrowser-price ecwid-price" itemprop="price"></div></div>
2226
- </div>
2227
- <script type="text/javascript">xSingleProduct();</script>
2228
- </a>
2229
- HTML;
2230
- }
2231
- }
2232
- } else {
2233
- echo <<<HTML
2234
- <script type="text/javascript">
2235
- jQuery(document).ready(function() {
2236
- wpCookies.remove('ecwid-shopping-cart-recently-viewed');
2237
- recently_viewed = {products: []};
2238
- });
2239
- </script>
2240
- HTML;
2241
- }
2242
- $ids_string = '';
2243
- if (!empty($ids)) {
2244
- $ids_string = implode(',', $ids);
2245
- }
2246
-
2247
- echo <<<HTML
2248
- <script type="text/javascript">
2249
- <!--
2250
- jQuery(document).ready(function() {
2251
- jQuery('#$this->id .ecwid-recently-viewed-products').recentlyViewedProducts();
2252
- });
2253
- -->
2254
- </script>
2255
- HTML;
2256
-
2257
- echo "</div>";
2258
-
2259
- $store_link_message = empty($instance['store_link_title']) ? __('You have not viewed any product yet. Open store.', 'ecwid-shopping-cart') : $instance['store_link_title'];
2260
-
2261
- $page_id = ecwid_get_current_store_page_id();
2262
- $post = get_post($page_id);
2263
-
2264
- if (empty($recently_viewed->products)) {
2265
- echo '<a class="show-if-empty" href="' . ecwid_get_store_page_url() . '">' . $store_link_message . '</a>';
2266
- }
2267
-
2268
- echo $after_widget;
2269
- }
2270
-
2271
- function update($new_instance, $old_instance){
2272
- $instance = $old_instance;
2273
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2274
- $instance['store_link_title'] = strip_tags(stripslashes($new_instance['store_link_title']));
2275
- $num = intval($new_instance['number_of_products']);
2276
- if ($num > $this->max || $num < $this->min) {
2277
- $num = $this->default;
2278
- }
2279
- $instance['number_of_products'] = intval($new_instance['number_of_products']);
2280
-
2281
- return $instance;
2282
- }
2283
-
2284
- function form($instance){
2285
-
2286
- $instance = wp_parse_args( (array) $instance,
2287
- array(
2288
- 'title' => __('Recently Viewed Products', 'ecwid-shopping-cart'),
2289
- 'store_link_title' => __('You have not viewed any product yet. Open store.', 'ecwid-shopping-cart'),
2290
- 'number_of_products' => 3
2291
- )
2292
- );
2293
-
2294
- $title = htmlspecialchars($instance['title']);
2295
- $store_link_title = htmlspecialchars($instance['store_link_title']);
2296
- $number_of_products = $instance['number_of_products'];
2297
- if ($number_of_products)
2298
-
2299
- echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title') . ': <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2300
- echo '<p><label for="' . $this->get_field_name('store_link_title') . '">' . __('Store Link Title', 'ecwid-shopping-cart') . ': <input style="width:100%;" id="' . $this->get_field_id('store_link_title') . '" name="' . $this->get_field_name('store_link_title') . '" type="text" value="' . $store_link_title . '" /></label></p>';
2301
- echo '<p><label for="' . $this->get_field_name('number_of_products') . '">' . __( 'Number of products to show', 'ecwid-shopping-cart' ) . ': <input style="width:100%;" id="' . $this->get_field_id('number_of_products') . '" name="' . $this->get_field_name('number_of_products') . '" type="number" min="' . $this->min . '" max="' . $this->max . '" value="' . $number_of_products . '" /></label></p>';
2302
- }
2303
-
2304
- function is_valid_number_of_products($num) {
2305
- return is_numeric($num) && $num <= $this->max && $num >= $this->min;
2306
- }
2307
- }
2308
-
2309
-
2310
- function ecwid_send_stats()
2311
- {
2312
- $storeid = get_ecwid_store_id();
2313
-
2314
- if ($storeid == ECWID_DEMO_STORE_ID) return;
2315
-
2316
- $last_stats_sent = get_option('ecwid_stats_sent_date');
2317
- if (!$last_stats_sent) {
2318
- add_option('ecwid_stats_sent_date', time());
2319
- } else if ($last_stats_sent + 24*60*60 > time()) {
2320
- return;
2321
- }
2322
-
2323
- $stats = ecwid_gather_stats();
2324
-
2325
- $url = 'http://' . APP_ECWID_COM . '/script.js?' . $storeid . '&data_platform=wporg';
2326
-
2327
- foreach ($stats as $name => $value) {
2328
- $url .= '&data_wporg_' . $name . '=' . urlencode($value);
2329
- }
2330
-
2331
- $link = '';
2332
- if (ecwid_is_store_page_available()) {
2333
- $link = ecwid_get_store_page_url();
2334
- } else {
2335
- $link = get_bloginfo('url');
2336
- }
2337
-
2338
- wp_remote_get($url, array('headers' => array('Referer' => $link)));
2339
-
2340
- update_option('ecwid_stats_sent_date', time());
2341
- }
2342
-
2343
- function ecwid_gather_stats()
2344
- {
2345
- $usage_version = 1;
2346
-
2347
- $stats = array();
2348
-
2349
- $stats['version'] = get_bloginfo('version');
2350
- $stats['theme'] = ecwid_get_theme_identification();
2351
-
2352
- include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
2353
-
2354
- $usage_params = array(
2355
- 'paid',
2356
- 'display_search',
2357
- 'horizontal_categories_enabled',
2358
- 'minicart_enabled',
2359
- 'search_widget',
2360
- 'vcategories_widget',
2361
- 'minicart_normal_widget',
2362
- 'minicart_mini_widget',
2363
- 'badge_widget',
2364
- 'sso_enabled',
2365
- 'default_category',
2366
- 'google_xml_sitemaps_used',
2367
- 'ecwid_product_advisor_used',
2368
- 'ecwid_single_product_used',
2369
- 'ecwid_store_shortcode_used',
2370
- 'store_link_widget',
2371
- 'recently_viewed_widget',
2372
- 'avalanche_used',
2373
- 'chameleon_used',
2374
- 'http_post_fails'
2375
- );
2376
-
2377
- $usage_stats = ecwid_gather_usage_stats();
2378
- $stats['usage'] = '';
2379
-
2380
- $usage = '';
2381
- foreach ($usage_params as $index => $item) {
2382
- $usage[$index] = (int)$usage_stats[$item];
2383
- }
2384
-
2385
- $stats['usage'] = $usage_version . '_' . implode('', $usage);
2386
-
2387
- return $stats;
2388
- }
2389
-
2390
- function ecwid_gather_usage_stats()
2391
- {
2392
- $usage_params = array(
2393
- 'paid',
2394
- 'display_search',
2395
- 'horizontal_categories_enabled',
2396
- 'minicart_enabled',
2397
- 'search_widget',
2398
- 'vcategories_widget',
2399
- 'minicart_normal_widget',
2400
- 'minicart_mini_widget',
2401
- 'badge_widget',
2402
- 'sso_enabled',
2403
- 'default_category',
2404
- 'google_xml_sitemaps_used',
2405
- 'ecwid_product_advisor_used',
2406
- 'ecwid_single_product_used',
2407
- 'ecwid_store_shortcode_used',
2408
- 'store_link_widget',
2409
- 'recently_viewed_widget',
2410
- 'avalanche_used',
2411
- 'chameleon_used',
2412
- 'http_post_fails'
2413
- );
2414
-
2415
- $usage_stats = array();
2416
- $usage_stats['paid'] = ecwid_is_paid_account();
2417
- $usage_stats['display_search'] = (bool) get_option('ecwid_show_search_box');
2418
- $usage_stats['horizontal_categories_enabled'] = (bool) get_option('ecwid_show_categories');
2419
- $usage_stats['minicart_enabled'] = (bool) get_option('ecwid_enable_minicart');
2420
- $usage_stats['search_widget'] = (bool) is_active_widget(false, false, 'ecwidsearch');
2421
- $usage_stats['vcategories_widget'] = (bool) is_active_widget(false, false, 'ecwidvcategories');
2422
- $usage_stats['minicart_normal_widget'] = (bool) is_active_widget(false, false, 'ecwidminicart');
2423
- $usage_stats['minicart_mini_widget'] = (bool) is_active_widget(false, false, 'ecwidminicart_miniview');
2424
- $usage_stats['badge_widget'] = (bool) is_active_widget(false, false, 'ecwidbadge');
2425
- $usage_stats['sso_enabled'] = (bool) get_option('ecwid_sso_secret_key');
2426
- $usage_stats['default_category'] = (bool) get_option('ecwid_default_category_id');
2427
- $usage_stats['google_xml_sitemaps_used'] = (bool) is_plugin_active('google-sitemap-generator/sitemap.php');
2428
- $usage_stats['ecwid_product_advisor_used'] = (bool) is_plugin_active('ecwid-useful-tools/ecwid-product-advisor.php');
2429
- $usage_stats['ecwid_single_product_used'] = (bool) (get_option('ecwid_single_product_used') + 60*60*24*14 > time());
2430
- $usage_stats['ecwid_store_shortcode_used'] = (bool) (get_option('ecwid_store_shortcode_used') + 60*60*24*14 > time());
2431
- $usage_stats['store_link_widget'] = (bool) is_active_widget(false, false, 'ecwidstorelink');
2432
- $usage_stats['recently_viewed_widget'] = (bool) is_active_widget(false, false, 'ecwidrecentlyviewed');
2433
- $usage_stats['avalanche_used'] = (bool) is_plugin_active('ecwid-widgets-avalanche/ecwid_widgets_avalanche.php');
2434
- $usage_stats['chameleon_used'] = (bool)get_option('ecwid_use_chameleon');
2435
- $usage_stats['http_post_fails'] = get_option('ecwid_last_oauth_fail_time') > 0;
2436
-
2437
- return $usage_stats;
2438
- }
2439
-
2440
- function ecwid_sidebar_widgets_init() {
2441
- register_widget('EcwidMinicartWidget');
2442
- register_widget('EcwidSearchWidget');
2443
- register_widget('EcwidVCategoriesWidget');
2444
- register_widget('EcwidMinicartMiniViewWidget');
2445
- register_widget('EcwidBadgeWidget');
2446
- register_widget('EcwidStoreLinkWidget');
2447
- register_widget('EcwidRecentlyViewedWidget');
2448
- }
2449
-
2450
- add_action('widgets_init', 'ecwid_sidebar_widgets_init');
2451
-
2452
- function ecwid_sso() {
2453
- $key = get_option('ecwid_sso_secret_key');
2454
- if (empty($key)) {
2455
- return "";
2456
- }
2457
-
2458
- global $current_user;
2459
- get_currentuserinfo();
2460
-
2461
- $signin_url = wp_login_url(ecwid_get_store_page_url());
2462
- $signout_url = wp_logout_url(ecwid_get_store_page_url());
2463
- $sign_in_out_urls = <<<JS
2464
- window.EcwidSignInUrl = '$signin_url';
2465
- window.EcwidSignOutUrl = '$signout_url';
2466
- window.Ecwid.OnAPILoaded.add(function() {
2467
-
2468
- window.Ecwid.setSignInUrls({
2469
- signInUrl: '$signin_url',
2470
- signOutUrl: '$signout_url'
2471
- });
2472
- });
2473
- JS;
2474
-
2475
- /*
2476
- $signin_url = wp_login_url("URL_TO_REDIRECT");
2477
- $signout_url = wp_logout_url('URL_TO_REDIRECT');
2478
- $sign_in_out_urls = <<<JS
2479
- window.EcwidSignInUrl = '$signin_url';
2480
- window.EcwidSignOutUrl = '$signout_url';
2481
- window.Ecwid.OnAPILoaded.add(function() {
2482
-
2483
- window.Ecwid.setSignInUrls({
2484
- signInUrl: '$signin_url',
2485
- signOutUrl: '$signout_url'
2486
- });
2487
-
2488
-
2489
- window.Ecwid.setSignInProvider({
2490
- addSignInLinkToPB: function() { return true; },
2491
- signIn: function() {
2492
- location.href = window.EcwidSignInUrl.replace('URL_TO_REDIRECT', encodeURIComponent(location.href));
2493
- },
2494
- signOut: function() {
2495
- location.href = window.EcwidSignOutUrl.replace('URL_TO_REDIRECT', encodeURIComponent(location.href));
2496
- },
2497
- canSignOut: true,
2498
- canSignIn: true
2499
- });
2500
-
2501
- });
2502
-
2503
-
2504
- JS;
2505
- */
2506
- $ecwid_sso_profile = '';
2507
- if ($current_user->ID) {
2508
- $meta = get_user_meta($current_user->ID);
2509
-
2510
-
2511
- $user_data = array(
2512
- 'appId' => "wp_" . get_ecwid_store_id(),
2513
- 'userId' => "{$current_user->ID}",
2514
- 'profile' => array(
2515
- 'email' => $current_user->user_email,
2516
- 'billingPerson' => array(
2517
- 'name' => $meta['first_name'][0] . ' ' . $meta['last_name'][0]
2518
- )
2519
- )
2520
- );
2521
- $user_data = base64_encode(json_encode($user_data));
2522
- $time = time();
2523
- $hmac = ecwid_hmacsha1("$user_data $time", $key);
2524
-
2525
- $ecwid_sso_profile ="$user_data $hmac $time";
2526
- }
2527
-
2528
- return <<<HTML
2529
- <script data-cfasync="false" type="text/javascript">
2530
-
2531
- var ecwid_sso_profile='$ecwid_sso_profile';
2532
- $sign_in_out_urls
2533
- </script>
2534
- HTML;
2535
- }
2536
-
2537
- // from: http://www.php.net/manual/en/function.sha1.php#39492
2538
-
2539
- function ecwid_hmacsha1($data, $key) {
2540
- if (function_exists("hash_hmac")) {
2541
- return hash_hmac('sha1', $data, $key);
2542
- } else {
2543
- $blocksize=64;
2544
- $hashfunc='sha1';
2545
- if (strlen($key)>$blocksize)
2546
- $key=pack('H*', $hashfunc($key));
2547
- $key=str_pad($key,$blocksize,chr(0x00));
2548
- $ipad=str_repeat(chr(0x36),$blocksize);
2549
- $opad=str_repeat(chr(0x5c),$blocksize);
2550
- $hmac = pack(
2551
- 'H*',$hashfunc(
2552
- ($key^$opad).pack(
2553
- 'H*',$hashfunc(
2554
- ($key^$ipad).$data
2555
- )
2556
- )
2557
- )
2558
- );
2559
- return bin2hex($hmac);
2560
- }
2561
- }
2562
-
2563
- function ecwid_can_display_html_catalog()
2564
- {
2565
- if (!isset($_GET['_escaped_fragment_'])) return;
2566
-
2567
- $api = ecwid_new_product_api();
2568
- if (!$api) return;
2569
-
2570
- $profile = $api->get_profile();
2571
- if (!$profile) return;
2572
- return $profile['closed'] != true;
2573
- }
2574
-
2575
- function ecwid_is_paid_account()
2576
- {
2577
- return ecwid_is_api_enabled() && get_ecwid_store_id() != ECWID_DEMO_STORE_ID;
2578
- }
2579
-
2580
- function ecwid_is_api_enabled()
2581
- {
2582
- $ecwid_is_api_enabled = get_option('ecwid_is_api_enabled');
2583
- $ecwid_api_check_time = get_option('ecwid_api_check_time');
2584
- $now = time();
2585
-
2586
- if ( $now > ($ecwid_api_check_time + 60 * 60 * 3) && get_ecwid_store_id() != ECWID_DEMO_STORE_ID ) {
2587
- // check whether API is available once in 3 hours
2588
- $ecwid = ecwid_new_product_api();
2589
-
2590
- $ecwid_is_api_enabled = ($ecwid->is_api_enabled() ? 'on' : 'off');
2591
-
2592
- update_option('ecwid_is_api_enabled', $ecwid_is_api_enabled);
2593
- update_option('ecwid_api_check_time', $now);
2594
- }
2595
-
2596
- if ('on' == $ecwid_is_api_enabled)
2597
- return true;
2598
- else
2599
- return false;
2600
- }
2601
-
2602
- function ecwid_new_product_api()
2603
- {
2604
- include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
2605
- $ecwid_store_id = intval(get_ecwid_store_id());
2606
- $api = new EcwidProductApi($ecwid_store_id);
2607
-
2608
- return $api;
2609
- }
2610
-
2611
- function ecwid_embed_svg($name) {
2612
- $code = file_get_contents(ECWID_PLUGIN_DIR . '/images/' . $name . '.svg');
2613
-
2614
- echo $code;
2615
- }
2616
-
2617
- /*
2618
- * Basically a copy of has_shortcode that returns the matched shortcode
2619
- */
2620
- function ecwid_find_shortcodes( $content, $tag ) {
2621
-
2622
- if ( false === strpos( $content, '[' ) ) {
2623
- return false;
2624
- }
2625
-
2626
- if ( shortcode_exists( $tag ) ) {
2627
- preg_match_all( '/' . ecwid_get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
2628
- if ( empty( $matches ) )
2629
- return false;
2630
-
2631
- $result = array();
2632
- foreach ( $matches as $shortcode ) {
2633
- if ( $tag === $shortcode[2] ) {
2634
- $result[] = $shortcode;
2635
- } elseif ( !empty($shortcode[5]) && $found = ecwid_find_shortcodes( $shortcode[5], $tag ) ) {
2636
- $result[] = $found;
2637
- }
2638
- }
2639
-
2640
- if (empty($result)) {
2641
- $result = false;
2642
- }
2643
- return $result;
2644
- }
2645
- return false;
2646
- }
2647
-
2648
- // Since we use shortcode regex in our own functions, we need it to be persistent
2649
- function ecwid_get_shortcode_regex() {
2650
- global $shortcode_tags;
2651
- $tagnames = array_keys($shortcode_tags);
2652
- $tagregexp = join( '|', array_map('preg_quote', $tagnames) );
2653
-
2654
- // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
2655
- // Also, see shortcode_unautop() and shortcode.js.
2656
- return
2657
- '\\[' // Opening bracket
2658
- . '(\\[?)' // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
2659
- . "($tagregexp)" // 2: Shortcode name
2660
- . '(?![\\w-])' // Not followed by word character or hyphen
2661
- . '(' // 3: Unroll the loop: Inside the opening shortcode tag
2662
- . '[^\\]\\/]*' // Not a closing bracket or forward slash
2663
- . '(?:'
2664
- . '\\/(?!\\])' // A forward slash not followed by a closing bracket
2665
- . '[^\\]\\/]*' // Not a closing bracket or forward slash
2666
- . ')*?'
2667
- . ')'
2668
- . '(?:'
2669
- . '(\\/)' // 4: Self closing tag ...
2670
- . '\\]' // ... and closing bracket
2671
- . '|'
2672
- . '\\]' // Closing bracket
2673
- . '(?:'
2674
- . '(' // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
2675
- . '[^\\[]*+' // Not an opening bracket
2676
- . '(?:'
2677
- . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
2678
- . '[^\\[]*+' // Not an opening bracket
2679
- . ')*+'
2680
- . ')'
2681
- . '\\[\\/\\2\\]' // Closing shortcode tag
2682
- . ')?'
2683
- . ')'
2684
- . '(\\]?)'; // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
2685
- }
2686
-
2687
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Ecwid Shopping Cart
4
+ Plugin URI: http://www.ecwid.com?source=wporg
5
+ Description: Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up.
6
+ Text Domain: ecwid-shopping-cart
7
+ Author: Ecwid Team
8
+ Version: 3.4
9
+ Author URI: http://www.ecwid.com?source=wporg
10
+ */
11
+
12
+ register_activation_hook( __FILE__, 'ecwid_store_activate' );
13
+ register_deactivation_hook( __FILE__, 'ecwid_store_deactivate' );
14
+ register_uninstall_hook( __FILE__, 'ecwid_uninstall' );
15
+
16
+
17
+ define("APP_ECWID_COM", 'app.ecwid.com');
18
+ define("ECWID_DEMO_STORE_ID", 1003);
19
+
20
+
21
+ if ( ! defined( 'ECWID_PLUGIN_DIR' ) ) {
22
+ define( 'ECWID_PLUGIN_DIR', plugin_dir_path( realpath(__FILE__) ) );
23
+ }
24
+
25
+ if ( ! defined( 'ECWID_PLUGIN_URL' ) ) {
26
+ define( 'ECWID_PLUGIN_URL', plugin_dir_url( realpath(__FILE__) ) );
27
+ }
28
+
29
+
30
+ // Older versions of Google XML Sitemaps plugin generate it in admin, newer in site area, so the hook should be assigned in both of them
31
+ add_action('sm_buildmap', 'ecwid_build_google_xml_sitemap');
32
+
33
+ // Needs to be in both front-end and back-end to allow admin zone recognize the shortcode
34
+ add_shortcode('ecwid_productbrowser', 'ecwid_productbrowser_shortcode');
35
+ add_shortcode('ecwid', 'ecwid_shortcode');
36
+
37
+ add_action( 'plugins_loaded', 'ecwid_init_integrations' );
38
+ add_filter('plugins_loaded', 'ecwid_load_textdomain');
39
+
40
+ if ( is_admin() ){
41
+ add_action('admin_init', 'ecwid_settings_api_init');
42
+ add_action('admin_init', 'ecwid_check_version');
43
+ add_action('admin_notices', 'ecwid_show_admin_messages');
44
+ add_action('admin_menu', 'ecwid_options_add_page');
45
+ add_action('wp_dashboard_setup', 'ecwid_add_dashboard_widgets' );
46
+ add_action('admin_enqueue_scripts', 'ecwid_common_admin_scripts');
47
+ add_action('admin_enqueue_scripts', 'ecwid_register_admin_styles');
48
+ add_action('admin_enqueue_scripts', 'ecwid_register_settings_styles');
49
+ add_action('wp_ajax_ecwid_hide_vote_message', 'ecwid_hide_vote_message');
50
+ add_action('wp_ajax_ecwid_hide_message', 'ecwid_ajax_hide_message');
51
+ add_filter('plugin_action_links_ecwid-shopping-cart/ecwid-shopping-cart.php', 'ecwid_plugin_actions');
52
+ add_action('admin_head', 'ecwid_ie8_fonts_inclusion');
53
+ add_action('admin_head', 'ecwid_send_stats');
54
+ add_action('save_post', 'ecwid_save_post');
55
+ add_action('init', 'ecwid_apply_theme');
56
+ add_action('get_footer', 'ecwid_admin_get_footer');
57
+ add_action('admin_post_ecwid_connect', 'ecwid_admin_post_connect');
58
+ } else {
59
+ add_shortcode('ecwid_script', 'ecwid_script_shortcode');
60
+ add_shortcode('ecwid_minicart', 'ecwid_minicart_shortcode');
61
+ add_shortcode('ecwid_searchbox', 'ecwid_searchbox_shortcode');
62
+ add_shortcode('ecwid_categories', 'ecwid_categories_shortcode');
63
+ add_shortcode('ecwid_product', 'ecwid_product_shortcode');
64
+ add_action('init', 'ecwid_backward_compatibility');
65
+ add_action('send_headers', 'ecwid_503_on_store_closed');
66
+ add_action('template_redirect', 'ecwid_404_on_broken_escaped_fragment');
67
+ add_action('template_redirect', 'ecwid_apply_theme');
68
+ add_action('wp_enqueue_scripts', 'ecwid_add_frontend_styles');
69
+ add_action('wp', 'ecwid_seo_ultimate_compatibility', 0);
70
+ add_action('wp', 'ecwid_remove_default_canonical');
71
+ add_filter('wp', 'ecwid_seo_compatibility_init', 0);
72
+ add_filter('wp_title', 'ecwid_seo_title', 20);
73
+ add_action('plugins_loaded', 'ecwid_minifier_compatibility', 0);
74
+ add_action('wp_head', 'ecwid_meta_description', 0);
75
+ add_action('wp_head', 'ecwid_ajax_crawling_fragment');
76
+ add_action('wp_head', 'ecwid_meta');
77
+ add_action('wp_head', 'ecwid_canonical');
78
+ add_action('wp_head', 'ecwid_seo_compatibility_restore', 1000);
79
+ add_action('wp_head', 'ecwid_send_stats');
80
+ add_filter( 'widget_meta_poweredby', 'ecwid_add_credits');
81
+ add_filter('the_content', 'ecwid_content_started', 0);
82
+ add_filter('body_class', 'ecwid_body_class');
83
+ $ecwid_seo_title = '';
84
+ }
85
+ add_action('admin_bar_menu', 'add_ecwid_admin_bar_node', 1000);
86
+ if (get_option('ecwid_last_oauth_fail_time') > 0) {
87
+ add_action('plugins_loaded', 'ecwid_test_oauth');
88
+ }
89
+
90
+ $ecwid_script_rendered = false; // controls single script.js on page
91
+
92
+ require_once ECWID_PLUGIN_DIR . '/includes/themes.php';
93
+ require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-message-manager.php';
94
+ require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-store-editor.php';
95
+ require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-oauth.php';
96
+
97
+ function ecwid_init_integrations()
98
+ {
99
+ if ( !function_exists( 'get_plugins' ) ) { require_once ( ABSPATH . 'wp-admin/includes/plugin.php' ); }
100
+
101
+ $integrations = array(
102
+ 'aiosp' => 'all-in-one-seo-pack/all_in_one_seo_pack.php',
103
+ 'wpseo' => 'wordpress-seo/wp-seo.php'
104
+ );
105
+
106
+ foreach ($integrations as $key => $plugin) {
107
+ if ( is_plugin_active($plugin) ) {
108
+ require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-integration-' . $key . '.php';
109
+ }
110
+ }
111
+ }
112
+
113
+ $version = get_bloginfo('version');
114
+
115
+ function ecwid_add_breadcrumbs_navxt($trail)
116
+ {
117
+ $breadcrumb = new bcn_breadcrumb('Ecwid', '', '', 'http://ecwid.com');
118
+ $trail->add($breadcrumb);
119
+ }
120
+
121
+ /*
122
+ add_filter('wpseo_sitemap_index', 'ecwid_wpseo_do_sitemap_index');
123
+
124
+ function ecwid_wpseo_do_sitemap_index($params)
125
+ {
126
+ $now = date('Y-m-dTH:i:sP', time());
127
+ $sitemap_url = wpseo_xml_sitemaps_base_url('ecwid-sitemap.xml');
128
+ return <<<XML
129
+ <sitemap>
130
+ <loc>$sitemap_url</loc>
131
+ <lastmod>$now</lastmod>
132
+ </sitemap>
133
+ XML;
134
+
135
+ // should return index string
136
+ }
137
+
138
+ add_action('wpseo_do_sitemap_ecwid', 'ecwid_wpseo_do_sitemap');
139
+
140
+ add_action('wpseo_do_sitemap_ecwid_content', 'ecwid_wpseo_do_sitemap');
141
+
142
+ function ecwid_wpseo_build_sitemap_callback($loc, $priority, $freq)
143
+ {
144
+ global $ecwid_wpseo_sitemap;
145
+
146
+ $ecwid_wpseo_sitemap .= <<<XML
147
+ <url>
148
+ <loc>$loc</loc>
149
+ <changefreq>$freq</changefreq>
150
+ <priority>$priority</priority>
151
+ </url>
152
+
153
+ XML;
154
+ }
155
+
156
+
157
+ function ecwid_wpseo_do_sitemap($params)
158
+ {
159
+ global $ecwid_wpseo_sitemap;
160
+
161
+ $ecwid_wpseo_sitemap = <<<XML
162
+ <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
163
+ XML;
164
+
165
+ ecwid_build_sitemap('ecwid_wpseo_build_sitemap_callback');
166
+
167
+ $ecwid_wpseo_sitemap .= '</urlset>';
168
+ $GLOBALS['wpseo_sitemaps']->set_sitemap($ecwid_wpseo_sitemap);
169
+ }
170
+ */
171
+ function ecwid_add_breadcrumb_links_wpseo($links)
172
+ {
173
+ return array_merge((array)$links, array(
174
+ array(
175
+ 'text' => 'ecwid.com',
176
+ 'url' => 'http://ecwid.com'
177
+ )
178
+ ));
179
+ }
180
+ if (version_compare($version, '3.6') < 0) {
181
+ /**
182
+ * A copy of has_shortcode functionality from wordpress 3.6
183
+ * http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/shortcodes.php
184
+ */
185
+
186
+ if (!function_exists('shortcode_exists')) {
187
+ function shortcode_exists( $tag ) {
188
+ global $shortcode_tags;
189
+ return array_key_exists( $tag, $shortcode_tags );
190
+ }
191
+ }
192
+
193
+ if (!function_exists('has_shortcode')) {
194
+ function has_shortcode( $content, $tag ) {
195
+ if ( false === strpos( $content, '[' ) ) {
196
+ return false;
197
+ }
198
+
199
+ if ( shortcode_exists( $tag ) ) {
200
+ preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
201
+ if ( empty( $matches ) )
202
+ return false;
203
+
204
+ foreach ( $matches as $shortcode ) {
205
+ if ( $tag === $shortcode[2] ) {
206
+ return true;
207
+ } elseif ( ! empty( $shortcode[5] ) && has_shortcode( $shortcode[5], $tag ) ) {
208
+ return true;
209
+ }
210
+ }
211
+ }
212
+ return false;
213
+ }
214
+ }
215
+ }
216
+
217
+ if (is_admin()) {
218
+ $main_button_class = "";
219
+ if (version_compare($version, '3.8-beta') > 0) {
220
+ $main_button_class = "button-primary";
221
+ } else {
222
+ $main_button_class = "pure-button pure-button-primary";
223
+ }
224
+
225
+ define('ECWID_MAIN_BUTTON_CLASS', $main_button_class);
226
+ }
227
+
228
+ function ecwid_body_class($classes)
229
+ {
230
+ if (ecwid_page_has_productbrowser()) {
231
+ $classes[] = 'ecwid-shopping-cart';
232
+ }
233
+
234
+ return $classes;
235
+ }
236
+
237
+ function ecwid_ie8_fonts_inclusion()
238
+ {
239
+ if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 8') === false) return;
240
+
241
+ $url = ECWID_PLUGIN_URL . '/fonts/ecwid-logo.eot';
242
+ echo <<<HTML
243
+ <style>
244
+ @font-face {
245
+ font-family: 'ecwid-logo';
246
+ src:url($url);
247
+ }
248
+ </style>
249
+ HTML;
250
+
251
+ }
252
+
253
+ add_action('wp_ajax_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
254
+ add_action('wp_ajax_nopriv_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
255
+
256
+
257
+ function ecwid_add_frontend_styles() {
258
+ wp_register_script('ecwid-products-list-js', plugins_url('ecwid-shopping-cart/js/products-list.js'), array('jquery-ui-widget'));
259
+ wp_register_style('ecwid-products-list-css', plugins_url('ecwid-shopping-cart/css/products-list.css'), array(), get_option('ecwid_plugin_version'));
260
+ wp_enqueue_style('ecwid-css', plugins_url('ecwid-shopping-cart/css/frontend.css'),array(), get_option('ecwid_plugin_version'));
261
+
262
+ if ((bool)get_option('ecwid_use_chameleon')) {
263
+ wp_enqueue_script('ecwid-chameleon-js', 'https://dj925myfyz5v.cloudfront.net/widgets/chameleon/v1/ecwid-chameleon.js', array(), get_option('ecwid_plugin_version'), true);
264
+
265
+ $primary = get_option('ecwid_chameleon_primary');
266
+ $background = get_option('ecwid_chameleon_background');
267
+ $links = get_option('ecwid_chameleon_links');
268
+
269
+ $localize = array();
270
+
271
+ if (get_option('ecwid_chameleon_primary')) {
272
+ $localize['primary_color'] = get_option('ecwid_chameleon_primary');
273
+ }
274
+ if (get_option('ecwid_chameleon_background')) {
275
+ $localize['primary_background'] = get_option('ecwid_chameleon_background');
276
+ }
277
+ if (get_option('ecwid_chameleon_links')) {
278
+ $localize['primary_link'] = get_option('ecwid_chameleon_links');
279
+ }
280
+
281
+ if (!empty($localize)) {
282
+ wp_localize_script('ecwid-chameleon-js', 'ecwidChameleon', $localize);
283
+ }
284
+
285
+ }
286
+
287
+ if (is_active_widget(false, false, 'ecwidrecentlyviewed')) {
288
+ wp_enqueue_script('ecwid-recently-viewed', plugins_url('ecwid-shopping-cart/js/recently-viewed-common.js'), array('jquery', 'utils'), get_option('ecwid_plugin_version'), true);
289
+
290
+ wp_localize_script(
291
+ 'ecwid-products-list-js',
292
+ 'wp_ecwid_products_list_vars',
293
+ array(
294
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
295
+ 'is_api_available' => ecwid_is_paid_account()
296
+ )
297
+ );
298
+ }
299
+ }
300
+
301
+ function ecwid_load_textdomain() {
302
+ load_plugin_textdomain( 'ecwid-shopping-cart', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
303
+
304
+ }
305
+
306
+ function ecwid_404_on_broken_escaped_fragment() {
307
+ if (!ecwid_is_api_enabled()) {
308
+ return;
309
+ }
310
+
311
+ if (!isset($_GET['_escaped_fragment_'])) {
312
+ return;
313
+ }
314
+
315
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
316
+ $api = ecwid_new_product_api();
317
+
318
+ if (isset($params['mode']) && !empty($params['mode']) && isset($params['id'])) {
319
+ $result = array();
320
+ if ($params['mode'] == 'product') {
321
+ $result = $api->get_product($params['id']);
322
+ } elseif ($params['mode'] == 'category') {
323
+ $result = $api->get_category($params['id']);
324
+ }
325
+ if (empty($result)) {
326
+ global $wp_query;
327
+
328
+ $wp_query->set_404();
329
+ }
330
+ }
331
+ }
332
+
333
+ function ecwid_503_on_store_closed() {
334
+ if (!ecwid_is_api_enabled()) {
335
+ return;
336
+ }
337
+
338
+ if (!isset($_GET['_escaped_fragment_'])) {
339
+ return;
340
+ }
341
+
342
+ $api = ecwid_new_product_api();
343
+ $profile = $api->get_profile();
344
+
345
+ if ($profile['closed']) {
346
+ header('HTTP/1.1 503 Service Temporarily Unavailable');
347
+ header('Status: 503 Service Temporarily Unavailable');
348
+ }
349
+ }
350
+
351
+ function ecwid_backward_compatibility() {
352
+ // Backward compatibility with 1.1.2 and earlier
353
+ if (isset($_GET['ecwid_product_id']) || isset($_GET['ecwid_category_id'])) {
354
+
355
+ if (isset($_GET['ecwid_product_id']))
356
+ $redirect = ecwid_get_product_url(intval($_GET['ecwid_product_id']));
357
+ elseif (isset($_GET['ecwid_category_id']))
358
+ $redirect = ecwid_get_category_url(intval($_GET['ecwid_category_id']));
359
+
360
+ wp_redirect($redirect, 301);
361
+ exit();
362
+ }
363
+ }
364
+
365
+
366
+ function ecwid_build_sitemap($callback)
367
+ {
368
+ if (!ecwid_is_paid_account() || !ecwid_is_store_page_available()) return;
369
+
370
+ $page_id = ecwid_get_current_store_page_id();
371
+
372
+ if (get_post_status($page_id) == 'publish') {
373
+ require_once ECWID_PLUGIN_DIR . '/includes/class-ecwid-sitemap-builder.php';
374
+
375
+ $sitemap = new EcwidSitemapBuilder(ecwid_get_store_page_url(), $callback, ecwid_new_product_api());
376
+
377
+ $sitemap->generate();
378
+ }
379
+ }
380
+
381
+ function ecwid_build_google_xml_sitemap()
382
+ {
383
+ return ecwid_build_sitemap('ecwid_google_xml_sitemap_build_sitemap_callback');
384
+ }
385
+
386
+ function ecwid_google_xml_sitemap_build_sitemap_callback($url, $priority, $frequency)
387
+ {
388
+ static $generatorObject = null;
389
+ if (is_null($generatorObject)) {
390
+ $generatorObject = GoogleSitemapGenerator::GetInstance(); //Please note the "&" sign!
391
+ }
392
+
393
+ if($generatorObject != null) {
394
+ $page = new GoogleSitemapGeneratorPage($url, $priority, $frequency);
395
+ $generatorObject->AddElement($page);
396
+ }
397
+ }
398
+
399
+ function ecwid_minifier_compatibility()
400
+ {
401
+ if ( !function_exists( 'get_plugins' ) ) { require_once ( ABSPATH . 'wp-admin/includes/plugin.php' ); }
402
+
403
+ $plugins = get_plugins();
404
+ $wp_minify_plugin = 'wp-minify/wp-minify.php';
405
+ if (array_key_exists($wp_minify_plugin, $plugins) && is_plugin_active($wp_minify_plugin)) {
406
+ global $wp_minify;
407
+
408
+ if (is_object($wp_minify) && array_key_exists('default_exclude', get_object_vars($wp_minify)) && is_array($wp_minify->default_exclude)) {
409
+ $wp_minify->default_exclude[] = 'ecwid.com/script.js';
410
+ }
411
+ }
412
+ }
413
+
414
+ function ecwid_check_version()
415
+ {
416
+ $plugin_data = get_plugin_data(__FILE__);
417
+ $current_version = $plugin_data['Version'];
418
+ $stored_version = get_option('ecwid_plugin_version', null);
419
+
420
+
421
+ $migration_since_version = get_option('ecwid_plugin_migration_since_version', null);
422
+ if (is_null($migration_since_version)) {
423
+ update_option('ecwid_plugin_migration_since_version', $current_version);
424
+ }
425
+
426
+ $fresh_install = !$stored_version;
427
+ $upgrade = $stored_version && version_compare($current_version, $stored_version) > 0;
428
+
429
+ if ($fresh_install) {
430
+
431
+ ecwid_plugin_add_oauth();
432
+ do_action('ecwid_plugin_installed', $current_version);
433
+ add_option('ecwid_plugin_version', $current_version);
434
+
435
+ update_option('ecwid_use_chameleon', true);
436
+
437
+ add_option('ecwid_use_new_horizontal_categories', 'Y');
438
+ } elseif ($upgrade) {
439
+
440
+ ecwid_plugin_add_oauth();
441
+ do_action('ecwid_plugin_upgraded', array( 'old' => $stored_version, 'new' => $current_version ) );
442
+ update_option('ecwid_plugin_version', $current_version);
443
+
444
+ add_option('ecwid_chameleon_primary', '');
445
+ add_option('ecwid_chameleon_background', '');
446
+ add_option('ecwid_chameleon_links', '');
447
+
448
+ add_option('ecwid_use_new_horizontal_categories', '');
449
+ }
450
+ }
451
+
452
+ function ecwid_migrations_is_original_plugin_version_older_than($version)
453
+ {
454
+ $migration_since_version = get_option('ecwid_plugin_migration_since_version', null);
455
+ return version_compare($migration_since_version, $version) < 0;
456
+ }
457
+
458
+ function ecwid_log_error($message)
459
+ {
460
+ $errors = get_option('ecwid_error_log');
461
+ if (!$errors) {
462
+ $errors = array();
463
+ } else {
464
+ $errors = json_decode($errors);
465
+ if (!is_array($errors)) {
466
+ $errors = array();
467
+ }
468
+ }
469
+
470
+ while (count($errors) > 10) {
471
+ array_shift($errors);
472
+ }
473
+
474
+ $errors[] = array(
475
+ 'message' => $message,
476
+ 'date' => strftime('%c')
477
+ );
478
+
479
+ update_option('ecwid_error_log', json_encode($errors));
480
+ }
481
+
482
+ function ecwid_get_last_logged_error()
483
+ {
484
+
485
+
486
+ return '';
487
+ }
488
+
489
+ function ecwid_plugin_add_oauth()
490
+ {
491
+ add_option('ecwid_oauth_client_id', 'RD4o2KQimiGUrFZc');
492
+ add_option('ecwid_oauth_client_secret', 'jEPVdcA3KbzKVrG8FZDgNnsY3wKHDTF8');
493
+
494
+ update_option('ecwid_oauth_client_id', 'RD4o2KQimiGUrFZc');
495
+ update_option('ecwid_oauth_client_secret', 'jEPVdcA3KbzKVrG8FZDgNnsY3wKHDTF8');
496
+ }
497
+
498
+ function ecwid_override_option($name, $new_value = null)
499
+ {
500
+ static $overridden = array();
501
+
502
+ if (!array_key_exists($name, $overridden)) {
503
+ $overridden[$name] = get_option($name);
504
+ }
505
+
506
+ if (!is_null($new_value)) {
507
+ update_option($name, $new_value);
508
+ } else {
509
+ update_option($name, $overridden[$name]);
510
+ }
511
+ }
512
+
513
+ function ecwid_seo_ultimate_compatibility()
514
+ {
515
+ global $seo_ultimate;
516
+
517
+ if ($seo_ultimate && ecwid_page_has_productbrowser()) {
518
+ remove_action('template_redirect', array($seo_ultimate->modules['titles'], 'before_header'), 0);
519
+ remove_action('wp_head', array($seo_ultimate->modules['titles'], 'after_header'), 1000);
520
+ remove_action('su_head', array($seo_ultimate->modules['meta-descriptions'], 'head_tag_output'));
521
+ remove_action('su_head', array($seo_ultimate->modules['canonical'], 'link_rel_canonical_tag'));
522
+ remove_action('su_head', array($seo_ultimate->modules['canonical'], 'http_link_rel_canonical'));
523
+ }
524
+ }
525
+
526
+ function ecwid_remove_default_canonical()
527
+ {
528
+ if (array_key_exists('_escaped_fragment_', $_GET) && ecwid_page_has_productbrowser()) {
529
+ remove_action( 'wp_head','rel_canonical');
530
+ }
531
+ }
532
+
533
+ function ecwid_seo_compatibility_init($title)
534
+ {
535
+ if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
536
+ return $title;
537
+ }
538
+
539
+ // Platinum SEO Pack
540
+ // Canonical
541
+ ecwid_override_option('psp_canonical', false);
542
+ // Title
543
+ ecwid_override_option('aiosp_rewrite_titles', false);
544
+
545
+ return $title;
546
+
547
+ }
548
+
549
+ function ecwid_seo_compatibility_restore()
550
+ {
551
+ if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
552
+ return;
553
+ }
554
+
555
+ ecwid_override_option('psp_canonical');
556
+ ecwid_override_option('aiosp_rewrite_titles');
557
+ }
558
+
559
+ function add_ecwid_admin_bar_node() {
560
+ global $wp_admin_bar;
561
+ if ( !is_super_admin() || !is_admin_bar_showing() )
562
+ return;
563
+
564
+ $wp_admin_bar->add_menu( array(
565
+ 'id' => 'ecwid-main',
566
+ 'title' => '<span class="ab-icon ecwid-top-menu-item"></span>',
567
+ 'href' => 'admin.php?page=ecwid',
568
+ ));
569
+ $wp_admin_bar->add_menu(array(
570
+ "id" => "ecwid-help",
571
+ "title" => __("Get help", 'ecwid-shopping-cart'),
572
+ "parent" => "ecwid-main",
573
+ 'href' => 'http://help.ecwid.com'
574
+ )
575
+ );
576
+ $wp_admin_bar->add_menu(array(
577
+ "id" => "ecwid-home",
578
+ "title" => __("Go to Ecwid site", 'ecwid-shopping-cart'),
579
+ "parent" => "ecwid-main",
580
+ 'href' => 'http://www.ecwid.com?source=wporg'
581
+ )
582
+ );
583
+ $wp_admin_bar->add_menu(array(
584
+ "id" => "ecwid-go-to-page",
585
+ "title" => __("Visit storefront", 'ecwid-shopping-cart'),
586
+ "parent" => "ecwid-main",
587
+ 'href' => ecwid_get_store_page_url()
588
+ )
589
+ );
590
+ $wp_admin_bar->add_menu(array(
591
+ "id" => "ecwid-control-panel",
592
+ "title" => __("Manage my store", 'ecwid-shopping-cart'),
593
+ "parent" => "ecwid-main",
594
+ 'href' => 'https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard'
595
+ )
596
+ );
597
+ $wp_admin_bar->add_menu(array(
598
+ "id" => "ecwid-settings",
599
+ "title" => __("Manage plugin settings", 'ecwid-shopping-cart'),
600
+ "parent" => "ecwid-main",
601
+ 'href' => admin_url('admin.php?page=ecwid')
602
+ )
603
+ );
604
+ $wp_admin_bar->add_menu(array(
605
+ "id" => "ecwid-fb-app",
606
+ "title" => __("→ Sell on Facebook", 'ecwid-shopping-cart'),
607
+ "parent" => "ecwid-main",
608
+ 'href' => 'http://apps.facebook.com/ecwid-shop/?fb_source=wp'
609
+ )
610
+ );
611
+ }
612
+
613
+ function ecwid_content_has_productbrowser($content) {
614
+
615
+ $result = has_shortcode($content, 'ecwid_productbrowser');
616
+
617
+ if (!$result && has_shortcode($content, 'ecwid')) {
618
+ $shortcodes = ecwid_find_shortcodes($content, 'ecwid');
619
+ if ($shortcodes) foreach ($shortcodes as $shortcode) {
620
+
621
+ $attributes = shortcode_parse_atts($shortcode[3]);
622
+
623
+ if (isset($attributes['widgets'])) {
624
+ $widgets = preg_split('![^0-9^a-z^A-Z^-^_]!', $attributes['widgets']);
625
+ if (is_array($widgets) && in_array('productbrowser', $widgets)) {
626
+ $result = true;
627
+ }
628
+ }
629
+ }
630
+ }
631
+
632
+ return $result;
633
+ }
634
+
635
+ function ecwid_page_has_productbrowser($post_id = null)
636
+ {
637
+ static $results = null;
638
+
639
+ if (is_null($post_id)) {
640
+ $post_id = get_the_ID();
641
+ }
642
+
643
+ if (!isset($results[$post_id])) {
644
+ $post = get_post($post_id);
645
+
646
+ if ($post) {
647
+ $post_content = get_post($post_id)->post_content;
648
+
649
+ $results[$post_id] = ecwid_content_has_productbrowser($post_content);
650
+ $results[$post_id] = apply_filters( 'ecwid_page_has_product_browser', $results[$post_id] );
651
+ }
652
+ }
653
+
654
+ return $results[$post_id];
655
+ }
656
+
657
+ function ecwid_ajax_crawling_fragment() {
658
+ if (ecwid_is_api_enabled() && !isset($_GET['_escaped_fragment_']) && ecwid_page_has_productbrowser())
659
+ echo '<meta name="fragment" content="!">' . PHP_EOL;
660
+ }
661
+
662
+ function ecwid_meta() {
663
+
664
+ echo '<link rel="dns-prefetch" href="//images-cdn.ecwid.com/">' . PHP_EOL;
665
+ echo '<link rel="dns-prefetch" href="//images.ecwid.com/">' . PHP_EOL;
666
+ echo '<link rel="dns-prefetch" href="//app.ecwid.com/">' . PHP_EOL;
667
+
668
+ if (!ecwid_page_has_productbrowser() && ecwid_is_store_page_available()) {
669
+ $page_url = ecwid_get_store_page_url();
670
+ echo '<link rel="prefetch" href="' . $page_url . '" />' . PHP_EOL;
671
+ echo '<link rel="prerender" href="' . $page_url . '" />' . PHP_EOL;
672
+ }
673
+ }
674
+
675
+ function ecwid_canonical() {
676
+ $allowed = ecwid_is_api_enabled() && isset($_GET['_escaped_fragment_']);
677
+ if (!$allowed) return;
678
+
679
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
680
+ if (!$params) return;
681
+
682
+ if (!in_array($params['mode'], array('category', 'product')) || !isset($params['id'])) return;
683
+
684
+ $api = ecwid_new_product_api();
685
+
686
+ if ($params['mode'] == 'product') {
687
+ $product = $api->get_product($params['id']);
688
+ $link = ecwid_get_product_url($product);
689
+ } else if ($params['mode'] == 'category') {
690
+ $category = $api->get_category($params['id']);
691
+ $link = ecwid_get_category_url($category);
692
+ }
693
+
694
+ echo '<link rel="canonical" href="' . esc_attr($link) . '" />' . PHP_EOL;
695
+ }
696
+
697
+ function ecwid_meta_description() {
698
+
699
+ $allowed = ecwid_is_api_enabled() && isset($_GET['_escaped_fragment_']);
700
+ if (!$allowed) return;
701
+
702
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
703
+ if (!$params) return;
704
+
705
+ if (!in_array($params['mode'], array('category', 'product')) || !isset($params['id'])) return;
706
+
707
+ $api = ecwid_new_product_api();
708
+ if ($params['mode'] == 'product') {
709
+ $product = $api->get_product($params['id']);
710
+ $description = $product['description'];
711
+ } elseif ($params['mode'] == 'category') {
712
+ $category = $api->get_category($params['id']);
713
+ $description = $category['description'];
714
+ } else return;
715
+
716
+ $description = strip_tags($description);
717
+ $description = html_entity_decode($description, ENT_NOQUOTES, 'UTF-8');
718
+
719
+ $description = preg_replace('![\p{Z}\s]{1,}!u', ' ', $description);
720
+ $description = trim($description, " \t\xA0\n\r"); // Space, tab, non-breaking space, newline, carriage return
721
+ $description = mb_substr($description, 0, 160, 'UTF-8');
722
+ $description = htmlspecialchars($description, ENT_COMPAT, 'UTF-8');
723
+
724
+ echo <<<HTML
725
+ <meta name="description" content="$description" />
726
+ HTML;
727
+ }
728
+
729
+ function ecwid_ajax_hide_message($params)
730
+ {
731
+ if (Ecwid_Message_Manager::disable_message($_GET['message'])) {
732
+ wp_send_json(array('status' => 'success'));
733
+ }
734
+ }
735
+
736
+ function ecwid_hide_vote_message()
737
+ {
738
+ update_option('ecwid_show_vote_message', false);
739
+ }
740
+
741
+ function ecwid_get_product_and_category($category_id, $product_id) {
742
+ $params = array
743
+ (
744
+ array("alias" => "c", "action" => "category", "params" => array("id" => $category_id)),
745
+ array("alias" => "p", "action" => "product", "params" => array("id" => $product_id)),
746
+ );
747
+
748
+ $api = ecwid_new_product_api();
749
+ $batch_result = $api->get_batch_request($params);
750
+
751
+ if (false == $batch_result) {
752
+ $product = $api->get_product($product_id);
753
+ $category = false;
754
+ } else {
755
+ $category = $batch_result["c"];
756
+ $product = $batch_result["p"];
757
+ }
758
+
759
+ $return = "";
760
+
761
+ if (is_array($product)) {
762
+ $return .=$product["name"];
763
+ }
764
+
765
+ if(is_array($category)) {
766
+ $return.=" | ";
767
+ $return .=$category["name"];
768
+ }
769
+ return $return;
770
+ }
771
+
772
+ function ecwid_get_title_separator()
773
+ {
774
+ return apply_filters('ecwid_title_separator', '|');
775
+ }
776
+
777
+ function ecwid_seo_title($content) {
778
+ if (isset($_GET['_escaped_fragment_']) && ecwid_is_api_enabled()) {
779
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
780
+ $ecwid_seo_title = '';
781
+
782
+ $separator = ecwid_get_title_separator();
783
+
784
+ $api = ecwid_new_product_api();
785
+
786
+ if (isset($params['mode']) && !empty($params['mode'])) {
787
+ if ($params['mode'] == 'product') {
788
+ if (isset($params['category']) && !empty($params['category'])){
789
+ $ecwid_seo_title = ecwid_get_product_and_category($params['category'], $params['id']);
790
+ } elseif (empty($params['category'])) {
791
+ $ecwid_product = $api->get_product($params['id']);
792
+ $ecwid_seo_title = $ecwid_product['name'];
793
+ if(isset($ecwid_product['categories']) && is_array($ecwid_product['categories'])){
794
+ foreach ($ecwid_product['categories'] as $ecwid_category){
795
+ if ( $ecwid_category['defaultCategory'] == true ) {
796
+ $ecwid_seo_title .= ' ' . $separator . ' ';
797
+ $ecwid_seo_title .= $ecwid_category['name'];
798
+ }
799
+ }
800
+ }
801
+ }
802
+ }
803
+
804
+ elseif ($params['mode'] == 'category') {
805
+ $api = ecwid_new_product_api();
806
+ $ecwid_category = $api->get_category($params['id']);
807
+ $ecwid_seo_title = $ecwid_category['name'];
808
+ }
809
+ }
810
+
811
+ if (!empty($ecwid_seo_title))
812
+ return "$ecwid_seo_title $separator $content";
813
+ else
814
+ return $content;
815
+
816
+ } else {
817
+ return $content;
818
+ }
819
+ }
820
+
821
+ function ecwid_add_credits($powered_by)
822
+ {
823
+ if (!ecwid_is_paid_account()) {
824
+
825
+ $new_powered_by = '<li>';
826
+ $new_powered_by .= sprintf(
827
+ __('<a %s>Online store powered by Ecwid</a>', 'ecwid-shopping-cart'),
828
+ 'target="_blank" href="//www.ecwid.com?source=wporg-metalink"'
829
+ );
830
+ $new_powered_by .= '</li>';
831
+
832
+ $powered_by .= $new_powered_by;
833
+ }
834
+
835
+ return $powered_by;
836
+ }
837
+
838
+ function ecwid_content_started($content)
839
+ {
840
+ global $ecwid_script_rendered;
841
+
842
+ $ecwid_script_rendered = false;
843
+
844
+ return $content;
845
+ }
846
+
847
+ function ecwid_wrap_shortcode_content($content, $name, $attrs)
848
+ {
849
+ return "<!-- Ecwid shopping cart plugin v 3.4 --><!-- noptimize -->"
850
+ . ecwid_get_scriptjs_code(@$attrs['lang'])
851
+ . "<div class=\"ecwid-shopping-cart-$name\">$content</div>"
852
+ . "<!-- /noptimize --><!-- END Ecwid Shopping Cart v 3.4 -->";
853
+ }
854
+
855
+ function ecwid_get_scriptjs_code($force_lang = null) {
856
+ global $ecwid_script_rendered;
857
+
858
+ if (!$ecwid_script_rendered) {
859
+ $store_id = get_ecwid_store_id();
860
+ $force_lang_str = !empty($force_lang) ? "&lang=$force_lang" : '';
861
+ $s = '<script data-cfasync="false" type="text/javascript" src="https://' . APP_ECWID_COM . '/script.js?' . $store_id . '&data_platform=wporg' . $force_lang_str . '"></script>';
862
+ $s = $s . ecwid_sso();
863
+ $ecwid_script_rendered = true;
864
+
865
+ return $s;
866
+ } else {
867
+ return '';
868
+ }
869
+ }
870
+
871
+ function ecwid_script_shortcode($params) {
872
+
873
+ $attributes = shortcode_atts(
874
+ array(
875
+ 'lang' => null
876
+ ), $params
877
+ );
878
+
879
+ $content = "";
880
+ if (!is_null($attributes['lang'])) {
881
+ $content = ecwid_get_scriptjs_code($attributes['lang']);
882
+ }
883
+
884
+ return ecwid_wrap_shortcode_content($content, 'script', $params);
885
+ }
886
+
887
+ function ecwid_minicart_shortcode($attributes) {
888
+
889
+ $params = shortcode_atts(
890
+ array(
891
+ 'layout' => null,
892
+ 'is_ecwid_shortcode' => false,
893
+ 'lang' => null
894
+ ), $attributes
895
+ );
896
+
897
+ $layout = $params['layout'];
898
+ if (!in_array($layout, array('', 'attachToCategories', 'floating', 'Mini', 'MiniAttachToProductBrowser'), true)) {
899
+ $layout = 'attachToCategories';
900
+ }
901
+
902
+ if ($params['is_ecwid_shortcode']) {
903
+ // it is a part of the ecwid shortcode, we need to show it anyways
904
+ $ecwid_enable_minicart = $ecwid_show_categories = true;
905
+ } else {
906
+ // it is a ecwid_minicart widget that works based on appearance settings
907
+ $ecwid_enable_minicart = get_option('ecwid_enable_minicart');
908
+ $ecwid_show_categories = get_option('ecwid_show_categories');
909
+ }
910
+
911
+ $result = '';
912
+
913
+ if (!empty($ecwid_enable_minicart) && !empty($ecwid_show_categories)) {
914
+ $result = <<<EOT
915
+ <script data-cfasync="false" type="text/javascript"> xMinicart("style=","layout=$layout"); </script>
916
+ EOT;
917
+ }
918
+
919
+ $result = apply_filters('ecwid_minicart_shortcode_content', $result);
920
+
921
+ if (!empty($result)) {
922
+ $result = ecwid_wrap_shortcode_content($result, 'minicart', $params);
923
+ }
924
+
925
+ return $result;
926
+ }
927
+
928
+ function ecwid_searchbox_shortcode($attributes) {
929
+
930
+ $params = shortcode_atts(
931
+ array(
932
+ 'is_ecwid_shortcode' => false,
933
+ 'lang' => null
934
+ ), $attributes
935
+ );
936
+
937
+ $ecwid_show_search_box = $params['is_ecwid_shortcode'] ? true : get_option('ecwid_show_search_box');
938
+
939
+ $result = '';
940
+ if (!empty($ecwid_show_search_box)) {
941
+ $result = <<<EOT
942
+ <script data-cfasync="false" type="text/javascript"> xSearchPanel("style="); </script>
943
+ EOT;
944
+ }
945
+
946
+ $result = apply_filters('ecwid_search_shortcode_content', $result);
947
+
948
+ if (!empty($result)) {
949
+ $result = ecwid_wrap_shortcode_content($result, 'search', $params);
950
+ }
951
+
952
+ return $result;
953
+ }
954
+
955
+ function ecwid_categories_shortcode($attributes) {
956
+
957
+ $params = shortcode_atts(
958
+ array(
959
+ 'is_ecwid_shortcode' => false,
960
+ 'lang' => null
961
+ ), $attributes
962
+ );
963
+
964
+ $ecwid_show_categories = $params['is_ecwid_shortcode'] ? true : get_option('ecwid_show_categories');
965
+
966
+ $result = '';
967
+ if (!empty($ecwid_show_categories)) {
968
+ if (get_option('ecwid_use_new_horizontal_categories')) {
969
+ $store_id = get_ecwid_store_id();
970
+ $result = <<<HTML
971
+ <div id="horizontal-menu" data-storeid="$store_id"></div>
972
+ <script src="https://djqizrxa6f10j.cloudfront.net/horizontal-category-widget/v1/horizontal-widget.js"></script>
973
+ HTML;
974
+ } else {
975
+ $result = <<<EOT
976
+ <script data-cfasync="false" type="text/javascript"> xCategories("style="); </script>
977
+ EOT;
978
+ }
979
+ }
980
+
981
+ $result = apply_filters('ecwid_categories_shortcode_content', $result);
982
+
983
+ if (!empty($result)) {
984
+ $result = ecwid_wrap_shortcode_content($result, 'categories', $params);
985
+ }
986
+
987
+ return $result;
988
+ }
989
+
990
+ function ecwid_product_shortcode($shortcode_attributes) {
991
+
992
+ $attributes = shortcode_atts(
993
+ array(
994
+ 'id' => null,
995
+ 'display' => 'picture title price options addtobag',
996
+ 'link' => 'yes'
997
+ ),
998
+ $shortcode_attributes
999
+ );
1000
+
1001
+ $id = $attributes['id'];
1002
+
1003
+ if (is_null($id) || !is_numeric($id) || $id <= 0) return;
1004
+
1005
+ if ($attributes['link'] == 'yes' && !ecwid_is_store_page_available()) {
1006
+ $attributes['link'] = 'no';
1007
+ }
1008
+
1009
+ $display_items = array(
1010
+ 'picture' => '<div itemprop="picture"></div>',
1011
+ 'title' => '<div class="ecwid-title" itemprop="title"></div>',
1012
+ 'price' => '<div itemtype="http://schema.org/Offer" itemscope itemprop="offers">'
1013
+ . '<div class="ecwid-productBrowser-price ecwid-price" itemprop="price"></div>'
1014
+ . '</div>',
1015
+ 'options' => '<div itemprop="options"></div>',
1016
+ 'qty' => '<div itemprop="qty"></div>',
1017
+ 'addtobag' => '<div itemprop="addtobag"></div>'
1018
+ );
1019
+
1020
+ $result = sprintf(
1021
+ '<div class="ecwid ecwid-SingleProduct ecwid-Product ecwid-Product-%d" '
1022
+ . 'itemscope itemtype="http://schema.org/Product" '
1023
+ . 'data-single-product-id="%d">',
1024
+ $id, $id
1025
+ );
1026
+
1027
+ $items = preg_split('![^0-9^a-z^A-Z^\-^_]!', $attributes['display']);
1028
+
1029
+ if (is_array($items) && count($items) > 0) foreach ($items as $item) {
1030
+ if (array_key_exists($item, $display_items)) {
1031
+ if ($attributes['link'] == 'yes' && in_array($item, array('title', 'picture'))) {
1032
+ $product_link = ecwid_get_store_page_url() . '#!/~/product/id=' . $id;
1033
+ $result .= '<a href="' . esc_url($product_link) . '">' . $display_items[$item] . '</a>';
1034
+ } else {
1035
+ $result .= $display_items[$item];
1036
+ }
1037
+ }
1038
+ }
1039
+
1040
+ $result .= '</div>';
1041
+
1042
+ $result .= ecwid_get_product_browser_url_script();
1043
+ $result .= '<script data-cfasync="false" type="text/javascript">xSingleProduct()</script>';
1044
+
1045
+ update_option('ecwid_single_product_used', time());
1046
+
1047
+ return ecwid_wrap_shortcode_content($result, 'product', $shortcode_attributes);
1048
+ }
1049
+
1050
+ function ecwid_shortcode($attributes)
1051
+ {
1052
+ $attributes = shortcode_atts(
1053
+ array(
1054
+ 'widgets' => 'productbrowser',
1055
+ 'categories_per_row' => '3',
1056
+ 'category_view' => 'grid',
1057
+ 'search_view' => 'grid',
1058
+ 'grid' => '3,3',
1059
+ 'list' => '10',
1060
+ 'table' => '20',
1061
+ 'minicart_layout' => 'attachToCategories',
1062
+ 'default_category_id' => 0,
1063
+ 'lang' => ''
1064
+ )
1065
+ , $attributes
1066
+ );
1067
+
1068
+ $allowed_widgets = array('productbrowser', 'search', 'categories', 'minicart');
1069
+ $widgets = preg_split('![^0-9^a-z^A-Z^-^_]!', $attributes['widgets']);
1070
+ foreach ($widgets as $key => $widget) {
1071
+ if (!in_array($widget, $allowed_widgets)) {
1072
+ unset($widgets[$key]);
1073
+ }
1074
+ }
1075
+
1076
+ if (empty($widgets)) {
1077
+ $widgets = array('productbrowser');
1078
+ }
1079
+
1080
+ $attributes['layout'] = $attributes['minicart_layout'];
1081
+ $attributes['is_ecwid_shortcode'] = true;
1082
+
1083
+ $result = '';
1084
+
1085
+ $widgets_order = array('minicart', 'search', 'categories', 'productbrowser');
1086
+ foreach ($widgets_order as $widget) {
1087
+ if (in_array($widget, $widgets)) {
1088
+ if ($widget == 'search') {
1089
+ $widget = 'searchbox';
1090
+ }
1091
+
1092
+ $result .= call_user_func_array('ecwid_' . $widget . '_shortcode', array($attributes));
1093
+ }
1094
+ }
1095
+
1096
+ update_option('ecwid_store_shortcode_used', time());
1097
+
1098
+ return $result;
1099
+ }
1100
+
1101
+ function ecwid_productbrowser_shortcode($shortcode_params) {
1102
+
1103
+ $atts = shortcode_atts(
1104
+ array(
1105
+ 'categories_per_row' => false,
1106
+ 'grid' => false,
1107
+ 'list' => false,
1108
+ 'table' => false,
1109
+ 'search_view' => false,
1110
+ 'category_view' => false
1111
+ ), $shortcode_params
1112
+ );
1113
+
1114
+ $grid = explode(',', $atts['grid']);
1115
+ if (count($grid) == 2) {
1116
+ $atts['grid_rows'] = intval($grid[0]);
1117
+ $atts['grid_cols'] = intval($grid[1]);
1118
+ } else {
1119
+ list($atts['grid_rows'], $atts['grid_cols']) = array(false, false);
1120
+ }
1121
+
1122
+ $store_id = get_ecwid_store_id();
1123
+ $list_of_views = array('list','grid','table');
1124
+
1125
+ $ecwid_pb_categoriesperrow = $atts['categories_per_row'] ? $atts['categories_per_row'] : get_option('ecwid_pb_categoriesperrow');
1126
+ $ecwid_pb_productspercolumn_grid = $atts['grid_rows'] ? $atts['grid_rows'] : get_option('ecwid_pb_productspercolumn_grid');
1127
+ $ecwid_pb_productsperrow_grid = $atts['grid_cols'] ? $atts['grid_cols'] : get_option('ecwid_pb_productsperrow_grid');
1128
+ $ecwid_pb_productsperpage_list = $atts['list'] ? $atts['list'] : get_option('ecwid_pb_productsperpage_list');
1129
+ $ecwid_pb_productsperpage_table = $atts['table'] ? $atts['table'] : get_option('ecwid_pb_productsperpage_table');
1130
+ $ecwid_pb_defaultview = $atts['category_view'] ? $atts['category_view'] : get_option('ecwid_pb_defaultview');
1131
+ $ecwid_pb_searchview = $atts['search_view'] ? $atts['search_view'] : get_option('ecwid_pb_searchview');
1132
+
1133
+ $ecwid_mobile_catalog_link = get_option('ecwid_mobile_catalog_link');
1134
+ $ecwid_default_category_id =
1135
+ !empty($shortcode_params) && array_key_exists('default_category_id', $shortcode_params)
1136
+ ? $shortcode_params['default_category_id']
1137
+ : get_option('ecwid_default_category_id');
1138
+
1139
+ if (empty($ecwid_pb_categoriesperrow)) {
1140
+ $ecwid_pb_categoriesperrow = 3;
1141
+ }
1142
+ if (empty($ecwid_pb_productspercolumn_grid)) {
1143
+ $ecwid_pb_productspercolumn_grid = 3;
1144
+ }
1145
+ if (empty($ecwid_pb_productsperrow_grid)) {
1146
+ $ecwid_pb_productsperrow_grid = 3;
1147
+ }
1148
+ if (empty($ecwid_pb_productsperpage_list)) {
1149
+ $ecwid_pb_productsperpage_list = 10;
1150
+ }
1151
+ if (empty($ecwid_pb_productsperpage_table)) {
1152
+ $ecwid_pb_productsperpage_table = 20;
1153
+ }
1154
+
1155
+ if (empty($ecwid_pb_defaultview) || !in_array($ecwid_pb_defaultview, $list_of_views)) {
1156
+ $ecwid_pb_defaultview = 'grid';
1157
+ }
1158
+ if (empty($ecwid_pb_searchview) || !in_array($ecwid_pb_searchview, $list_of_views)) {
1159
+ $ecwid_pb_searchview = 'list';
1160
+ }
1161
+
1162
+ if (empty($ecwid_default_category_id)) {
1163
+ $ecwid_default_category_str = '';
1164
+ } else {
1165
+ $ecwid_default_category_str = ',"defaultCategoryId='. $ecwid_default_category_id .'"';
1166
+ }
1167
+
1168
+ $plain_content = '';
1169
+
1170
+ if (ecwid_can_display_html_catalog()) {
1171
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
1172
+ include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
1173
+ include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_catalog.php';
1174
+
1175
+ $page_url = get_page_link();
1176
+
1177
+ $catalog = new EcwidCatalog($store_id, $page_url);
1178
+
1179
+ if (isset($params['mode']) && !empty($params['mode'])) {
1180
+ if ($params['mode'] == 'product') {
1181
+ $plain_content = $catalog->get_product($params['id']);
1182
+ $url = ecwid_get_product_url(ecwid_new_product_api()->get_product($params['id']));
1183
+ } elseif ($params['mode'] == 'category') {
1184
+ $plain_content = $catalog->get_category($params['id']);
1185
+ $ecwid_default_category_str = ',"defaultCategoryId=' . $params['id'] . '"';
1186
+ $url = ecwid_get_category_url(ecwid_new_product_api()->get_category($params['id']));
1187
+ }
1188
+
1189
+ } else {
1190
+ $plain_content = $catalog->get_category(intval($ecwid_default_category_id));
1191
+ if (empty($plain_content)) {
1192
+ $plain_content = $catalog->get_category(0);
1193
+ } else {
1194
+ $url = ecwid_get_category_url(ecwid_new_product_api()->get_category($params['id']));
1195
+ }
1196
+ }
1197
+ if ($url) {
1198
+ $parsed = parse_url($url);
1199
+ $plain_content .= '<script data-cfasync="false" type="text/javascript"> if (!document.location.hash) document.location.hash = "'. $parsed['fragment'] . '";</script>';
1200
+ }
1201
+ }
1202
+
1203
+ $s = '';
1204
+
1205
+ $s = <<<EOT
1206
+ <div id="ecwid-store-$store_id">
1207
+ {$plain_content}
1208
+ </div>
1209
+ <script data-cfasync="false" type="text/javascript"> xProductBrowser("categoriesPerRow=$ecwid_pb_categoriesperrow","views=grid($ecwid_pb_productspercolumn_grid,$ecwid_pb_productsperrow_grid) list($ecwid_pb_productsperpage_list) table($ecwid_pb_productsperpage_table)","categoryView=$ecwid_pb_defaultview","searchView=$ecwid_pb_searchview","style="$ecwid_default_category_str, "id=ecwid-store-$store_id");</script>
1210
+ EOT;
1211
+ return ecwid_wrap_shortcode_content($s, 'product-browser', $shortcode_params);
1212
+ }
1213
+
1214
+
1215
+ function ecwid_parse_escaped_fragment($escaped_fragment) {
1216
+ $fragment = urldecode($escaped_fragment);
1217
+ $return = array();
1218
+
1219
+ if (preg_match('/^(\/~\/)([a-z]+)\/(.*)$/', $fragment, $matches)) {
1220
+ parse_str($matches[3], $return);
1221
+ $return['mode'] = $matches[2];
1222
+ } elseif (preg_match('!.*/(p|c)/([0-9]*)!', $fragment, $matches)) {
1223
+ if (count($matches) == 3 && in_array($matches[1], array('p', 'c'))) {
1224
+ $return = array(
1225
+ 'mode' => 'p' == $matches[1] ? 'product' : 'category',
1226
+ 'id' => $matches[2]
1227
+ );
1228
+ }
1229
+ }
1230
+
1231
+ return $return;
1232
+ }
1233
+
1234
+ function ecwid_ajax_get_product_info() {
1235
+ $id = $_GET['id'];
1236
+
1237
+ if (ecwid_is_api_enabled()) {
1238
+ $api = ecwid_new_product_api();
1239
+ $product = $api->get_product_https($id);
1240
+
1241
+ echo json_encode($product);
1242
+ }
1243
+
1244
+ die();
1245
+ }
1246
+
1247
+ add_filter('autoptimize_filter_js_exclude','ecwid_override_jsexclude',10,1);
1248
+ function ecwid_override_jsexclude($exclude)
1249
+ {
1250
+ return $exclude . ', xSearchPanel("style=")';
1251
+ }
1252
+
1253
+ function ecwid_store_activate() {
1254
+ $my_post = array();
1255
+ $content = <<<EOT
1256
+ <!-- Ecwid code. Please do not remove this line otherwise your Ecwid shopping cart will not work properly. --> [ecwid widgets="productbrowser search" grid="3,3" list="10" table="20" default_category_id="0" category_view="grid" search_view="grid" minicart_layout="attachToCategories" ] <!-- Ecwid code end -->
1257
+ EOT;
1258
+ add_option("ecwid_store_page_id", '', '', 'yes');
1259
+ add_option("ecwid_store_page_id_auto", '', '', 'yes');
1260
+
1261
+ add_option("ecwid_store_id", ECWID_DEMO_STORE_ID, '', 'yes');
1262
+
1263
+ add_option("ecwid_enable_minicart", 'Y', '', 'yes');
1264
+ add_option("ecwid_show_categories", '', '', 'yes');
1265
+ add_option("ecwid_show_search_box", '', '', 'yes');
1266
+
1267
+ add_option("ecwid_pb_categoriesperrow", '3', '', 'yes');
1268
+
1269
+ add_option("ecwid_pb_productspercolumn_grid", '3', '', 'yes');
1270
+ add_option("ecwid_pb_productsperrow_grid", '3', '', 'yes');
1271
+ add_option("ecwid_pb_productsperpage_list", '10', '', 'yes');
1272
+ add_option("ecwid_pb_productsperpage_table", '20', '', 'yes');
1273
+
1274
+ add_option("ecwid_pb_defaultview", 'grid', '', 'yes');
1275
+ add_option("ecwid_pb_searchview", 'list', '', 'yes');
1276
+
1277
+ add_option("ecwid_mobile_catalog_link", '', '', 'yes');
1278
+ add_option("ecwid_default_category_id", '', '', 'yes');
1279
+
1280
+ add_option('ecwid_is_api_enabled', 'on', '', 'yes');
1281
+ add_option('ecwid_api_check_time', 0, '', 'yes');
1282
+
1283
+ add_option('ecwid_show_vote_message', true);
1284
+
1285
+ add_option("ecwid_sso_secret_key", '', '', 'yes');
1286
+
1287
+ add_option("ecwid_installation_date", time());
1288
+
1289
+ add_option('ecwid_hide_appearance_menu', get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID ? 'Y' : 'N', '', 'yes');
1290
+ // Does not affect updates, automatically turned on for new users only
1291
+ add_option("ecwid_advanced_theme_layout", get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID ? 'Y' : 'N', '', 'yes');
1292
+
1293
+ add_option('ecwid_chameleon_primary', '');
1294
+ add_option('ecwid_chameleon_background', '');
1295
+ add_option('ecwid_chameleon_links', '');
1296
+
1297
+ /* All new options should go to check_version thing */
1298
+
1299
+ $id = get_option("ecwid_store_page_id");
1300
+ $_tmp_page = null;
1301
+ if (!empty($id) and ($id > 0)) {
1302
+ $_tmp_page = get_post($id);
1303
+ }
1304
+ if ($_tmp_page !== null) {
1305
+ $my_post = array();
1306
+ $my_post['ID'] = $id;
1307
+ $my_post['post_status'] = 'publish';
1308
+ wp_update_post( $my_post );
1309
+
1310
+ } else {
1311
+ ecwid_load_textdomain();
1312
+ $my_post['post_title'] = __('Store', 'ecwid-shopping-cart');
1313
+ $my_post['post_content'] = $content;
1314
+ $my_post['post_status'] = 'publish';
1315
+ $my_post['post_author'] = 1;
1316
+ $my_post['post_type'] = 'page';
1317
+ $my_post['comment_status'] = 'closed';
1318
+ $id = wp_insert_post( $my_post );
1319
+ update_option('ecwid_store_page_id', $id);
1320
+
1321
+ if (ecwid_get_theme_identification() == 'responsive') {
1322
+ update_post_meta($id, '_wp_page_template', 'full-width-page.php');
1323
+ update_option("ecwid_show_search_box", 'Y');
1324
+ }
1325
+ }
1326
+
1327
+ Ecwid_Message_Manager::enable_message('on_activate');
1328
+
1329
+ }
1330
+
1331
+ function ecwid_show_admin_messages() {
1332
+ if (is_admin()) {
1333
+ Ecwid_Message_Manager::show_messages();
1334
+ }
1335
+ }
1336
+
1337
+ function ecwid_show_admin_message($message) {
1338
+
1339
+ $class = version_compare(get_bloginfo('version'), '3.0') < 0 ? "updated fade" : "update-nag";
1340
+ echo sprintf('<div class="%s" style="margin-top: 5px">%s</div>', $class, $message);
1341
+ }
1342
+
1343
+ function ecwid_store_deactivate() {
1344
+ $ecwid_page_id = get_option("ecwid_store_page_id");
1345
+ $_tmp_page = null;
1346
+ if (!empty($ecwid_page_id) and ($ecwid_page_id > 0)) {
1347
+ $_tmp_page = get_page($ecwid_page_id);
1348
+ if ($_tmp_page !== null) {
1349
+ $my_post = array();
1350
+ $my_post['ID'] = $ecwid_page_id;
1351
+ $my_post['post_status'] = 'draft';
1352
+ wp_update_post( $my_post );
1353
+ } else {
1354
+ update_option('ecwid_store_page_id', '');
1355
+ }
1356
+ }
1357
+
1358
+ Ecwid_Message_Manager::reset_hidden_messages();
1359
+ }
1360
+
1361
+ function ecwid_uninstall() {
1362
+ delete_option("ecwid_store_page_id_auto");
1363
+ delete_option("ecwid_store_id");
1364
+ delete_option("ecwid_enable_minicart");
1365
+ delete_option("ecwid_show_categories");
1366
+ delete_option("ecwid_show_search_box");
1367
+ delete_option("ecwid_pb_categoriesperrow");
1368
+ delete_option("ecwid_pb_productspercolumn_grid");
1369
+ delete_option("ecwid_pb_productsperrow_grid");
1370
+ delete_option("ecwid_pb_productsperpage_list");
1371
+ delete_option("ecwid_pb_productsperpage_table");
1372
+ delete_option("ecwid_pb_defaultview");
1373
+ delete_option("ecwid_pb_searchview");
1374
+ delete_option("ecwid_mobile_catalog_link");
1375
+ delete_option("ecwid_default_category_id");
1376
+ delete_option('ecwid_is_api_enabled');
1377
+ delete_option('ecwid_api_check_time');
1378
+ delete_option('ecwid_show_vote_message');
1379
+ delete_option("ecwid_sso_secret_key");
1380
+ delete_option("ecwid_installation_date");
1381
+ delete_option('ecwid_hide_appearance_menu');
1382
+ delete_option("ecwid_advanced_theme_layout");
1383
+
1384
+ delete_option("ecwid_plugin_version");
1385
+ delete_option("ecwid_use_chameleon");
1386
+ }
1387
+
1388
+ function ecwid_abs_intval($value) {
1389
+ if (!is_null($value))
1390
+ return abs(intval($value));
1391
+ else
1392
+ return null;
1393
+ }
1394
+
1395
+ function ecwid_options_add_page() {
1396
+
1397
+ $is_newbie = get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
1398
+
1399
+ add_menu_page(
1400
+ __('Ecwid shopping cart settings', 'ecwid-shopping-cart'),
1401
+ __('Ecwid Store', 'ecwid-shopping-cart'),
1402
+ 'manage_options',
1403
+ 'ecwid',
1404
+ 'ecwid_general_settings_do_page'
1405
+ );
1406
+
1407
+
1408
+ if ($is_newbie) {
1409
+ $title = __('Setup', 'ecwid-shopping-cart');
1410
+ } else {
1411
+ $title = __('Dashboard', 'ecwid-shopping-cart');
1412
+ }
1413
+ add_submenu_page(
1414
+ 'ecwid',
1415
+ $title,
1416
+ $title,
1417
+ 'manage_options',
1418
+ 'ecwid',
1419
+ 'ecwid_general_settings_do_page'
1420
+ );
1421
+
1422
+ if (get_option('ecwid_hide_appearance_menu') != 'Y') {
1423
+ add_submenu_page(
1424
+ 'ecwid',
1425
+ __('Appearance settings', 'ecwid-shopping-cart'),
1426
+ __('Appearance', 'ecwid-shopping-cart'),
1427
+ 'manage_options',
1428
+ 'ecwid-appearance',
1429
+ 'ecwid_appearance_settings_do_page'
1430
+ );
1431
+ }
1432
+
1433
+ if (!$is_newbie || (isset($_GET['page']) && $_GET['page'] == 'ecwid-advanced')) {
1434
+ add_submenu_page(
1435
+ 'ecwid',
1436
+ __('Advanced settings', 'ecwid-shopping-cart'),
1437
+ __('Advanced', 'ecwid-shopping-cart'),
1438
+ 'manage_options',
1439
+ 'ecwid-advanced',
1440
+ 'ecwid_advanced_settings_do_page'
1441
+ );
1442
+ }
1443
+ }
1444
+
1445
+ function ecwid_register_admin_styles($hook_suffix) {
1446
+
1447
+ wp_enqueue_style('ecwid-admin-css', plugins_url('ecwid-shopping-cart/css/admin.css'), array(), get_option('ecwid_plugin_version'));
1448
+
1449
+ if (version_compare(get_bloginfo('version'), '3.8-beta') > 0) {
1450
+ wp_enqueue_style('ecwid-admin38-css', plugins_url('ecwid-shopping-cart/css/admin.3.8.css'), array('ecwid-admin-css'), get_option('ecwid_plugin_version'), 'all');
1451
+ }
1452
+
1453
+ if (isset($_GET['page']) && $_GET['page'] == 'ecwid') {
1454
+
1455
+ if (get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID) {
1456
+ // Open dashboard for the first time, ecwid store id is set to demo => need landing styles/scripts
1457
+ wp_enqueue_script('ecwid-landing-js', plugins_url('ecwid-shopping-cart/js/landing.js'), array(), get_option('ecwid_plugin_version'));
1458
+ wp_enqueue_style('ecwid-landing-css', plugins_url('ecwid-shopping-cart/css/landing.css'), array(), get_option('ecwid_plugin_version'), 'all');
1459
+ wp_enqueue_style('ecwid-landing-fonts', 'http://fonts.googleapis.com/css?family=Open+Sans:400,600,700,300', array(), get_option('ecwid_plugin_version'));
1460
+ } else {
1461
+ // We already connected and disconnected the store, no need for fancy landing
1462
+ wp_enqueue_script('ecwid-connect-js', plugins_url('ecwid-shopping-cart/js/dashboard.js'), array(), get_option('ecwid_plugin_version'));
1463
+ }
1464
+ }
1465
+ }
1466
+
1467
+ function ecwid_register_settings_styles($hook_suffix) {
1468
+
1469
+ if ( ($hook_suffix != 'post.php' && $hook_suffix != 'post-new.php') && strpos($hook_suffix, 'ecwid') === false) return;
1470
+
1471
+ wp_enqueue_style('ecwid-settings-pure-css', plugins_url('ecwid-shopping-cart/css/pure-min.css'), array(), get_option('ecwid_plugin_version'), 'all');
1472
+ wp_enqueue_style('ecwid-settings-css', plugins_url('ecwid-shopping-cart/css/settings.css'), array(), get_option('ecwid_plugin_version'), 'all');
1473
+
1474
+ if (version_compare(get_bloginfo('version'), '3.8-beta') > 0) {
1475
+ wp_enqueue_style('ecwid-settings38-css', plugins_url('ecwid-shopping-cart/css/settings.3.8.css'), array('ecwid-settings-css'), '', 'all');
1476
+ }}
1477
+
1478
+ function ecwid_plugin_actions($links) {
1479
+ $settings_link = "<a href='admin.php?page=ecwid'>"
1480
+ . (get_ecwid_store_id() == ECWID_DEMO_STORE_ID ? __('Setup', 'ecwid-shopping-cart') : __('Settings') )
1481
+ . "</a>";
1482
+ array_unshift( $links, $settings_link );
1483
+
1484
+ return $links;
1485
+ }
1486
+
1487
+ function ecwid_settings_api_init() {
1488
+
1489
+ if (isset($_POST['settings_section'])) switch ($_POST['settings_section']) {
1490
+ case 'appearance':
1491
+ register_setting('ecwid_options_page', 'ecwid_enable_minicart');
1492
+
1493
+ register_setting('ecwid_options_page', 'ecwid_show_categories');
1494
+ register_setting('ecwid_options_page', 'ecwid_show_search_box');
1495
+
1496
+ register_setting('ecwid_options_page', 'ecwid_pb_categoriesperrow', 'ecwid_abs_intval');
1497
+ register_setting('ecwid_options_page', 'ecwid_pb_productspercolumn_grid', 'ecwid_abs_intval');
1498
+ register_setting('ecwid_options_page', 'ecwid_pb_productsperrow_grid', 'ecwid_abs_intval');
1499
+ register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_list', 'ecwid_abs_intval');
1500
+ register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_table', 'ecwid_abs_intval');
1501
+ register_setting('ecwid_options_page', 'ecwid_pb_defaultview');
1502
+ register_setting('ecwid_options_page', 'ecwid_pb_searchview');
1503
+ break;
1504
+
1505
+ case 'general':
1506
+ register_setting('ecwid_options_page', 'ecwid_store_id','ecwid_abs_intval' );
1507
+ if (isset($_POST['ecwid_store_id']) && intval($_POST['ecwid_store_id']) == 0) {
1508
+ Ecwid_Message_Manager::reset_hidden_messages();
1509
+ }
1510
+ break;
1511
+
1512
+ case 'advanced':
1513
+ register_setting('ecwid_options_page', 'ecwid_default_category_id', 'ecwid_abs_intval');
1514
+ register_setting('ecwid_options_page', 'ecwid_sso_secret_key');
1515
+ register_setting('ecwid_options_page', 'ecwid_enable_advanced_theme_layout');
1516
+ register_setting('ecwid_options_page', 'ecwid_use_chameleon');
1517
+ register_setting('ecwid_options_page', 'ecwid_use_new_horizontal_categories');
1518
+ break;
1519
+ }
1520
+
1521
+ if (isset($_POST['ecwid_store_id'])) {
1522
+ update_option('ecwid_is_api_enabled', 'off');
1523
+ update_option('ecwid_api_check_time', 0);
1524
+ update_option('ecwid_last_oauth_fail_time', 0);
1525
+ }
1526
+ }
1527
+
1528
+ function ecwid_common_admin_scripts() {
1529
+
1530
+ wp_enqueue_script('ecwid-admin-js', plugins_url('ecwid-shopping-cart/js/admin.js'), array(), get_option('ecwid_plugin_version'));
1531
+ wp_enqueue_script('ecwid-modernizr-js', plugins_url('ecwid-shopping-cart/js/modernizr.js'), array(), get_option('ecwid_plugin_version'));
1532
+ }
1533
+
1534
+ function ecwid_get_register_link()
1535
+ {
1536
+ $link = 'https://my.ecwid.com/cp/?source=wporg&partner=wporg%s#register';
1537
+
1538
+ global $current_user;
1539
+ get_currentuserinfo();
1540
+
1541
+ $user_data = '';
1542
+ if ($current_user->ID && function_exists('get_user_meta')) {
1543
+ $meta = get_user_meta($current_user->ID);
1544
+
1545
+ $data = array(
1546
+ 'name' => get_user_meta($current_user->ID, 'first_name', true) . ' ' . get_user_meta($current_user->ID, 'last_name', true),
1547
+ 'nickname' => $current_user->display_name,
1548
+ 'email' => $current_user->user_email
1549
+ );
1550
+
1551
+ foreach ($data as $key => $value) {
1552
+ if (trim($value) == '') {
1553
+ unset($data[$key]);
1554
+ }
1555
+ }
1556
+ $user_data = '&' . build_query($data);
1557
+ }
1558
+
1559
+ $link = sprintf($link, $user_data);
1560
+
1561
+ return $link;
1562
+ }
1563
+
1564
+ function ecwid_general_settings_do_page() {
1565
+
1566
+ $connection_error = isset($_GET['connection_error']);
1567
+
1568
+ $no_oauth = isset($_GET['oauth']) && @$_GET['oauth'] == 'no';
1569
+
1570
+ if (!$no_oauth) {
1571
+ $last_check = get_option('ecwid_last_oauth_fail_time');
1572
+
1573
+ // if something was not right last time
1574
+ if ($last_check > 0) {
1575
+ // then we consider it not working
1576
+ $no_oauth = ecwid_test_oauth();
1577
+ }
1578
+ }
1579
+
1580
+ if (get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID && !$no_oauth) {
1581
+ global $ecwid_oauth;
1582
+
1583
+ $register = !$connection_error && !isset($_GET['connect']) && !@$_COOKIE['ecwid_create_store_clicked'];
1584
+
1585
+ require_once(ECWID_PLUGIN_DIR . '/templates/landing.php');
1586
+ } else {
1587
+
1588
+ if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID) {
1589
+ global $ecwid_oauth;
1590
+
1591
+ require_once ECWID_PLUGIN_DIR . '/templates/connect.php';
1592
+ } else {
1593
+ require_once ECWID_PLUGIN_DIR . '/templates/dashboard.php';
1594
+ }
1595
+ }
1596
+ }
1597
+
1598
+ function ecwid_admin_post_connect()
1599
+ {
1600
+ if (isset($_GET['force_store_id'])) {
1601
+ update_option('ecwid_store_id', $_GET['force_store_id']);
1602
+ update_option('ecwid_is_api_enabled', 'off');
1603
+ update_option('ecwid_api_check_time', 0);
1604
+ update_option('ecwid_last_oauth_fail_time', 1);
1605
+ wp_redirect('admin.php?page=ecwid');
1606
+ }
1607
+ global $ecwid_oauth;
1608
+
1609
+ if (ecwid_test_oauth(true)) {
1610
+ wp_redirect($ecwid_oauth->get_auth_dialog_url());
1611
+ } else {
1612
+ wp_redirect('admin.php?page=ecwid&oauth=no');
1613
+ }
1614
+ }
1615
+
1616
+ function ecwid_test_oauth($force = false)
1617
+ {
1618
+ global $ecwid_oauth;
1619
+
1620
+ $last_fail = get_option('ecwid_last_oauth_fail_time');
1621
+
1622
+ if ($last_fail < time() + 60*60*24 || $force) {
1623
+ $result = $ecwid_oauth->test_post();
1624
+ if ($result) {
1625
+ update_option('ecwid_last_oauth_fail_time', $last_fail = 0);
1626
+ } else {
1627
+ update_option('ecwid_last_oauth_fail_time', $last_fail = time());
1628
+ }
1629
+ }
1630
+
1631
+ return $last_fail == 0;
1632
+ }
1633
+
1634
+ function ecwid_get_categories_for_selector() {
1635
+ $categories = false;
1636
+ if (ecwid_is_paid_account()) {
1637
+ $api = ecwid_new_product_api();
1638
+ $categories = $api->get_all_categories();
1639
+ $by_id = array();
1640
+
1641
+ if (empty($categories)) return array();
1642
+
1643
+ if (is_array($categories)) {
1644
+ foreach ($categories as $key => $category) {
1645
+ $by_id[$category['id']] = $category;
1646
+ }
1647
+ }
1648
+ unset($categories);
1649
+
1650
+ foreach ($by_id as $id => $category) {
1651
+ $name_path = array($category['name']);
1652
+ while (is_array($category) && isset($category['parentId'])) {
1653
+ $name = '';
1654
+ if (isset($by_id[$category['parentId']])) {
1655
+ $name = $by_id[$category['parentId']]['name'];
1656
+ } else {
1657
+ $name = __('Hidden category', 'ecwid-shopping-cart');
1658
+ }
1659
+ $name_path[] = $name;
1660
+ $category = isset($by_id[$category['parentId']]) ? $by_id[$category['parentId']] : false;
1661
+ }
1662
+
1663
+ $by_id[$id]['path'] = array_reverse($name_path);
1664
+ $by_id[$id]['path_str'] = implode(" > ", $by_id[$id]['path']);
1665
+ }
1666
+
1667
+ function sort_by_path($a, $b) {
1668
+ return strcmp($a['path_str'], $b['path_str']);
1669
+ }
1670
+
1671
+ uasort($by_id, 'sort_by_path');
1672
+
1673
+ $categories = $by_id;
1674
+ }
1675
+
1676
+ return $categories;
1677
+ }
1678
+
1679
+ function ecwid_advanced_settings_do_page() {
1680
+ $categories = ecwid_get_categories_for_selector();
1681
+
1682
+ require_once ECWID_PLUGIN_DIR . '/templates/advanced-settings.php';
1683
+ }
1684
+
1685
+ function ecwid_appearance_settings_do_page() {
1686
+
1687
+ wp_register_script('ecwid-appearance-js', plugins_url('ecwid-shopping-cart/js/appearance.js'), array(), get_option('ecwid_plugin_version'), true);
1688
+ wp_enqueue_script('ecwid-appearance-js');
1689
+
1690
+ $disabled = false;
1691
+ if (!empty($ecwid_page_id) && ($ecwid_page_id > 0)) {
1692
+ $_tmp_page = get_post($ecwid_page_id);
1693
+ $content = $_tmp_page->post_content;
1694
+ if ( (strpos($content, "[ecwid_productbrowser]") === false) && (strpos($content, "xProductBrowser") !== false) )
1695
+ $disabled = true;
1696
+ }
1697
+ // $disabled_str is used in appearance settings template
1698
+ if ($disabled)
1699
+ $disabled_str = 'disabled = "disabled"';
1700
+ else
1701
+ $disabled_str = "";
1702
+
1703
+ require_once ECWID_PLUGIN_DIR . 'templates/appearance-settings.php';
1704
+ }
1705
+
1706
+ function get_ecwid_store_id() {
1707
+ static $store_id = null;
1708
+ if (is_null($store_id)) {
1709
+ $store_id = get_option('ecwid_store_id');
1710
+ if (empty($store_id))
1711
+ $store_id = ECWID_DEMO_STORE_ID;
1712
+ }
1713
+
1714
+ return $store_id;
1715
+ }
1716
+
1717
+ function ecwid_dashboard_widget_function() {
1718
+ require_once ECWID_PLUGIN_DIR . 'templates/wp-dashboard-widget.php';
1719
+ }
1720
+
1721
+ function ecwid_add_dashboard_widgets() {
1722
+ if (current_user_can('administrator')) {
1723
+ wp_add_dashboard_widget('ecwid_dashboard_widget', __('Recommendations for Your Online Store', 'ecwid-shopping-cart'), 'ecwid_dashboard_widget_function');
1724
+ }
1725
+ }
1726
+
1727
+ function ecwid_save_post($post_id)
1728
+ {
1729
+ // If primary or auto store page gets updated
1730
+ if ($post_id == get_option('ecwid_store_page_id') || $post_id == get_option('ecwid_store_page_id_auto')) {
1731
+ $new_status = get_post_status($post_id);
1732
+
1733
+ // and the update either disables the page or removes product browser
1734
+ if (!in_array($new_status, array('publish', 'private')) || !ecwid_page_has_productbrowser($post_id)) {
1735
+
1736
+ // then look for another enabled page that has a product browser in it
1737
+ $pages = get_pages(array('post_status' => 'publish,private'));
1738
+
1739
+ foreach ($pages as $page) {
1740
+ if (ecwid_page_has_productbrowser($page->ID)) {
1741
+ update_option('ecwid_store_page_id_auto', $page->ID);
1742
+ return;
1743
+ }
1744
+ }
1745
+ }
1746
+ }
1747
+
1748
+ // if there is no current store page and this new page has a product browser
1749
+ if (ecwid_page_has_productbrowser($post_id) && !ecwid_get_current_store_page_id()) {
1750
+ // then this page becomes a new store page
1751
+ update_option('ecwid_store_page_id_auto', $post_id);
1752
+ }
1753
+ }
1754
+
1755
+ function ecwid_get_current_store_page_id()
1756
+ {
1757
+ static $page_id = null;
1758
+
1759
+ if (is_null($page_id)) {
1760
+ $page_id = false;
1761
+ foreach(array('ecwid_store_page_id', 'ecwid_store_page_id_auto') as $option) {
1762
+ $id = get_option($option);
1763
+ if ($id) {
1764
+ $status = get_post_status($id);
1765
+
1766
+ if ($status == 'publish' || $status == 'private') {
1767
+ $page_id = $id;
1768
+ break;
1769
+ }
1770
+ }
1771
+ }
1772
+ }
1773
+
1774
+ return $page_id;
1775
+ }
1776
+
1777
+ function ecwid_get_store_page_url()
1778
+ {
1779
+ static $link = null;
1780
+
1781
+ if (is_null($link)) {
1782
+ $link = get_page_link(ecwid_get_current_store_page_id());
1783
+ }
1784
+
1785
+ return $link;
1786
+ }
1787
+
1788
+ function ecwid_is_store_page_available()
1789
+ {
1790
+ return ecwid_get_current_store_page_id() != false;
1791
+ }
1792
+
1793
+ function ecwid_get_product_url($product)
1794
+ {
1795
+ return ecwid_get_entity_url($product, 'p');
1796
+ }
1797
+
1798
+ function ecwid_get_category_url($category)
1799
+ {
1800
+ return ecwid_get_entity_url($category, 'c');
1801
+ }
1802
+
1803
+ function ecwid_get_entity_url($entity, $type) {
1804
+
1805
+ $link = ecwid_get_store_page_url();
1806
+
1807
+ if (is_numeric($entity)) {
1808
+ return $link . '#!/' . $type . '/' . $entity;
1809
+ } elseif (is_array($entity) && isset($entity['url'])) {
1810
+ $link .= substr($entity['url'], strpos($entity['url'], '#'));
1811
+ }
1812
+
1813
+ return $link;
1814
+
1815
+ }
1816
+
1817
+ function ecwid_get_product_browser_url_script()
1818
+ {
1819
+ $str = '';
1820
+ if (ecwid_is_store_page_available()) {
1821
+ $url = ecwid_get_store_page_url();
1822
+
1823
+ $str = '<script data-cfasync="false" type="text/javascript">var ecwid_ProductBrowserURL = "' . esc_js($url) . '";</script>';
1824
+ }
1825
+
1826
+ return $str;
1827
+
1828
+ }
1829
+
1830
+ class EcwidBadgeWidget extends WP_Widget {
1831
+
1832
+ var $url_template = "https://dj925myfyz5v.cloudfront.net/badges/%s.png";
1833
+ var $available_badges;
1834
+
1835
+ function __construct() {
1836
+ $widget_ops = array('classname' => 'widget_ecwid_badge', 'description' => __("Do you like Ecwid and want to help it grow? You can add this fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid.", 'ecwid-shopping-cart') );
1837
+ parent::__construct('ecwidbadge', __('Ecwid Badge', 'ecwid-shopping-cart'), $widget_ops);
1838
+
1839
+ $this->available_badges = array(
1840
+ 'ecwid-shopping-cart-widget-5' => array (
1841
+ 'name' => 'ecwid-shopping-cart-widget-5',
1842
+ 'width' => '73',
1843
+ 'height' => '20',
1844
+ 'alt' => __('Ecwid shopping cart widget', 'ecwid-shopping-cart')
1845
+ ),
1846
+ 'ecwid-shopping-cart-widget-6' => array (
1847
+ 'name' => 'ecwid-shopping-cart-widget-6',
1848
+ 'width' => '73',
1849
+ 'height' => '20',
1850
+ 'alt' => __('Ecwid shopping cart widget', 'ecwid-shopping-cart')
1851
+ ),
1852
+ 'ecwid-ecommerce-solution-2' => array (
1853
+ 'name' => 'ecwid-ecommerce-solution-2',
1854
+ 'width' => '165',
1855
+ 'height' => '58',
1856
+ 'alt' => __('Ecwid ecommerce solution', 'ecwid-shopping-cart')
1857
+ ),
1858
+ 'ecwid-free-shopping-cart-2' => array (
1859
+ 'name' => 'ecwid-free-shopping-cart-2',
1860
+ 'width' => '175',
1861
+ 'height' => '58',
1862
+ 'alt' => __('Ecwid free shopping cart', 'ecwid-shopping-cart')
1863
+ ),
1864
+ 'ecwid-shopping-cart-3' => array (
1865
+ 'name' => 'ecwid-shopping-cart-3',
1866
+ 'width' => '165',
1867
+ 'height' => '56',
1868
+ 'alt' => __('Ecwid shopping cart', 'ecwid-shopping-cart')
1869
+ ),
1870
+ 'ecwid-ecommerce-widgets-3' => array (
1871
+ 'name' => 'ecwid-ecommerce-widgets-3',
1872
+ 'width' => '165',
1873
+ 'height' => '58',
1874
+ 'alt' => __('Ecwid e-commerce widgets', 'ecwid-shopping-cart')
1875
+ ),
1876
+ 'ecwid-shopping-cart-3' => array (
1877
+ 'name' => 'ecwid-shopping-cart-3',
1878
+ 'width' => '165',
1879
+ 'height' => '56',
1880
+ 'alt' => __('Ecwid shopping cart', 'ecwid-shopping-cart')
1881
+ ),
1882
+ 'ecwid-ecommerce-widgets-3' => array (
1883
+ 'name' => 'ecwid-ecommerce-widgets-3',
1884
+ 'width' => '165',
1885
+ 'height' => '58',
1886
+ 'alt' => __('Ecwid e-commerce widgets', 'ecwid-shopping-cart')
1887
+ ),
1888
+ 'ecwid-ecommerce-solution-3' => array (
1889
+ 'name' => 'ecwid-ecommerce-solution-3',
1890
+ 'width' => '165',
1891
+ 'height' => '58',
1892
+ 'alt' => __('Ecwid ecommerce solution', 'ecwid-shopping-cart')
1893
+ ),
1894
+ 'ecwid-free-shopping-cart-3' => array (
1895
+ 'name' => 'ecwid-free-shopping-cart-3',
1896
+ 'width' => '175',
1897
+ 'height' => '58',
1898
+ 'alt' => __('Ecwid free shopping cart', 'ecwid-shopping-cart')
1899
+ )
1900
+ );
1901
+ }
1902
+
1903
+ function widget($args, $instance)
1904
+ {
1905
+ extract($args);
1906
+
1907
+ if (!isset($instance['badge_id']) || !array_key_exists($instance['badge_id'], $this->available_badges)) {
1908
+ return;
1909
+ }
1910
+ $badge = $this->available_badges[$instance['badge_id']];
1911
+ $url = sprintf($this->url_template, $badge['name']);
1912
+
1913
+ echo $before_widget;
1914
+
1915
+ echo <<<HTML
1916
+ <div>
1917
+ <a target="_blank" rel="nofollow" href="http://www.ecwid.com?source=wporg-badge">
1918
+ <img src="$url" width="$badge[width]" height="$badge[height]" alt="$badge[alt]" />
1919
+ </a>
1920
+ </div>
1921
+ HTML;
1922
+
1923
+ echo $after_widget;
1924
+ }
1925
+
1926
+ function update($new_instance, $old_instance){
1927
+ $instance = $old_instance;
1928
+ $instance['badge_id'] =
1929
+ array_key_exists($new_instance['badge_id'], $this->available_badges)
1930
+ ? $new_instance['badge_id']
1931
+ : '';
1932
+
1933
+ return $instance;
1934
+ }
1935
+
1936
+ function form($instance) {
1937
+ $instance = wp_parse_args( (array) $instance, array('badge_id' => 'ecwid-shopping-cart-widget-5') );
1938
+
1939
+ foreach ($this->available_badges as $id => $widget) {
1940
+ $element_id = "badge-$id";
1941
+ $name = $this->get_field_name('badge_id');
1942
+ $checked = '';
1943
+ if (isset($instance['badge_id']) && $instance['badge_id'] == $id) {
1944
+ $checked = 'checked="checked"';
1945
+ }
1946
+ $url = sprintf($this->url_template, $id);
1947
+ $content = <<<HTML
1948
+ <label class="ecwid-badge">
1949
+ <div class="checkbox">
1950
+ <input name="$name" type="radio" value="$widget[name]"$checked/>
1951
+ </div>
1952
+ <div class="image">
1953
+ <img src="$url" width="$widget[width]" height="$widget[height]" alt="$widget[alt]" />
1954
+ </div>
1955
+ </label>
1956
+ HTML;
1957
+ echo $content;
1958
+ }
1959
+ }
1960
+ }
1961
+
1962
+ class EcwidMinicartWidget extends WP_Widget {
1963
+
1964
+ function __construct() {
1965
+ $widget_ops = array('classname' => 'widget_ecwid_minicart', 'description' => __("Adds a cart widget for customer to see the products they added to the cart.", 'ecwid-shopping-cart') );
1966
+ parent::__construct('ecwidminicart', __('Shopping Cart', 'ecwid-shopping-cart'), $widget_ops);
1967
+
1968
+ }
1969
+
1970
+ function widget($args, $instance) {
1971
+ extract($args);
1972
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1973
+
1974
+ echo $before_widget;
1975
+
1976
+ if ( $title )
1977
+ echo $before_title . $title . $after_title;
1978
+
1979
+ echo '<div>';
1980
+
1981
+ echo ecwid_get_scriptjs_code();
1982
+ echo ecwid_get_product_browser_url_script();
1983
+ echo '<script data-cfasync="false" type="text/javascript"> xMinicart("style="); </script>';
1984
+
1985
+ echo '</div>';
1986
+
1987
+ echo $after_widget;
1988
+ }
1989
+
1990
+ function update($new_instance, $old_instance){
1991
+ $instance = $old_instance;
1992
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1993
+
1994
+ return $instance;
1995
+ }
1996
+
1997
+ function form($instance){
1998
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1999
+
2000
+ $title = htmlspecialchars($instance['title']);
2001
+
2002
+ echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2003
+ }
2004
+
2005
+ }
2006
+
2007
+ class EcwidMinicartMiniViewWidget extends WP_Widget {
2008
+
2009
+ function __construct() {
2010
+ $widget_ops = array('classname' => 'widget_ecwid_minicart_miniview', 'description' => __("Adds a compact cart widget for customer to see the products they added to the cart.", 'ecwid-shopping-cart') );
2011
+ parent::__construct('ecwidminicart_miniview', __('Shopping Cart (Mini)', 'ecwid-shopping-cart'), $widget_ops);
2012
+ }
2013
+
2014
+ function widget($args, $instance) {
2015
+ extract($args);
2016
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2017
+
2018
+ echo $before_widget;
2019
+
2020
+ if ( $title )
2021
+ echo $before_title . $title . $after_title;
2022
+
2023
+
2024
+ echo '<div>';
2025
+
2026
+ echo ecwid_get_scriptjs_code();
2027
+ echo ecwid_get_product_browser_url_script();
2028
+ echo '<script data-cfasync="false" type="text/javascript"> xMinicart("style=left:10px","layout=Mini"); </script>';
2029
+
2030
+ echo '</div>';
2031
+
2032
+ echo $after_widget;
2033
+ }
2034
+
2035
+ function update($new_instance, $old_instance){
2036
+ $instance = $old_instance;
2037
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2038
+
2039
+ return $instance;
2040
+ }
2041
+
2042
+ function form($instance){
2043
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
2044
+
2045
+ $title = htmlspecialchars($instance['title']);
2046
+
2047
+ echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2048
+ }
2049
+
2050
+ }
2051
+
2052
+
2053
+ class EcwidSearchWidget extends WP_Widget {
2054
+
2055
+ function __construct() {
2056
+ $widget_ops = array('classname' => 'widget_ecwid_search', 'description' => __("Displays a simple search box for your customers to find a product in your storex", 'ecwid-shopping-cart'));
2057
+ parent::__construct('ecwidsearch', __('Product Search', 'ecwid-shopping-cart'), $widget_ops);
2058
+ }
2059
+
2060
+ function widget($args, $instance) {
2061
+ extract($args);
2062
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2063
+
2064
+ echo $before_widget;
2065
+
2066
+ if ( $title )
2067
+ echo $before_title . $title . $after_title;
2068
+
2069
+ echo '<div>';
2070
+
2071
+ echo ecwid_get_scriptjs_code();
2072
+ echo ecwid_get_product_browser_url_script();
2073
+ echo '<script data-cfasync="false" type="text/javascript"> xSearchPanel("style="); </script>';
2074
+
2075
+ echo '</div>';
2076
+
2077
+ echo $after_widget;
2078
+ }
2079
+
2080
+ function update($new_instance, $old_instance){
2081
+ $instance = $old_instance;
2082
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2083
+
2084
+ return $instance;
2085
+ }
2086
+
2087
+ function form($instance){
2088
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
2089
+
2090
+ $title = htmlspecialchars($instance['title']);
2091
+
2092
+ echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2093
+ }
2094
+
2095
+ }
2096
+
2097
+ class EcwidVCategoriesWidget extends WP_Widget {
2098
+
2099
+ function __construct() {
2100
+ $widget_ops = array('classname' => 'widget_ecwid_vcategories', 'description' => __('Adds vertical categories block to let the customer navigate your store.', 'ecwid-shopping-cart'));
2101
+ parent::__construct('ecwidvcategories', __('Store Categories', 'ecwid-shopping-cart'), $widget_ops);
2102
+ }
2103
+
2104
+ function widget($args, $instance) {
2105
+ extract($args);
2106
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2107
+
2108
+ echo $before_widget;
2109
+
2110
+ if ( $title )
2111
+ echo $before_title . $title . $after_title;
2112
+
2113
+ echo '<div>';
2114
+
2115
+ echo ecwid_get_scriptjs_code();
2116
+ echo ecwid_get_product_browser_url_script();
2117
+ echo '<script data-cfasync="false" type="text/javascript"> xVCategories("style="); </script>';
2118
+
2119
+ echo '</div>';
2120
+
2121
+ echo $after_widget;
2122
+ }
2123
+
2124
+ function update($new_instance, $old_instance){
2125
+ $instance = $old_instance;
2126
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2127
+
2128
+ return $instance;
2129
+ }
2130
+
2131
+ function form($instance){
2132
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
2133
+
2134
+ $title = htmlspecialchars($instance['title']);
2135
+
2136
+ echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title:') . ' <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2137
+ }
2138
+
2139
+ }
2140
+
2141
+ class EcwidStoreLinkWidget extends WP_Widget {
2142
+
2143
+ function __construct() {
2144
+ $widget_ops = array('classname' => 'widget_ecwid_store_link', 'description' => __('Displays a link to the store page in sidebar for customer to quickly access your store from any page on the site.', 'ecwid-shopping-cart'));
2145
+ parent::__construct('ecwidstorelink', __('Store Page Link', 'ecwid-shopping-cart'), $widget_ops);
2146
+ }
2147
+
2148
+ function widget($args, $instance) {
2149
+ extract($args);
2150
+ echo $before_widget;
2151
+
2152
+ echo '<div>';
2153
+
2154
+ echo '<a href="' . ecwid_get_store_page_url() . '">' . $instance['label'] . '</a>';
2155
+ echo '</div>';
2156
+
2157
+ echo $after_widget;
2158
+ }
2159
+
2160
+ function update($new_instance, $old_instance){
2161
+ $instance = $old_instance;
2162
+ $instance['label'] = strip_tags(stripslashes($new_instance['label']));
2163
+
2164
+ return $instance;
2165
+ }
2166
+
2167
+ function form($instance){
2168
+ $instance = wp_parse_args( (array) $instance, array( 'label' => __('Shop', 'ecwid-shopping-cart') ) );
2169
+
2170
+ $label = htmlspecialchars($instance['label']);
2171
+
2172
+ echo '<p><label for="' . $this->get_field_name('label') . '">' . __('Text') . ': <input style="width:100%;" id="' . $this->get_field_id('label') . '" name="' . $this->get_field_name('label') . '" type="text" value="' . $label . '" /></label></p>';
2173
+ }
2174
+
2175
+ }
2176
+
2177
+ class EcwidRecentlyViewedWidget extends WP_Widget {
2178
+
2179
+ var $max = 10;
2180
+ var $min = 1;
2181
+ var $default = 3;
2182
+ function __construct() {
2183
+ $widget_ops = array('classname' => 'widget_ecwid_recently_viewed', 'description' => __('Displays a list of products recently viewed by the customer to easily return to the products they saw in your shop.', 'ecwid-shopping-cart'));
2184
+ parent::__construct('ecwidrecentlyviewed', __('Recently Viewed Products', 'ecwid-shopping-cart'), $widget_ops);
2185
+ $recently_viewed = json_decode(stripslashes(@$_COOKIE['ecwid-shopping-cart-recently-viewed']));
2186
+
2187
+ if ($recently_viewed && $recently_viewed->store_id != get_ecwid_store_id()) {
2188
+ setcookie('ecwid-shopping-cart-recently-viewed', null, strtotime('-1 day'));
2189
+ }
2190
+ }
2191
+
2192
+ function widget($args, $instance) {
2193
+
2194
+ wp_enqueue_script('ecwid-recently-viewed-js', plugins_url('ecwid-shopping-cart/js/recently-viewed.js'), array('jquery', 'utils', 'ecwid-products-list-js'), get_option('ecwid_plugin_version'));
2195
+ wp_enqueue_style('ecwid-products-list-css');
2196
+ wp_enqueue_style('ecwid-recently-viewed-css', plugins_url('ecwid-shopping-cart/css/recently-viewed.css'), array(), get_option('ecwid_plugin_version'));
2197
+ extract($args);
2198
+
2199
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
2200
+
2201
+ echo $before_widget;
2202
+
2203
+ if ( $title )
2204
+ echo $before_title . $title . $after_title;
2205
+
2206
+ echo ecwid_get_scriptjs_code();
2207
+
2208
+ $recently_viewed = false;
2209
+ if (isset($_COOKIE['ecwid-shopping-cart-recently-viewed'])) {
2210
+ $recently_viewed = json_decode($_COOKIE['ecwid-shopping-cart-recently-viewed']);
2211
+ }
2212
+ $recently_viewed = json_decode(stripslashes($_COOKIE['ecwid-shopping-cart-recently-viewed']));
2213
+
2214
+ if ($recently_viewed && $recently_viewed->store_id != get_ecwid_store_id()) {
2215
+ $recently_viewed = null;
2216
+ }
2217
+
2218
+ echo '<div class="ecwid-recently-viewed-products" data-ecwid-max="' . $instance['number_of_products'] . '">';
2219
+
2220
+
2221
+ $api = false;
2222
+ if (ecwid_is_api_enabled()) {
2223
+ $api = ecwid_new_product_api();
2224
+ }
2225
+
2226
+ $ids = array();
2227
+ if ($recently_viewed && isset($recently_viewed->products)) {
2228
+
2229
+ for ($i = count($recently_viewed->products) - 1; $i >= 0; $i--) {
2230
+ $product = $recently_viewed->products[$i];
2231
+
2232
+ $counter++;
2233
+ if (isset($product->id) && isset($product->link)) {
2234
+ $ids[] = $product->id;
2235
+ $hide = $counter > $instance['number_of_products'] ? ' hidden' : '';
2236
+
2237
+ if ($api) {
2238
+ $product_https = $api->get_product_https($product->id);
2239
+ }
2240
+
2241
+ echo <<<HTML
2242
+ <a class="product$hide" href="$product->link" alt="$product->name" title="$product->name">
2243
+ <div class="ecwid ecwid-SingleProduct ecwid-Product ecwid-Product-$product->id" data-single-product-link="$product->link" itemscope itemtype="http://schema.org/Product" data-single-product-id="$product->id">
2244
+ <div itemprop="image" data-force-image="$product_https[imageUrl]"></div>
2245
+ <div class="ecwid-title" itemprop="name"></div>
2246
+ <div itemtype="http://schema.org/Offer" itemscope itemprop="offers"><div class="ecwid-productBrowser-price ecwid-price" itemprop="price"></div></div>
2247
+ </div>
2248
+ <script type="text/javascript">xSingleProduct();</script>
2249
+ </a>
2250
+ HTML;
2251
+ }
2252
+ }
2253
+ } else {
2254
+ echo <<<HTML
2255
+ <script type="text/javascript">
2256
+ jQuery(document).ready(function() {
2257
+ wpCookies.remove('ecwid-shopping-cart-recently-viewed');
2258
+ recently_viewed = {products: []};
2259
+ });
2260
+ </script>
2261
+ HTML;
2262
+ }
2263
+ $ids_string = '';
2264
+ if (!empty($ids)) {
2265
+ $ids_string = implode(',', $ids);
2266
+ }
2267
+
2268
+ echo <<<HTML
2269
+ <script type="text/javascript">
2270
+ <!--
2271
+ jQuery(document).ready(function() {
2272
+ jQuery('#$this->id .ecwid-recently-viewed-products').recentlyViewedProducts();
2273
+ });
2274
+ -->
2275
+ </script>
2276
+ HTML;
2277
+
2278
+ echo "</div>";
2279
+
2280
+ $store_link_message = empty($instance['store_link_title']) ? __('You have not viewed any product yet. Open store.', 'ecwid-shopping-cart') : $instance['store_link_title'];
2281
+
2282
+ $page_id = ecwid_get_current_store_page_id();
2283
+ $post = get_post($page_id);
2284
+
2285
+ if (empty($recently_viewed->products)) {
2286
+ echo '<a class="show-if-empty" href="' . ecwid_get_store_page_url() . '">' . $store_link_message . '</a>';
2287
+ }
2288
+
2289
+ echo $after_widget;
2290
+ }
2291
+
2292
+ function update($new_instance, $old_instance){
2293
+ $instance = $old_instance;
2294
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
2295
+ $instance['store_link_title'] = strip_tags(stripslashes($new_instance['store_link_title']));
2296
+ $num = intval($new_instance['number_of_products']);
2297
+ if ($num > $this->max || $num < $this->min) {
2298
+ $num = $this->default;
2299
+ }
2300
+ $instance['number_of_products'] = intval($new_instance['number_of_products']);
2301
+
2302
+ return $instance;
2303
+ }
2304
+
2305
+ function form($instance){
2306
+
2307
+ $instance = wp_parse_args( (array) $instance,
2308
+ array(
2309
+ 'title' => __('Recently Viewed Products', 'ecwid-shopping-cart'),
2310
+ 'store_link_title' => __('You have not viewed any product yet. Open store.', 'ecwid-shopping-cart'),
2311
+ 'number_of_products' => 3
2312
+ )
2313
+ );
2314
+
2315
+ $title = htmlspecialchars($instance['title']);
2316
+ $store_link_title = htmlspecialchars($instance['store_link_title']);
2317
+ $number_of_products = $instance['number_of_products'];
2318
+ if ($number_of_products)
2319
+
2320
+ echo '<p><label for="' . $this->get_field_name('title') . '">' . __('Title') . ': <input style="width:100%;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
2321
+ echo '<p><label for="' . $this->get_field_name('store_link_title') . '">' . __('Store Link Title', 'ecwid-shopping-cart') . ': <input style="width:100%;" id="' . $this->get_field_id('store_link_title') . '" name="' . $this->get_field_name('store_link_title') . '" type="text" value="' . $store_link_title . '" /></label></p>';
2322
+ echo '<p><label for="' . $this->get_field_name('number_of_products') . '">' . __( 'Number of products to show', 'ecwid-shopping-cart' ) . ': <input style="width:100%;" id="' . $this->get_field_id('number_of_products') . '" name="' . $this->get_field_name('number_of_products') . '" type="number" min="' . $this->min . '" max="' . $this->max . '" value="' . $number_of_products . '" /></label></p>';
2323
+ }
2324
+
2325
+ function is_valid_number_of_products($num) {
2326
+ return is_numeric($num) && $num <= $this->max && $num >= $this->min;
2327
+ }
2328
+ }
2329
+
2330
+
2331
+ function ecwid_send_stats()
2332
+ {
2333
+ $storeid = get_ecwid_store_id();
2334
+
2335
+ if ($storeid == ECWID_DEMO_STORE_ID) return;
2336
+
2337
+ $last_stats_sent = get_option('ecwid_stats_sent_date');
2338
+ if (!$last_stats_sent) {
2339
+ add_option('ecwid_stats_sent_date', time());
2340
+ } else if ($last_stats_sent + 24*60*60 > time()) {
2341
+ return;
2342
+ }
2343
+
2344
+ $stats = ecwid_gather_stats();
2345
+
2346
+ $url = 'http://' . APP_ECWID_COM . '/script.js?' . $storeid . '&data_platform=wporg';
2347
+
2348
+ foreach ($stats as $name => $value) {
2349
+ $url .= '&data_wporg_' . $name . '=' . urlencode($value);
2350
+ }
2351
+
2352
+ $link = '';
2353
+ if (ecwid_is_store_page_available()) {
2354
+ $link = ecwid_get_store_page_url();
2355
+ } else {
2356
+ $link = get_bloginfo('url');
2357
+ }
2358
+
2359
+ wp_remote_get($url, array('headers' => array('Referer' => $link)));
2360
+
2361
+ update_option('ecwid_stats_sent_date', time());
2362
+ }
2363
+
2364
+ function ecwid_gather_stats()
2365
+ {
2366
+ $usage_version = 1;
2367
+
2368
+ $stats = array();
2369
+
2370
+ $stats['version'] = get_bloginfo('version');
2371
+ $stats['theme'] = ecwid_get_theme_identification();
2372
+
2373
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
2374
+
2375
+ $usage_params = array(
2376
+ 'paid',
2377
+ 'display_search',
2378
+ 'horizontal_categories_enabled',
2379
+ 'minicart_enabled',
2380
+ 'search_widget',
2381
+ 'vcategories_widget',
2382
+ 'minicart_normal_widget',
2383
+ 'minicart_mini_widget',
2384
+ 'badge_widget',
2385
+ 'sso_enabled',
2386
+ 'default_category',
2387
+ 'google_xml_sitemaps_used',
2388
+ 'ecwid_product_advisor_used',
2389
+ 'ecwid_single_product_used',
2390
+ 'ecwid_store_shortcode_used',
2391
+ 'store_link_widget',
2392
+ 'recently_viewed_widget',
2393
+ 'avalanche_used',
2394
+ 'chameleon_used',
2395
+ 'http_post_fails'
2396
+ );
2397
+
2398
+ $usage_stats = ecwid_gather_usage_stats();
2399
+ $stats['usage'] = '';
2400
+
2401
+ $usage = '';
2402
+ foreach ($usage_params as $index => $item) {
2403
+ $usage[$index] = (int)$usage_stats[$item];
2404
+ }
2405
+
2406
+ $stats['usage'] = $usage_version . '_' . implode('', $usage);
2407
+
2408
+ return $stats;
2409
+ }
2410
+
2411
+ function ecwid_gather_usage_stats()
2412
+ {
2413
+ $usage_params = array(
2414
+ 'paid',
2415
+ 'display_search',
2416
+ 'horizontal_categories_enabled',
2417
+ 'minicart_enabled',
2418
+ 'search_widget',
2419
+ 'vcategories_widget',
2420
+ 'minicart_normal_widget',
2421
+ 'minicart_mini_widget',
2422
+ 'badge_widget',
2423
+ 'sso_enabled',
2424
+ 'default_category',
2425
+ 'google_xml_sitemaps_used',
2426
+ 'ecwid_product_advisor_used',
2427
+ 'ecwid_single_product_used',
2428
+ 'ecwid_store_shortcode_used',
2429
+ 'store_link_widget',
2430
+ 'recently_viewed_widget',
2431
+ 'avalanche_used',
2432
+ 'chameleon_used',
2433
+ 'http_post_fails'
2434
+ );
2435
+
2436
+ $usage_stats = array();
2437
+ $usage_stats['paid'] = ecwid_is_paid_account();
2438
+ $usage_stats['display_search'] = (bool) get_option('ecwid_show_search_box');
2439
+ $usage_stats['horizontal_categories_enabled'] = (bool) get_option('ecwid_show_categories');
2440
+ $usage_stats['minicart_enabled'] = (bool) get_option('ecwid_enable_minicart');
2441
+ $usage_stats['search_widget'] = (bool) is_active_widget(false, false, 'ecwidsearch');
2442
+ $usage_stats['vcategories_widget'] = (bool) is_active_widget(false, false, 'ecwidvcategories');
2443
+ $usage_stats['minicart_normal_widget'] = (bool) is_active_widget(false, false, 'ecwidminicart');
2444
+ $usage_stats['minicart_mini_widget'] = (bool) is_active_widget(false, false, 'ecwidminicart_miniview');
2445
+ $usage_stats['badge_widget'] = (bool) is_active_widget(false, false, 'ecwidbadge');
2446
+ $usage_stats['sso_enabled'] = (bool) get_option('ecwid_sso_secret_key');
2447
+ $usage_stats['default_category'] = (bool) get_option('ecwid_default_category_id');
2448
+ $usage_stats['google_xml_sitemaps_used'] = (bool) is_plugin_active('google-sitemap-generator/sitemap.php');
2449
+ $usage_stats['ecwid_product_advisor_used'] = (bool) is_plugin_active('ecwid-useful-tools/ecwid-product-advisor.php');
2450
+ $usage_stats['ecwid_single_product_used'] = (bool) (get_option('ecwid_single_product_used') + 60*60*24*14 > time());
2451
+ $usage_stats['ecwid_store_shortcode_used'] = (bool) (get_option('ecwid_store_shortcode_used') + 60*60*24*14 > time());
2452
+ $usage_stats['store_link_widget'] = (bool) is_active_widget(false, false, 'ecwidstorelink');
2453
+ $usage_stats['recently_viewed_widget'] = (bool) is_active_widget(false, false, 'ecwidrecentlyviewed');
2454
+ $usage_stats['avalanche_used'] = (bool) is_plugin_active('ecwid-widgets-avalanche/ecwid_widgets_avalanche.php');
2455
+ $usage_stats['chameleon_used'] = (bool)get_option('ecwid_use_chameleon');
2456
+ $usage_stats['http_post_fails'] = get_option('ecwid_last_oauth_fail_time') > 0;
2457
+
2458
+ return $usage_stats;
2459
+ }
2460
+
2461
+ function ecwid_sidebar_widgets_init() {
2462
+ register_widget('EcwidMinicartWidget');
2463
+ register_widget('EcwidSearchWidget');
2464
+ register_widget('EcwidVCategoriesWidget');
2465
+ register_widget('EcwidMinicartMiniViewWidget');
2466
+ register_widget('EcwidBadgeWidget');
2467
+ register_widget('EcwidStoreLinkWidget');
2468
+ register_widget('EcwidRecentlyViewedWidget');
2469
+ }
2470
+
2471
+ add_action('widgets_init', 'ecwid_sidebar_widgets_init');
2472
+
2473
+ function ecwid_sso() {
2474
+ $key = get_option('ecwid_sso_secret_key');
2475
+ if (empty($key)) {
2476
+ return "";
2477
+ }
2478
+
2479
+ global $current_user;
2480
+ get_currentuserinfo();
2481
+
2482
+ $signin_url = wp_login_url(ecwid_get_store_page_url());
2483
+ $signout_url = wp_logout_url(ecwid_get_store_page_url());
2484
+ $sign_in_out_urls = <<<JS
2485
+ window.EcwidSignInUrl = '$signin_url';
2486
+ window.EcwidSignOutUrl = '$signout_url';
2487
+ window.Ecwid.OnAPILoaded.add(function() {
2488
+
2489
+ window.Ecwid.setSignInUrls({
2490
+ signInUrl: '$signin_url',
2491
+ signOutUrl: '$signout_url'
2492
+ });
2493
+ });
2494
+ JS;
2495
+
2496
+ /*
2497
+ $signin_url = wp_login_url("URL_TO_REDIRECT");
2498
+ $signout_url = wp_logout_url('URL_TO_REDIRECT');
2499
+ $sign_in_out_urls = <<<JS
2500
+ window.EcwidSignInUrl = '$signin_url';
2501
+ window.EcwidSignOutUrl = '$signout_url';
2502
+ window.Ecwid.OnAPILoaded.add(function() {
2503
+
2504
+ window.Ecwid.setSignInUrls({
2505
+ signInUrl: '$signin_url',
2506
+ signOutUrl: '$signout_url'
2507
+ });
2508
+
2509
+
2510
+ window.Ecwid.setSignInProvider({
2511
+ addSignInLinkToPB: function() { return true; },
2512
+ signIn: function() {
2513
+ location.href = window.EcwidSignInUrl.replace('URL_TO_REDIRECT', encodeURIComponent(location.href));
2514
+ },
2515
+ signOut: function() {
2516
+ location.href = window.EcwidSignOutUrl.replace('URL_TO_REDIRECT', encodeURIComponent(location.href));
2517
+ },
2518
+ canSignOut: true,
2519
+ canSignIn: true
2520
+ });
2521
+
2522
+ });
2523
+
2524
+
2525
+ JS;
2526
+ */
2527
+ $ecwid_sso_profile = '';
2528
+ if ($current_user->ID) {
2529
+ $meta = get_user_meta($current_user->ID);
2530
+
2531
+
2532
+ $user_data = array(
2533
+ 'appId' => "wp_" . get_ecwid_store_id(),
2534
+ 'userId' => "{$current_user->ID}",
2535
+ 'profile' => array(
2536
+ 'email' => $current_user->user_email,
2537
+ 'billingPerson' => array(
2538
+ 'name' => $meta['first_name'][0] . ' ' . $meta['last_name'][0]
2539
+ )
2540
+ )
2541
+ );
2542
+ $user_data = base64_encode(json_encode($user_data));
2543
+ $time = time();
2544
+ $hmac = ecwid_hmacsha1("$user_data $time", $key);
2545
+
2546
+ $ecwid_sso_profile ="$user_data $hmac $time";
2547
+ }
2548
+
2549
+ return <<<HTML
2550
+ <script data-cfasync="false" type="text/javascript">
2551
+
2552
+ var ecwid_sso_profile='$ecwid_sso_profile';
2553
+ $sign_in_out_urls
2554
+ </script>
2555
+ HTML;
2556
+ }
2557
+
2558
+ // from: http://www.php.net/manual/en/function.sha1.php#39492
2559
+
2560
+ function ecwid_hmacsha1($data, $key) {
2561
+ if (function_exists("hash_hmac")) {
2562
+ return hash_hmac('sha1', $data, $key);
2563
+ } else {
2564
+ $blocksize=64;
2565
+ $hashfunc='sha1';
2566
+ if (strlen($key)>$blocksize)
2567
+ $key=pack('H*', $hashfunc($key));
2568
+ $key=str_pad($key,$blocksize,chr(0x00));
2569
+ $ipad=str_repeat(chr(0x36),$blocksize);
2570
+ $opad=str_repeat(chr(0x5c),$blocksize);
2571
+ $hmac = pack(
2572
+ 'H*',$hashfunc(
2573
+ ($key^$opad).pack(
2574
+ 'H*',$hashfunc(
2575
+ ($key^$ipad).$data
2576
+ )
2577
+ )
2578
+ )
2579
+ );
2580
+ return bin2hex($hmac);
2581
+ }
2582
+ }
2583
+
2584
+ function ecwid_can_display_html_catalog()
2585
+ {
2586
+ if (!isset($_GET['_escaped_fragment_'])) return;
2587
+
2588
+ $api = ecwid_new_product_api();
2589
+ if (!$api) return;
2590
+
2591
+ $profile = $api->get_profile();
2592
+ if (!$profile) return;
2593
+ return $profile['closed'] != true;
2594
+ }
2595
+
2596
+ function ecwid_is_paid_account()
2597
+ {
2598
+ return ecwid_is_api_enabled() && get_ecwid_store_id() != ECWID_DEMO_STORE_ID;
2599
+ }
2600
+
2601
+ function ecwid_is_api_enabled()
2602
+ {
2603
+ $ecwid_is_api_enabled = get_option('ecwid_is_api_enabled');
2604
+ $ecwid_api_check_time = get_option('ecwid_api_check_time');
2605
+ $now = time();
2606
+
2607
+ if ( $now > ($ecwid_api_check_time + 60 * 60 * 3) && get_ecwid_store_id() != ECWID_DEMO_STORE_ID ) {
2608
+ // check whether API is available once in 3 hours
2609
+ $ecwid = ecwid_new_product_api();
2610
+
2611
+ $ecwid_is_api_enabled = ($ecwid->is_api_enabled() ? 'on' : 'off');
2612
+
2613
+ update_option('ecwid_is_api_enabled', $ecwid_is_api_enabled);
2614
+ update_option('ecwid_api_check_time', $now);
2615
+ }
2616
+
2617
+ if ('on' == $ecwid_is_api_enabled)
2618
+ return true;
2619
+ else
2620
+ return false;
2621
+ }
2622
+
2623
+ function ecwid_new_product_api()
2624
+ {
2625
+ include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
2626
+ $ecwid_store_id = intval(get_ecwid_store_id());
2627
+ $api = new EcwidProductApi($ecwid_store_id);
2628
+
2629
+ return $api;
2630
+ }
2631
+
2632
+ function ecwid_embed_svg($name) {
2633
+ $code = file_get_contents(ECWID_PLUGIN_DIR . '/images/' . $name . '.svg');
2634
+
2635
+ echo $code;
2636
+ }
2637
+
2638
+ /*
2639
+ * Basically a copy of has_shortcode that returns the matched shortcode
2640
+ */
2641
+ function ecwid_find_shortcodes( $content, $tag ) {
2642
+
2643
+ if ( false === strpos( $content, '[' ) ) {
2644
+ return false;
2645
+ }
2646
+
2647
+ if ( shortcode_exists( $tag ) ) {
2648
+ preg_match_all( '/' . ecwid_get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
2649
+ if ( empty( $matches ) )
2650
+ return false;
2651
+
2652
+ $result = array();
2653
+ foreach ( $matches as $shortcode ) {
2654
+ if ( $tag === $shortcode[2] ) {
2655
+ $result[] = $shortcode;
2656
+ } elseif ( !empty($shortcode[5]) && $found = ecwid_find_shortcodes( $shortcode[5], $tag ) ) {
2657
+ $result[] = $found;
2658
+ }
2659
+ }
2660
+
2661
+ if (empty($result)) {
2662
+ $result = false;
2663
+ }
2664
+ return $result;
2665
+ }
2666
+ return false;
2667
+ }
2668
+
2669
+ // Since we use shortcode regex in our own functions, we need it to be persistent
2670
+ function ecwid_get_shortcode_regex() {
2671
+ global $shortcode_tags;
2672
+ $tagnames = array_keys($shortcode_tags);
2673
+ $tagregexp = join( '|', array_map('preg_quote', $tagnames) );
2674
+
2675
+ // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
2676
+ // Also, see shortcode_unautop() and shortcode.js.
2677
+ return
2678
+ '\\[' // Opening bracket
2679
+ . '(\\[?)' // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
2680
+ . "($tagregexp)" // 2: Shortcode name
2681
+ . '(?![\\w-])' // Not followed by word character or hyphen
2682
+ . '(' // 3: Unroll the loop: Inside the opening shortcode tag
2683
+ . '[^\\]\\/]*' // Not a closing bracket or forward slash
2684
+ . '(?:'
2685
+ . '\\/(?!\\])' // A forward slash not followed by a closing bracket
2686
+ . '[^\\]\\/]*' // Not a closing bracket or forward slash
2687
+ . ')*?'
2688
+ . ')'
2689
+ . '(?:'
2690
+ . '(\\/)' // 4: Self closing tag ...
2691
+ . '\\]' // ... and closing bracket
2692
+ . '|'
2693
+ . '\\]' // Closing bracket
2694
+ . '(?:'
2695
+ . '(' // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
2696
+ . '[^\\[]*+' // Not an opening bracket
2697
+ . '(?:'
2698
+ . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
2699
+ . '[^\\[]*+' // Not an opening bracket
2700
+ . ')*+'
2701
+ . ')'
2702
+ . '\\[\\/\\2\\]' // Closing shortcode tag
2703
+ . ')?'
2704
+ . ')'
2705
+ . '(\\]?)'; // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
2706
+ }
2707
+
2708
+ ?>
fonts/ecwid-icons.svg CHANGED
@@ -1,17 +1,17 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
- <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Generated by IcoMoon</metadata>
5
- <defs>
6
- <font id="icomoon" horiz-adv-x="1024">
7
- <font-face units-per-em="1024" ascent="960" descent="-64" />
8
- <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
- <glyph unicode="&#xe600;" d="M930.909 605.091h-837.818c-20.945 0-46.545-17.222-46.545-38.633v-62.836c0-20.945 25.6-38.167 46.545-38.167h346.298v101.004h153.6v-101.004h337.92c20.945 0 46.545 17.222 46.545 38.633v60.044c0 20.945-25.6 40.96-46.545 40.96zM823.855 902.517c-50.269 50.269-89.833 31.651-115.433 0-46.545-58.647-95.418-103.331-125.207-128.465-6.982 7.913-17.222 13.033-28.393 13.033h-76.8c-11.171 0-21.411-5.12-28.393-13.033-29.789 25.135-78.662 69.818-125.207 128.465-25.6 31.651-65.164 50.269-115.433 0-180.131-180.131 59.113-227.607 98.676-227.607h84.247c0 0-202.938 88.436-140.102 164.771 26.531 32.116 48.407 8.844 83.316-13.964 34.444-22.342 79.127-44.684 109.382-58.647-2.793-5.585-5.12-11.636-5.12-18.153v-38.633c0-20.945 17.222-38.633 38.633-38.633h76.8c20.945 0 38.633 17.222 38.633 38.633v38.633c0 6.516-2.327 12.567-5.12 17.687 30.255 14.429 75.404 36.771 109.847 59.113 34.909 22.807 56.785 45.615 83.316 13.498 62.836-75.869-140.102-164.771-140.102-164.771h84.247c39.098 0.465 278.342 47.942 98.211 228.073zM439.389 410.997c0 0-307.2 0-345.833 0v-372.364c0-20.945 17.222-38.633 38.633-38.633h307.2v410.996zM592.989 410.997v-410.996h299.287c20.945 0 38.633 17.222 38.633 38.633v372.364c-38.633 0-337.92 0-337.92 0z" />
11
- <glyph unicode="&#xe601;" d="M349.556 716.335c21.876 0 41.425 16.291 41.425 38.633 0 101.935 16.291 126.604 118.225 126.604s118.225-24.669 118.225-126.604c0-21.876 19.084-38.633 41.425-38.633 21.876 0 38.633 16.291 38.633 38.633 0 63.302 2.793 206.196-198.284 206.196s-197.818-142.895-197.818-206.196c2.327-21.876 16.291-38.633 38.167-38.633zM1023.535 47.942l-126.604 602.298c-2.793 16.291-16.291 30.255-33.047 30.255h-703.767c-16.291 0-33.047-13.964-33.047-30.255l-126.604-602.298c-2.793-27.462 11.171-49.338 33.047-49.338h960.233c19.084 0 32.582 21.876 29.789 49.338zM333.265 521.31c-33.047 0-60.509 27.462-60.509 60.509s27.462 60.509 60.509 60.509 60.509-27.462 60.509-60.509-27.462-60.509-60.509-60.509zM690.735 521.31c-33.047 0-60.509 27.462-60.509 60.509s27.462 60.509 60.509 60.509c33.047 0 60.509-27.462 60.509-60.509s-27.462-60.509-60.509-60.509z" />
12
- <glyph unicode="&#xe602;" d="M976.524 884.364h-929.047c-26.065 0-47.476-23.273-47.476-54.458v-124.276c0-27.927 21.411-53.993 47.476-53.993h928.582c26.531 0 47.942 23.273 47.942 54.458v123.811c0 31.185-21.411 54.458-47.476 54.458zM976.524 558.546h-929.047c-26.065 0-47.476-23.273-47.476-54.458v-124.276c0-27.927 21.411-53.993 47.476-53.993h928.582c26.065 0 47.476 23.273 47.476 54.458v124.276c0.465 30.72-20.945 53.993-47.011 53.993zM976.524 232.728h-929.047c-26.065 0-47.476-23.273-47.476-54.458v-124.276c0-27.927 21.411-53.993 47.476-53.993h928.582c26.065 0 47.476 23.273 47.476 54.458v124.276c0.465 30.72-20.945 53.993-47.011 53.993z" />
13
- <glyph unicode="&#xe603;" d="M848.989 185.717c0-15.424-12.503-27.927-27.927-27.927s-27.927 12.503-27.927 27.927c0 15.424 12.503 27.927 27.927 27.927s27.927-12.503 27.927-27.927zM233.658 184.786c0-15.424-12.503-27.927-27.927-27.927s-27.927 12.503-27.927 27.927c0 15.424 12.503 27.927 27.927 27.927s27.927-12.503 27.927-27.927zM823.389 977.455h-622.778c-110.778 0-200.611-89.833-200.611-200.611v-623.244c0-110.313 89.833-200.145 200.611-200.145h623.244c110.778 0 200.611 89.833 200.611 200.611v622.778c-0.465 110.778-90.298 200.611-201.076 200.611zM642.793 683.288c21.411 0 39.098-17.222 39.098-39.098s-17.687-39.098-39.098-39.098c-21.411 0-39.098 17.222-39.098 39.098 0.465 21.876 17.687 39.098 39.098 39.098zM642.793 543.186c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.687-39.098-39.098-39.098s-39.098 17.222-39.098 39.098 17.687 39.098 39.098 39.098zM514.793 683.288c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098 0.465 21.876 17.687 39.098 39.098 39.098zM514.793 543.186c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098 0.465 21.876 17.687 39.098 39.098 39.098zM388.655 683.288c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098s17.222 39.098 39.098 39.098zM388.655 543.186c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098s17.222 39.098 39.098 39.098zM205.731 107.055c-42.822 0-77.731 34.909-77.731 77.731s34.909 78.196 77.731 78.196c43.287 0 78.196-34.909 78.196-78.196 0-42.822-34.909-77.731-78.196-77.731zM566.924 284.393c-37.236 0-51.665 15.825-53.527 20.945-1.862-5.12-15.36-20.945-52.596-20.945-39.098 0-40.495 0-81.92 0-48.873 0-124.742 25.6-147.084 103.796-22.807 77.731-54.458 194.56-68.887 246.691-14.429 52.596-16.291 56.32 8.844 56.32 22.807 0 70.284-3.258 85.644-56.32 14.895-53.062 44.684-153.6 56.32-192.698 16.756-55.855 63.302-61.44 93.556-61.44 40.96 0 63.302 1.396 63.302 33.978 13.033 0.465 33.047 0 42.356 0s29.324 0 42.356 0c0-31.185 22.342-34.444 63.302-33.978 47.011 0.465 84.247 12.567 101.935 71.215 15.825 53.527 59.578 221.556 77.731 294.633 10.705 43.753 63.767 48.873 84.713 48.873 24.669 0.465 15.825-20.015 1.862-75.404-15.36-62.371-56.785-237.847-82.851-317.905-25.6-77.265-88.436-118.225-155.927-118.225-41.425 0.465-40.495 0.465-79.127 0.465zM821.062 107.986c-43.287 0-78.196 34.909-78.196 78.196s34.909 78.196 78.196 78.196c42.822 0 78.196-34.909 78.196-78.196s-35.375-78.196-78.196-78.196z" />
14
- <glyph unicode="&#xe604;" d="M961.629 121.019c13.498-13.498 21.411-32.582 21.411-51.2 0-19.084-7.913-37.702-21.411-51.2-16.291-16.291-32.582-24.204-51.2-24.204-21.411 0-37.702 7.913-51.2 21.411l-200.145 197.353c-67.491-48.873-146.153-70.284-229.935-70.284-53.993 0-107.985 10.705-156.858 32.582-51.2 21.411-94.487 51.2-129.862 86.575-34.909 34.909-64.698 78.196-86.575 129.862s-32.582 102.865-32.582 156.858 10.705 107.985 32.582 156.858c21.411 51.2 51.2 94.487 86.575 129.862s78.196 64.698 129.862 86.575 102.865 32.582 156.858 32.582 107.985-10.705 156.858-32.582c51.2-21.411 94.487-51.2 129.862-86.575s64.698-78.196 86.575-129.862c21.411-51.2 32.582-102.865 32.582-156.858 0-83.782-24.204-161.978-70.284-229.935l196.887-197.818zM613.004 364.451c51.2 51.2 75.869 110.778 75.869 183.855 0 70.284-24.204 132.655-75.869 183.855s-110.778 75.869-183.855 75.869c-70.284 0-132.655-24.204-183.855-75.869s-75.404-110.778-75.404-183.855c0-70.284 24.204-132.655 75.869-183.855s110.778-75.869 183.855-75.869c69.818 0 132.189 26.996 183.389 75.869z" />
15
- <glyph unicode="&#xe605;" d="M50.735 50.735c0 9.309 7.447 16.756 16.756 16.756h890.88c9.309 0 16.756-7.447 16.756-16.756v-33.978c0-9.309-7.447-16.756-16.756-16.756h-891.345c-9.309 0-16.756 7.447-16.756 16.756v33.978zM977.455 608.815c-35.84 71.68-51.2 141.498-71.68 257.396 0 6.516-16.291 28.858-35.84 28.858h-715.869c-19.549 0-35.84-22.342-35.84-28.858 0 0-35.84-221.556-71.68-257.396 0-36.305 0-108.451 0-108.451s0.465-1.396 1.396-2.793h-1.396c0 0 3.258-17.687 25.6-27.927 3.258-1.862 6.516-3.258 10.24-4.189v-324.422c0-19.549 20.48-33.047 40.029-33.047h282.065v296.495c0 19.549 18.618 35.375 38.633 35.375h142.429c19.549 0 35.375-15.825 35.375-35.375v-296.495h284.858c19.549 0 35.375 13.498 35.375 33.047v324.422c28.393 4.655 35.84 33.047 35.84 33.047h-0.931c0.465 1.862 0.931 2.793 0.931 2.793s0.465 71.68 0.465 107.52zM327.215 250.415c0-19.549-8.844-35.84-28.393-35.84h-74.007c-19.549 0-28.858 16.291-28.858 35.84v143.36c0 19.549 9.309 35.84 28.858 35.84h74.007c19.549 0 28.393-16.291 28.393-35.84v-143.36zM827.113 250.415c0-19.549-7.913-35.84-27.462-35.84h-73.076c-19.549 0-28.858 16.291-28.858 35.84v143.36c0 19.549 9.309 35.84 28.858 35.84h73.076c19.549 0 27.462-16.291 27.462-35.84v-143.36zM833.629 829.44c0 0 38.167-181.993 61.44-220.625-35.375 0-97.745 0-97.745 0l-35.84 220.625h72.145zM898.327 572.975l-0.465-27.927c-3.258-24.669-24.204-43.753-49.804-43.753-27.927 0-50.269 16.756-50.269 44.684 0 0.931 1.396 26.996 1.396 26.996h99.142zM628.829 554.357v18.618h101.935l-0.465-28.393c-3.724-24.669-24.669-43.287-49.804-43.287-27.927 0-50.735 22.807-50.735 50.735 0 0.931 0 1.396 0.465 2.327h-1.396zM689.804 829.44c0 0 26.996-177.338 38.167-220.625 11.171 0-99.142 0-99.142 0l-10.705 220.625h71.68zM475.229 829.44h72.611l13.033-220.625h-97.745l12.102 220.625zM462.196 572.975h99.142l0.465-25.135c-1.862-26.065-23.738-46.545-50.269-46.545s-48.407 20.48-50.269 46.545l0.931 25.135zM331.869 829.44h71.68l-10.705-220.625c0 0-69.818 0-95.884 0 11.171 40.029 34.909 220.625 34.909 220.625zM294.633 572.975h99.142l0.931-18.618h-0.465c0-0.931 0.465-1.396 0.465-2.327 0-27.927-22.807-50.735-50.735-50.735-25.6 0-46.080 18.618-49.804 43.287l0.465 28.393zM190.371 829.44h69.818l-29.324-220.625c0 0-71.215 0-97.745 0 27.462 49.804 57.251 220.625 57.251 220.625zM126.604 572.975h99.142c0 0 0-20.015 0-20.945 0-27.927-22.807-50.735-50.735-50.735-24.669 0-45.615 17.687-49.804 41.425l1.396 30.255z" />
16
- <glyph unicode="&#xe606;" d="M865.745 109.848c-25.135-24.669-65.629-24.669-90.764 0l-267.636 263.913-272.756-268.567c-25.135-24.669-65.629-24.669-90.764 0s-25.135 64.698 0 89.367l268.567 264.378-269.033 264.378c-25.135 24.669-25.135 64.698 0 89.367s65.629 24.669 90.764 0l267.636-263.447 272.756 268.567c25.135 24.669 65.629 24.669 90.764 0s25.135-64.698 0-89.367l-268.567-264.378 268.567-264.844c25.135-24.669 25.135-64.698 0.465-89.367z" />
17
  </font></defs></svg>
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="icomoon" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
+ <glyph unicode="&#xe600;" d="M930.909 605.091h-837.818c-20.945 0-46.545-17.222-46.545-38.633v-62.836c0-20.945 25.6-38.167 46.545-38.167h346.298v101.004h153.6v-101.004h337.92c20.945 0 46.545 17.222 46.545 38.633v60.044c0 20.945-25.6 40.96-46.545 40.96zM823.855 902.517c-50.269 50.269-89.833 31.651-115.433 0-46.545-58.647-95.418-103.331-125.207-128.465-6.982 7.913-17.222 13.033-28.393 13.033h-76.8c-11.171 0-21.411-5.12-28.393-13.033-29.789 25.135-78.662 69.818-125.207 128.465-25.6 31.651-65.164 50.269-115.433 0-180.131-180.131 59.113-227.607 98.676-227.607h84.247c0 0-202.938 88.436-140.102 164.771 26.531 32.116 48.407 8.844 83.316-13.964 34.444-22.342 79.127-44.684 109.382-58.647-2.793-5.585-5.12-11.636-5.12-18.153v-38.633c0-20.945 17.222-38.633 38.633-38.633h76.8c20.945 0 38.633 17.222 38.633 38.633v38.633c0 6.516-2.327 12.567-5.12 17.687 30.255 14.429 75.404 36.771 109.847 59.113 34.909 22.807 56.785 45.615 83.316 13.498 62.836-75.869-140.102-164.771-140.102-164.771h84.247c39.098 0.465 278.342 47.942 98.211 228.073zM439.389 410.997c0 0-307.2 0-345.833 0v-372.364c0-20.945 17.222-38.633 38.633-38.633h307.2v410.996zM592.989 410.997v-410.996h299.287c20.945 0 38.633 17.222 38.633 38.633v372.364c-38.633 0-337.92 0-337.92 0z" />
11
+ <glyph unicode="&#xe601;" d="M349.556 716.335c21.876 0 41.425 16.291 41.425 38.633 0 101.935 16.291 126.604 118.225 126.604s118.225-24.669 118.225-126.604c0-21.876 19.084-38.633 41.425-38.633 21.876 0 38.633 16.291 38.633 38.633 0 63.302 2.793 206.196-198.284 206.196s-197.818-142.895-197.818-206.196c2.327-21.876 16.291-38.633 38.167-38.633zM1023.535 47.942l-126.604 602.298c-2.793 16.291-16.291 30.255-33.047 30.255h-703.767c-16.291 0-33.047-13.964-33.047-30.255l-126.604-602.298c-2.793-27.462 11.171-49.338 33.047-49.338h960.233c19.084 0 32.582 21.876 29.789 49.338zM333.265 521.31c-33.047 0-60.509 27.462-60.509 60.509s27.462 60.509 60.509 60.509 60.509-27.462 60.509-60.509-27.462-60.509-60.509-60.509zM690.735 521.31c-33.047 0-60.509 27.462-60.509 60.509s27.462 60.509 60.509 60.509c33.047 0 60.509-27.462 60.509-60.509s-27.462-60.509-60.509-60.509z" />
12
+ <glyph unicode="&#xe602;" d="M976.524 884.364h-929.047c-26.065 0-47.476-23.273-47.476-54.458v-124.276c0-27.927 21.411-53.993 47.476-53.993h928.582c26.531 0 47.942 23.273 47.942 54.458v123.811c0 31.185-21.411 54.458-47.476 54.458zM976.524 558.546h-929.047c-26.065 0-47.476-23.273-47.476-54.458v-124.276c0-27.927 21.411-53.993 47.476-53.993h928.582c26.065 0 47.476 23.273 47.476 54.458v124.276c0.465 30.72-20.945 53.993-47.011 53.993zM976.524 232.728h-929.047c-26.065 0-47.476-23.273-47.476-54.458v-124.276c0-27.927 21.411-53.993 47.476-53.993h928.582c26.065 0 47.476 23.273 47.476 54.458v124.276c0.465 30.72-20.945 53.993-47.011 53.993z" />
13
+ <glyph unicode="&#xe603;" d="M848.989 185.717c0-15.424-12.503-27.927-27.927-27.927s-27.927 12.503-27.927 27.927c0 15.424 12.503 27.927 27.927 27.927s27.927-12.503 27.927-27.927zM233.658 184.786c0-15.424-12.503-27.927-27.927-27.927s-27.927 12.503-27.927 27.927c0 15.424 12.503 27.927 27.927 27.927s27.927-12.503 27.927-27.927zM823.389 977.455h-622.778c-110.778 0-200.611-89.833-200.611-200.611v-623.244c0-110.313 89.833-200.145 200.611-200.145h623.244c110.778 0 200.611 89.833 200.611 200.611v622.778c-0.465 110.778-90.298 200.611-201.076 200.611zM642.793 683.288c21.411 0 39.098-17.222 39.098-39.098s-17.687-39.098-39.098-39.098c-21.411 0-39.098 17.222-39.098 39.098 0.465 21.876 17.687 39.098 39.098 39.098zM642.793 543.186c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.687-39.098-39.098-39.098s-39.098 17.222-39.098 39.098 17.687 39.098 39.098 39.098zM514.793 683.288c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098 0.465 21.876 17.687 39.098 39.098 39.098zM514.793 543.186c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098 0.465 21.876 17.687 39.098 39.098 39.098zM388.655 683.288c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098s17.222 39.098 39.098 39.098zM388.655 543.186c21.411 0 39.098-17.222 39.098-39.098 0-21.411-17.222-39.098-39.098-39.098-21.411 0-39.098 17.222-39.098 39.098s17.222 39.098 39.098 39.098zM205.731 107.055c-42.822 0-77.731 34.909-77.731 77.731s34.909 78.196 77.731 78.196c43.287 0 78.196-34.909 78.196-78.196 0-42.822-34.909-77.731-78.196-77.731zM566.924 284.393c-37.236 0-51.665 15.825-53.527 20.945-1.862-5.12-15.36-20.945-52.596-20.945-39.098 0-40.495 0-81.92 0-48.873 0-124.742 25.6-147.084 103.796-22.807 77.731-54.458 194.56-68.887 246.691-14.429 52.596-16.291 56.32 8.844 56.32 22.807 0 70.284-3.258 85.644-56.32 14.895-53.062 44.684-153.6 56.32-192.698 16.756-55.855 63.302-61.44 93.556-61.44 40.96 0 63.302 1.396 63.302 33.978 13.033 0.465 33.047 0 42.356 0s29.324 0 42.356 0c0-31.185 22.342-34.444 63.302-33.978 47.011 0.465 84.247 12.567 101.935 71.215 15.825 53.527 59.578 221.556 77.731 294.633 10.705 43.753 63.767 48.873 84.713 48.873 24.669 0.465 15.825-20.015 1.862-75.404-15.36-62.371-56.785-237.847-82.851-317.905-25.6-77.265-88.436-118.225-155.927-118.225-41.425 0.465-40.495 0.465-79.127 0.465zM821.062 107.986c-43.287 0-78.196 34.909-78.196 78.196s34.909 78.196 78.196 78.196c42.822 0 78.196-34.909 78.196-78.196s-35.375-78.196-78.196-78.196z" />
14
+ <glyph unicode="&#xe604;" d="M961.629 121.019c13.498-13.498 21.411-32.582 21.411-51.2 0-19.084-7.913-37.702-21.411-51.2-16.291-16.291-32.582-24.204-51.2-24.204-21.411 0-37.702 7.913-51.2 21.411l-200.145 197.353c-67.491-48.873-146.153-70.284-229.935-70.284-53.993 0-107.985 10.705-156.858 32.582-51.2 21.411-94.487 51.2-129.862 86.575-34.909 34.909-64.698 78.196-86.575 129.862s-32.582 102.865-32.582 156.858 10.705 107.985 32.582 156.858c21.411 51.2 51.2 94.487 86.575 129.862s78.196 64.698 129.862 86.575 102.865 32.582 156.858 32.582 107.985-10.705 156.858-32.582c51.2-21.411 94.487-51.2 129.862-86.575s64.698-78.196 86.575-129.862c21.411-51.2 32.582-102.865 32.582-156.858 0-83.782-24.204-161.978-70.284-229.935l196.887-197.818zM613.004 364.451c51.2 51.2 75.869 110.778 75.869 183.855 0 70.284-24.204 132.655-75.869 183.855s-110.778 75.869-183.855 75.869c-70.284 0-132.655-24.204-183.855-75.869s-75.404-110.778-75.404-183.855c0-70.284 24.204-132.655 75.869-183.855s110.778-75.869 183.855-75.869c69.818 0 132.189 26.996 183.389 75.869z" />
15
+ <glyph unicode="&#xe605;" d="M50.735 50.735c0 9.309 7.447 16.756 16.756 16.756h890.88c9.309 0 16.756-7.447 16.756-16.756v-33.978c0-9.309-7.447-16.756-16.756-16.756h-891.345c-9.309 0-16.756 7.447-16.756 16.756v33.978zM977.455 608.815c-35.84 71.68-51.2 141.498-71.68 257.396 0 6.516-16.291 28.858-35.84 28.858h-715.869c-19.549 0-35.84-22.342-35.84-28.858 0 0-35.84-221.556-71.68-257.396 0-36.305 0-108.451 0-108.451s0.465-1.396 1.396-2.793h-1.396c0 0 3.258-17.687 25.6-27.927 3.258-1.862 6.516-3.258 10.24-4.189v-324.422c0-19.549 20.48-33.047 40.029-33.047h282.065v296.495c0 19.549 18.618 35.375 38.633 35.375h142.429c19.549 0 35.375-15.825 35.375-35.375v-296.495h284.858c19.549 0 35.375 13.498 35.375 33.047v324.422c28.393 4.655 35.84 33.047 35.84 33.047h-0.931c0.465 1.862 0.931 2.793 0.931 2.793s0.465 71.68 0.465 107.52zM327.215 250.415c0-19.549-8.844-35.84-28.393-35.84h-74.007c-19.549 0-28.858 16.291-28.858 35.84v143.36c0 19.549 9.309 35.84 28.858 35.84h74.007c19.549 0 28.393-16.291 28.393-35.84v-143.36zM827.113 250.415c0-19.549-7.913-35.84-27.462-35.84h-73.076c-19.549 0-28.858 16.291-28.858 35.84v143.36c0 19.549 9.309 35.84 28.858 35.84h73.076c19.549 0 27.462-16.291 27.462-35.84v-143.36zM833.629 829.44c0 0 38.167-181.993 61.44-220.625-35.375 0-97.745 0-97.745 0l-35.84 220.625h72.145zM898.327 572.975l-0.465-27.927c-3.258-24.669-24.204-43.753-49.804-43.753-27.927 0-50.269 16.756-50.269 44.684 0 0.931 1.396 26.996 1.396 26.996h99.142zM628.829 554.357v18.618h101.935l-0.465-28.393c-3.724-24.669-24.669-43.287-49.804-43.287-27.927 0-50.735 22.807-50.735 50.735 0 0.931 0 1.396 0.465 2.327h-1.396zM689.804 829.44c0 0 26.996-177.338 38.167-220.625 11.171 0-99.142 0-99.142 0l-10.705 220.625h71.68zM475.229 829.44h72.611l13.033-220.625h-97.745l12.102 220.625zM462.196 572.975h99.142l0.465-25.135c-1.862-26.065-23.738-46.545-50.269-46.545s-48.407 20.48-50.269 46.545l0.931 25.135zM331.869 829.44h71.68l-10.705-220.625c0 0-69.818 0-95.884 0 11.171 40.029 34.909 220.625 34.909 220.625zM294.633 572.975h99.142l0.931-18.618h-0.465c0-0.931 0.465-1.396 0.465-2.327 0-27.927-22.807-50.735-50.735-50.735-25.6 0-46.080 18.618-49.804 43.287l0.465 28.393zM190.371 829.44h69.818l-29.324-220.625c0 0-71.215 0-97.745 0 27.462 49.804 57.251 220.625 57.251 220.625zM126.604 572.975h99.142c0 0 0-20.015 0-20.945 0-27.927-22.807-50.735-50.735-50.735-24.669 0-45.615 17.687-49.804 41.425l1.396 30.255z" />
16
+ <glyph unicode="&#xe606;" d="M865.745 109.848c-25.135-24.669-65.629-24.669-90.764 0l-267.636 263.913-272.756-268.567c-25.135-24.669-65.629-24.669-90.764 0s-25.135 64.698 0 89.367l268.567 264.378-269.033 264.378c-25.135 24.669-25.135 64.698 0 89.367s65.629 24.669 90.764 0l267.636-263.447 272.756 268.567c25.135 24.669 65.629 24.669 90.764 0s25.135-64.698 0-89.367l-268.567-264.378 268.567-264.844c25.135-24.669 25.135-64.698 0.465-89.367z" />
17
  </font></defs></svg>
images/add-store.svg CHANGED
@@ -1,40 +1,40 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
4
- <path class="categories" fill="#D1ECF5" d="M41,49.1H2c-1.1,0-2,0.9-2,2.1V56c0,1.1,0.9,2.1,2,2.1H41c1.1,0,2-0.9,2-2.1v-4.8C43,50,42.1,49.1,41,49.1z"></path>
5
- <path class="categories" fill="#D1ECF5" d="M91,49H52c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H91c1.1,0,2-0.9,2-2.1v-4.8C93,49.9,92.1,49,91,49z"></path>
6
- <path class="categories" fill="#D1ECF5" d="M141,49H102c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H141c1.1,0,2-0.9,2-2.1v-4.8
7
- C143,49.9,142.1,49,141,49z"></path>
8
-
9
- <path class="minicart" fill="#D1ECF5" d="M115.2,8.9c0.8,0,1.5-0.6,1.5-1.4c0-3.7,0.6-4.6,4.3-4.6c3.7,0,4.3,0.9,4.3,4.6c0,0.8,0.7,1.4,1.5,1.4
10
- c0.8,0,1.4-0.6,1.4-1.4c0-2.3,0.1-7.5-7.2-7.5c-7.3,0-7.2,5.2-7.2,7.5C113.9,8.3,114.4,8.9,115.2,8.9z"></path>
11
- <path class="minicart" fill="#D1ECF5" d="M139.7,33.2l-4.6-21.9c-0.1-0.6-0.6-1.1-1.2-1.1h-25.6c-0.6,0-1.2,0.5-1.2,1.1l-4.6,21.9
12
- c-0.1,1,0.4,1.8,1.2,1.8h34.9C139.3,35,139.8,34.2,139.7,33.2z M114.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2s2.2,1,2.2,2.2
13
- S115.8,16,114.6,16z M127.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2c1.2,0,2.2,1,2.2,2.2S128.8,16,127.6,16z"></path>
14
-
15
- <path class="productbrowser" fill="#D1ECF5" d="M40.1,72H2.9C1.4,72,0,73.4,0,74.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
16
- C43,73.4,41.6,72,40.1,72z M30.1,112.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
17
- c1.5,0,1.4,0.1,1.4,1.5V112.6z"></path>
18
- <path class="productbrowser" fill="#D1ECF5" d="M90.1,72H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
19
- C93,73.4,91.6,72,90.1,72z M80.1,112.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
20
- c1.5,0,1.4,0.1,1.4,1.5V112.6z"></path>
21
- <path class="productbrowser" fill="#D1ECF5" d="M140.1,72h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
22
- C143,73.4,141.6,72,140.1,72z M130.1,112.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
23
- c1.5,0,1.4,0.1,1.4,1.5V112.6z"></path>
24
- <path class="productbrowser" fill="#D1ECF5" d="M40.1,123H2.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
25
- C43,124.4,41.6,123,40.1,123z M30.1,163.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
26
- c1.5,0,1.4,0.1,1.4,1.5V163.6z"></path>
27
- <path class="productbrowser" fill="#D1ECF5" d="M90.1,123H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
28
- C93,124.4,91.6,123,90.1,123z M80.1,163.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
29
- c1.5,0,1.4,0.1,1.4,1.5V163.6z"></path>
30
- <path class="productbrowser" fill="#D1ECF5" d="M140.1,123h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
31
- C143,124.4,141.6,123,140.1,123z M130.1,163.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
32
- c1.5,0,1.4,0.1,1.4,1.5V163.6z"></path>
33
-
34
- <path class="search" fill="#D1ECF5" d="M38.2,31.3c0.5,0.5,0.8,1.2,0.8,1.9c0,0.7-0.3,1.4-0.8,1.9C37.6,35.7,37,36,36.3,36c-0.8,0-1.4-0.3-1.9-0.8
35
- L27,27.9c-2.5,1.8-5.4,2.6-8.5,2.6c-2,0-4-0.4-5.8-1.2c-1.9-0.8-3.5-1.9-4.8-3.2c-1.3-1.3-2.4-2.9-3.2-4.8c-0.8-1.9-1.2-3.8-1.2-5.8
36
- s0.4-4,1.2-5.8c0.8-1.9,1.9-3.5,3.2-4.8c1.3-1.3,2.9-2.4,4.8-3.2c1.9-0.8,3.8-1.2,5.8-1.2s4,0.4,5.8,1.2c1.9,0.8,3.5,1.9,4.8,3.2
37
- c1.3,1.3,2.4,2.9,3.2,4.8c0.8,1.9,1.2,3.8,1.2,5.8c0,3.1-0.9,6-2.6,8.5L38.2,31.3L38.2,31.3z M25.3,22.3c1.9-1.9,2.8-4.1,2.8-6.8
38
- c0-2.6-0.9-4.9-2.8-6.8c-1.9-1.9-4.1-2.8-6.8-2.8c-2.6,0-4.9,0.9-6.8,2.8c-1.9,1.9-2.8,4.1-2.8,6.8c0,2.6,0.9,4.9,2.8,6.8
39
- c1.9,1.9,4.1,2.8,6.8,2.8C21.1,25.1,23.4,24.1,25.3,22.3z"></path>
40
  </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
4
+ <path class="categories" fill="#D1ECF5" d="M41,49.1H2c-1.1,0-2,0.9-2,2.1V56c0,1.1,0.9,2.1,2,2.1H41c1.1,0,2-0.9,2-2.1v-4.8C43,50,42.1,49.1,41,49.1z"></path>
5
+ <path class="categories" fill="#D1ECF5" d="M91,49H52c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H91c1.1,0,2-0.9,2-2.1v-4.8C93,49.9,92.1,49,91,49z"></path>
6
+ <path class="categories" fill="#D1ECF5" d="M141,49H102c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H141c1.1,0,2-0.9,2-2.1v-4.8
7
+ C143,49.9,142.1,49,141,49z"></path>
8
+
9
+ <path class="minicart" fill="#D1ECF5" d="M115.2,8.9c0.8,0,1.5-0.6,1.5-1.4c0-3.7,0.6-4.6,4.3-4.6c3.7,0,4.3,0.9,4.3,4.6c0,0.8,0.7,1.4,1.5,1.4
10
+ c0.8,0,1.4-0.6,1.4-1.4c0-2.3,0.1-7.5-7.2-7.5c-7.3,0-7.2,5.2-7.2,7.5C113.9,8.3,114.4,8.9,115.2,8.9z"></path>
11
+ <path class="minicart" fill="#D1ECF5" d="M139.7,33.2l-4.6-21.9c-0.1-0.6-0.6-1.1-1.2-1.1h-25.6c-0.6,0-1.2,0.5-1.2,1.1l-4.6,21.9
12
+ c-0.1,1,0.4,1.8,1.2,1.8h34.9C139.3,35,139.8,34.2,139.7,33.2z M114.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2s2.2,1,2.2,2.2
13
+ S115.8,16,114.6,16z M127.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2c1.2,0,2.2,1,2.2,2.2S128.8,16,127.6,16z"></path>
14
+
15
+ <path class="productbrowser" fill="#D1ECF5" d="M40.1,72H2.9C1.4,72,0,73.4,0,74.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
16
+ C43,73.4,41.6,72,40.1,72z M30.1,112.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
17
+ c1.5,0,1.4,0.1,1.4,1.5V112.6z"></path>
18
+ <path class="productbrowser" fill="#D1ECF5" d="M90.1,72H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
19
+ C93,73.4,91.6,72,90.1,72z M80.1,112.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
20
+ c1.5,0,1.4,0.1,1.4,1.5V112.6z"></path>
21
+ <path class="productbrowser" fill="#D1ECF5" d="M140.1,72h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
22
+ C143,73.4,141.6,72,140.1,72z M130.1,112.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
23
+ c1.5,0,1.4,0.1,1.4,1.5V112.6z"></path>
24
+ <path class="productbrowser" fill="#D1ECF5" d="M40.1,123H2.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
25
+ C43,124.4,41.6,123,40.1,123z M30.1,163.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
26
+ c1.5,0,1.4,0.1,1.4,1.5V163.6z"></path>
27
+ <path class="productbrowser" fill="#D1ECF5" d="M90.1,123H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
28
+ C93,124.4,91.6,123,90.1,123z M80.1,163.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
29
+ c1.5,0,1.4,0.1,1.4,1.5V163.6z"></path>
30
+ <path class="productbrowser" fill="#D1ECF5" d="M140.1,123h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
31
+ C143,124.4,141.6,123,140.1,123z M130.1,163.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
32
+ c1.5,0,1.4,0.1,1.4,1.5V163.6z"></path>
33
+
34
+ <path class="search" fill="#D1ECF5" d="M38.2,31.3c0.5,0.5,0.8,1.2,0.8,1.9c0,0.7-0.3,1.4-0.8,1.9C37.6,35.7,37,36,36.3,36c-0.8,0-1.4-0.3-1.9-0.8
35
+ L27,27.9c-2.5,1.8-5.4,2.6-8.5,2.6c-2,0-4-0.4-5.8-1.2c-1.9-0.8-3.5-1.9-4.8-3.2c-1.3-1.3-2.4-2.9-3.2-4.8c-0.8-1.9-1.2-3.8-1.2-5.8
36
+ s0.4-4,1.2-5.8c0.8-1.9,1.9-3.5,3.2-4.8c1.3-1.3,2.9-2.4,4.8-3.2c1.9-0.8,3.8-1.2,5.8-1.2s4,0.4,5.8,1.2c1.9,0.8,3.5,1.9,4.8,3.2
37
+ c1.3,1.3,2.4,2.9,3.2,4.8c0.8,1.9,1.2,3.8,1.2,5.8c0,3.1-0.9,6-2.6,8.5L38.2,31.3L38.2,31.3z M25.3,22.3c1.9-1.9,2.8-4.1,2.8-6.8
38
+ c0-2.6-0.9-4.9-2.8-6.8c-1.9-1.9-4.1-2.8-6.8-2.8c-2.6,0-4.9,0.9-6.8,2.8c-1.9,1.9-2.8,4.1-2.8,6.8c0,2.6,0.9,4.9,2.8,6.8
39
+ c1.9,1.9,4.1,2.8,6.8,2.8C21.1,25.1,23.4,24.1,25.3,22.3z"></path>
40
  </svg>
images/categories.svg CHANGED
@@ -1,11 +1,11 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
- <path fill="#D1ECF5" d="M41,49.1H2c-1.1,0-2,0.9-2,2.1V56c0,1.1,0.9,2.1,2,2.1H41c1.1,0,2-0.9,2-2.1v-4.8C43,50,42.1,49.1,41,49.1z"
7
- />
8
- <path fill="#D1ECF5" d="M91,49H52c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H91c1.1,0,2-0.9,2-2.1v-4.8C93,49.9,92.1,49,91,49z"/>
9
- <path fill="#D1ECF5" d="M141,49H102c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H141c1.1,0,2-0.9,2-2.1v-4.8
10
- C143,49.9,142.1,49,141,49z"/>
11
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
+ <path fill="#D1ECF5" d="M41,49.1H2c-1.1,0-2,0.9-2,2.1V56c0,1.1,0.9,2.1,2,2.1H41c1.1,0,2-0.9,2-2.1v-4.8C43,50,42.1,49.1,41,49.1z"
7
+ />
8
+ <path fill="#D1ECF5" d="M91,49H52c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H91c1.1,0,2-0.9,2-2.1v-4.8C93,49.9,92.1,49,91,49z"/>
9
+ <path fill="#D1ECF5" d="M141,49H102c-1.1,0-2,0.9-2,2.1v4.8c0,1.1,0.9,2.1,2,2.1H141c1.1,0,2-0.9,2-2.1v-4.8
10
+ C143,49.9,142.1,49,141,49z"/>
11
+ </svg>
images/ecwid_logo_symbol_RGB.svg CHANGED
@@ -1,37 +1,37 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
3
- width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
4
- <g>
5
- <path fill="#007AC9" d="M488.655,395.221c0,51.613-41.821,93.435-93.435,93.435H104.784c-51.595,0-93.44-41.821-93.44-93.435
6
- V104.792c0-51.595,41.846-93.447,93.44-93.447h290.437c51.613,0,93.435,41.852,93.435,93.447V395.221z"/>
7
- <g>
8
- <path fill="#FFFFFF" d="M385.354,279.303c12.294-37.304,31.492-119.104,38.734-148.208c6.396-25.745,10.59-35.345-0.971-35.151
9
- c-9.681,0.168-34.354,2.532-39.469,22.901c-8.498,34.025-28.816,112.391-36.257,137.288c-8.188,27.375-25.595,33.1-47.521,33.299
10
- c-19.087,0.137-29.589-1.331-29.589-15.864c-6.097-0.125-15.491-0.051-19.809-0.024c-4.306-0.025-13.701-0.101-19.798,0.024
11
- c0,15.292-10.501,15.864-29.602,15.864c-14.185,0-35.724-2.649-43.587-28.655c-5.5-18.13-19.237-65.052-26.267-89.838
12
- c-7.08-24.774-29.247-26.18-39.892-26.217c-11.69-0.05-10.764,1.841-4.007,26.217c6.731,24.388,21.527,78.776,31.873,115.221
13
- c10.372,36.435,45.883,48.315,68.554,48.315c19.473,0,20.17,0,38.287,0c17.396,0,23.505-7.453,24.438-9.817
14
- c0.933,2.364,7.651,9.817,25.034,9.817c18.154,0,17.656,0,37.117,0C344.168,334.475,373.521,315.312,385.354,279.303z"/>
15
- <path fill="#FFFFFF" d="M192.415,184.674c10.017,0,18.13-8.125,18.13-18.117c0-10.029-8.113-18.154-18.13-18.154
16
- c-10.029,0-18.129,8.125-18.129,18.154C174.285,176.549,182.385,184.674,192.415,184.674z"/>
17
- <path fill="#FFFFFF" d="M251.344,184.674c10.004,0,18.154-8.125,18.154-18.117c0-10.029-8.15-18.154-18.154-18.154
18
- c-10.004,0-18.129,8.125-18.129,18.154C233.214,176.549,241.339,184.674,251.344,184.674z"/>
19
- <path fill="#FFFFFF" d="M311.045,184.674c9.992,0,18.143-8.125,18.143-18.117c0-10.029-8.148-18.154-18.143-18.154
20
- c-10.017,0-18.129,8.125-18.129,18.154C292.916,176.549,301.028,184.674,311.045,184.674z"/>
21
- <path fill="#FFFFFF" d="M192.415,250c10.017,0,18.13-8.125,18.13-18.129c0-10.017-8.113-18.143-18.13-18.143
22
- c-10.029,0-18.129,8.125-18.129,18.143C174.285,241.875,182.385,250,192.415,250z"/>
23
- <path fill="#FFFFFF" d="M251.344,250c10.004,0,18.154-8.125,18.154-18.129c0-10.017-8.15-18.143-18.154-18.143
24
- c-10.004,0-18.129,8.125-18.129,18.143C233.214,241.875,241.339,250,251.344,250z"/>
25
- <path fill="#FFFFFF" d="M311.045,250c9.992,0,18.143-8.125,18.143-18.129c0-10.017-8.148-18.143-18.143-18.143
26
- c-10.017,0-18.129,8.125-18.129,18.143C292.916,241.875,301.028,250,311.045,250z"/>
27
- <path fill="#FFFFFF" d="M107.317,344.441c-20.046,0-36.34,16.312-36.34,36.384c0,20.058,16.294,36.321,36.34,36.321
28
- c20.095,0,36.358-16.264,36.358-36.321C143.675,360.756,127.413,344.441,107.317,344.441z M107.317,393.865
29
- c-7.18,0-13.028-5.836-13.028-13.04c0-7.205,5.848-13.04,13.028-13.04c7.204,0,13.046,5.835,13.046,13.04
30
- C120.363,388.029,114.521,393.865,107.317,393.865z"/>
31
- <path fill="#FFFFFF" d="M394.051,344.006c-20.069,0-36.369,16.289-36.369,36.348c0,20.045,16.3,36.383,36.369,36.383
32
- c20.07,0,36.347-16.338,36.347-36.383C430.397,360.295,414.123,344.006,394.051,344.006z M394.051,393.393
33
- c-7.191,0-13.039-5.836-13.039-13.04c0-7.205,5.848-13.041,13.039-13.041c7.192,0,13.041,5.836,13.041,13.041
34
- C407.092,387.557,401.244,393.393,394.051,393.393z"/>
35
- </g>
36
- </g>
37
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
3
+ width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
4
+ <g>
5
+ <path fill="#007AC9" d="M488.655,395.221c0,51.613-41.821,93.435-93.435,93.435H104.784c-51.595,0-93.44-41.821-93.44-93.435
6
+ V104.792c0-51.595,41.846-93.447,93.44-93.447h290.437c51.613,0,93.435,41.852,93.435,93.447V395.221z"/>
7
+ <g>
8
+ <path fill="#FFFFFF" d="M385.354,279.303c12.294-37.304,31.492-119.104,38.734-148.208c6.396-25.745,10.59-35.345-0.971-35.151
9
+ c-9.681,0.168-34.354,2.532-39.469,22.901c-8.498,34.025-28.816,112.391-36.257,137.288c-8.188,27.375-25.595,33.1-47.521,33.299
10
+ c-19.087,0.137-29.589-1.331-29.589-15.864c-6.097-0.125-15.491-0.051-19.809-0.024c-4.306-0.025-13.701-0.101-19.798,0.024
11
+ c0,15.292-10.501,15.864-29.602,15.864c-14.185,0-35.724-2.649-43.587-28.655c-5.5-18.13-19.237-65.052-26.267-89.838
12
+ c-7.08-24.774-29.247-26.18-39.892-26.217c-11.69-0.05-10.764,1.841-4.007,26.217c6.731,24.388,21.527,78.776,31.873,115.221
13
+ c10.372,36.435,45.883,48.315,68.554,48.315c19.473,0,20.17,0,38.287,0c17.396,0,23.505-7.453,24.438-9.817
14
+ c0.933,2.364,7.651,9.817,25.034,9.817c18.154,0,17.656,0,37.117,0C344.168,334.475,373.521,315.312,385.354,279.303z"/>
15
+ <path fill="#FFFFFF" d="M192.415,184.674c10.017,0,18.13-8.125,18.13-18.117c0-10.029-8.113-18.154-18.13-18.154
16
+ c-10.029,0-18.129,8.125-18.129,18.154C174.285,176.549,182.385,184.674,192.415,184.674z"/>
17
+ <path fill="#FFFFFF" d="M251.344,184.674c10.004,0,18.154-8.125,18.154-18.117c0-10.029-8.15-18.154-18.154-18.154
18
+ c-10.004,0-18.129,8.125-18.129,18.154C233.214,176.549,241.339,184.674,251.344,184.674z"/>
19
+ <path fill="#FFFFFF" d="M311.045,184.674c9.992,0,18.143-8.125,18.143-18.117c0-10.029-8.148-18.154-18.143-18.154
20
+ c-10.017,0-18.129,8.125-18.129,18.154C292.916,176.549,301.028,184.674,311.045,184.674z"/>
21
+ <path fill="#FFFFFF" d="M192.415,250c10.017,0,18.13-8.125,18.13-18.129c0-10.017-8.113-18.143-18.13-18.143
22
+ c-10.029,0-18.129,8.125-18.129,18.143C174.285,241.875,182.385,250,192.415,250z"/>
23
+ <path fill="#FFFFFF" d="M251.344,250c10.004,0,18.154-8.125,18.154-18.129c0-10.017-8.15-18.143-18.154-18.143
24
+ c-10.004,0-18.129,8.125-18.129,18.143C233.214,241.875,241.339,250,251.344,250z"/>
25
+ <path fill="#FFFFFF" d="M311.045,250c9.992,0,18.143-8.125,18.143-18.129c0-10.017-8.148-18.143-18.143-18.143
26
+ c-10.017,0-18.129,8.125-18.129,18.143C292.916,241.875,301.028,250,311.045,250z"/>
27
+ <path fill="#FFFFFF" d="M107.317,344.441c-20.046,0-36.34,16.312-36.34,36.384c0,20.058,16.294,36.321,36.34,36.321
28
+ c20.095,0,36.358-16.264,36.358-36.321C143.675,360.756,127.413,344.441,107.317,344.441z M107.317,393.865
29
+ c-7.18,0-13.028-5.836-13.028-13.04c0-7.205,5.848-13.04,13.028-13.04c7.204,0,13.046,5.835,13.046,13.04
30
+ C120.363,388.029,114.521,393.865,107.317,393.865z"/>
31
+ <path fill="#FFFFFF" d="M394.051,344.006c-20.069,0-36.369,16.289-36.369,36.348c0,20.045,16.3,36.383,36.369,36.383
32
+ c20.07,0,36.347-16.338,36.347-36.383C430.397,360.295,414.123,344.006,394.051,344.006z M394.051,393.393
33
+ c-7.191,0-13.039-5.836-13.039-13.04c0-7.205,5.848-13.041,13.039-13.041c7.192,0,13.041,5.836,13.041,13.041
34
+ C407.092,387.557,401.244,393.393,394.051,393.393z"/>
35
+ </g>
36
+ </g>
37
+ </svg>
images/grid.svg CHANGED
@@ -1,23 +1,23 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="102px" height="68px" viewBox="0 0 102 68" enable-background="new 0 0 102 68" xml:space="preserve">
6
- <path fill="#CDCDCD" d="M29,1H3C2.005,1,1,1.99,1,3v27c0,1.012,1.006,2,2,2h26c0.995,0,2-0.988,2-2V3C31,1.99,29.995,1,29,1z M22,29
7
- c0,0.929,0.017,1-1,1H11c-1.016,0-1-0.071-1-1v-3c0-0.929-0.016-1,1-1h10c1.017,0,1,0.071,1,1V29z"/>
8
- <path fill="#CDCDCD" d="M64.199,1h-26.4C36.806,1,36,1.82,36,2.83v27.34c0,1.012,0.807,1.83,1.8,1.83h26.4
9
- C65.193,32,66,31.182,66,30.17V2.83C66,1.82,65.193,1,64.199,1z M57,28.317C57,29.246,56.177,30,55.16,30h-8.322
10
- C45.822,30,45,29.246,45,28.317v-1.636c0-0.929,0.823-1.682,1.839-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V28.317z"/>
11
- <path fill="#CDCDCD" d="M99.199,1H72.801C71.807,1,71,1.82,71,2.83v27.34c0,1.012,0.807,1.83,1.801,1.83h26.398
12
- c0.994,0,1.801-0.818,1.801-1.83V2.83C101,1.82,100.193,1,99.199,1z M92,28.317C92,29.246,91.177,30,90.16,30h-8.322
13
- C80.822,30,80,29.246,80,28.317v-1.636c0-0.929,0.822-1.682,1.838-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V28.317z"/>
14
- <path fill="#CDCDCD" d="M29.2,36h-26.4C1.806,36,1,36.82,1,37.83V64c0,1.012,0.807,1.83,1.8,1.83h26.399c0.995,0,1.8-0.818,1.8-1.83
15
- V37.83C31,36.82,30.193,36,29.2,36z M22,62.146c0,0.93-0.823,1.684-1.84,1.684h-8.321c-1.016,0-1.839-0.754-1.839-1.684v-1.636
16
- c0-0.929,0.823-1.682,1.839-1.682h8.321c1.017,0,1.84,0.753,1.84,1.682V62.146z"/>
17
- <path fill="#CDCDCD" d="M64.199,36h-26.4c-0.994,0-1.8,0.82-1.8,1.83V64c0,1.012,0.807,1.83,1.8,1.83h26.4
18
- C65.193,65.83,66,65.012,66,64V37.83C66,36.82,65.193,36,64.199,36z M57,62.146c0,0.93-0.823,1.684-1.84,1.684h-8.322
19
- c-1.016,0-1.839-0.754-1.839-1.684v-1.636c0-0.929,0.823-1.682,1.839-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V62.146z"/>
20
- <path fill="#CDCDCD" d="M99.199,36H72.801C71.807,36,71,36.82,71,37.83V64c0,1.012,0.807,1.83,1.801,1.83h26.398
21
- c0.994,0,1.801-0.818,1.801-1.83V37.83C101,36.82,100.193,36,99.199,36z M92,62.146c0,0.93-0.823,1.684-1.84,1.684h-8.322
22
- c-1.016,0-1.838-0.754-1.838-1.684v-1.636c0-0.929,0.822-1.682,1.838-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V62.146z"/>
23
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
+ <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="102px" height="68px" viewBox="0 0 102 68" enable-background="new 0 0 102 68" xml:space="preserve">
6
+ <path fill="#CDCDCD" d="M29,1H3C2.005,1,1,1.99,1,3v27c0,1.012,1.006,2,2,2h26c0.995,0,2-0.988,2-2V3C31,1.99,29.995,1,29,1z M22,29
7
+ c0,0.929,0.017,1-1,1H11c-1.016,0-1-0.071-1-1v-3c0-0.929-0.016-1,1-1h10c1.017,0,1,0.071,1,1V29z"/>
8
+ <path fill="#CDCDCD" d="M64.199,1h-26.4C36.806,1,36,1.82,36,2.83v27.34c0,1.012,0.807,1.83,1.8,1.83h26.4
9
+ C65.193,32,66,31.182,66,30.17V2.83C66,1.82,65.193,1,64.199,1z M57,28.317C57,29.246,56.177,30,55.16,30h-8.322
10
+ C45.822,30,45,29.246,45,28.317v-1.636c0-0.929,0.823-1.682,1.839-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V28.317z"/>
11
+ <path fill="#CDCDCD" d="M99.199,1H72.801C71.807,1,71,1.82,71,2.83v27.34c0,1.012,0.807,1.83,1.801,1.83h26.398
12
+ c0.994,0,1.801-0.818,1.801-1.83V2.83C101,1.82,100.193,1,99.199,1z M92,28.317C92,29.246,91.177,30,90.16,30h-8.322
13
+ C80.822,30,80,29.246,80,28.317v-1.636c0-0.929,0.822-1.682,1.838-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V28.317z"/>
14
+ <path fill="#CDCDCD" d="M29.2,36h-26.4C1.806,36,1,36.82,1,37.83V64c0,1.012,0.807,1.83,1.8,1.83h26.399c0.995,0,1.8-0.818,1.8-1.83
15
+ V37.83C31,36.82,30.193,36,29.2,36z M22,62.146c0,0.93-0.823,1.684-1.84,1.684h-8.321c-1.016,0-1.839-0.754-1.839-1.684v-1.636
16
+ c0-0.929,0.823-1.682,1.839-1.682h8.321c1.017,0,1.84,0.753,1.84,1.682V62.146z"/>
17
+ <path fill="#CDCDCD" d="M64.199,36h-26.4c-0.994,0-1.8,0.82-1.8,1.83V64c0,1.012,0.807,1.83,1.8,1.83h26.4
18
+ C65.193,65.83,66,65.012,66,64V37.83C66,36.82,65.193,36,64.199,36z M57,62.146c0,0.93-0.823,1.684-1.84,1.684h-8.322
19
+ c-1.016,0-1.839-0.754-1.839-1.684v-1.636c0-0.929,0.823-1.682,1.839-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V62.146z"/>
20
+ <path fill="#CDCDCD" d="M99.199,36H72.801C71.807,36,71,36.82,71,37.83V64c0,1.012,0.807,1.83,1.801,1.83h26.398
21
+ c0.994,0,1.801-0.818,1.801-1.83V37.83C101,36.82,100.193,36,99.199,36z M92,62.146c0,0.93-0.823,1.684-1.84,1.684h-8.322
22
+ c-1.016,0-1.838-0.754-1.838-1.684v-1.636c0-0.929,0.822-1.682,1.838-1.682h8.322c1.017,0,1.84,0.753,1.84,1.682V62.146z"/>
23
+ </svg>
images/landing/global.svg CHANGED
@@ -1,5 +1,5 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
4
- <path fill-rule="evenodd" clip-rule="evenodd" fill="#70B4D5" d="M37.5,73.056c-19.637,0-35.556-15.918-35.556-35.557 c0-19.636,15.919-35.555,35.556-35.555s35.556,15.918,35.556,35.555C73.056,57.138,57.137,73.056,37.5,73.056z M61.938,59.137 c4.84-5.474,7.891-12.569,8.188-20.382H56.108c-0.119,6.328-1.131,12.22-2.794,17.268c5.389,1.432,8.624,3.076,8.624,3.076V59.137z M59.889,61.259c-1.645-0.711-4.23-1.697-7.534-2.576c-1.779,4.437-4.102,8.055-6.786,10.49 C51.029,67.786,55.921,65.007,59.889,61.259z M38.817,70.056c4.745-0.702,8.65-5.162,11.208-11.943 c-3.249-0.725-7.036-1.274-11.208-1.381V70.056z M38.817,53.967c4.562,0.103,8.663,0.706,12.101,1.476 c1.443-4.788,2.291-10.479,2.392-16.688H38.817V53.967z M53.307,35.995c-0.123-6.223-1.011-11.92-2.496-16.698 c-3.413,0.762-7.476,1.358-11.993,1.464v15.234H53.307z M36.058,35.995V20.762c-4.475-0.103-8.508-0.685-11.912-1.433 c-1.465,4.771-2.332,10.458-2.452,16.666H36.058z M21.691,38.755c0.1,6.202,0.946,11.889,2.387,16.674 c3.415-0.758,7.473-1.351,11.98-1.46V38.755H21.691z M36.058,70.044V56.73c-4.123,0.101-7.872,0.635-11.094,1.347 C27.5,64.821,31.364,69.281,36.058,70.044z M29.432,69.173c-2.692-2.442-5.02-6.074-6.8-10.528c-3.305,0.873-5.894,1.857-7.56,2.575 C19.047,64.987,23.953,67.781,29.432,69.173z M13.001,59.068c0.353-0.174,3.539-1.71,8.678-3.063 c-1.66-5.045-2.669-10.93-2.788-17.25H4.875C5.17,46.535,8.197,53.604,13.001,59.068z M4.885,35.995h14.012 c0.142-6.324,1.176-12.205,2.86-17.234c-4.661-1.216-7.744-2.59-8.607-2.998C8.311,21.191,5.239,28.232,4.885,35.995z M15.247,13.611c1.697,0.72,4.248,1.672,7.473,2.515c1.77-4.351,4.065-7.898,6.712-10.3C24.033,7.197,19.19,9.929,15.247,13.611z M25.056,16.688c3.202,0.699,6.921,1.218,11.002,1.313V4.955C31.419,5.708,27.593,10.078,25.056,16.688z M38.817,4.945v13.052 c4.113-0.109,7.852-0.648,11.066-1.361C47.307,10.007,43.439,5.646,38.817,4.945z M52.254,16.058 c3.227-0.856,5.765-1.813,7.421-2.521c-3.929-3.646-8.744-6.348-14.106-7.71C48.201,8.215,50.488,11.738,52.254,16.058z M61.777,15.681c-0.539,0.264-3.649,1.733-8.55,3.033c1.693,5.039,2.733,10.938,2.876,17.281h14.012 C69.76,28.193,66.659,21.12,61.777,15.681z"/>
5
  </svg>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
4
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#70B4D5" d="M37.5,73.056c-19.637,0-35.556-15.918-35.556-35.557 c0-19.636,15.919-35.555,35.556-35.555s35.556,15.918,35.556,35.555C73.056,57.138,57.137,73.056,37.5,73.056z M61.938,59.137 c4.84-5.474,7.891-12.569,8.188-20.382H56.108c-0.119,6.328-1.131,12.22-2.794,17.268c5.389,1.432,8.624,3.076,8.624,3.076V59.137z M59.889,61.259c-1.645-0.711-4.23-1.697-7.534-2.576c-1.779,4.437-4.102,8.055-6.786,10.49 C51.029,67.786,55.921,65.007,59.889,61.259z M38.817,70.056c4.745-0.702,8.65-5.162,11.208-11.943 c-3.249-0.725-7.036-1.274-11.208-1.381V70.056z M38.817,53.967c4.562,0.103,8.663,0.706,12.101,1.476 c1.443-4.788,2.291-10.479,2.392-16.688H38.817V53.967z M53.307,35.995c-0.123-6.223-1.011-11.92-2.496-16.698 c-3.413,0.762-7.476,1.358-11.993,1.464v15.234H53.307z M36.058,35.995V20.762c-4.475-0.103-8.508-0.685-11.912-1.433 c-1.465,4.771-2.332,10.458-2.452,16.666H36.058z M21.691,38.755c0.1,6.202,0.946,11.889,2.387,16.674 c3.415-0.758,7.473-1.351,11.98-1.46V38.755H21.691z M36.058,70.044V56.73c-4.123,0.101-7.872,0.635-11.094,1.347 C27.5,64.821,31.364,69.281,36.058,70.044z M29.432,69.173c-2.692-2.442-5.02-6.074-6.8-10.528c-3.305,0.873-5.894,1.857-7.56,2.575 C19.047,64.987,23.953,67.781,29.432,69.173z M13.001,59.068c0.353-0.174,3.539-1.71,8.678-3.063 c-1.66-5.045-2.669-10.93-2.788-17.25H4.875C5.17,46.535,8.197,53.604,13.001,59.068z M4.885,35.995h14.012 c0.142-6.324,1.176-12.205,2.86-17.234c-4.661-1.216-7.744-2.59-8.607-2.998C8.311,21.191,5.239,28.232,4.885,35.995z M15.247,13.611c1.697,0.72,4.248,1.672,7.473,2.515c1.77-4.351,4.065-7.898,6.712-10.3C24.033,7.197,19.19,9.929,15.247,13.611z M25.056,16.688c3.202,0.699,6.921,1.218,11.002,1.313V4.955C31.419,5.708,27.593,10.078,25.056,16.688z M38.817,4.945v13.052 c4.113-0.109,7.852-0.648,11.066-1.361C47.307,10.007,43.439,5.646,38.817,4.945z M52.254,16.058 c3.227-0.856,5.765-1.813,7.421-2.521c-3.929-3.646-8.744-6.348-14.106-7.71C48.201,8.215,50.488,11.738,52.254,16.058z M61.777,15.681c-0.539,0.264-3.649,1.733-8.55,3.033c1.693,5.039,2.733,10.938,2.876,17.281h14.012 C69.76,28.193,66.659,21.12,61.777,15.681z"/>
5
  </svg>
images/landing/responsive-grow.svg CHANGED
@@ -1,6 +1,6 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 71" enable-background="new 0 0 100 71" xml:space="preserve">
5
- <path fill-rule="evenodd" clip-rule="evenodd" fill="#70B4D5" d="M95.5,68.947H52.649c-1.988,0-3.6-1.613-3.6-3.6v-3.312H24.9v3 c0,1.986-1.612,3.6-3.601,3.6H4.5c-1.988,0-3.6-1.613-3.6-3.6V38.652c0-1.988,1.611-3.6,3.6-3.6h6.601V5.653 c0-1.989,1.611-3.601,3.6-3.601h64.8c1.988,0,3.6,1.611,3.6,3.601V26.99h12.4c1.988,0,3.6,1.612,3.6,3.601v34.757 C99.1,67.334,97.488,68.947,95.5,68.947z M6.056,38.033c-1.192,0-2.16,0.967-2.16,2.158v23.285c0,1.193,0.968,2.16,2.16,2.16h13.693 c1.192,0,2.159-0.967,2.159-2.16V40.191c0-1.191-0.967-2.158-2.159-2.158H6.056z M80.108,7.192c0-1.193-0.967-2.16-2.16-2.16H16.256 c-1.193,0-2.16,0.967-2.16,2.16v27.86H21.3c1.988,0,3.601,1.611,3.601,3.6v20.369l24.149,0.016V30.591 c0-1.988,1.611-3.601,3.6-3.601h27.459V7.192z M96.108,32.13c0-1.193-0.967-2.16-2.16-2.16H54.205c-1.193,0-2.16,0.967-2.16,2.16 v31.659c0,1.193,0.967,2.16,2.16,2.16h39.743c1.193,0,2.16-0.967,2.16-2.16V32.13z M57.044,49.777c-0.991,0-1.794-0.803-1.794-1.793 c0-0.992,0.803-1.795,1.794-1.795c0.99,0,1.794,0.803,1.794,1.795C58.838,48.975,58.034,49.777,57.044,49.777z M30.601,11.334 c-0.991,0-1.795-0.804-1.795-1.794c0-0.991,0.804-1.795,1.795-1.795c0.99,0,1.794,0.804,1.794,1.795 C32.395,10.53,31.591,11.334,30.601,11.334z M24.601,11.334c-0.991,0-1.795-0.804-1.795-1.794c0-0.991,0.804-1.795,1.795-1.795 c0.99,0,1.794,0.804,1.794,1.795C26.395,10.53,25.591,11.334,24.601,11.334z M18.601,11.334c-0.991,0-1.795-0.804-1.795-1.794 c0-0.991,0.804-1.795,1.795-1.795c0.99,0,1.794,0.804,1.794,1.795C20.395,10.53,19.591,11.334,18.601,11.334z M13.2,62.934 c-0.991,0-1.794-0.803-1.794-1.795c0-0.99,0.803-1.793,1.794-1.793s1.794,0.803,1.794,1.793 C14.994,62.131,14.191,62.934,13.2,62.934z"/>
6
  </svg>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 71" enable-background="new 0 0 100 71" xml:space="preserve">
5
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#70B4D5" d="M95.5,68.947H52.649c-1.988,0-3.6-1.613-3.6-3.6v-3.312H24.9v3 c0,1.986-1.612,3.6-3.601,3.6H4.5c-1.988,0-3.6-1.613-3.6-3.6V38.652c0-1.988,1.611-3.6,3.6-3.6h6.601V5.653 c0-1.989,1.611-3.601,3.6-3.601h64.8c1.988,0,3.6,1.611,3.6,3.601V26.99h12.4c1.988,0,3.6,1.612,3.6,3.601v34.757 C99.1,67.334,97.488,68.947,95.5,68.947z M6.056,38.033c-1.192,0-2.16,0.967-2.16,2.158v23.285c0,1.193,0.968,2.16,2.16,2.16h13.693 c1.192,0,2.159-0.967,2.159-2.16V40.191c0-1.191-0.967-2.158-2.159-2.158H6.056z M80.108,7.192c0-1.193-0.967-2.16-2.16-2.16H16.256 c-1.193,0-2.16,0.967-2.16,2.16v27.86H21.3c1.988,0,3.601,1.611,3.601,3.6v20.369l24.149,0.016V30.591 c0-1.988,1.611-3.601,3.6-3.601h27.459V7.192z M96.108,32.13c0-1.193-0.967-2.16-2.16-2.16H54.205c-1.193,0-2.16,0.967-2.16,2.16 v31.659c0,1.193,0.967,2.16,2.16,2.16h39.743c1.193,0,2.16-0.967,2.16-2.16V32.13z M57.044,49.777c-0.991,0-1.794-0.803-1.794-1.793 c0-0.992,0.803-1.795,1.794-1.795c0.99,0,1.794,0.803,1.794,1.795C58.838,48.975,58.034,49.777,57.044,49.777z M30.601,11.334 c-0.991,0-1.795-0.804-1.795-1.794c0-0.991,0.804-1.795,1.795-1.795c0.99,0,1.794,0.804,1.794,1.795 C32.395,10.53,31.591,11.334,30.601,11.334z M24.601,11.334c-0.991,0-1.795-0.804-1.795-1.794c0-0.991,0.804-1.795,1.795-1.795 c0.99,0,1.794,0.804,1.794,1.795C26.395,10.53,25.591,11.334,24.601,11.334z M18.601,11.334c-0.991,0-1.795-0.804-1.795-1.794 c0-0.991,0.804-1.795,1.795-1.795c0.99,0,1.794,0.804,1.794,1.795C20.395,10.53,19.591,11.334,18.601,11.334z M13.2,62.934 c-0.991,0-1.794-0.803-1.794-1.795c0-0.99,0.803-1.793,1.794-1.793s1.794,0.803,1.794,1.793 C14.994,62.131,14.191,62.934,13.2,62.934z"/>
6
  </svg>
images/list.svg CHANGED
@@ -1,15 +1,15 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="102px" height="68px" viewBox="0 0 102 68" enable-background="new 0 0 102 68" xml:space="preserve">
6
- <path fill="#CDCDCD" d="M99.572,1H2.427C1.639,1,1,1.638,1,2.425v17.149C1,20.361,1.639,21,2.427,21h97.146
7
- c0.788,0,1.427-0.639,1.427-1.426V2.425C101,1.638,100.361,1,99.572,1z M22,10h38v2H22V10z M18,16c0,1.012-1.005,2-2,2H6
8
- c-0.994,0-2-0.988-2-2V6c0-1.01,1.006-2,2-2h10c0.995,0,2,0.99,2,2V16z M65,17H22v-2h43V17z M72,7H22V5h50V7z"/>
9
- <path fill="#CDCDCD" d="M99.572,24H2.427C1.639,24,1,24.638,1,25.425v17.149C1,43.361,1.639,44,2.427,44h97.146
10
- c0.788,0,1.427-0.639,1.427-1.426V25.425C101,24.638,100.361,24,99.572,24z M22,33h38v2H22V33z M18,39c0,1.012-1.005,2-2,2H6
11
- c-0.994,0-2-0.988-2-2V29c0-1.01,1.006-2,2-2h10c0.995,0,2,0.99,2,2V39z M65,40H22v-2h43V40z M72,30H22v-2h50V30z"/>
12
- <path fill="#CDCDCD" d="M99.572,47H2.427C1.639,47,1,47.639,1,48.425v17.149C1,66.361,1.639,67,2.427,67h97.146
13
- c0.788,0,1.427-0.639,1.427-1.426V48.425C101,47.639,100.361,47,99.572,47z M22,56h38v2H22V56z M18,62c0,1.012-1.005,2-2,2H6
14
- c-0.994,0-2-0.988-2-2V52c0-1.01,1.006-2,2-2h10c0.995,0,2,0.99,2,2V62z M65,63H22v-2h43V63z M72,53H22v-2h50V53z"/>
15
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
+ <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="102px" height="68px" viewBox="0 0 102 68" enable-background="new 0 0 102 68" xml:space="preserve">
6
+ <path fill="#CDCDCD" d="M99.572,1H2.427C1.639,1,1,1.638,1,2.425v17.149C1,20.361,1.639,21,2.427,21h97.146
7
+ c0.788,0,1.427-0.639,1.427-1.426V2.425C101,1.638,100.361,1,99.572,1z M22,10h38v2H22V10z M18,16c0,1.012-1.005,2-2,2H6
8
+ c-0.994,0-2-0.988-2-2V6c0-1.01,1.006-2,2-2h10c0.995,0,2,0.99,2,2V16z M65,17H22v-2h43V17z M72,7H22V5h50V7z"/>
9
+ <path fill="#CDCDCD" d="M99.572,24H2.427C1.639,24,1,24.638,1,25.425v17.149C1,43.361,1.639,44,2.427,44h97.146
10
+ c0.788,0,1.427-0.639,1.427-1.426V25.425C101,24.638,100.361,24,99.572,24z M22,33h38v2H22V33z M18,39c0,1.012-1.005,2-2,2H6
11
+ c-0.994,0-2-0.988-2-2V29c0-1.01,1.006-2,2-2h10c0.995,0,2,0.99,2,2V39z M65,40H22v-2h43V40z M72,30H22v-2h50V30z"/>
12
+ <path fill="#CDCDCD" d="M99.572,47H2.427C1.639,47,1,47.639,1,48.425v17.149C1,66.361,1.639,67,2.427,67h97.146
13
+ c0.788,0,1.427-0.639,1.427-1.426V48.425C101,47.639,100.361,47,99.572,47z M22,56h38v2H22V56z M18,62c0,1.012-1.005,2-2,2H6
14
+ c-0.994,0-2-0.988-2-2V52c0-1.01,1.006-2,2-2h10c0.995,0,2,0.99,2,2V62z M65,63H22v-2h43V63z M72,53H22v-2h50V53z"/>
15
+ </svg>
images/minicart.svg CHANGED
@@ -1,13 +1,13 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
- <g>
7
- <path fill="#D1ECF5" d="M115.2,8.9c0.8,0,1.5-0.6,1.5-1.4c0-3.7,0.6-4.6,4.3-4.6c3.7,0,4.3,0.9,4.3,4.6c0,0.8,0.7,1.4,1.5,1.4
8
- c0.8,0,1.4-0.6,1.4-1.4c0-2.3,0.1-7.5-7.2-7.5c-7.3,0-7.2,5.2-7.2,7.5C113.9,8.3,114.4,8.9,115.2,8.9z"/>
9
- <path fill="#D1ECF5" d="M139.7,33.2l-4.6-21.9c-0.1-0.6-0.6-1.1-1.2-1.1h-25.6c-0.6,0-1.2,0.5-1.2,1.1l-4.6,21.9
10
- c-0.1,1,0.4,1.8,1.2,1.8h34.9C139.3,35,139.8,34.2,139.7,33.2z M114.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2s2.2,1,2.2,2.2
11
- S115.8,16,114.6,16z M127.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2c1.2,0,2.2,1,2.2,2.2S128.8,16,127.6,16z"/>
12
- </g>
13
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
+ <g>
7
+ <path fill="#D1ECF5" d="M115.2,8.9c0.8,0,1.5-0.6,1.5-1.4c0-3.7,0.6-4.6,4.3-4.6c3.7,0,4.3,0.9,4.3,4.6c0,0.8,0.7,1.4,1.5,1.4
8
+ c0.8,0,1.4-0.6,1.4-1.4c0-2.3,0.1-7.5-7.2-7.5c-7.3,0-7.2,5.2-7.2,7.5C113.9,8.3,114.4,8.9,115.2,8.9z"/>
9
+ <path fill="#D1ECF5" d="M139.7,33.2l-4.6-21.9c-0.1-0.6-0.6-1.1-1.2-1.1h-25.6c-0.6,0-1.2,0.5-1.2,1.1l-4.6,21.9
10
+ c-0.1,1,0.4,1.8,1.2,1.8h34.9C139.3,35,139.8,34.2,139.7,33.2z M114.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2s2.2,1,2.2,2.2
11
+ S115.8,16,114.6,16z M127.6,16c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2c1.2,0,2.2,1,2.2,2.2S128.8,16,127.6,16z"/>
12
+ </g>
13
+ </svg>
images/product_browser.svg CHANGED
@@ -1,24 +1,24 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
- <path fill="#D1ECF5" d="M40.1,72H2.9C1.4,72,0,73.4,0,74.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
7
- C43,73.4,41.6,72,40.1,72z M30.1,112.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
8
- c1.5,0,1.4,0.1,1.4,1.5V112.6z"/>
9
- <path fill="#D1ECF5" d="M90.1,72H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
10
- C93,73.4,91.6,72,90.1,72z M80.1,112.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
11
- c1.5,0,1.4,0.1,1.4,1.5V112.6z"/>
12
- <path fill="#D1ECF5" d="M140.1,72h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
13
- C143,73.4,141.6,72,140.1,72z M130.1,112.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
14
- c1.5,0,1.4,0.1,1.4,1.5V112.6z"/>
15
- <path fill="#D1ECF5" d="M40.1,123H2.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
16
- C43,124.4,41.6,123,40.1,123z M30.1,163.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
17
- c1.5,0,1.4,0.1,1.4,1.5V163.6z"/>
18
- <path fill="#D1ECF5" d="M90.1,123H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
19
- C93,124.4,91.6,123,90.1,123z M80.1,163.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
20
- c1.5,0,1.4,0.1,1.4,1.5V163.6z"/>
21
- <path fill="#D1ECF5" d="M140.1,123h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
22
- C143,124.4,141.6,123,140.1,123z M130.1,163.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
23
- c1.5,0,1.4,0.1,1.4,1.5V163.6z"/>
24
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
+ <path fill="#D1ECF5" d="M40.1,72H2.9C1.4,72,0,73.4,0,74.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
7
+ C43,73.4,41.6,72,40.1,72z M30.1,112.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
8
+ c1.5,0,1.4,0.1,1.4,1.5V112.6z"/>
9
+ <path fill="#D1ECF5" d="M90.1,72H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
10
+ C93,73.4,91.6,72,90.1,72z M80.1,112.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
11
+ c1.5,0,1.4,0.1,1.4,1.5V112.6z"/>
12
+ <path fill="#D1ECF5" d="M140.1,72h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9V74.9
13
+ C143,73.4,141.6,72,140.1,72z M130.1,112.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
14
+ c1.5,0,1.4,0.1,1.4,1.5V112.6z"/>
15
+ <path fill="#D1ECF5" d="M40.1,123H2.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
16
+ C43,124.4,41.6,123,40.1,123z M30.1,163.6c0,1.3,0,1.5-1.4,1.5H14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
17
+ c1.5,0,1.4,0.1,1.4,1.5V163.6z"/>
18
+ <path fill="#D1ECF5" d="M90.1,123H52.9c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
19
+ C93,124.4,91.6,123,90.1,123z M80.1,163.6c0,1.3,0,1.5-1.4,1.5H64.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
20
+ c1.5,0,1.4,0.1,1.4,1.5V163.6z"/>
21
+ <path fill="#D1ECF5" d="M140.1,123h-37.3c-1.4,0-2.9,1.4-2.9,2.9v39.2c0,1.5,1.4,2.9,2.9,2.9h37.3c1.4,0,2.9-1.4,2.9-2.9v-39.2
22
+ C143,124.4,141.6,123,140.1,123z M130.1,163.6c0,1.3,0,1.5-1.4,1.5h-14.3c-1.5,0-1.4-0.1-1.4-1.5v-4.4c0-1.3,0-1.5,1.4-1.5h14.3
23
+ c1.5,0,1.4,0.1,1.4,1.5V163.6z"/>
24
+ </svg>
images/search.svg CHANGED
@@ -1,12 +1,12 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
- <path fill="#D1ECF5" d="M38.2,31.3c0.5,0.5,0.8,1.2,0.8,1.9c0,0.7-0.3,1.4-0.8,1.9C37.6,35.7,37,36,36.3,36c-0.8,0-1.4-0.3-1.9-0.8
7
- L27,27.9c-2.5,1.8-5.4,2.6-8.5,2.6c-2,0-4-0.4-5.8-1.2c-1.9-0.8-3.5-1.9-4.8-3.2c-1.3-1.3-2.4-2.9-3.2-4.8c-0.8-1.9-1.2-3.8-1.2-5.8
8
- s0.4-4,1.2-5.8c0.8-1.9,1.9-3.5,3.2-4.8c1.3-1.3,2.9-2.4,4.8-3.2c1.9-0.8,3.8-1.2,5.8-1.2s4,0.4,5.8,1.2c1.9,0.8,3.5,1.9,4.8,3.2
9
- c1.3,1.3,2.4,2.9,3.2,4.8c0.8,1.9,1.2,3.8,1.2,5.8c0,3.1-0.9,6-2.6,8.5L38.2,31.3L38.2,31.3z M25.3,22.3c1.9-1.9,2.8-4.1,2.8-6.8
10
- c0-2.6-0.9-4.9-2.8-6.8c-1.9-1.9-4.1-2.8-6.8-2.8c-2.6,0-4.9,0.9-6.8,2.8c-1.9,1.9-2.8,4.1-2.8,6.8c0,2.6,0.9,4.9,2.8,6.8
11
- c1.9,1.9,4.1,2.8,6.8,2.8C21.1,25.1,23.4,24.1,25.3,22.3z"/>
12
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 143 168" enable-background="new 0 0 143 168" xml:space="preserve">
6
+ <path fill="#D1ECF5" d="M38.2,31.3c0.5,0.5,0.8,1.2,0.8,1.9c0,0.7-0.3,1.4-0.8,1.9C37.6,35.7,37,36,36.3,36c-0.8,0-1.4-0.3-1.9-0.8
7
+ L27,27.9c-2.5,1.8-5.4,2.6-8.5,2.6c-2,0-4-0.4-5.8-1.2c-1.9-0.8-3.5-1.9-4.8-3.2c-1.3-1.3-2.4-2.9-3.2-4.8c-0.8-1.9-1.2-3.8-1.2-5.8
8
+ s0.4-4,1.2-5.8c0.8-1.9,1.9-3.5,3.2-4.8c1.3-1.3,2.9-2.4,4.8-3.2c1.9-0.8,3.8-1.2,5.8-1.2s4,0.4,5.8,1.2c1.9,0.8,3.5,1.9,4.8,3.2
9
+ c1.3,1.3,2.4,2.9,3.2,4.8c0.8,1.9,1.2,3.8,1.2,5.8c0,3.1-0.9,6-2.6,8.5L38.2,31.3L38.2,31.3z M25.3,22.3c1.9-1.9,2.8-4.1,2.8-6.8
10
+ c0-2.6-0.9-4.9-2.8-6.8c-1.9-1.9-4.1-2.8-6.8-2.8c-2.6,0-4.9,0.9-6.8,2.8c-1.9,1.9-2.8,4.1-2.8,6.8c0,2.6,0.9,4.9,2.8,6.8
11
+ c1.9,1.9,4.1,2.8,6.8,2.8C21.1,25.1,23.4,24.1,25.3,22.3z"/>
12
+ </svg>
images/store.svg CHANGED
@@ -1,20 +1,20 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- viewBox="0 0 26 26" enable-background="new 0 0 26 26" xml:space="preserve">
6
- <g>
7
- <path fill="#434343" d="M0.1,24.6c0-0.3,0.2-0.5,0.5-0.5h24.9c0.3,0,0.5,0.2,0.5,0.5v1c0,0.3-0.2,0.5-0.5,0.5H0.6
8
- c-0.3,0-0.5-0.2-0.5-0.5V24.6z"/>
9
- <path fill="#434343" d="M26,9c-1-2-1.4-3.9-2-7.2C24,1.6,23.6,1,23,1H3C2.4,1,2,1.6,2,1.8C2,1.8,1,8,0,9c0,1,0,3,0,3s0,0,0,0.1h0
10
- c0,0,0.1,0.5,0.7,0.8C0.8,12.9,0.9,13,1,13v0v9C1,22.6,1.6,23,2.1,23H10v-8.3c0-0.6,0.5-1,1.1-1h4c0.5,0,1,0.4,1,1V23h8
11
- c0.5,0,1-0.4,1-0.9v-9v0c0.8-0.1,1-0.9,1-0.9h0c0,0,0-0.1,0-0.1S26,10,26,9z M7.8,19c0,0.5-0.2,1-0.8,1H5c-0.5,0-0.8-0.5-0.8-1v-4
12
- c0-0.6,0.3-1,0.8-1H7c0.6,0,0.8,0.4,0.8,1V19z M21.8,19c0,0.5-0.2,1-0.8,1h-2c-0.5,0-0.8-0.5-0.8-1v-4c0-0.6,0.3-1,0.8-1h2
13
- c0.5,0,0.8,0.4,0.8,1V19z M22,2.8c0,0,1.1,5.1,1.7,6.2c-1,0-2.7,0-2.7,0l-1-6.2H22z M23.8,10l0,0.8c-0.1,0.7-0.7,1.2-1.4,1.2
14
- c-0.8,0-1.4-0.5-1.4-1.2c0,0,0-0.8,0-0.8H23.8z M16.3,10.5l0-0.5h2.8l0,0.8C19,11.5,18.4,12,17.7,12C16.9,12,16.3,11.4,16.3,10.5
15
- C16.3,10.6,16.3,10.5,16.3,10.5L16.3,10.5z M18,2.8c0,0,0.8,4.9,1.1,6.2c0.3,0-2.8,0-2.8,0L16,2.8H18z M12,2.8h2L14.4,9h-2.7
16
- L12,2.8z M11.6,10h2.8l0,0.7C14.3,11.4,13.7,12,13,12c-0.7,0-1.3-0.6-1.4-1.3L11.6,10z M8,2.8h2L9.7,9c0,0-2,0-2.7,0
17
- C7.3,7.9,8,2.8,8,2.8z M6.9,10h2.8l0,0.5h0c0,0,0,0,0,0.1c0,0.8-0.6,1.4-1.4,1.4c-0.7,0-1.3-0.5-1.4-1.2L6.9,10z M4,2.8h2L5.1,9
18
- c0,0-2,0-2.7,0C3.2,7.6,4,2.8,4,2.8z M2.2,10H5c0,0,0,0.6,0,0.6C5,11.4,4.4,12,3.6,12c-0.7,0-1.3-0.5-1.4-1.2L2.2,10z"/>
19
- </g>
20
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 26 26" enable-background="new 0 0 26 26" xml:space="preserve">
6
+ <g>
7
+ <path fill="#434343" d="M0.1,24.6c0-0.3,0.2-0.5,0.5-0.5h24.9c0.3,0,0.5,0.2,0.5,0.5v1c0,0.3-0.2,0.5-0.5,0.5H0.6
8
+ c-0.3,0-0.5-0.2-0.5-0.5V24.6z"/>
9
+ <path fill="#434343" d="M26,9c-1-2-1.4-3.9-2-7.2C24,1.6,23.6,1,23,1H3C2.4,1,2,1.6,2,1.8C2,1.8,1,8,0,9c0,1,0,3,0,3s0,0,0,0.1h0
10
+ c0,0,0.1,0.5,0.7,0.8C0.8,12.9,0.9,13,1,13v0v9C1,22.6,1.6,23,2.1,23H10v-8.3c0-0.6,0.5-1,1.1-1h4c0.5,0,1,0.4,1,1V23h8
11
+ c0.5,0,1-0.4,1-0.9v-9v0c0.8-0.1,1-0.9,1-0.9h0c0,0,0-0.1,0-0.1S26,10,26,9z M7.8,19c0,0.5-0.2,1-0.8,1H5c-0.5,0-0.8-0.5-0.8-1v-4
12
+ c0-0.6,0.3-1,0.8-1H7c0.6,0,0.8,0.4,0.8,1V19z M21.8,19c0,0.5-0.2,1-0.8,1h-2c-0.5,0-0.8-0.5-0.8-1v-4c0-0.6,0.3-1,0.8-1h2
13
+ c0.5,0,0.8,0.4,0.8,1V19z M22,2.8c0,0,1.1,5.1,1.7,6.2c-1,0-2.7,0-2.7,0l-1-6.2H22z M23.8,10l0,0.8c-0.1,0.7-0.7,1.2-1.4,1.2
14
+ c-0.8,0-1.4-0.5-1.4-1.2c0,0,0-0.8,0-0.8H23.8z M16.3,10.5l0-0.5h2.8l0,0.8C19,11.5,18.4,12,17.7,12C16.9,12,16.3,11.4,16.3,10.5
15
+ C16.3,10.6,16.3,10.5,16.3,10.5L16.3,10.5z M18,2.8c0,0,0.8,4.9,1.1,6.2c0.3,0-2.8,0-2.8,0L16,2.8H18z M12,2.8h2L14.4,9h-2.7
16
+ L12,2.8z M11.6,10h2.8l0,0.7C14.3,11.4,13.7,12,13,12c-0.7,0-1.3-0.6-1.4-1.3L11.6,10z M8,2.8h2L9.7,9c0,0-2,0-2.7,0
17
+ C7.3,7.9,8,2.8,8,2.8z M6.9,10h2.8l0,0.5h0c0,0,0,0,0,0.1c0,0.8-0.6,1.4-1.4,1.4c-0.7,0-1.3-0.5-1.4-1.2L6.9,10z M4,2.8h2L5.1,9
18
+ c0,0-2,0-2.7,0C3.2,7.6,4,2.8,4,2.8z M2.2,10H5c0,0,0,0.6,0,0.6C5,11.4,4.4,12,3.6,12c-0.7,0-1.3-0.5-1.4-1.2L2.2,10z"/>
19
+ </g>
20
+ </svg>
images/table.svg CHANGED
@@ -1,32 +1,32 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="102px" height="68px" viewBox="0 0 102 68" enable-background="new 0 0 102 68" xml:space="preserve">
6
- <g>
7
- <rect x="1.5" y="3" fill="#CDCDCD" width="30" height="6"/>
8
- <rect x="33.5" y="3" fill="#CDCDCD" width="33" height="6"/>
9
- <rect x="68.5" y="3" fill="#CDCDCD" width="32" height="6"/>
10
- <rect x="33.5" y="11" fill="#CDCDCD" width="33" height="6"/>
11
- <rect x="1.5" y="11" fill="#CDCDCD" width="30" height="6"/>
12
- <rect x="68.5" y="11" fill="#CDCDCD" width="32" height="6"/>
13
- <rect x="68.5" y="19" fill="#CDCDCD" width="32" height="6"/>
14
- <rect x="1.5" y="19" fill="#CDCDCD" width="30" height="6"/>
15
- <rect x="33.5" y="19" fill="#CDCDCD" width="33" height="6"/>
16
- <rect x="1.5" y="27" fill="#CDCDCD" width="30" height="6"/>
17
- <rect x="33.5" y="27" fill="#CDCDCD" width="33" height="6"/>
18
- <rect x="68.5" y="27" fill="#CDCDCD" width="32" height="6"/>
19
- <rect x="68.5" y="35" fill="#CDCDCD" width="32" height="6"/>
20
- <rect x="1.5" y="35" fill="#CDCDCD" width="30" height="6"/>
21
- <rect x="33.5" y="35" fill="#CDCDCD" width="33" height="6"/>
22
- <rect x="1.5" y="43" fill="#CDCDCD" width="30" height="6"/>
23
- <rect x="68.5" y="43" fill="#CDCDCD" width="32" height="6"/>
24
- <rect x="33.5" y="43" fill="#CDCDCD" width="33" height="6"/>
25
- <rect x="1.5" y="51" fill="#CDCDCD" width="30" height="6"/>
26
- <rect x="68.5" y="51" fill="#CDCDCD" width="32" height="6"/>
27
- <rect x="33.5" y="51" fill="#CDCDCD" width="33" height="6"/>
28
- <rect x="1.5" y="59" fill="#CDCDCD" width="30" height="6"/>
29
- <rect x="33.5" y="59" fill="#CDCDCD" width="33" height="6"/>
30
- <rect x="68.5" y="59" fill="#CDCDCD" width="32" height="6"/>
31
- </g>
32
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
+ <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="102px" height="68px" viewBox="0 0 102 68" enable-background="new 0 0 102 68" xml:space="preserve">
6
+ <g>
7
+ <rect x="1.5" y="3" fill="#CDCDCD" width="30" height="6"/>
8
+ <rect x="33.5" y="3" fill="#CDCDCD" width="33" height="6"/>
9
+ <rect x="68.5" y="3" fill="#CDCDCD" width="32" height="6"/>
10
+ <rect x="33.5" y="11" fill="#CDCDCD" width="33" height="6"/>
11
+ <rect x="1.5" y="11" fill="#CDCDCD" width="30" height="6"/>
12
+ <rect x="68.5" y="11" fill="#CDCDCD" width="32" height="6"/>
13
+ <rect x="68.5" y="19" fill="#CDCDCD" width="32" height="6"/>
14
+ <rect x="1.5" y="19" fill="#CDCDCD" width="30" height="6"/>
15
+ <rect x="33.5" y="19" fill="#CDCDCD" width="33" height="6"/>
16
+ <rect x="1.5" y="27" fill="#CDCDCD" width="30" height="6"/>
17
+ <rect x="33.5" y="27" fill="#CDCDCD" width="33" height="6"/>
18
+ <rect x="68.5" y="27" fill="#CDCDCD" width="32" height="6"/>
19
+ <rect x="68.5" y="35" fill="#CDCDCD" width="32" height="6"/>
20
+ <rect x="1.5" y="35" fill="#CDCDCD" width="30" height="6"/>
21
+ <rect x="33.5" y="35" fill="#CDCDCD" width="33" height="6"/>
22
+ <rect x="1.5" y="43" fill="#CDCDCD" width="30" height="6"/>
23
+ <rect x="68.5" y="43" fill="#CDCDCD" width="32" height="6"/>
24
+ <rect x="33.5" y="43" fill="#CDCDCD" width="33" height="6"/>
25
+ <rect x="1.5" y="51" fill="#CDCDCD" width="30" height="6"/>
26
+ <rect x="68.5" y="51" fill="#CDCDCD" width="32" height="6"/>
27
+ <rect x="33.5" y="51" fill="#CDCDCD" width="33" height="6"/>
28
+ <rect x="1.5" y="59" fill="#CDCDCD" width="30" height="6"/>
29
+ <rect x="33.5" y="59" fill="#CDCDCD" width="33" height="6"/>
30
+ <rect x="68.5" y="59" fill="#CDCDCD" width="32" height="6"/>
31
+ </g>
32
+ </svg>
includes/class-ecwid-integration-aiosp.php CHANGED
@@ -1,61 +1,61 @@
1
- <?php
2
-
3
- class Ecwid_Integration_All_In_One_SEO_Pack
4
- {
5
- // Store intermediate sitemap generation results here
6
- protected $sitemap = array();
7
-
8
- public function __construct()
9
- {
10
- add_action( 'wp', array( $this, 'disable_seo_on_escaped_fragment' ) );
11
-
12
- add_filter( 'aiosp_sitemap_extra', array( $this, 'aiosp_hook_sitemap_extra' ) );
13
- add_filter( 'aiosp_sitemap_custom_ecwid', array( $this, 'aiosp_hook_sitemap_content') );
14
- }
15
-
16
- // Disable titles, descriptions and canonical link on ecwid _escaped_fragment_ pages
17
- public function disable_seo_on_escaped_fragment()
18
- {
19
- if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
20
- return;
21
- }
22
-
23
- global $aioseop_options;
24
-
25
- $aioseop_options['aiosp_can'] = false;
26
- add_filter( 'aioseop_title', '__return_null' );
27
- add_filter( 'aioseop_description', '__return_null' );
28
- }
29
-
30
- // Hook that new sitemap type to aiosp sitemap
31
- public function aiosp_hook_sitemap_extra( $params )
32
- {
33
- return array_merge($params, array('ecwid'));
34
- }
35
-
36
- // Hook that adds content to aiosp sitemap
37
- public function aiosp_hook_sitemap_content()
38
- {
39
-
40
- $this->sitemap = array();
41
-
42
- ecwid_build_sitemap( array($this, 'sitemap_callback') );
43
-
44
- $sitemap = $this->sitemap;
45
- $this->sitemap = null;
46
-
47
- return $sitemap;
48
- }
49
-
50
- // A callback for the streaming sitemap builder
51
- public function sitemap_callback($url, $priority, $frequency)
52
- {
53
- array_push($this->sitemap, array(
54
- 'loc' => $url,
55
- 'priority' => $priority,
56
- 'changefreq' => $frequency
57
- ));
58
- }
59
- }
60
-
61
  $ecwid_integration_aiosp = new Ecwid_Integration_All_In_One_SEO_Pack();
1
+ <?php
2
+
3
+ class Ecwid_Integration_All_In_One_SEO_Pack
4
+ {
5
+ // Store intermediate sitemap generation results here
6
+ protected $sitemap = array();
7
+
8
+ public function __construct()
9
+ {
10
+ add_action( 'wp', array( $this, 'disable_seo_on_escaped_fragment' ) );
11
+
12
+ add_filter( 'aiosp_sitemap_extra', array( $this, 'aiosp_hook_sitemap_extra' ) );
13
+ add_filter( 'aiosp_sitemap_custom_ecwid', array( $this, 'aiosp_hook_sitemap_content') );
14
+ }
15
+
16
+ // Disable titles, descriptions and canonical link on ecwid _escaped_fragment_ pages
17
+ public function disable_seo_on_escaped_fragment()
18
+ {
19
+ if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
20
+ return;
21
+ }
22
+
23
+ global $aioseop_options;
24
+
25
+ $aioseop_options['aiosp_can'] = false;
26
+ add_filter( 'aioseop_title', '__return_null' );
27
+ add_filter( 'aioseop_description', '__return_null' );
28
+ }
29
+
30
+ // Hook that new sitemap type to aiosp sitemap
31
+ public function aiosp_hook_sitemap_extra( $params )
32
+ {
33
+ return array_merge($params, array('ecwid'));
34
+ }
35
+
36
+ // Hook that adds content to aiosp sitemap
37
+ public function aiosp_hook_sitemap_content()
38
+ {
39
+
40
+ $this->sitemap = array();
41
+
42
+ ecwid_build_sitemap( array($this, 'sitemap_callback') );
43
+
44
+ $sitemap = $this->sitemap;
45
+ $this->sitemap = null;
46
+
47
+ return $sitemap;
48
+ }
49
+
50
+ // A callback for the streaming sitemap builder
51
+ public function sitemap_callback($url, $priority, $frequency)
52
+ {
53
+ array_push($this->sitemap, array(
54
+ 'loc' => $url,
55
+ 'priority' => $priority,
56
+ 'changefreq' => $frequency
57
+ ));
58
+ }
59
+ }
60
+
61
  $ecwid_integration_aiosp = new Ecwid_Integration_All_In_One_SEO_Pack();
includes/class-ecwid-integration-wpseo.php CHANGED
@@ -1,104 +1,104 @@
1
- <?php
2
-
3
- class Ecwid_Integration_WordPress_SEO_By_Yoast
4
- {
5
- // Store intermediate sitemap generation results here
6
- protected $sitemap = array();
7
-
8
- public function __construct()
9
- {
10
- add_action( 'wp', array( $this, 'disable_seo_on_escaped_fragment' ) );
11
- add_action( 'template_redirect', array( $this, 'disable_rewrite_titles' ) );
12
-
13
- if (ecwid_is_paid_account() && ecwid_is_store_page_available()) {
14
- add_filter( 'wpseo_sitemap_index', array( $this, 'wpseo_hook_sitemap_index' ) );
15
- add_filter( 'wpseo_do_sitemap_ecwid', array( $this, 'wpseo_hook_do_sitemap' ) );
16
- }
17
-
18
- add_filter( 'ecwid_title_separator', array( $this, 'get_title_separator' ) );
19
- }
20
-
21
- // Disable titles, descriptions and canonical link on ecwid _escaped_fragment_ pages
22
- public function disable_seo_on_escaped_fragment()
23
- {
24
- if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
25
- return;
26
- }
27
-
28
- global $wpseo_front;
29
- // Canonical
30
-
31
- if (empty($wpseo_front)) {
32
- $wpseo_front = WPSEO_Frontend::get_instance();
33
- }
34
-
35
- remove_action( 'wpseo_head', array( $wpseo_front, 'canonical' ), 20 );
36
- // Description
37
- remove_action( 'wpseo_head', array( $wpseo_front, 'metadesc' ), 10 );
38
- }
39
-
40
- public function disable_rewrite_titles()
41
- {
42
- global $wpseo_front;
43
-
44
- // Newer versions of Wordpress SEO assign their rewrite on this stage
45
- remove_action( 'template_redirect', array( $wpseo_front, 'force_rewrite_output_buffer' ), 99999 );
46
- }
47
-
48
- // Hook that new sitemap type to aiosp sitemap
49
- public function wpseo_hook_sitemap_index( )
50
- {
51
- $now = date('c', time());;
52
- $sitemap_url = wpseo_xml_sitemaps_base_url('ecwid-sitemap.xml');
53
- return <<<XML
54
- <sitemap>
55
- <loc>$sitemap_url</loc>
56
- <lastmod>$now</lastmod>
57
- </sitemap>
58
- XML;
59
- }
60
-
61
- // Hook that adds content to aiosp sitemap
62
- public function wpseo_hook_do_sitemap()
63
- {
64
-
65
- $this->sitemap = <<<XML
66
- <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
67
- XML;
68
-
69
-
70
- ecwid_build_sitemap( array($this, 'sitemap_callback') );
71
-
72
- $this->sitemap .= '</urlset>';
73
-
74
- $sitemap = $this->sitemap;
75
- $this->sitemap = null;
76
-
77
- $GLOBALS['wpseo_sitemaps']->set_sitemap($sitemap);
78
- }
79
-
80
- // A callback for the streaming sitemap builder
81
- public function sitemap_callback($url, $priority, $frequency)
82
- {
83
- $url = htmlspecialchars($url);
84
- $this->sitemap .= <<<XML
85
- <url>
86
- <loc>$url</loc>
87
- <changefreq>$frequency</changefreq>
88
- <priority>$priority</priority>
89
- </url>
90
-
91
- XML;
92
- }
93
-
94
- public function get_title_separator($separator)
95
- {
96
- if (class_exists('WPSEO_Option_Titles')) {
97
- $separator = wpseo_replace_vars( '%%sep%%', array() );
98
- }
99
-
100
- return $separator;
101
- }
102
- }
103
-
104
- $ecwid_integration_wpseo = new Ecwid_Integration_WordPress_SEO_By_Yoast();
1
+ <?php
2
+
3
+ class Ecwid_Integration_WordPress_SEO_By_Yoast
4
+ {
5
+ // Store intermediate sitemap generation results here
6
+ protected $sitemap = array();
7
+
8
+ public function __construct()
9
+ {
10
+ add_action( 'wp', array( $this, 'disable_seo_on_escaped_fragment' ) );
11
+ add_action( 'template_redirect', array( $this, 'disable_rewrite_titles' ) );
12
+
13
+ if (ecwid_is_paid_account() && ecwid_is_store_page_available()) {
14
+ add_filter( 'wpseo_sitemap_index', array( $this, 'wpseo_hook_sitemap_index' ) );
15
+ add_filter( 'wpseo_do_sitemap_ecwid', array( $this, 'wpseo_hook_do_sitemap' ) );
16
+ }
17
+
18
+ add_filter( 'ecwid_title_separator', array( $this, 'get_title_separator' ) );
19
+ }
20
+
21
+ // Disable titles, descriptions and canonical link on ecwid _escaped_fragment_ pages
22
+ public function disable_seo_on_escaped_fragment()
23
+ {
24
+ if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
25
+ return;
26
+ }
27
+
28
+ global $wpseo_front;
29
+ // Canonical
30
+
31
+ if (empty($wpseo_front)) {
32
+ $wpseo_front = WPSEO_Frontend::get_instance();
33
+ }
34
+
35
+ remove_action( 'wpseo_head', array( $wpseo_front, 'canonical' ), 20 );
36
+ // Description
37
+ remove_action( 'wpseo_head', array( $wpseo_front, 'metadesc' ), 10 );
38
+ }
39
+
40
+ public function disable_rewrite_titles()
41
+ {
42
+ global $wpseo_front;
43
+
44
+ // Newer versions of Wordpress SEO assign their rewrite on this stage
45
+ remove_action( 'template_redirect', array( $wpseo_front, 'force_rewrite_output_buffer' ), 99999 );
46
+ }
47
+
48
+ // Hook that new sitemap type to aiosp sitemap
49
+ public function wpseo_hook_sitemap_index( )
50
+ {
51
+ $now = date('c', time());;
52
+ $sitemap_url = wpseo_xml_sitemaps_base_url('ecwid-sitemap.xml');
53
+ return <<<XML
54
+ <sitemap>
55
+ <loc>$sitemap_url</loc>
56
+ <lastmod>$now</lastmod>
57
+ </sitemap>
58
+ XML;
59
+ }
60
+
61
+ // Hook that adds content to aiosp sitemap
62
+ public function wpseo_hook_do_sitemap()
63
+ {
64
+
65
+ $this->sitemap = <<<XML
66
+ <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
67
+ XML;
68
+
69
+
70
+ ecwid_build_sitemap( array($this, 'sitemap_callback') );
71
+
72
+ $this->sitemap .= '</urlset>';
73
+
74
+ $sitemap = $this->sitemap;
75
+ $this->sitemap = null;
76
+
77
+ $GLOBALS['wpseo_sitemaps']->set_sitemap($sitemap);
78
+ }
79
+
80
+ // A callback for the streaming sitemap builder
81
+ public function sitemap_callback($url, $priority, $frequency)
82
+ {
83
+ $url = htmlspecialchars($url);
84
+ $this->sitemap .= <<<XML
85
+ <url>
86
+ <loc>$url</loc>
87
+ <changefreq>$frequency</changefreq>
88
+ <priority>$priority</priority>
89
+ </url>
90
+
91
+ XML;
92
+ }
93
+
94
+ public function get_title_separator($separator)
95
+ {
96
+ if (class_exists('WPSEO_Option_Titles')) {
97
+ $separator = wpseo_replace_vars( '%%sep%%', array() );
98
+ }
99
+
100
+ return $separator;
101
+ }
102
+ }
103
+
104
+ $ecwid_integration_wpseo = new Ecwid_Integration_WordPress_SEO_By_Yoast();
includes/class-ecwid-message-manager.php CHANGED
@@ -1,253 +1,253 @@
1
- <?php
2
-
3
- class Ecwid_Message_Manager
4
- {
5
- protected $messages = array();
6
-
7
- protected function Ecwid_Message_Manager()
8
- {
9
- $this->init_messages();
10
- }
11
-
12
- public static function show_messages()
13
- {
14
- $mm = self::get_instance();
15
-
16
- foreach ($mm->messages as $name => $message) {
17
- if ($mm->need_to_show_message($name)) {
18
- $mm->show_message($name);
19
- }
20
- }
21
- }
22
-
23
- public static function show_message($name, $params = array())
24
- {
25
- $mm = self::get_instance();
26
-
27
- $mm->need_to_show_message($name);
28
-
29
- if (!isset($mm->messages[$name]) && empty($params)) {
30
- trigger_error('Ecwid plugin error: unknown message ' . $name);
31
- return;
32
- }
33
-
34
- $params = $mm->get_message_params($name, $params);
35
-
36
- $type = $params['type'];
37
-
38
- $title = $params['title'];
39
- $message = $params['message'];
40
-
41
- $primary_button = isset($params['primary_title']);
42
- if ($primary_button) {
43
- $primary_title = $params['primary_title'];
44
- $primary_url = $params['primary_url'];
45
- $primary_blank = @$params['primary_blank'];
46
- }
47
- $secondary_button = isset($params['secondary_title']);
48
- if ($secondary_button) {
49
- $secondary_title = $params['secondary_title'];
50
- $secondary_url = $params['secondary_url'];
51
- $secondary_blank = @$params['secondary_blank'];
52
- }
53
-
54
- $do_not_show_again = true == $params['hideable'];
55
-
56
- include ECWID_PLUGIN_DIR . '/templates/admin-message.php';
57
- }
58
-
59
- public static function disable_message($name)
60
- {
61
- $messages = get_option('ecwid_disabled_messages');
62
- $messages[$name] = true;
63
-
64
- update_option('ecwid_disabled_messages', $messages);
65
- }
66
-
67
- public static function enable_message($name)
68
- {
69
- $messages = get_option('ecwid_disabled_messages');
70
- if (isset($messages['name']))
71
- unset($messages['name']);
72
-
73
- update_option('ecwid_disabled_messages', $messages);
74
- }
75
-
76
- public static function reset_hidden_messages()
77
- {
78
- $hidden_messages = array();
79
-
80
- $messages = self::get_default_messages();
81
- foreach ($messages as $name => $message) {
82
- if (isset($message['default']) && $message['default'] == 'hidden') {
83
- $hidden_messages[$name] = true;
84
- }
85
- }
86
-
87
- update_option('ecwid_disabled_messages', array());
88
- }
89
-
90
- protected static function get_instance()
91
- {
92
- static $instance = null;
93
-
94
- if (is_null($instance)) {
95
- $instance = new Ecwid_Message_Manager();
96
- }
97
-
98
- return $instance;
99
- }
100
-
101
- protected function init_messages()
102
- {
103
- $this->messages = $this->get_default_messages();
104
-
105
- $hidden_messages = get_option('ecwid_disabled_messages');
106
-
107
- if ( !empty( $hidden_messages ) ) {
108
- foreach ($hidden_messages as $name => $message) {
109
- unset ($this->messages[$name]);
110
- }
111
- }
112
- }
113
-
114
- protected function get_message_params($name, $params)
115
- {
116
- if (is_array($name)) {
117
- $params = $name;
118
- $name = '';
119
- }
120
-
121
- if (isset($this->messages[$name])) {
122
- $params = array_merge(
123
- array('type' => 'info', 'title' => '', 'message' => '', 'hideable' => false),
124
- $this->messages[$name],
125
- $params
126
- );
127
- }
128
-
129
- if ($name == 'on_storeid_set') {
130
- $params['primary_url'] = ecwid_get_store_page_url();
131
- $params['secondary_url'] = 'post.php?post=' . ecwid_get_current_store_page_id() . '&action=edit&show-ecwid=true';
132
- }
133
-
134
- if ($name == 'on_appearance_widgets') {
135
-
136
- if (isset($_GET['from-ecwid']) && $_GET['from-ecwid'] == 'appearance') {
137
- $admin_page = 'admin.php?page=ecwid-appearance';
138
- } elseif (isset($_GET['from-ecwid']) && $_GET['from-ecwid'] == 'new') {
139
- $admin_page = 'post-new.php?post_type=page';
140
- } elseif (isset($_GET['from-ecwid']) && is_numeric($_GET['from-ecwid'])) {
141
- $admin_page = 'post.php?post=' . $_GET['from-ecwid'] . '&action=edit';
142
- }
143
-
144
- $params['secondary_url'] = $admin_page;
145
- }
146
- $types_map = array(
147
- 'info' => 'updated',
148
- 'warning' => 'update-nag',
149
- 'error' => 'error'
150
- );
151
- $params['type'] = $types_map[$params['type']];
152
-
153
- return $params;
154
- }
155
-
156
- protected static function get_default_messages()
157
- {
158
- return array(
159
- 'on_activate' => array(
160
- 'title' => __('Greetings! Your Ecwid store is now active.', 'ecwid-shopping-cart'),
161
- 'message' => __('Take a few simple steps to complete store setup', 'ecwid-shopping-cart'),
162
- 'primary_title' => __('Set up Ecwid Store', 'ecwid-shopping-cart'),
163
- 'primary_url' => 'admin.php?page=ecwid',
164
- 'hideable' => true,
165
- 'default' => 'disabled'
166
- ),
167
-
168
- 'on_storeid_set' => array(
169
- 'title' => __('Good job! Your store is set up and you\'re ready to sell.', 'ecwid-shopping-cart'),
170
- 'message' => __('Now you can fine-tune your store\'s appearance', 'ecwid-shopping-cart'),
171
- 'primary_title' => __('Visit Storefront', 'ecwid-shopping-cart'),
172
- 'primary_url' => '',
173
- 'primary_blank' => true,
174
- 'secondary_title' => __('Configure Appearance', 'ecwid-shopping-cart'),
175
- 'secondary_url' => 'admin.php?page=ecwid-appearance',
176
- 'hideable' => true
177
- ),
178
-
179
- 'on_no_storeid_on_setup_pages' => array(
180
- 'type' => 'warning',
181
- 'title' => __('Your store is almost ready!', 'ecwid-shopping-cart' ),
182
- 'message' => __('Connect your Ecwid account with this site to complete setup and start selling', 'ecwid-shopping-cart' ),
183
- 'primary_title' => __('Connect Your Ecwid Store', 'ecwid-shopping-cart' ),
184
- 'primary_url' => 'admin.php?page=ecwid',
185
- 'hideable' => true
186
- ),
187
-
188
- 'on_appearance_widgets' => array(
189
- 'message' => __('To add extra functions to your store, drag and drop Ecwid store elements on your site. When you\'re done, you can get back to modifying your settings.', 'ecwid-shopping-cart' ),
190
- 'secondary_title' => __('Back to Store Settings', 'ecwid-shopping-cart'),
191
- 'secondary_url' => 'admin.php?page=ecwid-appearance',
192
- 'hideable' => true
193
- ),
194
-
195
- 'please_vote' => array(
196
- 'message' => sprintf(
197
- __('Do you like your Ecwid online store? We\'d appreciate it if you add your review and vote for the plugin on Wordpress site.', 'ecwid-shopping-cart'),
198
- 'target="_blank" href="http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart"'
199
- ),
200
- 'primary_title' => __('Rate Ecwid at WordPress.org', 'ecwid-shopping-cart'),
201
- 'primary_url' => 'http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart',
202
- 'hideable' => true
203
- )
204
- );
205
- }
206
-
207
- protected function need_to_show_message($name)
208
- {
209
- $admin_page = '';
210
- if (function_exists('get_current_screen')) {
211
- $screen = get_current_screen();
212
- $admin_page = $screen->base;
213
- }
214
-
215
- switch ($name) {
216
- case 'on_activate':
217
- return $admin_page == 'plugins' && get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
218
-
219
- case 'on_storeid_set':
220
- return get_ecwid_store_id() != ECWID_DEMO_STORE_ID && @$_GET['settings-updated'] == 'true' && $admin_page == 'toplevel_page_ecwid';
221
-
222
- case 'on_no_storeid_on_setup_pages':
223
- $is_newbie = get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
224
-
225
- $is_ecwid_settings = in_array($admin_page, array('ecwid-store_page_ecwid-advanced', 'ecwid-store_page_ecwid-appearance'));
226
- $is_store_page = $admin_page == 'post' && isset($_GET['post']) && $_GET['post'] == ecwid_get_current_store_page_id();
227
-
228
- return $is_newbie && ($is_ecwid_settings || $is_store_page);
229
-
230
- case 'on_appearance_widgets':
231
- return isset($_GET['from-ecwid']) && $admin_page == 'widgets';
232
-
233
- case 'please_vote':
234
- $install_date = get_option('ecwid_installation_date');
235
-
236
- $result = false;
237
- if (!$install_date) {
238
- add_option('ecwid_installation_date', time());
239
- } else {
240
- $result = ecwid_is_paid_account() && $install_date + 60*60*24*30 < time();
241
- }
242
-
243
- foreach ($this->messages as $_name => $message) {
244
- if ($_name != $name && $this->need_to_show_message($_name)) {
245
- return false;
246
- }
247
- }
248
-
249
- return $result;
250
- }
251
- }
252
-
253
  }
1
+ <?php
2
+
3
+ class Ecwid_Message_Manager
4
+ {
5
+ protected $messages = array();
6
+
7
+ protected function Ecwid_Message_Manager()
8
+ {
9
+ $this->init_messages();
10
+ }
11
+
12
+ public static function show_messages()
13
+ {
14
+ $mm = self::get_instance();
15
+
16
+ foreach ($mm->messages as $name => $message) {
17
+ if ($mm->need_to_show_message($name)) {
18
+ $mm->show_message($name);
19
+ }
20
+ }
21
+ }
22
+
23
+ public static function show_message($name, $params = array())
24
+ {
25
+ $mm = self::get_instance();
26
+
27
+ $mm->need_to_show_message($name);
28
+
29
+ if (!isset($mm->messages[$name]) && empty($params)) {
30
+ trigger_error('Ecwid plugin error: unknown message ' . $name);
31
+ return;
32
+ }
33
+
34
+ $params = $mm->get_message_params($name, $params);
35
+
36
+ $type = $params['type'];
37
+
38
+ $title = $params['title'];
39
+ $message = $params['message'];
40
+
41
+ $primary_button = isset($params['primary_title']);
42
+ if ($primary_button) {
43
+ $primary_title = $params['primary_title'];
44
+ $primary_url = $params['primary_url'];
45
+ $primary_blank = @$params['primary_blank'];
46
+ }
47
+ $secondary_button = isset($params['secondary_title']);
48
+ if ($secondary_button) {
49
+ $secondary_title = $params['secondary_title'];
50
+ $secondary_url = $params['secondary_url'];
51
+ $secondary_blank = @$params['secondary_blank'];
52
+ }
53
+
54
+ $do_not_show_again = true == $params['hideable'];
55
+
56
+ include ECWID_PLUGIN_DIR . '/templates/admin-message.php';
57
+ }
58
+
59
+ public static function disable_message($name)
60
+ {
61
+ $messages = get_option('ecwid_disabled_messages');
62
+ $messages[$name] = true;
63
+
64
+ update_option('ecwid_disabled_messages', $messages);
65
+ }
66
+
67
+ public static function enable_message($name)
68
+ {
69
+ $messages = get_option('ecwid_disabled_messages');
70
+ if (isset($messages['name']))
71
+ unset($messages['name']);
72
+
73
+ update_option('ecwid_disabled_messages', $messages);
74
+ }
75
+
76
+ public static function reset_hidden_messages()
77
+ {
78
+ $hidden_messages = array();
79
+
80
+ $messages = self::get_default_messages();
81
+ foreach ($messages as $name => $message) {
82
+ if (isset($message['default']) && $message['default'] == 'hidden') {
83
+ $hidden_messages[$name] = true;
84
+ }
85
+ }
86
+
87
+ update_option('ecwid_disabled_messages', array());
88
+ }
89
+
90
+ protected static function get_instance()
91
+ {
92
+ static $instance = null;
93
+
94
+ if (is_null($instance)) {
95
+ $instance = new Ecwid_Message_Manager();
96
+ }
97
+
98
+ return $instance;
99
+ }
100
+
101
+ protected function init_messages()
102
+ {
103
+ $this->messages = $this->get_default_messages();
104
+
105
+ $hidden_messages = get_option('ecwid_disabled_messages');
106
+
107
+ if ( !empty( $hidden_messages ) ) {
108
+ foreach ($hidden_messages as $name => $message) {
109
+ unset ($this->messages[$name]);
110
+ }
111
+ }
112
+ }
113
+
114
+ protected function get_message_params($name, $params)
115
+ {
116
+ if (is_array($name)) {
117
+ $params = $name;
118
+ $name = '';
119
+ }
120
+
121
+ if (isset($this->messages[$name])) {
122
+ $params = array_merge(
123
+ array('type' => 'info', 'title' => '', 'message' => '', 'hideable' => false),
124
+ $this->messages[$name],
125
+ $params
126
+ );
127
+ }
128
+
129
+ if ($name == 'on_storeid_set') {
130
+ $params['primary_url'] = ecwid_get_store_page_url();
131
+ $params['secondary_url'] = 'post.php?post=' . ecwid_get_current_store_page_id() . '&action=edit&show-ecwid=true';
132
+ }
133
+
134
+ if ($name == 'on_appearance_widgets') {
135
+
136
+ if (isset($_GET['from-ecwid']) && $_GET['from-ecwid'] == 'appearance') {
137
+ $admin_page = 'admin.php?page=ecwid-appearance';
138
+ } elseif (isset($_GET['from-ecwid']) && $_GET['from-ecwid'] == 'new') {
139
+ $admin_page = 'post-new.php?post_type=page';
140
+ } elseif (isset($_GET['from-ecwid']) && is_numeric($_GET['from-ecwid'])) {
141
+ $admin_page = 'post.php?post=' . $_GET['from-ecwid'] . '&action=edit';
142
+ }
143
+
144
+ $params['secondary_url'] = $admin_page;
145
+ }
146
+ $types_map = array(
147
+ 'info' => 'updated',
148
+ 'warning' => 'update-nag',
149
+ 'error' => 'error'
150
+ );
151
+ $params['type'] = $types_map[$params['type']];
152
+
153
+ return $params;
154
+ }
155
+
156
+ protected static function get_default_messages()
157
+ {
158
+ return array(
159
+ 'on_activate' => array(
160
+ 'title' => __('Greetings! Your Ecwid store is now active.', 'ecwid-shopping-cart'),
161
+ 'message' => __('Take a few simple steps to complete store setup', 'ecwid-shopping-cart'),
162
+ 'primary_title' => __('Set up Ecwid Store', 'ecwid-shopping-cart'),
163
+ 'primary_url' => 'admin.php?page=ecwid',
164
+ 'hideable' => true,
165
+ 'default' => 'disabled'
166
+ ),
167
+
168
+ 'on_storeid_set' => array(
169
+ 'title' => __('Good job! Your store is set up and you\'re ready to sell.', 'ecwid-shopping-cart'),
170
+ 'message' => __('Now you can fine-tune your store\'s appearance', 'ecwid-shopping-cart'),
171
+ 'primary_title' => __('Visit Storefront', 'ecwid-shopping-cart'),
172
+ 'primary_url' => '',
173
+ 'primary_blank' => true,
174
+ 'secondary_title' => __('Configure Appearance', 'ecwid-shopping-cart'),
175
+ 'secondary_url' => 'admin.php?page=ecwid-appearance',
176
+ 'hideable' => true
177
+ ),
178
+
179
+ 'on_no_storeid_on_setup_pages' => array(
180
+ 'type' => 'warning',
181
+ 'title' => __('Your store is almost ready!', 'ecwid-shopping-cart' ),
182
+ 'message' => __('Connect your Ecwid account with this site to complete setup and start selling', 'ecwid-shopping-cart' ),
183
+ 'primary_title' => __('Connect Your Ecwid Store', 'ecwid-shopping-cart' ),
184
+ 'primary_url' => 'admin.php?page=ecwid',
185
+ 'hideable' => true
186
+ ),
187
+
188
+ 'on_appearance_widgets' => array(
189
+ 'message' => __('To add extra functions to your store, drag and drop Ecwid store elements on your site. When you\'re done, you can get back to modifying your settings.', 'ecwid-shopping-cart' ),
190
+ 'secondary_title' => __('Back to Store Settings', 'ecwid-shopping-cart'),
191
+ 'secondary_url' => 'admin.php?page=ecwid-appearance',
192
+ 'hideable' => true
193
+ ),
194
+
195
+ 'please_vote' => array(
196
+ 'message' => sprintf(
197
+ __('Do you like your Ecwid online store? We\'d appreciate it if you add your review and vote for the plugin on Wordpress site.', 'ecwid-shopping-cart'),
198
+ 'target="_blank" href="http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart"'
199
+ ),
200
+ 'primary_title' => __('Rate Ecwid at WordPress.org', 'ecwid-shopping-cart'),
201
+ 'primary_url' => 'http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart',
202
+ 'hideable' => true
203
+ )
204
+ );
205
+ }
206
+
207
+ protected function need_to_show_message($name)
208
+ {
209
+ $admin_page = '';
210
+ if (function_exists('get_current_screen')) {
211
+ $screen = get_current_screen();
212
+ $admin_page = $screen->base;
213
+ }
214
+
215
+ switch ($name) {
216
+ case 'on_activate':
217
+ return $admin_page == 'plugins' && get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
218
+
219
+ case 'on_storeid_set':
220
+ return get_ecwid_store_id() != ECWID_DEMO_STORE_ID && @$_GET['settings-updated'] == 'true' && $admin_page == 'toplevel_page_ecwid';
221
+
222
+ case 'on_no_storeid_on_setup_pages':
223
+ $is_newbie = get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
224
+
225
+ $is_ecwid_settings = in_array($admin_page, array('ecwid-store_page_ecwid-advanced', 'ecwid-store_page_ecwid-appearance'));
226
+ $is_store_page = $admin_page == 'post' && isset($_GET['post']) && $_GET['post'] == ecwid_get_current_store_page_id();
227
+
228
+ return $is_newbie && ($is_ecwid_settings || $is_store_page);
229
+
230
+ case 'on_appearance_widgets':
231
+ return isset($_GET['from-ecwid']) && $admin_page == 'widgets';
232
+
233
+ case 'please_vote':
234
+ $install_date = get_option('ecwid_installation_date');
235
+
236
+ $result = false;
237
+ if (!$install_date) {
238
+ add_option('ecwid_installation_date', time());
239
+ } else {
240
+ $result = ecwid_is_paid_account() && $install_date + 60*60*24*30 < time();
241
+ }
242
+
243
+ foreach ($this->messages as $_name => $message) {
244
+ if ($_name != $name && $this->need_to_show_message($_name)) {
245
+ return false;
246
+ }
247
+ }
248
+
249
+ return $result;
250
+ }
251
+ }
252
+
253
  }
includes/class-ecwid-oauth.php CHANGED
@@ -1,117 +1,117 @@
1
- <?php
2
-
3
- class Ecwid_OAuth {
4
-
5
- public function __construct()
6
- {
7
- add_action('admin_post_ecwid_oauth', array($this, 'process_authorization'));
8
- add_action('admin_post_ecwid_disconnect', array($this, 'disconnect_store'));
9
- add_action('admin_post_ecwid_show_reconnect', array($this, 'show_reconnect'));
10
- }
11
-
12
- public function show_reconnect()
13
- {
14
- $ecwid_oauth = $this;
15
- require_once(ECWID_PLUGIN_DIR . '/templates/reconnect.php');
16
- }
17
-
18
- public function test_post()
19
- {
20
- $return = wp_remote_post('https://my.ecwid.com/api/oauth/token');
21
-
22
- return is_array($return);
23
- }
24
-
25
- public function get_auth_dialog_url( $scopes = array( 'read_store_profile', 'read_catalog' ) )
26
- {
27
- if ( !is_array( $scopes ) ) {
28
- return false;
29
- }
30
-
31
- $url = 'https://my.ecwid.com/api/oauth/authorize';
32
-
33
- $params['source'] = 'wporg';
34
- $params['client_id'] = get_option( 'ecwid_oauth_client_id' );
35
- $params['redirect_uri'] = admin_url( 'admin-post.php?action=ecwid_oauth' );
36
- $params['response_type'] = 'code';
37
- $params['scope'] = implode( ',', $scopes );
38
-
39
- return $url . '?' . build_query( $params );
40
- }
41
-
42
- public function process_authorization()
43
- {
44
- if ( isset( $_REQUEST['error'] ) || !isset( $_REQUEST['code'] ) ) {
45
- return $this->trigger_auth_error();
46
- }
47
-
48
- $params['code'] = $_REQUEST['code'];
49
- $params['client_id'] = get_option( 'ecwid_oauth_client_id' );
50
- $params['client_secret'] = get_option( 'ecwid_oauth_client_secret' );
51
- $params['redirect_uri'] = admin_url( 'admin-post.php?action=ecwid_oauth' );
52
- $params['grant_type'] = 'authorization_code';
53
-
54
- $return = wp_remote_post('https://my.ecwid.com/api/oauth/token', array('body' => $params));
55
-
56
- if (is_array($return) && isset($return['body'])) {
57
- $result = json_decode($return['body']);
58
- }
59
-
60
- if (
61
- !is_array($return)
62
- || !isset( $result->store_id )
63
- || !isset( $result->scope )
64
- || !isset( $result->access_token )
65
- || ( $result->token_type != 'Bearer' )
66
- ) {
67
- ecwid_log_error(var_export($return, true));
68
- return $this->trigger_auth_error();
69
- }
70
-
71
- update_option( 'ecwid_store_id', $result->store_id );
72
- update_option( 'ecwid_oauth_token', $result->access_token );
73
-
74
- setcookie('ecwid_create_store_clicked', null, strtotime('-1 day'), ADMIN_COOKIE_PATH, COOKIE_DOMAIN);
75
-
76
- wp_redirect('admin.php?page=ecwid&settings-updated=true');
77
- }
78
-
79
- public function disconnect_store()
80
- {
81
- update_option( 'ecwid_store_id', '' );
82
- update_option( 'ecwid_oauth_token', '' );
83
- update_option('ecwid_is_api_enabled', 'off');
84
- update_option('ecwid_api_check_time', 0);
85
-
86
- wp_redirect('admin.php?page=ecwid');
87
- }
88
-
89
- protected function trigger_auth_error()
90
- {
91
- update_option('ecwid_last_oauth_fail_time', time());
92
-
93
- $logs = get_option('ecwid_error_log');
94
-
95
- if ($logs) {
96
- $logs = json_decode($logs);
97
- }
98
-
99
- if (count($logs) > 0) {
100
- $entry = $logs[count($logs) - 1];
101
- if (isset($entry->message)) {
102
- $last_error = $entry->message;
103
- }
104
- }
105
- if (!$last_error) {
106
- return;
107
- }
108
-
109
- $url = 'http://' . APP_ECWID_COM . '/script.js?805056&data_platform=wporg&data_wporg_error=' . urlencode($last_error) . '&url=' . urlencode(get_bloginfo('url'));
110
-
111
- wp_remote_get($url);
112
-
113
- wp_redirect('admin.php?page=ecwid&connection_error=true');
114
- }
115
- }
116
-
117
- $ecwid_oauth = new Ecwid_OAuth();
1
+ <?php
2
+
3
+ class Ecwid_OAuth {
4
+
5
+ public function __construct()
6
+ {
7
+ add_action('admin_post_ecwid_oauth', array($this, 'process_authorization'));
8
+ add_action('admin_post_ecwid_disconnect', array($this, 'disconnect_store'));
9
+ add_action('admin_post_ecwid_show_reconnect', array($this, 'show_reconnect'));
10
+ }
11
+
12
+ public function show_reconnect()
13
+ {
14
+ $ecwid_oauth = $this;
15
+ require_once(ECWID_PLUGIN_DIR . '/templates/reconnect.php');
16
+ }
17
+
18
+ public function test_post()
19
+ {
20
+ $return = wp_remote_post('https://my.ecwid.com/api/oauth/token');
21
+
22
+ return is_array($return);
23
+ }
24
+
25
+ public function get_auth_dialog_url( $scopes = array( 'read_store_profile', 'read_catalog' ) )
26
+ {
27
+ if ( !is_array( $scopes ) ) {
28
+ return false;
29
+ }
30
+
31
+ $url = 'https://my.ecwid.com/api/oauth/authorize';
32
+
33
+ $params['source'] = 'wporg';
34
+ $params['client_id'] = get_option( 'ecwid_oauth_client_id' );
35
+ $params['redirect_uri'] = admin_url( 'admin-post.php?action=ecwid_oauth' );
36
+ $params['response_type'] = 'code';
37
+ $params['scope'] = implode( ',', $scopes );
38
+
39
+ return $url . '?' . build_query( $params );
40
+ }
41
+
42
+ public function process_authorization()
43
+ {
44
+ if ( isset( $_REQUEST['error'] ) || !isset( $_REQUEST['code'] ) ) {
45
+ return $this->trigger_auth_error();
46
+ }
47
+
48
+ $params['code'] = $_REQUEST['code'];
49
+ $params['client_id'] = get_option( 'ecwid_oauth_client_id' );
50
+ $params['client_secret'] = get_option( 'ecwid_oauth_client_secret' );
51
+ $params['redirect_uri'] = admin_url( 'admin-post.php?action=ecwid_oauth' );
52
+ $params['grant_type'] = 'authorization_code';
53
+
54
+ $return = wp_remote_post('https://my.ecwid.com/api/oauth/token', array('body' => $params));
55
+
56
+ if (is_array($return) && isset($return['body'])) {
57
+ $result = json_decode($return['body']);
58
+ }
59
+
60
+ if (
61
+ !is_array($return)
62
+ || !isset( $result->store_id )
63
+ || !isset( $result->scope )
64
+ || !isset( $result->access_token )
65
+ || ( $result->token_type != 'Bearer' )
66
+ ) {
67
+ ecwid_log_error(var_export($return, true));
68
+ return $this->trigger_auth_error();
69
+ }
70
+
71
+ update_option( 'ecwid_store_id', $result->store_id );
72
+ update_option( 'ecwid_oauth_token', $result->access_token );
73
+
74
+ setcookie('ecwid_create_store_clicked', null, strtotime('-1 day'), ADMIN_COOKIE_PATH, COOKIE_DOMAIN);
75
+
76
+ wp_redirect('admin.php?page=ecwid&settings-updated=true');
77
+ }
78
+
79
+ public function disconnect_store()
80
+ {
81
+ update_option( 'ecwid_store_id', '' );
82
+ update_option( 'ecwid_oauth_token', '' );
83
+ update_option('ecwid_is_api_enabled', 'off');
84
+ update_option('ecwid_api_check_time', 0);
85
+
86
+ wp_redirect('admin.php?page=ecwid');
87
+ }
88
+
89
+ protected function trigger_auth_error()
90
+ {
91
+ update_option('ecwid_last_oauth_fail_time', time());
92
+
93
+ $logs = get_option('ecwid_error_log');
94
+
95
+ if ($logs) {
96
+ $logs = json_decode($logs);
97
+ }
98
+
99
+ if (count($logs) > 0) {
100
+ $entry = $logs[count($logs) - 1];
101
+ if (isset($entry->message)) {
102
+ $last_error = $entry->message;
103
+ }
104
+ }
105
+ if (!$last_error) {
106
+ return;
107
+ }
108
+
109
+ $url = 'http://' . APP_ECWID_COM . '/script.js?805056&data_platform=wporg&data_wporg_error=' . urlencode($last_error) . '&url=' . urlencode(get_bloginfo('url'));
110
+
111
+ wp_remote_get($url);
112
+
113
+ wp_redirect('admin.php?page=ecwid&connection_error=true');
114
+ }
115
+ }
116
+
117
+ $ecwid_oauth = new Ecwid_OAuth();
includes/class-ecwid-sitemap-builder.php CHANGED
@@ -1,86 +1,86 @@
1
- <?php
2
-
3
- require_once dirname(__FILE__) . '/../lib/JSONStreamingParser/Listener.php';
4
- require_once dirname(__FILE__) . '/../lib/JSONStreamingParser/Parser.php';
5
-
6
-
7
- class EcwidSitemapBuilder implements JsonStreamingParser_Listener {
8
- var $_stack;
9
- var $_key;
10
- var $callback;
11
- var $base_url;
12
- var $api;
13
- var $type;
14
-
15
- public function __construct($base_url, $callback, $api) {
16
- $this->callback = $callback;
17
- $this->base_url = $base_url;
18
- $this->api = $api;
19
- }
20
-
21
- public function generate() {
22
-
23
- foreach (array('products', 'categories') as $type) {
24
- $this->type = $type;
25
- $stream = $this->api->get_method_response_stream($type);
26
- if (!is_null($stream)) {
27
- try {
28
- $parser = new JsonStreamingParser_Parser($stream, $this);
29
- $parser->parse();
30
- } catch (Exception $e) {
31
- fclose($stream);
32
- }
33
- }
34
- }
35
-
36
- return true;
37
- }
38
-
39
- public function file_position($line, $char) {
40
-
41
- }
42
-
43
- public function start_document() {
44
- $this->_stack = array();
45
-
46
- $this->_key = null;
47
- }
48
-
49
- public function end_document() {
50
- }
51
-
52
- public function start_object() {
53
- array_push($this->_stack, array());
54
- }
55
-
56
- public function end_object() {
57
-
58
- $obj = array_pop($this->_stack);
59
- if (is_array($obj) && array_key_exists('url', $obj)) {
60
- $callback = $this->callback;
61
-
62
- call_user_func(
63
- $callback,
64
- ecwid_get_entity_url($obj, $this->type == 'products' ? 'p' : 'c'),
65
- $this->type == 'products' ? 0.6 : 0.5,
66
- 'weekly'
67
- );
68
- }
69
- }
70
-
71
- public function start_array() {
72
- }
73
-
74
- public function end_array() {
75
- }
76
-
77
- public function key($key) {
78
- $this->_key = $key;
79
- }
80
-
81
- public function value($value) {
82
- if ($this->_key == 'url') {
83
- $this->_stack[0]['url'] = $value;
84
- }
85
- }
86
  }
1
+ <?php
2
+
3
+ require_once dirname(__FILE__) . '/../lib/JSONStreamingParser/Listener.php';
4
+ require_once dirname(__FILE__) . '/../lib/JSONStreamingParser/Parser.php';
5
+
6
+
7
+ class EcwidSitemapBuilder implements JsonStreamingParser_Listener {
8
+ var $_stack;
9
+ var $_key;
10
+ var $callback;
11
+ var $base_url;
12
+ var $api;
13
+ var $type;
14
+
15
+ public function __construct($base_url, $callback, $api) {
16
+ $this->callback = $callback;
17
+ $this->base_url = $base_url;
18
+ $this->api = $api;
19
+ }
20
+
21
+ public function generate() {
22
+
23
+ foreach (array('products', 'categories') as $type) {
24
+ $this->type = $type;
25
+ $stream = $this->api->get_method_response_stream($type);
26
+ if (!is_null($stream)) {
27
+ try {
28
+ $parser = new JsonStreamingParser_Parser($stream, $this);
29
+ $parser->parse();
30
+ } catch (Exception $e) {
31
+ fclose($stream);
32
+ }
33
+ }
34
+ }
35
+
36
+ return true;
37
+ }
38
+
39
+ public function file_position($line, $char) {
40
+
41
+ }
42
+
43
+ public function start_document() {
44
+ $this->_stack = array();
45
+
46
+ $this->_key = null;
47
+ }
48
+
49
+ public function end_document() {
50
+ }
51
+
52
+ public function start_object() {
53
+ array_push($this->_stack, array());
54
+ }
55
+
56
+ public function end_object() {
57
+
58
+ $obj = array_pop($this->_stack);
59
+ if (is_array($obj) && array_key_exists('url', $obj)) {
60
+ $callback = $this->callback;
61
+
62
+ call_user_func(
63
+ $callback,
64
+ ecwid_get_entity_url($obj, $this->type == 'products' ? 'p' : 'c'),
65
+ $this->type == 'products' ? 0.6 : 0.5,
66
+ 'weekly'
67
+ );
68
+ }
69
+ }
70
+
71
+ public function start_array() {
72
+ }
73
+
74
+ public function end_array() {
75
+ }
76
+
77
+ public function key($key) {
78
+ $this->_key = $key;
79
+ }
80
+
81
+ public function value($value) {
82
+ if ($this->_key == 'url') {
83
+ $this->_stack[0]['url'] = $value;
84
+ }
85
+ }
86
  }
includes/class-ecwid-store-editor.php CHANGED
@@ -1,84 +1,84 @@
1
- <?php
2
-
3
- class Ecwid_Store_Editor {
4
- public function __construct()
5
- {
6
- $version = get_bloginfo( 'version' );
7
- if ( version_compare( $version, '3.5' ) < 0 ) {
8
- return;
9
- }
10
-
11
- add_action( 'template_redirect', array( $this, 'get_store_svg' ) );
12
-
13
- if ( !in_array( $GLOBALS['pagenow'], array( 'post.php', 'post-new.php' ) ) ) return;
14
-
15
- $this->init();
16
- }
17
-
18
- protected function init()
19
- {
20
- add_filter( 'mce_external_plugins', array( $this, 'add_mce_plugin' ) );
21
- add_action( 'media_buttons_context', array( $this, 'add_editor_button' ) );
22
- add_action( 'admin_enqueue_scripts', array( $this, 'add_scripts' ) );
23
- add_action( 'in_admin_header', array( $this, 'add_popup' ) );
24
- }
25
-
26
- public function add_mce_plugin() {
27
- $plugins = array( 'ecwid' ); //Add any more plugins you want to load here
28
- $plugins_array = array(
29
- 'ecwid' => plugins_url( 'ecwid-shopping-cart/js/store-editor-mce.js' ),
30
- 'ecwid_common' => plugins_url( 'ecwid-shopping-cart/js/store-editor-common.js' ),
31
- );
32
-
33
- return $plugins_array;
34
- }
35
-
36
- public function add_editor_button($context) {
37
-
38
- $image_code = file_get_contents( ECWID_PLUGIN_DIR . 'images/store.svg' );
39
-
40
- $title = __( 'Add Store', 'ecwid-shopping-cart' );
41
- $button = <<<HTML
42
- <a href="#" id="insert-ecwid-button" class="button add-ecwid ecwid_button" title="$title">
43
- <span class="ecwid-store-icon">$image_code</span>
44
- $title
45
- </a>
46
- HTML;
47
-
48
- $title = __( 'Edit Store', 'ecwid-shopping-cart' );
49
- $button .= <<<HTML
50
- <a href="#" id="update-ecwid-button" class="button update-ecwid ecwid_button" title="$title">
51
- <span class="ecwid-store-icon">$image_code</span>
52
- $title
53
- </a>
54
- HTML;
55
-
56
- return $context . $button;
57
- }
58
-
59
- public function add_scripts() {
60
- wp_enqueue_style( 'ecwid-store-editor-css', plugins_url( 'ecwid-shopping-cart/css/store-popup.css' ), array(), get_option('ecwid_plugin_version') );
61
- wp_enqueue_script( 'ecwid-store-editor-common-js', plugins_url( 'ecwid-shopping-cart/js/store-editor-common.js' ), array(), get_option('ecwid_plugin_version') );
62
- wp_enqueue_script( 'ecwid-store-editor-page-js', plugins_url('ecwid-shopping-cart/js/store-editor-page.js' ), array(), get_option('ecwid_plugin_version') );
63
- wp_localize_script( 'ecwid-store-editor-page-js', 'ecwid_i18n', array( 'edit_store_appearance' => __( 'Edit Appearance', 'ecwid-shopping-cart' ) ) );
64
- add_editor_style( plugins_url( 'ecwid-shopping-cart/css/page-editor.css' ) );
65
- }
66
-
67
- public function get_store_svg() {
68
- // TODO: Move this to admin-post
69
- if (isset($_GET['file']) && $_GET['file'] == 'ecwid_store_svg.svg' && current_user_can('administrator')) {
70
- ecwid_load_textdomain();
71
- header( 'Content-type: image/svg+xml' );
72
- require_once( ECWID_PLUGIN_DIR . 'templates/store-svg.php' );
73
- die();
74
- }
75
- }
76
-
77
- public function add_popup() {
78
- $categories = ecwid_get_categories_for_selector();
79
-
80
- require_once( ECWID_PLUGIN_DIR . 'templates/store-popup.php' );
81
- }
82
- }
83
-
84
- $ecwid_store_editor = new Ecwid_Store_Editor();
1
+ <?php
2
+
3
+ class Ecwid_Store_Editor {
4
+ public function __construct()
5
+ {
6
+ $version = get_bloginfo( 'version' );
7
+ if ( version_compare( $version, '3.5' ) < 0 ) {
8
+ return;
9
+ }
10
+
11
+ add_action( 'template_redirect', array( $this, 'get_store_svg' ) );
12
+
13
+ if ( !in_array( $GLOBALS['pagenow'], array( 'post.php', 'post-new.php' ) ) ) return;
14
+
15
+ $this->init();
16
+ }
17
+
18
+ protected function init()
19
+ {
20
+ add_filter( 'mce_external_plugins', array( $this, 'add_mce_plugin' ) );
21
+ add_action( 'media_buttons_context', array( $this, 'add_editor_button' ) );
22
+ add_action( 'admin_enqueue_scripts', array( $this, 'add_scripts' ) );
23
+ add_action( 'in_admin_header', array( $this, 'add_popup' ) );
24
+ }
25
+
26
+ public function add_mce_plugin() {
27
+ $plugins = array( 'ecwid' ); //Add any more plugins you want to load here
28
+ $plugins_array = array(
29
+ 'ecwid' => plugins_url( 'ecwid-shopping-cart/js/store-editor-mce.js' ),
30
+ 'ecwid_common' => plugins_url( 'ecwid-shopping-cart/js/store-editor-common.js' ),
31
+ );
32
+
33
+ return $plugins_array;
34
+ }
35
+
36
+ public function add_editor_button($context) {
37
+
38
+ $image_code = file_get_contents( ECWID_PLUGIN_DIR . 'images/store.svg' );
39
+
40
+ $title = __( 'Add Store', 'ecwid-shopping-cart' );
41
+ $button = <<<HTML
42
+ <a href="#" id="insert-ecwid-button" class="button add-ecwid ecwid_button" title="$title">
43
+ <span class="ecwid-store-icon">$image_code</span>
44
+ $title
45
+ </a>
46
+ HTML;
47
+
48
+ $title = __( 'Edit Store', 'ecwid-shopping-cart' );
49
+ $button .= <<<HTML
50
+ <a href="#" id="update-ecwid-button" class="button update-ecwid ecwid_button" title="$title">
51
+ <span class="ecwid-store-icon">$image_code</span>
52
+ $title
53
+ </a>
54
+ HTML;
55
+
56
+ return $context . $button;
57
+ }
58
+
59
+ public function add_scripts() {
60
+ wp_enqueue_style( 'ecwid-store-editor-css', plugins_url( 'ecwid-shopping-cart/css/store-popup.css' ), array(), get_option('ecwid_plugin_version') );
61
+ wp_enqueue_script( 'ecwid-store-editor-common-js', plugins_url( 'ecwid-shopping-cart/js/store-editor-common.js' ), array(), get_option('ecwid_plugin_version') );
62
+ wp_enqueue_script( 'ecwid-store-editor-page-js', plugins_url('ecwid-shopping-cart/js/store-editor-page.js' ), array(), get_option('ecwid_plugin_version') );
63
+ wp_localize_script( 'ecwid-store-editor-page-js', 'ecwid_i18n', array( 'edit_store_appearance' => __( 'Edit Appearance', 'ecwid-shopping-cart' ) ) );
64
+ add_editor_style( plugins_url( 'ecwid-shopping-cart/css/page-editor.css' ) );
65
+ }
66
+
67
+ public function get_store_svg() {
68
+ // TODO: Move this to admin-post
69
+ if (isset($_GET['file']) && $_GET['file'] == 'ecwid_store_svg.svg' && current_user_can('administrator')) {
70
+ ecwid_load_textdomain();
71
+ header( 'Content-type: image/svg+xml' );
72
+ require_once( ECWID_PLUGIN_DIR . 'templates/store-svg.php' );
73
+ die();
74
+ }
75
+ }
76
+
77
+ public function add_popup() {
78
+ $categories = ecwid_get_categories_for_selector();
79
+
80
+ require_once( ECWID_PLUGIN_DIR . 'templates/store-popup.php' );
81
+ }
82
+ }
83
+
84
+ $ecwid_store_editor = new Ecwid_Store_Editor();
includes/themes.php CHANGED
@@ -1,68 +1,80 @@
1
- <?php
2
-
3
- define( 'ECWID_THEMES_DIR', ECWID_PLUGIN_DIR . '/includes/themes' );
4
-
5
- add_action('after_switch_theme', 'ecwid_after_switch_theme');
6
-
7
-
8
- function ecwid_get_theme_name()
9
- {
10
- $version = get_bloginfo('version');
11
-
12
- if (version_compare( $version, '3.4' ) < 0) {
13
- $theme_name = get_current_theme();
14
- } else {
15
- $theme = wp_get_theme();
16
- $theme_name = $theme->Name;
17
- }
18
-
19
- return $theme_name;
20
- }
21
-
22
- function ecwid_get_theme_identification()
23
- {
24
- $version = get_bloginfo('version');
25
-
26
- if (version_compare( $version, '3.4' ) < 0) {
27
- $theme_name = get_template();
28
- } else {
29
- $theme = wp_get_theme();
30
- $theme_name = $theme->template;
31
- }
32
-
33
- return $theme_name;
34
- }
35
-
36
- function ecwid_apply_theme($theme_name = null)
37
- {
38
- $themes = array('bretheon', 'responsive', 'twentyfourteen', 'pagelines', 'envision', 'twentyfifteen', 'customizr', 'evolve');
39
-
40
- if (empty($theme_name)) {
41
- $theme_name = ecwid_get_theme_identification();
42
- }
43
-
44
- $theme_file = '';
45
-
46
- if (in_array($theme_name, $themes)) {
47
-
48
- $theme_file = ECWID_THEMES_DIR . '/class-ecwid-theme-' . $theme_name . '.php';
49
- }
50
-
51
- $theme_file = apply_filters( 'ecwid_get_theme_file', $theme_file );
52
-
53
- if ( !empty( $theme_file ) && is_file( $theme_file ) && is_readable( $theme_file ) ) {
54
- require_once( $theme_file );
55
- }
56
- }
57
-
58
- function ecwid_after_switch_theme()
59
- {
60
- ecwid_apply_theme();
61
-
62
- global $ecwid_current_theme;
63
-
64
- update_option(
65
- 'ecwid_advanced_theme_layout',
66
- isset($ecwid_current_theme) && $ecwid_current_theme->has_advanced_layout ? 'Y' : 'N'
67
- );
 
 
 
 
 
 
 
 
 
 
 
 
68
  }
1
+ <?php
2
+
3
+ define( 'ECWID_THEMES_DIR', ECWID_PLUGIN_DIR . '/includes/themes' );
4
+
5
+ add_action('after_switch_theme', 'ecwid_after_switch_theme');
6
+
7
+
8
+ function ecwid_get_theme_name()
9
+ {
10
+ $version = get_bloginfo('version');
11
+
12
+ if (version_compare( $version, '3.4' ) < 0) {
13
+ $theme_name = get_current_theme();
14
+ } else {
15
+ $theme = wp_get_theme();
16
+ $theme_name = $theme->Name;
17
+ }
18
+
19
+ return $theme_name;
20
+ }
21
+
22
+ function ecwid_get_theme_identification()
23
+ {
24
+ $version = get_bloginfo('version');
25
+
26
+ if (version_compare( $version, '3.4' ) < 0) {
27
+ $theme_name = get_template();
28
+ } else {
29
+ $theme = wp_get_theme();
30
+ $theme_name = $theme->template;
31
+ }
32
+
33
+ return $theme_name;
34
+ }
35
+
36
+ function ecwid_apply_theme($theme_name = null)
37
+ {
38
+ $themes = array(
39
+ 'bretheon',
40
+ 'responsive',
41
+ 'twentyfourteen',
42
+ 'pagelines',
43
+ 'envision',
44
+ 'twentyfifteen',
45
+ 'customizr',
46
+ 'evolve',
47
+ 'twentytwelve',
48
+ 'genesis',
49
+ 'twentysixteen'
50
+ );
51
+
52
+ if (empty($theme_name)) {
53
+ $theme_name = ecwid_get_theme_identification();
54
+ }
55
+
56
+ $theme_file = '';
57
+
58
+ if (in_array($theme_name, $themes)) {
59
+
60
+ $theme_file = ECWID_THEMES_DIR . '/class-ecwid-theme-' . $theme_name . '.php';
61
+ }
62
+
63
+ $theme_file = apply_filters( 'ecwid_get_theme_file', $theme_file );
64
+
65
+ if ( !empty( $theme_file ) && is_file( $theme_file ) && is_readable( $theme_file ) ) {
66
+ require_once( $theme_file );
67
+ }
68
+ }
69
+
70
+ function ecwid_after_switch_theme()
71
+ {
72
+ ecwid_apply_theme();
73
+
74
+ global $ecwid_current_theme;
75
+
76
+ update_option(
77
+ 'ecwid_advanced_theme_layout',
78
+ isset($ecwid_current_theme) && $ecwid_current_theme->has_advanced_layout ? 'Y' : 'N'
79
+ );
80
  }
includes/themes/class-ecwid-theme-base.php CHANGED
@@ -1,25 +1,25 @@
1
- <?php
2
-
3
- class Ecwid_Theme_Base {
4
-
5
- public $has_advanced_layout = false;
6
-
7
- protected $adjust_pb_scroll = false;
8
-
9
- public function __construct()
10
- {
11
- if ( $this->adjust_pb_scroll ) {
12
- wp_enqueue_script(
13
- 'ecwid-scroller',
14
- plugins_url( 'ecwid-shopping-cart/js/create_scroller.js' ),
15
- array( 'jquery' ),
16
- get_option('ecwid_plugin_version')
17
- );
18
- }
19
- }
20
-
21
- protected function need_advanced_layout()
22
- {
23
- return get_option('ecwid_advanced_theme_layout') == 'Y';
24
- }
25
  }
1
+ <?php
2
+
3
+ class Ecwid_Theme_Base {
4
+
5
+ public $has_advanced_layout = false;
6
+
7
+ protected $adjust_pb_scroll = false;
8
+
9
+ public function __construct()
10
+ {
11
+ if ( $this->adjust_pb_scroll ) {
12
+ wp_enqueue_script(
13
+ 'ecwid-scroller',
14
+ plugins_url( 'ecwid-shopping-cart/js/create_scroller.js' ),
15
+ array( 'jquery' ),
16
+ get_option('ecwid_plugin_version')
17
+ );
18
+ }
19
+ }
20
+
21
+ protected function need_advanced_layout()
22
+ {
23
+ return get_option('ecwid_advanced_theme_layout') == 'Y';
24
+ }
25
  }
includes/themes/class-ecwid-theme-bretheon.php CHANGED
@@ -1,36 +1,36 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Bretheon extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Bretheon';
8
-
9
- public function __construct()
10
- {
11
- parent::__construct();
12
-
13
- add_filter( 'ecwid_page_has_product_browser', array( $this, 'has_product_browser' ) );
14
- }
15
-
16
- public function has_product_browser( $value )
17
- {
18
- if ( $value ) {
19
- return $value;
20
- }
21
-
22
- $meta = get_post_meta( get_the_ID(), 'mfn-page-items' );
23
- if ( is_array( $meta ) ) {
24
- $meta = base64_decode( $meta[0] );
25
-
26
- // not exactly the intended usage, but quite simple and still works
27
- // $meta is a serialized array that has the actual content
28
- // a right way is to walk through the structure and run has_shortcode against all fields
29
- $result = ecwid_content_has_productbrowser($meta);
30
- }
31
-
32
- return $result;
33
- }
34
- }
35
-
36
  $ecwid_current_theme = new Ecwid_Theme_Bretheon();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_Bretheon extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Bretheon';
8
+
9
+ public function __construct()
10
+ {
11
+ parent::__construct();
12
+
13
+ add_filter( 'ecwid_page_has_product_browser', array( $this, 'has_product_browser' ) );
14
+ }
15
+
16
+ public function has_product_browser( $value )
17
+ {
18
+ if ( $value ) {
19
+ return $value;
20
+ }
21
+
22
+ $meta = get_post_meta( get_the_ID(), 'mfn-page-items' );
23
+ if ( is_array( $meta ) ) {
24
+ $meta = base64_decode( $meta[0] );
25
+
26
+ // not exactly the intended usage, but quite simple and still works
27
+ // $meta is a serialized array that has the actual content
28
+ // a right way is to walk through the structure and run has_shortcode against all fields
29
+ $result = ecwid_content_has_productbrowser($meta);
30
+ }
31
+
32
+ return $result;
33
+ }
34
+ }
35
+
36
  $ecwid_current_theme = new Ecwid_Theme_Bretheon();
includes/themes/class-ecwid-theme-customizr.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Customizr extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Customizr';
8
-
9
- protected $adjust_pb_scroll = true;
10
-
11
- public function __construct()
12
- {
13
- parent::__construct();
14
-
15
- wp_enqueue_script( 'ecwid-theme-js', plugins_url( 'ecwid-shopping-cart/js/themes/customizr.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
16
- wp_enqueue_style( 'ecwid-theme-fixes' , plugins_url( 'ecwid-shopping-cart/css/themes/customizr.css' ), array(), get_option('ecwid_plugin_version'), 'all' );
17
- }
18
- }
19
-
20
  $ecwid_current_theme = new Ecwid_Theme_Customizr();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_Customizr extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Customizr';
8
+
9
+ protected $adjust_pb_scroll = true;
10
+
11
+ public function __construct()
12
+ {
13
+ parent::__construct();
14
+
15
+ wp_enqueue_script( 'ecwid-theme-js', plugins_url( 'ecwid-shopping-cart/js/themes/customizr.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
16
+ wp_enqueue_style( 'ecwid-theme-fixes' , plugins_url( 'ecwid-shopping-cart/css/themes/customizr.css' ), array(), get_option('ecwid_plugin_version'), 'all' );
17
+ }
18
+ }
19
+
20
  $ecwid_current_theme = new Ecwid_Theme_Customizr();
includes/themes/class-ecwid-theme-envision.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Envision extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Envision';
8
-
9
- public function __construct()
10
- {
11
- parent::__construct();
12
-
13
- add_filter( 'ecwid_page_has_product_browser', array( $this, 'has_product_browser' ) );
14
- }
15
-
16
- public function has_product_browser( $value )
17
- {
18
- if ( $value ) {
19
- return $value;
20
- }
21
-
22
- $meta = serialize(get_post_meta( get_the_ID(), 'env_composer' ));
23
- //die(print_r(serialize($meta)));
24
-
25
- // not exactly the intended usage, but quite simple and still works
26
- // $meta is a serialized array that has the actual content
27
- // a right way is to walk through the structure and run has_shortcode against all fields
28
- $result = ecwid_content_has_productbrowser($meta);
29
-
30
- return $result;
31
- }
32
- }
33
-
34
  $ecwid_current_theme = new Ecwid_Theme_Envision();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_Envision extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Envision';
8
+
9
+ public function __construct()
10
+ {
11
+ parent::__construct();
12
+
13
+ add_filter( 'ecwid_page_has_product_browser', array( $this, 'has_product_browser' ) );
14
+ }
15
+
16
+ public function has_product_browser( $value )
17
+ {
18
+ if ( $value ) {
19
+ return $value;
20
+ }
21
+
22
+ $meta = serialize(get_post_meta( get_the_ID(), 'env_composer' ));
23
+ //die(print_r(serialize($meta)));
24
+
25
+ // not exactly the intended usage, but quite simple and still works
26
+ // $meta is a serialized array that has the actual content
27
+ // a right way is to walk through the structure and run has_shortcode against all fields
28
+ $result = ecwid_content_has_productbrowser($meta);
29
+
30
+ return $result;
31
+ }
32
+ }
33
+
34
  $ecwid_current_theme = new Ecwid_Theme_Envision();
includes/themes/class-ecwid-theme-pagelines.php CHANGED
@@ -1,19 +1,19 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Pagelines extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Pagelines';
8
-
9
- protected $adjust_pb_scroll = true;
10
-
11
- public function __construct()
12
- {
13
- parent::__construct();
14
-
15
- wp_enqueue_script( 'ecwid-theme-js', plugins_url( 'ecwid-shopping-cart/js/themes/pagelines.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
16
- }
17
- }
18
-
19
  $ecwid_current_theme = new Ecwid_Theme_Pagelines();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_Pagelines extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Pagelines';
8
+
9
+ protected $adjust_pb_scroll = true;
10
+
11
+ public function __construct()
12
+ {
13
+ parent::__construct();
14
+
15
+ wp_enqueue_script( 'ecwid-theme-js', plugins_url( 'ecwid-shopping-cart/js/themes/pagelines.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
16
+ }
17
+ }
18
+
19
  $ecwid_current_theme = new Ecwid_Theme_Pagelines();
includes/themes/class-ecwid-theme-responsive.php CHANGED
@@ -1,76 +1,76 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Responsive extends Ecwid_Theme_Base
6
- {
7
- public $has_advanced_layout = true;
8
-
9
- public function __construct()
10
- {
11
- parent::__construct();
12
-
13
- if (!is_admin()) {
14
-
15
- if ( $this->need_advanced_layout() ) {
16
- wp_enqueue_style( 'ecwid-theme-adjustments' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive-adjustments.css' ), array(), get_option('ecwid_plugin_version'), 'all' );
17
- wp_enqueue_script( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/js/themes/responsive.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
18
-
19
- add_filter( 'ecwid_minicart_shortcode_content', array( $this, 'minicart_shortcode_content' ) );
20
- add_filter( 'ecwid_search_shortcode_content', array( $this, 'search_shortcode_content' ) );
21
- }
22
-
23
- wp_enqueue_style( 'ecwid-open-sans' , 'http://fonts.googleapis.com/css?family=Open+Sans:400,700&subset=latin,cyrillic-ext,cyrillic,greek-ext,vietnamese,greek,latin-ext');
24
- wp_enqueue_style( 'dashicons' );
25
- wp_enqueue_style( 'ecwid-theme-fixes' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive.css' ), array(), get_option('ecwid_plugin_version'), 'all' );
26
-
27
- add_filter('body_class', array($this, 'body_class'));
28
-
29
- } else {
30
-
31
- add_action('ecwid_store_page_created', array($this, 'on_create_store_page'));
32
- add_action('switch_theme', array($this, 'switch_theme'));
33
-
34
- }
35
-
36
- }
37
-
38
- public function switch_theme()
39
- {
40
-
41
- }
42
-
43
- public function minicart_shortcode_content( $content )
44
- {
45
-
46
- if ( ecwid_page_has_productbrowser() ) {
47
- $content = '<script data-cfasync="false" type="text/javascript"> xMinicart("style=","layout=Mini"); </script>';
48
- }
49
-
50
- return $content;
51
- }
52
-
53
- public function search_shortcode_content( $content ) {
54
-
55
- $content .= '<script data-cfasync="false" type="text/javascript">jQuery(document.body).addClass("ecwid-with-search"); </script>';
56
-
57
- return $content;
58
- }
59
-
60
- public function body_class($classes)
61
- {
62
- if (get_option('ecwid_show_search_box')) {
63
- $classes[] = 'ecwid-with-search';
64
- }
65
-
66
- return $classes;
67
- }
68
-
69
- public function on_create_store_page($page_id)
70
- {
71
- update_post_meta($page_id, '_wp_page_template', 'full-width-page.php');
72
- }
73
- }
74
-
75
- global $ecwid_current_theme;
76
  $ecwid_current_theme = new Ecwid_Theme_Responsive();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_Responsive extends Ecwid_Theme_Base
6
+ {
7
+ public $has_advanced_layout = true;
8
+
9
+ public function __construct()
10
+ {
11
+ parent::__construct();
12
+
13
+ if (!is_admin()) {
14
+
15
+ if ( $this->need_advanced_layout() ) {
16
+ wp_enqueue_style( 'ecwid-theme-adjustments' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive-adjustments.css' ), array(), get_option('ecwid_plugin_version'), 'all' );
17
+ wp_enqueue_script( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/js/themes/responsive.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
18
+
19
+ add_filter( 'ecwid_minicart_shortcode_content', array( $this, 'minicart_shortcode_content' ) );
20
+ add_filter( 'ecwid_search_shortcode_content', array( $this, 'search_shortcode_content' ) );
21
+ }
22
+
23
+ wp_enqueue_style( 'ecwid-open-sans' , 'http://fonts.googleapis.com/css?family=Open+Sans:400,700&subset=latin,cyrillic-ext,cyrillic,greek-ext,vietnamese,greek,latin-ext');
24
+ wp_enqueue_style( 'dashicons' );
25
+ wp_enqueue_style( 'ecwid-theme-fixes' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive.css' ), array(), get_option('ecwid_plugin_version'), 'all' );
26
+
27
+ add_filter('body_class', array($this, 'body_class'));
28
+
29
+ } else {
30
+
31
+ add_action('ecwid_store_page_created', array($this, 'on_create_store_page'));
32
+ add_action('switch_theme', array($this, 'switch_theme'));
33
+
34
+ }
35
+
36
+ }
37
+
38
+ public function switch_theme()
39
+ {
40
+
41
+ }
42
+
43
+ public function minicart_shortcode_content( $content )
44
+ {
45
+
46
+ if ( ecwid_page_has_productbrowser() ) {
47
+ $content = '<script data-cfasync="false" type="text/javascript"> xMinicart("style=","layout=Mini"); </script>';
48
+ }
49
+
50
+ return $content;
51
+ }
52
+
53
+ public function search_shortcode_content( $content ) {
54
+
55
+ $content .= '<script data-cfasync="false" type="text/javascript">jQuery(document.body).addClass("ecwid-with-search"); </script>';
56
+
57
+ return $content;
58
+ }
59
+
60
+ public function body_class($classes)
61
+ {
62
+ if (get_option('ecwid_show_search_box')) {
63
+ $classes[] = 'ecwid-with-search';
64
+ }
65
+
66
+ return $classes;
67
+ }
68
+
69
+ public function on_create_store_page($page_id)
70
+ {
71
+ update_post_meta($page_id, '_wp_page_template', 'full-width-page.php');
72
+ }
73
+ }
74
+
75
+ global $ecwid_current_theme;
76
  $ecwid_current_theme = new Ecwid_Theme_Responsive();
includes/themes/class-ecwid-theme-twentyfifteen.php CHANGED
@@ -1,43 +1,43 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_2015 extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Twenty Fifteen';
8
-
9
- public function __construct()
10
- {
11
- parent::__construct();
12
-
13
- if (ecwid_page_has_productbrowser()) {
14
- wp_enqueue_style( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/css/themes/2015.css' ), array('twentyfifteen-style'), get_option('ecwid_plugin_version') );
15
- }
16
-
17
- add_action('ecwid_plugin_installed', array($this, 'on_ecwid_plugin_installed'));
18
- }
19
-
20
- public function on_ecwid_plugin_installed()
21
- {
22
- $widgets = get_option('sidebars_widgets');
23
-
24
- if (strpos(implode(' ', $widgets['sidebar-1']), 'ecwidstorelink') === false) {
25
- array_unshift($widgets['sidebar-1'], 'ecwidstorelink-2');
26
- wp_set_sidebars_widgets($widgets);
27
-
28
- $options = get_option('widget_ecwidstorelink');
29
- if (!$options) {
30
- $options = array(
31
- 2 => array(
32
- 'label' => __('Shop', 'ecwid-shopping-cart')
33
- ),
34
- '_multiwidget' => 1
35
- );
36
- }
37
-
38
- update_option('widget_ecwidstorelink', $options);
39
- }
40
- }
41
- }
42
-
43
  $ecwid_current_theme = new Ecwid_Theme_2015();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_2015 extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Twenty Fifteen';
8
+
9
+ public function __construct()
10
+ {
11
+ parent::__construct();
12
+
13
+ if (ecwid_page_has_productbrowser()) {
14
+ wp_enqueue_style( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/css/themes/2015.css' ), array('twentyfifteen-style'), get_option('ecwid_plugin_version') );
15
+ }
16
+
17
+ add_action('ecwid_plugin_installed', array($this, 'on_ecwid_plugin_installed'));
18
+ }
19
+
20
+ public function on_ecwid_plugin_installed()
21
+ {
22
+ $widgets = get_option('sidebars_widgets');
23
+
24
+ if (strpos(implode(' ', $widgets['sidebar-1']), 'ecwidstorelink') === false) {
25
+ array_unshift($widgets['sidebar-1'], 'ecwidstorelink-2');
26
+ wp_set_sidebars_widgets($widgets);
27
+
28
+ $options = get_option('widget_ecwidstorelink');
29
+ if (!$options) {
30
+ $options = array(
31
+ 2 => array(
32
+ 'label' => __('Shop', 'ecwid-shopping-cart')
33
+ ),
34
+ '_multiwidget' => 1
35
+ );
36
+ }
37
+
38
+ update_option('widget_ecwidstorelink', $options);
39
+ }
40
+ }
41
+ }
42
+
43
  $ecwid_current_theme = new Ecwid_Theme_2015();
includes/themes/class-ecwid-theme-twentyfourteen.php CHANGED
@@ -1,21 +1,21 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_2014 extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Twenty Fourteen';
8
-
9
- protected $adjust_pb_scroll = true;
10
-
11
- public function __construct()
12
- {
13
- parent::__construct();
14
-
15
- if (ecwid_page_has_productbrowser()) {
16
- wp_enqueue_style( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/css/themes/2014.css' ), array('twentyfourteen-style'), get_option('ecwid_plugin_version') );
17
- }
18
- }
19
- }
20
-
21
  $ecwid_current_theme = new Ecwid_Theme_2014();
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_2014 extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Twenty Fourteen';
8
+
9
+ protected $adjust_pb_scroll = true;
10
+
11
+ public function __construct()
12
+ {
13
+ parent::__construct();
14
+
15
+ if (ecwid_page_has_productbrowser()) {
16
+ wp_enqueue_style( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/css/themes/2014.css' ), array('twentyfourteen-style'), get_option('ecwid_plugin_version') );
17
+ }
18
+ }
19
+ }
20
+
21
  $ecwid_current_theme = new Ecwid_Theme_2014();
includes/themes/class-ecwid-theme-twentytwelve.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
+
5
+ class Ecwid_Theme_2012 extends Ecwid_Theme_Base
6
+ {
7
+ protected $name = 'Twenty Twelve';
8
+
9
+ protected $adjust_pb_scroll = true;
10
+
11
+ public function __construct()
12
+ {
13
+ parent::__construct();
14
+
15
+ if (ecwid_page_has_productbrowser()) {
16
+ wp_enqueue_script( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/js/themes/2012.js' ), array( 'jquery' ), get_option('ecwid_plugin_version'), true );
17
+ }
18
+ }
19
+ }
20
+
21
+ $ecwid_current_theme = new Ecwid_Theme_2012();
js/admin.js CHANGED
@@ -1,72 +1,72 @@
1
- jQuery(document).ready(function() {
2
- jQuery('#hide-vote-message').click(function() {
3
- jQuery('#hide-vote-message').addClass('hiding');
4
- jQuery.getJSON(
5
- 'admin-ajax.php',
6
- { action:'ecwid_hide_vote_message' },
7
- function(data) {
8
- jQuery('#hide-vote-message').removeClass('hiding')
9
- .closest('div.update-nag, div.updated.fade').fadeOut();
10
- }
11
- );
12
- });
13
-
14
- jQuery('a.ecwid-message-hide').click(function() {
15
-
16
- var a = this;
17
- jQuery(a).css('cursor', 'wait');
18
- jQuery.getJSON(
19
- 'admin-ajax.php',
20
- {
21
- action: 'ecwid_hide_message',
22
- message: a.name
23
- },
24
- function(data) {
25
- jQuery(a).closest('.ecwid-message').fadeOut();
26
- }
27
- );
28
- });
29
-
30
- if (location.href.match(/wp-admin\/widgets.php/)) {
31
- jQuery('div[id^="widget-"]').filter('div[id*="_ecwid"]').each(function(idx, el) {
32
- if (location.href.match(/wp-admin\/widgets.php\?from-ecwid=/) && el.id.match(/__i__/)) {
33
- if (jQuery('.ecwid-widget').length > 0) {
34
- jQuery(el).insertAfter(jQuery('.ecwid-widget:last'));
35
- } else {
36
- jQuery(el).prependTo(jQuery('#widget-list'));
37
- }
38
- jQuery('.widget-top', el).addClass('ecwid-widget-highlighted');
39
-
40
- }
41
-
42
- var classname = el.id.match(/ecwid(.*)-__i__/);
43
- if (classname) {
44
- classname = 'ecwid-widget-' + classname[1];
45
- jQuery(el).addClass('ecwid-widget')
46
- .find('.widget-top')
47
- .addClass(classname);
48
- }
49
- });
50
- }
51
-
52
- jQuery('.drop-down').each(function(idx, el) {
53
- jQuery(el).find('>span').click(function (e) {
54
- jQuery(e.target).closest('.drop-down').addClass('hover');
55
-
56
- jQuery(window).bind('click.ecwidDropDown', function(e) {
57
- if (jQuery(e.target).closest('.drop-down')[0] != el) {
58
- jQuery(window).unbind('.ecwidDropDown');
59
- jQuery(el).removeClass('hover');
60
- }
61
- });
62
- })
63
- });
64
-
65
- jQuery('#ecwid-connect-no-oauth').click(function() {
66
- debugger;
67
- if (jQuery('#ecwid-store-id').val()) {
68
- location.href = this.href + '&force_store_id=' + jQuery('#ecwid-store-id').val();
69
- }
70
- return false;
71
- });
72
- });
1
+ jQuery(document).ready(function() {
2
+ jQuery('#hide-vote-message').click(function() {
3
+ jQuery('#hide-vote-message').addClass('hiding');
4
+ jQuery.getJSON(
5
+ 'admin-ajax.php',
6
+ { action:'ecwid_hide_vote_message' },
7
+ function(data) {
8
+ jQuery('#hide-vote-message').removeClass('hiding')
9
+ .closest('div.update-nag, div.updated.fade').fadeOut();
10
+ }
11
+ );
12
+ });
13
+
14
+ jQuery('a.ecwid-message-hide').click(function() {
15
+
16
+ var a = this;
17
+ jQuery(a).css('cursor', 'wait');
18
+ jQuery.getJSON(
19
+ 'admin-ajax.php',
20
+ {
21
+ action: 'ecwid_hide_message',
22
+ message: a.name
23
+ },
24
+ function(data) {
25
+ jQuery(a).closest('.ecwid-message').fadeOut();
26
+ }
27
+ );
28
+ });
29
+
30
+ if (location.href.match(/wp-admin\/widgets.php/) || location.href.match(/wp-admin\/customize.php/)) {
31
+ jQuery('div[id^="widget-"]').filter('div[id*="_ecwid"]').each(function(idx, el) {
32
+ if (location.href.match(/wp-admin\/widgets.php\?from-ecwid=/) && el.id.match(/__i__/)) {
33
+ if (jQuery('.ecwid-widget').length > 0) {
34
+ jQuery(el).insertAfter(jQuery('.ecwid-widget:last'));
35
+ } else {
36
+ jQuery(el).prependTo(jQuery('#widget-list'));
37
+ }
38
+ jQuery('.widget-top', el).addClass('ecwid-widget-highlighted');
39
+
40
+ }
41
+
42
+ var classname = el.id.match(/ecwid(.*)-__i__/);
43
+ if (classname) {
44
+ classname = 'ecwid-widget-' + classname[1];
45
+ jQuery(el).addClass('ecwid-widget')
46
+ .find('.widget-top')
47
+ .addClass(classname);
48
+ }
49
+ });
50
+ }
51
+
52
+ jQuery('.drop-down').each(function(idx, el) {
53
+ jQuery(el).find('>span').click(function (e) {
54
+ jQuery(e.target).closest('.drop-down').addClass('hover');
55
+
56
+ jQuery(window).bind('click.ecwidDropDown', function(e) {
57
+ if (jQuery(e.target).closest('.drop-down')[0] != el) {
58
+ jQuery(window).unbind('.ecwidDropDown');
59
+ jQuery(el).removeClass('hover');
60
+ }
61
+ });
62
+ })
63
+ });
64
+
65
+ jQuery('#ecwid-connect-no-oauth').click(function() {
66
+ debugger;
67
+ if (jQuery('#ecwid-store-id').val()) {
68
+ location.href = this.href + '&force_store_id=' + jQuery('#ecwid-store-id').val();
69
+ }
70
+ return false;
71
+ });
72
+ });
js/appearance.js CHANGED
@@ -1,7 +1,7 @@
1
- if (!Modernizr.svg) {
2
- for (var i in {grid:1,list:1,table:1}) {
3
- var parent = jQuery('.' + i + '.ecwid-pb-view-size .main-area');
4
- parent.find('svg').remove();
5
- parent.append('<div class="fallback-image ' + i + '-image"></div>');
6
- }
7
  }
1
+ if (!Modernizr.svg) {
2
+ for (var i in {grid:1,list:1,table:1}) {
3
+ var parent = jQuery('.' + i + '.ecwid-pb-view-size .main-area');
4
+ parent.find('svg').remove();
5
+ parent.append('<div class="fallback-image ' + i + '-image"></div>');
6
+ }
7
  }
js/create_scroller.js CHANGED
@@ -1,5 +1,5 @@
1
- jQuery(document).ready(function() {
2
- if (jQuery('#ecwid_product_browser_scroller').length == 0) {
3
- jQuery('div[id^="ecwid-store-"]').before('<div id="ecwid_product_browser_scroller" class="ecwid-scroller-adjustment"></div>');
4
- }
5
  });
1
+ jQuery(document).ready(function() {
2
+ if (jQuery('#ecwid_product_browser_scroller').length == 0) {
3
+ jQuery('div[id^="ecwid-store-"]').before('<div id="ecwid_product_browser_scroller" class="ecwid-scroller-adjustment"></div>');
4
+ }
5
  });
js/dashboard.js CHANGED
@@ -1,26 +1,26 @@
1
- jQuery(window).resize(function() {
2
- if (jQuery(this).width() < 768) {
3
- jQuery('.ecwid-admin').addClass('width-smaller');
4
- var head =
5
- jQuery('.ecwid-dashboard .box .head');
6
- /*
7
- head.addClass('drop-down');
8
- head.find('h2').addClass('drop-down-head');
9
- head.find('ul').addClass('drop-down-content open').removeClass('head-links');*/
10
- } else {
11
- jQuery('.ecwid-admin').removeClass('width-smaller');
12
- }
13
- }).trigger('resize');
14
-
15
- show_reconnect = function() {
16
- jQuery('<div class="ecwid-popup"></div>').load(
17
- 'admin-post.php?action=ecwid_show_reconnect',
18
- '',
19
- function() {
20
- jQuery('.ecwid-popup .close').click(function() {
21
- jQuery(this).closest('.ecwid-popup').remove();
22
- });
23
- }
24
- ).appendTo('body');
25
-
26
  }
1
+ jQuery(window).resize(function() {
2
+ if (jQuery(this).width() < 768) {
3
+ jQuery('.ecwid-admin').addClass('width-smaller');
4
+ var head =
5
+ jQuery('.ecwid-dashboard .box .head');
6
+ /*
7
+ head.addClass('drop-down');
8
+ head.find('h2').addClass('drop-down-head');
9
+ head.find('ul').addClass('drop-down-content open').removeClass('head-links');*/
10
+ } else {
11
+ jQuery('.ecwid-admin').removeClass('width-smaller');
12
+ }
13
+ }).trigger('resize');
14
+
15
+ show_reconnect = function() {
16
+ jQuery('<div class="ecwid-popup"></div>').load(
17
+ 'admin-post.php?action=ecwid_show_reconnect',
18
+ '',
19
+ function() {
20
+ jQuery('.ecwid-popup .close').click(function() {
21
+ jQuery(this).closest('.ecwid-popup').remove();
22
+ });
23
+ }
24
+ ).appendTo('body');
25
+
26
  }
js/landing.js CHANGED
@@ -1,5 +1,5 @@
1
- switch_to_connect = function() {
2
- jQuery('.ecwid-landing').removeClass('register').addClass('connect');
3
- jQuery('.ecwid-thank-step-one').addClass('active');
4
- wpCookies.set('ecwid_create_store_clicked', 1);
5
  }
1
+ switch_to_connect = function() {
2
+ jQuery('.ecwid-landing').removeClass('register').addClass('connect');
3
+ jQuery('.ecwid-thank-step-one').addClass('active');
4
+ wpCookies.set('ecwid_create_store_clicked', 1);
5
  }
js/modernizr.js CHANGED
@@ -1,1406 +1,1406 @@
1
- /*!
2
- * Modernizr v2.7.0
3
- * www.modernizr.com
4
- *
5
- * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
6
- * Available under the BSD and MIT licenses: www.modernizr.com/license/
7
- */
8
-
9
- /*
10
- * Modernizr tests which native CSS3 and HTML5 features are available in
11
- * the current UA and makes the results available to you in two ways:
12
- * as properties on a global Modernizr object, and as classes on the
13
- * <html> element. This information allows you to progressively enhance
14
- * your pages with a granular level of control over the experience.
15
- *
16
- * Modernizr has an optional (not included) conditional resource loader
17
- * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
18
- * To get a build that includes Modernizr.load(), as well as choosing
19
- * which tests to include, go to www.modernizr.com/download/
20
- *
21
- * Authors Faruk Ates, Paul Irish, Alex Sexton
22
- * Contributors Ryan Seddon, Ben Alman
23
- */
24
-
25
- window.Modernizr = (function( window, document, undefined ) {
26
-
27
- var version = '2.7.0',
28
-
29
- Modernizr = {},
30
-
31
- /*>>cssclasses*/
32
- // option for enabling the HTML classes to be added
33
- enableClasses = true,
34
- /*>>cssclasses*/
35
-
36
- docElement = document.documentElement,
37
-
38
- /**
39
- * Create our "modernizr" element that we do most feature tests on.
40
- */
41
- mod = 'modernizr',
42
- modElem = document.createElement(mod),
43
- mStyle = modElem.style,
44
-
45
- /**
46
- * Create the input element for various Web Forms feature tests.
47
- */
48
- inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
49
-
50
- /*>>smile*/
51
- smile = ':)',
52
- /*>>smile*/
53
-
54
- toString = {}.toString,
55
-
56
- // TODO :: make the prefixes more granular
57
- /*>>prefixes*/
58
- // List of property values to set for css tests. See ticket #21
59
- prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
60
- /*>>prefixes*/
61
-
62
- /*>>domprefixes*/
63
- // Following spec is to expose vendor-specific style properties as:
64
- // elem.style.WebkitBorderRadius
65
- // and the following would be incorrect:
66
- // elem.style.webkitBorderRadius
67
-
68
- // Webkit ghosts their properties in lowercase but Opera & Moz do not.
69
- // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
70
- // erik.eae.net/archives/2008/03/10/21.48.10/
71
-
72
- // More here: github.com/Modernizr/Modernizr/issues/issue/21
73
- omPrefixes = 'Webkit Moz O ms',
74
-
75
- cssomPrefixes = omPrefixes.split(' '),
76
-
77
- domPrefixes = omPrefixes.toLowerCase().split(' '),
78
- /*>>domprefixes*/
79
-
80
- /*>>ns*/
81
- ns = {'svg': 'http://www.w3.org/2000/svg'},
82
- /*>>ns*/
83
-
84
- tests = {},
85
- inputs = {},
86
- attrs = {},
87
-
88
- classes = [],
89
-
90
- slice = classes.slice,
91
-
92
- featureName, // used in testing loop
93
-
94
-
95
- /*>>teststyles*/
96
- // Inject element with style element and some CSS rules
97
- injectElementWithStyles = function( rule, callback, nodes, testnames ) {
98
-
99
- var style, ret, node, docOverflow,
100
- div = document.createElement('div'),
101
- // After page load injecting a fake body doesn't work so check if body exists
102
- body = document.body,
103
- // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
104
- fakeBody = body || document.createElement('body');
105
-
106
- if ( parseInt(nodes, 10) ) {
107
- // In order not to give false positives we create a node for each test
108
- // This also allows the method to scale for unspecified uses
109
- while ( nodes-- ) {
110
- node = document.createElement('div');
111
- node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
112
- div.appendChild(node);
113
- }
114
- }
115
-
116
- // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
117
- // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
118
- // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
119
- // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
120
- // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277
121
- style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
122
- div.id = mod;
123
- // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
124
- // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
125
- (body ? div : fakeBody).innerHTML += style;
126
- fakeBody.appendChild(div);
127
- if ( !body ) {
128
- //avoid crashing IE8, if background image is used
129
- fakeBody.style.background = '';
130
- //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
131
- fakeBody.style.overflow = 'hidden';
132
- docOverflow = docElement.style.overflow;
133
- docElement.style.overflow = 'hidden';
134
- docElement.appendChild(fakeBody);
135
- }
136
-
137
- ret = callback(div, rule);
138
- // If this is done after page load we don't want to remove the body so check if body exists
139
- if ( !body ) {
140
- fakeBody.parentNode.removeChild(fakeBody);
141
- docElement.style.overflow = docOverflow;
142
- } else {
143
- div.parentNode.removeChild(div);
144
- }
145
-
146
- return !!ret;
147
-
148
- },
149
- /*>>teststyles*/
150
-
151
- /*>>mq*/
152
- // adapted from matchMedia polyfill
153
- // by Scott Jehl and Paul Irish
154
- // gist.github.com/786768
155
- testMediaQuery = function( mq ) {
156
-
157
- var matchMedia = window.matchMedia || window.msMatchMedia;
158
- if ( matchMedia ) {
159
- return matchMedia(mq).matches;
160
- }
161
-
162
- var bool;
163
-
164
- injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
165
- bool = (window.getComputedStyle ?
166
- getComputedStyle(node, null) :
167
- node.currentStyle)['position'] == 'absolute';
168
- });
169
-
170
- return bool;
171
-
172
- },
173
- /*>>mq*/
174
-
175
-
176
- /*>>hasevent*/
177
- //
178
- // isEventSupported determines if a given element supports the given event
179
- // kangax.github.com/iseventsupported/
180
- //
181
- // The following results are known incorrects:
182
- // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
183
- // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
184
- // ...
185
- isEventSupported = (function() {
186
-
187
- var TAGNAMES = {
188
- 'select': 'input', 'change': 'input',
189
- 'submit': 'form', 'reset': 'form',
190
- 'error': 'img', 'load': 'img', 'abort': 'img'
191
- };
192
-
193
- function isEventSupported( eventName, element ) {
194
-
195
- element = element || document.createElement(TAGNAMES[eventName] || 'div');
196
- eventName = 'on' + eventName;
197
-
198
- // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
199
- var isSupported = eventName in element;
200
-
201
- if ( !isSupported ) {
202
- // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
203
- if ( !element.setAttribute ) {
204
- element = document.createElement('div');
205
- }
206
- if ( element.setAttribute && element.removeAttribute ) {
207
- element.setAttribute(eventName, '');
208
- isSupported = is(element[eventName], 'function');
209
-
210
- // If property was created, "remove it" (by setting value to `undefined`)
211
- if ( !is(element[eventName], 'undefined') ) {
212
- element[eventName] = undefined;
213
- }
214
- element.removeAttribute(eventName);
215
- }
216
- }
217
-
218
- element = null;
219
- return isSupported;
220
- }
221
- return isEventSupported;
222
- })(),
223
- /*>>hasevent*/
224
-
225
- // TODO :: Add flag for hasownprop ? didn't last time
226
-
227
- // hasOwnProperty shim by kangax needed for Safari 2.0 support
228
- _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
229
-
230
- if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
231
- hasOwnProp = function (object, property) {
232
- return _hasOwnProperty.call(object, property);
233
- };
234
- }
235
- else {
236
- hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
237
- return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
238
- };
239
- }
240
-
241
- // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
242
- // es5.github.com/#x15.3.4.5
243
-
244
- if (!Function.prototype.bind) {
245
- Function.prototype.bind = function bind(that) {
246
-
247
- var target = this;
248
-
249
- if (typeof target != "function") {
250
- throw new TypeError();
251
- }
252
-
253
- var args = slice.call(arguments, 1),
254
- bound = function () {
255
-
256
- if (this instanceof bound) {
257
-
258
- var F = function(){};
259
- F.prototype = target.prototype;
260
- var self = new F();
261
-
262
- var result = target.apply(
263
- self,
264
- args.concat(slice.call(arguments))
265
- );
266
- if (Object(result) === result) {
267
- return result;
268
- }
269
- return self;
270
-
271
- } else {
272
-
273
- return target.apply(
274
- that,
275
- args.concat(slice.call(arguments))
276
- );
277
-
278
- }
279
-
280
- };
281
-
282
- return bound;
283
- };
284
- }
285
-
286
- /**
287
- * setCss applies given styles to the Modernizr DOM node.
288
- */
289
- function setCss( str ) {
290
- mStyle.cssText = str;
291
- }
292
-
293
- /**
294
- * setCssAll extrapolates all vendor-specific css strings.
295
- */
296
- function setCssAll( str1, str2 ) {
297
- return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
298
- }
299
-
300
- /**
301
- * is returns a boolean for if typeof obj is exactly type.
302
- */
303
- function is( obj, type ) {
304
- return typeof obj === type;
305
- }
306
-
307
- /**
308
- * contains returns a boolean for if substr is found within str.
309
- */
310
- function contains( str, substr ) {
311
- return !!~('' + str).indexOf(substr);
312
- }
313
-
314
- /*>>testprop*/
315
-
316
- // testProps is a generic CSS / DOM property test.
317
-
318
- // In testing support for a given CSS property, it's legit to test:
319
- // `elem.style[styleName] !== undefined`
320
- // If the property is supported it will return an empty string,
321
- // if unsupported it will return undefined.
322
-
323
- // We'll take advantage of this quick test and skip setting a style
324
- // on our modernizr element, but instead just testing undefined vs
325
- // empty string.
326
-
327
- // Because the testing of the CSS property names (with "-", as
328
- // opposed to the camelCase DOM properties) is non-portable and
329
- // non-standard but works in WebKit and IE (but not Gecko or Opera),
330
- // we explicitly reject properties with dashes so that authors
331
- // developing in WebKit or IE first don't end up with
332
- // browser-specific content by accident.
333
-
334
- function testProps( props, prefixed ) {
335
- for ( var i in props ) {
336
- var prop = props[i];
337
- if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
338
- return prefixed == 'pfx' ? prop : true;
339
- }
340
- }
341
- return false;
342
- }
343
- /*>>testprop*/
344
-
345
- // TODO :: add testDOMProps
346
- /**
347
- * testDOMProps is a generic DOM property test; if a browser supports
348
- * a certain property, it won't return undefined for it.
349
- */
350
- function testDOMProps( props, obj, elem ) {
351
- for ( var i in props ) {
352
- var item = obj[props[i]];
353
- if ( item !== undefined) {
354
-
355
- // return the property name as a string
356
- if (elem === false) return props[i];
357
-
358
- // let's bind a function
359
- if (is(item, 'function')){
360
- // default to autobind unless override
361
- return item.bind(elem || obj);
362
- }
363
-
364
- // return the unbound function or obj or value
365
- return item;
366
- }
367
- }
368
- return false;
369
- }
370
-
371
- /*>>testallprops*/
372
- /**
373
- * testPropsAll tests a list of DOM properties we want to check against.
374
- * We specify literally ALL possible (known and/or likely) properties on
375
- * the element including the non-vendor prefixed one, for forward-
376
- * compatibility.
377
- */
378
- function testPropsAll( prop, prefixed, elem ) {
379
-
380
- var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
381
- props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
382
-
383
- // did they call .prefixed('boxSizing') or are we just testing a prop?
384
- if(is(prefixed, "string") || is(prefixed, "undefined")) {
385
- return testProps(props, prefixed);
386
-
387
- // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
388
- } else {
389
- props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
390
- return testDOMProps(props, prefixed, elem);
391
- }
392
- }
393
- /*>>testallprops*/
394
-
395
-
396
- /**
397
- * Tests
398
- * -----
399
- */
400
-
401
- // The *new* flexbox
402
- // dev.w3.org/csswg/css3-flexbox
403
-
404
- tests['flexbox'] = function() {
405
- return testPropsAll('flexWrap');
406
- };
407
-
408
- // The *old* flexbox
409
- // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
410
-
411
- tests['flexboxlegacy'] = function() {
412
- return testPropsAll('boxDirection');
413
- };
414
-
415
- // On the S60 and BB Storm, getContext exists, but always returns undefined
416
- // so we actually have to call getContext() to verify
417
- // github.com/Modernizr/Modernizr/issues/issue/97/
418
-
419
- tests['canvas'] = function() {
420
- var elem = document.createElement('canvas');
421
- return !!(elem.getContext && elem.getContext('2d'));
422
- };
423
-
424
- tests['canvastext'] = function() {
425
- return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
426
- };
427
-
428
- // webk.it/70117 is tracking a legit WebGL feature detect proposal
429
-
430
- // We do a soft detect which may false positive in order to avoid
431
- // an expensive context creation: bugzil.la/732441
432
-
433
- tests['webgl'] = function() {
434
- return !!window.WebGLRenderingContext;
435
- };
436
-
437
- /*
438
- * The Modernizr.touch test only indicates if the browser supports
439
- * touch events, which does not necessarily reflect a touchscreen
440
- * device, as evidenced by tablets running Windows 7 or, alas,
441
- * the Palm Pre / WebOS (touch) phones.
442
- *
443
- * Additionally, Chrome (desktop) used to lie about its support on this,
444
- * but that has since been rectified: crbug.com/36415
445
- *
446
- * We also test for Firefox 4 Multitouch Support.
447
- *
448
- * For more info, see: modernizr.github.com/Modernizr/touch.html
449
- */
450
-
451
- tests['touch'] = function() {
452
- var bool;
453
-
454
- if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
455
- bool = true;
456
- } else {
457
- injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
458
- bool = node.offsetTop === 9;
459
- });
460
- }
461
-
462
- return bool;
463
- };
464
-
465
-
466
- // geolocation is often considered a trivial feature detect...
467
- // Turns out, it's quite tricky to get right:
468
- //
469
- // Using !!navigator.geolocation does two things we don't want. It:
470
- // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
471
- // 2. Disables page caching in WebKit: webk.it/43956
472
- //
473
- // Meanwhile, in Firefox < 8, an about:config setting could expose
474
- // a false positive that would throw an exception: bugzil.la/688158
475
-
476
- tests['geolocation'] = function() {
477
- return 'geolocation' in navigator;
478
- };
479
-
480
-
481
- tests['postmessage'] = function() {
482
- return !!window.postMessage;
483
- };
484
-
485
-
486
- // Chrome incognito mode used to throw an exception when using openDatabase
487
- // It doesn't anymore.
488
- tests['websqldatabase'] = function() {
489
- return !!window.openDatabase;
490
- };
491
-
492
- // Vendors had inconsistent prefixing with the experimental Indexed DB:
493
- // - Webkit's implementation is accessible through webkitIndexedDB
494
- // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
495
- // For speed, we don't test the legacy (and beta-only) indexedDB
496
- tests['indexedDB'] = function() {
497
- return !!testPropsAll("indexedDB", window);
498
- };
499
-
500
- // documentMode logic from YUI to filter out IE8 Compat Mode
501
- // which false positives.
502
- tests['hashchange'] = function() {
503
- return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
504
- };
505
-
506
- // Per 1.6:
507
- // This used to be Modernizr.historymanagement but the longer
508
- // name has been deprecated in favor of a shorter and property-matching one.
509
- // The old API is still available in 1.6, but as of 2.0 will throw a warning,
510
- // and in the first release thereafter disappear entirely.
511
- tests['history'] = function() {
512
- return !!(window.history && history.pushState);
513
- };
514
-
515
- tests['draganddrop'] = function() {
516
- var div = document.createElement('div');
517
- return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
518
- };
519
-
520
- // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
521
- // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
522
- // FF10 still uses prefixes, so check for it until then.
523
- // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
524
- tests['websockets'] = function() {
525
- return 'WebSocket' in window || 'MozWebSocket' in window;
526
- };
527
-
528
-
529
- // css-tricks.com/rgba-browser-support/
530
- tests['rgba'] = function() {
531
- // Set an rgba() color and check the returned value
532
-
533
- setCss('background-color:rgba(150,255,150,.5)');
534
-
535
- return contains(mStyle.backgroundColor, 'rgba');
536
- };
537
-
538
- tests['hsla'] = function() {
539
- // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
540
- // except IE9 who retains it as hsla
541
-
542
- setCss('background-color:hsla(120,40%,100%,.5)');
543
-
544
- return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
545
- };
546
-
547
- tests['multiplebgs'] = function() {
548
- // Setting multiple images AND a color on the background shorthand property
549
- // and then querying the style.background property value for the number of
550
- // occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
551
-
552
- setCss('background:url(https://),url(https://),red url(https://)');
553
-
554
- // If the UA supports multiple backgrounds, there should be three occurrences
555
- // of the string "url(" in the return value for elemStyle.background
556
-
557
- return (/(url\s*\(.*?){3}/).test(mStyle.background);
558
- };
559
-
560
-
561
-
562
- // this will false positive in Opera Mini
563
- // github.com/Modernizr/Modernizr/issues/396
564
-
565
- tests['backgroundsize'] = function() {
566
- return testPropsAll('backgroundSize');
567
- };
568
-
569
- tests['borderimage'] = function() {
570
- return testPropsAll('borderImage');
571
- };
572
-
573
-
574
- // Super comprehensive table about all the unique implementations of
575
- // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
576
-
577
- tests['borderradius'] = function() {
578
- return testPropsAll('borderRadius');
579
- };
580
-
581
- // WebOS unfortunately false positives on this test.
582
- tests['boxshadow'] = function() {
583
- return testPropsAll('boxShadow');
584
- };
585
-
586
- // FF3.0 will false positive on this test
587
- tests['textshadow'] = function() {
588
- return document.createElement('div').style.textShadow === '';
589
- };
590
-
591
-
592
- tests['opacity'] = function() {
593
- // Browsers that actually have CSS Opacity implemented have done so
594
- // according to spec, which means their return values are within the
595
- // range of [0.0,1.0] - including the leading zero.
596
-
597
- setCssAll('opacity:.55');
598
-
599
- // The non-literal . in this regex is intentional:
600
- // German Chrome returns this value as 0,55
601
- // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
602
- return (/^0.55$/).test(mStyle.opacity);
603
- };
604
-
605
-
606
- // Note, Android < 4 will pass this test, but can only animate
607
- // a single property at a time
608
- // daneden.me/2011/12/putting-up-with-androids-bullshit/
609
- tests['cssanimations'] = function() {
610
- return testPropsAll('animationName');
611
- };
612
-
613
-
614
- tests['csscolumns'] = function() {
615
- return testPropsAll('columnCount');
616
- };
617
-
618
-
619
- tests['cssgradients'] = function() {
620
- /**
621
- * For CSS Gradients syntax, please see:
622
- * webkit.org/blog/175/introducing-css-gradients/
623
- * developer.mozilla.org/en/CSS/-moz-linear-gradient
624
- * developer.mozilla.org/en/CSS/-moz-radial-gradient
625
- * dev.w3.org/csswg/css3-images/#gradients-
626
- */
627
-
628
- var str1 = 'background-image:',
629
- str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
630
- str3 = 'linear-gradient(left top,#9f9, white);';
631
-
632
- setCss(
633
- // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
634
- (str1 + '-webkit- '.split(' ').join(str2 + str1) +
635
- // standard syntax // trailing 'background-image:'
636
- prefixes.join(str3 + str1)).slice(0, -str1.length)
637
- );
638
-
639
- return contains(mStyle.backgroundImage, 'gradient');
640
- };
641
-
642
-
643
- tests['cssreflections'] = function() {
644
- return testPropsAll('boxReflect');
645
- };
646
-
647
-
648
- tests['csstransforms'] = function() {
649
- return !!testPropsAll('transform');
650
- };
651
-
652
-
653
- tests['csstransforms3d'] = function() {
654
-
655
- var ret = !!testPropsAll('perspective');
656
-
657
- // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
658
- // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
659
- // some conditions. As a result, Webkit typically recognizes the syntax but
660
- // will sometimes throw a false positive, thus we must do a more thorough check:
661
- if ( ret && 'webkitPerspective' in docElement.style ) {
662
-
663
- // Webkit allows this media query to succeed only if the feature is enabled.
664
- // `@media (transform-3d),(-webkit-transform-3d){ ... }`
665
- injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
666
- ret = node.offsetLeft === 9 && node.offsetHeight === 3;
667
- });
668
- }
669
- return ret;
670
- };
671
-
672
-
673
- tests['csstransitions'] = function() {
674
- return testPropsAll('transition');
675
- };
676
-
677
-
678
- /*>>fontface*/
679
- // @font-face detection routine by Diego Perini
680
- // javascript.nwbox.com/CSSSupport/
681
-
682
- // false positives:
683
- // WebOS github.com/Modernizr/Modernizr/issues/342
684
- // WP7 github.com/Modernizr/Modernizr/issues/538
685
- tests['fontface'] = function() {
686
- var bool;
687
-
688
- injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
689
- var style = document.getElementById('smodernizr'),
690
- sheet = style.sheet || style.styleSheet,
691
- cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
692
-
693
- bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
694
- });
695
-
696
- return bool;
697
- };
698
- /*>>fontface*/
699
-
700
- // CSS generated content detection
701
- tests['generatedcontent'] = function() {
702
- var bool;
703
-
704
- injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
705
- bool = node.offsetHeight >= 3;
706
- });
707
-
708
- return bool;
709
- };
710
-
711
-
712
-
713
- // These tests evaluate support of the video/audio elements, as well as
714
- // testing what types of content they support.
715
- //
716
- // We're using the Boolean constructor here, so that we can extend the value
717
- // e.g. Modernizr.video // true
718
- // Modernizr.video.ogg // 'probably'
719
- //
720
- // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
721
- // thx to NielsLeenheer and zcorpan
722
-
723
- // Note: in some older browsers, "no" was a return value instead of empty string.
724
- // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
725
- // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
726
-
727
- tests['video'] = function() {
728
- var elem = document.createElement('video'),
729
- bool = false;
730
-
731
- // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
732
- try {
733
- if ( bool = !!elem.canPlayType ) {
734
- bool = new Boolean(bool);
735
- bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
736
-
737
- // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
738
- bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
739
-
740
- bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
741
- }
742
-
743
- } catch(e) { }
744
-
745
- return bool;
746
- };
747
-
748
- tests['audio'] = function() {
749
- var elem = document.createElement('audio'),
750
- bool = false;
751
-
752
- try {
753
- if ( bool = !!elem.canPlayType ) {
754
- bool = new Boolean(bool);
755
- bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
756
- bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
757
-
758
- // Mimetypes accepted:
759
- // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
760
- // bit.ly/iphoneoscodecs
761
- bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
762
- bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
763
- elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
764
- }
765
- } catch(e) { }
766
-
767
- return bool;
768
- };
769
-
770
-
771
- // In FF4, if disabled, window.localStorage should === null.
772
-
773
- // Normally, we could not test that directly and need to do a
774
- // `('localStorage' in window) && ` test first because otherwise Firefox will
775
- // throw bugzil.la/365772 if cookies are disabled
776
-
777
- // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
778
- // will throw the exception:
779
- // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
780
- // Peculiarly, getItem and removeItem calls do not throw.
781
-
782
- // Because we are forced to try/catch this, we'll go aggressive.
783
-
784
- // Just FWIW: IE8 Compat mode supports these features completely:
785
- // www.quirksmode.org/dom/html5.html
786
- // But IE8 doesn't support either with local files
787
-
788
- tests['localstorage'] = function() {
789
- try {
790
- localStorage.setItem(mod, mod);
791
- localStorage.removeItem(mod);
792
- return true;
793
- } catch(e) {
794
- return false;
795
- }
796
- };
797
-
798
- tests['sessionstorage'] = function() {
799
- try {
800
- sessionStorage.setItem(mod, mod);
801
- sessionStorage.removeItem(mod);
802
- return true;
803
- } catch(e) {
804
- return false;
805
- }
806
- };
807
-
808
-
809
- tests['webworkers'] = function() {
810
- return !!window.Worker;
811
- };
812
-
813
-
814
- tests['applicationcache'] = function() {
815
- return !!window.applicationCache;
816
- };
817
-
818
-
819
- // Thanks to Erik Dahlstrom
820
- tests['svg'] = function() {
821
- return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
822
- };
823
-
824
- // specifically for SVG inline in HTML, not within XHTML
825
- // test page: paulirish.com/demo/inline-svg
826
- tests['inlinesvg'] = function() {
827
- var div = document.createElement('div');
828
- div.innerHTML = '<svg/>';
829
- return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
830
- };
831
-
832
- // SVG SMIL animation
833
- tests['smil'] = function() {
834
- return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
835
- };
836
-
837
- // This test is only for clip paths in SVG proper, not clip paths on HTML content
838
- // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
839
-
840
- // However read the comments to dig into applying SVG clippaths to HTML content here:
841
- // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
842
- tests['svgclippaths'] = function() {
843
- return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
844
- };
845
-
846
- /*>>webforms*/
847
- // input features and input types go directly onto the ret object, bypassing the tests loop.
848
- // Hold this guy to execute in a moment.
849
- function webforms() {
850
- /*>>input*/
851
- // Run through HTML5's new input attributes to see if the UA understands any.
852
- // We're using f which is the <input> element created early on
853
- // Mike Taylr has created a comprehensive resource for testing these attributes
854
- // when applied to all input types:
855
- // miketaylr.com/code/input-type-attr.html
856
- // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
857
-
858
- // Only input placeholder is tested while textarea's placeholder is not.
859
- // Currently Safari 4 and Opera 11 have support only for the input placeholder
860
- // Both tests are available in feature-detects/forms-placeholder.js
861
- Modernizr['input'] = (function( props ) {
862
- for ( var i = 0, len = props.length; i < len; i++ ) {
863
- attrs[ props[i] ] = !!(props[i] in inputElem);
864
- }
865
- if (attrs.list){
866
- // safari false positive's on datalist: webk.it/74252
867
- // see also github.com/Modernizr/Modernizr/issues/146
868
- attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
869
- }
870
- return attrs;
871
- })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
872
- /*>>input*/
873
-
874
- /*>>inputtypes*/
875
- // Run through HTML5's new input types to see if the UA understands any.
876
- // This is put behind the tests runloop because it doesn't return a
877
- // true/false like all the other tests; instead, it returns an object
878
- // containing each input type with its corresponding true/false value
879
-
880
- // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
881
- Modernizr['inputtypes'] = (function(props) {
882
-
883
- for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
884
-
885
- inputElem.setAttribute('type', inputElemType = props[i]);
886
- bool = inputElem.type !== 'text';
887
-
888
- // We first check to see if the type we give it sticks..
889
- // If the type does, we feed it a textual value, which shouldn't be valid.
890
- // If the value doesn't stick, we know there's input sanitization which infers a custom UI
891
- if ( bool ) {
892
-
893
- inputElem.value = smile;
894
- inputElem.style.cssText = 'position:absolute;visibility:hidden;';
895
-
896
- if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
897
-
898
- docElement.appendChild(inputElem);
899
- defaultView = document.defaultView;
900
-
901
- // Safari 2-4 allows the smiley as a value, despite making a slider
902
- bool = defaultView.getComputedStyle &&
903
- defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
904
- // Mobile android web browser has false positive, so must
905
- // check the height to see if the widget is actually there.
906
- (inputElem.offsetHeight !== 0);
907
-
908
- docElement.removeChild(inputElem);
909
-
910
- } else if ( /^(search|tel)$/.test(inputElemType) ){
911
- // Spec doesn't define any special parsing or detectable UI
912
- // behaviors so we pass these through as true
913
-
914
- // Interestingly, opera fails the earlier test, so it doesn't
915
- // even make it here.
916
-
917
- } else if ( /^(url|email)$/.test(inputElemType) ) {
918
- // Real url and email support comes with prebaked validation.
919
- bool = inputElem.checkValidity && inputElem.checkValidity() === false;
920
-
921
- } else {
922
- // If the upgraded input compontent rejects the :) text, we got a winner
923
- bool = inputElem.value != smile;
924
- }
925
- }
926
-
927
- inputs[ props[i] ] = !!bool;
928
- }
929
- return inputs;
930
- })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
931
- /*>>inputtypes*/
932
- }
933
- /*>>webforms*/
934
-
935
-
936
- // End of test definitions
937
- // -----------------------
938
-
939
-
940
-
941
- // Run through all tests and detect their support in the current UA.
942
- // todo: hypothetically we could be doing an array of tests and use a basic loop here.
943
- for ( var feature in tests ) {
944
- if ( hasOwnProp(tests, feature) ) {
945
- // run the test, throw the return value into the Modernizr,
946
- // then based on that boolean, define an appropriate className
947
- // and push it into an array of classes we'll join later.
948
- featureName = feature.toLowerCase();
949
- Modernizr[featureName] = tests[feature]();
950
-
951
- classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
952
- }
953
- }
954
-
955
- /*>>webforms*/
956
- // input tests need to run.
957
- Modernizr.input || webforms();
958
- /*>>webforms*/
959
-
960
-
961
- /**
962
- * addTest allows the user to define their own feature tests
963
- * the result will be added onto the Modernizr object,
964
- * as well as an appropriate className set on the html element
965
- *
966
- * @param feature - String naming the feature
967
- * @param test - Function returning true if feature is supported, false if not
968
- */
969
- Modernizr.addTest = function ( feature, test ) {
970
- if ( typeof feature == 'object' ) {
971
- for ( var key in feature ) {
972
- if ( hasOwnProp( feature, key ) ) {
973
- Modernizr.addTest( key, feature[ key ] );
974
- }
975
- }
976
- } else {
977
-
978
- feature = feature.toLowerCase();
979
-
980
- if ( Modernizr[feature] !== undefined ) {
981
- // we're going to quit if you're trying to overwrite an existing test
982
- // if we were to allow it, we'd do this:
983
- // var re = new RegExp("\\b(no-)?" + feature + "\\b");
984
- // docElement.className = docElement.className.replace( re, '' );
985
- // but, no rly, stuff 'em.
986
- return Modernizr;
987
- }
988
-
989
- test = typeof test == 'function' ? test() : test;
990
-
991
- if (typeof enableClasses !== "undefined" && enableClasses) {
992
- docElement.className += ' ' + (test ? '' : 'no-') + feature;
993
- }
994
- Modernizr[feature] = test;
995
-
996
- }
997
-
998
- return Modernizr; // allow chaining.
999
- };
1000
-
1001
-
1002
- // Reset modElem.cssText to nothing to reduce memory footprint.
1003
- setCss('');
1004
- modElem = inputElem = null;
1005
-
1006
- /*>>shiv*/
1007
- /**
1008
- * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
1009
- */
1010
- ;(function(window, document) {
1011
- /*jshint evil:true */
1012
- /** version */
1013
- var version = '3.7.0';
1014
-
1015
- /** Preset options */
1016
- var options = window.html5 || {};
1017
-
1018
- /** Used to skip problem elements */
1019
- var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
1020
-
1021
- /** Not all elements can be cloned in IE **/
1022
- var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
1023
-
1024
- /** Detect whether the browser supports default html5 styles */
1025
- var supportsHtml5Styles;
1026
-
1027
- /** Name of the expando, to work with multiple documents or to re-shiv one document */
1028
- var expando = '_html5shiv';
1029
-
1030
- /** The id for the the documents expando */
1031
- var expanID = 0;
1032
-
1033
- /** Cached data for each document */
1034
- var expandoData = {};
1035
-
1036
- /** Detect whether the browser supports unknown elements */
1037
- var supportsUnknownElements;
1038
-
1039
- (function() {
1040
- try {
1041
- var a = document.createElement('a');
1042
- a.innerHTML = '<xyz></xyz>';
1043
- //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
1044
- supportsHtml5Styles = ('hidden' in a);
1045
-
1046
- supportsUnknownElements = a.childNodes.length == 1 || (function() {
1047
- // assign a false positive if unable to shiv
1048
- (document.createElement)('a');
1049
- var frag = document.createDocumentFragment();
1050
- return (
1051
- typeof frag.cloneNode == 'undefined' ||
1052
- typeof frag.createDocumentFragment == 'undefined' ||
1053
- typeof frag.createElement == 'undefined'
1054
- );
1055
- }());
1056
- } catch(e) {
1057
- // assign a false positive if detection fails => unable to shiv
1058
- supportsHtml5Styles = true;
1059
- supportsUnknownElements = true;
1060
- }
1061
-
1062
- }());
1063
-
1064
- /*--------------------------------------------------------------------------*/
1065
-
1066
- /**
1067
- * Creates a style sheet with the given CSS text and adds it to the document.
1068
- * @private
1069
- * @param {Document} ownerDocument The document.
1070
- * @param {String} cssText The CSS text.
1071
- * @returns {StyleSheet} The style element.
1072
- */
1073
- function addStyleSheet(ownerDocument, cssText) {
1074
- var p = ownerDocument.createElement('p'),
1075
- parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
1076
-
1077
- p.innerHTML = 'x<style>' + cssText + '</style>';
1078
- return parent.insertBefore(p.lastChild, parent.firstChild);
1079
- }
1080
-
1081
- /**
1082
- * Returns the value of `html5.elements` as an array.
1083
- * @private
1084
- * @returns {Array} An array of shived element node names.
1085
- */
1086
- function getElements() {
1087
- var elements = html5.elements;
1088
- return typeof elements == 'string' ? elements.split(' ') : elements;
1089
- }
1090
-
1091
- /**
1092
- * Returns the data associated to the given document
1093
- * @private
1094
- * @param {Document} ownerDocument The document.
1095
- * @returns {Object} An object of data.
1096
- */
1097
- function getExpandoData(ownerDocument) {
1098
- var data = expandoData[ownerDocument[expando]];
1099
- if (!data) {
1100
- data = {};
1101
- expanID++;
1102
- ownerDocument[expando] = expanID;
1103
- expandoData[expanID] = data;
1104
- }
1105
- return data;
1106
- }
1107
-
1108
- /**
1109
- * returns a shived element for the given nodeName and document
1110
- * @memberOf html5
1111
- * @param {String} nodeName name of the element
1112
- * @param {Document} ownerDocument The context document.
1113
- * @returns {Object} The shived element.
1114
- */
1115
- function createElement(nodeName, ownerDocument, data){
1116
- if (!ownerDocument) {
1117
- ownerDocument = document;
1118
- }
1119
- if(supportsUnknownElements){
1120
- return ownerDocument.createElement(nodeName);
1121
- }
1122
- if (!data) {
1123
- data = getExpandoData(ownerDocument);
1124
- }
1125
- var node;
1126
-
1127
- if (data.cache[nodeName]) {
1128
- node = data.cache[nodeName].cloneNode();
1129
- } else if (saveClones.test(nodeName)) {
1130
- node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
1131
- } else {
1132
- node = data.createElem(nodeName);
1133
- }
1134
-
1135
- // Avoid adding some elements to fragments in IE < 9 because
1136
- // * Attributes like `name` or `type` cannot be set/changed once an element
1137
- // is inserted into a document/fragment
1138
- // * Link elements with `src` attributes that are inaccessible, as with
1139
- // a 403 response, will cause the tab/window to crash
1140
- // * Script elements appended to fragments will execute when their `src`
1141
- // or `text` property is set
1142
- return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
1143
- }
1144
-
1145
- /**
1146
- * returns a shived DocumentFragment for the given document
1147
- * @memberOf html5
1148
- * @param {Document} ownerDocument The context document.
1149
- * @returns {Object} The shived DocumentFragment.
1150
- */
1151
- function createDocumentFragment(ownerDocument, data){
1152
- if (!ownerDocument) {
1153
- ownerDocument = document;
1154
- }
1155
- if(supportsUnknownElements){
1156
- return ownerDocument.createDocumentFragment();
1157
- }
1158
- data = data || getExpandoData(ownerDocument);
1159
- var clone = data.frag.cloneNode(),
1160
- i = 0,
1161
- elems = getElements(),
1162
- l = elems.length;
1163
- for(;i<l;i++){
1164
- clone.createElement(elems[i]);
1165
- }
1166
- return clone;
1167
- }
1168
-
1169
- /**
1170
- * Shivs the `createElement` and `createDocumentFragment` methods of the document.
1171
- * @private
1172
- * @param {Document|DocumentFragment} ownerDocument The document.
1173
- * @param {Object} data of the document.
1174
- */
1175
- function shivMethods(ownerDocument, data) {
1176
- if (!data.cache) {
1177
- data.cache = {};
1178
- data.createElem = ownerDocument.createElement;
1179
- data.createFrag = ownerDocument.createDocumentFragment;
1180
- data.frag = data.createFrag();
1181
- }
1182
-
1183
-
1184
- ownerDocument.createElement = function(nodeName) {
1185
- //abort shiv
1186
- if (!html5.shivMethods) {
1187
- return data.createElem(nodeName);
1188
- }
1189
- return createElement(nodeName, ownerDocument, data);
1190
- };
1191
-
1192
- ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
1193
- 'var n=f.cloneNode(),c=n.createElement;' +
1194
- 'h.shivMethods&&(' +
1195
- // unroll the `createElement` calls
1196
- getElements().join().replace(/[\w\-]+/g, function(nodeName) {
1197
- data.createElem(nodeName);
1198
- data.frag.createElement(nodeName);
1199
- return 'c("' + nodeName + '")';
1200
- }) +
1201
- ');return n}'
1202
- )(html5, data.frag);
1203
- }
1204
-
1205
- /*--------------------------------------------------------------------------*/
1206
-
1207
- /**
1208
- * Shivs the given document.
1209
- * @memberOf html5
1210
- * @param {Document} ownerDocument The document to shiv.
1211
- * @returns {Document} The shived document.
1212
- */
1213
- function shivDocument(ownerDocument) {
1214
- if (!ownerDocument) {
1215
- ownerDocument = document;
1216
- }
1217
- var data = getExpandoData(ownerDocument);
1218
-
1219
- if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
1220
- data.hasCSS = !!addStyleSheet(ownerDocument,
1221
- // corrects block display not defined in IE6/7/8/9
1222
- 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
1223
- // adds styling not present in IE6/7/8/9
1224
- 'mark{background:#FF0;color:#000}' +
1225
- // hides non-rendered elements
1226
- 'template{display:none}'
1227
- );
1228
- }
1229
- if (!supportsUnknownElements) {
1230
- shivMethods(ownerDocument, data);
1231
- }
1232
- return ownerDocument;
1233
- }
1234
-
1235
- /*--------------------------------------------------------------------------*/
1236
-
1237
- /**
1238
- * The `html5` object is exposed so that more elements can be shived and
1239
- * existing shiving can be detected on iframes.
1240
- * @type Object
1241
- * @example
1242
- *
1243
- * // options can be changed before the script is included
1244
- * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
1245
- */
1246
- var html5 = {
1247
-
1248
- /**
1249
- * An array or space separated string of node names of the elements to shiv.
1250
- * @memberOf html5
1251
- * @type Array|String
1252
- */
1253
- 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
1254
-
1255
- /**
1256
- * current version of html5shiv
1257
- */
1258
- 'version': version,
1259
-
1260
- /**
1261
- * A flag to indicate that the HTML5 style sheet should be inserted.
1262
- * @memberOf html5
1263
- * @type Boolean
1264
- */
1265
- 'shivCSS': (options.shivCSS !== false),
1266
-
1267
- /**
1268
- * Is equal to true if a browser supports creating unknown/HTML5 elements
1269
- * @memberOf html5
1270
- * @type boolean
1271
- */
1272
- 'supportsUnknownElements': supportsUnknownElements,
1273
-
1274
- /**
1275
- * A flag to indicate that the document's `createElement` and `createDocumentFragment`
1276
- * methods should be overwritten.
1277
- * @memberOf html5
1278
- * @type Boolean
1279
- */
1280
- 'shivMethods': (options.shivMethods !== false),
1281
-
1282
- /**
1283
- * A string to describe the type of `html5` object ("default" or "default print").
1284
- * @memberOf html5
1285
- * @type String
1286
- */
1287
- 'type': 'default',
1288
-
1289
- // shivs the document according to the specified `html5` object options
1290
- 'shivDocument': shivDocument,
1291
-
1292
- //creates a shived element
1293
- createElement: createElement,
1294
-
1295
- //creates a shived documentFragment
1296
- createDocumentFragment: createDocumentFragment
1297
- };
1298
-
1299
- /*--------------------------------------------------------------------------*/
1300
-
1301
- // expose html5
1302
- window.html5 = html5;
1303
-
1304
- // shiv the document
1305
- shivDocument(document);
1306
-
1307
- }(this, document));
1308
- /*>>shiv*/
1309
-
1310
- // Assign private properties to the return object with prefix
1311
- Modernizr._version = version;
1312
-
1313
- // expose these for the plugin API. Look in the source for how to join() them against your input
1314
- /*>>prefixes*/
1315
- Modernizr._prefixes = prefixes;
1316
- /*>>prefixes*/
1317
- /*>>domprefixes*/
1318
- Modernizr._domPrefixes = domPrefixes;
1319
- Modernizr._cssomPrefixes = cssomPrefixes;
1320
- /*>>domprefixes*/
1321
-
1322
- /*>>mq*/
1323
- // Modernizr.mq tests a given media query, live against the current state of the window
1324
- // A few important notes:
1325
- // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
1326
- // * A max-width or orientation query will be evaluated against the current state, which may change later.
1327
- // * You must specify values. Eg. If you are testing support for the min-width media query use:
1328
- // Modernizr.mq('(min-width:0)')
1329
- // usage:
1330
- // Modernizr.mq('only screen and (max-width:768)')
1331
- Modernizr.mq = testMediaQuery;
1332
- /*>>mq*/
1333
-
1334
- /*>>hasevent*/
1335
- // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
1336
- // Modernizr.hasEvent('gesturestart', elem)
1337
- Modernizr.hasEvent = isEventSupported;
1338
- /*>>hasevent*/
1339
-
1340
- /*>>testprop*/
1341
- // Modernizr.testProp() investigates whether a given style property is recognized
1342
- // Note that the property names must be provided in the camelCase variant.
1343
- // Modernizr.testProp('pointerEvents')
1344
- Modernizr.testProp = function(prop){
1345
- return testProps([prop]);
1346
- };
1347
- /*>>testprop*/
1348
-
1349
- /*>>testallprops*/
1350
- // Modernizr.testAllProps() investigates whether a given style property,
1351
- // or any of its vendor-prefixed variants, is recognized
1352
- // Note that the property names must be provided in the camelCase variant.
1353
- // Modernizr.testAllProps('boxSizing')
1354
- Modernizr.testAllProps = testPropsAll;
1355
- /*>>testallprops*/
1356
-
1357
-
1358
- /*>>teststyles*/
1359
- // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
1360
- // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
1361
- Modernizr.testStyles = injectElementWithStyles;
1362
- /*>>teststyles*/
1363
-
1364
-
1365
- /*>>prefixed*/
1366
- // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
1367
- // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
1368
-
1369
- // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
1370
- // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
1371
- //
1372
- // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
1373
-
1374
- // If you're trying to ascertain which transition end event to bind to, you might do something like...
1375
- //
1376
- // var transEndEventNames = {
1377
- // 'WebkitTransition' : 'webkitTransitionEnd',
1378
- // 'MozTransition' : 'transitionend',
1379
- // 'OTransition' : 'oTransitionEnd',
1380
- // 'msTransition' : 'MSTransitionEnd',
1381
- // 'transition' : 'transitionend'
1382
- // },
1383
- // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
1384
-
1385
- Modernizr.prefixed = function(prop, obj, elem){
1386
- if(!obj) {
1387
- return testPropsAll(prop, 'pfx');
1388
- } else {
1389
- // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
1390
- return testPropsAll(prop, obj, elem);
1391
- }
1392
- };
1393
- /*>>prefixed*/
1394
-
1395
-
1396
- /*>>cssclasses*/
1397
- // Remove "no-js" class from <html> element, if it exists:
1398
- docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
1399
-
1400
- // Add the new classes to the <html> element.
1401
- (enableClasses ? ' js ' + classes.join(' ') : '');
1402
- /*>>cssclasses*/
1403
-
1404
- return Modernizr;
1405
-
1406
- })(this, this.document);
1
+ /*!
2
+ * Modernizr v2.7.0
3
+ * www.modernizr.com
4
+ *
5
+ * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
6
+ * Available under the BSD and MIT licenses: www.modernizr.com/license/
7
+ */
8
+
9
+ /*
10
+ * Modernizr tests which native CSS3 and HTML5 features are available in
11
+ * the current UA and makes the results available to you in two ways:
12
+ * as properties on a global Modernizr object, and as classes on the
13
+ * <html> element. This information allows you to progressively enhance
14
+ * your pages with a granular level of control over the experience.
15
+ *
16
+ * Modernizr has an optional (not included) conditional resource loader
17
+ * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
18
+ * To get a build that includes Modernizr.load(), as well as choosing
19
+ * which tests to include, go to www.modernizr.com/download/
20
+ *
21
+ * Authors Faruk Ates, Paul Irish, Alex Sexton
22
+ * Contributors Ryan Seddon, Ben Alman
23
+ */
24
+
25
+ window.Modernizr = (function( window, document, undefined ) {
26
+
27
+ var version = '2.7.0',
28
+
29
+ Modernizr = {},
30
+
31
+ /*>>cssclasses*/
32
+ // option for enabling the HTML classes to be added
33
+ enableClasses = true,
34
+ /*>>cssclasses*/
35
+
36
+ docElement = document.documentElement,
37
+
38
+ /**
39
+ * Create our "modernizr" element that we do most feature tests on.
40
+ */
41
+ mod = 'modernizr',
42
+ modElem = document.createElement(mod),
43
+ mStyle = modElem.style,
44
+
45
+ /**
46
+ * Create the input element for various Web Forms feature tests.
47
+ */
48
+ inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
49
+
50
+ /*>>smile*/
51
+ smile = ':)',
52
+ /*>>smile*/
53
+
54
+ toString = {}.toString,
55
+
56
+ // TODO :: make the prefixes more granular
57
+ /*>>prefixes*/
58
+ // List of property values to set for css tests. See ticket #21
59
+ prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
60
+ /*>>prefixes*/
61
+
62
+ /*>>domprefixes*/
63
+ // Following spec is to expose vendor-specific style properties as:
64
+ // elem.style.WebkitBorderRadius
65
+ // and the following would be incorrect:
66
+ // elem.style.webkitBorderRadius
67
+
68
+ // Webkit ghosts their properties in lowercase but Opera & Moz do not.
69
+ // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
70
+ // erik.eae.net/archives/2008/03/10/21.48.10/
71
+
72
+ // More here: github.com/Modernizr/Modernizr/issues/issue/21
73
+ omPrefixes = 'Webkit Moz O ms',
74
+
75
+ cssomPrefixes = omPrefixes.split(' '),
76
+
77
+ domPrefixes = omPrefixes.toLowerCase().split(' '),
78
+ /*>>domprefixes*/
79
+
80
+ /*>>ns*/
81
+ ns = {'svg': 'http://www.w3.org/2000/svg'},
82
+ /*>>ns*/
83
+
84
+ tests = {},
85
+ inputs = {},
86
+ attrs = {},
87
+
88
+ classes = [],
89
+
90
+ slice = classes.slice,
91
+
92
+ featureName, // used in testing loop
93
+
94
+
95
+ /*>>teststyles*/
96
+ // Inject element with style element and some CSS rules
97
+ injectElementWithStyles = function( rule, callback, nodes, testnames ) {
98
+
99
+ var style, ret, node, docOverflow,
100
+ div = document.createElement('div'),
101
+ // After page load injecting a fake body doesn't work so check if body exists
102
+ body = document.body,
103
+ // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
104
+ fakeBody = body || document.createElement('body');
105
+
106
+ if ( parseInt(nodes, 10) ) {
107
+ // In order not to give false positives we create a node for each test
108
+ // This also allows the method to scale for unspecified uses
109
+ while ( nodes-- ) {
110
+ node = document.createElement('div');
111
+ node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
112
+ div.appendChild(node);
113
+ }
114
+ }
115
+
116
+ // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
117
+ // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
118
+ // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
119
+ // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
120
+ // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277
121
+ style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
122
+ div.id = mod;
123
+ // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
124
+ // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
125
+ (body ? div : fakeBody).innerHTML += style;
126
+ fakeBody.appendChild(div);
127
+ if ( !body ) {
128
+ //avoid crashing IE8, if background image is used
129
+ fakeBody.style.background = '';
130
+ //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
131
+ fakeBody.style.overflow = 'hidden';
132
+ docOverflow = docElement.style.overflow;
133
+ docElement.style.overflow = 'hidden';
134
+ docElement.appendChild(fakeBody);
135
+ }
136
+
137
+ ret = callback(div, rule);
138
+ // If this is done after page load we don't want to remove the body so check if body exists
139
+ if ( !body ) {
140
+ fakeBody.parentNode.removeChild(fakeBody);
141
+ docElement.style.overflow = docOverflow;
142
+ } else {
143
+ div.parentNode.removeChild(div);
144
+ }
145
+
146
+ return !!ret;
147
+
148
+ },
149
+ /*>>teststyles*/
150
+
151
+ /*>>mq*/
152
+ // adapted from matchMedia polyfill
153
+ // by Scott Jehl and Paul Irish
154
+ // gist.github.com/786768
155
+ testMediaQuery = function( mq ) {
156
+
157
+ var matchMedia = window.matchMedia || window.msMatchMedia;
158
+ if ( matchMedia ) {
159
+ return matchMedia(mq).matches;
160
+ }
161
+
162
+ var bool;
163
+
164
+ injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
165
+ bool = (window.getComputedStyle ?
166
+ getComputedStyle(node, null) :
167
+ node.currentStyle)['position'] == 'absolute';
168
+ });
169
+
170
+ return bool;
171
+
172
+ },
173
+ /*>>mq*/
174
+
175
+
176
+ /*>>hasevent*/
177
+ //
178
+ // isEventSupported determines if a given element supports the given event
179
+ // kangax.github.com/iseventsupported/
180
+ //
181
+ // The following results are known incorrects:
182
+ // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
183
+ // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
184
+ // ...
185
+ isEventSupported = (function() {
186
+
187
+ var TAGNAMES = {
188
+ 'select': 'input', 'change': 'input',
189
+ 'submit': 'form', 'reset': 'form',
190
+ 'error': 'img', 'load': 'img', 'abort': 'img'
191
+ };
192
+
193
+ function isEventSupported( eventName, element ) {
194
+
195
+ element = element || document.createElement(TAGNAMES[eventName] || 'div');
196
+ eventName = 'on' + eventName;
197
+
198
+ // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
199
+ var isSupported = eventName in element;
200
+
201
+ if ( !isSupported ) {
202
+ // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
203
+ if ( !element.setAttribute ) {
204
+ element = document.createElement('div');
205
+ }
206
+ if ( element.setAttribute && element.removeAttribute ) {
207
+ element.setAttribute(eventName, '');
208
+ isSupported = is(element[eventName], 'function');
209
+
210
+ // If property was created, "remove it" (by setting value to `undefined`)
211
+ if ( !is(element[eventName], 'undefined') ) {
212
+ element[eventName] = undefined;
213
+ }
214
+ element.removeAttribute(eventName);
215
+ }
216
+ }
217
+
218
+ element = null;
219
+ return isSupported;
220
+ }
221
+ return isEventSupported;
222
+ })(),
223
+ /*>>hasevent*/
224
+
225
+ // TODO :: Add flag for hasownprop ? didn't last time
226
+
227
+ // hasOwnProperty shim by kangax needed for Safari 2.0 support
228
+ _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
229
+
230
+ if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
231
+ hasOwnProp = function (object, property) {
232
+ return _hasOwnProperty.call(object, property);
233
+ };
234
+ }
235
+ else {
236
+ hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
237
+ return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
238
+ };
239
+ }
240
+
241
+ // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
242
+ // es5.github.com/#x15.3.4.5
243
+
244
+ if (!Function.prototype.bind) {
245
+ Function.prototype.bind = function bind(that) {
246
+
247
+ var target = this;
248
+
249
+ if (typeof target != "function") {
250
+ throw new TypeError();
251
+ }
252
+
253
+ var args = slice.call(arguments, 1),
254
+ bound = function () {
255
+
256
+ if (this instanceof bound) {
257
+
258
+ var F = function(){};
259
+ F.prototype = target.prototype;
260
+ var self = new F();
261
+
262
+ var result = target.apply(
263
+ self,
264
+ args.concat(slice.call(arguments))
265
+ );
266
+ if (Object(result) === result) {
267
+ return result;
268
+ }
269
+ return self;
270
+
271
+ } else {
272
+
273
+ return target.apply(
274
+ that,
275
+ args.concat(slice.call(arguments))
276
+ );
277
+
278
+ }
279
+
280
+ };
281
+
282
+ return bound;
283
+ };
284
+ }
285
+
286
+ /**
287
+ * setCss applies given styles to the Modernizr DOM node.
288
+ */
289
+ function setCss( str ) {
290
+ mStyle.cssText = str;
291
+ }
292
+
293
+ /**
294
+ * setCssAll extrapolates all vendor-specific css strings.
295
+ */
296
+ function setCssAll( str1, str2 ) {
297
+ return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
298
+ }
299
+
300
+ /**
301
+ * is returns a boolean for if typeof obj is exactly type.
302
+ */
303
+ function is( obj, type ) {
304
+ return typeof obj === type;
305
+ }
306
+
307
+ /**
308
+ * contains returns a boolean for if substr is found within str.
309
+ */
310
+ function contains( str, substr ) {
311
+ return !!~('' + str).indexOf(substr);
312
+ }
313
+
314
+ /*>>testprop*/
315
+
316
+ // testProps is a generic CSS / DOM property test.
317
+
318
+ // In testing support for a given CSS property, it's legit to test:
319
+ // `elem.style[styleName] !== undefined`
320
+ // If the property is supported it will return an empty string,
321
+ // if unsupported it will return undefined.
322
+
323
+ // We'll take advantage of this quick test and skip setting a style
324
+ // on our modernizr element, but instead just testing undefined vs
325
+ // empty string.
326
+
327
+ // Because the testing of the CSS property names (with "-", as
328
+ // opposed to the camelCase DOM properties) is non-portable and
329
+ // non-standard but works in WebKit and IE (but not Gecko or Opera),
330
+ // we explicitly reject properties with dashes so that authors
331
+ // developing in WebKit or IE first don't end up with
332
+ // browser-specific content by accident.
333
+
334
+ function testProps( props, prefixed ) {
335
+ for ( var i in props ) {
336
+ var prop = props[i];
337
+ if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
338
+ return prefixed == 'pfx' ? prop : true;
339
+ }
340
+ }
341
+ return false;
342
+ }
343
+ /*>>testprop*/
344
+
345
+ // TODO :: add testDOMProps
346
+ /**
347
+ * testDOMProps is a generic DOM property test; if a browser supports
348
+ * a certain property, it won't return undefined for it.
349
+ */
350
+ function testDOMProps( props, obj, elem ) {
351
+ for ( var i in props ) {
352
+ var item = obj[props[i]];
353
+ if ( item !== undefined) {
354
+
355
+ // return the property name as a string
356
+ if (elem === false) return props[i];
357
+
358
+ // let's bind a function
359
+ if (is(item, 'function')){
360
+ // default to autobind unless override
361
+ return item.bind(elem || obj);
362
+ }
363
+
364
+ // return the unbound function or obj or value
365
+ return item;
366
+ }
367
+ }
368
+ return false;
369
+ }
370
+
371
+ /*>>testallprops*/
372
+ /**
373
+ * testPropsAll tests a list of DOM properties we want to check against.
374
+ * We specify literally ALL possible (known and/or likely) properties on
375
+ * the element including the non-vendor prefixed one, for forward-
376
+ * compatibility.
377
+ */
378
+ function testPropsAll( prop, prefixed, elem ) {
379
+
380
+ var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
381
+ props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
382
+
383
+ // did they call .prefixed('boxSizing') or are we just testing a prop?
384
+ if(is(prefixed, "string") || is(prefixed, "undefined")) {
385
+ return testProps(props, prefixed);
386
+
387
+ // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
388
+ } else {
389
+ props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
390
+ return testDOMProps(props, prefixed, elem);
391
+ }
392
+ }
393
+ /*>>testallprops*/
394
+
395
+
396
+ /**
397
+ * Tests
398
+ * -----
399
+ */
400
+
401
+ // The *new* flexbox
402
+ // dev.w3.org/csswg/css3-flexbox
403
+
404
+ tests['flexbox'] = function() {
405
+ return testPropsAll('flexWrap');
406
+ };
407
+
408
+ // The *old* flexbox
409
+ // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
410
+
411
+ tests['flexboxlegacy'] = function() {
412
+ return testPropsAll('boxDirection');
413
+ };
414
+
415
+ // On the S60 and BB Storm, getContext exists, but always returns undefined
416
+ // so we actually have to call getContext() to verify
417
+ // github.com/Modernizr/Modernizr/issues/issue/97/
418
+
419
+ tests['canvas'] = function() {
420
+ var elem = document.createElement('canvas');
421
+ return !!(elem.getContext && elem.getContext('2d'));
422
+ };
423
+
424
+ tests['canvastext'] = function() {
425
+ return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
426
+ };
427
+
428
+ // webk.it/70117 is tracking a legit WebGL feature detect proposal
429
+
430
+ // We do a soft detect which may false positive in order to avoid
431
+ // an expensive context creation: bugzil.la/732441
432
+
433
+ tests['webgl'] = function() {
434
+ return !!window.WebGLRenderingContext;
435
+ };
436
+
437
+ /*
438
+ * The Modernizr.touch test only indicates if the browser supports
439
+ * touch events, which does not necessarily reflect a touchscreen
440
+ * device, as evidenced by tablets running Windows 7 or, alas,
441
+ * the Palm Pre / WebOS (touch) phones.
442
+ *
443
+ * Additionally, Chrome (desktop) used to lie about its support on this,
444
+ * but that has since been rectified: crbug.com/36415
445
+ *
446
+ * We also test for Firefox 4 Multitouch Support.
447
+ *
448
+ * For more info, see: modernizr.github.com/Modernizr/touch.html
449
+ */
450
+
451
+ tests['touch'] = function() {
452
+ var bool;
453
+
454
+ if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
455
+ bool = true;
456
+ } else {
457
+ injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
458
+ bool = node.offsetTop === 9;
459
+ });
460
+ }
461
+
462
+ return bool;
463
+ };
464
+
465
+
466
+ // geolocation is often considered a trivial feature detect...
467
+ // Turns out, it's quite tricky to get right:
468
+ //
469
+ // Using !!navigator.geolocation does two things we don't want. It:
470
+ // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
471
+ // 2. Disables page caching in WebKit: webk.it/43956
472
+ //
473
+ // Meanwhile, in Firefox < 8, an about:config setting could expose
474
+ // a false positive that would throw an exception: bugzil.la/688158
475
+
476
+ tests['geolocation'] = function() {
477
+ return 'geolocation' in navigator;
478
+ };
479
+
480
+
481
+ tests['postmessage'] = function() {
482
+ return !!window.postMessage;
483
+ };
484
+
485
+
486
+ // Chrome incognito mode used to throw an exception when using openDatabase
487
+ // It doesn't anymore.
488
+ tests['websqldatabase'] = function() {
489
+ return !!window.openDatabase;
490
+ };
491
+
492
+ // Vendors had inconsistent prefixing with the experimental Indexed DB:
493
+ // - Webkit's implementation is accessible through webkitIndexedDB
494
+ // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
495
+ // For speed, we don't test the legacy (and beta-only) indexedDB
496
+ tests['indexedDB'] = function() {
497
+ return !!testPropsAll("indexedDB", window);
498
+ };
499
+
500
+ // documentMode logic from YUI to filter out IE8 Compat Mode
501
+ // which false positives.
502
+ tests['hashchange'] = function() {
503
+ return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
504
+ };
505
+
506
+ // Per 1.6:
507
+ // This used to be Modernizr.historymanagement but the longer
508
+ // name has been deprecated in favor of a shorter and property-matching one.
509
+ // The old API is still available in 1.6, but as of 2.0 will throw a warning,
510
+ // and in the first release thereafter disappear entirely.
511
+ tests['history'] = function() {
512
+ return !!(window.history && history.pushState);
513
+ };
514
+
515
+ tests['draganddrop'] = function() {
516
+ var div = document.createElement('div');
517
+ return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
518
+ };
519
+
520
+ // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
521
+ // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
522
+ // FF10 still uses prefixes, so check for it until then.
523
+ // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
524
+ tests['websockets'] = function() {
525
+ return 'WebSocket' in window || 'MozWebSocket' in window;
526
+ };
527
+
528
+
529
+ // css-tricks.com/rgba-browser-support/
530
+ tests['rgba'] = function() {
531
+ // Set an rgba() color and check the returned value
532
+
533
+ setCss('background-color:rgba(150,255,150,.5)');
534
+
535
+ return contains(mStyle.backgroundColor, 'rgba');
536
+ };
537
+
538
+ tests['hsla'] = function() {
539
+ // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
540
+ // except IE9 who retains it as hsla
541
+
542
+ setCss('background-color:hsla(120,40%,100%,.5)');
543
+
544
+ return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
545
+ };
546
+
547
+ tests['multiplebgs'] = function() {
548
+ // Setting multiple images AND a color on the background shorthand property
549
+ // and then querying the style.background property value for the number of
550
+ // occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
551
+
552
+ setCss('background:url(https://),url(https://),red url(https://)');
553
+
554
+ // If the UA supports multiple backgrounds, there should be three occurrences
555
+ // of the string "url(" in the return value for elemStyle.background
556
+
557
+ return (/(url\s*\(.*?){3}/).test(mStyle.background);
558
+ };
559
+
560
+
561
+
562
+ // this will false positive in Opera Mini
563
+ // github.com/Modernizr/Modernizr/issues/396
564
+
565
+ tests['backgroundsize'] = function() {
566
+ return testPropsAll('backgroundSize');
567
+ };
568
+
569
+ tests['borderimage'] = function() {
570
+ return testPropsAll('borderImage');
571
+ };
572
+
573
+
574
+ // Super comprehensive table about all the unique implementations of
575
+ // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
576
+
577
+ tests['borderradius'] = function() {
578
+ return testPropsAll('borderRadius');
579
+ };
580
+
581
+ // WebOS unfortunately false positives on this test.
582
+ tests['boxshadow'] = function() {
583
+ return testPropsAll('boxShadow');
584
+ };
585
+
586
+ // FF3.0 will false positive on this test
587
+ tests['textshadow'] = function() {
588
+ return document.createElement('div').style.textShadow === '';
589
+ };
590
+
591
+
592
+ tests['opacity'] = function() {
593
+ // Browsers that actually have CSS Opacity implemented have done so
594
+ // according to spec, which means their return values are within the
595
+ // range of [0.0,1.0] - including the leading zero.
596
+
597
+ setCssAll('opacity:.55');
598
+
599
+ // The non-literal . in this regex is intentional:
600
+ // German Chrome returns this value as 0,55
601
+ // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
602
+ return (/^0.55$/).test(mStyle.opacity);
603
+ };
604
+
605
+
606
+ // Note, Android < 4 will pass this test, but can only animate
607
+ // a single property at a time
608
+ // daneden.me/2011/12/putting-up-with-androids-bullshit/
609
+ tests['cssanimations'] = function() {
610
+ return testPropsAll('animationName');
611
+ };
612
+
613
+
614
+ tests['csscolumns'] = function() {
615
+ return testPropsAll('columnCount');
616
+ };
617
+
618
+
619
+ tests['cssgradients'] = function() {
620
+ /**
621
+ * For CSS Gradients syntax, please see:
622
+ * webkit.org/blog/175/introducing-css-gradients/
623
+ * developer.mozilla.org/en/CSS/-moz-linear-gradient
624
+ * developer.mozilla.org/en/CSS/-moz-radial-gradient
625
+ * dev.w3.org/csswg/css3-images/#gradients-
626
+ */
627
+
628
+ var str1 = 'background-image:',
629
+ str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
630
+ str3 = 'linear-gradient(left top,#9f9, white);';
631
+
632
+ setCss(
633
+ // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
634
+ (str1 + '-webkit- '.split(' ').join(str2 + str1) +
635
+ // standard syntax // trailing 'background-image:'
636
+ prefixes.join(str3 + str1)).slice(0, -str1.length)
637
+ );
638
+
639
+ return contains(mStyle.backgroundImage, 'gradient');
640
+ };
641
+
642
+
643
+ tests['cssreflections'] = function() {
644
+ return testPropsAll('boxReflect');
645
+ };
646
+
647
+
648
+ tests['csstransforms'] = function() {
649
+ return !!testPropsAll('transform');
650
+ };
651
+
652
+
653
+ tests['csstransforms3d'] = function() {
654
+
655
+ var ret = !!testPropsAll('perspective');
656
+
657
+ // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
658
+ // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
659
+ // some conditions. As a result, Webkit typically recognizes the syntax but
660
+ // will sometimes throw a false positive, thus we must do a more thorough check:
661
+ if ( ret && 'webkitPerspective' in docElement.style ) {
662
+
663
+ // Webkit allows this media query to succeed only if the feature is enabled.
664
+ // `@media (transform-3d),(-webkit-transform-3d){ ... }`
665
+ injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
666
+ ret = node.offsetLeft === 9 && node.offsetHeight === 3;
667
+ });
668
+ }
669
+ return ret;
670
+ };
671
+
672
+
673
+ tests['csstransitions'] = function() {
674
+ return testPropsAll('transition');
675
+ };
676
+
677
+
678
+ /*>>fontface*/
679
+ // @font-face detection routine by Diego Perini
680
+ // javascript.nwbox.com/CSSSupport/
681
+
682
+ // false positives:
683
+ // WebOS github.com/Modernizr/Modernizr/issues/342
684
+ // WP7 github.com/Modernizr/Modernizr/issues/538
685
+ tests['fontface'] = function() {
686
+ var bool;
687
+
688
+ injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
689
+ var style = document.getElementById('smodernizr'),
690
+ sheet = style.sheet || style.styleSheet,
691
+ cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
692
+
693
+ bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
694
+ });
695
+
696
+ return bool;
697
+ };
698
+ /*>>fontface*/
699
+
700
+ // CSS generated content detection
701
+ tests['generatedcontent'] = function() {
702
+ var bool;
703
+
704
+ injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
705
+ bool = node.offsetHeight >= 3;
706
+ });
707
+
708
+ return bool;
709
+ };
710
+
711
+
712
+
713
+ // These tests evaluate support of the video/audio elements, as well as
714
+ // testing what types of content they support.
715
+ //
716
+ // We're using the Boolean constructor here, so that we can extend the value
717
+ // e.g. Modernizr.video // true
718
+ // Modernizr.video.ogg // 'probably'
719
+ //
720
+ // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
721
+ // thx to NielsLeenheer and zcorpan
722
+
723
+ // Note: in some older browsers, "no" was a return value instead of empty string.
724
+ // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
725
+ // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
726
+
727
+ tests['video'] = function() {
728
+ var elem = document.createElement('video'),
729
+ bool = false;
730
+
731
+ // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
732
+ try {
733
+ if ( bool = !!elem.canPlayType ) {
734
+ bool = new Boolean(bool);
735
+ bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
736
+
737
+ // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
738
+ bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
739
+
740
+ bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
741
+ }
742
+
743
+ } catch(e) { }
744
+
745
+ return bool;
746
+ };
747
+
748
+ tests['audio'] = function() {
749
+ var elem = document.createElement('audio'),
750
+ bool = false;
751
+
752
+ try {
753
+ if ( bool = !!elem.canPlayType ) {
754
+ bool = new Boolean(bool);
755
+ bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
756
+ bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
757
+
758
+ // Mimetypes accepted:
759
+ // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
760
+ // bit.ly/iphoneoscodecs
761
+ bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
762
+ bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
763
+ elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
764
+ }
765
+ } catch(e) { }
766
+
767
+ return bool;
768
+ };
769
+
770
+
771
+ // In FF4, if disabled, window.localStorage should === null.
772
+
773
+ // Normally, we could not test that directly and need to do a
774
+ // `('localStorage' in window) && ` test first because otherwise Firefox will
775
+ // throw bugzil.la/365772 if cookies are disabled
776
+
777
+ // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
778
+ // will throw the exception:
779
+ // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
780
+ // Peculiarly, getItem and removeItem calls do not throw.
781
+
782
+ // Because we are forced to try/catch this, we'll go aggressive.
783
+
784
+ // Just FWIW: IE8 Compat mode supports these features completely:
785
+ // www.quirksmode.org/dom/html5.html
786
+ // But IE8 doesn't support either with local files
787
+
788
+ tests['localstorage'] = function() {
789
+ try {
790
+ localStorage.setItem(mod, mod);
791
+ localStorage.removeItem(mod);
792
+ return true;
793
+ } catch(e) {
794
+ return false;
795
+ }
796
+ };
797
+
798
+ tests['sessionstorage'] = function() {
799
+ try {
800
+ sessionStorage.setItem(mod, mod);
801
+ sessionStorage.removeItem(mod);
802
+ return true;
803
+ } catch(e) {
804
+ return false;
805
+ }
806
+ };
807
+
808
+
809
+ tests['webworkers'] = function() {
810
+ return !!window.Worker;
811
+ };
812
+
813
+
814
+ tests['applicationcache'] = function() {
815
+ return !!window.applicationCache;
816
+ };
817
+
818
+
819
+ // Thanks to Erik Dahlstrom
820
+ tests['svg'] = function() {
821
+ return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
822
+ };
823
+
824
+ // specifically for SVG inline in HTML, not within XHTML
825
+ // test page: paulirish.com/demo/inline-svg
826
+ tests['inlinesvg'] = function() {
827
+ var div = document.createElement('div');
828
+ div.innerHTML = '<svg/>';
829
+ return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
830
+ };
831
+
832
+ // SVG SMIL animation
833
+ tests['smil'] = function() {
834
+ return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
835
+ };
836
+
837
+ // This test is only for clip paths in SVG proper, not clip paths on HTML content
838
+ // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
839
+
840
+ // However read the comments to dig into applying SVG clippaths to HTML content here:
841
+ // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
842
+ tests['svgclippaths'] = function() {
843
+ return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
844
+ };
845
+
846
+ /*>>webforms*/
847
+ // input features and input types go directly onto the ret object, bypassing the tests loop.
848
+ // Hold this guy to execute in a moment.
849
+ function webforms() {
850
+ /*>>input*/
851
+ // Run through HTML5's new input attributes to see if the UA understands any.
852
+ // We're using f which is the <input> element created early on
853
+ // Mike Taylr has created a comprehensive resource for testing these attributes
854
+ // when applied to all input types:
855
+ // miketaylr.com/code/input-type-attr.html
856
+ // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
857
+
858
+ // Only input placeholder is tested while textarea's placeholder is not.
859
+ // Currently Safari 4 and Opera 11 have support only for the input placeholder
860
+ // Both tests are available in feature-detects/forms-placeholder.js
861
+ Modernizr['input'] = (function( props ) {
862
+ for ( var i = 0, len = props.length; i < len; i++ ) {
863
+ attrs[ props[i] ] = !!(props[i] in inputElem);
864
+ }
865
+ if (attrs.list){
866
+ // safari false positive's on datalist: webk.it/74252
867
+ // see also github.com/Modernizr/Modernizr/issues/146
868
+ attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
869
+ }
870
+ return attrs;
871
+ })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
872
+ /*>>input*/
873
+
874
+ /*>>inputtypes*/
875
+ // Run through HTML5's new input types to see if the UA understands any.
876
+ // This is put behind the tests runloop because it doesn't return a
877
+ // true/false like all the other tests; instead, it returns an object
878
+ // containing each input type with its corresponding true/false value
879
+
880
+ // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
881
+ Modernizr['inputtypes'] = (function(props) {
882
+
883
+ for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
884
+
885
+ inputElem.setAttribute('type', inputElemType = props[i]);
886
+ bool = inputElem.type !== 'text';
887
+
888
+ // We first check to see if the type we give it sticks..
889
+ // If the type does, we feed it a textual value, which shouldn't be valid.
890
+ // If the value doesn't stick, we know there's input sanitization which infers a custom UI
891
+ if ( bool ) {
892
+
893
+ inputElem.value = smile;
894
+ inputElem.style.cssText = 'position:absolute;visibility:hidden;';
895
+
896
+ if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
897
+
898
+ docElement.appendChild(inputElem);
899
+ defaultView = document.defaultView;
900
+
901
+ // Safari 2-4 allows the smiley as a value, despite making a slider
902
+ bool = defaultView.getComputedStyle &&
903
+ defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
904
+ // Mobile android web browser has false positive, so must
905
+ // check the height to see if the widget is actually there.
906
+ (inputElem.offsetHeight !== 0);
907
+
908
+ docElement.removeChild(inputElem);
909
+
910
+ } else if ( /^(search|tel)$/.test(inputElemType) ){
911
+ // Spec doesn't define any special parsing or detectable UI
912
+ // behaviors so we pass these through as true
913
+
914
+ // Interestingly, opera fails the earlier test, so it doesn't
915
+ // even make it here.
916
+
917
+ } else if ( /^(url|email)$/.test(inputElemType) ) {
918
+ // Real url and email support comes with prebaked validation.
919
+ bool = inputElem.checkValidity && inputElem.checkValidity() === false;
920
+
921
+ } else {
922
+ // If the upgraded input compontent rejects the :) text, we got a winner
923
+ bool = inputElem.value != smile;
924
+ }
925
+ }
926
+
927
+ inputs[ props[i] ] = !!bool;
928
+ }
929
+ return inputs;
930
+ })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
931
+ /*>>inputtypes*/
932
+ }
933
+ /*>>webforms*/
934
+
935
+
936
+ // End of test definitions
937
+ // -----------------------
938
+
939
+
940
+
941
+ // Run through all tests and detect their support in the current UA.
942
+ // todo: hypothetically we could be doing an array of tests and use a basic loop here.
943
+ for ( var feature in tests ) {
944
+ if ( hasOwnProp(tests, feature) ) {
945
+ // run the test, throw the return value into the Modernizr,
946
+ // then based on that boolean, define an appropriate className
947
+ // and push it into an array of classes we'll join later.
948
+ featureName = feature.toLowerCase();
949
+ Modernizr[featureName] = tests[feature]();
950
+
951
+ classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
952
+ }
953
+ }
954
+
955
+ /*>>webforms*/
956
+ // input tests need to run.
957
+ Modernizr.input || webforms();
958
+ /*>>webforms*/
959
+
960
+
961
+ /**
962
+ * addTest allows the user to define their own feature tests
963
+ * the result will be added onto the Modernizr object,
964
+ * as well as an appropriate className set on the html element
965
+ *
966
+ * @param feature - String naming the feature
967
+ * @param test - Function returning true if feature is supported, false if not
968
+ */
969
+ Modernizr.addTest = function ( feature, test ) {
970
+ if ( typeof feature == 'object' ) {
971
+ for ( var key in feature ) {
972
+ if ( hasOwnProp( feature, key ) ) {
973
+ Modernizr.addTest( key, feature[ key ] );
974
+ }
975
+ }
976
+ } else {
977
+
978
+ feature = feature.toLowerCase();
979
+
980
+ if ( Modernizr[feature] !== undefined ) {
981
+ // we're going to quit if you're trying to overwrite an existing test
982
+ // if we were to allow it, we'd do this:
983
+ // var re = new RegExp("\\b(no-)?" + feature + "\\b");
984
+ // docElement.className = docElement.className.replace( re, '' );
985
+ // but, no rly, stuff 'em.
986
+ return Modernizr;
987
+ }
988
+
989
+ test = typeof test == 'function' ? test() : test;
990
+
991
+ if (typeof enableClasses !== "undefined" && enableClasses) {
992
+ docElement.className += ' ' + (test ? '' : 'no-') + feature;
993
+ }
994
+ Modernizr[feature] = test;
995
+
996
+ }
997
+
998
+ return Modernizr; // allow chaining.
999
+ };
1000
+
1001
+
1002
+ // Reset modElem.cssText to nothing to reduce memory footprint.
1003
+ setCss('');
1004
+ modElem = inputElem = null;
1005
+
1006
+ /*>>shiv*/
1007
+ /**
1008
+ * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
1009
+ */
1010
+ ;(function(window, document) {
1011
+ /*jshint evil:true */
1012
+ /** version */
1013
+ var version = '3.7.0';
1014
+
1015
+ /** Preset options */
1016
+ var options = window.html5 || {};
1017
+
1018
+ /** Used to skip problem elements */
1019
+ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
1020
+
1021
+ /** Not all elements can be cloned in IE **/
1022
+ var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
1023
+
1024
+ /** Detect whether the browser supports default html5 styles */
1025
+ var supportsHtml5Styles;
1026
+
1027
+ /** Name of the expando, to work with multiple documents or to re-shiv one document */
1028
+ var expando = '_html5shiv';
1029
+
1030
+ /** The id for the the documents expando */
1031
+ var expanID = 0;
1032
+
1033
+ /** Cached data for each document */
1034
+ var expandoData = {};
1035
+
1036
+ /** Detect whether the browser supports unknown elements */
1037
+ var supportsUnknownElements;
1038
+
1039
+ (function() {
1040
+ try {
1041
+ var a = document.createElement('a');
1042
+ a.innerHTML = '<xyz></xyz>';
1043
+ //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
1044
+ supportsHtml5Styles = ('hidden' in a);
1045
+
1046
+ supportsUnknownElements = a.childNodes.length == 1 || (function() {
1047
+ // assign a false positive if unable to shiv
1048
+ (document.createElement)('a');
1049
+ var frag = document.createDocumentFragment();
1050
+ return (
1051
+ typeof frag.cloneNode == 'undefined' ||
1052
+ typeof frag.createDocumentFragment == 'undefined' ||
1053
+ typeof frag.createElement == 'undefined'
1054
+ );
1055
+ }());
1056
+ } catch(e) {
1057
+ // assign a false positive if detection fails => unable to shiv
1058
+ supportsHtml5Styles = true;
1059
+ supportsUnknownElements = true;
1060
+ }
1061
+
1062
+ }());
1063
+
1064
+ /*--------------------------------------------------------------------------*/
1065
+
1066
+ /**
1067
+ * Creates a style sheet with the given CSS text and adds it to the document.
1068
+ * @private
1069
+ * @param {Document} ownerDocument The document.
1070
+ * @param {String} cssText The CSS text.
1071
+ * @returns {StyleSheet} The style element.
1072
+ */
1073
+ function addStyleSheet(ownerDocument, cssText) {
1074
+ var p = ownerDocument.createElement('p'),
1075
+ parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
1076
+
1077
+ p.innerHTML = 'x<style>' + cssText + '</style>';
1078
+ return parent.insertBefore(p.lastChild, parent.firstChild);
1079
+ }
1080
+
1081
+ /**
1082
+ * Returns the value of `html5.elements` as an array.
1083
+ * @private
1084
+ * @returns {Array} An array of shived element node names.
1085
+ */
1086
+ function getElements() {
1087
+ var elements = html5.elements;
1088
+ return typeof elements == 'string' ? elements.split(' ') : elements;
1089
+ }
1090
+
1091
+ /**
1092
+ * Returns the data associated to the given document
1093
+ * @private
1094
+ * @param {Document} ownerDocument The document.
1095
+ * @returns {Object} An object of data.
1096
+ */
1097
+ function getExpandoData(ownerDocument) {
1098
+ var data = expandoData[ownerDocument[expando]];
1099
+ if (!data) {
1100
+ data = {};
1101
+ expanID++;
1102
+ ownerDocument[expando] = expanID;
1103
+ expandoData[expanID] = data;
1104
+ }
1105
+ return data;
1106
+ }
1107
+
1108
+ /**
1109
+ * returns a shived element for the given nodeName and document
1110
+ * @memberOf html5
1111
+ * @param {String} nodeName name of the element
1112
+ * @param {Document} ownerDocument The context document.
1113
+ * @returns {Object} The shived element.
1114
+ */
1115
+ function createElement(nodeName, ownerDocument, data){
1116
+ if (!ownerDocument) {
1117
+ ownerDocument = document;
1118
+ }
1119
+ if(supportsUnknownElements){
1120
+ return ownerDocument.createElement(nodeName);
1121
+ }
1122
+ if (!data) {
1123
+ data = getExpandoData(ownerDocument);
1124
+ }
1125
+ var node;
1126
+
1127
+ if (data.cache[nodeName]) {
1128
+ node = data.cache[nodeName].cloneNode();
1129
+ } else if (saveClones.test(nodeName)) {
1130
+ node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
1131
+ } else {
1132
+ node = data.createElem(nodeName);
1133
+ }
1134
+
1135
+ // Avoid adding some elements to fragments in IE < 9 because
1136
+ // * Attributes like `name` or `type` cannot be set/changed once an element
1137
+ // is inserted into a document/fragment
1138
+ // * Link elements with `src` attributes that are inaccessible, as with
1139
+ // a 403 response, will cause the tab/window to crash
1140
+ // * Script elements appended to fragments will execute when their `src`
1141
+ // or `text` property is set
1142
+ return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
1143
+ }
1144
+
1145
+ /**
1146
+ * returns a shived DocumentFragment for the given document
1147
+ * @memberOf html5
1148
+ * @param {Document} ownerDocument The context document.
1149
+ * @returns {Object} The shived DocumentFragment.
1150
+ */
1151
+ function createDocumentFragment(ownerDocument, data){
1152
+ if (!ownerDocument) {
1153
+ ownerDocument = document;
1154
+ }
1155
+ if(supportsUnknownElements){
1156
+ return ownerDocument.createDocumentFragment();
1157
+ }
1158
+ data = data || getExpandoData(ownerDocument);
1159
+ var clone = data.frag.cloneNode(),
1160
+ i = 0,
1161
+ elems = getElements(),
1162
+ l = elems.length;
1163
+ for(;i<l;i++){
1164
+ clone.createElement(elems[i]);
1165
+ }
1166
+ return clone;
1167
+ }
1168
+
1169
+ /**
1170
+ * Shivs the `createElement` and `createDocumentFragment` methods of the document.
1171
+ * @private
1172
+ * @param {Document|DocumentFragment} ownerDocument The document.
1173
+ * @param {Object} data of the document.
1174
+ */
1175
+ function shivMethods(ownerDocument, data) {
1176
+ if (!data.cache) {
1177
+ data.cache = {};
1178
+ data.createElem = ownerDocument.createElement;
1179
+ data.createFrag = ownerDocument.createDocumentFragment;
1180
+ data.frag = data.createFrag();
1181
+ }
1182
+
1183
+
1184
+ ownerDocument.createElement = function(nodeName) {
1185
+ //abort shiv
1186
+ if (!html5.shivMethods) {
1187
+ return data.createElem(nodeName);
1188
+ }
1189
+ return createElement(nodeName, ownerDocument, data);
1190
+ };
1191
+
1192
+ ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
1193
+ 'var n=f.cloneNode(),c=n.createElement;' +
1194
+ 'h.shivMethods&&(' +
1195
+ // unroll the `createElement` calls
1196
+ getElements().join().replace(/[\w\-]+/g, function(nodeName) {
1197
+ data.createElem(nodeName);
1198
+ data.frag.createElement(nodeName);
1199
+ return 'c("' + nodeName + '")';
1200
+ }) +
1201
+ ');return n}'
1202
+ )(html5, data.frag);
1203
+ }
1204
+
1205
+ /*--------------------------------------------------------------------------*/
1206
+
1207
+ /**
1208
+ * Shivs the given document.
1209
+ * @memberOf html5
1210
+ * @param {Document} ownerDocument The document to shiv.
1211
+ * @returns {Document} The shived document.
1212
+ */
1213
+ function shivDocument(ownerDocument) {
1214
+ if (!ownerDocument) {
1215
+ ownerDocument = document;
1216
+ }
1217
+ var data = getExpandoData(ownerDocument);
1218
+
1219
+ if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
1220
+ data.hasCSS = !!addStyleSheet(ownerDocument,
1221
+ // corrects block display not defined in IE6/7/8/9
1222
+ 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
1223
+ // adds styling not present in IE6/7/8/9
1224
+ 'mark{background:#FF0;color:#000}' +
1225
+ // hides non-rendered elements
1226
+ 'template{display:none}'
1227
+ );
1228
+ }
1229
+ if (!supportsUnknownElements) {
1230
+ shivMethods(ownerDocument, data);
1231
+ }
1232
+ return ownerDocument;
1233
+ }
1234
+
1235
+ /*--------------------------------------------------------------------------*/
1236
+
1237
+ /**
1238
+ * The `html5` object is exposed so that more elements can be shived and
1239
+ * existing shiving can be detected on iframes.
1240
+ * @type Object
1241
+ * @example
1242
+ *
1243
+ * // options can be changed before the script is included
1244
+ * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
1245
+ */
1246
+ var html5 = {
1247
+
1248
+ /**
1249
+ * An array or space separated string of node names of the elements to shiv.
1250
+ * @memberOf html5
1251
+ * @type Array|String
1252
+ */
1253
+ 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
1254
+
1255
+ /**
1256
+ * current version of html5shiv
1257
+ */
1258
+ 'version': version,
1259
+
1260
+ /**
1261
+ * A flag to indicate that the HTML5 style sheet should be inserted.
1262
+ * @memberOf html5
1263
+ * @type Boolean
1264
+ */
1265
+ 'shivCSS': (options.shivCSS !== false),
1266
+
1267
+ /**
1268
+ * Is equal to true if a browser supports creating unknown/HTML5 elements
1269
+ * @memberOf html5
1270
+ * @type boolean
1271
+ */
1272
+ 'supportsUnknownElements': supportsUnknownElements,
1273
+
1274
+ /**
1275
+ * A flag to indicate that the document's `createElement` and `createDocumentFragment`
1276
+ * methods should be overwritten.
1277
+ * @memberOf html5
1278
+ * @type Boolean
1279
+ */
1280
+ 'shivMethods': (options.shivMethods !== false),
1281
+
1282
+ /**
1283
+ * A string to describe the type of `html5` object ("default" or "default print").
1284
+ * @memberOf html5
1285
+ * @type String
1286
+ */
1287
+ 'type': 'default',
1288
+
1289
+ // shivs the document according to the specified `html5` object options
1290
+ 'shivDocument': shivDocument,
1291
+
1292
+ //creates a shived element
1293
+ createElement: createElement,
1294
+
1295
+ //creates a shived documentFragment
1296
+ createDocumentFragment: createDocumentFragment
1297
+ };
1298
+
1299
+ /*--------------------------------------------------------------------------*/
1300
+
1301
+ // expose html5
1302
+ window.html5 = html5;
1303
+
1304
+ // shiv the document
1305
+ shivDocument(document);
1306
+
1307
+ }(this, document));
1308
+ /*>>shiv*/
1309
+
1310
+ // Assign private properties to the return object with prefix
1311
+ Modernizr._version = version;
1312
+
1313
+ // expose these for the plugin API. Look in the source for how to join() them against your input
1314
+ /*>>prefixes*/
1315
+ Modernizr._prefixes = prefixes;
1316
+ /*>>prefixes*/
1317
+ /*>>domprefixes*/
1318
+ Modernizr._domPrefixes = domPrefixes;
1319
+ Modernizr._cssomPrefixes = cssomPrefixes;
1320
+ /*>>domprefixes*/
1321
+
1322
+ /*>>mq*/
1323
+ // Modernizr.mq tests a given media query, live against the current state of the window
1324
+ // A few important notes:
1325
+ // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
1326
+ // * A max-width or orientation query will be evaluated against the current state, which may change later.
1327
+ // * You must specify values. Eg. If you are testing support for the min-width media query use:
1328
+ // Modernizr.mq('(min-width:0)')
1329
+ // usage:
1330
+ // Modernizr.mq('only screen and (max-width:768)')
1331
+ Modernizr.mq = testMediaQuery;
1332
+ /*>>mq*/
1333
+
1334
+ /*>>hasevent*/
1335
+ // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
1336
+ // Modernizr.hasEvent('gesturestart', elem)
1337
+ Modernizr.hasEvent = isEventSupported;
1338
+ /*>>hasevent*/
1339
+
1340
+ /*>>testprop*/
1341
+ // Modernizr.testProp() investigates whether a given style property is recognized
1342
+ // Note that the property names must be provided in the camelCase variant.
1343
+ // Modernizr.testProp('pointerEvents')
1344
+ Modernizr.testProp = function(prop){
1345
+ return testProps([prop]);
1346
+ };
1347
+ /*>>testprop*/
1348
+
1349
+ /*>>testallprops*/
1350
+ // Modernizr.testAllProps() investigates whether a given style property,
1351
+ // or any of its vendor-prefixed variants, is recognized
1352
+ // Note that the property names must be provided in the camelCase variant.
1353
+ // Modernizr.testAllProps('boxSizing')
1354
+ Modernizr.testAllProps = testPropsAll;
1355
+ /*>>testallprops*/
1356
+
1357
+
1358
+ /*>>teststyles*/
1359
+ // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
1360
+ // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
1361
+ Modernizr.testStyles = injectElementWithStyles;
1362
+ /*>>teststyles*/
1363
+
1364
+
1365
+ /*>>prefixed*/
1366
+ // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
1367
+ // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
1368
+
1369
+ // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
1370
+ // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
1371
+ //
1372
+ // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
1373
+
1374
+ // If you're trying to ascertain which transition end event to bind to, you might do something like...
1375
+ //
1376
+ // var transEndEventNames = {
1377
+ // 'WebkitTransition' : 'webkitTransitionEnd',
1378
+ // 'MozTransition' : 'transitionend',
1379
+ // 'OTransition' : 'oTransitionEnd',
1380
+ // 'msTransition' : 'MSTransitionEnd',
1381
+ // 'transition' : 'transitionend'
1382
+ // },
1383
+ // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
1384
+
1385
+ Modernizr.prefixed = function(prop, obj, elem){
1386
+ if(!obj) {
1387
+ return testPropsAll(prop, 'pfx');
1388
+ } else {
1389
+ // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
1390
+ return testPropsAll(prop, obj, elem);
1391
+ }
1392
+ };
1393
+ /*>>prefixed*/
1394
+
1395
+
1396
+ /*>>cssclasses*/
1397
+ // Remove "no-js" class from <html> element, if it exists:
1398
+ docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
1399
+
1400
+ // Add the new classes to the <html> element.
1401
+ (enableClasses ? ' js ' + classes.join(' ') : '');
1402
+ /*>>cssclasses*/
1403
+
1404
+ return Modernizr;
1405
+
1406
+ })(this, this.document);
js/products-list.js CHANGED
@@ -1,292 +1,292 @@
1
- jQuery.widget('ecwid.productsList', {
2
-
3
- _create: function() {
4
-
5
- this.products = {};
6
- this.container = null;
7
- this._prefix = 'ecwid-productsList';
8
- this.sort = [];
9
- this.options = {
10
- max: 3,
11
- debug: false
12
- };
13
-
14
-
15
- this.element.addClass(this._prefix);
16
- this._removeInitialContent();
17
- this.container = jQuery('<ul>').appendTo(this.element);
18
- this._initFromHtmlData();
19
- this._readSingleProducts();
20
- this._onWindowResize();
21
- this._render();
22
-
23
- var self = this;
24
- jQuery(window).resize(
25
- ecwid_debounce(
26
- function() {
27
- self._onWindowResize();
28
- }
29
- , 200)
30
- );
31
-
32
- this.ajax_url = wp_ecwid_products_list_vars.ajax_url;
33
- this.is_api_available = wp_ecwid_products_list_vars.is_api_available;
34
- },
35
-
36
- _render: function() {
37
- var toShow = this._getProductsToShow();
38
-
39
- for (var i = 0; i < toShow.length; i++) {
40
- this._showProduct(this.products[toShow[i]]);
41
- }
42
-
43
- for (var id in this.products) {
44
- if (toShow.indexOf(id) == -1) {
45
- this._hideProduct(this.products[id]);
46
- }
47
- }
48
-
49
- if (toShow.length > 0) {
50
- jQuery('.show-if-empty', this.el).hide();
51
- }
52
- },
53
-
54
- _setOption: function(key, value) {
55
- this._super(key, value);
56
- if (key == 'max') {
57
- this.refresh();
58
- }
59
- },
60
-
61
- _getProductClass: function(id) {
62
- return this._prefix + '-product-' + id;
63
- },
64
-
65
- _getProductElement: function(id) {
66
- return this.container.find('.' + this._getProductClass(id));
67
- },
68
-
69
- _showProduct: function(product) {
70
- var existing = this._getProductElement(product.id);
71
-
72
- if (existing.length == 0) {
73
- this._buildProductElement(product);
74
- }
75
-
76
- this._fillProductElement(product);
77
-
78
- this._getProductElement(product.id)
79
- .addClass('show')
80
- .removeClass('hide')
81
- .prependTo(this.container);
82
- },
83
-
84
- _hideProduct: function(product) {
85
- this._getProductElement(product.id)
86
- .addClass('hide')
87
- .removeClass('show');
88
- },
89
-
90
- _buildProductElement: function(product) {
91
- var container = jQuery('<li class="' + this._getProductClass(product.id) + '">').appendTo(this.container);
92
-
93
- if (product.link != '') {
94
- container = jQuery('<a>')
95
- .appendTo(container);
96
- }
97
- if (product.image) {
98
- jQuery('<div class="' + this._prefix + '-image">').append('<img>').appendTo(container);
99
- } else {
100
- jQuery('<div class="' + this._prefix + '-image ecwid-noimage">').appendTo(container);
101
- }
102
- jQuery('<div class="' + this._prefix + '-name">').appendTo(container);
103
- jQuery('<div class="' + this._prefix + '-price ecwid-productBrowser-price">').appendTo(container);
104
- },
105
-
106
- _fillProductElement: function(product) {
107
- var container = jQuery('.'+ this._getProductClass(product.id), this.el);
108
-
109
- if (product.link != '') {
110
- jQuery('a', container)
111
- .attr('href', product.link)
112
- .attr('title', product.name);
113
- }
114
- if (product.image) {
115
- jQuery('.' + this._prefix + '-image img', container).attr('src', product.image);
116
- }
117
-
118
- jQuery('.' + this._prefix + '-name', container).text(product.name);
119
- jQuery('.' + this._prefix + '-price ecwid-productBrowser-price', container).text(product.price);
120
-
121
- },
122
-
123
- _initFromHtmlData: function() {
124
- for (var option_name in this.options) {
125
- var data_name = 'ecwid-' + option_name;
126
- if (typeof(this.element.data(data_name)) != 'undefined') {
127
- this._setOption(option_name, this.element.data(data_name));
128
- }
129
- }
130
- },
131
-
132
- _removeInitialContent: function() {
133
- this.originalContentContainer = jQuery('<div class="ecwid-initial-productsList-content">')
134
- .data('generatedProductsList', this)
135
- .append(this.element.find('>*'))
136
- .insertAfter(this.element);
137
- },
138
-
139
- _readSingleProducts: function() {
140
-
141
- var self = this;
142
- var singleProductLoaded = function (container) {
143
- return jQuery('.ecwid-title', container).text() != '';
144
- }
145
-
146
- jQuery('.ecwid-SingleProduct', this.originalContentContainer).each(function(idx, el) {
147
- var interval = setInterval(
148
- function() {
149
- if (singleProductLoaded(el)) {
150
- clearInterval(interval);
151
- self._readSingleProduct(el);
152
- }
153
- },
154
- 500
155
- );
156
- });
157
- },
158
-
159
- _readSingleProduct: function(singleProductContainer) {
160
-
161
- var forced_image = jQuery('div[itemprop=image]', singleProductContainer).data('force-image');
162
- var product = {
163
- name: jQuery('.ecwid-title', singleProductContainer).text(),
164
- image: forced_image ? forced_image : jQuery('.ecwid-SingleProduct-picture img', singleProductContainer).attr('src'),
165
- id: jQuery(singleProductContainer).data('single-product-id'),
166
- link: jQuery(singleProductContainer).data('single-product-link'),
167
- }
168
- if (jQuery('.ecwid-productBrowser-price .gwt-HTML', singleProductContainer).length > 0) {
169
- product.price = jQuery('.ecwid-productBrowser-price .gwt-HTML', singleProductContainer).html();
170
- } else {
171
- product.price = jQuery('.ecwid-price', singleProductContainer).html();
172
- }
173
- this.addProduct(product, true);
174
- },
175
-
176
- _updateFromServer: function(id) {
177
-
178
- var that = this;
179
- if (!this.products[id]) return false;
180
- jQuery.getJSON(
181
- wp_ecwid_products_list_vars.ajax_url,
182
- {
183
- 'action': 'ecwid_get_product_info',
184
- 'id': id
185
- },
186
- function(data, result) {
187
- if (result == 'success') {
188
- that.products[id] = jQuery.extend(
189
- that.products[id], {
190
- image: data.imageUrl
191
- }
192
- );
193
-
194
- that._render();
195
- }
196
- }
197
- );
198
- },
199
-
200
- _getProductsToShow: function() {
201
- return this.sort.slice(0, this.option('max'));
202
- },
203
-
204
- _addToSort: function(id) {
205
- this.sort.push(id.toString());
206
- },
207
-
208
- _triggerError: function(message) {
209
- message = 'ecwid.productsList ' + message;
210
- if (this.options.debug) {
211
- alert(message);
212
- }
213
- console.log(message);
214
- },
215
-
216
- _destroy: function() {
217
- this.element.removeClass('.' + this._prefix).find('>*').remove();
218
- this.element.append(this.originalContentContainer.find('>*'));
219
- this.originalContentContainer.data('generatedProductsList', null);
220
- this.originalContentContainer = null;
221
- this._superApply(arguments);
222
- },
223
-
224
- refresh: function() {
225
- this._render();
226
- },
227
-
228
- addProduct: function(product, forceRender) {
229
- if (typeof(product.id) == 'undefined') {
230
- this._triggerError('addProduct error: product must have id');
231
- }
232
-
233
- if (typeof this.products[product.id] != 'undefined') {
234
- return;
235
- }
236
-
237
- this.products[product.id] = jQuery.extend(
238
- {}, {
239
- id: 0,
240
- name: 'no name',
241
- image: '',
242
- link: '',
243
- price: '',
244
- toString: function() {return this.name;}
245
- },
246
- product
247
- );
248
-
249
- this._addToSort(product.id);
250
-
251
- if (forceRender) {
252
- this._render();
253
- }
254
- },
255
-
256
- _onWindowResize: function() {
257
- if (this.element.width() < 150) {
258
- this.element.addClass('width-s').removeClass('width-m width-l');
259
- } else if (this.element.width() < 300) {
260
- this.element.addClass('width-m').removeClass('width-s width-l');
261
- } else {
262
- this.element.addClass('width-l').removeClass('width-s width-m');
263
- }
264
- }
265
- });
266
-
267
-
268
- // Debounce function from http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
269
- var ecwid_debounce = function (func, threshold, execAsap) {
270
-
271
- var timeout;
272
-
273
- return function debounced () {
274
- var obj = this, args = arguments;
275
- function delayed () {
276
- if (!execAsap) {
277
- func.apply(obj, args);
278
- }
279
- timeout = null;
280
- };
281
-
282
- if (timeout)
283
- clearTimeout(timeout);
284
- else if (execAsap)
285
- func.apply(obj, args);
286
-
287
- timeout = setTimeout(delayed, threshold || 100);
288
- };
289
-
290
- }
291
-
292
- jQuery('.ecwid-productsList').trigger('ecwidOnWindowResize');
1
+ jQuery.widget('ecwid.productsList', {
2
+
3
+ _create: function() {
4
+
5
+ this.products = {};
6
+ this.container = null;
7
+ this._prefix = 'ecwid-productsList';
8
+ this.sort = [];
9
+ this.options = {
10
+ max: 3,
11
+ debug: false
12
+ };
13
+
14
+
15
+ this.element.addClass(this._prefix);
16
+ this._removeInitialContent();
17
+ this.container = jQuery('<ul>').appendTo(this.element);
18
+ this._initFromHtmlData();
19
+ this._readSingleProducts();
20
+ this._onWindowResize();
21
+ this._render();
22
+
23
+ var self = this;
24
+ jQuery(window).resize(
25
+ ecwid_debounce(
26
+ function() {
27
+ self._onWindowResize();
28
+ }
29
+ , 200)
30
+ );
31
+
32
+ this.ajax_url = wp_ecwid_products_list_vars.ajax_url;
33
+ this.is_api_available = wp_ecwid_products_list_vars.is_api_available;
34
+ },
35
+
36
+ _render: function() {
37
+ var toShow = this._getProductsToShow();
38
+
39
+ for (var i = 0; i < toShow.length; i++) {
40
+ this._showProduct(this.products[toShow[i]]);
41
+ }
42
+
43
+ for (var id in this.products) {
44
+ if (toShow.indexOf(id) == -1) {
45
+ this._hideProduct(this.products[id]);
46
+ }
47
+ }
48
+
49
+ if (toShow.length > 0) {
50
+ jQuery('.show-if-empty', this.el).hide();
51
+ }
52
+ },
53
+
54
+ _setOption: function(key, value) {
55
+ this._super(key, value);
56
+ if (key == 'max') {
57
+ this.refresh();
58
+ }
59
+ },
60
+
61
+ _getProductClass: function(id) {
62
+ return this._prefix + '-product-' + id;
63
+ },
64
+
65
+ _getProductElement: function(id) {
66
+ return this.container.find('.' + this._getProductClass(id));
67
+ },
68
+
69
+ _showProduct: function(product) {
70
+ var existing = this._getProductElement(product.id);
71
+
72
+ if (existing.length == 0) {
73
+ this._buildProductElement(product);
74
+ }
75
+
76
+ this._fillProductElement(product);
77
+
78
+ this._getProductElement(product.id)
79
+ .addClass('show')
80
+ .removeClass('hide')
81
+ .prependTo(this.container);
82
+ },
83
+
84
+ _hideProduct: function(product) {
85
+ this._getProductElement(product.id)
86
+ .addClass('hide')
87
+ .removeClass('show');
88
+ },
89
+
90
+ _buildProductElement: function(product) {
91
+ var container = jQuery('<li class="' + this._getProductClass(product.id) + '">').appendTo(this.container);
92
+
93
+ if (product.link != '') {
94
+ container = jQuery('<a>')
95
+ .appendTo(container);
96
+ }
97
+ if (product.image) {
98
+ jQuery('<div class="' + this._prefix + '-image">').append('<img>').appendTo(container);
99
+ } else {
100
+ jQuery('<div class="' + this._prefix + '-image ecwid-noimage">').appendTo(container);
101
+ }
102
+ jQuery('<div class="' + this._prefix + '-name">').appendTo(container);
103
+ jQuery('<div class="' + this._prefix + '-price ecwid-productBrowser-price">').appendTo(container);
104
+ },
105
+
106
+ _fillProductElement: function(product) {
107
+ var container = jQuery('.'+ this._getProductClass(product.id), this.el);
108
+
109
+ if (product.link != '') {
110
+ jQuery('a', container)
111
+ .attr('href', product.link)
112
+ .attr('title', product.name);
113
+ }
114
+ if (product.image) {
115
+ jQuery('.' + this._prefix + '-image img', container).attr('src', product.image);
116
+ }
117
+
118
+ jQuery('.' + this._prefix + '-name', container).text(product.name);
119
+ jQuery('.' + this._prefix + '-price ecwid-productBrowser-price', container).text(product.price);
120
+
121
+ },
122
+
123
+ _initFromHtmlData: function() {
124
+ for (var option_name in this.options) {
125
+ var data_name = 'ecwid-' + option_name;
126
+ if (typeof(this.element.data(data_name)) != 'undefined') {
127
+ this._setOption(option_name, this.element.data(data_name));
128
+ }
129
+ }
130
+ },
131
+
132
+ _removeInitialContent: function() {
133
+ this.originalContentContainer = jQuery('<div class="ecwid-initial-productsList-content">')
134
+ .data('generatedProductsList', this)
135
+ .append(this.element.find('>*'))
136
+ .insertAfter(this.element);
137
+ },
138
+
139
+ _readSingleProducts: function() {
140
+
141
+ var self = this;
142
+ var singleProductLoaded = function (container) {
143
+ return jQuery('.ecwid-title', container).text() != '';
144
+ }
145
+
146
+ jQuery('.ecwid-SingleProduct', this.originalContentContainer).each(function(idx, el) {
147
+ var interval = setInterval(
148
+ function() {
149
+ if (singleProductLoaded(el)) {
150
+ clearInterval(interval);
151
+ self._readSingleProduct(el);
152
+ }
153
+ },
154
+ 500
155
+ );
156
+ });
157
+ },
158
+
159
+ _readSingleProduct: function(singleProductContainer) {
160
+
161
+ var forced_image = jQuery('div[itemprop=image]', singleProductContainer).data('force-image');
162
+ var product = {
163
+ name: jQuery('.ecwid-title', singleProductContainer).text(),
164
+ image: forced_image ? forced_image : jQuery('.ecwid-SingleProduct-picture img', singleProductContainer).attr('src'),
165
+ id: jQuery(singleProductContainer).data('single-product-id'),
166
+ link: jQuery(singleProductContainer).data('single-product-link'),
167
+ }
168
+ if (jQuery('.ecwid-productBrowser-price .gwt-HTML', singleProductContainer).length > 0) {
169
+ product.price = jQuery('.ecwid-productBrowser-price .gwt-HTML', singleProductContainer).html();
170
+ } else {
171
+ product.price = jQuery('.ecwid-price', singleProductContainer).html();
172
+ }
173
+ this.addProduct(product, true);
174
+ },
175
+
176
+ _updateFromServer: function(id) {
177
+
178
+ var that = this;
179
+ if (!this.products[id]) return false;
180
+ jQuery.getJSON(
181
+ wp_ecwid_products_list_vars.ajax_url,
182
+ {
183
+ 'action': 'ecwid_get_product_info',
184
+ 'id': id
185
+ },
186
+ function(data, result) {
187
+ if (result == 'success') {
188
+ that.products[id] = jQuery.extend(
189
+ that.products[id], {
190
+ image: data.imageUrl
191
+ }
192
+ );
193
+
194
+ that._render();
195
+ }
196
+ }
197
+ );
198
+ },
199
+
200
+ _getProductsToShow: function() {
201
+ return this.sort.slice(0, this.option('max'));
202
+ },
203
+
204
+ _addToSort: function(id) {
205
+ this.sort.push(id.toString());
206
+ },
207
+
208
+ _triggerError: function(message) {
209
+ message = 'ecwid.productsList ' + message;
210
+ if (this.options.debug) {
211
+ alert(message);
212
+ }
213
+ console.log(message);
214
+ },
215
+
216
+ _destroy: function() {
217
+ this.element.removeClass('.' + this._prefix).find('>*').remove();
218
+ this.element.append(this.originalContentContainer.find('>*'));
219
+ this.originalContentContainer.data('generatedProductsList', null);
220
+ this.originalContentContainer = null;
221
+ this._superApply(arguments);
222
+ },
223
+
224
+ refresh: function() {
225
+ this._render();
226
+ },
227
+
228
+ addProduct: function(product, forceRender) {
229
+ if (typeof(product.id) == 'undefined') {
230
+ this._triggerError('addProduct error: product must have id');
231
+ }
232
+
233
+ if (typeof this.products[product.id] != 'undefined') {
234
+ return;
235
+ }
236
+
237
+ this.products[product.id] = jQuery.extend(
238
+ {}, {
239
+ id: 0,
240
+ name: 'no name',
241
+ image: '',
242
+ link: '',
243
+ price: '',
244
+ toString: function() {return this.name;}
245
+ },
246
+ product
247
+ );
248
+
249
+ this._addToSort(product.id);
250
+
251
+ if (forceRender) {
252
+ this._render();
253
+ }
254
+ },
255
+
256
+ _onWindowResize: function() {
257
+ if (this.element.width() < 150) {
258
+ this.element.addClass('width-s').removeClass('width-m width-l');
259
+ } else if (this.element.width() < 300) {
260
+ this.element.addClass('width-m').removeClass('width-s width-l');
261
+ } else {
262
+ this.element.addClass('width-l').removeClass('width-s width-m');
263
+ }
264
+ }
265
+ });
266
+
267
+
268
+ // Debounce function from http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
269
+ var ecwid_debounce = function (func, threshold, execAsap) {
270
+
271
+ var timeout;
272
+
273
+ return function debounced () {
274
+ var obj = this, args = arguments;
275
+ function delayed () {
276
+ if (!execAsap) {
277
+ func.apply(obj, args);
278
+ }
279
+ timeout = null;
280
+ };
281
+
282
+ if (timeout)
283
+ clearTimeout(timeout);
284
+ else if (execAsap)
285
+ func.apply(obj, args);
286
+
287
+ timeout = setTimeout(delayed, threshold || 100);
288
+ };
289
+
290
+ }
291
+
292
+ jQuery('.ecwid-productsList').trigger('ecwidOnWindowResize');
js/recently-viewed.js CHANGED
@@ -1,82 +1,82 @@
1
- wpCookies.set('test_ecwid_shopping_cart_recently_products_cookie', 'test_ecwid_shopping_cart_cookie_value', { path: '/' });
2
- if (wpCookies.get('test_ecwid_shopping_cart_recently_products_cookie') != 'test_ecwid_shopping_cart_cookie_value') {
3
- // Cookies do not work, we do nothing
4
- exit;
5
- }
6
-
7
- jQuery.widget('ecwid.recentlyViewedProducts', jQuery.ecwid.productsList, {
8
-
9
- _create: function() {
10
- this._superApply(arguments);
11
-
12
- var self = this;
13
- Ecwid.OnPageLoaded.add(
14
- function(page) {
15
-
16
- if (page.type == 'PRODUCT') {
17
- var product = {
18
- id: page.productId.toString(),
19
- name: page.name
20
- }
21
-
22
- setTimeout(function() {
23
- self.addViewedProduct(product);
24
- }, 500);
25
- } else {
26
- self.refresh();
27
- }
28
- }
29
- );
30
- },
31
-
32
- addViewedProduct: function(product) {
33
- product.image = jQuery('.ecwid-productBrowser-details-thumbnail .gwt-Image').attr('src');
34
- product.link = window.location.href;
35
- product.name = jQuery('.ecwid-productBrowser-head').text();
36
- if (jQuery('.ecwid-productBrowser-price .ecwid-productBrowser-price-value').length > 0) {
37
- product.price = jQuery('.ecwid-productBrowser-price .ecwid-productBrowser-price-value').html();
38
- } else {
39
- product.price = jQuery('.ecwid-productBrowser-price').html();
40
- }
41
-
42
- if (typeof this.products[product.id] == 'undefined') {
43
- this.addProduct(product);
44
- } else {
45
- this.sort.splice(this.sort.indexOf(product.id), 1);
46
- this._addToSort(product.id);
47
- }
48
-
49
- if (this.is_api_available) {
50
- this._updateFromServer(product.id);
51
- }
52
-
53
- this._render();
54
- },
55
-
56
- render: function() {
57
- this._superApply(arguments);
58
- jQuery('.show-if-empty', this.el).hide();
59
- },
60
-
61
- _getProductsToShow: function() {
62
- // copy array using slice
63
- var sort = this.sort.slice();
64
-
65
-
66
- if (jQuery('.ecwid-productBrowser-ProductPage').length > 0) {
67
- var currentProductId = jQuery('.ecwid-productBrowser-ProductPage').attr('class').match(/ecwid-productBrowser-ProductPage-(\d+)/);
68
-
69
- if (sort.length > 1 && sort.indexOf(currentProductId[1]) != -1) {
70
- sort.splice(
71
- sort.indexOf(
72
- currentProductId[1]
73
- ), 1
74
- );
75
- }
76
- }
77
-
78
- return sort.reverse().slice(0, this.option('max')).reverse();
79
- }
80
- });
81
-
82
  jQuery('.ecwid-recently-viewed-products').recentlyViewedProducts();
1
+ wpCookies.set('test_ecwid_shopping_cart_recently_products_cookie', 'test_ecwid_shopping_cart_cookie_value', { path: '/' });
2
+ if (wpCookies.get('test_ecwid_shopping_cart_recently_products_cookie') != 'test_ecwid_shopping_cart_cookie_value') {
3
+ // Cookies do not work, we do nothing
4
+ exit;
5
+ }
6
+
7
+ jQuery.widget('ecwid.recentlyViewedProducts', jQuery.ecwid.productsList, {
8
+
9
+ _create: function() {
10
+ this._superApply(arguments);
11
+
12
+ var self = this;
13
+ Ecwid.OnPageLoaded.add(
14
+ function(page) {
15
+
16
+ if (page.type == 'PRODUCT') {
17
+ var product = {
18
+ id: page.productId.toString(),
19
+ name: page.name
20
+ }
21
+
22
+ setTimeout(function() {
23
+ self.addViewedProduct(product);
24
+ }, 500);
25
+ } else {
26
+ self.refresh();
27
+ }
28
+ }
29
+ );
30
+ },
31
+
32
+ addViewedProduct: function(product) {
33
+ product.image = jQuery('.ecwid-productBrowser-details-thumbnail .gwt-Image').attr('src');
34
+ product.link = window.location.href;
35
+ product.name = jQuery('.ecwid-productBrowser-head').text();
36
+ if (jQuery('.ecwid-productBrowser-price .ecwid-productBrowser-price-value').length > 0) {
37
+ product.price = jQuery('.ecwid-productBrowser-price .ecwid-productBrowser-price-value').html();
38
+ } else {
39
+ product.price = jQuery('.ecwid-productBrowser-price').html();
40
+ }
41
+
42
+ if (typeof this.products[product.id] == 'undefined') {
43
+ this.addProduct(product);
44
+ } else {
45
+ this.sort.splice(this.sort.indexOf(product.id), 1);
46
+ this._addToSort(product.id);
47
+ }
48
+
49
+ if (this.is_api_available) {
50
+ this._updateFromServer(product.id);
51
+ }
52
+
53
+ this._render();
54
+ },
55
+
56
+ render: function() {
57
+ this._superApply(arguments);
58
+ jQuery('.show-if-empty', this.el).hide();
59
+ },
60
+
61
+ _getProductsToShow: function() {
62
+ // copy array using slice
63
+ var sort = this.sort.slice();
64
+
65
+
66
+ if (jQuery('.ecwid-productBrowser-ProductPage').length > 0) {
67
+ var currentProductId = jQuery('.ecwid-productBrowser-ProductPage').attr('class').match(/ecwid-productBrowser-ProductPage-(\d+)/);
68
+
69
+ if (sort.length > 1 && sort.indexOf(currentProductId[1]) != -1) {
70
+ sort.splice(
71
+ sort.indexOf(
72
+ currentProductId[1]
73
+ ), 1
74
+ );
75
+ }
76
+ }
77
+
78
+ return sort.reverse().slice(0, this.option('max')).reverse();
79
+ }
80
+ });
81
+
82
  jQuery('.ecwid-recently-viewed-products').recentlyViewedProducts();
js/store-editor-common.js CHANGED
@@ -1,25 +1,25 @@
1
- function ecwid_get_store_shortcode(content) {
2
- var found = false;
3
- var index = 0;
4
-
5
- while (found = wp.shortcode.next('ecwid', content, index)) {
6
-
7
- if (found && (!found.shortcode.attrs.named.widgets || found.shortcode.attrs.named.widgets.toLowerCase().indexOf('productbrowser') != -1)) {
8
- break;
9
- }
10
- index = found.index + 1;
11
- }
12
-
13
- if (typeof found == 'undefined') {
14
- found = false;
15
- }
16
-
17
- // Workaround for the caching bug that does allow to have properly parsed attributes
18
- if (found) {
19
- var tmpfound = wp.shortcode.next('ecwid', found.content.replace('[ecwid', '[ecwid timestamp="' + (new Date()).getMilliseconds() + '"'));
20
- found.shortcode.attrs = tmpfound.shortcode.attrs;
21
- delete found.shortcode.attrs.named.timestamp;
22
- }
23
-
24
- return found;
25
  }
1
+ function ecwid_get_store_shortcode(content) {
2
+ var found = false;
3
+ var index = 0;
4
+
5
+ while (found = wp.shortcode.next('ecwid', content, index)) {
6
+
7
+ if (found && (!found.shortcode.attrs.named.widgets || found.shortcode.attrs.named.widgets.toLowerCase().indexOf('productbrowser') != -1)) {
8
+ break;
9
+ }
10
+ index = found.index + 1;
11
+ }
12
+
13
+ if (typeof found == 'undefined') {
14
+ found = false;
15
+ }
16
+
17
+ // Workaround for the caching bug that does allow to have properly parsed attributes
18
+ if (found) {
19
+ var tmpfound = wp.shortcode.next('ecwid', found.content.replace('[ecwid', '[ecwid timestamp="' + (new Date()).getMilliseconds() + '"'));
20
+ found.shortcode.attrs = tmpfound.shortcode.attrs;
21
+ delete found.shortcode.attrs.named.timestamp;
22
+ }
23
+
24
+ return found;
25
  }
js/store-editor-mce.js CHANGED
@@ -1,596 +1,596 @@
1
- /* global tinymce */
2
- tinymce.PluginManager.add( 'ecwid', function( editor ) {
3
- var toolbarActive = false;
4
-
5
- // function parseShortcode( content ) {
6
- // return content.replace( /(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function( a, b, c ) {
7
- // var id, cls, w, cap, img, width,
8
- // trim = tinymce.trim;
9
- //
10
- // id = b.match( /id=['"]([^'"]*)['"] ?/ );
11
- // if ( id ) {
12
- // b = b.replace( id[0], '' );
13
- // }
14
- //
15
- // cls = b.match( /align=['"]([^'"]*)['"] ?/ );
16
- // if ( cls ) {
17
- // b = b.replace( cls[0], '' );
18
- // }
19
- //
20
- // w = b.match( /width=['"]([0-9]*)['"] ?/ );
21
- // if ( w ) {
22
- // b = b.replace( w[0], '' );
23
- // }
24
- //
25
- // c = trim( c );
26
- // img = c.match( /((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i );
27
- //
28
- // if ( img && img[2] ) {
29
- // cap = trim( img[2] );
30
- // img = trim( img[1] );
31
- // } else {
32
- // // old captions shortcode style
33
- // cap = trim( b ).replace( /caption=['"]/, '' ).replace( /['"]$/, '' );
34
- // img = c;
35
- // }
36
- //
37
- // id = ( id && id[1] ) ? id[1] : '';
38
- // cls = ( cls && cls[1] ) ? cls[1] : 'alignnone';
39
- //
40
- // if ( ! w && img ) {
41
- // w = img.match( /width=['"]([0-9]*)['"]/ );
42
- // }
43
- //
44
- // if ( w && w[1] ) {
45
- // w = w[1];
46
- // }
47
- //
48
- // if ( ! w || ! cap ) {
49
- // return c;
50
- // }
51
- //
52
- // width = parseInt( w, 10 );
53
- // if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
54
- // width += 10;
55
- // }
56
- //
57
- // return '<div class="mceTemp"><dl id="'+ id +'" class="wp-caption '+ cls +'" style="width: '+ width +'px">' +
58
- // '<dt class="wp-caption-dt">'+ img +'</dt><dd class="wp-caption-dd">'+ cap +'</dd></dl></div>';
59
- // });
60
- // }
61
- //
62
- // function getShortcode( content ) {
63
- // return content.replace( /<div (?:id="attachment_|class="mceTemp)[^>]*>([\s\S]+?)<\/div>/g, function( a, b ) {
64
- // var out = '';
65
- //
66
- // if ( b.indexOf('<img ') === -1 ) {
67
- // // Broken caption. The user managed to drag the image out?
68
- // // Try to return the caption text as a paragraph.
69
- // out = b.match( /<dd [^>]+>([\s\S]+?)<\/dd>/i );
70
- //
71
- // if ( out && out[1] ) {
72
- // return '<p>' + out[1] + '</p>';
73
- // }
74
- //
75
- // return '';
76
- // }
77
- //
78
- // out = b.replace( /<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi, function( a, b, c, cap ) {
79
- // var id, cls, w;
80
- //
81
- // w = c.match( /width="([0-9]*)"/ );
82
- // w = ( w && w[1] ) ? w[1] : '';
83
- //
84
- // if ( ! w || ! cap ) {
85
- // return c;
86
- // }
87
- //
88
- // id = b.match( /id="([^"]*)"/ );
89
- // id = ( id && id[1] ) ? id[1] : '';
90
- //
91
- // cls = b.match( /class="([^"]*)"/ );
92
- // cls = ( cls && cls[1] ) ? cls[1] : '';
93
- // cls = cls.match( /align[a-z]+/ ) || 'alignnone';
94
- //
95
- // cap = cap.replace( /\r\n|\r/g, '\n' ).replace( /<[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {
96
- // // no line breaks inside HTML tags
97
- // return a.replace( /[\r\n\t]+/, ' ' );
98
- // });
99
- //
100
- // // convert remaining line breaks to <br>
101
- // cap = cap.replace( /\s*\n\s*/g, '<br />' );
102
- //
103
- // return '[caption id="'+ id +'" align="'+ cls +'" width="'+ w +'"]'+ c +' '+ cap +'[/caption]';
104
- // });
105
- //
106
- // if ( out.indexOf('[caption') !== 0 ) {
107
- // // the caption html seems broken, try to find the image that may be wrapped in a link
108
- // // and may be followed by <p> with the caption text.
109
- // out = b.replace( /[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2' );
110
- // }
111
- //
112
- // return out;
113
- // });
114
- // }
115
- //
116
- // function extractImageData( imageNode ) {
117
- // var classes, extraClasses, metadata, captionBlock, caption, link, width, height,
118
- // dom = editor.dom,
119
- // isIntRegExp = /^\d+$/;
120
- //
121
- // // default attributes
122
- // metadata = {
123
- // attachment_id: false,
124
- // size: 'custom',
125
- // caption: '',
126
- // align: 'none',
127
- // extraClasses: '',
128
- // link: false,
129
- // linkUrl: '',
130
- // linkClassName: '',
131
- // linkTargetBlank: false,
132
- // linkRel: '',
133
- // title: ''
134
- // };
135
- //
136
- // metadata.url = dom.getAttrib( imageNode, 'src' );
137
- // metadata.alt = dom.getAttrib( imageNode, 'alt' );
138
- // metadata.title = dom.getAttrib( imageNode, 'title' );
139
- //
140
- // width = dom.getAttrib( imageNode, 'width' );
141
- // height = dom.getAttrib( imageNode, 'height' );
142
- //
143
- // if ( ! isIntRegExp.test( width ) || parseInt( width, 10 ) < 1 ) {
144
- // width = imageNode.naturalWidth || imageNode.width;
145
- // }
146
- //
147
- // if ( ! isIntRegExp.test( height ) || parseInt( height, 10 ) < 1 ) {
148
- // height = imageNode.naturalHeight || imageNode.height;
149
- // }
150
- //
151
- // metadata.customWidth = metadata.width = width;
152
- // metadata.customHeight = metadata.height = height;
153
- //
154
- // classes = tinymce.explode( imageNode.className, ' ' );
155
- // extraClasses = [];
156
- //
157
- // tinymce.each( classes, function( name ) {
158
- //
159
- // if ( /^wp-image/.test( name ) ) {
160
- // metadata.attachment_id = parseInt( name.replace( 'wp-image-', '' ), 10 );
161
- // } else if ( /^align/.test( name ) ) {
162
- // metadata.align = name.replace( 'align', '' );
163
- // } else if ( /^size/.test( name ) ) {
164
- // metadata.size = name.replace( 'size-', '' );
165
- // } else {
166
- // extraClasses.push( name );
167
- // }
168
- //
169
- // } );
170
- //
171
- // metadata.extraClasses = extraClasses.join( ' ' );
172
- //
173
- // // Extract caption
174
- // captionBlock = dom.getParents( imageNode, '.wp-caption' );
175
- //
176
- // if ( captionBlock.length ) {
177
- // captionBlock = captionBlock[0];
178
- //
179
- // classes = captionBlock.className.split( ' ' );
180
- // tinymce.each( classes, function( name ) {
181
- // if ( /^align/.test( name ) ) {
182
- // metadata.align = name.replace( 'align', '' );
183
- // }
184
- // } );
185
- //
186
- // caption = dom.select( 'dd.wp-caption-dd', captionBlock );
187
- // if ( caption.length ) {
188
- // caption = caption[0];
189
- //
190
- // metadata.caption = editor.serializer.serialize( caption )
191
- // .replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );
192
- // }
193
- // }
194
- //
195
- // // Extract linkTo
196
- // if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' ) {
197
- // link = imageNode.parentNode;
198
- // metadata.linkUrl = dom.getAttrib( link, 'href' );
199
- // metadata.linkTargetBlank = dom.getAttrib( link, 'target' ) === '_blank' ? true : false;
200
- // metadata.linkRel = dom.getAttrib( link, 'rel' );
201
- // metadata.linkClassName = link.className;
202
- // }
203
- //
204
- // return metadata;
205
- // }
206
- //
207
- // function hasTextContent( node ) {
208
- // return node && !! ( node.textContent || node.innerText );
209
- // }
210
- //
211
- // function updateImage( imageNode, imageData ) {
212
- // var classes, className, node, html, parent, wrap, linkNode,
213
- // captionNode, dd, dl, id, attrs, linkAttrs, width, height,
214
- // dom = editor.dom;
215
- //
216
- // classes = tinymce.explode( imageData.extraClasses, ' ' );
217
- //
218
- // if ( ! classes ) {
219
- // classes = [];
220
- // }
221
- //
222
- // if ( ! imageData.caption ) {
223
- // classes.push( 'align' + imageData.align );
224
- // }
225
- //
226
- // if ( imageData.attachment_id ) {
227
- // classes.push( 'wp-image-' + imageData.attachment_id );
228
- // if ( imageData.size && imageData.size !== 'custom' ) {
229
- // classes.push( 'size-' + imageData.size );
230
- // }
231
- // }
232
- //
233
- // width = imageData.width;
234
- // height = imageData.height;
235
- //
236
- // if ( imageData.size === 'custom' ) {
237
- // width = imageData.customWidth;
238
- // height = imageData.customHeight;
239
- // }
240
- //
241
- // attrs = {
242
- // src: imageData.url,
243
- // width: width || null,
244
- // height: height || null,
245
- // alt: imageData.alt,
246
- // title: imageData.title || null,
247
- // 'class': classes.join( ' ' ) || null
248
- // };
249
- //
250
- // dom.setAttribs( imageNode, attrs );
251
- //
252
- // linkAttrs = {
253
- // href: imageData.linkUrl,
254
- // rel: imageData.linkRel || null,
255
- // target: imageData.linkTargetBlank ? '_blank': null,
256
- // 'class': imageData.linkClassName || null
257
- // };
258
- //
259
- // if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
260
- // // Update or remove an existing link wrapped around the image
261
- // if ( imageData.linkUrl ) {
262
- // dom.setAttribs( imageNode.parentNode, linkAttrs );
263
- // } else {
264
- // dom.remove( imageNode.parentNode, true );
265
- // }
266
- // } else if ( imageData.linkUrl ) {
267
- // if ( linkNode = dom.getParent( imageNode, 'a' ) ) {
268
- // // The image is inside a link together with other nodes,
269
- // // or is nested in another node, move it out
270
- // dom.insertAfter( imageNode, linkNode );
271
- // }
272
- //
273
- // // Add link wrapped around the image
274
- // linkNode = dom.create( 'a', linkAttrs );
275
- // imageNode.parentNode.insertBefore( linkNode, imageNode );
276
- // linkNode.appendChild( imageNode );
277
- // }
278
- //
279
- // captionNode = editor.dom.getParent( imageNode, '.mceTemp' );
280
- //
281
- // if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
282
- // node = imageNode.parentNode;
283
- // } else {
284
- // node = imageNode;
285
- // }
286
- //
287
- // if ( imageData.caption ) {
288
- //
289
- // id = imageData.attachment_id ? 'attachment_' + imageData.attachment_id : null;
290
- // className = 'wp-caption align' + ( imageData.align || 'none' );
291
- //
292
- // if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
293
- // width = parseInt( width, 10 );
294
- // width += 10;
295
- // }
296
- //
297
- // if ( captionNode ) {
298
- // dl = dom.select( 'dl.wp-caption', captionNode );
299
- //
300
- // if ( dl.length ) {
301
- // dom.setAttribs( dl, {
302
- // id: id,
303
- // 'class': className,
304
- // style: 'width: ' + width + 'px'
305
- // } );
306
- // }
307
- //
308
- // dd = dom.select( '.wp-caption-dd', captionNode );
309
- //
310
- // if ( dd.length ) {
311
- // dom.setHTML( dd[0], imageData.caption );
312
- // }
313
- //
314
- // } else {
315
- // id = id ? 'id="'+ id +'" ' : '';
316
- //
317
- // // should create a new function for generating the caption markup
318
- // html = '<dl ' + id + 'class="' + className +'" style="width: '+ width +'px">' +
319
- // '<dt class="wp-caption-dt">' + dom.getOuterHTML( node ) + '</dt><dd class="wp-caption-dd">'+ imageData.caption +'</dd></dl>';
320
- //
321
- // if ( parent = dom.getParent( node, 'p' ) ) {
322
- // wrap = dom.create( 'div', { 'class': 'mceTemp' }, html );
323
- // parent.parentNode.insertBefore( wrap, parent );
324
- // dom.remove( node );
325
- //
326
- // if ( dom.isEmpty( parent ) ) {
327
- // dom.remove( parent );
328
- // }
329
- // } else {
330
- // dom.setOuterHTML( node, '<div class="mceTemp">' + html + '</div>' );
331
- // }
332
- // }
333
- // } else if ( captionNode ) {
334
- // // Remove the caption wrapper and place the image in new paragraph
335
- // parent = dom.create( 'p' );
336
- // captionNode.parentNode.insertBefore( parent, captionNode );
337
- // parent.appendChild( node );
338
- // dom.remove( captionNode );
339
- // }
340
- //
341
- // if ( wp.media.events ) {
342
- // wp.media.events.trigger( 'editor:image-update', {
343
- // editor: editor,
344
- // metadata: imageData,
345
- // image: imageNode
346
- // } );
347
- // }
348
- //
349
- // editor.nodeChanged();
350
- // // Refresh the toolbar
351
- // addToolbar( imageNode );
352
- // }
353
-
354
- function editStore( img ) {
355
- ecwid_open_store_popup();
356
- }
357
-
358
- function removeImage( node ) {
359
- var wrap;
360
-
361
- if ( node.nodeName === 'DIV' && editor.dom.hasClass( node, 'ecwid-store-wrap' ) ) {
362
- wrap = node;
363
- } else if ( node.nodeName === 'IMG' || node.nodeName === 'DT' || node.nodeName === 'A' ) {
364
- wrap = editor.dom.getParent( node, 'div.ecwid-store-wrap' );
365
- }
366
-
367
- if ( wrap ) {
368
- if ( wrap.nextSibling ) {
369
- editor.selection.select( wrap.nextSibling );
370
- } else if ( wrap.previousSibling ) {
371
- editor.selection.select( wrap.previousSibling );
372
- } else {
373
- editor.selection.select( wrap.parentNode );
374
- }
375
-
376
- editor.selection.collapse( true );
377
- editor.nodeChanged();
378
- editor.dom.remove( wrap );
379
- } else {
380
- editor.dom.remove( node );
381
- }
382
- removeToolbar();
383
-
384
- editor.dom.remove(editor.dom.select('#ecwid-edit-store-button'));
385
- }
386
-
387
- function addToolbar( node ) {
388
- var rectangle, toolbarHtml, toolbar, left,
389
- dom = editor.dom;
390
-
391
- removeToolbar(node);
392
-
393
- // Don't add to other images
394
- if ( ! node || node.nodeName !== 'IMG' || node.className.indexOf('ecwid-store-editor') == -1 ) {
395
- return;
396
- }
397
-
398
- dom.setAttrib( node, 'data-ecwid-store-select', 1 );
399
- rectangle = dom.getRect( node );
400
-
401
- toolbarHtml = '<div class="dashicons dashicons-no-alt remove" data-mce-bogus="1"></div>';
402
-
403
- toolbar = dom.create( 'div', {
404
- 'id': 'ecwid-store-toolbar',
405
- 'data-mce-bogus': '1',
406
- 'contenteditable': false
407
- }, toolbarHtml );
408
-
409
- if ( editor.rtl ) {
410
- left = rectangle.x + rectangle.w - 82;
411
- } else {
412
- left = rectangle.x;
413
- }
414
-
415
- editor.getBody().appendChild( toolbar );
416
- dom.setStyles( toolbar, {
417
- top: rectangle.y,
418
- left: left
419
- });
420
-
421
- toolbarActive = true;
422
- }
423
-
424
- this.addToolbar = function() {
425
- addToolbar(
426
- jQuery(editor.dom.doc.body).find('.ecwid-store-editor').get(0)
427
- );
428
- }
429
-
430
- function removeToolbar(parentNode) {
431
-
432
- if (parentNode && editor.dom.getAttrib( parentNode, 'class') == 'ecwid-store-editor' ) {
433
- var toolbar = editor.dom.get( 'wp-image-toolbar' );
434
- if ( toolbar ) {
435
- editor.dom.remove( toolbar );
436
- }
437
- }
438
-
439
- var toolbar = editor.dom.get( 'ecwid-store-toolbar' );
440
- if ( toolbar ) {
441
- editor.dom.remove( toolbar );
442
- }
443
-
444
- // also remove image toolbar
445
-
446
- editor.dom.setAttrib( editor.dom.select( 'img[data-ecwid-store-select]' ), 'data-ecwid-store-select', null );
447
-
448
- toolbarActive = false;
449
- }
450
-
451
- editor.onInit.add(function(editor) {
452
-
453
- dom = editor.dom;
454
- dom.bind( editor.getDoc(), 'dragstart', function( event ) {
455
- var node = editor.selection.getNode();
456
-
457
- // Prevent dragging images out of the caption elements
458
- if ( node.nodeName === 'IMG' && dom.getParent( node, '.wp-caption' ) ) {
459
- event.preventDefault();
460
- }
461
-
462
- // Remove toolbar to avoid an orphaned toolbar when dragging an image to a new location
463
- removeToolbar();
464
- });
465
- });
466
-
467
- editor.onKeyUp.add( function( editor, event ) {
468
- var node, wrap, P, spacer,
469
- selection = editor.selection,
470
- keyCode = event.keyCode,
471
- dom = editor.dom;
472
-
473
- if ( keyCode === 46 || keyCode === 8 ) {
474
- checkEcwid();
475
- }
476
- });
477
-
478
- editor.onKeyDown.add( function( editor, event ) {
479
- var node, wrap, P, spacer,
480
- selection = editor.selection,
481
- keyCode = event.keyCode,
482
- dom = editor.dom;
483
-
484
- if ( keyCode == 27 ) {
485
- jQuery('#ecwid-store-popup-content').removeClass('open');
486
- return false;
487
- }
488
-
489
- if ( keyCode === 46 || keyCode === 8 ) {
490
- node = selection.getNode();
491
-
492
- if ( node.nodeName === 'DIV' && dom.hasClass( node, 'ecwid-store-wrap' ) ) {
493
- wrap = node;
494
- } else if ( node.nodeName === 'IMG' ) {
495
- wrap = dom.getParent( node, 'div.ecwid-store-wrap' );
496
- }
497
-
498
- if ( wrap ) {
499
- dom.events.cancel( event );
500
- removeImage( node );
501
- editor.dom.remove(editor.dom.select('#ecwid-edit-store-button'));
502
-
503
- return false;
504
- }
505
-
506
- removeToolbar();
507
- }
508
-
509
- // Key presses will replace the image so we need to remove the toolbar
510
- if ( toolbarActive ) {
511
- if ( event.ctrlKey || event.metaKey || event.altKey ||
512
- ( keyCode < 48 && keyCode > 90 ) || keyCode > 186 ) {
513
- return;
514
- }
515
-
516
- removeToolbar();
517
- editor.dom.remove(editor.dom.select('#ecwid-edit-store-button'));
518
-
519
- }
520
-
521
- });
522
-
523
- editor.onMouseDown.add( function( editor, event ) {
524
- if ( editor.dom.getParent( event.target, '#ecwid-store-toolbar' ) ) {
525
- if ( tinymce.Env.ie ) {
526
- // Stop IE > 8 from making the wrapper resizable on mousedown
527
- event.preventDefault();
528
- }
529
- } else if ( event.target.nodeName !== 'IMG' ) {
530
- removeToolbar();
531
- }
532
- });
533
-
534
- editor.onMouseUp.add( function( editor, event ) {
535
- var image,
536
- node = event.target,
537
- dom = editor.dom;
538
-
539
- // Don't trigger on right-click
540
- if ( event.button && event.button > 1 ) {
541
- return;
542
- }
543
-
544
- if ( node.nodeName === 'DIV' && dom.getParent( node, '#ecwid-store-toolbar' ) ) {
545
- image = dom.select( 'img[data-ecwid-store-select]' )[0];
546
-
547
- if ( image ) {
548
- editor.selection.select( image );
549
-
550
- if ( dom.hasClass( node, 'remove' ) ) {
551
- removeImage( image );
552
- } else if ( dom.hasClass( node, 'edit' ) ) {
553
- editStore( image );
554
- }
555
- }
556
- } else if ( node.nodeName === 'IMG' && ! editor.dom.getAttrib( node, 'data-ecwid-store-select' ) ) {
557
- addToolbar( node );
558
- } else if ( node.nodeName !== 'IMG' ) {
559
- removeToolbar();
560
- }
561
- });
562
-
563
- // Replace Read More/Next Page tags with images
564
- editor.onBeforeSetContent.add( function( editor, e ) {
565
- if ( e.content ) {
566
-
567
- found = ecwid_get_store_shortcode(e.content);
568
-
569
- if (!found) return;
570
-
571
- var content = e.content;
572
-
573
- var store = '<img height="200" width="100%" data-ecwid-shortcode="' + window.encodeURIComponent(found.content) + '" src="' + ecwid_store_svg + '" data-mce-placeholder="true" data-mce-resize="false" class="ecwid-store-editor mceItem">';
574
-
575
- e.content = e.content.substr(0, found.index) + store + e.content.substr(found.index + found.content.length);
576
- }
577
- });
578
-
579
- // Replace images with tags
580
- editor.onPostProcess.add( function( editor, e ) {
581
-
582
- if ( e.get ) {
583
-
584
- return e.content = e.content.replace( /(<img [^>]*data-ecwid-shortcode=[^>]+>)/g, function( match, image ) {
585
-
586
- var data = window.decodeURIComponent(jQuery(image).attr('data-ecwid-shortcode'));
587
-
588
- if ( data ) {
589
- return data;
590
- }
591
-
592
- return match;
593
- });
594
- }
595
- });
596
  });
1
+ /* global tinymce */
2
+ tinymce.PluginManager.add( 'ecwid', function( editor ) {
3
+ var toolbarActive = false;
4
+
5
+ // function parseShortcode( content ) {
6
+ // return content.replace( /(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function( a, b, c ) {
7
+ // var id, cls, w, cap, img, width,
8
+ // trim = tinymce.trim;
9
+ //
10
+ // id = b.match( /id=['"]([^'"]*)['"] ?/ );
11
+ // if ( id ) {
12
+ // b = b.replace( id[0], '' );
13
+ // }
14
+ //
15
+ // cls = b.match( /align=['"]([^'"]*)['"] ?/ );
16
+ // if ( cls ) {
17
+ // b = b.replace( cls[0], '' );
18
+ // }
19
+ //
20
+ // w = b.match( /width=['"]([0-9]*)['"] ?/ );
21
+ // if ( w ) {
22
+ // b = b.replace( w[0], '' );
23
+ // }
24
+ //
25
+ // c = trim( c );
26
+ // img = c.match( /((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i );
27
+ //
28
+ // if ( img && img[2] ) {
29
+ // cap = trim( img[2] );
30
+ // img = trim( img[1] );
31
+ // } else {
32
+ // // old captions shortcode style
33
+ // cap = trim( b ).replace( /caption=['"]/, '' ).replace( /['"]$/, '' );
34
+ // img = c;
35
+ // }
36
+ //
37
+ // id = ( id && id[1] ) ? id[1] : '';
38
+ // cls = ( cls && cls[1] ) ? cls[1] : 'alignnone';
39
+ //
40
+ // if ( ! w && img ) {
41
+ // w = img.match( /width=['"]([0-9]*)['"]/ );
42
+ // }
43
+ //
44
+ // if ( w && w[1] ) {
45
+ // w = w[1];
46
+ // }
47
+ //
48
+ // if ( ! w || ! cap ) {
49
+ // return c;
50
+ // }
51
+ //
52
+ // width = parseInt( w, 10 );
53
+ // if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
54
+ // width += 10;
55
+ // }
56
+ //
57
+ // return '<div class="mceTemp"><dl id="'+ id +'" class="wp-caption '+ cls +'" style="width: '+ width +'px">' +
58
+ // '<dt class="wp-caption-dt">'+ img +'</dt><dd class="wp-caption-dd">'+ cap +'</dd></dl></div>';
59
+ // });
60
+ // }
61
+ //
62
+ // function getShortcode( content ) {
63
+ // return content.replace( /<div (?:id="attachment_|class="mceTemp)[^>]*>([\s\S]+?)<\/div>/g, function( a, b ) {
64
+ // var out = '';
65
+ //
66
+ // if ( b.indexOf('<img ') === -1 ) {
67
+ // // Broken caption. The user managed to drag the image out?
68
+ // // Try to return the caption text as a paragraph.
69
+ // out = b.match( /<dd [^>]+>([\s\S]+?)<\/dd>/i );
70
+ //
71
+ // if ( out && out[1] ) {
72
+ // return '<p>' + out[1] + '</p>';
73
+ // }
74
+ //
75
+ // return '';
76
+ // }
77
+ //
78
+ // out = b.replace( /<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi, function( a, b, c, cap ) {
79
+ // var id, cls, w;
80
+ //
81
+ // w = c.match( /width="([0-9]*)"/ );
82
+ // w = ( w && w[1] ) ? w[1] : '';
83
+ //
84
+ // if ( ! w || ! cap ) {
85
+ // return c;
86
+ // }
87
+ //
88
+ // id = b.match( /id="([^"]*)"/ );
89
+ // id = ( id && id[1] ) ? id[1] : '';
90
+ //
91
+ // cls = b.match( /class="([^"]*)"/ );
92
+ // cls = ( cls && cls[1] ) ? cls[1] : '';
93
+ // cls = cls.match( /align[a-z]+/ ) || 'alignnone';
94
+ //
95
+ // cap = cap.replace( /\r\n|\r/g, '\n' ).replace( /<[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {
96
+ // // no line breaks inside HTML tags
97
+ // return a.replace( /[\r\n\t]+/, ' ' );
98
+ // });
99
+ //
100
+ // // convert remaining line breaks to <br>
101
+ // cap = cap.replace( /\s*\n\s*/g, '<br />' );
102
+ //
103
+ // return '[caption id="'+ id +'" align="'+ cls +'" width="'+ w +'"]'+ c +' '+ cap +'[/caption]';
104
+ // });
105
+ //
106
+ // if ( out.indexOf('[caption') !== 0 ) {
107
+ // // the caption html seems broken, try to find the image that may be wrapped in a link
108
+ // // and may be followed by <p> with the caption text.
109
+ // out = b.replace( /[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2' );
110
+ // }
111
+ //
112
+ // return out;
113
+ // });
114
+ // }
115
+ //
116
+ // function extractImageData( imageNode ) {
117
+ // var classes, extraClasses, metadata, captionBlock, caption, link, width, height,
118
+ // dom = editor.dom,
119
+ // isIntRegExp = /^\d+$/;
120
+ //
121
+ // // default attributes
122
+ // metadata = {
123
+ // attachment_id: false,
124
+ // size: 'custom',
125
+ // caption: '',
126
+ // align: 'none',
127
+ // extraClasses: '',
128
+ // link: false,
129
+ // linkUrl: '',
130
+ // linkClassName: '',
131
+ // linkTargetBlank: false,
132
+ // linkRel: '',
133
+ // title: ''
134
+ // };
135
+ //
136
+ // metadata.url = dom.getAttrib( imageNode, 'src' );
137
+ // metadata.alt = dom.getAttrib( imageNode, 'alt' );
138
+ // metadata.title = dom.getAttrib( imageNode, 'title' );
139
+ //
140
+ // width = dom.getAttrib( imageNode, 'width' );
141
+ // height = dom.getAttrib( imageNode, 'height' );
142
+ //
143
+ // if ( ! isIntRegExp.test( width ) || parseInt( width, 10 ) < 1 ) {
144
+ // width = imageNode.naturalWidth || imageNode.width;
145
+ // }
146
+ //
147
+ // if ( ! isIntRegExp.test( height ) || parseInt( height, 10 ) < 1 ) {
148
+ // height = imageNode.naturalHeight || imageNode.height;
149
+ // }
150
+ //
151
+ // metadata.customWidth = metadata.width = width;
152
+ // metadata.customHeight = metadata.height = height;
153
+ //
154
+ // classes = tinymce.explode( imageNode.className, ' ' );
155
+ // extraClasses = [];
156
+ //
157
+ // tinymce.each( classes, function( name ) {
158
+ //
159
+ // if ( /^wp-image/.test( name ) ) {
160
+ // metadata.attachment_id = parseInt( name.replace( 'wp-image-', '' ), 10 );
161
+ // } else if ( /^align/.test( name ) ) {
162
+ // metadata.align = name.replace( 'align', '' );
163
+ // } else if ( /^size/.test( name ) ) {
164
+ // metadata.size = name.replace( 'size-', '' );
165
+ // } else {
166
+ // extraClasses.push( name );
167
+ // }
168
+ //
169
+ // } );
170
+ //
171
+ // metadata.extraClasses = extraClasses.join( ' ' );
172
+ //
173
+ // // Extract caption
174
+ // captionBlock = dom.getParents( imageNode, '.wp-caption' );
175
+ //
176
+ // if ( captionBlock.length ) {
177
+ // captionBlock = captionBlock[0];
178
+ //
179
+ // classes = captionBlock.className.split( ' ' );
180
+ // tinymce.each( classes, function( name ) {
181
+ // if ( /^align/.test( name ) ) {
182
+ // metadata.align = name.replace( 'align', '' );
183
+ // }
184
+ // } );
185
+ //
186
+ // caption = dom.select( 'dd.wp-caption-dd', captionBlock );
187
+ // if ( caption.length ) {
188
+ // caption = caption[0];
189
+ //
190
+ // metadata.caption = editor.serializer.serialize( caption )
191
+ // .replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );
192
+ // }
193
+ // }
194
+ //
195
+ // // Extract linkTo
196
+ // if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' ) {
197
+ // link = imageNode.parentNode;
198
+ // metadata.linkUrl = dom.getAttrib( link, 'href' );
199
+ // metadata.linkTargetBlank = dom.getAttrib( link, 'target' ) === '_blank' ? true : false;
200
+ // metadata.linkRel = dom.getAttrib( link, 'rel' );
201
+ // metadata.linkClassName = link.className;
202
+ // }
203
+ //
204
+ // return metadata;
205
+ // }
206
+ //
207
+ // function hasTextContent( node ) {
208
+ // return node && !! ( node.textContent || node.innerText );
209
+ // }
210
+ //
211
+ // function updateImage( imageNode, imageData ) {
212
+ // var classes, className, node, html, parent, wrap, linkNode,
213
+ // captionNode, dd, dl, id, attrs, linkAttrs, width, height,
214
+ // dom = editor.dom;
215
+ //
216
+ // classes = tinymce.explode( imageData.extraClasses, ' ' );
217
+ //
218
+ // if ( ! classes ) {
219
+ // classes = [];
220
+ // }
221
+ //
222
+ // if ( ! imageData.caption ) {
223
+ // classes.push( 'align' + imageData.align );
224
+ // }
225
+ //
226
+ // if ( imageData.attachment_id ) {
227
+ // classes.push( 'wp-image-' + imageData.attachment_id );
228
+ // if ( imageData.size && imageData.size !== 'custom' ) {
229
+ // classes.push( 'size-' + imageData.size );
230
+ // }
231
+ // }
232
+ //
233
+ // width = imageData.width;
234
+ // height = imageData.height;
235
+ //
236
+ // if ( imageData.size === 'custom' ) {
237
+ // width = imageData.customWidth;
238
+ // height = imageData.customHeight;
239
+ // }
240
+ //
241
+ // attrs = {
242
+ // src: imageData.url,
243
+ // width: width || null,
244
+ // height: height || null,
245
+ // alt: imageData.alt,
246
+ // title: imageData.title || null,
247
+ // 'class': classes.join( ' ' ) || null
248
+ // };
249
+ //
250
+ // dom.setAttribs( imageNode, attrs );
251
+ //
252
+ // linkAttrs = {
253
+ // href: imageData.linkUrl,
254
+ // rel: imageData.linkRel || null,
255
+ // target: imageData.linkTargetBlank ? '_blank': null,
256
+ // 'class': imageData.linkClassName || null
257
+ // };
258
+ //
259
+ // if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
260
+ // // Update or remove an existing link wrapped around the image
261
+ // if ( imageData.linkUrl ) {
262
+ // dom.setAttribs( imageNode.parentNode, linkAttrs );
263
+ // } else {
264
+ // dom.remove( imageNode.parentNode, true );
265
+ // }
266
+ // } else if ( imageData.linkUrl ) {
267
+ // if ( linkNode = dom.getParent( imageNode, 'a' ) ) {
268
+ // // The image is inside a link together with other nodes,
269
+ // // or is nested in another node, move it out
270
+ // dom.insertAfter( imageNode, linkNode );
271
+ // }
272
+ //
273
+ // // Add link wrapped around the image
274
+ // linkNode = dom.create( 'a', linkAttrs );
275
+ // imageNode.parentNode.insertBefore( linkNode, imageNode );
276
+ // linkNode.appendChild( imageNode );
277
+ // }
278
+ //
279
+ // captionNode = editor.dom.getParent( imageNode, '.mceTemp' );
280
+ //
281
+ // if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
282
+ // node = imageNode.parentNode;
283
+ // } else {
284
+ // node = imageNode;
285
+ // }
286
+ //
287
+ // if ( imageData.caption ) {
288
+ //
289
+ // id = imageData.attachment_id ? 'attachment_' + imageData.attachment_id : null;
290
+ // className = 'wp-caption align' + ( imageData.align || 'none' );
291
+ //
292
+ // if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
293
+ // width = parseInt( width, 10 );
294
+ // width += 10;
295
+ // }
296
+ //
297
+ // if ( captionNode ) {
298
+ // dl = dom.select( 'dl.wp-caption', captionNode );
299
+ //
300
+ // if ( dl.length ) {
301
+ // dom.setAttribs( dl, {
302
+ // id: id,
303
+ // 'class': className,
304
+ // style: 'width: ' + width + 'px'
305
+ // } );
306
+ // }
307
+ //
308
+ // dd = dom.select( '.wp-caption-dd', captionNode );
309
+ //
310
+ // if ( dd.length ) {
311
+ // dom.setHTML( dd[0], imageData.caption );
312
+ // }
313
+ //
314
+ // } else {
315
+ // id = id ? 'id="'+ id +'" ' : '';
316
+ //
317
+ // // should create a new function for generating the caption markup
318
+ // html = '<dl ' + id + 'class="' + className +'" style="width: '+ width +'px">' +
319
+ // '<dt class="wp-caption-dt">' + dom.getOuterHTML( node ) + '</dt><dd class="wp-caption-dd">'+ imageData.caption +'</dd></dl>';
320
+ //
321
+ // if ( parent = dom.getParent( node, 'p' ) ) {
322
+ // wrap = dom.create( 'div', { 'class': 'mceTemp' }, html );
323
+ // parent.parentNode.insertBefore( wrap, parent );
324
+ // dom.remove( node );
325
+ //
326
+ // if ( dom.isEmpty( parent ) ) {
327
+ // dom.remove( parent );
328
+ // }
329
+ // } else {
330
+ // dom.setOuterHTML( node, '<div class="mceTemp">' + html + '</div>' );
331
+ // }
332
+ // }
333
+ // } else if ( captionNode ) {
334
+ // // Remove the caption wrapper and place the image in new paragraph
335
+ // parent = dom.create( 'p' );
336
+ // captionNode.parentNode.insertBefore( parent, captionNode );
337
+ // parent.appendChild( node );
338
+ // dom.remove( captionNode );
339
+ // }
340
+ //
341
+ // if ( wp.media.events ) {
342
+ // wp.media.events.trigger( 'editor:image-update', {
343
+ // editor: editor,
344
+ // metadata: imageData,
345
+ // image: imageNode
346
+ // } );
347
+ // }
348
+ //
349
+ // editor.nodeChanged();
350
+ // // Refresh the toolbar
351
+ // addToolbar( imageNode );
352
+ // }
353
+
354
+ function editStore( img ) {
355
+ ecwid_open_store_popup();
356
+ }
357
+
358
+ function removeImage( node ) {
359
+ var wrap;
360
+
361
+ if ( node.nodeName === 'DIV' && editor.dom.hasClass( node, 'ecwid-store-wrap' ) ) {
362
+ wrap = node;
363
+ } else if ( node.nodeName === 'IMG' || node.nodeName === 'DT' || node.nodeName === 'A' ) {
364
+ wrap = editor.dom.getParent( node, 'div.ecwid-store-wrap' );
365
+ }
366
+
367
+ if ( wrap ) {
368
+ if ( wrap.nextSibling ) {
369
+ editor.selection.select( wrap.nextSibling );
370
+ } else if ( wrap.previousSibling ) {
371
+ editor.selection.select( wrap.previousSibling );
372
+ } else {
373
+ editor.selection.select( wrap.parentNode );
374
+ }
375
+
376
+ editor.selection.collapse( true );
377
+ editor.nodeChanged();
378
+ editor.dom.remove( wrap );
379
+ } else {
380
+ editor.dom.remove( node );
381
+ }
382
+ removeToolbar();
383
+
384
+ editor.dom.remove(editor.dom.select('#ecwid-edit-store-button'));
385
+ }
386
+
387
+ function addToolbar( node ) {
388
+ var rectangle, toolbarHtml, toolbar, left,
389
+ dom = editor.dom;
390
+
391
+ removeToolbar(node);
392
+
393
+ // Don't add to other images
394
+ if ( ! node || node.nodeName !== 'IMG' || node.className.indexOf('ecwid-store-editor') == -1 ) {
395
+ return;
396
+ }
397
+
398
+ dom.setAttrib( node, 'data-ecwid-store-select', 1 );
399
+ rectangle = dom.getRect( node );
400
+
401
+ toolbarHtml = '<div class="dashicons dashicons-no-alt remove" data-mce-bogus="1"></div>';
402
+
403
+ toolbar = dom.create( 'div', {
404
+ 'id': 'ecwid-store-toolbar',
405
+ 'data-mce-bogus': '1',
406
+ 'contenteditable': false
407
+ }, toolbarHtml );
408
+
409
+ if ( editor.rtl ) {
410
+ left = rectangle.x + rectangle.w - 82;
411
+ } else {
412
+ left = rectangle.x;
413
+ }
414
+
415
+ editor.getBody().appendChild( toolbar );
416
+ dom.setStyles( toolbar, {
417
+ top: rectangle.y,
418
+ left: left
419
+ });
420
+
421
+ toolbarActive = true;
422
+ }
423
+
424
+ this.addToolbar = function() {
425
+ addToolbar(
426
+ jQuery(editor.dom.doc.body).find('.ecwid-store-editor').get(0)
427
+ );
428
+ }
429
+
430
+ function removeToolbar(parentNode) {
431
+
432
+ if (parentNode && editor.dom.getAttrib( parentNode, 'class') == 'ecwid-store-editor' ) {
433
+ var toolbar = editor.dom.get( 'wp-image-toolbar' );
434
+ if ( toolbar ) {
435
+ editor.dom.remove( toolbar );
436
+ }
437
+ }
438
+
439
+ var toolbar = editor.dom.get( 'ecwid-store-toolbar' );
440
+ if ( toolbar ) {
441
+ editor.dom.remove( toolbar );
442
+ }
443
+
444
+ // also remove image toolbar
445
+
446
+ editor.dom.setAttrib( editor.dom.select( 'img[data-ecwid-store-select]' ), 'data-ecwid-store-select', null );
447
+
448
+ toolbarActive = false;
449
+ }
450
+
451
+ editor.onInit.add(function(editor) {
452
+
453
+ dom = editor.dom;
454
+ dom.bind( editor.getDoc(), 'dragstart', function( event ) {
455
+ var node = editor.selection.getNode();
456
+
457
+ // Prevent dragging images out of the caption elements
458
+ if ( node.nodeName === 'IMG' && dom.getParent( node, '.wp-caption' ) ) {
459
+ event.preventDefault();
460
+ }
461
+
462
+ // Remove toolbar to avoid an orphaned toolbar when dragging an image to a new location
463
+ removeToolbar();
464
+ });
465
+ });
466
+
467
+ editor.onKeyUp.add( function( editor, event ) {
468
+ var node, wrap, P, spacer,
469
+ selection = editor.selection,
470
+ keyCode = event.keyCode,
471
+ dom = editor.dom;
472
+
473
+ if ( keyCode === 46 || keyCode === 8 ) {
474
+ checkEcwid();
475
+ }
476
+ });
477
+
478
+ editor.onKeyDown.add( function( editor, event ) {
479
+ var node, wrap, P, spacer,
480
+ selection = editor.selection,
481
+ keyCode = event.keyCode,
482
+ dom = editor.dom;
483
+
484
+ if ( keyCode == 27 ) {
485
+ jQuery('#ecwid-store-popup-content').removeClass('open');
486
+ return false;
487
+ }
488
+
489
+ if ( keyCode === 46 || keyCode === 8 ) {
490
+ node = selection.getNode();
491
+
492
+ if ( node.nodeName === 'DIV' && dom.hasClass( node, 'ecwid-store-wrap' ) ) {
493
+ wrap = node;
494
+ } else if ( node.nodeName === 'IMG' ) {
495
+ wrap = dom.getParent( node, 'div.ecwid-store-wrap' );
496
+ }
497
+
498
+ if ( wrap ) {
499
+ dom.events.cancel( event );
500
+ removeImage( node );
501
+ editor.dom.remove(editor.dom.select('#ecwid-edit-store-button'));
502
+
503
+ return false;
504
+ }
505
+
506
+ removeToolbar();
507
+ }
508
+
509
+ // Key presses will replace the image so we need to remove the toolbar
510
+ if ( toolbarActive ) {
511
+ if ( event.ctrlKey || event.metaKey || event.altKey ||
512
+ ( keyCode < 48 && keyCode > 90 ) || keyCode > 186 ) {
513
+ return;
514
+ }
515
+
516
+ removeToolbar();
517
+ editor.dom.remove(editor.dom.select('#ecwid-edit-store-button'));
518
+
519
+ }
520
+
521
+ });
522
+
523
+ editor.onMouseDown.add( function( editor, event ) {
524
+ if ( editor.dom.getParent( event.target, '#ecwid-store-toolbar' ) ) {
525
+ if ( tinymce.Env.ie ) {
526
+ // Stop IE > 8 from making the wrapper resizable on mousedown
527
+ event.preventDefault();
528
+ }
529
+ } else if ( event.target.nodeName !== 'IMG' ) {
530
+ removeToolbar();
531
+ }
532
+ });
533
+
534
+ editor.onMouseUp.add( function( editor, event ) {
535
+ var image,
536
+ node = event.target,
537
+ dom = editor.dom;
538
+
539
+ // Don't trigger on right-click
540
+ if ( event.button && event.button > 1 ) {
541
+ return;
542
+ }
543
+
544
+ if ( node.nodeName === 'DIV' && dom.getParent( node, '#ecwid-store-toolbar' ) ) {
545
+ image = dom.select( 'img[data-ecwid-store-select]' )[0];
546
+
547
+ if ( image ) {
548
+ editor.selection.select( image );
549
+
550
+ if ( dom.hasClass( node, 'remove' ) ) {
551
+ removeImage( image );
552
+ } else if ( dom.hasClass( node, 'edit' ) ) {
553
+ editStore( image );
554
+ }
555
+ }
556
+ } else if ( node.nodeName === 'IMG' && ! editor.dom.getAttrib( node, 'data-ecwid-store-select' ) ) {
557
+ addToolbar( node );
558
+ } else if ( node.nodeName !== 'IMG' ) {
559
+ removeToolbar();
560
+ }
561
+ });
562
+
563
+ // Replace Read More/Next Page tags with images
564
+ editor.onBeforeSetContent.add( function( editor, e ) {
565
+ if ( e.content ) {
566
+
567
+ found = ecwid_get_store_shortcode(e.content);
568
+
569
+ if (!found) return;
570
+
571
+ var content = e.content;
572
+
573
+ var store = '<img height="200" width="100%" data-ecwid-shortcode="' + window.encodeURIComponent(found.content) + '" src="' + ecwid_store_svg + '" data-mce-placeholder="true" data-mce-resize="false" class="ecwid-store-editor mceItem">';
574
+
575
+ e.content = e.content.substr(0, found.index) + store + e.content.substr(found.index + found.content.length);
576
+ }
577
+ });
578
+
579
+ // Replace images with tags
580
+ editor.onPostProcess.add( function( editor, e ) {
581
+
582
+ if ( e.get ) {
583
+
584
+ return e.content = e.content.replace( /(<img [^>]*data-ecwid-shortcode=[^>]+>)/g, function( match, image ) {
585
+
586
+ var data = window.decodeURIComponent(jQuery(image).attr('data-ecwid-shortcode'));
587
+
588
+ if ( data ) {
589
+ return data;
590
+ }
591
+
592
+ return match;
593
+ });
594
+ }
595
+ });
596
  });
js/store-editor-page.js CHANGED
@@ -1,352 +1,352 @@
1
- jQuery(document).ready(function() {
2
- $popup = jQuery('#ecwid-store-popup-content');
3
-
4
- /*
5
- * Media buttons handlers
6
- */
7
- jQuery('#update-ecwid-button,#insert-ecwid-button').click(ecwid_open_store_popup);
8
-
9
- /*
10
- * Close button handler
11
- */
12
- jQuery('.media-modal-close', $popup).click(function() {
13
- $popup.removeClass('open');
14
- return false;
15
- });
16
-
17
- jQuery(document).keydown(function(e) {
18
- if (e.keyCode == 27 && $popup.hasClass('open')) {
19
- $popup.removeClass('open');
20
- return false;
21
- }
22
- });
23
-
24
-
25
- /**
26
- * Builds params object from the wp.shortcode
27
- *
28
- * @param shortcode
29
- * @returns {*}
30
- */
31
- buildParams = function(shortcode) {
32
- if (!shortcode) return {};
33
-
34
- var attributes = jQuery.extend({}, shortcode.shortcode.attrs.named);
35
-
36
- if (jQuery.inArray(attributes.category_view, ['grid', 'list', 'table']) == -1) {
37
- attributes.category_view = undefined;
38
- }
39
-
40
- if (!jQuery.inArray(attributes.search_view, ['grid', 'list', 'table']) == -1) {
41
- attributes.search_view = undefined;
42
- }
43
-
44
- if (!attributes.grid || attributes.grid.match(/^\d+,\d+$/) === null) {
45
- attributes.grid = '3,3';
46
- }
47
-
48
- var grid = attributes.grid.match(/^(\d+),(\d+)/);
49
- attributes.grid_rows = grid[1];
50
- attributes.grid_columns = grid[2];
51
-
52
- for (var i in {'categories_per_row': 3, 'list': 10, 'table': 20, 'grid_rows': 3, 'grid_columns': 3, 'default_category_id': 0}) {
53
- parsed = parseInt(attributes[i]);
54
- if (isNaN(parsed) || parsed < 0) {
55
- attributes[i] = undefined;
56
- }
57
- }
58
-
59
- var widgets = attributes.widgets.split(/[^a-z^A-Z^0-9^-^_]/);
60
-
61
- return {
62
- 'show_search': jQuery.inArray('search', widgets) != -1,
63
- 'show_categories': jQuery.inArray('categories', widgets) != -1,
64
- 'show_minicart': jQuery.inArray('minicart', widgets) != -1,
65
- 'categories_per_row': attributes.categories_per_row,
66
- 'category_view': attributes.category_view,
67
- 'search_view': attributes.search_view,
68
- 'list_rows': attributes.list,
69
- 'table_rows': attributes.table,
70
- 'grid_rows': grid[1],
71
- 'grid_columns': grid[2],
72
- 'default_category_id': attributes.default_category_id,
73
- 'minicart_layout': 'attachToCategories'
74
- };
75
-
76
- }
77
-
78
-
79
- /*
80
- * Returns default parameters object
81
- */
82
- getDefaultParams = function() {
83
- return {
84
- 'show_search': false,
85
- 'show_minicart': true,
86
- 'show_categories': false,
87
- 'categories_per_row': 3,
88
- 'grid_rows': 3,
89
- 'grid_columns': 3,
90
- 'table_rows': 20,
91
- 'list_rows': 10,
92
- 'default_category_id': 0,
93
- 'category_view': 'grid',
94
- 'search_view': 'list',
95
- 'minicart_layout': 'attachToCategories'
96
- }
97
- }
98
-
99
- /*
100
- * Tests whether there is a valid store shortcode
101
- */
102
- checkEcwid = function() {
103
-
104
- var hasEcwid = false;
105
- if (tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()) {
106
- content = tinyMCE.activeEditor.getBody();
107
-
108
- hasEcwid = jQuery(content).find('.ecwid-store-editor').length > 0;
109
- } else {
110
- hasEcwid = ecwid_get_store_shortcode(jQuery('#content').val());
111
- }
112
-
113
- if (hasEcwid) {
114
- jQuery('.wp-media-buttons').addClass('has-ecwid');
115
- } else {
116
- jQuery('.wp-media-buttons').removeClass('has-ecwid');
117
- }
118
- if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
119
- var body = tinymce.activeEditor.dom.doc.body;
120
- var button = tinymce.activeEditor.dom.select('#ecwid-edit-store-button');
121
-
122
- if (hasEcwid && button.length == 0) {
123
- var button = jQuery('<input type="button" id="ecwid-edit-store-button" contenteditable="false" data-mce-bogus="true" value="' + ecwid_i18n.edit_store_appearance + '" />')
124
- .appendTo(body);
125
-
126
- button.click(ecwid_open_store_popup);
127
- } else if (!hasEcwid && button.length > 0) {
128
- tinymce.activeEditor.dom.remove(button);
129
- }
130
-
131
- if (hasEcwid) {
132
- var store = jQuery(body).find('.ecwid-store-editor');
133
- var button = jQuery('#ecwid-edit-store-button', body);
134
-
135
- var width = this.buttonWidth;
136
- if (!width) {
137
- width = button.outerWidth();
138
- this.buttonWidth = width;
139
- }
140
- button.css({
141
- 'position': 'absolute',
142
- 'top': '' + (store.offset().top + 168) + 'px',
143
- 'left': '' + (store.offset().left + store.outerWidth() / 2 - width / 2 - 2) + 'px'
144
- });
145
- }
146
-
147
- jQuery('#wp_editbtns').css('display', 'none !important');
148
- }
149
-
150
- if (window.location.search.indexOf('show-ecwid=true') != -1 && typeof this.show_ecwid_processed == 'undefined') {
151
- ecwid_open_store_popup();
152
- this.show_ecwid_processed = true;
153
-
154
- if (tinymce.activeEditor) {
155
- tinymce.activeEditor.plugins.ecwid.addToolbar();
156
- }
157
- }
158
- }
159
-
160
- setInterval(checkEcwid, 1000);
161
-
162
- jQuery('#content-tmce').click(function() {
163
- checkEcwid()
164
- });
165
- /*
166
- * Handles media modal menus
167
- */
168
- jQuery('.media-menu-item', $popup).click(function() {
169
- jQuery('.media-menu .media-menu-item', $popup).removeClass('active');
170
- jQuery(this).addClass('active');
171
-
172
- jQuery('.media-modal-content', $popup).attr('data-active-dialog', jQuery(this).attr('data-content'));
173
- jQuery('.media-menu').removeClass('visible');
174
- return false;
175
- });
176
-
177
- jQuery('h1', $popup).click(function() {
178
- jQuery('.media-menu').toggleClass('visible');
179
- })
180
-
181
- /*
182
- * Main button click
183
- */
184
- jQuery('.button-primary', $popup).click(function() {
185
-
186
- var result = {}, defaults = getDefaultParams();
187
-
188
- result.widgets = 'productbrowser';
189
- for (var i in {search:1, categories:1, minicart:1}) {
190
- if (jQuery('input[name=show_' + i + ']').prop('checked')) {
191
- result.widgets += ' ' + i;
192
- }
193
- }
194
-
195
- getNumber = function(name, fallback) {
196
- var value = parseInt(jQuery('[name=' + name + ']', $popup).val());
197
-
198
- if (isNaN(value) || value < 0) {
199
- value = fallback;
200
- }
201
-
202
- return value;
203
- }
204
-
205
- getString = function(name, values, fallback) {
206
- var value = jQuery('[name=' + name + ']', $popup).val();
207
-
208
- if (jQuery.inArray(value, values) == -1) {
209
- value = fallback;
210
- }
211
-
212
- return value;
213
- }
214
-
215
- result.categories_per_row = getNumber('categories_per_row', defaults.categories_per_row);
216
- result.grid = getNumber('grid_rows', defaults.grid_rows) + ',' + getNumber('grid_columns', defaults.grid_columns);
217
- result.list = getNumber('list_rows', defaults.list_rows);
218
- result.table = getNumber('table_rows', defaults.table_rows);
219
- result.default_category_id = getNumber('default_category_id', defaults.default_category_id);
220
- result.category_view = getString('category_view', ['list', 'grid', 'table'], defaults.category_view);
221
- result.search_view = getString('search_view', ['list', 'grid', 'table'], defaults.search_view);
222
- result.minicart_layout = 'attachToCategories';
223
-
224
-
225
- var existingShortcode = ecwid_get_store_shortcode(jQuery('#content').val());
226
- var shortcode = {};
227
- if (!existingShortcode) {
228
- shortcode.shortcode = new wp.shortcode();
229
- shortcode.shortcode.tag = 'ecwid';
230
- shortcode.shortcode.type = 'single';
231
- } else {
232
- shortcode = existingShortcode;
233
- }
234
-
235
- for (var i in result) {
236
- shortcode.shortcode.attrs.named[i] = result[i];
237
- }
238
-
239
- if (existingShortcode) {
240
- jQuery('#content').val(
241
- jQuery('#content').val().replace(existingShortcode.content, shortcode.shortcode.string())
242
- );
243
- if (tinyMCE.activeEditor) {
244
- jQuery(tinymce.activeEditor.getBody()).find('.ecwid-store-editor').attr('data-ecwid-shortcode', shortcode.shortcode.string());
245
- }
246
- } else {
247
-
248
- if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
249
- tinymce.activeEditor.execCommand('mceInsertContent', false, shortcode.shortcode.string());
250
- tinymce.activeEditor.execCommand('mceSetContent', false, tinymce.activeEditor.getBody().innerHTML);
251
- } else {
252
-
253
- getCursorPosition = function(el) {
254
- var pos = 0;
255
- if('selectionStart' in el) {
256
- pos = el.selectionStart;
257
- } else if('selection' in document) {
258
- el.focus();
259
- var Sel = document.selection.createRange();
260
- var SelLength = document.selection.createRange().text.length;
261
- Sel.moveStart('character', -el.value.length);
262
- pos = Sel.text.length - SelLength;
263
- }
264
- return pos;
265
- }
266
-
267
- var el = jQuery('#content');
268
- var cursorPosition = getCursorPosition(el.get(0));
269
-
270
- el.val(el.val().substr(0, cursorPosition) + shortcode.shortcode.string() + el.val().substr(cursorPosition));
271
-
272
- }
273
- }
274
-
275
-
276
- jQuery('#ecwid-store-popup-content').removeClass('open');
277
- });
278
-
279
- updatePreview = function() {
280
- jQuery('.store-settings input[type=checkbox]', $popup).each(function(idx, el) {
281
- var widget = jQuery(el).parent().attr('data-ecwid-widget');
282
- var preview = jQuery('.store-settings-preview svg path.' + widget, $popup);
283
- if (jQuery(el).prop('checked')) {
284
- jQuery('.store-settings-wrapper').addClass('ecwid-' + widget);
285
- } else {
286
- jQuery('.store-settings-wrapper').removeClass('ecwid-' + widget);
287
- }
288
- });
289
- }
290
-
291
- jQuery('.store-settings-wrapper label', $popup).hover(
292
- function() {
293
- jQuery('.store-settings-wrapper').attr('data-ecwid-widget-hover', jQuery(this).attr('data-ecwid-widget'));
294
- },
295
- function() {
296
- jQuery('.store-settings-wrapper').attr('data-ecwid-widget-hover', '');
297
- }
298
- );
299
-
300
- jQuery('.store-settings input[type=checkbox]', $popup).change(updatePreview);
301
- });
302
-
303
- ecwid_open_store_popup = function() {
304
-
305
- var shortcode;
306
-
307
- if (tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()) {
308
- tinyMCE.activeEditor.save();
309
-
310
- var content = jQuery(tinyMCE.activeEditor.getBody())
311
- .find('.ecwid-store-editor')
312
- .attr('data-ecwid-shortcode');
313
-
314
- var shortcode = ecwid_get_store_shortcode(window.decodeURIComponent(content));
315
- } else {
316
- shortcode = ecwid_get_store_shortcode(jQuery('#content').val());
317
- }
318
-
319
- $popup.addClass('open');
320
-
321
- params = {};
322
- jQuery.extend(params, getDefaultParams(), buildParams(shortcode));
323
-
324
- for (var i in params) {
325
- var el = jQuery('[name=' + i + ']', $popup);
326
- if (el.attr('type') == 'checkbox') {
327
- el.prop('checked', params[i]);
328
- } else {
329
- el.val(params[i]);
330
- }
331
- }
332
-
333
- // mode determines whether it is a new store or not, and active dialog is the current tab
334
- // in other words, mode = [add-store,store-settings] and active dialog is [add-store|store-settings, appearance]
335
- // buttons and menu items are for mode, current title and content are for dialog
336
- var current = !shortcode ? 'add-store' : 'store-settings';
337
- jQuery('.media-modal-content', $popup).attr('data-mode', current);
338
- jQuery('.media-modal-content', $popup).attr('data-active-dialog', current);
339
- jQuery('.media-menu-item')
340
- .removeClass('active')
341
- .filter('[data-content=' + current + ']').addClass('active');
342
-
343
-
344
- updatePreview();
345
-
346
- if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
347
- tinyMCE.activeEditor.execCommand('SelectAll');
348
- tinyMCE.activeEditor.selection.collapse(true);
349
- }
350
-
351
- return false;
352
- };
1
+ jQuery(document).ready(function() {
2
+ $popup = jQuery('#ecwid-store-popup-content');
3
+
4
+ /*
5
+ * Media buttons handlers
6
+ */
7
+ jQuery('#update-ecwid-button,#insert-ecwid-button').click(ecwid_open_store_popup);
8
+
9
+ /*
10
+ * Close button handler
11
+ */
12
+ jQuery('.media-modal-close', $popup).click(function() {
13
+ $popup.removeClass('open');
14
+ return false;
15
+ });
16
+
17
+ jQuery(document).keydown(function(e) {
18
+ if (e.keyCode == 27 && $popup.hasClass('open')) {
19
+ $popup.removeClass('open');
20
+ return false;
21
+ }
22
+ });
23
+
24
+
25
+ /**
26
+ * Builds params object from the wp.shortcode
27
+ *
28
+ * @param shortcode
29
+ * @returns {*}
30
+ */
31
+ buildParams = function(shortcode) {
32
+ if (!shortcode) return {};
33
+
34
+ var attributes = jQuery.extend({}, shortcode.shortcode.attrs.named);
35
+
36
+ if (jQuery.inArray(attributes.category_view, ['grid', 'list', 'table']) == -1) {
37
+ attributes.category_view = undefined;
38
+ }
39
+
40
+ if (!jQuery.inArray(attributes.search_view, ['grid', 'list', 'table']) == -1) {
41
+ attributes.search_view = undefined;
42
+ }
43
+
44
+ if (!attributes.grid || attributes.grid.match(/^\d+,\d+$/) === null) {
45
+ attributes.grid = '3,3';
46
+ }
47
+
48
+ var grid = attributes.grid.match(/^(\d+),(\d+)/);
49
+ attributes.grid_rows = grid[1];
50
+ attributes.grid_columns = grid[2];
51
+
52
+ for (var i in {'categories_per_row': 3, 'list': 10, 'table': 20, 'grid_rows': 3, 'grid_columns': 3, 'default_category_id': 0}) {
53
+ parsed = parseInt(attributes[i]);
54
+ if (isNaN(parsed) || parsed < 0) {
55
+ attributes[i] = undefined;
56
+ }
57
+ }
58
+
59
+ var widgets = attributes.widgets.split(/[^a-z^A-Z^0-9^-^_]/);
60
+
61
+ return {
62
+ 'show_search': jQuery.inArray('search', widgets) != -1,
63
+ 'show_categories': jQuery.inArray('categories', widgets) != -1,
64
+ 'show_minicart': jQuery.inArray('minicart', widgets) != -1,
65
+ 'categories_per_row': attributes.categories_per_row,
66
+ 'category_view': attributes.category_view,
67
+ 'search_view': attributes.search_view,
68
+ 'list_rows': attributes.list,
69
+ 'table_rows': attributes.table,
70
+ 'grid_rows': grid[1],
71
+ 'grid_columns': grid[2],
72
+ 'default_category_id': attributes.default_category_id,
73
+ 'minicart_layout': 'attachToCategories'
74
+ };
75
+
76
+ }
77
+
78
+
79
+ /*
80
+ * Returns default parameters object
81
+ */
82
+ getDefaultParams = function() {
83
+ return {
84
+ 'show_search': false,
85
+ 'show_minicart': true,
86
+ 'show_categories': false,
87
+ 'categories_per_row': 3,
88
+ 'grid_rows': 3,
89
+ 'grid_columns': 3,
90
+ 'table_rows': 20,
91
+ 'list_rows': 10,
92
+ 'default_category_id': 0,
93
+ 'category_view': 'grid',
94
+ 'search_view': 'list',
95
+ 'minicart_layout': 'attachToCategories'
96
+ }
97
+ }
98
+
99
+ /*
100
+ * Tests whether there is a valid store shortcode
101
+ */
102
+ checkEcwid = function() {
103
+
104
+ var hasEcwid = false;
105
+ if (tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()) {
106
+ content = tinyMCE.activeEditor.getBody();
107
+
108
+ hasEcwid = jQuery(content).find('.ecwid-store-editor').length > 0;
109
+ } else {
110
+ hasEcwid = ecwid_get_store_shortcode(jQuery('#content').val());
111
+ }
112
+
113
+ if (hasEcwid) {
114
+ jQuery('.wp-media-buttons').addClass('has-ecwid');
115
+ } else {
116
+ jQuery('.wp-media-buttons').removeClass('has-ecwid');
117
+ }
118
+ if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
119
+ var body = tinymce.activeEditor.dom.doc.body;
120
+ var button = tinymce.activeEditor.dom.select('#ecwid-edit-store-button');
121
+
122
+ if (hasEcwid && button.length == 0) {
123
+ var button = jQuery('<input type="button" id="ecwid-edit-store-button" contenteditable="false" data-mce-bogus="true" value="' + ecwid_i18n.edit_store_appearance + '" />')
124
+ .appendTo(body);
125
+
126
+ button.click(ecwid_open_store_popup);
127
+ } else if (!hasEcwid && button.length > 0) {
128
+ tinymce.activeEditor.dom.remove(button);
129
+ }
130
+
131
+ if (hasEcwid) {
132
+ var store = jQuery(body).find('.ecwid-store-editor');
133
+ var button = jQuery('#ecwid-edit-store-button', body);
134
+
135
+ var width = this.buttonWidth;
136
+ if (!width) {
137
+ width = button.outerWidth();
138
+ this.buttonWidth = width;
139
+ }
140
+ button.css({
141
+ 'position': 'absolute',
142
+ 'top': '' + (store.offset().top + 168) + 'px',
143
+ 'left': '' + (store.offset().left + store.outerWidth() / 2 - width / 2 - 2) + 'px'
144
+ });
145
+ }
146
+
147
+ jQuery('#wp_editbtns').css('display', 'none !important');
148
+ }
149
+
150
+ if (window.location.search.indexOf('show-ecwid=true') != -1 && typeof this.show_ecwid_processed == 'undefined') {
151
+ ecwid_open_store_popup();
152
+ this.show_ecwid_processed = true;
153
+
154
+ if (tinymce.activeEditor) {
155
+ tinymce.activeEditor.plugins.ecwid.addToolbar();
156
+ }
157
+ }
158
+ }
159
+
160
+ setInterval(checkEcwid, 1000);
161
+
162
+ jQuery('#content-tmce').click(function() {
163
+ checkEcwid()
164
+ });
165
+ /*
166
+ * Handles media modal menus
167
+ */
168
+ jQuery('.media-menu-item', $popup).click(function() {
169
+ jQuery('.media-menu .media-menu-item', $popup).removeClass('active');
170
+ jQuery(this).addClass('active');
171
+
172
+ jQuery('.media-modal-content', $popup).attr('data-active-dialog', jQuery(this).attr('data-content'));
173
+ jQuery('.media-menu').removeClass('visible');
174
+ return false;
175
+ });
176
+
177
+ jQuery('h1', $popup).click(function() {
178
+ jQuery('.media-menu').toggleClass('visible');
179
+ })
180
+
181
+ /*
182
+ * Main button click
183
+ */
184
+ jQuery('.button-primary', $popup).click(function() {
185
+
186
+ var result = {}, defaults = getDefaultParams();
187
+
188
+ result.widgets = 'productbrowser';
189
+ for (var i in {search:1, categories:1, minicart:1}) {
190
+ if (jQuery('input[name=show_' + i + ']').prop('checked')) {
191
+ result.widgets += ' ' + i;
192
+ }
193
+ }
194
+
195
+ getNumber = function(name, fallback) {
196
+ var value = parseInt(jQuery('[name=' + name + ']', $popup).val());
197
+
198
+ if (isNaN(value) || value < 0) {
199
+ value = fallback;
200
+ }
201
+
202
+ return value;
203
+ }
204
+
205
+ getString = function(name, values, fallback) {
206
+ var value = jQuery('[name=' + name + ']', $popup).val();
207
+
208
+ if (jQuery.inArray(value, values) == -1) {
209
+ value = fallback;
210
+ }
211
+
212
+ return value;
213
+ }
214
+
215
+ result.categories_per_row = getNumber('categories_per_row', defaults.categories_per_row);
216
+ result.grid = getNumber('grid_rows', defaults.grid_rows) + ',' + getNumber('grid_columns', defaults.grid_columns);
217
+ result.list = getNumber('list_rows', defaults.list_rows);
218
+ result.table = getNumber('table_rows', defaults.table_rows);
219
+ result.default_category_id = getNumber('default_category_id', defaults.default_category_id);
220
+ result.category_view = getString('category_view', ['list', 'grid', 'table'], defaults.category_view);
221
+ result.search_view = getString('search_view', ['list', 'grid', 'table'], defaults.search_view);
222
+ result.minicart_layout = 'attachToCategories';
223
+
224
+
225
+ var existingShortcode = ecwid_get_store_shortcode(jQuery('#content').val());
226
+ var shortcode = {};
227
+ if (!existingShortcode) {
228
+ shortcode.shortcode = new wp.shortcode();
229
+ shortcode.shortcode.tag = 'ecwid';
230
+ shortcode.shortcode.type = 'single';
231
+ } else {
232
+ shortcode = existingShortcode;
233
+ }
234
+
235
+ for (var i in result) {
236
+ shortcode.shortcode.attrs.named[i] = result[i];
237
+ }
238
+
239
+ if (existingShortcode) {
240
+ jQuery('#content').val(
241
+ jQuery('#content').val().replace(existingShortcode.content, shortcode.shortcode.string())
242
+ );
243
+ if (tinyMCE.activeEditor) {
244
+ jQuery(tinymce.activeEditor.getBody()).find('.ecwid-store-editor').attr('data-ecwid-shortcode', shortcode.shortcode.string());
245
+ }
246
+ } else {
247
+
248
+ if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
249
+ tinymce.activeEditor.execCommand('mceInsertContent', false, shortcode.shortcode.string());
250
+ tinymce.activeEditor.execCommand('mceSetContent', false, tinymce.activeEditor.getBody().innerHTML);
251
+ } else {
252
+
253
+ getCursorPosition = function(el) {
254
+ var pos = 0;
255
+ if('selectionStart' in el) {
256
+ pos = el.selectionStart;
257
+ } else if('selection' in document) {
258
+ el.focus();
259
+ var Sel = document.selection.createRange();
260
+ var SelLength = document.selection.createRange().text.length;
261
+ Sel.moveStart('character', -el.value.length);
262
+ pos = Sel.text.length - SelLength;
263
+ }
264
+ return pos;
265
+ }
266
+
267
+ var el = jQuery('#content');
268
+ var cursorPosition = getCursorPosition(el.get(0));
269
+
270
+ el.val(el.val().substr(0, cursorPosition) + shortcode.shortcode.string() + el.val().substr(cursorPosition));
271
+
272
+ }
273
+ }
274
+
275
+
276
+ jQuery('#ecwid-store-popup-content').removeClass('open');
277
+ });
278
+
279
+ updatePreview = function() {
280
+ jQuery('.store-settings input[type=checkbox]', $popup).each(function(idx, el) {
281
+ var widget = jQuery(el).parent().attr('data-ecwid-widget');
282
+ var preview = jQuery('.store-settings-preview svg path.' + widget, $popup);
283
+ if (jQuery(el).prop('checked')) {
284
+ jQuery('.store-settings-wrapper').addClass('ecwid-' + widget);
285
+ } else {
286
+ jQuery('.store-settings-wrapper').removeClass('ecwid-' + widget);
287
+ }
288
+ });
289
+ }
290
+
291
+ jQuery('.store-settings-wrapper label', $popup).hover(
292
+ function() {
293
+ jQuery('.store-settings-wrapper').attr('data-ecwid-widget-hover', jQuery(this).attr('data-ecwid-widget'));
294
+ },
295
+ function() {
296
+ jQuery('.store-settings-wrapper').attr('data-ecwid-widget-hover', '');
297
+ }
298
+ );
299
+
300
+ jQuery('.store-settings input[type=checkbox]', $popup).change(updatePreview);
301
+ });
302
+
303
+ ecwid_open_store_popup = function() {
304
+
305
+ var shortcode;
306
+
307
+ if (tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()) {
308
+ tinyMCE.activeEditor.save();
309
+
310
+ var content = jQuery(tinyMCE.activeEditor.getBody())
311
+ .find('.ecwid-store-editor')
312
+ .attr('data-ecwid-shortcode');
313
+
314
+ var shortcode = ecwid_get_store_shortcode(window.decodeURIComponent(content));
315
+ } else {
316
+ shortcode = ecwid_get_store_shortcode(jQuery('#content').val());
317
+ }
318
+
319
+ $popup.addClass('open');
320
+
321
+ params = {};
322
+ jQuery.extend(params, getDefaultParams(), buildParams(shortcode));
323
+
324
+ for (var i in params) {
325
+ var el = jQuery('[name=' + i + ']', $popup);
326
+ if (el.attr('type') == 'checkbox') {
327
+ el.prop('checked', params[i]);
328
+ } else {
329
+ el.val(params[i]);
330
+ }
331
+ }
332
+
333
+ // mode determines whether it is a new store or not, and active dialog is the current tab
334
+ // in other words, mode = [add-store,store-settings] and active dialog is [add-store|store-settings, appearance]
335
+ // buttons and menu items are for mode, current title and content are for dialog
336
+ var current = !shortcode ? 'add-store' : 'store-settings';
337
+ jQuery('.media-modal-content', $popup).attr('data-mode', current);
338
+ jQuery('.media-modal-content', $popup).attr('data-active-dialog', current);
339
+ jQuery('.media-menu-item')
340
+ .removeClass('active')
341
+ .filter('[data-content=' + current + ']').addClass('active');
342
+
343
+
344
+ updatePreview();
345
+
346
+ if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
347
+ tinyMCE.activeEditor.execCommand('SelectAll');
348
+ tinyMCE.activeEditor.selection.collapse(true);
349
+ }
350
+
351
+ return false;
352
+ };
js/themes/2012.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ Ecwid.OnPageLoaded.add(function() {
2
+ document.activeElement.blur();
3
+ jQuery('.nav-menu,.nav-menu *.focus').removeClass('focus');
4
+ });
js/themes/customizr.js CHANGED
@@ -1,11 +1,11 @@
1
- jQuery(document).ready(function() {
2
-
3
- var fixedNav = jQuery('header.tc-header'),
4
- ecwid_pb_scroller = jQuery('#ecwid_product_browser_scroller');
5
-
6
- ecwid_pb_scroller.css('top', (- fixedNav.height()) + 'px');
7
-
8
- jQuery(window).scroll(function() {
9
- ecwid_pb_scroller.css('top', (- fixedNav.height()) + 'px');
10
- });
11
  });
1
+ jQuery(document).ready(function() {
2
+
3
+ var fixedNav = jQuery('header.tc-header'),
4
+ ecwid_pb_scroller = jQuery('#ecwid_product_browser_scroller');
5
+
6
+ ecwid_pb_scroller.css('top', (- fixedNav.height()) + 'px');
7
+
8
+ jQuery(window).scroll(function() {
9
+ ecwid_pb_scroller.css('top', (- fixedNav.height()) + 'px');
10
+ });
11
  });
js/themes/pagelines.js CHANGED
@@ -1,9 +1,9 @@
1
- jQuery(document).ready(function() {
2
- var fixedNav = jQuery('#navbar');
3
- if (fixedNav.css('position') == 'fixed') {
4
- jQuery('#ecwid_product_browser_scroller').css({
5
- 'position': 'relative',
6
- 'top': -fixedNav.height()
7
- });
8
- }
9
  });
1
+ jQuery(document).ready(function() {
2
+ var fixedNav = jQuery('#navbar');
3
+ if (fixedNav.css('position') == 'fixed') {
4
+ jQuery('#ecwid_product_browser_scroller').css({
5
+ 'position': 'relative',
6
+ 'top': -fixedNav.height()
7
+ });
8
+ }
9
  });
js/themes/responsive.js CHANGED
@@ -1,88 +1,88 @@
1
- (function($) {
2
-
3
- function doDefaultLayout()
4
- {
5
- $('.ecwid-shopping-cart-search .ecwid-SearchPanel-button').text('');
6
-
7
- $('.ecwid-minicart-mini-rolloverContainer').show();
8
- $('.ecwid-shopping-cart-minicart')
9
- .css({
10
- 'top': '2px'
11
- })
12
- .show();
13
-
14
- var topElement = $('.ecwid-shopping-cart-categories');
15
- if (topElement.length == 0) {
16
- topElement = $('.ecwid-shopping-cart-product-browser')
17
- }
18
- if (topElement.length > 0) {
19
- $('.ecwid-productBrowser-auth-mini').css({
20
- 'position': 'absolute',
21
- 'top': topElement.prop('offsetTop') - 50
22
- });
23
-
24
- $('.ecwid-shopping-cart-search').css({
25
- 'position': 'absolute',
26
- 'top': topElement.prop('offsetTop') - 50 + 8
27
- });
28
-
29
- if (navigator.userAgent.match(/firefox/i)) {
30
- $('.ecwid-SearchPanel-button').css('right', '3px');
31
- }
32
- }
33
-
34
- $('.ecwid-shopping-cart-minicart').css(
35
- 'margin-right', $('.ecwid-minicart-mini-rolloverContainer').width() - $('.ecwid-shopping-cart-minicart').width()
36
- );
37
-
38
- if ($('.ecwid-search-placeholder').length == 0) {
39
- $('.ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel').after('<div class="ecwid-search-placeholder"></div>');
40
- }
41
-
42
- $('.ecwid-search-placeholder').click(function() {
43
- $('body').addClass('ecwid-search-open');
44
- $('.ecwid-shopping-cart-search .ecwid-SearchPanel-field').focus();
45
- });
46
- }
47
-
48
- $('body').click(function(e) {
49
- if ($('.ecwid-shopping-cart-search').has(e.target).length == 0) {
50
- $(this).removeClass('ecwid-search-open');
51
- }
52
- });
53
-
54
- function doMobileLayout()
55
- {
56
- $('.ecwid-minicart-mini-rolloverContainer').hide();
57
- $('.ecwid-shopping-cart-minicart').hide();
58
- $('.ecwid-productBrowser-auth-mini').css({
59
- 'position': 'inherit',
60
- 'top': 'auto'
61
- });
62
- $('.ecwid-shopping-cart-search').css({
63
- 'position': 'absolute',
64
- 'top': $('.ecwid-productBrowser').prop('offsetTop') - 50 + 8
65
- });
66
- }
67
- if (typeof Ecwid != 'undefined') {
68
- Ecwid.OnPageLoaded.add(function(args) {
69
- if ($(window).width() < 650) {
70
- doMobileLayout();
71
- } else {
72
- doDefaultLayout();
73
- }
74
- });
75
- }
76
-
77
- $(window).resize(function() {
78
- if ($(window).width() < 650) {
79
- doMobileLayout();
80
- } else {
81
- doDefaultLayout();
82
- }
83
- });
84
-
85
- })(jQuery);
86
- /*});*/
87
-
88
-
1
+ (function($) {
2
+
3
+ function doDefaultLayout()
4
+ {
5
+ $('.ecwid-shopping-cart-search .ecwid-SearchPanel-button').text('');
6
+
7
+ $('.ecwid-minicart-mini-rolloverContainer').show();
8
+ $('.ecwid-shopping-cart-minicart')
9
+ .css({
10
+ 'top': '2px'
11
+ })
12
+ .show();
13
+
14
+ var topElement = $('.ecwid-shopping-cart-categories');
15
+ if (topElement.length == 0) {
16
+ topElement = $('.ecwid-shopping-cart-product-browser')
17
+ }
18
+ if (topElement.length > 0) {
19
+ $('.ecwid-productBrowser-auth-mini').css({
20
+ 'position': 'absolute',
21
+ 'top': topElement.prop('offsetTop') - 50
22
+ });
23
+
24
+ $('.ecwid-shopping-cart-search').css({
25
+ 'position': 'absolute',
26
+ 'top': topElement.prop('offsetTop') - 50 + 8
27
+ });
28
+
29
+ if (navigator.userAgent.match(/firefox/i)) {
30
+ $('.ecwid-SearchPanel-button').css('right', '3px');
31
+ }
32
+ }
33
+
34
+ $('.ecwid-shopping-cart-minicart').css(
35
+ 'margin-right', $('.ecwid-minicart-mini-rolloverContainer').width() - $('.ecwid-shopping-cart-minicart').width()
36
+ );
37
+
38
+ if ($('.ecwid-search-placeholder').length == 0) {
39
+ $('.ecwid-shopping-cart .ecwid-shopping-cart-search .ecwid-SearchPanel').after('<div class="ecwid-search-placeholder"></div>');
40
+ }
41
+
42
+ $('.ecwid-search-placeholder').click(function() {
43
+ $('body').addClass('ecwid-search-open');
44
+ $('.ecwid-shopping-cart-search .ecwid-SearchPanel-field').focus();
45
+ });
46
+ }
47
+
48
+ $('body').click(function(e) {
49
+ if ($('.ecwid-shopping-cart-search').has(e.target).length == 0) {
50
+ $(this).removeClass('ecwid-search-open');
51
+ }
52
+ });
53
+
54
+ function doMobileLayout()
55
+ {
56
+ $('.ecwid-minicart-mini-rolloverContainer').hide();
57
+ $('.ecwid-shopping-cart-minicart').hide();
58
+ $('.ecwid-productBrowser-auth-mini').css({
59
+ 'position': 'inherit',
60
+ 'top': 'auto'
61
+ });
62
+ $('.ecwid-shopping-cart-search').css({
63
+ 'position': 'absolute',
64
+ 'top': $('.ecwid-productBrowser').prop('offsetTop') - 50 + 8
65
+ });
66
+ }
67
+ if (typeof Ecwid != 'undefined') {
68
+ Ecwid.OnPageLoaded.add(function(args) {
69
+ if ($(window).width() < 650) {
70
+ doMobileLayout();
71
+ } else {
72
+ doDefaultLayout();
73
+ }
74
+ });
75
+ }
76
+
77
+ $(window).resize(function() {
78
+ if ($(window).width() < 650) {
79
+ doMobileLayout();
80
+ } else {
81
+ doDefaultLayout();
82
+ }
83
+ });
84
+
85
+ })(jQuery);
86
+ /*});*/
87
+
88
+
languages/ecwid-shopping-cart-es_ES.po CHANGED
@@ -1,261 +1,261 @@
1
-
2
- msgid "Ecwid Shopping Cart"
3
- msgstr ""
4
-
5
- msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
6
- msgstr ""
7
-
8
- msgid "Ecwid Team"
9
- msgstr ""
10
-
11
- msgid "Get help"
12
- msgstr "Obtener ayuda"
13
-
14
- msgid "Go to Ecwid site"
15
- msgstr "Ir al sitio Ecwid"
16
-
17
- msgid "Visit storefront"
18
- msgstr "Visitar escaparate"
19
-
20
- msgid "Manage my store"
21
- msgstr "Gestionar mi tienda"
22
-
23
- msgid "Manage plugin settings"
24
- msgstr "Administrar la configuración de conexión"
25
-
26
- msgid "→ Sell on Facebook"
27
- msgstr "→ Vender en Facebook"
28
-
29
- msgid "Online store powered by <a %s>Ecwid</a>"
30
- msgstr ""
31
-
32
- msgid "Store"
33
- msgstr "Tienda"
34
-
35
- msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a target=\"_blank\" href=\"%s\">the created page</a> to see your store with demo products. In order to finish the installation, please go to the <a href=\"admin.php?page=ecwid\"><strong>Ecwid settings</strong></a> and configure the plugin."
36
- msgstr "<strong>Ecwid la tarjeta de compras Ecwid está casi lista </strong>. Por favor visite <a target=\"_blank\" href=\"%s\">la página creada </a> para ver su tienda con productos de demostración. Para finalizar la instalación, por favor vaya a <a href=\"admin.php?page=ecwid\"><strong>ajustes Ecwid</strong></a> y configure la conexión."
37
-
38
- msgid "Do you like your Ecwid online store? We'd appreciate it if you <a %s>add your review and vote</a> for the plugin on Wordpress site. (<a id=\"hide-vote-message\">Close</a> and do not show this message anymore)"
39
- msgstr ""
40
-
41
- msgid "Ecwid shopping cart settings"
42
- msgstr ""
43
-
44
- msgid "Ecwid Store"
45
- msgstr "Tienda Ecwid"
46
-
47
- msgid "General settings"
48
- msgstr "Configuración general"
49
-
50
- msgid "General"
51
- msgstr "General"
52
-
53
- msgid "Appearance settings"
54
- msgstr "Opciones de aspecto"
55
-
56
- msgid "Appearance"
57
- msgstr "Aspecto"
58
-
59
- msgid "Advanced settings"
60
- msgstr "Opciones avanzadas"
61
-
62
- msgid "Advanced"
63
- msgstr "Avanzadas"
64
-
65
- msgid "Setup"
66
- msgstr ""
67
-
68
- msgid "Your store's minicart"
69
- msgstr "Mini carro de su tienda"
70
-
71
- msgid "Ecwid Shopping Bag (Normal)"
72
- msgstr "Bolsa de compras Ecwid (Normal)"
73
-
74
- msgid "Ecwid Shopping Bag (Mini view)"
75
- msgstr "Bolsa de compras Ecwid (Mini vista)"
76
-
77
- msgid "Your store's search box"
78
- msgstr "Caja de búsqueda de tu tienda"
79
-
80
- msgid "Ecwid Search Box"
81
- msgstr "Caja de búsqueda Ecwid"
82
-
83
- msgid "Vertical menu of categories"
84
- msgstr "Menú vertical de categorías"
85
-
86
- msgid "Ecwid Vertical Categories"
87
- msgstr "Categorías verticales Ecwid"
88
-
89
- msgid "Price"
90
- msgstr ""
91
-
92
- msgid "Ecwid Shopping Cart — Advanced settings"
93
- msgstr "Carro de compras Ecwid — Opciones avanzadas"
94
-
95
- msgid "Category shown by default"
96
- msgstr "Categoría mostrada por defecto"
97
-
98
- msgid "Store root category"
99
- msgstr "Categoría raíz de la tienda"
100
-
101
- msgid "Default category ID"
102
- msgstr "Identificación de categoría estandar"
103
-
104
- msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
105
- msgstr "Por defecto, la entrada principal muestra una lista de categorías de raíz. Puede anular este comportamiento y mostrar una categoría diferente cuando los clientes abren su tienda por primera vez. Es útil si usted tiene una sola categoría o quiere mostrar un conjunto específico de elementos (por ejemplo, \"productos destacados\") para todos los nuevos visitantes."
106
-
107
- msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
108
- msgstr "Para fijar esta opción, <a %s> encuentre una identificación de la categoría necesaria </a> y guárdela aquí."
109
-
110
- msgid "Single Sign-On Secret Key"
111
- msgstr "Clave única secreta de registro"
112
-
113
- msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
114
- msgstr "Esta característica opcional le permite activar la inscripción única: cuando los clientes han iniciado sesión en su página, también inician sesión automáticamente en su tienda Ecwid, incluso si antes no tenían una cuenta en la tienda. Tiene sentido activar esta característica, si sus visitantes en efecto crean cuentas en su página WordPress."
115
-
116
- msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
117
- msgstr "Para activar esta característica usted debería enviar una clave secreta. Encontrará esta clave en su panel de control Ecwid, en la página \"Configurac​ión del sistema > API > Single Sign-on API\" . Esta característica está disponible sólo para <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">utilizadores de pago</a>."
118
-
119
- msgid "Save changes"
120
- msgstr "Guardar los cambios"
121
-
122
- msgid "Ecwid Shopping Cart — Appearance settings"
123
- msgstr "Tarjeta de Compras Ecwid — Ajustes de apariencia"
124
-
125
- msgid "Display search box above products"
126
- msgstr "Mostrar caja de búsqueda de productos de arriba"
127
-
128
- msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
129
- msgstr "O puede añadir una caja de búsqueda a la barra de herramientas de su página web utilizando <a href=\"%s\">WordPress native widgets</a>"
130
-
131
- msgid "Display horizontal categories above products"
132
- msgstr "Mostrar categorías horizontales sobre los productos"
133
-
134
- msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
135
- msgstr "O puede añadir categorías verticales a la barra de herramientas de su página utilizando <a href=\"%s\">WordPress native widgets</a>"
136
-
137
- msgid "Enable minicart attached to horizontal categories"
138
- msgstr "Active minicarrito unido a las categorías horizontales "
139
-
140
- msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
141
- msgstr "Debería desabilitar esta opción, si añade un minicarro a su página web&nbsp;barra lateral"
142
-
143
- msgid "Number of categories per row"
144
- msgstr "Número de categorías por fila"
145
-
146
- msgid "Number of products per page"
147
- msgstr "Número dde productos por página"
148
-
149
- msgid "Grid view"
150
- msgstr "Vista de cuadro"
151
-
152
- msgid "List view"
153
- msgstr "Vista de lista"
154
-
155
- msgid "Table view"
156
- msgstr "Vista de tabla"
157
-
158
- msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
159
- msgstr "Aquí usted puede controlar cuantos productos serán mostrados por página. Estas opciones definen valores maximos. Si no hay suficiente espacio para mostrar todas las cdolumnas de produtos, Ecwid adaptará el número de columnas para contener todos los productos."
160
-
161
- msgid "Default view mode on product pages"
162
- msgstr "Vista del modo predefinido en páginas de productos"
163
-
164
- msgid "Grid"
165
- msgstr "Cuadro"
166
-
167
- msgid "List"
168
- msgstr "Lista"
169
-
170
- msgid "Table"
171
- msgstr "Tabla"
172
-
173
- msgid "Default view mode on search results"
174
- msgstr "Vista del modo predefinido en búsqueda de resultados"
175
-
176
- msgid "Store powered by Ecwid"
177
- msgstr ""
178
-
179
- msgid "Ecwid Shopping Cart — General settings"
180
- msgstr "Carro de Compras Ecwid — Configuración general"
181
-
182
- msgid "Thank you for choosing Ecwid to build your online store"
183
- msgstr "Gracias por elegir Ecwid para cosntruir su tienda online"
184
-
185
- msgid "The first step towards opening your online business: <br />Let’s get started and add a store to your WordPress website in <strong>3</strong> simple steps."
186
- msgstr "El primer paso para abrir su negocio online: <br /> Vamos a empezar y añadir una tienda a su página web WordPress en <strong>3</strong> simples pasos."
187
-
188
- msgid "Register at Ecwid"
189
- msgstr "Registrarse en Ecwid"
190
-
191
- msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
192
- msgstr "Crear una nueva cuenta Ecwid que utilizará para gestionar su tienda e inventario. El registro es gratuíto."
193
-
194
- msgid "Create new Ecwid account"
195
- msgstr "Crear una nueva cuenta Ecwid"
196
-
197
- msgid "I already have Ecwid account, sign in"
198
- msgstr "Ya tengo una cuenta Ecwid, registrar"
199
-
200
- msgid "You will be able to sign up through your existing Google, Facebook or PayPal profiles as well."
201
- msgstr "Será además capaz de inscribirse a través de su perfil Google, Facebook o PayPal."
202
-
203
- msgid "Find your Store ID"
204
- msgstr "Encuentre la Identificación de su tienda"
205
-
206
- msgid "Store ID is a unique identifier of any Ecwid store, it consists of several digits. You can find it on the \"Dashboard\" page of Ecwid control panel. Also the Store ID will be sent in the Welcome email after the registration."
207
- msgstr "El Identificador de su tienda es un Identificador único de cualquier tienda Ecwid, consiste en varios dígitos. Puede encontrarlo en la página \"Dashboard\" del panel de control Ecwid. Además la Identificación de la Tienda le será enviada en el e-mail de bienvenida después del registro."
208
-
209
- msgid "Enter your Store ID"
210
- msgstr "Introduzca la Identificación de su tienda "
211
-
212
- msgid "Enter your Store ID here:"
213
- msgstr "Introduzca la Identificación de su tienda aquí:"
214
-
215
- msgid "Store ID"
216
- msgstr "Identificación de tienda"
217
-
218
- msgid "Save and connect your Ecwid store to the site"
219
- msgstr "Guarde y conecte su tienda Ecwid al site"
220
-
221
- msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
222
- msgstr "Preguntas? Visite <a href=\"http://help.ecwid.com/?source=wporg\">el centro de ayuda Ecwid</a>"
223
-
224
- msgid "Congratulations!"
225
- msgstr "Enhorabuena!"
226
-
227
- msgid "Your Ecwid store is now connected to your WordPress website"
228
- msgstr "Su tienda Ecwid está conectada a su página web WordPress"
229
-
230
- msgid "Greetings!"
231
- msgstr "Saludos!"
232
-
233
- msgid "Your Ecwid store is connected to your WordPress website"
234
- msgstr "Su tienda Ecwid está conectadaa su página web WordPress"
235
-
236
- msgid "Control panel"
237
- msgstr "Panel de control"
238
-
239
- msgid "Account status"
240
- msgstr "Estado de cuenta"
241
-
242
- msgid "Paid"
243
- msgstr "Pagado"
244
-
245
- msgid "Free"
246
- msgstr "Gratis"
247
-
248
- msgid "Thank you for supporting Ecwid!"
249
- msgstr "Gracias por apoyar a Ecwid!"
250
-
251
- msgid "Upgrade to get access to cool premium features."
252
- msgstr "Actualice para obtener acceso a interesantes funciones avanzadas."
253
-
254
- msgid "Billing and plans"
255
- msgstr ""
256
-
257
- msgid "Upgrade"
258
- msgstr ""
259
-
260
- msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
261
- msgstr ""
1
+
2
+ msgid "Ecwid Shopping Cart"
3
+ msgstr ""
4
+
5
+ msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
6
+ msgstr ""
7
+
8
+ msgid "Ecwid Team"
9
+ msgstr ""
10
+
11
+ msgid "Get help"
12
+ msgstr "Obtener ayuda"
13
+
14
+ msgid "Go to Ecwid site"
15
+ msgstr "Ir al sitio Ecwid"
16
+
17
+ msgid "Visit storefront"
18
+ msgstr "Visitar escaparate"
19
+
20
+ msgid "Manage my store"
21
+ msgstr "Gestionar mi tienda"
22
+
23
+ msgid "Manage plugin settings"
24
+ msgstr "Administrar la configuración de conexión"
25
+
26
+ msgid "→ Sell on Facebook"
27
+ msgstr "→ Vender en Facebook"
28
+
29
+ msgid "Online store powered by <a %s>Ecwid</a>"
30
+ msgstr ""
31
+
32
+ msgid "Store"
33
+ msgstr "Tienda"
34
+
35
+ msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a target=\"_blank\" href=\"%s\">the created page</a> to see your store with demo products. In order to finish the installation, please go to the <a href=\"admin.php?page=ecwid\"><strong>Ecwid settings</strong></a> and configure the plugin."
36
+ msgstr "<strong>Ecwid la tarjeta de compras Ecwid está casi lista </strong>. Por favor visite <a target=\"_blank\" href=\"%s\">la página creada </a> para ver su tienda con productos de demostración. Para finalizar la instalación, por favor vaya a <a href=\"admin.php?page=ecwid\"><strong>ajustes Ecwid</strong></a> y configure la conexión."
37
+
38
+ msgid "Do you like your Ecwid online store? We'd appreciate it if you <a %s>add your review and vote</a> for the plugin on Wordpress site. (<a id=\"hide-vote-message\">Close</a> and do not show this message anymore)"
39
+ msgstr ""
40
+
41
+ msgid "Ecwid shopping cart settings"
42
+ msgstr ""
43
+
44
+ msgid "Ecwid Store"
45
+ msgstr "Tienda Ecwid"
46
+
47
+ msgid "General settings"
48
+ msgstr "Configuración general"
49
+
50
+ msgid "General"
51
+ msgstr "General"
52
+
53
+ msgid "Appearance settings"
54
+ msgstr "Opciones de aspecto"
55
+
56
+ msgid "Appearance"
57
+ msgstr "Aspecto"
58
+
59
+ msgid "Advanced settings"
60
+ msgstr "Opciones avanzadas"
61
+
62
+ msgid "Advanced"
63
+ msgstr "Avanzadas"
64
+
65
+ msgid "Setup"
66
+ msgstr ""
67
+
68
+ msgid "Your store's minicart"
69
+ msgstr "Mini carro de su tienda"
70
+
71
+ msgid "Ecwid Shopping Bag (Normal)"
72
+ msgstr "Bolsa de compras Ecwid (Normal)"
73
+
74
+ msgid "Ecwid Shopping Bag (Mini view)"
75
+ msgstr "Bolsa de compras Ecwid (Mini vista)"
76
+
77
+ msgid "Your store's search box"
78
+ msgstr "Caja de búsqueda de tu tienda"
79
+
80
+ msgid "Ecwid Search Box"
81
+ msgstr "Caja de búsqueda Ecwid"
82
+
83
+ msgid "Vertical menu of categories"
84
+ msgstr "Menú vertical de categorías"
85
+
86
+ msgid "Ecwid Vertical Categories"
87
+ msgstr "Categorías verticales Ecwid"
88
+
89
+ msgid "Price"
90
+ msgstr ""
91
+
92
+ msgid "Ecwid Shopping Cart — Advanced settings"
93
+ msgstr "Carro de compras Ecwid — Opciones avanzadas"
94
+
95
+ msgid "Category shown by default"
96
+ msgstr "Categoría mostrada por defecto"
97
+
98
+ msgid "Store root category"
99
+ msgstr "Categoría raíz de la tienda"
100
+
101
+ msgid "Default category ID"
102
+ msgstr "Identificación de categoría estandar"
103
+
104
+ msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
105
+ msgstr "Por defecto, la entrada principal muestra una lista de categorías de raíz. Puede anular este comportamiento y mostrar una categoría diferente cuando los clientes abren su tienda por primera vez. Es útil si usted tiene una sola categoría o quiere mostrar un conjunto específico de elementos (por ejemplo, \"productos destacados\") para todos los nuevos visitantes."
106
+
107
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
108
+ msgstr "Para fijar esta opción, <a %s> encuentre una identificación de la categoría necesaria </a> y guárdela aquí."
109
+
110
+ msgid "Single Sign-On Secret Key"
111
+ msgstr "Clave única secreta de registro"
112
+
113
+ msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
114
+ msgstr "Esta característica opcional le permite activar la inscripción única: cuando los clientes han iniciado sesión en su página, también inician sesión automáticamente en su tienda Ecwid, incluso si antes no tenían una cuenta en la tienda. Tiene sentido activar esta característica, si sus visitantes en efecto crean cuentas en su página WordPress."
115
+
116
+ msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
117
+ msgstr "Para activar esta característica usted debería enviar una clave secreta. Encontrará esta clave en su panel de control Ecwid, en la página \"Configurac​ión del sistema > API > Single Sign-on API\" . Esta característica está disponible sólo para <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">utilizadores de pago</a>."
118
+
119
+ msgid "Save changes"
120
+ msgstr "Guardar los cambios"
121
+
122
+ msgid "Ecwid Shopping Cart — Appearance settings"
123
+ msgstr "Tarjeta de Compras Ecwid — Ajustes de apariencia"
124
+
125
+ msgid "Display search box above products"
126
+ msgstr "Mostrar caja de búsqueda de productos de arriba"
127
+
128
+ msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
129
+ msgstr "O puede añadir una caja de búsqueda a la barra de herramientas de su página web utilizando <a href=\"%s\">WordPress native widgets</a>"
130
+
131
+ msgid "Display horizontal categories above products"
132
+ msgstr "Mostrar categorías horizontales sobre los productos"
133
+
134
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
135
+ msgstr "O puede añadir categorías verticales a la barra de herramientas de su página utilizando <a href=\"%s\">WordPress native widgets</a>"
136
+
137
+ msgid "Enable minicart attached to horizontal categories"
138
+ msgstr "Active minicarrito unido a las categorías horizontales "
139
+
140
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
141
+ msgstr "Debería desabilitar esta opción, si añade un minicarro a su página web&nbsp;barra lateral"
142
+
143
+ msgid "Number of categories per row"
144
+ msgstr "Número de categorías por fila"
145
+
146
+ msgid "Number of products per page"
147
+ msgstr "Número dde productos por página"
148
+
149
+ msgid "Grid view"
150
+ msgstr "Vista de cuadro"
151
+
152
+ msgid "List view"
153
+ msgstr "Vista de lista"
154
+
155
+ msgid "Table view"
156
+ msgstr "Vista de tabla"
157
+
158
+ msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
159
+ msgstr "Aquí usted puede controlar cuantos productos serán mostrados por página. Estas opciones definen valores maximos. Si no hay suficiente espacio para mostrar todas las cdolumnas de produtos, Ecwid adaptará el número de columnas para contener todos los productos."
160
+
161
+ msgid "Default view mode on product pages"
162
+ msgstr "Vista del modo predefinido en páginas de productos"
163
+
164
+ msgid "Grid"
165
+ msgstr "Cuadro"
166
+
167
+ msgid "List"
168
+ msgstr "Lista"
169
+
170
+ msgid "Table"
171
+ msgstr "Tabla"
172
+
173
+ msgid "Default view mode on search results"
174
+ msgstr "Vista del modo predefinido en búsqueda de resultados"
175
+
176
+ msgid "Store powered by Ecwid"
177
+ msgstr ""
178
+
179
+ msgid "Ecwid Shopping Cart — General settings"
180
+ msgstr "Carro de Compras Ecwid — Configuración general"
181
+
182
+ msgid "Thank you for choosing Ecwid to build your online store"
183
+ msgstr "Gracias por elegir Ecwid para cosntruir su tienda online"
184
+
185
+ msgid "The first step towards opening your online business: <br />Let’s get started and add a store to your WordPress website in <strong>3</strong> simple steps."
186
+ msgstr "El primer paso para abrir su negocio online: <br /> Vamos a empezar y añadir una tienda a su página web WordPress en <strong>3</strong> simples pasos."
187
+
188
+ msgid "Register at Ecwid"
189
+ msgstr "Registrarse en Ecwid"
190
+
191
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
192
+ msgstr "Crear una nueva cuenta Ecwid que utilizará para gestionar su tienda e inventario. El registro es gratuíto."
193
+
194
+ msgid "Create new Ecwid account"
195
+ msgstr "Crear una nueva cuenta Ecwid"
196
+
197
+ msgid "I already have Ecwid account, sign in"
198
+ msgstr "Ya tengo una cuenta Ecwid, registrar"
199
+
200
+ msgid "You will be able to sign up through your existing Google, Facebook or PayPal profiles as well."
201
+ msgstr "Será además capaz de inscribirse a través de su perfil Google, Facebook o PayPal."
202
+
203
+ msgid "Find your Store ID"
204
+ msgstr "Encuentre la Identificación de su tienda"
205
+
206
+ msgid "Store ID is a unique identifier of any Ecwid store, it consists of several digits. You can find it on the \"Dashboard\" page of Ecwid control panel. Also the Store ID will be sent in the Welcome email after the registration."
207
+ msgstr "El Identificador de su tienda es un Identificador único de cualquier tienda Ecwid, consiste en varios dígitos. Puede encontrarlo en la página \"Dashboard\" del panel de control Ecwid. Además la Identificación de la Tienda le será enviada en el e-mail de bienvenida después del registro."
208
+
209
+ msgid "Enter your Store ID"
210
+ msgstr "Introduzca la Identificación de su tienda "
211
+
212
+ msgid "Enter your Store ID here:"
213
+ msgstr "Introduzca la Identificación de su tienda aquí:"
214
+
215
+ msgid "Store ID"
216
+ msgstr "Identificación de tienda"
217
+
218
+ msgid "Save and connect your Ecwid store to the site"
219
+ msgstr "Guarde y conecte su tienda Ecwid al site"
220
+
221
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
222
+ msgstr "Preguntas? Visite <a href=\"http://help.ecwid.com/?source=wporg\">el centro de ayuda Ecwid</a>"
223
+
224
+ msgid "Congratulations!"
225
+ msgstr "Enhorabuena!"
226
+
227
+ msgid "Your Ecwid store is now connected to your WordPress website"
228
+ msgstr "Su tienda Ecwid está conectada a su página web WordPress"
229
+
230
+ msgid "Greetings!"
231
+ msgstr "Saludos!"
232
+
233
+ msgid "Your Ecwid store is connected to your WordPress website"
234
+ msgstr "Su tienda Ecwid está conectadaa su página web WordPress"
235
+
236
+ msgid "Control panel"
237
+ msgstr "Panel de control"
238
+
239
+ msgid "Account status"
240
+ msgstr "Estado de cuenta"
241
+
242
+ msgid "Paid"
243
+ msgstr "Pagado"
244
+
245
+ msgid "Free"
246
+ msgstr "Gratis"
247
+
248
+ msgid "Thank you for supporting Ecwid!"
249
+ msgstr "Gracias por apoyar a Ecwid!"
250
+
251
+ msgid "Upgrade to get access to cool premium features."
252
+ msgstr "Actualice para obtener acceso a interesantes funciones avanzadas."
253
+
254
+ msgid "Billing and plans"
255
+ msgstr ""
256
+
257
+ msgid "Upgrade"
258
+ msgstr ""
259
+
260
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
261
+ msgstr ""
languages/ecwid-shopping-cart-fr_FR.po CHANGED
@@ -1,261 +1,261 @@
1
-
2
- msgid "Ecwid Shopping Cart"
3
- msgstr ""
4
-
5
- msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
6
- msgstr ""
7
-
8
- msgid "Ecwid Team"
9
- msgstr ""
10
-
11
- msgid "Get help"
12
- msgstr "Obtenir de l'assistance"
13
-
14
- msgid "Go to Ecwid site"
15
- msgstr "Aller au site Ecwid"
16
-
17
- msgid "Visit storefront"
18
- msgstr "Visiter la vitrine"
19
-
20
- msgid "Manage my store"
21
- msgstr "Gérer ma boutique"
22
-
23
- msgid "Manage plugin settings"
24
- msgstr "Gérer mes paramètres de plugin"
25
-
26
- msgid "→ Sell on Facebook"
27
- msgstr "→ Vendre sur Facebook"
28
-
29
- msgid "Online store powered by <a %s>Ecwid</a>"
30
- msgstr ""
31
-
32
- msgid "Store"
33
- msgstr "Boutique"
34
-
35
- msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a target=\"_blank\" href=\"%s\">the created page</a> to see your store with demo products. In order to finish the installation, please go to the <a href=\"admin.php?page=ecwid\"><strong>Ecwid settings</strong></a> and configure the plugin."
36
- msgstr "<strong>Le panier virtuel Ecwid est quasiment prêt</strong>. Veuillez visiter <a target=\"_blank\" href=\"%s\">la page créée</a> pour voir votre boutique et des produits de démonstration. Afin de terminer l'installation, veuillez naviguer vers les <a href=\"admin.php?page=ecwid\"><strong>réglages Ecwid</strong></a> et configurer le plugin."
37
-
38
- msgid "Do you like your Ecwid online store? We'd appreciate it if you <a %s>add your review and vote</a> for the plugin on Wordpress site. (<a id=\"hide-vote-message\">Close</a> and do not show this message anymore)"
39
- msgstr ""
40
-
41
- msgid "Ecwid shopping cart settings"
42
- msgstr ""
43
-
44
- msgid "Ecwid Store"
45
- msgstr "Boutique Ecwid"
46
-
47
- msgid "General settings"
48
- msgstr "Réglages généraux"
49
-
50
- msgid "General"
51
- msgstr "Général"
52
-
53
- msgid "Appearance settings"
54
- msgstr "Réglages d'apparence"
55
-
56
- msgid "Appearance"
57
- msgstr "Apparence"
58
-
59
- msgid "Advanced settings"
60
- msgstr "Réglages avancés"
61
-
62
- msgid "Advanced"
63
- msgstr "Avancés"
64
-
65
- msgid "Setup"
66
- msgstr ""
67
-
68
- msgid "Your store's minicart"
69
- msgstr "Le mini-panier de votre boutique"
70
-
71
- msgid "Ecwid Shopping Bag (Normal)"
72
- msgstr "Le Panier Ecwid (Normal)"
73
-
74
- msgid "Ecwid Shopping Bag (Mini view)"
75
- msgstr "Le Panier Ecwid (Mini-vue)"
76
-
77
- msgid "Your store's search box"
78
- msgstr "La boîte de recherche de votre boutique"
79
-
80
- msgid "Ecwid Search Box"
81
- msgstr "Boîte de Recherche Ecwid"
82
-
83
- msgid "Vertical menu of categories"
84
- msgstr "Menu vertical de catégories"
85
-
86
- msgid "Ecwid Vertical Categories"
87
- msgstr "Catégories Verticales Ecwid"
88
-
89
- msgid "Price"
90
- msgstr ""
91
-
92
- msgid "Ecwid Shopping Cart — Advanced settings"
93
- msgstr "Panier Ecwid — Réglages avancés"
94
-
95
- msgid "Category shown by default"
96
- msgstr "Catégorie affichée par défaut"
97
-
98
- msgid "Store root category"
99
- msgstr "Catégorie racine de la boutique"
100
-
101
- msgid "Default category ID"
102
- msgstr "Numéro de la catégorie par défaut"
103
-
104
- msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
105
- msgstr "Par défaut, la vitrine présente une liste de catégories racines. Vous pouvez changer ce comportement et afficher une catégorie différente lorsque les clients accèdent à votre boutique pour la première fois. Cette fonction est pratique lorsque vous n'avez qu'une seule catégorie ou si vous souhaitez afficher une gamme spécifique d'articles (par ex. \"Produits Phares\") à tous vos clients."
106
-
107
- msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
108
- msgstr "Afin de régler cette option, <a %s>trouvez le numéro de catégorie nécessaire</a> puis sauvegardez-le ici."
109
-
110
- msgid "Single Sign-On Secret Key"
111
- msgstr "Clé Secrète Single Sign-on"
112
-
113
- msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
114
- msgstr "Cette fonction optionnelle permet d'activer Single Sign-on : lorsque les clients sont authentifiés sur votre site, ils sont automatiquement connectés à votre boutique Ecwid, même s'ils n'avaient pas auparavant de compte dans la boutique. Il est logique d'activer cette fonction lorsque vos visiteurs créent typiquement un compte sur votre site WordPress."
115
-
116
- msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
117
- msgstr "Afin d'activer cette fonction vous devez soumettre une clé secrète. Vous trouverez cette clé dans votre panneau de contrôle Ecwid, sur la page \"Paramètres Système > API > Single Sign-on API\". Cette fonction n'est disponible que pour les <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">utilisateurs payants</a>."
118
-
119
- msgid "Save changes"
120
- msgstr "Sauvegarder les modifications"
121
-
122
- msgid "Ecwid Shopping Cart — Appearance settings"
123
- msgstr "Panier Ecwid — Réglages d'apparence"
124
-
125
- msgid "Display search box above products"
126
- msgstr "Afficher la boîte de recherche au-dessus des produits"
127
-
128
- msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
129
- msgstr "Vous pouvez aussi ajouter une boîte de recherche à la barre d'outils de votre site via les <a href=\"%s\">widgets natifs de WordPress</a>"
130
-
131
- msgid "Display horizontal categories above products"
132
- msgstr "Afficher les catégories horizontales au-dessus des produits"
133
-
134
- msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
135
- msgstr "Vous pouvez aussi ajouter des catégories verticales à la barre d'outils de votre site via les <a href=\"%s\">widgets natifs de WordPress</a>"
136
-
137
- msgid "Enable minicart attached to horizontal categories"
138
- msgstr "Activer le mini-panier attaché aux catégories horizontales"
139
-
140
- msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
141
- msgstr "Cette option devrait être désactivée si vous avez ajouté un mini-panier à la barre latérale de votre site"
142
-
143
- msgid "Number of categories per row"
144
- msgstr "Nombre de catégories par rangée"
145
-
146
- msgid "Number of products per page"
147
- msgstr "Nombre de produits par page"
148
-
149
- msgid "Grid view"
150
- msgstr "Affichage Vignettes"
151
-
152
- msgid "List view"
153
- msgstr "Affichage Liste"
154
-
155
- msgid "Table view"
156
- msgstr "Affichage Tableau"
157
-
158
- msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
159
- msgstr "Vous pouvez contrôler ici le nombre de produits affichés par page. Ces options définissent des valeurs maximales. S'il n'y pas assez de place pour afficher toutes les colonnes de produits, Ecwid modifiera le nombre de colonnes pour conserver tous les produits."
160
-
161
- msgid "Default view mode on product pages"
162
- msgstr "Mode d'affichage par défaut des pages de produits"
163
-
164
- msgid "Grid"
165
- msgstr "Vignettes"
166
-
167
- msgid "List"
168
- msgstr "Liste"
169
-
170
- msgid "Table"
171
- msgstr "Tableau"
172
-
173
- msgid "Default view mode on search results"
174
- msgstr "Mode d'affichage par défaut des résultats de recherche"
175
-
176
- msgid "Store powered by Ecwid"
177
- msgstr ""
178
-
179
- msgid "Ecwid Shopping Cart — General settings"
180
- msgstr "Panier Ecwid — Réglages généraux"
181
-
182
- msgid "Thank you for choosing Ecwid to build your online store"
183
- msgstr "Merci d'avoir choisi Ecwid pour construire votre boutique en ligne"
184
-
185
- msgid "The first step towards opening your online business: <br />Let’s get started and add a store to your WordPress website in <strong>3</strong> simple steps."
186
- msgstr "La première étape vers l'ouverture de votre commerce en ligne : <br />Lançons-nous et ajoutons une boutique à votre site WordPress en <strong>3</strong> étapes faciles."
187
-
188
- msgid "Register at Ecwid"
189
- msgstr "Inscrivez-vous chez Ecwid"
190
-
191
- msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
192
- msgstr "Créez un nouveau compte Ecwid afin de pouvoir gérer votre boutique et votre inventaire. L'inscription est gratuite."
193
-
194
- msgid "Create new Ecwid account"
195
- msgstr "Créer un nouveau compte Ecwid"
196
-
197
- msgid "I already have Ecwid account, sign in"
198
- msgstr "J'ai déjà un compte Ecwid, se connecter"
199
-
200
- msgid "You will be able to sign up through your existing Google, Facebook or PayPal profiles as well."
201
- msgstr "Vous pourrez aussi vous connecter avec vos comptes Google, Facebook ou PayPal existants."
202
-
203
- msgid "Find your Store ID"
204
- msgstr "Trouver votre Numéro de Boutique."
205
-
206
- msgid "Store ID is a unique identifier of any Ecwid store, it consists of several digits. You can find it on the \"Dashboard\" page of Ecwid control panel. Also the Store ID will be sent in the Welcome email after the registration."
207
- msgstr "Le Numéro de Boutique est le code unique de votre boutique Ecwid, il est constitué de plusieurs chiffres. Vous pouvez le trouver sur la page \"Tableau de Bord\" du panneau de contrôle d'Ecwid. Le Numéro de Boutique sera aussi envoyé dans l'email de bienvenu après l'inscription."
208
-
209
- msgid "Enter your Store ID"
210
- msgstr "Entrer votre Numéro de Boutique"
211
-
212
- msgid "Enter your Store ID here:"
213
- msgstr "Entrez votre Numéro de Boutique ici :"
214
-
215
- msgid "Store ID"
216
- msgstr "Numéro de Boutique"
217
-
218
- msgid "Save and connect your Ecwid store to the site"
219
- msgstr "Sauvegardez et connectez votre boutique Ecwid au site."
220
-
221
- msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
222
- msgstr "Des questions? Visitez le <a href=\"http://help.ecwid.com/?source=wporg\">centre d'assistance Ecwid</a>"
223
-
224
- msgid "Congratulations!"
225
- msgstr "Félicitations !"
226
-
227
- msgid "Your Ecwid store is now connected to your WordPress website"
228
- msgstr "Votre boutique Ecwid est maintenant connectée à votre site WordPress"
229
-
230
- msgid "Greetings!"
231
- msgstr "Salutations !"
232
-
233
- msgid "Your Ecwid store is connected to your WordPress website"
234
- msgstr "Votre boutique Ecwid est connectée à votre site WordPress"
235
-
236
- msgid "Control panel"
237
- msgstr "Panneau de contrôle"
238
-
239
- msgid "Account status"
240
- msgstr "Statut du compte"
241
-
242
- msgid "Paid"
243
- msgstr "Payant"
244
-
245
- msgid "Free"
246
- msgstr "Gratuit"
247
-
248
- msgid "Thank you for supporting Ecwid!"
249
- msgstr "Merci pour le soutien apporté à Ecwid !"
250
-
251
- msgid "Upgrade to get access to cool premium features."
252
- msgstr "Surclassez votre compte pour accéder à de super fonctionnalités premium."
253
-
254
- msgid "Billing and plans"
255
- msgstr ""
256
-
257
- msgid "Upgrade"
258
- msgstr ""
259
-
260
- msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
261
- msgstr ""
1
+
2
+ msgid "Ecwid Shopping Cart"
3
+ msgstr ""
4
+
5
+ msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
6
+ msgstr ""
7
+
8
+ msgid "Ecwid Team"
9
+ msgstr ""
10
+
11
+ msgid "Get help"
12
+ msgstr "Obtenir de l'assistance"
13
+
14
+ msgid "Go to Ecwid site"
15
+ msgstr "Aller au site Ecwid"
16
+
17
+ msgid "Visit storefront"
18
+ msgstr "Visiter la vitrine"
19
+
20
+ msgid "Manage my store"
21
+ msgstr "Gérer ma boutique"
22
+
23
+ msgid "Manage plugin settings"
24
+ msgstr "Gérer mes paramètres de plugin"
25
+
26
+ msgid "→ Sell on Facebook"
27
+ msgstr "→ Vendre sur Facebook"
28
+
29
+ msgid "Online store powered by <a %s>Ecwid</a>"
30
+ msgstr ""
31
+
32
+ msgid "Store"
33
+ msgstr "Boutique"
34
+
35
+ msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a target=\"_blank\" href=\"%s\">the created page</a> to see your store with demo products. In order to finish the installation, please go to the <a href=\"admin.php?page=ecwid\"><strong>Ecwid settings</strong></a> and configure the plugin."
36
+ msgstr "<strong>Le panier virtuel Ecwid est quasiment prêt</strong>. Veuillez visiter <a target=\"_blank\" href=\"%s\">la page créée</a> pour voir votre boutique et des produits de démonstration. Afin de terminer l'installation, veuillez naviguer vers les <a href=\"admin.php?page=ecwid\"><strong>réglages Ecwid</strong></a> et configurer le plugin."
37
+
38
+ msgid "Do you like your Ecwid online store? We'd appreciate it if you <a %s>add your review and vote</a> for the plugin on Wordpress site. (<a id=\"hide-vote-message\">Close</a> and do not show this message anymore)"
39
+ msgstr ""
40
+
41
+ msgid "Ecwid shopping cart settings"
42
+ msgstr ""
43
+
44
+ msgid "Ecwid Store"
45
+ msgstr "Boutique Ecwid"
46
+
47
+ msgid "General settings"
48
+ msgstr "Réglages généraux"
49
+
50
+ msgid "General"
51
+ msgstr "Général"
52
+
53
+ msgid "Appearance settings"
54
+ msgstr "Réglages d'apparence"
55
+
56
+ msgid "Appearance"
57
+ msgstr "Apparence"
58
+
59
+ msgid "Advanced settings"
60
+ msgstr "Réglages avancés"
61
+
62
+ msgid "Advanced"
63
+ msgstr "Avancés"
64
+
65
+ msgid "Setup"
66
+ msgstr ""
67
+
68
+ msgid "Your store's minicart"
69
+ msgstr "Le mini-panier de votre boutique"
70
+
71
+ msgid "Ecwid Shopping Bag (Normal)"
72
+ msgstr "Le Panier Ecwid (Normal)"
73
+
74
+ msgid "Ecwid Shopping Bag (Mini view)"
75
+ msgstr "Le Panier Ecwid (Mini-vue)"
76
+
77
+ msgid "Your store's search box"
78
+ msgstr "La boîte de recherche de votre boutique"
79
+
80
+ msgid "Ecwid Search Box"
81
+ msgstr "Boîte de Recherche Ecwid"
82
+
83
+ msgid "Vertical menu of categories"
84
+ msgstr "Menu vertical de catégories"
85
+
86
+ msgid "Ecwid Vertical Categories"
87
+ msgstr "Catégories Verticales Ecwid"
88
+
89
+ msgid "Price"
90
+ msgstr ""
91
+
92
+ msgid "Ecwid Shopping Cart — Advanced settings"
93
+ msgstr "Panier Ecwid — Réglages avancés"
94
+
95
+ msgid "Category shown by default"
96
+ msgstr "Catégorie affichée par défaut"
97
+
98
+ msgid "Store root category"
99
+ msgstr "Catégorie racine de la boutique"
100
+
101
+ msgid "Default category ID"
102
+ msgstr "Numéro de la catégorie par défaut"
103
+
104
+ msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
105
+ msgstr "Par défaut, la vitrine présente une liste de catégories racines. Vous pouvez changer ce comportement et afficher une catégorie différente lorsque les clients accèdent à votre boutique pour la première fois. Cette fonction est pratique lorsque vous n'avez qu'une seule catégorie ou si vous souhaitez afficher une gamme spécifique d'articles (par ex. \"Produits Phares\") à tous vos clients."
106
+
107
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
108
+ msgstr "Afin de régler cette option, <a %s>trouvez le numéro de catégorie nécessaire</a> puis sauvegardez-le ici."
109
+
110
+ msgid "Single Sign-On Secret Key"
111
+ msgstr "Clé Secrète Single Sign-on"
112
+
113
+ msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
114
+ msgstr "Cette fonction optionnelle permet d'activer Single Sign-on : lorsque les clients sont authentifiés sur votre site, ils sont automatiquement connectés à votre boutique Ecwid, même s'ils n'avaient pas auparavant de compte dans la boutique. Il est logique d'activer cette fonction lorsque vos visiteurs créent typiquement un compte sur votre site WordPress."
115
+
116
+ msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
117
+ msgstr "Afin d'activer cette fonction vous devez soumettre une clé secrète. Vous trouverez cette clé dans votre panneau de contrôle Ecwid, sur la page \"Paramètres Système > API > Single Sign-on API\". Cette fonction n'est disponible que pour les <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">utilisateurs payants</a>."
118
+
119
+ msgid "Save changes"
120
+ msgstr "Sauvegarder les modifications"
121
+
122
+ msgid "Ecwid Shopping Cart — Appearance settings"
123
+ msgstr "Panier Ecwid — Réglages d'apparence"
124
+
125
+ msgid "Display search box above products"
126
+ msgstr "Afficher la boîte de recherche au-dessus des produits"
127
+
128
+ msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
129
+ msgstr "Vous pouvez aussi ajouter une boîte de recherche à la barre d'outils de votre site via les <a href=\"%s\">widgets natifs de WordPress</a>"
130
+
131
+ msgid "Display horizontal categories above products"
132
+ msgstr "Afficher les catégories horizontales au-dessus des produits"
133
+
134
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
135
+ msgstr "Vous pouvez aussi ajouter des catégories verticales à la barre d'outils de votre site via les <a href=\"%s\">widgets natifs de WordPress</a>"
136
+
137
+ msgid "Enable minicart attached to horizontal categories"
138
+ msgstr "Activer le mini-panier attaché aux catégories horizontales"
139
+
140
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
141
+ msgstr "Cette option devrait être désactivée si vous avez ajouté un mini-panier à la barre latérale de votre site"
142
+
143
+ msgid "Number of categories per row"
144
+ msgstr "Nombre de catégories par rangée"
145
+
146
+ msgid "Number of products per page"
147
+ msgstr "Nombre de produits par page"
148
+
149
+ msgid "Grid view"
150
+ msgstr "Affichage Vignettes"
151
+
152
+ msgid "List view"
153
+ msgstr "Affichage Liste"
154
+
155
+ msgid "Table view"
156
+ msgstr "Affichage Tableau"
157
+
158
+ msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
159
+ msgstr "Vous pouvez contrôler ici le nombre de produits affichés par page. Ces options définissent des valeurs maximales. S'il n'y pas assez de place pour afficher toutes les colonnes de produits, Ecwid modifiera le nombre de colonnes pour conserver tous les produits."
160
+
161
+ msgid "Default view mode on product pages"
162
+ msgstr "Mode d'affichage par défaut des pages de produits"
163
+
164
+ msgid "Grid"
165
+ msgstr "Vignettes"
166
+
167
+ msgid "List"
168
+ msgstr "Liste"
169
+
170
+ msgid "Table"
171
+ msgstr "Tableau"
172
+
173
+ msgid "Default view mode on search results"
174
+ msgstr "Mode d'affichage par défaut des résultats de recherche"
175
+
176
+ msgid "Store powered by Ecwid"
177
+ msgstr ""
178
+
179
+ msgid "Ecwid Shopping Cart — General settings"
180
+ msgstr "Panier Ecwid — Réglages généraux"
181
+
182
+ msgid "Thank you for choosing Ecwid to build your online store"
183
+ msgstr "Merci d'avoir choisi Ecwid pour construire votre boutique en ligne"
184
+
185
+ msgid "The first step towards opening your online business: <br />Let’s get started and add a store to your WordPress website in <strong>3</strong> simple steps."
186
+ msgstr "La première étape vers l'ouverture de votre commerce en ligne : <br />Lançons-nous et ajoutons une boutique à votre site WordPress en <strong>3</strong> étapes faciles."
187
+
188
+ msgid "Register at Ecwid"
189
+ msgstr "Inscrivez-vous chez Ecwid"
190
+
191
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
192
+ msgstr "Créez un nouveau compte Ecwid afin de pouvoir gérer votre boutique et votre inventaire. L'inscription est gratuite."
193
+
194
+ msgid "Create new Ecwid account"
195
+ msgstr "Créer un nouveau compte Ecwid"
196
+
197
+ msgid "I already have Ecwid account, sign in"
198
+ msgstr "J'ai déjà un compte Ecwid, se connecter"
199
+
200
+ msgid "You will be able to sign up through your existing Google, Facebook or PayPal profiles as well."
201
+ msgstr "Vous pourrez aussi vous connecter avec vos comptes Google, Facebook ou PayPal existants."
202
+
203
+ msgid "Find your Store ID"
204
+ msgstr "Trouver votre Numéro de Boutique."
205
+
206
+ msgid "Store ID is a unique identifier of any Ecwid store, it consists of several digits. You can find it on the \"Dashboard\" page of Ecwid control panel. Also the Store ID will be sent in the Welcome email after the registration."
207
+ msgstr "Le Numéro de Boutique est le code unique de votre boutique Ecwid, il est constitué de plusieurs chiffres. Vous pouvez le trouver sur la page \"Tableau de Bord\" du panneau de contrôle d'Ecwid. Le Numéro de Boutique sera aussi envoyé dans l'email de bienvenu après l'inscription."
208
+
209
+ msgid "Enter your Store ID"
210
+ msgstr "Entrer votre Numéro de Boutique"
211
+
212
+ msgid "Enter your Store ID here:"
213
+ msgstr "Entrez votre Numéro de Boutique ici :"
214
+
215
+ msgid "Store ID"
216
+ msgstr "Numéro de Boutique"
217
+
218
+ msgid "Save and connect your Ecwid store to the site"
219
+ msgstr "Sauvegardez et connectez votre boutique Ecwid au site."
220
+
221
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
222
+ msgstr "Des questions? Visitez le <a href=\"http://help.ecwid.com/?source=wporg\">centre d'assistance Ecwid</a>"
223
+
224
+ msgid "Congratulations!"
225
+ msgstr "Félicitations !"
226
+
227
+ msgid "Your Ecwid store is now connected to your WordPress website"
228
+ msgstr "Votre boutique Ecwid est maintenant connectée à votre site WordPress"
229
+
230
+ msgid "Greetings!"
231
+ msgstr "Salutations !"
232
+
233
+ msgid "Your Ecwid store is connected to your WordPress website"
234
+ msgstr "Votre boutique Ecwid est connectée à votre site WordPress"
235
+
236
+ msgid "Control panel"
237
+ msgstr "Panneau de contrôle"
238
+
239
+ msgid "Account status"
240
+ msgstr "Statut du compte"
241
+
242
+ msgid "Paid"
243
+ msgstr "Payant"
244
+
245
+ msgid "Free"
246
+ msgstr "Gratuit"
247
+
248
+ msgid "Thank you for supporting Ecwid!"
249
+ msgstr "Merci pour le soutien apporté à Ecwid !"
250
+
251
+ msgid "Upgrade to get access to cool premium features."
252
+ msgstr "Surclassez votre compte pour accéder à de super fonctionnalités premium."
253
+
254
+ msgid "Billing and plans"
255
+ msgstr ""
256
+
257
+ msgid "Upgrade"
258
+ msgstr ""
259
+
260
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
261
+ msgstr ""
languages/ecwid-shopping-cart-pt_BR.po CHANGED
@@ -1,269 +1,269 @@
1
- # This file was generated by Easy Translator Lite -- a WordPress plugin translator
2
- # Your Name:
3
- # Your Email: test@example.com
4
- # Your Website: wordpress36
5
- # Your URL: http://localhost/wordpress36
6
- # Your Locale: ru_RU (MO: /languages/ecwid-shopping-cart-ru_RU.mo)
7
- # Your Language: ru-RU
8
- #, fuzzy
9
-
10
- msgid "Ecwid Shopping Cart"
11
- msgstr ""
12
-
13
- msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
14
- msgstr ""
15
-
16
- msgid "Ecwid Team"
17
- msgstr ""
18
-
19
- msgid "Get help"
20
- msgstr "Obter Ajuda"
21
-
22
- msgid "Go to Ecwid site"
23
- msgstr "Ir para o sítio Ecwid"
24
-
25
- msgid "Visit storefront"
26
- msgstr "Visitar frente da loja"
27
-
28
- msgid "Manage my store"
29
- msgstr "Gerir a minha loja"
30
-
31
- msgid "Manage plugin settings"
32
- msgstr "Gerir definições de plugin"
33
-
34
- msgid "→ Sell on Facebook"
35
- msgstr "→ Vender no Facebook"
36
-
37
- msgid "Online store powered by <a %s>Ecwid</a>"
38
- msgstr ""
39
-
40
- msgid "Store"
41
- msgstr "Loja"
42
-
43
- msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a target=\"_blank\" href=\"%s\">the created page</a> to see your store with demo products. In order to finish the installation, please go to the <a href=\"admin.php?page=ecwid\"><strong>Ecwid settings</strong></a> and configure the plugin."
44
- msgstr "<strong> O carrinho de compras Ecwid está quase pronto </strong> Por favor visite <a target=\"_blank\" href=\"%s\">a página criada</a> para ver os produtos demonstração na sua loja. De modo a terminar a instalação, por favor vá a <a href=\"admin.php?page=ecwid\"><strong>definições Ecwid </strong></a> e configure o plugin."
45
-
46
- msgid "Do you like your Ecwid online store? We'd appreciate it if you <a %s>add your review and vote</a> for the plugin on Wordpress site. (<a id=\"hide-vote-message\">Close</a> and do not show this message anymore)"
47
- msgstr ""
48
-
49
- msgid "Ecwid shopping cart settings"
50
- msgstr ""
51
-
52
- msgid "Ecwid Store"
53
- msgstr "Loja Ecwid"
54
-
55
- msgid "General settings"
56
- msgstr "Definições Gerais"
57
-
58
- msgid "General"
59
- msgstr "Geral"
60
-
61
- msgid "Appearance settings"
62
- msgstr "Definições de Aparência"
63
-
64
- msgid "Appearance"
65
- msgstr "Aparência"
66
-
67
- msgid "Advanced settings"
68
- msgstr "Definições Avançadas"
69
-
70
- msgid "Advanced"
71
- msgstr "Avançadas"
72
-
73
- msgid "Setup"
74
- msgstr ""
75
-
76
- msgid "Your store's minicart"
77
- msgstr "O minicart da sua loja"
78
-
79
- msgid "Ecwid Shopping Bag (Normal)"
80
- msgstr "Saco de compras Ecwid (Normal)"
81
-
82
- msgid "Ecwid Shopping Bag (Mini view)"
83
- msgstr "Saco de compras Ecwid (Vista mini)"
84
-
85
- msgid "Your store's search box"
86
- msgstr "A barra de pesquisa da sua loja"
87
-
88
- msgid "Ecwid Search Box"
89
- msgstr "Barra de pesquisa Ecwid"
90
-
91
- msgid "Vertical menu of categories"
92
- msgstr "Menu vertical de categorias"
93
-
94
- msgid "Ecwid Vertical Categories"
95
- msgstr "Categorias verticais Ecwid"
96
-
97
- msgid "Price"
98
- msgstr ""
99
-
100
- msgid "Ecwid Shopping Cart — Advanced settings"
101
- msgstr "Carrinho de compras Ecwid — Definições Avançadas"
102
-
103
- msgid "Category shown by default"
104
- msgstr "Categoria mostrada por defeito"
105
-
106
- msgid "Store root category"
107
- msgstr "Categoria de raiz de loja"
108
-
109
- msgid "Default category ID"
110
- msgstr "Identificação de categoria por defeito"
111
-
112
- msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
113
- msgstr "Por defeito, a frente de loja mostra uma lista de categorias de raiz. Você pode ignorar este comportamento e mostrar uma categoria diferente quando os clientes abrirem a sua loja pela primeira vez. É util se você tem apenas uma categoria ou quer mostrar produtos especifícos (e.g. \"Produtos em Destaque\") para todos os novos visitantes."
114
-
115
- msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
116
- msgstr "De modo a configurar esta opção, <a %s> encontra um ID da categoria necessária</a>, salvando-a."
117
-
118
- msgid "Single Sign-On Secret Key"
119
- msgstr "Chave Secreta e Iniciar Sessão Único"
120
-
121
- msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
122
- msgstr "Esta característica opcional permite ativar o Iniciar Sessão Único: Quando os clientes estão inscritos no seu sítio, eles automaticamente se ligam na sua loja Ecwid, mesmo que eles não tenham conta na loja antes. Faz sentido ativar esta característica, se os seus visitantes realmente criarem contas no seu sítio WordPress."
123
-
124
- msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
125
- msgstr "De modo a ativar esta caracterísitca você deverá submeter uma chave secreta. Você encontrará essa chave no painel de controle Ecwid, nas \"Definições de Sistema\" > API > Iniciar Sessão Único na página API. Esta característica está disponível para <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">usuários pagos</a> apenas."
126
-
127
- msgid "Save changes"
128
- msgstr "Salvar alterações"
129
-
130
- msgid "Ecwid Shopping Cart — Appearance settings"
131
- msgstr "Carrinho de compras Ecwid — Definições Aparência"
132
-
133
- msgid "Display search box above products"
134
- msgstr "Mostrar barra de pesquisa acima dos produtos"
135
-
136
- msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
137
- msgstr "Ou você pode adicionar uma barra de pesquisa no seu sítio usando <a href=\"%s\">widgets nativos do WordPress</a>"
138
-
139
- msgid "Display horizontal categories above products"
140
- msgstr "Mostrar categorias horizontais acima dos produtos"
141
-
142
- msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
143
- msgstr "Ou você pode adicionar categorias verticais na barra de ferramentas do seu sítio através de <a href=\"%s\">widgets nativos do WordPress</a>"
144
-
145
- msgid "Enable minicart attached to horizontal categories"
146
- msgstr "Ativar minicart anexado às categorias horizontais"
147
-
148
- msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
149
- msgstr "Deverá desativar esta opção se você adicionou o minicart à barra lateral do seu sítio"
150
-
151
- msgid "Number of categories per row"
152
- msgstr "Número de categorias por fila"
153
-
154
- msgid "Number of products per page"
155
- msgstr "Número de produtos por página"
156
-
157
- msgid "Grid view"
158
- msgstr "Vista Grelha"
159
-
160
- msgid "List view"
161
- msgstr "Vista Lista"
162
-
163
- msgid "Table view"
164
- msgstr "Vista Tabela"
165
-
166
- msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
167
- msgstr "Aqui você poderá controlar quando produtos quer que sejam mostrados por página. Estas opções definem valores máximos. Se não houver espaço suficiente para mostrar todas as colunas de produtos, a Ecwid irá adaptar o número de colunas a mostrar todos os produtos."
168
-
169
- msgid "Default view mode on product pages"
170
- msgstr "Vista padrão nas páginas de produtos"
171
-
172
- msgid "Grid"
173
- msgstr "Grelha"
174
-
175
- msgid "List"
176
- msgstr "Lista"
177
-
178
- msgid "Table"
179
- msgstr "Tabela"
180
-
181
- msgid "Default view mode on search results"
182
- msgstr "Vista Padrão nos resultados de pesquisa"
183
-
184
- msgid "Store powered by Ecwid"
185
- msgstr ""
186
-
187
- msgid "Ecwid Shopping Cart — General settings"
188
- msgstr "Carrinho de Compras Ecwid — Definições Gerais"
189
-
190
- msgid "Thank you for choosing Ecwid to build your online store"
191
- msgstr "Obrigado por escolher Ecwid para construir a sua loja online"
192
-
193
- msgid "The first step towards opening your online business: <br />Let’s get started and add a store to your WordPress website in <strong>3</strong> simple steps."
194
- msgstr "Os primeiros passos para abrir o seu negócio online<br />Vamos começar e adicionar uma loja no seu sítio WordPress em <strong>3</strong> passos simples."
195
-
196
- msgid "Register at Ecwid"
197
- msgstr "Registe-se na Ecwid"
198
-
199
- msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
200
- msgstr "Crie uma nova conta Ecwid que você utilizará para gerir a sua loja e inventário. O registo é grátis."
201
-
202
- msgid "Create new Ecwid account"
203
- msgstr "Crie uma nova conta Ecwid"
204
-
205
- msgid "I already have Ecwid account, sign in"
206
- msgstr "Já tenho uma conta Ecwid, iniciar sessão"
207
-
208
- msgid "You will be able to sign up through your existing Google, Facebook or PayPal profiles as well."
209
- msgstr "Você conseguirá iniciar sessão atráves dos seus perfis existentes do Google, Facebook ou PayPal."
210
-
211
- msgid "Find your Store ID"
212
- msgstr "Obtenha a sua ID de loja"
213
-
214
- msgid "Store ID is a unique identifier of any Ecwid store, it consists of several digits. You can find it on the \"Dashboard\" page of Ecwid control panel. Also the Store ID will be sent in the Welcome email after the registration."
215
- msgstr "ID de loja é um identificador único de qualquer loja Ecwid, consiste em vários digitos. Poderá encontrá-lo no \"Painel\" da página \"Painel de Controle\" da Ecwid. Mais, a ID de loja será enviada na mensagem de correio eletrônico de boas-vindas após o registo. "
216
-
217
- msgid "Enter your Store ID"
218
- msgstr "Insira a sua ID de Loja"
219
-
220
- msgid "Enter your Store ID here:"
221
- msgstr "Insira a sua ID de Loja aqui:"
222
-
223
- msgid "Store ID"
224
- msgstr "ID de Loja "
225
-
226
- msgid "Save and connect your Ecwid store to the site"
227
- msgstr "Salve e conete a sua loja Ecwid ao sítio"
228
-
229
- msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
230
- msgstr "Questões? Visite <a href=\"http://help.ecwid.com/?source=wporg\"> Centro de Apoio Ecwid</a>"
231
-
232
- msgid "Congratulations!"
233
- msgstr "Parabéns!"
234
-
235
- msgid "Your Ecwid store is now connected to your WordPress website"
236
- msgstr "A sua loja Ecwid está agora conetada ao seu sítio WorkPress"
237
-
238
- msgid "Greetings!"
239
- msgstr "Saudações!"
240
-
241
- msgid "Your Ecwid store is connected to your WordPress website"
242
- msgstr "A sua loja Ecwid está agora conetada ao seu sítio WorkPress"
243
-
244
- msgid "Control panel"
245
- msgstr "Painel de Controle"
246
-
247
- msgid "Account status"
248
- msgstr "Estado de Conta"
249
-
250
- msgid "Paid"
251
- msgstr "Pago"
252
-
253
- msgid "Free"
254
- msgstr "Grátis"
255
-
256
- msgid "Thank you for supporting Ecwid!"
257
- msgstr "Obrigado por apoiar Ecwid!"
258
-
259
- msgid "Upgrade to get access to cool premium features."
260
- msgstr "Atualize para ter acesso a características premium convenientes."
261
-
262
- msgid "Billing and plans"
263
- msgstr ""
264
-
265
- msgid "Upgrade"
266
- msgstr ""
267
-
268
- msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
269
  msgstr ""
1
+ # This file was generated by Easy Translator Lite -- a WordPress plugin translator
2
+ # Your Name:
3
+ # Your Email: test@example.com
4
+ # Your Website: wordpress36
5
+ # Your URL: http://localhost/wordpress36
6
+ # Your Locale: ru_RU (MO: /languages/ecwid-shopping-cart-ru_RU.mo)
7
+ # Your Language: ru-RU
8
+ #, fuzzy
9
+
10
+ msgid "Ecwid Shopping Cart"
11
+ msgstr ""
12
+
13
+ msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
14
+ msgstr ""
15
+
16
+ msgid "Ecwid Team"
17
+ msgstr ""
18
+
19
+ msgid "Get help"
20
+ msgstr "Obter Ajuda"
21
+
22
+ msgid "Go to Ecwid site"
23
+ msgstr "Ir para o sítio Ecwid"
24
+
25
+ msgid "Visit storefront"
26
+ msgstr "Visitar frente da loja"
27
+
28
+ msgid "Manage my store"
29
+ msgstr "Gerir a minha loja"
30
+
31
+ msgid "Manage plugin settings"
32
+ msgstr "Gerir definições de plugin"
33
+
34
+ msgid "→ Sell on Facebook"
35
+ msgstr "→ Vender no Facebook"
36
+
37
+ msgid "Online store powered by <a %s>Ecwid</a>"
38
+ msgstr ""
39
+
40
+ msgid "Store"
41
+ msgstr "Loja"
42
+
43
+ msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a target=\"_blank\" href=\"%s\">the created page</a> to see your store with demo products. In order to finish the installation, please go to the <a href=\"admin.php?page=ecwid\"><strong>Ecwid settings</strong></a> and configure the plugin."
44
+ msgstr "<strong> O carrinho de compras Ecwid está quase pronto </strong> Por favor visite <a target=\"_blank\" href=\"%s\">a página criada</a> para ver os produtos demonstração na sua loja. De modo a terminar a instalação, por favor vá a <a href=\"admin.php?page=ecwid\"><strong>definições Ecwid </strong></a> e configure o plugin."
45
+
46
+ msgid "Do you like your Ecwid online store? We'd appreciate it if you <a %s>add your review and vote</a> for the plugin on Wordpress site. (<a id=\"hide-vote-message\">Close</a> and do not show this message anymore)"
47
+ msgstr ""
48
+
49
+ msgid "Ecwid shopping cart settings"
50
+ msgstr ""
51
+
52
+ msgid "Ecwid Store"
53
+ msgstr "Loja Ecwid"
54
+
55
+ msgid "General settings"
56
+ msgstr "Definições Gerais"
57
+
58
+ msgid "General"
59
+ msgstr "Geral"
60
+
61
+ msgid "Appearance settings"
62
+ msgstr "Definições de Aparência"
63
+
64
+ msgid "Appearance"
65
+ msgstr "Aparência"
66
+
67
+ msgid "Advanced settings"
68
+ msgstr "Definições Avançadas"
69
+
70
+ msgid "Advanced"
71
+ msgstr "Avançadas"
72
+
73
+ msgid "Setup"
74
+ msgstr ""
75
+
76
+ msgid "Your store's minicart"
77
+ msgstr "O minicart da sua loja"
78
+
79
+ msgid "Ecwid Shopping Bag (Normal)"
80
+ msgstr "Saco de compras Ecwid (Normal)"
81
+
82
+ msgid "Ecwid Shopping Bag (Mini view)"
83
+ msgstr "Saco de compras Ecwid (Vista mini)"
84
+
85
+ msgid "Your store's search box"
86
+ msgstr "A barra de pesquisa da sua loja"
87
+
88
+ msgid "Ecwid Search Box"
89
+ msgstr "Barra de pesquisa Ecwid"
90
+
91
+ msgid "Vertical menu of categories"
92
+ msgstr "Menu vertical de categorias"
93
+
94
+ msgid "Ecwid Vertical Categories"
95
+ msgstr "Categorias verticais Ecwid"
96
+
97
+ msgid "Price"
98
+ msgstr ""
99
+
100
+ msgid "Ecwid Shopping Cart — Advanced settings"
101
+ msgstr "Carrinho de compras Ecwid — Definições Avançadas"
102
+
103
+ msgid "Category shown by default"
104
+ msgstr "Categoria mostrada por defeito"
105
+
106
+ msgid "Store root category"
107
+ msgstr "Categoria de raiz de loja"
108
+
109
+ msgid "Default category ID"
110
+ msgstr "Identificação de categoria por defeito"
111
+
112
+ msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
113
+ msgstr "Por defeito, a frente de loja mostra uma lista de categorias de raiz. Você pode ignorar este comportamento e mostrar uma categoria diferente quando os clientes abrirem a sua loja pela primeira vez. É util se você tem apenas uma categoria ou quer mostrar produtos especifícos (e.g. \"Produtos em Destaque\") para todos os novos visitantes."
114
+
115
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
116
+ msgstr "De modo a configurar esta opção, <a %s> encontra um ID da categoria necessária</a>, salvando-a."
117
+
118
+ msgid "Single Sign-On Secret Key"
119
+ msgstr "Chave Secreta e Iniciar Sessão Único"
120
+
121
+ msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
122
+ msgstr "Esta característica opcional permite ativar o Iniciar Sessão Único: Quando os clientes estão inscritos no seu sítio, eles automaticamente se ligam na sua loja Ecwid, mesmo que eles não tenham conta na loja antes. Faz sentido ativar esta característica, se os seus visitantes realmente criarem contas no seu sítio WordPress."
123
+
124
+ msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
125
+ msgstr "De modo a ativar esta caracterísitca você deverá submeter uma chave secreta. Você encontrará essa chave no painel de controle Ecwid, nas \"Definições de Sistema\" > API > Iniciar Sessão Único na página API. Esta característica está disponível para <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">usuários pagos</a> apenas."
126
+
127
+ msgid "Save changes"
128
+ msgstr "Salvar alterações"
129
+
130
+ msgid "Ecwid Shopping Cart — Appearance settings"
131
+ msgstr "Carrinho de compras Ecwid — Definições Aparência"
132
+
133
+ msgid "Display search box above products"
134
+ msgstr "Mostrar barra de pesquisa acima dos produtos"
135
+
136
+ msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
137
+ msgstr "Ou você pode adicionar uma barra de pesquisa no seu sítio usando <a href=\"%s\">widgets nativos do WordPress</a>"
138
+
139
+ msgid "Display horizontal categories above products"
140
+ msgstr "Mostrar categorias horizontais acima dos produtos"
141
+
142
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
143
+ msgstr "Ou você pode adicionar categorias verticais na barra de ferramentas do seu sítio através de <a href=\"%s\">widgets nativos do WordPress</a>"
144
+
145
+ msgid "Enable minicart attached to horizontal categories"
146
+ msgstr "Ativar minicart anexado às categorias horizontais"
147
+
148
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
149
+ msgstr "Deverá desativar esta opção se você adicionou o minicart à barra lateral do seu sítio"
150
+
151
+ msgid "Number of categories per row"
152
+ msgstr "Número de categorias por fila"
153
+
154
+ msgid "Number of products per page"
155
+ msgstr "Número de produtos por página"
156
+
157
+ msgid "Grid view"
158
+ msgstr "Vista Grelha"
159
+
160
+ msgid "List view"
161
+ msgstr "Vista Lista"
162
+
163
+ msgid "Table view"
164
+ msgstr "Vista Tabela"
165
+
166
+ msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
167
+ msgstr "Aqui você poderá controlar quando produtos quer que sejam mostrados por página. Estas opções definem valores máximos. Se não houver espaço suficiente para mostrar todas as colunas de produtos, a Ecwid irá adaptar o número de colunas a mostrar todos os produtos."
168
+
169
+ msgid "Default view mode on product pages"
170
+ msgstr "Vista padrão nas páginas de produtos"
171
+
172
+ msgid "Grid"
173
+ msgstr "Grelha"
174
+
175
+ msgid "List"
176
+ msgstr "Lista"
177
+
178
+ msgid "Table"
179
+ msgstr "Tabela"
180
+
181
+ msgid "Default view mode on search results"
182
+ msgstr "Vista Padrão nos resultados de pesquisa"
183
+
184
+ msgid "Store powered by Ecwid"
185
+ msgstr ""
186
+
187
+ msgid "Ecwid Shopping Cart — General settings"
188
+ msgstr "Carrinho de Compras Ecwid — Definições Gerais"
189
+
190
+ msgid "Thank you for choosing Ecwid to build your online store"
191
+ msgstr "Obrigado por escolher Ecwid para construir a sua loja online"
192
+
193
+ msgid "The first step towards opening your online business: <br />Let’s get started and add a store to your WordPress website in <strong>3</strong> simple steps."
194
+ msgstr "Os primeiros passos para abrir o seu negócio online<br />Vamos começar e adicionar uma loja no seu sítio WordPress em <strong>3</strong> passos simples."
195
+
196
+ msgid "Register at Ecwid"
197
+ msgstr "Registe-se na Ecwid"
198
+
199
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
200
+ msgstr "Crie uma nova conta Ecwid que você utilizará para gerir a sua loja e inventário. O registo é grátis."
201
+
202
+ msgid "Create new Ecwid account"
203
+ msgstr "Crie uma nova conta Ecwid"
204
+
205
+ msgid "I already have Ecwid account, sign in"
206
+ msgstr "Já tenho uma conta Ecwid, iniciar sessão"
207
+
208
+ msgid "You will be able to sign up through your existing Google, Facebook or PayPal profiles as well."
209
+ msgstr "Você conseguirá iniciar sessão atráves dos seus perfis existentes do Google, Facebook ou PayPal."
210
+
211
+ msgid "Find your Store ID"
212
+ msgstr "Obtenha a sua ID de loja"
213
+
214
+ msgid "Store ID is a unique identifier of any Ecwid store, it consists of several digits. You can find it on the \"Dashboard\" page of Ecwid control panel. Also the Store ID will be sent in the Welcome email after the registration."
215
+ msgstr "ID de loja é um identificador único de qualquer loja Ecwid, consiste em vários digitos. Poderá encontrá-lo no \"Painel\" da página \"Painel de Controle\" da Ecwid. Mais, a ID de loja será enviada na mensagem de correio eletrônico de boas-vindas após o registo. "
216
+
217
+ msgid "Enter your Store ID"
218
+ msgstr "Insira a sua ID de Loja"
219
+
220
+ msgid "Enter your Store ID here:"
221
+ msgstr "Insira a sua ID de Loja aqui:"
222
+
223
+ msgid "Store ID"
224
+ msgstr "ID de Loja "
225
+
226
+ msgid "Save and connect your Ecwid store to the site"
227
+ msgstr "Salve e conete a sua loja Ecwid ao sítio"
228
+
229
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
230
+ msgstr "Questões? Visite <a href=\"http://help.ecwid.com/?source=wporg\"> Centro de Apoio Ecwid</a>"
231
+
232
+ msgid "Congratulations!"
233
+ msgstr "Parabéns!"
234
+
235
+ msgid "Your Ecwid store is now connected to your WordPress website"
236
+ msgstr "A sua loja Ecwid está agora conetada ao seu sítio WorkPress"
237
+
238
+ msgid "Greetings!"
239
+ msgstr "Saudações!"
240
+
241
+ msgid "Your Ecwid store is connected to your WordPress website"
242
+ msgstr "A sua loja Ecwid está agora conetada ao seu sítio WorkPress"
243
+
244
+ msgid "Control panel"
245
+ msgstr "Painel de Controle"
246
+
247
+ msgid "Account status"
248
+ msgstr "Estado de Conta"
249
+
250
+ msgid "Paid"
251
+ msgstr "Pago"
252
+
253
+ msgid "Free"
254
+ msgstr "Grátis"
255
+
256
+ msgid "Thank you for supporting Ecwid!"
257
+ msgstr "Obrigado por apoiar Ecwid!"
258
+
259
+ msgid "Upgrade to get access to cool premium features."
260
+ msgstr "Atualize para ter acesso a características premium convenientes."
261
+
262
+ msgid "Billing and plans"
263
+ msgstr ""
264
+
265
+ msgid "Upgrade"
266
+ msgstr ""
267
+
268
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
269
  msgstr ""
languages/ecwid-shopping-cart-ru_RU.mo CHANGED
Binary file
languages/ecwid-shopping-cart-ru_RU.po CHANGED
@@ -1,482 +1,497 @@
1
- msgid "Ecwid Shopping Cart"
2
- msgstr "Интернет-магазин Эквид"
3
-
4
- msgid "Ecwid Team"
5
- msgstr "Ecwid Team"
6
-
7
- msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
8
- msgstr "Эквид – бесплатный полнофункциональный интернет-магазин. Легко встраивается в любой WordPress сайт и настраивается за 5 минут."
9
-
10
- msgid "Get help"
11
- msgstr "Получить помощь"
12
-
13
- msgid "Go to Ecwid site"
14
- msgstr "Пройти на сайт Эквида"
15
-
16
- msgid "Visit storefront"
17
- msgstr "Открыть страницу магазина"
18
-
19
- msgid "Manage my store"
20
- msgstr "Управлять магазином"
21
-
22
- msgid "Manage plugin settings"
23
- msgstr "Изменить настройки плагина"
24
-
25
- msgid "→ Sell on Facebook"
26
- msgstr "→ Начать продавать на Facebook"
27
-
28
- msgid "<a %s>Online store powered by Ecwid</a>"
29
- msgstr "<a %s>Интернет магазин построен на Эквиде</a>"
30
-
31
- msgid "Store"
32
- msgstr "Магазин"
33
-
34
- msgid "Ecwid shopping cart settings"
35
- msgstr "Настройки Ecwid"
36
-
37
- msgid "Ecwid Store"
38
- msgstr "Магазин Ecwid"
39
-
40
- msgid "Setup"
41
- msgstr "Настройки"
42
-
43
- msgid "Dashboard"
44
- msgstr "Консоль"
45
-
46
- msgid "Appearance settings"
47
- msgstr "Настройки внешнего вида"
48
-
49
- msgid "Appearance"
50
- msgstr "Внешний вид"
51
-
52
- msgid "Advanced settings"
53
- msgstr "Дополнительные настройки"
54
-
55
- msgid "Advanced"
56
- msgstr "Дополнительные"
57
-
58
- msgid "Hidden category"
59
- msgstr "Скрытая категория"
60
-
61
- msgid "If you like Ecwid and want to help it grow and become the most popular e-commerce solution, you can now add a fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
62
- msgstr "Если вам нравится Эквид и вы хотите помочь ему расти и стать самым популярным конструктором интернет-магазинов, вы можете добавить значок Эквида на ваш сайт, чтобы показать посетителям, что вы пользуетесь Эквидом."
63
-
64
- msgid "Ecwid Badge"
65
- msgstr "Значок Эквида"
66
-
67
- msgid "Ecwid shopping cart widget"
68
- msgstr "Виджет интернет-магазина Эквид"
69
-
70
- msgid "Ecwid ecommerce solution"
71
- msgstr "Решение для электронной коммерции Эквид"
72
-
73
- msgid "Ecwid free shopping cart"
74
- msgstr "Беспланный конструктов интернет-магазинов Эквид"
75
-
76
- msgid "Ecwid shopping cart"
77
- msgstr "Интернет-магазин Эквид"
78
-
79
- msgid "Ecwid e-commerce widgets"
80
- msgstr "Виджеты для электронной коммерции Эквид"
81
-
82
- msgid "Your store's minicart"
83
- msgstr "Корзина вашего магазина"
84
-
85
- msgid "Ecwid Shopping Bag (Normal)"
86
- msgstr "Корзина Эквида (Основной режим)"
87
-
88
- msgid "Ecwid Shopping Bag (Mini view)"
89
- msgstr "Корзина Эквида (Компактная)"
90
-
91
- msgid "Your store's search box"
92
- msgstr "Форма поиска по вашему магазину"
93
-
94
- msgid "Ecwid Search Box"
95
- msgstr "Поиск по Эквид-магазину"
96
-
97
- msgid "Vertical menu of categories"
98
- msgstr "Вертикальное меню категорий"
99
-
100
- msgid "Ecwid Vertical Categories"
101
- msgstr "Вертикальное меню категорий Эквида"
102
-
103
- msgid "A link to your store page"
104
- msgstr "Ссылка на страницу с вашим Эквид-магазином"
105
-
106
- msgid "Ecwid Store Page Link"
107
- msgstr "Ссылка на Эквид-магазин"
108
-
109
- msgid "Shop"
110
- msgstr "Магазин"
111
-
112
- msgid "A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop."
113
- msgstr "Список товаров, просмотренных посетителями. Добавьте этот виджет в сайдбар, чтобы позволить клиентам быстро перейти к товарам, которые они просматривали ранее."
114
-
115
- msgid "Recently Viewed Products"
116
- msgstr "Просмотренные товары"
117
-
118
- msgid "Number of products to show"
119
- msgstr "Количество товаров для отображения"
120
-
121
- msgid "Greetings! Your Ecwid store is now active."
122
- msgstr "Добро пожаловать в Эквид!"
123
-
124
- msgid "Take a few simple steps to complete store setup"
125
- msgstr "Магазин почти готов — осталось несколько простых шагов"
126
-
127
- msgid "Set up Ecwid Store"
128
- msgstr "Настроить магазин"
129
-
130
- msgid "Good job! Your store is set up and you're ready to sell."
131
- msgstr "Отлично! Магазин установлен и готов к продажам."
132
-
133
- msgid "Now you can fine-tune your store's appearance"
134
- msgstr "Теперь вы можете настроить внешний вид витрины"
135
-
136
- msgid "Visit Storefront"
137
- msgstr "Открыть витрину"
138
-
139
- msgid "Configure Appearance"
140
- msgstr "Настроить внешний вид"
141
-
142
- msgid "Your store is almost ready!"
143
- msgstr "Магазин почти готов!"
144
-
145
- msgid "Connect your Ecwid account with this site to complete setup and start selling"
146
- msgstr "Привяжите Эквид-аккаунт к сайту, чтобы завершить установку и начать продавать"
147
-
148
- msgid "Connect Your Ecwid Store"
149
- msgstr "Привязать Эквид-аккаунт"
150
-
151
- msgid "To add extra functions to your store, drag and drop Ecwid store elements on your site. When you're done, you can get back to modifying your settings."
152
- msgstr "Добавьте дополнительные элементы магазина, перетащив виджеты Эквида в нужное место сайта. После установки виджетов можете вернуться к настройкам магазина."
153
-
154
- msgid "Back to Store Settings"
155
- msgstr "Вернуться к настройкам"
156
-
157
- msgid "Do you like your Ecwid online store? We'd appreciate it if you add your review and vote for the plugin on Wordpress site."
158
- msgstr "Вам нравится ваш Эквид-магазин? Будем благодарны, если вы оставите отзыв и проголосуете за Эквид на сайте WordPress."
159
-
160
- msgid "Rate Ecwid at WordPress.org"
161
- msgstr "Оценить Эквид на WordPress.org"
162
-
163
- msgid "Add Store"
164
- msgstr "Добавить магазин"
165
-
166
- msgid "Edit Store"
167
- msgstr "Настройки магазина"
168
-
169
- msgid "Edit Appearance"
170
- msgstr "Настроить внешний вид"
171
-
172
- msgid "Price"
173
- msgstr "Цена"
174
-
175
- msgid "Never show this message again"
176
- msgstr "Больше не показывать это сообщение"
177
-
178
- msgid "Ecwid Shopping Cart — Advanced settings"
179
- msgstr "Магазин Ecwid — Дополнительные настройки"
180
-
181
- msgid "Category shown by default"
182
- msgstr "Категория, показываемая по умолчанию"
183
-
184
- msgid "Store root category"
185
- msgstr "Корневая категория магазина"
186
-
187
- msgid "Default category ID"
188
- msgstr "ID категории по умолчанию"
189
-
190
- msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
191
- msgstr "По умолчанию, магазин показывает корневые категории. Здесь можно выбрать другую категорию для отображения, когда покупатель впервые открывает ваш магазин. Это может быть полезно, если у вас есть только одна категория или вы хотите показывать определённые набор товаров (например, специальные предложения) новым пользователям."
192
-
193
- msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
194
- msgstr "Чтобы выставить категорию, <a %s>найдите ID нужной категории</a> и введите в это поле."
195
-
196
- msgid "Single Sign-On Secret Key"
197
- msgstr "Секретный ключ системы единой авторизации"
198
-
199
- msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
200
- msgstr "Эта функция позволяет включить систему единой авторизации: когда покупатели вошли в свой аккаунт на вашем сайте, они автоматически входят в свой Эквид-аккаунт, даже если раньше у них его не было. Эта функция может быть полезна в случае, если ваши посетители создают свои аккаунты на вашем сайте."
201
-
202
- msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > Apps > Legacy API Keys > Single Sign-On Secret Key\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
203
- msgstr "Чтобы включить эту функцию, вам необходимо ввести секретный ключ. Его можно найти в панели управления Эквида в секции \"Настройки > Apps > Legacy API Keys > Секретный ключ SSO\". Эта функция доступна только пользователям с <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">платным аккаунтом</a>."
204
-
205
- msgid "Save changes"
206
- msgstr "Сохранить изменения"
207
-
208
- msgid "Ecwid Shopping Cart Appearance settings"
209
- msgstr "Магазин Ecwid Настройки внешнего вида"
210
-
211
- msgid "Display search box above products"
212
- msgstr "Показывать форму поиска над списком продуктов"
213
-
214
- msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
215
- msgstr "Или вы можете добавить форму поиска на ваш сайт с помощью <a href=\"%s\">виджетов WordPress</a>"
216
-
217
- msgid "Display horizontal categories above products"
218
- msgstr "Показывать горизонтальное меню категорий над списком продуктов"
219
-
220
- msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
221
- msgstr "Или вы можете добавить вертикальное меню категорий на ваш сайт с помощью <a href=\"%s\">виджетов WordPress</a>"
222
-
223
- msgid "Enable minicart attached to horizontal categories"
224
- msgstr "Показывать корзину у горизонтального меню категорий"
225
-
226
- msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
227
- msgstr "Если вы добавили виджет корзины в боковое меню, следует отключить эту настройку"
228
-
229
- msgid "Number of categories per row"
230
- msgstr "Количество категорий в ряд"
231
-
232
- msgid "Number of products per page"
233
- msgstr "Количество продуктов на странице"
234
-
235
- msgid "Grid view"
236
- msgstr "Вид \"сетка\""
237
-
238
- msgid "List view"
239
- msgstr "Вид \"список\""
240
-
241
- msgid "Table view"
242
- msgstr "Вид \"таблица\""
243
-
244
- msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
245
- msgstr "Здесь вы можете задать количество отображаемых продуктов на странице. Эти цифры определяют максимальные значения. Если на странице в сетке продуктов будет недостаточно места для отображения всех столбцов, Эквид уменьшит их количество."
246
-
247
- msgid "Default view mode on product pages"
248
- msgstr "Вид страницы продуктов по умолчанию"
249
-
250
- msgid "Grid"
251
- msgstr "Сетка"
252
-
253
- msgid "List"
254
- msgstr "Список"
255
-
256
- msgid "Table"
257
- msgstr "Таблица"
258
-
259
- msgid "Default view mode on search results"
260
- msgstr "Вид страницы результатов поиска по умолчанию"
261
-
262
- msgid "Connect your store<br /> to this WordPress site"
263
- msgstr "Подключите магазин<br /> к своему WordPress сайту"
264
-
265
- msgid "Connect Ecwid store"
266
- msgstr "Подключить"
267
-
268
- msgid "After clicking button you need to login and accept permissions to use our plugin"
269
- msgstr "Нажмите на кнопку, авторизуйтесь в Эквиде и выдайте запрошенные права доступа"
270
-
271
- msgid "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
272
- msgstr "Ошибка подключения: после нажатия на кнопку, авторизуйтесь в Эквиде и предоставьте запрашиваемые права."
273
-
274
- msgid "Don't have Ecwid account? Create it here"
275
- msgstr "Ещё нет аккаунта в Эквиде? Зарегистрируйтесь"
276
-
277
- msgid "Questions? Visit <a %s>Ecwid support center</a>"
278
- msgstr "Есть вопросы? Посетите <a %s>Центр поддержки Эквида (англ)</a> или <a target=\"_blank\" href=\"http://www.ecwid.com/forums/forumdisplay.php?f=10\"> русскоязычный раздел форума</a>"
279
-
280
- msgid "Store ID"
281
- msgstr "ID Магазина"
282
-
283
- msgid "Disconnect store"
284
- msgstr "Отсоединить магазин"
285
-
286
- msgid "Congratulations!"
287
- msgstr "Поздравляем!"
288
-
289
- msgid "Your Ecwid store is now connected<br /> to your WordPress website"
290
- msgstr "Эквид-магазин успешно подключен<br /> к вашему WordPress сайту"
291
-
292
- msgid "Greetings!"
293
- msgstr "Приветствуем!"
294
-
295
- msgid "Your Ecwid store is connected<br /> to your WordPress website"
296
- msgstr "Эквид-магазин подключен<br /> к вашему WordPress сайту"
297
-
298
- msgid "Open control panel"
299
- msgstr "Открыть панель управления"
300
-
301
- msgid "Plugin is installed successfully!"
302
- msgstr "Плагин успешно установлен!"
303
-
304
- msgid "There are just a few steps left to start selling<br /> on your WordPress site"
305
- msgstr "До открытия магазина на вашем WordPress сайте<br /> осталось несколько простых шагов"
306
-
307
- msgid "There are few little steps left to start selling<br /> on your WordPress site"
308
- msgstr "До открытия магазина на вашем WordPress сайте<br /> осталось несколько простых шагов"
309
-
310
- msgid "Register"
311
- msgstr "Зарегистрируйтесь"
312
-
313
- msgid "Create a free Ecwid account to manage your store and inventory.<br /> No credit card required"
314
- msgstr "Зарегистрируйте бесплатный аккаунт в Эквиде.<br /> Кредитная карта не требуется"
315
-
316
- msgid "Connect"
317
- msgstr "Подключите магазин"
318
-
319
- msgid "Add your Ecwid store to your site <nobr>in two clicks</nobr>"
320
- msgstr "Подключите свой Эквид-магазин к сайту <nobr>в два клика</nobr>"
321
-
322
- msgid "Connect your Ecwid store to this site <nobr>in two clicks</nobr>"
323
- msgstr "Подключите свой Эквид-магазин к сайту <nobr>в два клика</nobr>"
324
-
325
- msgid "Start selling"
326
- msgstr "Начните продавать"
327
-
328
- msgid "Your storefront is ready"
329
- msgstr "Магазин открыт для покупателей"
330
-
331
- msgid "Create Ecwid store"
332
- msgstr "Создать магазин бесплатно"
333
-
334
- msgid "Connect your store"
335
- msgstr "Подключить магазин"
336
-
337
- msgid "Free registration, No credit card required"
338
- msgstr "Регистрация бесплатна, кредитная карта не требуется"
339
-
340
- msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
341
- msgstr "Ошибка подключения: пожалуйста, нажмите кнопку ещё раз и предоставьте права доступа плагину<br /> для публикации своего Эквид-магазина на этом сайте."
342
-
343
- msgid "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
344
- msgstr "Вам будет предложено войти в панель управления Эквида<br />и предоставить права доступа для отображения магазина на вашем сайте"
345
-
346
- msgid "Already have Ecwid account?"
347
- msgstr "Уже есть аккаунт в Эквиде?"
348
-
349
- msgid "Connect your store to Wordpress site"
350
- msgstr "Подключить магазин к своему сайту"
351
-
352
- msgid "Don't have an Ecwid account?"
353
- msgstr "Ещё нет аккаунта в Эквиде?"
354
-
355
- msgid "Register at Ecwid for free"
356
- msgstr "Зарегистрироваться бесплатно"
357
-
358
- msgid "No credit card required"
359
- msgstr "Кредитная карта не требуется"
360
-
361
- msgid "Get ready to sell online"
362
- msgstr "Продавать онлайн – это просто"
363
-
364
- msgid "Sell Everywhere<br>with your Ecwid store"
365
- msgstr "Продавайте там,<br> где ваши клиенты"
366
-
367
- msgid "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
368
- msgstr "Откройте продажи на своём WordPress сайте, а затем разместите витрину магазина в социальных сетях, блоге, и выгрузите товары на торговые площадки Яндекс.Маркет, eBay и Google Shopping."
369
-
370
- msgid "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
371
- msgstr "Используйте наше мобильное приложение, чтобы получать и обрабатывать заказы в любой точке продаж. Все изменения синхронизируются с магазином на лету."
372
-
373
- msgid "Features"
374
- msgstr "Преимущества"
375
-
376
- msgid "Compatible with your theme"
377
- msgstr "Работает с вашей темой"
378
-
379
- msgid "Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box."
380
- msgstr "Эквид совместим с темой<br>\"%s\" вашего сайта из коробки."
381
-
382
- msgid "Free and always up to date"
383
- msgstr "Бесплатный план и обновления"
384
-
385
- msgid "Free plan always available with tons of features<br>at no additional cost. Seamless upgrades occur<br>automatically for free."
386
- msgstr "Всегда доступный бесплатный план с множеством<br>возможностей. Обновления магазина автоматизированы,<br> бесплатны и не требуют вашего участия."
387
-
388
- msgid "Responsive design"
389
- msgstr "Адаптивный дизайн"
390
-
391
- msgid "Your store looks perfect<br />on all devices"
392
- msgstr "Ваш магазин выглядит превосходно<br />на любом устройстве: планшете, смартфоне и ноутбуке."
393
-
394
- msgid "PCI-DSS Certified"
395
- msgstr "Сертификация по PCI-DSS"
396
-
397
- msgid "Secure checkout with over 40<br />payment options"
398
- msgstr "Эквид сертифицирован по стандарту Level 1 PCI-DSS – самому высокому уровню безопасности передачи данных."
399
-
400
- msgid "Global Reach"
401
- msgstr "Глобальное решение"
402
-
403
- msgid "More than 800,000 merchants in 175 countries"
404
- msgstr "Эквид уже используют 800,000 продавцов из 175 стран"
405
-
406
- msgid "Start selling <br>on your WordPress <nobr>site for free</nobr>"
407
- msgstr "Начните продавать<br>на своём Wordpress <nobr>сайте бесплатно</nobr>"
408
-
409
- msgid "Get Started, Create Ecwid Account"
410
- msgstr "Зарегистрировать аккаунт"
411
-
412
- msgid "Connect your store to this site"
413
- msgstr "Подключить магазин к своему сайту"
414
-
415
- msgid "Reconnect your store<br /> to this WordPress site"
416
- msgstr "Reconnect your store<br /> to this WordPress site"
417
-
418
- msgid "Reconnect Ecwid store"
419
- msgstr "Reconnect Ecwid store"
420
-
421
- msgid "New features available, reconnect to be in touch with our updates"
422
- msgstr "New features available, reconnect to be in touch with our updates"
423
-
424
- msgid "Add store"
425
- msgstr "Add store"
426
-
427
- msgid "Store settings"
428
- msgstr "Настройки магазина"
429
-
430
- msgid "Choose widgets to show"
431
- msgstr "Виджеты витрины магазина"
432
-
433
- msgid "Product catalog will be shown automatically"
434
- msgstr "Каталог товаров отображается по умолчанию"
435
-
436
- msgid "Show search"
437
- msgstr "Поиск"
438
-
439
- msgid "Show minicart"
440
- msgstr "Мини-корзина"
441
-
442
- msgid "Show horizontal categories"
443
- msgstr "Горизонтальные категории"
444
-
445
- msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
446
- msgstr "Кроме того, вы можете добавить отдельные элементы магазина в сайдбар сайта используя <a %s>встроенные виджеты WordPress</a>"
447
-
448
- msgid "Demo store"
449
- msgstr "Демонстрационный магазин"
450
-
451
- msgid "Ecwid plugin settings"
452
- msgstr "Настройки плагина"
453
-
454
- msgid "Your store will be shown here!"
455
- msgstr "Здесь будет отображаться ваш магазин."
456
-
457
- msgid "Demo Store"
458
- msgstr "Демонстрационный магазин"
459
-
460
- msgid "Chameleon skin <sup>beta</sup>"
461
- msgstr "Тема \"Хамелеон\" <sup>бета</sup>"
462
-
463
- msgid "Automatic adjustment of your store design to your Wordpress theme. Whatever Wordpress theme you use, Ecwid will detect predominant colors and font and use them in your product catalog."
464
- msgstr "Автоматическая подстройка внешнего вида магазина под стили темы сайта. Включите эту опцию, чтобы Эквид определял цвета и шрифты сайта и исопльзовал их в каталоге товаров."
465
-
466
- msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>."
467
- msgstr "Мы добавили этот инструмент недавно, и он сейчас работает в бета-режиме. Если вы обнаружите какие-либо проблемы в его работе, пожалуйста, <a %s>сообщите нам</a>."
468
-
469
- msgid "Enter your Store ID"
470
- msgstr "Введите ваш ID Магазина"
471
-
472
- msgid "Where to find your Store ID:"
473
- msgstr "Где найти ID Магазина:"
474
-
475
- msgid "You will also get your Store ID by email."
476
- msgstr "Также вы получите ID вашего магазина на ваш e-mail."
477
-
478
- msgid "You have not viewed any product yet. Open store."
479
- msgstr "Вы пока что не просмотрели ни одного товара. Перейти в магазин."
480
-
481
- msgid "Store ID is a unique identifier of your Ecwid account. You can find it in your Ecwid control panel: open the <a %s>Dashboard page</a> and find the \"<b>Store ID: NNNNNNN</b>\" text, where <b>NNNNNNN</b> is your Store&nbsp;ID."
482
- msgstr "ID магазина это уникальный номер аккаунта в Эквиде. Вы можете его найти в панели управления Эквид-магазина: откройте страницу \"<a %s>Консоль</a>\" и найдите текст \"<b>ID&nbsp;Магазина&nbsp;NNNNNNN</b>\". "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid "Ecwid Shopping Cart"
2
+ msgstr "Интернет-магазин Эквид"
3
+
4
+ msgid "Ecwid Team"
5
+ msgstr "Ecwid Team"
6
+
7
+ msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
8
+ msgstr "Эквид – бесплатный полнофункциональный интернет-магазин. Легко встраивается в любой WordPress сайт и настраивается за 5 минут."
9
+
10
+ msgid "Get help"
11
+ msgstr "Получить помощь"
12
+
13
+ msgid "Go to Ecwid site"
14
+ msgstr "Пройти на сайт Эквида"
15
+
16
+ msgid "Visit storefront"
17
+ msgstr "Открыть страницу магазина"
18
+
19
+ msgid "Manage my store"
20
+ msgstr "Управлять магазином"
21
+
22
+ msgid "Manage plugin settings"
23
+ msgstr "Изменить настройки плагина"
24
+
25
+ msgid "→ Sell on Facebook"
26
+ msgstr "→ Начать продавать на Facebook"
27
+
28
+ msgid "<a %s>Online store powered by Ecwid</a>"
29
+ msgstr "<a %s>Интернет магазин построен на Эквиде</a>"
30
+
31
+ msgid "Store"
32
+ msgstr "Магазин"
33
+
34
+ msgid "Ecwid shopping cart settings"
35
+ msgstr "Настройки Ecwid"
36
+
37
+ msgid "Ecwid Store"
38
+ msgstr "Магазин Ecwid"
39
+
40
+ msgid "Setup"
41
+ msgstr "Настройки"
42
+
43
+ msgid "Dashboard"
44
+ msgstr "Консоль"
45
+
46
+ msgid "Appearance settings"
47
+ msgstr "Настройки внешнего вида"
48
+
49
+ msgid "Appearance"
50
+ msgstr "Внешний вид"
51
+
52
+ msgid "Advanced settings"
53
+ msgstr "Дополнительные настройки"
54
+
55
+ msgid "Advanced"
56
+ msgstr "Дополнительные"
57
+
58
+ msgid "Hidden category"
59
+ msgstr "Скрытая категория"
60
+
61
+ msgid "Do you like Ecwid and want to help it grow? You can add this fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
62
+ msgstr "Если вам нравится Эквид и вы хотите помочь ему стать самым популярным конструктором интернет-магазинов, вы можете добавить значок на сайт, чтобы показать посетителям, что вы пользуетесь Эквидом."
63
+
64
+ msgid "Ecwid Badge"
65
+ msgstr "Значок Эквида"
66
+
67
+ msgid "Ecwid shopping cart widget"
68
+ msgstr "Виджет интернет-магазина Эквид"
69
+
70
+ msgid "Ecwid ecommerce solution"
71
+ msgstr "Решение для электронной коммерции Эквид"
72
+
73
+ msgid "Ecwid free shopping cart"
74
+ msgstr "Беспланный конструктов интернет-магазинов Эквид"
75
+
76
+ msgid "Ecwid shopping cart"
77
+ msgstr "Интернет-магазин Эквид"
78
+
79
+ msgid "Ecwid e-commerce widgets"
80
+ msgstr "Виджеты для электронной коммерции Эквид"
81
+
82
+ msgid "Your store's minicart"
83
+ msgstr "Корзина вашего магазина"
84
+
85
+ msgid "Shopping Cart"
86
+ msgstr "Корзина"
87
+
88
+ msgid "Adds a cart widget for customer to see the products they added to the cart."
89
+ msgstr "Добавляет виджет корзины покупателя для быстрого доступа к добавленным товарам."
90
+
91
+ msgid "Shopping Cart (Mini)"
92
+ msgstr "Корзина (Мини)"
93
+
94
+ msgid "Adds a compact cart widget for customer to see the products they added to the cart."
95
+ msgstr "Добавляет компактный виджет корзины покупателя для быстрого доступа к добавленным товарам."
96
+
97
+ msgid "Displays a simple search box for your customers to find a product in your store"
98
+ msgstr "Показывает покупателю поле поиска товаров в магазине"
99
+
100
+ msgid "Product Search"
101
+ msgstr "Поиск товаров"
102
+
103
+ msgid "Adds vertical categories block to let the customer navigate your store."
104
+ msgstr "Показывает вертикальный список категорий для удобной навигации по магазину."
105
+
106
+ msgid "Store Categories"
107
+ msgstr "Категории магазина"
108
+
109
+ msgid "Displays a link to the store page in sidebar for customer to quickly access your store from any page on the site."
110
+ msgstr "Показывает ссылку на страницу магазина, позволяющую покупателю быстро открыть магазин из любой страницы на сайте."
111
+
112
+ msgid "Store Page Link"
113
+ msgstr "Ссылка на магазин"
114
+
115
+ msgid "Shop"
116
+ msgstr "Магазин"
117
+
118
+ msgid "Displays a list of products recently viewed by the customer to easily return to the products they saw in your shop."
119
+ msgstr "Показывает список товаров, просмотренных покупателем. Позволяет покупателю быстро перейти к товарам, которые их заинтересовали раньше."
120
+
121
+ msgid "Recently Viewed Products"
122
+ msgstr "Просмотренные товары"
123
+
124
+ msgid "Number of products to show"
125
+ msgstr "Количество товаров для отображения"
126
+
127
+ msgid "Greetings! Your Ecwid store is now active."
128
+ msgstr "Добро пожаловать в Эквид!"
129
+
130
+ msgid "Take a few simple steps to complete store setup"
131
+ msgstr "Магазин почти готов осталось несколько простых шагов"
132
+
133
+ msgid "Set up Ecwid Store"
134
+ msgstr "Настроить магазин"
135
+
136
+ msgid "Good job! Your store is set up and you're ready to sell."
137
+ msgstr "Отлично! Магазин установлен и готов к продажам."
138
+
139
+ msgid "Now you can fine-tune your store's appearance"
140
+ msgstr "Теперь вы можете настроить внешний вид витрины"
141
+
142
+ msgid "Visit Storefront"
143
+ msgstr "Открыть витрину"
144
+
145
+ msgid "Configure Appearance"
146
+ msgstr "Настроить внешний вид"
147
+
148
+ msgid "Your store is almost ready!"
149
+ msgstr "Магазин почти готов!"
150
+
151
+ msgid "Connect your Ecwid account with this site to complete setup and start selling"
152
+ msgstr "Привяжите Эквид-аккаунт к сайту, чтобы завершить установку и начать продавать"
153
+
154
+ msgid "Connect Your Ecwid Store"
155
+ msgstr "Привязать Эквид-аккаунт"
156
+
157
+ msgid "To add extra functions to your store, drag and drop Ecwid store elements on your site. When you're done, you can get back to modifying your settings."
158
+ msgstr "Добавьте дополнительные элементы магазина, перетащив виджеты Эквида в нужное место сайта. После установки виджетов можете вернуться к настройкам магазина."
159
+
160
+ msgid "Back to Store Settings"
161
+ msgstr "Вернуться к настройкам"
162
+
163
+ msgid "Do you like your Ecwid online store? We'd appreciate it if you add your review and vote for the plugin on Wordpress site."
164
+ msgstr "Вам нравится ваш Эквид-магазин? Будем благодарны, если вы оставите отзыв и проголосуете за Эквид на сайте WordPress."
165
+
166
+ msgid "Rate Ecwid at WordPress.org"
167
+ msgstr "Оценить Эквид на WordPress.org"
168
+
169
+ msgid "Add Store"
170
+ msgstr "Добавить магазин"
171
+
172
+ msgid "Edit Store"
173
+ msgstr "Настройки магазина"
174
+
175
+ msgid "Edit Appearance"
176
+ msgstr "Настроить внешний вид"
177
+
178
+ msgid "Price"
179
+ msgstr "Цена"
180
+
181
+ msgid "Never show this message again"
182
+ msgstr "Больше не показывать это сообщение"
183
+
184
+ msgid "Ecwid Shopping Cart — Advanced settings"
185
+ msgstr "Магазин Ecwid — Дополнительные настройки"
186
+
187
+ msgid "Category shown by default"
188
+ msgstr "Категория, показываемая по умолчанию"
189
+
190
+ msgid "Store root category"
191
+ msgstr "Корневая категория магазина"
192
+
193
+ msgid "Default category ID"
194
+ msgstr "ID категории по умолчанию"
195
+
196
+ msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
197
+ msgstr "По умолчанию, магазин показывает корневые категории. Здесь можно выбрать другую категорию для отображения, когда покупатель впервые открывает ваш магазин. Это может быть полезно, если у вас есть только одна категория или вы хотите показывать определённые набор товаров (например, специальные предложения) новым пользователям."
198
+
199
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
200
+ msgstr "Чтобы выставить категорию, <a %s>найдите ID нужной категории</a> и введите в это поле."
201
+
202
+ msgid "Single Sign-On Secret Key"
203
+ msgstr "Секретный ключ системы единой авторизации"
204
+
205
+ msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
206
+ msgstr "Эта функция позволяет включить систему единой авторизации: когда покупатели вошли в свой аккаунт на вашем сайте, они автоматически входят в свой Эквид-аккаунт, даже если раньше у них его не было. Эта функция может быть полезна в случае, если ваши посетители создают свои аккаунты на вашем сайте."
207
+
208
+ msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > Apps > Legacy API Keys > Single Sign-On Secret Key\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
209
+ msgstr "Чтобы включить эту функцию, вам необходимо ввести секретный ключ. Его можно найти в панели управления Эквида в секции \"Настройки > Apps > Legacy API Keys > Секретный ключ SSO\". Эта функция доступна только пользователям с <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">платным аккаунтом</a>."
210
+
211
+ msgid "Save changes"
212
+ msgstr "Сохранить изменения"
213
+
214
+ msgid "Ecwid Shopping Cart Appearance settings"
215
+ msgstr "Магазин Ecwid Настройки внешнего вида"
216
+
217
+ msgid "Display search box above products"
218
+ msgstr "Показывать форму поиска над списком продуктов"
219
+
220
+ msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
221
+ msgstr "Или вы можете добавить форму поиска на ваш сайт с помощью <a href=\"%s\">виджетов WordPress</a>"
222
+
223
+ msgid "Display categories above products"
224
+ msgstr "Показывать меню категорий над списком продуктов"
225
+
226
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
227
+ msgstr "Или вы можете добавить вертикальное меню категорий на ваш сайт с помощью <a href=\"%s\">виджетов WordPress</a>"
228
+
229
+ msgid "Enable minicart attached to categories"
230
+ msgstr "Показывать корзину у меню категорий"
231
+
232
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
233
+ msgstr "Если вы добавили виджет корзины в боковое меню, следует отключить эту настройку"
234
+
235
+ msgid "Number of categories per row"
236
+ msgstr "Количество категорий в ряд"
237
+
238
+ msgid "Number of products per page"
239
+ msgstr "Количество продуктов на странице"
240
+
241
+ msgid "Grid view"
242
+ msgstr "Вид \"сетка\""
243
+
244
+ msgid "List view"
245
+ msgstr "Вид \"список\""
246
+
247
+ msgid "Table view"
248
+ msgstr "Вид \"таблица\""
249
+
250
+ msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
251
+ msgstr "Здесь вы можете задать количество отображаемых продуктов на странице. Эти цифры определяют максимальные значения. Если на странице в сетке продуктов будет недостаточно места для отображения всех столбцов, Эквид уменьшит их количество."
252
+
253
+ msgid "Default view mode on product pages"
254
+ msgstr "Вид страницы продуктов по умолчанию"
255
+
256
+ msgid "Grid"
257
+ msgstr "Сетка"
258
+
259
+ msgid "List"
260
+ msgstr "Список"
261
+
262
+ msgid "Table"
263
+ msgstr "Таблица"
264
+
265
+ msgid "Default view mode on search results"
266
+ msgstr "Вид страницы результатов поиска по умолчанию"
267
+
268
+ msgid "Connect your store<br /> to this WordPress site"
269
+ msgstr "Подключите магазин<br /> к своему WordPress сайту"
270
+
271
+ msgid "Connect Ecwid store"
272
+ msgstr "Подключить"
273
+
274
+ msgid "After clicking button you need to login and accept permissions to use our plugin"
275
+ msgstr "Нажмите на кнопку, авторизуйтесь в Эквиде и выдайте запрошенные права доступа"
276
+
277
+ msgid "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
278
+ msgstr "Ошибка подключения: после нажатия на кнопку, авторизуйтесь в Эквиде и предоставьте запрашиваемые права."
279
+
280
+ msgid "Don't have Ecwid account? Create it here"
281
+ msgstr "Ещё нет аккаунта в Эквиде? Зарегистрируйтесь"
282
+
283
+ msgid "Questions? Visit <a %s>Ecwid support center</a>"
284
+ msgstr "Есть вопросы? Посетите <a %s>Центр поддержки Эквида (англ)</a> или <a target=\"_blank\" href=\"http://www.ecwid.com/forums/forumdisplay.php?f=10\"> русскоязычный раздел форума</a>"
285
+
286
+ msgid "Store ID"
287
+ msgstr "ID Магазина"
288
+
289
+ msgid "Disconnect store"
290
+ msgstr "Отсоединить магазин"
291
+
292
+ msgid "Congratulations!"
293
+ msgstr "Поздравляем!"
294
+
295
+ msgid "Your Ecwid store is now connected<br /> to your WordPress website"
296
+ msgstr "Эквид-магазин успешно подключен<br /> к вашему WordPress сайту"
297
+
298
+ msgid "Greetings!"
299
+ msgstr "Приветствуем!"
300
+
301
+ msgid "Your Ecwid store is connected<br /> to your WordPress website"
302
+ msgstr "Эквид-магазин подключен<br /> к вашему WordPress сайту"
303
+
304
+ msgid "Open control panel"
305
+ msgstr "Открыть панель управления"
306
+
307
+ msgid "Plugin is installed successfully!"
308
+ msgstr "Плагин успешно установлен!"
309
+
310
+ msgid "There are just a few steps left to start selling<br /> on your WordPress site"
311
+ msgstr "До открытия магазина на вашем WordPress сайте<br /> осталось несколько простых шагов"
312
+
313
+ msgid "There are few little steps left to start selling<br /> on your WordPress site"
314
+ msgstr "До открытия магазина на вашем WordPress сайте<br /> осталось несколько простых шагов"
315
+
316
+ msgid "Register"
317
+ msgstr "Зарегистрируйтесь"
318
+
319
+ msgid "Create a free Ecwid account to manage your store and inventory.<br /> No credit card required"
320
+ msgstr "Зарегистрируйте бесплатный аккаунт в Эквиде.<br /> Кредитная карта не требуется"
321
+
322
+ msgid "Connect"
323
+ msgstr "Подключите магазин"
324
+
325
+ msgid "Add your Ecwid store to your site <nobr>in two clicks</nobr>"
326
+ msgstr "Подключите свой Эквид-магазин к сайту <nobr>в два клика</nobr>"
327
+
328
+ msgid "Connect your Ecwid store to this site <nobr>in two clicks</nobr>"
329
+ msgstr "Подключите свой Эквид-магазин к сайту <nobr>в два клика</nobr>"
330
+
331
+ msgid "Start selling"
332
+ msgstr "Начните продавать"
333
+
334
+ msgid "Your storefront is ready"
335
+ msgstr "Магазин открыт для покупателей"
336
+
337
+ msgid "Create Ecwid store"
338
+ msgstr "Создать магазин бесплатно"
339
+
340
+ msgid "Connect your store"
341
+ msgstr "Подключить магазин"
342
+
343
+ msgid "Free registration, No credit card required"
344
+ msgstr "Регистрация бесплатна, кредитная карта не требуется"
345
+
346
+ msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
347
+ msgstr "Ошибка подключения: пожалуйста, нажмите кнопку ещё раз и предоставьте права доступа плагину<br /> для публикации своего Эквид-магазина на этом сайте."
348
+
349
+ msgid "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
350
+ msgstr "Вам будет предложено войти в панель управления Эквида<br />и предоставить права доступа для отображения магазина на вашем сайте"
351
+
352
+ msgid "Already have Ecwid account?"
353
+ msgstr "Уже есть аккаунт в Эквиде?"
354
+
355
+ msgid "Connect your store to Wordpress site"
356
+ msgstr "Подключить магазин к своему сайту"
357
+
358
+ msgid "Don't have an Ecwid account?"
359
+ msgstr "Ещё нет аккаунта в Эквиде?"
360
+
361
+ msgid "Register at Ecwid for free"
362
+ msgstr "Зарегистрироваться бесплатно"
363
+
364
+ msgid "No credit card required"
365
+ msgstr "Кредитная карта не требуется"
366
+
367
+ msgid "Get ready to sell online"
368
+ msgstr "Продавать онлайн – это просто"
369
+
370
+ msgid "Sell Everywhere<br>with your Ecwid store"
371
+ msgstr "Продавайте там,<br> где ваши клиенты"
372
+
373
+ msgid "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
374
+ msgstr "Откройте продажи на своём WordPress сайте, а затем разместите витрину магазина в социальных сетях, блоге, и выгрузите товары на торговые площадки Яндекс.Маркет, eBay и Google Shopping."
375
+
376
+ msgid "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
377
+ msgstr "Используйте наше мобильное приложение, чтобы получать и обрабатывать заказы в любой точке продаж. Все изменения синхронизируются с магазином на лету."
378
+
379
+ msgid "Features"
380
+ msgstr "Преимущества"
381
+
382
+ msgid "Compatible with your theme"
383
+ msgstr "Работает с вашей темой"
384
+
385
+ msgid "Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box."
386
+ msgstr "Эквид совместим с темой<br>\"%s\" вашего сайта из коробки."
387
+
388
+ msgid "Free and always up to date"
389
+ msgstr "Бесплатный план и обновления"
390
+
391
+ msgid "Free plan always available with tons of features<br>at no additional cost. Seamless upgrades occur<br>automatically for free."
392
+ msgstr "Всегда доступный бесплатный план с множеством<br>возможностей. Обновления магазина автоматизированы,<br> бесплатны и не требуют вашего участия."
393
+
394
+ msgid "Responsive design"
395
+ msgstr "Адаптивный дизайн"
396
+
397
+ msgid "Your store looks perfect<br />on all devices"
398
+ msgstr "Ваш магазин выглядит превосходно<br />на любом устройстве: планшете, смартфоне и ноутбуке."
399
+
400
+ msgid "PCI-DSS Certified"
401
+ msgstr "Сертификация по PCI-DSS"
402
+
403
+ msgid "Secure checkout with over 40<br />payment options"
404
+ msgstr "Эквид сертифицирован по стандарту Level 1 PCI-DSS – самому высокому уровню безопасности передачи данных."
405
+
406
+ msgid "Global Reach"
407
+ msgstr "Глобальное решение"
408
+
409
+ msgid "More than 800,000 merchants in 175 countries"
410
+ msgstr "Эквид уже используют 800,000 продавцов из 175 стран"
411
+
412
+ msgid "Start selling <br>on your WordPress <nobr>site for free</nobr>"
413
+ msgstr "Начните продавать<br>на своём Wordpress <nobr>сайте бесплатно</nobr>"
414
+
415
+ msgid "Get Started, Create Ecwid Account"
416
+ msgstr "Зарегистрировать аккаунт"
417
+
418
+ msgid "Connect your store to this site"
419
+ msgstr "Подключить магазин к своему сайту"
420
+
421
+ msgid "Reconnect your store<br /> to this WordPress site"
422
+ msgstr "Reconnect your store<br /> to this WordPress site"
423
+
424
+ msgid "Reconnect Ecwid store"
425
+ msgstr "Reconnect Ecwid store"
426
+
427
+ msgid "New features available, reconnect to be in touch with our updates"
428
+ msgstr "New features available, reconnect to be in touch with our updates"
429
+
430
+ msgid "Add store"
431
+ msgstr "Add store"
432
+
433
+ msgid "Store settings"
434
+ msgstr "Настройки магазина"
435
+
436
+ msgid "Choose widgets to show"
437
+ msgstr "Виджеты витрины магазина"
438
+
439
+ msgid "Product catalog will be shown automatically"
440
+ msgstr "Каталог товаров отображается по умолчанию"
441
+
442
+ msgid "Show search"
443
+ msgstr "Поиск"
444
+
445
+ msgid "Show minicart"
446
+ msgstr "Мини-корзина"
447
+
448
+ msgid "Show categories"
449
+ msgstr "Меню категорий"
450
+
451
+ msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
452
+ msgstr "Кроме того, вы можете добавить отдельные элементы магазина в сайдбар сайта используя <a %s>встроенные виджеты WordPress</a>"
453
+
454
+ msgid "Demo store"
455
+ msgstr "Демонстрационный магазин"
456
+
457
+ msgid "Ecwid plugin settings"
458
+ msgstr "Настройки плагина"
459
+
460
+ msgid "Your store will be shown here!"
461
+ msgstr "Здесь будет отображаться ваш магазин."
462
+
463
+ msgid "Demo Store"
464
+ msgstr "Демонстрационный магазин"
465
+
466
+ msgid "Chameleon skin <sup>beta</sup>"
467
+ msgstr "Тема \"Хамелеон\" <sup>бета</sup>"
468
+
469
+ msgid "Automatic adjustment of your store design to your Wordpress theme. Whatever Wordpress theme you use, Ecwid will detect predominant colors and font and use them in your product catalog."
470
+ msgstr "Автоматическая подстройка внешнего вида магазина под стили темы сайта. Включите эту опцию, чтобы Эквид определял цвета и шрифты сайта и исопльзовал их в каталоге товаров."
471
+
472
+ msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>."
473
+ msgstr "Мы добавили этот инструмент недавно, и он сейчас работает в бета-режиме. Если вы обнаружите какие-либо проблемы в его работе, пожалуйста, <a %s>сообщите нам</a>."
474
+
475
+ msgid "Enter your Store ID"
476
+ msgstr "Введите ваш ID Магазина"
477
+
478
+ msgid "Where to find your Store ID:"
479
+ msgstr "Где найти ID Магазина:"
480
+
481
+ msgid "You will also get your Store ID by email."
482
+ msgstr "Также вы получите ID вашего магазина на ваш e-mail."
483
+
484
+ msgid "You have not viewed any product yet."
485
+ msgstr "Вы пока что не просмотрели ни одного товара."
486
+
487
+ msgid "Open {{store page title}}"
488
+ msgstr "Открыть {{store page title}}"
489
+
490
+ msgid "Store ID is a unique identifier of your Ecwid account. You can find it in your Ecwid control panel: open the <a %s>Dashboard page</a> and find the \"<b>Store ID: NNNNNNN</b>\" text, where <b>NNNNNNN</b> is your Store&nbsp;ID."
491
+ msgstr "ID магазина – это уникальный номер аккаунта в Эквиде. Вы можете его найти в панели управления Эквид-магазина: откройте страницу \"<a %s>Консоль</a>\" и найдите текст \"<b>ID&nbsp;Магазина&nbsp;NNNNNNN</b>\". "
492
+
493
+ msgid "Enable the new category menu"
494
+ msgstr "Включить новое меню категорий"
495
+
496
+ msgid "The new category menu looks better and is more mobile-friendly. If you haven't yet added category menu to your store page, you can do that in the <a %s>store page editor</a> (enable the \"Show categories\" option)"
497
+ msgstr "Новое меню категорий лучше выглядит и отлично работает на мобильных устройствах. Если у вас на странице магазина пока нет меню категорий, добавьте его в <a %s>настройках страницы магазина</a> (включите виджет \"Категории\")."
languages/ecwid-shopping-cart-tr_TR.po CHANGED
@@ -1,462 +1,462 @@
1
- msgid "Ecwid Shopping Cart"
2
- msgstr "Ecwid Shopping Cart"
3
-
4
- msgid "Ecwid Team"
5
- msgstr "Ecwid Team"
6
-
7
- msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
8
- msgstr "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
9
-
10
- msgid "Get help"
11
- msgstr "Yardım alın"
12
-
13
- msgid "Go to Ecwid site"
14
- msgstr "Ecwid web sitesine git"
15
-
16
- msgid "Visit storefront"
17
- msgstr "Mağazayı ziyaret et"
18
-
19
- msgid "Manage my store"
20
- msgstr "Mağaza yönetimi"
21
-
22
- msgid "Manage plugin settings"
23
- msgstr "Plugin ayarlarını değiştir"
24
-
25
- msgid "→ Sell on Facebook"
26
- msgstr "→ Facebook ile sat"
27
-
28
- msgid "<a %s>Online store powered by Ecwid</a>"
29
- msgstr "<a %s>Ecwid online mağaza çözümleri</a>"
30
-
31
- msgid "Store"
32
- msgstr "Mağaza"
33
-
34
- msgid "Ecwid shopping cart settings"
35
- msgstr "Ecwid alışveriş sepeti ayarları"
36
-
37
- msgid "Ecwid Store"
38
- msgstr "Ecwid Mağazası"
39
-
40
- msgid "Setup"
41
- msgstr "Kurulum"
42
-
43
- msgid "Dashboard"
44
- msgstr "Dashboard"
45
-
46
- msgid "Appearance settings"
47
- msgstr "Görünüm ayarları"
48
-
49
- msgid "Appearance"
50
- msgstr "Görünüm"
51
-
52
- msgid "Advanced settings"
53
- msgstr "Gelişmiş ayarlar"
54
-
55
- msgid "Advanced"
56
- msgstr "Gelişmiş"
57
-
58
- msgid "Hidden category"
59
- msgstr "Gizli kategori"
60
-
61
- msgid "If you like Ecwid and want to help it grow and become the most popular e-commerce solution, you can now add a fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
62
- msgstr "Ecwid online mağazasını beğendiyseniz ve büyümesine yardımcı olmak istiyorsanız, web sitenize güzel görünümlü 'Ecwid Tarafından Desteklenmektedir' yamasını ekleyebilir ve kullanıcılarınıza Ecwid mağazasının tanıtımını yapabilirsiniz."
63
-
64
- msgid "Ecwid Badge"
65
- msgstr "Ecwid Yaması"
66
-
67
- msgid "Ecwid shopping cart widget"
68
- msgstr "Ecwid alışveriş sepeti widgeti"
69
-
70
- msgid "Ecwid ecommerce solution"
71
- msgstr "Ecwid e-ticaret çözümü"
72
-
73
- msgid "Ecwid free shopping cart"
74
- msgstr "Ecwid ücretsiz alışveriş sepeti"
75
-
76
- msgid "Ecwid shopping cart"
77
- msgstr "Ecwid alışveriş sepeti"
78
-
79
- msgid "Ecwid e-commerce widgets"
80
- msgstr "Ecwid e-ticaret widgetleri"
81
-
82
- msgid "Your store's minicart"
83
- msgstr "Mağazanızın mini alışveriş sepeti"
84
-
85
- msgid "Ecwid Shopping Bag (Normal)"
86
- msgstr "Ecwid Alşv. Sepeti (Normal)"
87
-
88
- msgid "Ecwid Shopping Bag (Mini view)"
89
- msgstr "Ecwid Alşv. Sepeti (Küçük)"
90
-
91
- msgid "Your store's search box"
92
- msgstr "Mağazanız için arama kutusu"
93
-
94
- msgid "Ecwid Search Box"
95
- msgstr "Ecwid Arama Kutusu"
96
-
97
- msgid "Vertical menu of categories"
98
- msgstr "Dikey kategori menüsü"
99
-
100
- msgid "Ecwid Vertical Categories"
101
- msgstr "Ecwid Dikey Kategoriler"
102
-
103
- msgid "A link to your store page"
104
- msgstr "A link to your store page"
105
-
106
- msgid "Ecwid Store Page Link"
107
- msgstr "Ecwid Store Page Link"
108
-
109
- msgid "Shop"
110
- msgstr "Shop"
111
-
112
- msgid "A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop."
113
- msgstr "A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop."
114
-
115
- msgid "Recently Viewed Products"
116
- msgstr "Recently Viewed Products"
117
-
118
- msgid "Number of products to show"
119
- msgstr "Number of products to show"
120
-
121
- msgid "Greetings! Your Ecwid store is now active."
122
- msgstr "Tebrikler! Ecwid mağazanız artık etkin."
123
-
124
- msgid "Take a few simple steps to complete store setup"
125
- msgstr "Mağaza kurulumu için birkaç basit adımı tamamlayın"
126
-
127
- msgid "Set up Ecwid Store"
128
- msgstr "Ecwid Mağaza Kurulumu"
129
-
130
- msgid "Good job! Your store is set up and you're ready to sell."
131
- msgstr "Güzel! Mağazanız kuruldu, siparişleri kabul edebilirsiniz."
132
-
133
- msgid "Now you can fine-tune your store's appearance"
134
- msgstr "Artık mağaza görünümünü değiştirebilirsiniz"
135
-
136
- msgid "Visit Storefront"
137
- msgstr "Mağazayı Ziyaret Et"
138
-
139
- msgid "Configure Appearance"
140
- msgstr "Görünümü Değiştir"
141
-
142
- msgid "Your store is almost ready!"
143
- msgstr "Mağazanız neredeyse hazır!"
144
-
145
- msgid "Connect your Ecwid account with this site to complete setup and start selling"
146
- msgstr "Kurulumu tamamlamak ve satışa başlayabilmek için Ecwid hesabınıza bağlananın"
147
-
148
- msgid "Connect Your Ecwid Store"
149
- msgstr "Ecwid Mağazanıza Bağlanın"
150
-
151
- msgid "To add extra functions to your store, drag and drop Ecwid store elements on your site. When you're done, you can get back to modifying your settings."
152
- msgstr "Ek özellikleri kullanabilmek için Ecwid mağaza elemanlarını sitenize sürükleyerek bırakınız. İşlemlerinizi tamamladıktan sonra ayarlarınızı değiştirmeye devam edebilirsiniz."
153
-
154
- msgid "Back to Store Settings"
155
- msgstr "Mağaza Ayarlarına Dön"
156
-
157
- msgid "Do you like your Ecwid online store? We'd appreciate it if you add your review and vote for the plugin on Wordpress site."
158
- msgstr "Ecwid online mağazasını sevdiniz mi? Wordpress sayfasında eklentimizi oylamanız ve görüşlerinizi bildirmeniz bizi çok memnun edecektir."
159
-
160
- msgid "Rate Ecwid at WordPress.org"
161
- msgstr "WordPress.org sitesinde Ecwid uygulamasını oylayın"
162
-
163
- msgid "Add Store"
164
- msgstr "Add Store"
165
-
166
- msgid "Edit Store"
167
- msgstr "Edit Store"
168
-
169
- msgid "Edit Appearance"
170
- msgstr "Edit Appearance"
171
-
172
- msgid "Price"
173
- msgstr "Fiyat"
174
-
175
- msgid "Never show this message again"
176
- msgstr "Bu mesajı bir daha gösterme"
177
-
178
- msgid "Ecwid Shopping Cart — Advanced settings"
179
- msgstr "Ecwid Alışveriş Sepeti — Gelişmiş ayarlar"
180
-
181
- msgid "Category shown by default"
182
- msgstr "Varsayılan kategori görünümü"
183
-
184
- msgid "Store root category"
185
- msgstr "Mağaza kök kategorisi"
186
-
187
- msgid "Default category ID"
188
- msgstr "Varsayılan kategori ID"
189
-
190
- msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
191
- msgstr "Mağaza varsayılan olarak kök kategorilerin listesini görüntüler. Bu ayarı değiştirerek müşterilerinize belirli kategoriler görüntüleyebilirsiniz. Müşterilerinize mağazanızı ilk ziyaretlerinde belirli kategoriler veya ürünler (örn. \"Yeni Ürünler\") göstermek istiyorsanız bu ayar işinize yarayabilir."
192
-
193
- msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
194
- msgstr "Bu ayarı değiştirmek için, <a %s>gerekli kategori IDsini bulun ve </a> buraya kaydedin."
195
-
196
- msgid "Single Sign-On Secret Key"
197
- msgstr "Tek giriş (Single Sign-On) Gizli Anahtarı"
198
-
199
- msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
200
- msgstr "Tek giriş (Single Sign-On) gizli anahtarı müşterilerinizin WordPress sayfanızı Ecwid sayfanızı ziyaret eder gibi görüntülemelerini sağlar. Müşteriler sitenize giriş yaptıklarında otomatik olarak Ecwid mağazanıza da giriş yaparlar. Ziyaretçileriniz WordPress sayfanızda hesap oluşturmaya başladığında bu özelliği kullanabilirsiniz."
201
-
202
- msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
203
- msgstr "Bu özelliği etkinleştirmek için gizli anahtarı kullanmayı tercih edin. Bu gizli anahtarı Ecwid kontrol panelinizdeki \"Sistem Ayarları > API > Single Sign-On API\" sayfasında bulabilirsiniz. Ancak <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">ücretli kullanıcılar</a> bu özellikten faydalanabilir."
204
-
205
- msgid "Save changes"
206
- msgstr "Değişiklikleri kaydet"
207
-
208
- msgid "Ecwid Shopping Cart — Appearance settings"
209
- msgstr "Ecwid Alışveriş Sepeti — Görünüm ayarları"
210
-
211
- msgid "Display search box above products"
212
- msgstr "Arama kutusunu ürünlerin üzerinde göster"
213
-
214
- msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
215
- msgstr "Ya da arama kutusunu <a href=\"%s\">WordPress yerleşik widgetlerını</a> kullanarak ekleyebilirsiniz"
216
-
217
- msgid "Display horizontal categories above products"
218
- msgstr "Kategorileri ürünler üzerinde yatay olarak görüntüle"
219
-
220
- msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
221
- msgstr "Ya da dikey kategorileri sitenin araç çubuğuna <a href=\"%s\">WordPress yerleşik widgetlerını</a> kullanarak ekleyebilirsiniz"
222
-
223
- msgid "Enable minicart attached to horizontal categories"
224
- msgstr "Yatay kategorilere bağlı küçük sepeti etkinleştir"
225
-
226
- msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
227
- msgstr "Web sitenize küçük alışveriş sepeti eklediyseniz bu ayarı devre dışı bırakınız"
228
-
229
- msgid "Number of categories per row"
230
- msgstr "Satır başına kategori sayısı"
231
-
232
- msgid "Number of products per page"
233
- msgstr "Sayfa başına ürün sayısı"
234
-
235
- msgid "Grid view"
236
- msgstr "Izgara görünümü"
237
-
238
- msgid "List view"
239
- msgstr "Liste görünümü"
240
-
241
- msgid "Table view"
242
- msgstr "Tablo görünümü"
243
-
244
- msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
245
- msgstr "Sayfa başına kaç adet ürün görüntüleneceğini belirleyebilirsiniz. Bu seçenekler azami miktarları belirtmektedir. Tüm ürünleri görüntülemek için yeterli alan yok ise Ecwid sütunları tüm ürünleri gösterecek şekilde değiştirecektir."
246
-
247
- msgid "Default view mode on product pages"
248
- msgstr "Ürün sayfasının varsayılan görünümü"
249
-
250
- msgid "Grid"
251
- msgstr "Izgara"
252
-
253
- msgid "List"
254
- msgstr "Liste"
255
-
256
- msgid "Table"
257
- msgstr "Tablo"
258
-
259
- msgid "Default view mode on search results"
260
- msgstr "Arama sonuçlarının varsayılan görünümü"
261
-
262
- msgid "Connect your store<br /> to this WordPress site"
263
- msgstr "Connect your store<br /> to this WordPress site"
264
-
265
- msgid "Connect Ecwid store"
266
- msgstr "Connect Ecwid store"
267
-
268
- msgid "After clicking button you need to login and accept permissions to use our plugin"
269
- msgstr "After clicking button you need to login and accept permissions to use our plugin"
270
-
271
- msgid "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
272
- msgstr "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
273
-
274
- msgid "Don't have Ecwid account? Create it here"
275
- msgstr "Don't have Ecwid account? Create it here"
276
-
277
- msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
278
- msgstr "Sorun mu yaşıyorsunuz? <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid destek merkezini</a> ziyaret edin"
279
-
280
- msgid "Store ID"
281
- msgstr "Mağaza ID"
282
-
283
- msgid "Disconnect store"
284
- msgstr "Disconnect store"
285
-
286
- msgid "Congratulations!"
287
- msgstr "Tebrikler!"
288
-
289
- msgid "Your Ecwid store is now connected<br /> to your WordPress website"
290
- msgstr "Your Ecwid store is now connected<br /> to your WordPress website"
291
-
292
- msgid "Greetings!"
293
- msgstr "Tebrikler!"
294
-
295
- msgid "Your Ecwid store is connected<br /> to your WordPress website"
296
- msgstr "Your Ecwid store is connected<br /> to your WordPress website"
297
-
298
- msgid "Open control panel"
299
- msgstr "Open control panel"
300
-
301
- msgid "Plugin is installed successfully!"
302
- msgstr "Plugin is installed successfully!"
303
-
304
- msgid "There are just a few steps left to start selling<br />on your WordPress site"
305
- msgstr "There are just a few steps left to start selling<br />on your WordPress site"
306
-
307
- msgid "There are few little steps left to start selling<br />on your WordPress site"
308
- msgstr "There are few little steps left to start selling<br />on your WordPress site"
309
-
310
- msgid "Register"
311
- msgstr "Register"
312
-
313
- msgid "Create a free Ecwid account to manage your<br />store and inventory. No credit card required"
314
- msgstr "Create a free Ecwid account to manage your<br />store and inventory. No credit card required"
315
-
316
- msgid "Connect"
317
- msgstr "Connect"
318
-
319
- msgid "Add your Ecwid store to your site<br />in two clicks"
320
- msgstr "Add your Ecwid store to your site<br />in two clicks"
321
-
322
- msgid "Connect your Ecwid store to this site<br />in two clicks"
323
- msgstr "Connect your Ecwid store to this site<br />in two clicks"
324
-
325
- msgid "Start selling"
326
- msgstr "Start selling"
327
-
328
- msgid "Your storefront is ready"
329
- msgstr "Your storefront is ready"
330
-
331
- msgid "Create Ecwid store"
332
- msgstr "Create Ecwid store"
333
-
334
- msgid "Connect your store"
335
- msgstr "Connect your store"
336
-
337
- msgid "Free registration, No credit card required"
338
- msgstr "Free registration, No credit card required"
339
-
340
- msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
341
- msgstr "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
342
-
343
- msgid "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
344
- msgstr "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
345
-
346
- msgid "Already have Ecwid account?"
347
- msgstr "Already have Ecwid account?"
348
-
349
- msgid "Connect your store to Wordpress site"
350
- msgstr "Connect your store to Wordpress site"
351
-
352
- msgid "Don't have an Ecwid account?"
353
- msgstr "Don't have an Ecwid account?"
354
-
355
- msgid "Register at Ecwid for free"
356
- msgstr "Register at Ecwid for free"
357
-
358
- msgid "No credit card required"
359
- msgstr "No credit card required"
360
-
361
- msgid "Get ready to sell online"
362
- msgstr "Get ready to sell online"
363
-
364
- msgid "Sell Everywhere<br>with your Ecwid store"
365
- msgstr "Sell Everywhere<br>with your Ecwid store"
366
-
367
- msgid "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
368
- msgstr "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
369
-
370
- msgid "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
371
- msgstr "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
372
-
373
- msgid "Features"
374
- msgstr "Features"
375
-
376
- msgid "Compatible with your theme"
377
- msgstr "Compatible with your theme"
378
-
379
- msgid "Ecwid is compatible with your<br>“Responsive” WordPress theme<br>out of the box."
380
- msgstr "Ecwid is compatible with your<br>“Responsive” WordPress theme<br>out of the box."
381
-
382
- msgid "Free and always up to date"
383
- msgstr "Free and always up to date"
384
-
385
- msgid "Free plan always available with tons of features<br>at no additional cost. Seamless upgrades occur<br>automatically for free."
386
- msgstr "Free plan always available with tons of features<br>at no additional cost. Seamless upgrades occur<br>automatically for free."
387
-
388
- msgid "Responsive design"
389
- msgstr "Responsive design"
390
-
391
- msgid "Your store looks perfect<br />on all devices"
392
- msgstr "Your store looks perfect<br />on all devices"
393
-
394
- msgid "PCI-DSS Certified"
395
- msgstr "PCI-DSS Certified"
396
-
397
- msgid "Secure checkout with over 40<br />payment options"
398
- msgstr "Secure checkout with over 40<br />payment options"
399
-
400
- msgid "Global Reach"
401
- msgstr "Global Reach"
402
-
403
- msgid "More than 700,000 merchants in 175 countries"
404
- msgstr "More than 700,000 merchants in 175 countries"
405
-
406
- msgid "Start selling <br>on your WordPress <nobr>site for free</nobr>"
407
- msgstr "Start selling <br>on your WordPress <nobr>site for free</nobr>"
408
-
409
- msgid "Get Started, Create Ecwid Account"
410
- msgstr "Get Started, Create Ecwid Account"
411
-
412
- msgid "Connect your store to this site"
413
- msgstr "Connect your store to this site"
414
-
415
- msgid "Reconnect your store<br /> to this WordPress site"
416
- msgstr "Reconnect your store<br /> to this WordPress site"
417
-
418
- msgid "Reconnect Ecwid store"
419
- msgstr "Reconnect Ecwid store"
420
-
421
- msgid "New features available, reconnect to be in touch with our updates"
422
- msgstr "New features available, reconnect to be in touch with our updates"
423
-
424
- msgid "Add store"
425
- msgstr "Add store"
426
-
427
- msgid "Store settings"
428
- msgstr "Store settings"
429
-
430
- msgid "Choose widgets to show"
431
- msgstr "Choose widgets to show"
432
-
433
- msgid "Product catalog will be shown automatically"
434
- msgstr "Product catalog will be shown automatically"
435
-
436
- msgid "Show search"
437
- msgstr "Show search"
438
-
439
- msgid "Show minicart"
440
- msgstr "Show minicart"
441
-
442
- msgid "Show horizontal categories"
443
- msgstr "Show horizontal categories"
444
-
445
- msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
446
- msgstr "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
447
-
448
- msgid "Demo store"
449
- msgstr "Demo store"
450
-
451
- msgid "Ecwid plugin settings"
452
- msgstr "Ecwid plugin settings"
453
-
454
- msgid "Save and close"
455
- msgstr "Save and close"
456
-
457
- msgid "Your store will be shown here!"
458
- msgstr "Your store will be shown here!"
459
-
460
- msgid "Demo Store"
461
- msgstr "Demo Store"
462
-
1
+ msgid "Ecwid Shopping Cart"
2
+ msgstr "Ecwid Shopping Cart"
3
+
4
+ msgid "Ecwid Team"
5
+ msgstr "Ecwid Team"
6
+
7
+ msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
8
+ msgstr "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
9
+
10
+ msgid "Get help"
11
+ msgstr "Yardım alın"
12
+
13
+ msgid "Go to Ecwid site"
14
+ msgstr "Ecwid web sitesine git"
15
+
16
+ msgid "Visit storefront"
17
+ msgstr "Mağazayı ziyaret et"
18
+
19
+ msgid "Manage my store"
20
+ msgstr "Mağaza yönetimi"
21
+
22
+ msgid "Manage plugin settings"
23
+ msgstr "Plugin ayarlarını değiştir"
24
+
25
+ msgid "→ Sell on Facebook"
26
+ msgstr "→ Facebook ile sat"
27
+
28
+ msgid "<a %s>Online store powered by Ecwid</a>"
29
+ msgstr "<a %s>Ecwid online mağaza çözümleri</a>"
30
+
31
+ msgid "Store"
32
+ msgstr "Mağaza"
33
+
34
+ msgid "Ecwid shopping cart settings"
35
+ msgstr "Ecwid alışveriş sepeti ayarları"
36
+
37
+ msgid "Ecwid Store"
38
+ msgstr "Ecwid Mağazası"
39
+
40
+ msgid "Setup"
41
+ msgstr "Kurulum"
42
+
43
+ msgid "Dashboard"
44
+ msgstr "Dashboard"
45
+
46
+ msgid "Appearance settings"
47
+ msgstr "Görünüm ayarları"
48
+
49
+ msgid "Appearance"
50
+ msgstr "Görünüm"
51
+
52
+ msgid "Advanced settings"
53
+ msgstr "Gelişmiş ayarlar"
54
+
55
+ msgid "Advanced"
56
+ msgstr "Gelişmiş"
57
+
58
+ msgid "Hidden category"
59
+ msgstr "Gizli kategori"
60
+
61
+ msgid "If you like Ecwid and want to help it grow and become the most popular e-commerce solution, you can now add a fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
62
+ msgstr "Ecwid online mağazasını beğendiyseniz ve büyümesine yardımcı olmak istiyorsanız, web sitenize güzel görünümlü 'Ecwid Tarafından Desteklenmektedir' yamasını ekleyebilir ve kullanıcılarınıza Ecwid mağazasının tanıtımını yapabilirsiniz."
63
+
64
+ msgid "Ecwid Badge"
65
+ msgstr "Ecwid Yaması"
66
+
67
+ msgid "Ecwid shopping cart widget"
68
+ msgstr "Ecwid alışveriş sepeti widgeti"
69
+
70
+ msgid "Ecwid ecommerce solution"
71
+ msgstr "Ecwid e-ticaret çözümü"
72
+
73
+ msgid "Ecwid free shopping cart"
74
+ msgstr "Ecwid ücretsiz alışveriş sepeti"
75
+
76
+ msgid "Ecwid shopping cart"
77
+ msgstr "Ecwid alışveriş sepeti"
78
+
79
+ msgid "Ecwid e-commerce widgets"
80
+ msgstr "Ecwid e-ticaret widgetleri"
81
+
82
+ msgid "Your store's minicart"
83
+ msgstr "Mağazanızın mini alışveriş sepeti"
84
+
85
+ msgid "Ecwid Shopping Bag (Normal)"
86
+ msgstr "Ecwid Alşv. Sepeti (Normal)"
87
+
88
+ msgid "Ecwid Shopping Bag (Mini view)"
89
+ msgstr "Ecwid Alşv. Sepeti (Küçük)"
90
+
91
+ msgid "Your store's search box"
92
+ msgstr "Mağazanız için arama kutusu"
93
+
94
+ msgid "Ecwid Search Box"
95
+ msgstr "Ecwid Arama Kutusu"
96
+
97
+ msgid "Vertical menu of categories"
98
+ msgstr "Dikey kategori menüsü"
99
+
100
+ msgid "Ecwid Vertical Categories"
101
+ msgstr "Ecwid Dikey Kategoriler"
102
+
103
+ msgid "A link to your store page"
104
+ msgstr "A link to your store page"
105
+
106
+ msgid "Ecwid Store Page Link"
107
+ msgstr "Ecwid Store Page Link"
108
+
109
+ msgid "Shop"
110
+ msgstr "Shop"
111
+
112
+ msgid "A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop."
113
+ msgstr "A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop."
114
+
115
+ msgid "Recently Viewed Products"
116
+ msgstr "Recently Viewed Products"
117
+
118
+ msgid "Number of products to show"
119
+ msgstr "Number of products to show"
120
+
121
+ msgid "Greetings! Your Ecwid store is now active."
122
+ msgstr "Tebrikler! Ecwid mağazanız artık etkin."
123
+
124
+ msgid "Take a few simple steps to complete store setup"
125
+ msgstr "Mağaza kurulumu için birkaç basit adımı tamamlayın"
126
+
127
+ msgid "Set up Ecwid Store"
128
+ msgstr "Ecwid Mağaza Kurulumu"
129
+
130
+ msgid "Good job! Your store is set up and you're ready to sell."
131
+ msgstr "Güzel! Mağazanız kuruldu, siparişleri kabul edebilirsiniz."
132
+
133
+ msgid "Now you can fine-tune your store's appearance"
134
+ msgstr "Artık mağaza görünümünü değiştirebilirsiniz"
135
+
136
+ msgid "Visit Storefront"
137
+ msgstr "Mağazayı Ziyaret Et"
138
+
139
+ msgid "Configure Appearance"
140
+ msgstr "Görünümü Değiştir"
141
+
142
+ msgid "Your store is almost ready!"
143
+ msgstr "Mağazanız neredeyse hazır!"
144
+
145
+ msgid "Connect your Ecwid account with this site to complete setup and start selling"
146
+ msgstr "Kurulumu tamamlamak ve satışa başlayabilmek için Ecwid hesabınıza bağlananın"
147
+
148
+ msgid "Connect Your Ecwid Store"
149
+ msgstr "Ecwid Mağazanıza Bağlanın"
150
+
151
+ msgid "To add extra functions to your store, drag and drop Ecwid store elements on your site. When you're done, you can get back to modifying your settings."
152
+ msgstr "Ek özellikleri kullanabilmek için Ecwid mağaza elemanlarını sitenize sürükleyerek bırakınız. İşlemlerinizi tamamladıktan sonra ayarlarınızı değiştirmeye devam edebilirsiniz."
153
+
154
+ msgid "Back to Store Settings"
155
+ msgstr "Mağaza Ayarlarına Dön"
156
+
157
+ msgid "Do you like your Ecwid online store? We'd appreciate it if you add your review and vote for the plugin on Wordpress site."
158
+ msgstr "Ecwid online mağazasını sevdiniz mi? Wordpress sayfasında eklentimizi oylamanız ve görüşlerinizi bildirmeniz bizi çok memnun edecektir."
159
+
160
+ msgid "Rate Ecwid at WordPress.org"
161
+ msgstr "WordPress.org sitesinde Ecwid uygulamasını oylayın"
162
+
163
+ msgid "Add Store"
164
+ msgstr "Add Store"
165
+
166
+ msgid "Edit Store"
167
+ msgstr "Edit Store"
168
+
169
+ msgid "Edit Appearance"
170
+ msgstr "Edit Appearance"
171
+
172
+ msgid "Price"
173
+ msgstr "Fiyat"
174
+
175
+ msgid "Never show this message again"
176
+ msgstr "Bu mesajı bir daha gösterme"
177
+
178
+ msgid "Ecwid Shopping Cart — Advanced settings"
179
+ msgstr "Ecwid Alışveriş Sepeti — Gelişmiş ayarlar"
180
+
181
+ msgid "Category shown by default"
182
+ msgstr "Varsayılan kategori görünümü"
183
+
184
+ msgid "Store root category"
185
+ msgstr "Mağaza kök kategorisi"
186
+
187
+ msgid "Default category ID"
188
+ msgstr "Varsayılan kategori ID"
189
+
190
+ msgid "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to new visitors."
191
+ msgstr "Mağaza varsayılan olarak kök kategorilerin listesini görüntüler. Bu ayarı değiştirerek müşterilerinize belirli kategoriler görüntüleyebilirsiniz. Müşterilerinize mağazanızı ilk ziyaretlerinde belirli kategoriler veya ürünler (örn. \"Yeni Ürünler\") göstermek istiyorsanız bu ayar işinize yarayabilir."
192
+
193
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
194
+ msgstr "Bu ayarı değiştirmek için, <a %s>gerekli kategori IDsini bulun ve </a> buraya kaydedin."
195
+
196
+ msgid "Single Sign-On Secret Key"
197
+ msgstr "Tek giriş (Single Sign-On) Gizli Anahtarı"
198
+
199
+ msgid "Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website."
200
+ msgstr "Tek giriş (Single Sign-On) gizli anahtarı müşterilerinizin WordPress sayfanızı Ecwid sayfanızı ziyaret eder gibi görüntülemelerini sağlar. Müşteriler sitenize giriş yaptıklarında otomatik olarak Ecwid mağazanıza da giriş yaparlar. Ziyaretçileriniz WordPress sayfanızda hesap oluşturmaya başladığında bu özelliği kullanabilirsiniz."
201
+
202
+ msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > API > Single Sign-On API\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
203
+ msgstr "Bu özelliği etkinleştirmek için gizli anahtarı kullanmayı tercih edin. Bu gizli anahtarı Ecwid kontrol panelinizdeki \"Sistem Ayarları > API > Single Sign-On API\" sayfasında bulabilirsiniz. Ancak <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">ücretli kullanıcılar</a> bu özellikten faydalanabilir."
204
+
205
+ msgid "Save changes"
206
+ msgstr "Değişiklikleri kaydet"
207
+
208
+ msgid "Ecwid Shopping Cart — Appearance settings"
209
+ msgstr "Ecwid Alışveriş Sepeti — Görünüm ayarları"
210
+
211
+ msgid "Display search box above products"
212
+ msgstr "Arama kutusunu ürünlerin üzerinde göster"
213
+
214
+ msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
215
+ msgstr "Ya da arama kutusunu <a href=\"%s\">WordPress yerleşik widgetlerını</a> kullanarak ekleyebilirsiniz"
216
+
217
+ msgid "Display horizontal categories above products"
218
+ msgstr "Kategorileri ürünler üzerinde yatay olarak görüntüle"
219
+
220
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
221
+ msgstr "Ya da dikey kategorileri sitenin araç çubuğuna <a href=\"%s\">WordPress yerleşik widgetlerını</a> kullanarak ekleyebilirsiniz"
222
+
223
+ msgid "Enable minicart attached to horizontal categories"
224
+ msgstr "Yatay kategorilere bağlı küçük sepeti etkinleştir"
225
+
226
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
227
+ msgstr "Web sitenize küçük alışveriş sepeti eklediyseniz bu ayarı devre dışı bırakınız"
228
+
229
+ msgid "Number of categories per row"
230
+ msgstr "Satır başına kategori sayısı"
231
+
232
+ msgid "Number of products per page"
233
+ msgstr "Sayfa başına ürün sayısı"
234
+
235
+ msgid "Grid view"
236
+ msgstr "Izgara görünümü"
237
+
238
+ msgid "List view"
239
+ msgstr "Liste görünümü"
240
+
241
+ msgid "Table view"
242
+ msgstr "Tablo görünümü"
243
+
244
+ msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products."
245
+ msgstr "Sayfa başına kaç adet ürün görüntüleneceğini belirleyebilirsiniz. Bu seçenekler azami miktarları belirtmektedir. Tüm ürünleri görüntülemek için yeterli alan yok ise Ecwid sütunları tüm ürünleri gösterecek şekilde değiştirecektir."
246
+
247
+ msgid "Default view mode on product pages"
248
+ msgstr "Ürün sayfasının varsayılan görünümü"
249
+
250
+ msgid "Grid"
251
+ msgstr "Izgara"
252
+
253
+ msgid "List"
254
+ msgstr "Liste"
255
+
256
+ msgid "Table"
257
+ msgstr "Tablo"
258
+
259
+ msgid "Default view mode on search results"
260
+ msgstr "Arama sonuçlarının varsayılan görünümü"
261
+
262
+ msgid "Connect your store<br /> to this WordPress site"
263
+ msgstr "Connect your store<br /> to this WordPress site"
264
+
265
+ msgid "Connect Ecwid store"
266
+ msgstr "Connect Ecwid store"
267
+
268
+ msgid "After clicking button you need to login and accept permissions to use our plugin"
269
+ msgstr "After clicking button you need to login and accept permissions to use our plugin"
270
+
271
+ msgid "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
272
+ msgstr "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
273
+
274
+ msgid "Don't have Ecwid account? Create it here"
275
+ msgstr "Don't have Ecwid account? Create it here"
276
+
277
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
278
+ msgstr "Sorun mu yaşıyorsunuz? <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid destek merkezini</a> ziyaret edin"
279
+
280
+ msgid "Store ID"
281
+ msgstr "Mağaza ID"
282
+
283
+ msgid "Disconnect store"
284
+ msgstr "Disconnect store"
285
+
286
+ msgid "Congratulations!"
287
+ msgstr "Tebrikler!"
288
+
289
+ msgid "Your Ecwid store is now connected<br /> to your WordPress website"
290
+ msgstr "Your Ecwid store is now connected<br /> to your WordPress website"
291
+
292
+ msgid "Greetings!"
293
+ msgstr "Tebrikler!"
294
+
295
+ msgid "Your Ecwid store is connected<br /> to your WordPress website"
296
+ msgstr "Your Ecwid store is connected<br /> to your WordPress website"
297
+
298
+ msgid "Open control panel"
299
+ msgstr "Open control panel"
300
+
301
+ msgid "Plugin is installed successfully!"
302
+ msgstr "Plugin is installed successfully!"
303
+
304
+ msgid "There are just a few steps left to start selling<br />on your WordPress site"
305
+ msgstr "There are just a few steps left to start selling<br />on your WordPress site"
306
+
307
+ msgid "There are few little steps left to start selling<br />on your WordPress site"
308
+ msgstr "There are few little steps left to start selling<br />on your WordPress site"
309
+
310
+ msgid "Register"
311
+ msgstr "Register"
312
+
313
+ msgid "Create a free Ecwid account to manage your<br />store and inventory. No credit card required"
314
+ msgstr "Create a free Ecwid account to manage your<br />store and inventory. No credit card required"
315
+
316
+ msgid "Connect"
317
+ msgstr "Connect"
318
+
319
+ msgid "Add your Ecwid store to your site<br />in two clicks"
320
+ msgstr "Add your Ecwid store to your site<br />in two clicks"
321
+
322
+ msgid "Connect your Ecwid store to this site<br />in two clicks"
323
+ msgstr "Connect your Ecwid store to this site<br />in two clicks"
324
+
325
+ msgid "Start selling"
326
+ msgstr "Start selling"
327
+
328
+ msgid "Your storefront is ready"
329
+ msgstr "Your storefront is ready"
330
+
331
+ msgid "Create Ecwid store"
332
+ msgstr "Create Ecwid store"
333
+
334
+ msgid "Connect your store"
335
+ msgstr "Connect your store"
336
+
337
+ msgid "Free registration, No credit card required"
338
+ msgstr "Free registration, No credit card required"
339
+
340
+ msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
341
+ msgstr "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
342
+
343
+ msgid "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
344
+ msgstr "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
345
+
346
+ msgid "Already have Ecwid account?"
347
+ msgstr "Already have Ecwid account?"
348
+
349
+ msgid "Connect your store to Wordpress site"
350
+ msgstr "Connect your store to Wordpress site"
351
+
352
+ msgid "Don't have an Ecwid account?"
353
+ msgstr "Don't have an Ecwid account?"
354
+
355
+ msgid "Register at Ecwid for free"
356
+ msgstr "Register at Ecwid for free"
357
+
358
+ msgid "No credit card required"
359
+ msgstr "No credit card required"
360
+
361
+ msgid "Get ready to sell online"
362
+ msgstr "Get ready to sell online"
363
+
364
+ msgid "Sell Everywhere<br>with your Ecwid store"
365
+ msgstr "Sell Everywhere<br>with your Ecwid store"
366
+
367
+ msgid "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
368
+ msgstr "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
369
+
370
+ msgid "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
371
+ msgstr "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
372
+
373
+ msgid "Features"
374
+ msgstr "Features"
375
+
376
+ msgid "Compatible with your theme"
377
+ msgstr "Compatible with your theme"
378
+
379
+ msgid "Ecwid is compatible with your<br>“Responsive” WordPress theme<br>out of the box."
380
+ msgstr "Ecwid is compatible with your<br>“Responsive” WordPress theme<br>out of the box."
381
+
382
+ msgid "Free and always up to date"
383
+ msgstr "Free and always up to date"
384
+
385
+ msgid "Free plan always available with tons of features<br>at no additional cost. Seamless upgrades occur<br>automatically for free."
386
+ msgstr "Free plan always available with tons of features<br>at no additional cost. Seamless upgrades occur<br>automatically for free."
387
+
388
+ msgid "Responsive design"
389
+ msgstr "Responsive design"
390
+
391
+ msgid "Your store looks perfect<br />on all devices"
392
+ msgstr "Your store looks perfect<br />on all devices"
393
+
394
+ msgid "PCI-DSS Certified"
395
+ msgstr "PCI-DSS Certified"
396
+
397
+ msgid "Secure checkout with over 40<br />payment options"
398
+ msgstr "Secure checkout with over 40<br />payment options"
399
+
400
+ msgid "Global Reach"
401
+ msgstr "Global Reach"
402
+
403
+ msgid "More than 700,000 merchants in 175 countries"
404
+ msgstr "More than 700,000 merchants in 175 countries"
405
+
406
+ msgid "Start selling <br>on your WordPress <nobr>site for free</nobr>"
407
+ msgstr "Start selling <br>on your WordPress <nobr>site for free</nobr>"
408
+
409
+ msgid "Get Started, Create Ecwid Account"
410
+ msgstr "Get Started, Create Ecwid Account"
411
+
412
+ msgid "Connect your store to this site"
413
+ msgstr "Connect your store to this site"
414
+
415
+ msgid "Reconnect your store<br /> to this WordPress site"
416
+ msgstr "Reconnect your store<br /> to this WordPress site"
417
+
418
+ msgid "Reconnect Ecwid store"
419
+ msgstr "Reconnect Ecwid store"
420
+
421
+ msgid "New features available, reconnect to be in touch with our updates"
422
+ msgstr "New features available, reconnect to be in touch with our updates"
423
+
424
+ msgid "Add store"
425
+ msgstr "Add store"
426
+
427
+ msgid "Store settings"
428
+ msgstr "Store settings"
429
+
430
+ msgid "Choose widgets to show"
431
+ msgstr "Choose widgets to show"
432
+
433
+ msgid "Product catalog will be shown automatically"
434
+ msgstr "Product catalog will be shown automatically"
435
+
436
+ msgid "Show search"
437
+ msgstr "Show search"
438
+
439
+ msgid "Show minicart"
440
+ msgstr "Show minicart"
441
+
442
+ msgid "Show horizontal categories"
443
+ msgstr "Show horizontal categories"
444
+
445
+ msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
446
+ msgstr "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
447
+
448
+ msgid "Demo store"
449
+ msgstr "Demo store"
450
+
451
+ msgid "Ecwid plugin settings"
452
+ msgstr "Ecwid plugin settings"
453
+
454
+ msgid "Save and close"
455
+ msgstr "Save and close"
456
+
457
+ msgid "Your store will be shown here!"
458
+ msgstr "Your store will be shown here!"
459
+
460
+ msgid "Demo Store"
461
+ msgstr "Demo Store"
462
+
languages/ecwid-shopping-cart.pot CHANGED
@@ -61,7 +61,7 @@ msgstr ""
61
  msgid "Recommendations for Your Online Store"
62
  msgstr ""
63
 
64
- msgid "If you like Ecwid and want to help it grow and become the most popular e-commerce solution, you can now add a fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
65
  msgstr ""
66
 
67
  msgid "Ecwid Badge"
@@ -82,37 +82,40 @@ msgstr ""
82
  msgid "Ecwid e-commerce widgets"
83
  msgstr ""
84
 
85
- msgid "Your store's minicart"
86
  msgstr ""
87
 
88
- msgid "Ecwid Shopping Bag (Normal)"
89
  msgstr ""
90
 
91
- msgid "Ecwid Shopping Bag (Mini view)"
92
  msgstr ""
93
 
94
- msgid "Your store's search box"
95
  msgstr ""
96
 
97
- msgid "Ecwid Search Box"
98
  msgstr ""
99
 
100
- msgid "Vertical menu of categories"
101
  msgstr ""
102
 
103
- msgid "Ecwid Vertical Categories"
104
  msgstr ""
105
 
106
- msgid "A link to your store page"
107
  msgstr ""
108
 
109
- msgid "Ecwid Store Page Link"
 
 
 
110
  msgstr ""
111
 
112
  msgid "Shop"
113
  msgstr ""
114
 
115
- msgid "A list of products recently viewed by a customer. Add this widget to the sidebar to let them later return to the products they saw in your shop."
116
  msgstr ""
117
 
118
  msgid "Recently Viewed Products"
@@ -220,6 +223,12 @@ msgstr ""
220
  msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>."
221
  msgstr ""
222
 
 
 
 
 
 
 
223
  msgid "Save changes"
224
  msgstr ""
225
 
@@ -232,13 +241,13 @@ msgstr ""
232
  msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
233
  msgstr ""
234
 
235
- msgid "Display horizontal categories above products"
236
  msgstr ""
237
 
238
  msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
239
  msgstr ""
240
 
241
- msgid "Enable minicart attached to horizontal categories"
242
  msgstr ""
243
 
244
  msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
@@ -469,7 +478,7 @@ msgstr ""
469
  msgid "Show minicart"
470
  msgstr ""
471
 
472
- msgid "Show horizontal categories"
473
  msgstr ""
474
 
475
  msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
61
  msgid "Recommendations for Your Online Store"
62
  msgstr ""
63
 
64
+ msgid "Do you like Ecwid and want to help it grow? You can add this fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
65
  msgstr ""
66
 
67
  msgid "Ecwid Badge"
82
  msgid "Ecwid e-commerce widgets"
83
  msgstr ""
84
 
85
+ msgid "Adds a cart widget for customer to see the products they added to the cart."
86
  msgstr ""
87
 
88
+ msgid "Shopping Cart"
89
  msgstr ""
90
 
91
+ msgid "Adds a compact cart widget for customer to see the products they added to the cart."
92
  msgstr ""
93
 
94
+ msgid "Shopping Cart (Mini)"
95
  msgstr ""
96
 
97
+ msgid "Displays a simple search box for your customers to find a product in your storex"
98
  msgstr ""
99
 
100
+ msgid "Product Search"
101
  msgstr ""
102
 
103
+ msgid "Adds vertical categories block to let the customer navigate your store."
104
  msgstr ""
105
 
106
+ msgid "Store Categories"
107
  msgstr ""
108
 
109
+ msgid "Displays a link to the store page in sidebar for customer to quickly access your store from any page on the site."
110
+ msgstr ""
111
+
112
+ msgid "Store Page Link"
113
  msgstr ""
114
 
115
  msgid "Shop"
116
  msgstr ""
117
 
118
+ msgid "Displays a list of products recently viewed by the customer to easily return to the products they saw in your shop."
119
  msgstr ""
120
 
121
  msgid "Recently Viewed Products"
223
  msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>."
224
  msgstr ""
225
 
226
+ msgid "Enable the new category menu"
227
+ msgstr ""
228
+
229
+ msgid "The new category menu looks better and is more mobile-friendly. If you haven't yet added category menu to your store page, you can do that in the <a %s>store page editor</a> (enable the \"Show categories\" option)"
230
+ msgstr ""
231
+
232
  msgid "Save changes"
233
  msgstr ""
234
 
241
  msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
242
  msgstr ""
243
 
244
+ msgid "Display categories above products"
245
  msgstr ""
246
 
247
  msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
248
  msgstr ""
249
 
250
+ msgid "Enable minicart attached to categories"
251
  msgstr ""
252
 
253
  msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
478
  msgid "Show minicart"
479
  msgstr ""
480
 
481
+ msgid "Show categories"
482
  msgstr ""
483
 
484
  msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
lib/JSONStreamingParser/LICENSE.txt CHANGED
@@ -1,8 +1,8 @@
1
- The MIT License (MIT)
2
- Copyright © 2013 <copyright holders>
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
-
6
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
-
8
- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ The MIT License (MIT)
2
+ Copyright © 2013 <copyright holders>
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
+
6
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
+
8
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
lib/JSONStreamingParser/Listener.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
- interface JsonStreamingParser_Listener {
3
-
4
- public function file_position($line, $char);
5
-
6
- public function start_document();
7
- public function end_document();
8
-
9
- public function start_object();
10
- public function end_object();
11
-
12
- public function start_array();
13
- public function end_array();
14
-
15
- // Key will always be a string
16
- public function key($key);
17
-
18
- // Note that value may be a string, integer, boolean, array, etc.
19
- public function value($value);
20
  }
1
+ <?php
2
+ interface JsonStreamingParser_Listener {
3
+
4
+ public function file_position($line, $char);
5
+
6
+ public function start_document();
7
+ public function end_document();
8
+
9
+ public function start_object();
10
+ public function end_object();
11
+
12
+ public function start_array();
13
+ public function end_array();
14
+
15
+ // Key will always be a string
16
+ public function key($key);
17
+
18
+ // Note that value may be a string, integer, boolean, array, etc.
19
+ public function value($value);
20
  }
lib/JSONStreamingParser/Listener/SubsetConsumer.php CHANGED
@@ -1,75 +1,75 @@
1
- <?php
2
-
3
- namespace JsonStreamingParser\Listener;
4
-
5
- abstract class SubsetConsumer implements \JsonStreamingParser_Listener
6
- {
7
- private $keyValueStack;
8
- private $key;
9
-
10
- /**
11
- * @param mixed $data
12
- * @return boolean if data was consumed and can be discarded
13
- */
14
- abstract protected function consume($data);
15
-
16
- public function file_position($line, $char) {
17
-
18
- }
19
-
20
- public function start_document()
21
- {
22
- $this->keyValueStack = array();
23
- }
24
-
25
- public function end_document()
26
- {
27
- }
28
-
29
- public function start_object()
30
- {
31
- array_push($this->keyValueStack, is_null($this->key) ? array(array()) : array($this->key => array()));
32
- $this->key = null;
33
- }
34
-
35
- public function end_object()
36
- {
37
- $keyValue = array_pop($this->keyValueStack);
38
- $obj = reset($keyValue);
39
- $this->key = key($keyValue);
40
- $hasBeenConsumed = $this->consume($obj);
41
-
42
- if (!empty($this->keyValueStack)) {
43
- $this->value($hasBeenConsumed ? '*consumed*' : $obj);
44
- }
45
-
46
- }
47
-
48
- public function start_array()
49
- {
50
- $this->start_object();
51
- }
52
-
53
- public function end_array()
54
- {
55
- $this->end_object();
56
- }
57
-
58
- public function key($key)
59
- {
60
- $this->key = $key;
61
- }
62
-
63
- public function value($value)
64
- {
65
- $keyValue = array_pop($this->keyValueStack);
66
- $objKey = key($keyValue);
67
-
68
- if ($this->key) {
69
- $keyValue[$objKey][$this->key] = $value;
70
- } else {
71
- array_push($keyValue[$objKey], $value);
72
- }
73
- array_push($this->keyValueStack, $keyValue);
74
- }
75
  }
1
+ <?php
2
+
3
+ namespace JsonStreamingParser\Listener;
4
+
5
+ abstract class SubsetConsumer implements \JsonStreamingParser_Listener
6
+ {
7
+ private $keyValueStack;
8
+ private $key;
9
+
10
+ /**
11
+ * @param mixed $data
12
+ * @return boolean if data was consumed and can be discarded
13
+ */
14
+ abstract protected function consume($data);
15
+
16
+ public function file_position($line, $char) {
17
+
18
+ }
19
+
20
+ public function start_document()
21
+ {
22
+ $this->keyValueStack = array();
23
+ }
24
+
25
+ public function end_document()
26
+ {
27
+ }
28
+
29
+ public function start_object()
30
+ {
31
+ array_push($this->keyValueStack, is_null($this->key) ? array(array()) : array($this->key => array()));
32
+ $this->key = null;
33
+ }
34
+
35
+ public function end_object()
36
+ {
37
+ $keyValue = array_pop($this->keyValueStack);
38
+ $obj = reset($keyValue);
39
+ $this->key = key($keyValue);
40
+ $hasBeenConsumed = $this->consume($obj);
41
+
42
+ if (!empty($this->keyValueStack)) {
43
+ $this->value($hasBeenConsumed ? '*consumed*' : $obj);
44
+ }
45
+
46
+ }
47
+
48
+ public function start_array()
49
+ {
50
+ $this->start_object();
51
+ }
52
+
53
+ public function end_array()
54
+ {
55
+ $this->end_object();
56
+ }
57
+
58
+ public function key($key)
59
+ {
60
+ $this->key = $key;
61
+ }
62
+
63
+ public function value($value)
64
+ {
65
+ $keyValue = array_pop($this->keyValueStack);
66
+ $objKey = key($keyValue);
67
+
68
+ if ($this->key) {
69
+ $keyValue[$objKey][$this->key] = $value;
70
+ } else {
71
+ array_push($keyValue[$objKey], $value);
72
+ }
73
+ array_push($this->keyValueStack, $keyValue);
74
+ }
75
  }
lib/JSONStreamingParser/Parser.php CHANGED
@@ -1,493 +1,493 @@
1
- <?php
2
- require_once 'ParsingError.php';
3
- require_once 'Listener.php';
4
-
5
- class JsonStreamingParser_Parser {
6
- private $_state;
7
- const STATE_START_DOCUMENT = 0;
8
- const STATE_DONE = -1;
9
- const STATE_IN_ARRAY = 1;
10
- const STATE_IN_OBJECT = 2;
11
- const STATE_END_KEY = 3;
12
- const STATE_AFTER_KEY = 4;
13
- const STATE_IN_STRING = 5;
14
- const STATE_START_ESCAPE = 6;
15
- const STATE_UNICODE = 7;
16
- const STATE_IN_NUMBER = 8;
17
- const STATE_IN_TRUE = 9;
18
- const STATE_IN_FALSE = 10;
19
- const STATE_IN_NULL = 11;
20
- const STATE_AFTER_VALUE = 12;
21
-
22
- const STACK_OBJECT = 0;
23
- const STACK_ARRAY = 1;
24
- const STACK_KEY = 2;
25
- const STACK_STRING = 3;
26
- private $_stack;
27
-
28
- private $_stream;
29
-
30
- /**
31
- * @var JsonStreamingParser_Listener
32
- */
33
- private $_listener;
34
-
35
- private $_buffer;
36
- private $_buffer_size;
37
- private $_unicode_buffer;
38
- private $_unicode_high_codepoint;
39
- private $_line_ending;
40
-
41
- private $_line_number;
42
- private $_char_number;
43
-
44
-
45
- public function __construct($stream, $listener, $line_ending = "\n") {
46
- if (!is_resource($stream) || get_resource_type($stream) != 'stream') {
47
- throw new InvalidArgumentException("Argument is not a stream");
48
- }
49
- if (!in_array("JsonStreamingParser_Listener", class_implements(get_class($listener)))) {
50
- throw new InvalidArgumentException("Listener must implement JsonStreamingParser_Listener");
51
- }
52
-
53
- $this->_stream = $stream;
54
- $this->_listener = $listener;
55
-
56
- $this->_state = self::STATE_START_DOCUMENT;
57
- $this->_stack = array();
58
-
59
- $this->_buffer = '';
60
- $this->_buffer_size = 8192;
61
- $this->_unicode_buffer = array();
62
- $this->_unicode_high_codepoint = -1;
63
- $this->_line_ending = $line_ending;
64
- }
65
-
66
-
67
- public function parse() {
68
- $this->_line_number = 1;
69
- $this->_char_number = 1;
70
-
71
- while (!feof($this->_stream)) {
72
- $pos = ftell($this->_stream);
73
- $line = stream_get_line($this->_stream, $this->_buffer_size, $this->_line_ending);
74
- $ended = (bool)(ftell($this->_stream) - strlen($line) - $pos);
75
-
76
- $byteLen = strlen($line);
77
- for ($i = 0; $i < $byteLen; $i++) {
78
- $this->_listener->file_position($this->_line_number, $this->_char_number);
79
- $this->_consume_char($line[$i]);
80
- $this->_char_number++;
81
- }
82
-
83
- if ($ended) {
84
- $this->_line_number++;
85
- $this->_char_number = 1;
86
- }
87
-
88
- }
89
- }
90
-
91
- private function _consume_char($c) {
92
- // valid whitespace characters in JSON (from RFC4627 for JSON) include:
93
- // space, horizontal tab, line feed or new line, and carriage return.
94
- // thanks: http://stackoverflow.com/questions/16042274/definition-of-whitespace-in-json
95
- if (($c === " " || $c === "\t" || $c === "\n" || $c === "\r") &&
96
- !($this->_state === self::STATE_IN_STRING ||
97
- $this->_state === self::STATE_UNICODE ||
98
- $this->_state === self::STATE_START_ESCAPE ||
99
- $this->_state === self::STATE_IN_NUMBER ||
100
- $this->_state === self::STATE_START_DOCUMENT)) {
101
- return;
102
- }
103
-
104
- switch ($this->_state) {
105
-
106
- case self::STATE_START_DOCUMENT:
107
- $this->_listener->start_document();
108
- if ($c === '[') {
109
- $this->_start_array();
110
- } elseif ($c === '{') {
111
- $this->_start_object();
112
- } else {
113
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
114
- "Document must start with object or array.");
115
- }
116
- break;
117
-
118
- case self::STATE_IN_ARRAY:
119
- if ($c === ']') {
120
- $this->_end_array();
121
- } else {
122
- $this->_start_value($c);
123
- }
124
- break;
125
-
126
- case self::STATE_IN_OBJECT:
127
- if ($c === '}') {
128
- $this->_end_object();
129
- } elseif ($c === '"') {
130
- $this->_start_key();
131
- } else {
132
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
133
- "Start of string expected for object key. Instead got: ".$c);
134
- }
135
- break;
136
-
137
- case self::STATE_END_KEY:
138
- if ($c !== ':') {
139
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
140
- "Expected ':' after key.");
141
- }
142
- $this->_state = self::STATE_AFTER_KEY;
143
- break;
144
-
145
- case self::STATE_AFTER_KEY:
146
- $this->_start_value($c);
147
- break;
148
-
149
- case self::STATE_IN_STRING:
150
- if ($c === '"') {
151
- $this->_end_string();
152
- } elseif ($c === '\\') {
153
- $this->_state = self::STATE_START_ESCAPE;
154
- } elseif (($c < "\x1f") || ($c === "\x7f")) {
155
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
156
- "Unescaped control character encountered: ".$c);
157
- } else {
158
- $this->_buffer .= $c;
159
- }
160
- break;
161
-
162
- case self::STATE_START_ESCAPE:
163
- $this->_process_escape_character($c);
164
- break;
165
-
166
- case self::STATE_UNICODE:
167
- $this->_process_unicode_character($c);
168
- break;
169
-
170
- case self::STATE_AFTER_VALUE:
171
- $within = end($this->_stack);
172
- if ($within === self::STACK_OBJECT) {
173
- if ($c === '}') {
174
- $this->_end_object();
175
- } elseif ($c === ',') {
176
- $this->_state = self::STATE_IN_OBJECT;
177
- } else {
178
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
179
- "Expected ',' or '}' while parsing object. Got: ".$c);
180
- }
181
- } elseif ($within === self::STACK_ARRAY) {
182
- if ($c === ']') {
183
- $this->_end_array();
184
- } elseif ($c === ',') {
185
- $this->_state = self::STATE_IN_ARRAY;
186
- } else {
187
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
188
- "Expected ',' or ']' while parsing array. Got: ".$c);
189
- }
190
- } else {
191
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
192
- "Finished a literal, but unclear what state to move to. Last state: ".$within);
193
- }
194
- break;
195
-
196
- case self::STATE_IN_NUMBER:
197
- if (preg_match('/\d/', $c)) {
198
- $this->_buffer .= $c;
199
- } elseif ($c === '.') {
200
- if (strpos($this->_buffer, '.') !== false) {
201
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
202
- "Cannot have multiple decimal points in a number.");
203
- } elseif (stripos($this->_buffer, 'e') !== false) {
204
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
205
- "Cannot have a decimal point in an exponent.");
206
- }
207
- $this->_buffer .= $c;
208
- } elseif ($c === 'e' || $c === 'E') {
209
- if (stripos($this->_buffer, 'e') !== false) {
210
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
211
- "Cannot have multiple exponents in a number.");
212
- }
213
- $this->_buffer .= $c;
214
- } elseif ($c === '+' || $c === '-') {
215
- $last = mb_substr($this->_buffer, -1);
216
- if (!($last === 'e' || $last === 'E')) {
217
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
218
- "Can only have '+' or '-' after the 'e' or 'E' in a number.");
219
- }
220
- $this->_buffer .= $c;
221
- } else {
222
- $this->_end_number();
223
- // we have consumed one beyond the end of the number
224
- $this->_consume_char($c);
225
- }
226
- break;
227
-
228
- case self::STATE_IN_TRUE:
229
- $this->_buffer .= $c;
230
- if (mb_strlen($this->_buffer) === 4) {
231
- $this->_end_true();
232
- }
233
- break;
234
-
235
- case self::STATE_IN_FALSE:
236
- $this->_buffer .= $c;
237
- if (mb_strlen($this->_buffer) === 5) {
238
- $this->_end_false();
239
- }
240
- break;
241
-
242
- case self::STATE_IN_NULL:
243
- $this->_buffer .= $c;
244
- if (mb_strlen($this->_buffer) === 4) {
245
- $this->_end_null();
246
- }
247
- break;
248
-
249
- case self::STATE_DONE:
250
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
251
- "Expected end of document.");
252
-
253
- default:
254
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
255
- "Internal error. Reached an unknown state: ".$this->_state);
256
- }
257
- }
258
-
259
- private function _is_hex_character($c) {
260
- return preg_match('/[0-9a-fA-F]/u', $c);
261
- }
262
-
263
- // Thanks: http://stackoverflow.com/questions/1805802/php-convert-unicode-codepoint-to-utf-8
264
- private function _convert_codepoint_to_character($num) {
265
- if($num<=0x7F) return chr($num);
266
- if($num<=0x7FF) return chr(($num>>6)+192).chr(($num&63)+128);
267
- if($num<=0xFFFF) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
268
- if($num<=0x1FFFFF) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128);
269
- return '';
270
- }
271
-
272
- private function _is_digit($c) {
273
- // Only concerned with the first character in a number.
274
- return preg_match('/[0-9]|-/u',$c);
275
- }
276
-
277
-
278
- private function _start_value($c) {
279
- if ($c === '[') {
280
- $this->_start_array();
281
- } elseif ($c === '{') {
282
- $this->_start_object();
283
- } elseif ($c === '"') {
284
- $this->_start_string();
285
- } elseif ($this->_is_digit($c)) {
286
- $this->_start_number($c);
287
- } elseif ($c === 't') {
288
- $this->_state = self::STATE_IN_TRUE;
289
- $this->_buffer .= $c;
290
- } elseif ($c === 'f') {
291
- $this->_state = self::STATE_IN_FALSE;
292
- $this->_buffer .= $c;
293
- } elseif ($c === 'n') {
294
- $this->_state = self::STATE_IN_NULL;
295
- $this->_buffer .= $c;
296
- } else {
297
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
298
- "Unexpected character for value: ".$c);
299
- }
300
- }
301
-
302
-
303
- private function _start_array() {
304
- $this->_listener->start_array();
305
- $this->_state = self::STATE_IN_ARRAY;
306
- array_push($this->_stack, self::STACK_ARRAY);
307
- }
308
-
309
- private function _end_array() {
310
- $popped = array_pop($this->_stack);
311
- if ($popped !== self::STACK_ARRAY) {
312
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
313
- "Unexpected end of array encountered.");
314
- }
315
- $this->_listener->end_array();
316
- $this->_state = self::STATE_AFTER_VALUE;
317
-
318
- if (empty($this->_stack)) {
319
- $this->_end_document();
320
- }
321
- }
322
-
323
-
324
- private function _start_object() {
325
- $this->_listener->start_object();
326
- $this->_state = self::STATE_IN_OBJECT;
327
- array_push($this->_stack, self::STACK_OBJECT);
328
- }
329
-
330
- private function _end_object() {
331
- $popped = array_pop($this->_stack);
332
- if ($popped !== self::STACK_OBJECT) {
333
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
334
- "Unexpected end of object encountered.");
335
- }
336
- $this->_listener->end_object();
337
- $this->_state = self::STATE_AFTER_VALUE;
338
-
339
- if (empty($this->_stack)) {
340
- $this->_end_document();
341
- }
342
- }
343
-
344
- private function _start_string() {
345
- array_push($this->_stack, self::STACK_STRING);
346
- $this->_state = self::STATE_IN_STRING;
347
- }
348
-
349
- private function _start_key() {
350
- array_push($this->_stack, self::STACK_KEY);
351
- $this->_state = self::STATE_IN_STRING;
352
- }
353
-
354
- private function _end_string() {
355
- $popped = array_pop($this->_stack);
356
- if ($popped === self::STACK_KEY) {
357
- $this->_listener->key($this->_buffer);
358
- $this->_state = self::STATE_END_KEY;
359
- } elseif ($popped === self::STACK_STRING) {
360
- $this->_listener->value($this->_buffer);
361
- $this->_state = self::STATE_AFTER_VALUE;
362
- } else {
363
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
364
- "Unexpected end of string.");
365
- }
366
- $this->_buffer = '';
367
- }
368
-
369
- private function _process_escape_character($c) {
370
- if ($c === '"') {
371
- $this->_buffer .= '"';
372
- } elseif ($c === '\\') {
373
- $this->_buffer .= '\\';
374
- } elseif ($c === '/') {
375
- $this->_buffer .= '/';
376
- } elseif ($c === 'b') {
377
- $this->_buffer .= "\x08";
378
- } elseif ($c === 'f') {
379
- $this->_buffer .= "\f";
380
- } elseif ($c === 'n') {
381
- $this->_buffer .= "\n";
382
- } elseif ($c === 'r') {
383
- $this->_buffer .= "\r";
384
- } elseif ($c === 't') {
385
- $this->_buffer .= "\t";
386
- } elseif ($c === 'u') {
387
- $this->_state = self::STATE_UNICODE;
388
- } else {
389
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
390
- "Expected escaped character after backslash. Got: ".$c);
391
- }
392
-
393
- if ($this->_state !== self::STATE_UNICODE) {
394
- $this->_state = self::STATE_IN_STRING;
395
- }
396
- }
397
-
398
- private function _process_unicode_character($c) {
399
- if (!$this->_is_hex_character($c)) {
400
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
401
- "Expected hex character for escaped unicode character. Unicode parsed: " . implode($this->_unicode_buffer) . " and got: ".$c);
402
- }
403
- array_push($this->_unicode_buffer, $c);
404
- if (count($this->_unicode_buffer) === 4) {
405
- $codepoint = hexdec(implode($this->_unicode_buffer));
406
-
407
- if ($codepoint >= 0xD800 && $codepoint < 0xDC00) {
408
- $this->_unicode_high_codepoint = $codepoint;
409
- $this->_unicode_buffer = array();
410
- } elseif ($codepoint >= 0xDC00 && $codepoint <= 0xDFFF) {
411
- if ($this->_unicode_high_codepoint === -1) {
412
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
413
- "Missing high codepoint for unicode low codepoint.");
414
- }
415
- $combined_codepoint = (($this->_unicode_high_codepoint - 0xD800) * 0x400) + ($codepoint - 0xDC00) + 0x10000;
416
-
417
- $this->_end_unicode_character($combined_codepoint);
418
- } else {
419
- $this->_end_unicode_character($codepoint);
420
- }
421
- }
422
- }
423
-
424
- private function _end_unicode_character($codepoint) {
425
- $this->_buffer .= $this->_convert_codepoint_to_character($codepoint);
426
- $this->_unicode_buffer = array();
427
- $this->_unicode_high_codepoint = -1;
428
- $this->_state = self::STATE_IN_STRING;
429
- }
430
-
431
-
432
- private function _start_number($c) {
433
- $this->_state = self::STATE_IN_NUMBER;
434
- $this->_buffer .= $c;
435
- }
436
-
437
- private function _end_number() {
438
- $num = $this->_buffer;
439
- if (preg_match('/\./', $num)) {
440
- $num = (float)($num);
441
- } else {
442
- $num = (int)($num);
443
- }
444
- $this->_listener->value($num);
445
-
446
- $this->_buffer = '';
447
- $this->_state = self::STATE_AFTER_VALUE;
448
- }
449
-
450
-
451
- private function _end_true() {
452
- $true = $this->_buffer;
453
- if ($true === 'true') {
454
- $this->_listener->value(true);
455
- } else {
456
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
457
- "Expected 'true'. Got: ".$true);
458
- }
459
- $this->_buffer = '';
460
- $this->_state = self::STATE_AFTER_VALUE;
461
- }
462
-
463
- private function _end_false() {
464
- $false = $this->_buffer;
465
- if ($false === 'false') {
466
- $this->_listener->value(false);
467
- } else {
468
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
469
- "Expected 'false'. Got: ".$false);
470
- }
471
- $this->_buffer = '';
472
- $this->_state = self::STATE_AFTER_VALUE;
473
- }
474
-
475
- private function _end_null() {
476
- $null = $this->_buffer;
477
- if ($null === 'null') {
478
- $this->_listener->value(null);
479
- } else {
480
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
481
- "Expected 'null'. Got: ".$null);
482
- }
483
- $this->_buffer = '';
484
- $this->_state = self::STATE_AFTER_VALUE;
485
- }
486
-
487
-
488
- private function _end_document() {
489
- $this->_listener->end_document();
490
- $this->_state = self::STATE_DONE;
491
- }
492
-
493
  }
1
+ <?php
2
+ require_once 'ParsingError.php';
3
+ require_once 'Listener.php';
4
+
5
+ class JsonStreamingParser_Parser {
6
+ private $_state;
7
+ const STATE_START_DOCUMENT = 0;
8
+ const STATE_DONE = -1;
9
+ const STATE_IN_ARRAY = 1;
10
+ const STATE_IN_OBJECT = 2;
11
+ const STATE_END_KEY = 3;
12
+ const STATE_AFTER_KEY = 4;
13
+ const STATE_IN_STRING = 5;
14
+ const STATE_START_ESCAPE = 6;
15
+ const STATE_UNICODE = 7;
16
+ const STATE_IN_NUMBER = 8;
17
+ const STATE_IN_TRUE = 9;
18
+ const STATE_IN_FALSE = 10;
19
+ const STATE_IN_NULL = 11;
20
+ const STATE_AFTER_VALUE = 12;
21
+
22
+ const STACK_OBJECT = 0;
23
+ const STACK_ARRAY = 1;
24
+ const STACK_KEY = 2;
25
+ const STACK_STRING = 3;
26
+ private $_stack;
27
+
28
+ private $_stream;
29
+
30
+ /**
31
+ * @var JsonStreamingParser_Listener
32
+ */
33
+ private $_listener;
34
+
35
+ private $_buffer;
36
+ private $_buffer_size;
37
+ private $_unicode_buffer;
38
+ private $_unicode_high_codepoint;
39
+ private $_line_ending;
40
+
41
+ private $_line_number;
42
+ private $_char_number;
43
+
44
+
45
+ public function __construct($stream, $listener, $line_ending = "\n") {
46
+ if (!is_resource($stream) || get_resource_type($stream) != 'stream') {
47
+ throw new InvalidArgumentException("Argument is not a stream");
48
+ }
49
+ if (!in_array("JsonStreamingParser_Listener", class_implements(get_class($listener)))) {
50
+ throw new InvalidArgumentException("Listener must implement JsonStreamingParser_Listener");
51
+ }
52
+
53
+ $this->_stream = $stream;
54
+ $this->_listener = $listener;
55
+
56
+ $this->_state = self::STATE_START_DOCUMENT;
57
+ $this->_stack = array();
58
+
59
+ $this->_buffer = '';
60
+ $this->_buffer_size = 8192;
61
+ $this->_unicode_buffer = array();
62
+ $this->_unicode_high_codepoint = -1;
63
+ $this->_line_ending = $line_ending;
64
+ }
65
+
66
+
67
+ public function parse() {
68
+ $this->_line_number = 1;
69
+ $this->_char_number = 1;
70
+
71
+ while (!feof($this->_stream)) {
72
+ $pos = ftell($this->_stream);
73
+ $line = stream_get_line($this->_stream, $this->_buffer_size, $this->_line_ending);
74
+ $ended = (bool)(ftell($this->_stream) - strlen($line) - $pos);
75
+
76
+ $byteLen = strlen($line);
77
+ for ($i = 0; $i < $byteLen; $i++) {
78
+ $this->_listener->file_position($this->_line_number, $this->_char_number);
79
+ $this->_consume_char($line[$i]);
80
+ $this->_char_number++;
81
+ }
82
+
83
+ if ($ended) {
84
+ $this->_line_number++;
85
+ $this->_char_number = 1;
86
+ }
87
+
88
+ }
89
+ }
90
+
91
+ private function _consume_char($c) {
92
+ // valid whitespace characters in JSON (from RFC4627 for JSON) include:
93
+ // space, horizontal tab, line feed or new line, and carriage return.
94
+ // thanks: http://stackoverflow.com/questions/16042274/definition-of-whitespace-in-json
95
+ if (($c === " " || $c === "\t" || $c === "\n" || $c === "\r") &&
96
+ !($this->_state === self::STATE_IN_STRING ||
97
+ $this->_state === self::STATE_UNICODE ||
98
+ $this->_state === self::STATE_START_ESCAPE ||
99
+ $this->_state === self::STATE_IN_NUMBER ||
100
+ $this->_state === self::STATE_START_DOCUMENT)) {
101
+ return;
102
+ }
103
+
104
+ switch ($this->_state) {
105
+
106
+ case self::STATE_START_DOCUMENT:
107
+ $this->_listener->start_document();
108
+ if ($c === '[') {
109
+ $this->_start_array();
110
+ } elseif ($c === '{') {
111
+ $this->_start_object();
112
+ } else {
113
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
114
+ "Document must start with object or array.");
115
+ }
116
+ break;
117
+
118
+ case self::STATE_IN_ARRAY:
119
+ if ($c === ']') {
120
+ $this->_end_array();
121
+ } else {
122
+ $this->_start_value($c);
123
+ }
124
+ break;
125
+
126
+ case self::STATE_IN_OBJECT:
127
+ if ($c === '}') {
128
+ $this->_end_object();
129
+ } elseif ($c === '"') {
130
+ $this->_start_key();
131
+ } else {
132
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
133
+ "Start of string expected for object key. Instead got: ".$c);
134
+ }
135
+ break;
136
+
137
+ case self::STATE_END_KEY:
138
+ if ($c !== ':') {
139
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
140
+ "Expected ':' after key.");
141
+ }
142
+ $this->_state = self::STATE_AFTER_KEY;
143
+ break;
144
+
145
+ case self::STATE_AFTER_KEY:
146
+ $this->_start_value($c);
147
+ break;
148
+
149
+ case self::STATE_IN_STRING:
150
+ if ($c === '"') {
151
+ $this->_end_string();
152
+ } elseif ($c === '\\') {
153
+ $this->_state = self::STATE_START_ESCAPE;
154
+ } elseif (($c < "\x1f") || ($c === "\x7f")) {
155
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
156
+ "Unescaped control character encountered: ".$c);
157
+ } else {
158
+ $this->_buffer .= $c;
159
+ }
160
+ break;
161
+
162
+ case self::STATE_START_ESCAPE:
163
+ $this->_process_escape_character($c);
164
+ break;
165
+
166
+ case self::STATE_UNICODE:
167
+ $this->_process_unicode_character($c);
168
+ break;
169
+
170
+ case self::STATE_AFTER_VALUE:
171
+ $within = end($this->_stack);
172
+ if ($within === self::STACK_OBJECT) {
173
+ if ($c === '}') {
174
+ $this->_end_object();
175
+ } elseif ($c === ',') {
176
+ $this->_state = self::STATE_IN_OBJECT;
177
+ } else {
178
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
179
+ "Expected ',' or '}' while parsing object. Got: ".$c);
180
+ }
181
+ } elseif ($within === self::STACK_ARRAY) {
182
+ if ($c === ']') {
183
+ $this->_end_array();
184
+ } elseif ($c === ',') {
185
+ $this->_state = self::STATE_IN_ARRAY;
186
+ } else {
187
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
188
+ "Expected ',' or ']' while parsing array. Got: ".$c);
189
+ }
190
+ } else {
191
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
192
+ "Finished a literal, but unclear what state to move to. Last state: ".$within);
193
+ }
194
+ break;
195
+
196
+ case self::STATE_IN_NUMBER:
197
+ if (preg_match('/\d/', $c)) {
198
+ $this->_buffer .= $c;
199
+ } elseif ($c === '.') {
200
+ if (strpos($this->_buffer, '.') !== false) {
201
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
202
+ "Cannot have multiple decimal points in a number.");
203
+ } elseif (stripos($this->_buffer, 'e') !== false) {
204
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
205
+ "Cannot have a decimal point in an exponent.");
206
+ }
207
+ $this->_buffer .= $c;
208
+ } elseif ($c === 'e' || $c === 'E') {
209
+ if (stripos($this->_buffer, 'e') !== false) {
210
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
211
+ "Cannot have multiple exponents in a number.");
212
+ }
213
+ $this->_buffer .= $c;
214
+ } elseif ($c === '+' || $c === '-') {
215
+ $last = mb_substr($this->_buffer, -1);
216
+ if (!($last === 'e' || $last === 'E')) {
217
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
218
+ "Can only have '+' or '-' after the 'e' or 'E' in a number.");
219
+ }
220
+ $this->_buffer .= $c;
221
+ } else {
222
+ $this->_end_number();
223
+ // we have consumed one beyond the end of the number
224
+ $this->_consume_char($c);
225
+ }
226
+ break;
227
+
228
+ case self::STATE_IN_TRUE:
229
+ $this->_buffer .= $c;
230
+ if (mb_strlen($this->_buffer) === 4) {
231
+ $this->_end_true();
232
+ }
233
+ break;
234
+
235
+ case self::STATE_IN_FALSE:
236
+ $this->_buffer .= $c;
237
+ if (mb_strlen($this->_buffer) === 5) {
238
+ $this->_end_false();
239
+ }
240
+ break;
241
+
242
+ case self::STATE_IN_NULL:
243
+ $this->_buffer .= $c;
244
+ if (mb_strlen($this->_buffer) === 4) {
245
+ $this->_end_null();
246
+ }
247
+ break;
248
+
249
+ case self::STATE_DONE:
250
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
251
+ "Expected end of document.");
252
+
253
+ default:
254
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
255
+ "Internal error. Reached an unknown state: ".$this->_state);
256
+ }
257
+ }
258
+
259
+ private function _is_hex_character($c) {
260
+ return preg_match('/[0-9a-fA-F]/u', $c);
261
+ }
262
+
263
+ // Thanks: http://stackoverflow.com/questions/1805802/php-convert-unicode-codepoint-to-utf-8
264
+ private function _convert_codepoint_to_character($num) {
265
+ if($num<=0x7F) return chr($num);
266
+ if($num<=0x7FF) return chr(($num>>6)+192).chr(($num&63)+128);
267
+ if($num<=0xFFFF) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
268
+ if($num<=0x1FFFFF) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128);
269
+ return '';
270
+ }
271
+
272
+ private function _is_digit($c) {
273
+ // Only concerned with the first character in a number.
274
+ return preg_match('/[0-9]|-/u',$c);
275
+ }
276
+
277
+
278
+ private function _start_value($c) {
279
+ if ($c === '[') {
280
+ $this->_start_array();
281
+ } elseif ($c === '{') {
282
+ $this->_start_object();
283
+ } elseif ($c === '"') {
284
+ $this->_start_string();
285
+ } elseif ($this->_is_digit($c)) {
286
+ $this->_start_number($c);
287
+ } elseif ($c === 't') {
288
+ $this->_state = self::STATE_IN_TRUE;
289
+ $this->_buffer .= $c;
290
+ } elseif ($c === 'f') {
291
+ $this->_state = self::STATE_IN_FALSE;
292
+ $this->_buffer .= $c;
293
+ } elseif ($c === 'n') {
294
+ $this->_state = self::STATE_IN_NULL;
295
+ $this->_buffer .= $c;
296
+ } else {
297
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
298
+ "Unexpected character for value: ".$c);
299
+ }
300
+ }
301
+
302
+
303
+ private function _start_array() {
304
+ $this->_listener->start_array();
305
+ $this->_state = self::STATE_IN_ARRAY;
306
+ array_push($this->_stack, self::STACK_ARRAY);
307
+ }
308
+
309
+ private function _end_array() {
310
+ $popped = array_pop($this->_stack);
311
+ if ($popped !== self::STACK_ARRAY) {
312
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
313
+ "Unexpected end of array encountered.");
314
+ }
315
+ $this->_listener->end_array();
316
+ $this->_state = self::STATE_AFTER_VALUE;
317
+
318
+ if (empty($this->_stack)) {
319
+ $this->_end_document();
320
+ }
321
+ }
322
+
323
+
324
+ private function _start_object() {
325
+ $this->_listener->start_object();
326
+ $this->_state = self::STATE_IN_OBJECT;
327
+ array_push($this->_stack, self::STACK_OBJECT);
328
+ }
329
+
330
+ private function _end_object() {
331
+ $popped = array_pop($this->_stack);
332
+ if ($popped !== self::STACK_OBJECT) {
333
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
334
+ "Unexpected end of object encountered.");
335
+ }
336
+ $this->_listener->end_object();
337
+ $this->_state = self::STATE_AFTER_VALUE;
338
+
339
+ if (empty($this->_stack)) {
340
+ $this->_end_document();
341
+ }
342
+ }
343
+
344
+ private function _start_string() {
345
+ array_push($this->_stack, self::STACK_STRING);
346
+ $this->_state = self::STATE_IN_STRING;
347
+ }
348
+
349
+ private function _start_key() {
350
+ array_push($this->_stack, self::STACK_KEY);
351
+ $this->_state = self::STATE_IN_STRING;
352
+ }
353
+
354
+ private function _end_string() {
355
+ $popped = array_pop($this->_stack);
356
+ if ($popped === self::STACK_KEY) {
357
+ $this->_listener->key($this->_buffer);
358
+ $this->_state = self::STATE_END_KEY;
359
+ } elseif ($popped === self::STACK_STRING) {
360
+ $this->_listener->value($this->_buffer);
361
+ $this->_state = self::STATE_AFTER_VALUE;
362
+ } else {
363
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
364
+ "Unexpected end of string.");
365
+ }
366
+ $this->_buffer = '';
367
+ }
368
+
369
+ private function _process_escape_character($c) {
370
+ if ($c === '"') {
371
+ $this->_buffer .= '"';
372
+ } elseif ($c === '\\') {
373
+ $this->_buffer .= '\\';
374
+ } elseif ($c === '/') {
375
+ $this->_buffer .= '/';
376
+ } elseif ($c === 'b') {
377
+ $this->_buffer .= "\x08";
378
+ } elseif ($c === 'f') {
379
+ $this->_buffer .= "\f";
380
+ } elseif ($c === 'n') {
381
+ $this->_buffer .= "\n";
382
+ } elseif ($c === 'r') {
383
+ $this->_buffer .= "\r";
384
+ } elseif ($c === 't') {
385
+ $this->_buffer .= "\t";
386
+ } elseif ($c === 'u') {
387
+ $this->_state = self::STATE_UNICODE;
388
+ } else {
389
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
390
+ "Expected escaped character after backslash. Got: ".$c);
391
+ }
392
+
393
+ if ($this->_state !== self::STATE_UNICODE) {
394
+ $this->_state = self::STATE_IN_STRING;
395
+ }
396
+ }
397
+
398
+ private function _process_unicode_character($c) {
399
+ if (!$this->_is_hex_character($c)) {
400
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
401
+ "Expected hex character for escaped unicode character. Unicode parsed: " . implode($this->_unicode_buffer) . " and got: ".$c);
402
+ }
403
+ array_push($this->_unicode_buffer, $c);
404
+ if (count($this->_unicode_buffer) === 4) {
405
+ $codepoint = hexdec(implode($this->_unicode_buffer));
406
+
407
+ if ($codepoint >= 0xD800 && $codepoint < 0xDC00) {
408
+ $this->_unicode_high_codepoint = $codepoint;
409
+ $this->_unicode_buffer = array();
410
+ } elseif ($codepoint >= 0xDC00 && $codepoint <= 0xDFFF) {
411
+ if ($this->_unicode_high_codepoint === -1) {
412
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
413
+ "Missing high codepoint for unicode low codepoint.");
414
+ }
415
+ $combined_codepoint = (($this->_unicode_high_codepoint - 0xD800) * 0x400) + ($codepoint - 0xDC00) + 0x10000;
416
+
417
+ $this->_end_unicode_character($combined_codepoint);
418
+ } else {
419
+ $this->_end_unicode_character($codepoint);
420
+ }
421
+ }
422
+ }
423
+
424
+ private function _end_unicode_character($codepoint) {
425
+ $this->_buffer .= $this->_convert_codepoint_to_character($codepoint);
426
+ $this->_unicode_buffer = array();
427
+ $this->_unicode_high_codepoint = -1;
428
+ $this->_state = self::STATE_IN_STRING;
429
+ }
430
+
431
+
432
+ private function _start_number($c) {
433
+ $this->_state = self::STATE_IN_NUMBER;
434
+ $this->_buffer .= $c;
435
+ }
436
+
437
+ private function _end_number() {
438
+ $num = $this->_buffer;
439
+ if (preg_match('/\./', $num)) {
440
+ $num = (float)($num);
441
+ } else {
442
+ $num = (int)($num);
443
+ }
444
+ $this->_listener->value($num);
445
+
446
+ $this->_buffer = '';
447
+ $this->_state = self::STATE_AFTER_VALUE;
448
+ }
449
+
450
+
451
+ private function _end_true() {
452
+ $true = $this->_buffer;
453
+ if ($true === 'true') {
454
+ $this->_listener->value(true);
455
+ } else {
456
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
457
+ "Expected 'true'. Got: ".$true);
458
+ }
459
+ $this->_buffer = '';
460
+ $this->_state = self::STATE_AFTER_VALUE;
461
+ }
462
+
463
+ private function _end_false() {
464
+ $false = $this->_buffer;
465
+ if ($false === 'false') {
466
+ $this->_listener->value(false);
467
+ } else {
468
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
469
+ "Expected 'false'. Got: ".$false);
470
+ }
471
+ $this->_buffer = '';
472
+ $this->_state = self::STATE_AFTER_VALUE;
473
+ }
474
+
475
+ private function _end_null() {
476
+ $null = $this->_buffer;
477
+ if ($null === 'null') {
478
+ $this->_listener->value(null);
479
+ } else {
480
+ throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
481
+ "Expected 'null'. Got: ".$null);
482
+ }
483
+ $this->_buffer = '';
484
+ $this->_state = self::STATE_AFTER_VALUE;
485
+ }
486
+
487
+
488
+ private function _end_document() {
489
+ $this->_listener->end_document();
490
+ $this->_state = self::STATE_DONE;
491
+ }
492
+
493
  }
lib/JSONStreamingParser/ParsingError.php CHANGED
@@ -1,12 +1,12 @@
1
- <?php
2
- class JsonStreamingParser_ParsingError extends Exception {
3
-
4
- /**
5
- * @param int $line
6
- * @param int $char
7
- * @param string $message
8
- */
9
- public function __construct($line, $char, $message) {
10
- parent::__construct("Parsing error in [$line:$char]. " . $message);
11
- }
12
- }
1
+ <?php
2
+ class JsonStreamingParser_ParsingError extends Exception {
3
+
4
+ /**
5
+ * @param int $line
6
+ * @param int $char
7
+ * @param string $message
8
+ */
9
+ public function __construct($line, $char, $message) {
10
+ parent::__construct("Parsing error in [$line:$char]. " . $message);
11
+ }
12
+ }
lib/ecwid_catalog.php CHANGED
@@ -1,366 +1,366 @@
1
- <?php
2
-
3
- class EcwidCatalog
4
- {
5
- var $store_id = 0;
6
- var $store_base_url = '';
7
- var $ecwid_api = null;
8
-
9
- public function __construct($store_id, $store_base_url)
10
- {
11
- $this->store_id = intval($store_id);
12
- $this->store_base_url = $store_base_url;
13
- $this->ecwid_api = new EcwidProductApi($this->store_id);
14
- }
15
-
16
- public function get_product($id)
17
- {
18
- $params = array
19
- (
20
- array("alias" => "p", "action" => "product", "params" => array("id" => $id)),
21
- array("alias" => "pf", "action" => "profile")
22
- );
23
-
24
- $batch_result = $this->ecwid_api->get_batch_request($params);
25
- $product = $batch_result["p"];
26
- $profile = $batch_result["pf"];
27
-
28
- $return = $this->_l('');
29
-
30
- if (is_array($product))
31
- {
32
-
33
- $return .= $this->_l('<div itemscope itemtype="http://schema.org/Product">', 1);
34
- $return .= $this->_l('<h2 class="ecwid_catalog_product_name" itemprop="name">' . EcwidPlatform::esc_html($product["name"]) . '</h2>');
35
- $return .= $this->_l('<p class="ecwid_catalog_product_sku" itemprop="sku">' . EcwidPlatform::esc_html($product["sku"]) . '</p>');
36
-
37
- if (!empty($product["thumbnailUrl"]))
38
- {
39
- $return .= $this->_l('<div class="ecwid_catalog_product_image">', 1);
40
- $return .= $this->_l(
41
- sprintf(
42
- '<img itemprop="image" src="%s" alt="%s" />',
43
- EcwidPlatform::esc_attr($product['thumbnailUrl']),
44
- EcwidPlatform::esc_attr($product['name'] . ' ' . $product['sku'])
45
- )
46
- );
47
- $return .= $this->_l('</div>', -1);
48
- }
49
-
50
- if(is_array($product["categories"]))
51
- {
52
- foreach ($product["categories"] as $ecwid_category)
53
- {
54
- if($ecwid_category["defaultCategory"] == true)
55
- {
56
- $return .= $this->_l('<div class="ecwid_catalog_product_category">' . EcwidPlatform::esc_html($ecwid_category['name']) . '</div>');
57
- }
58
- }
59
- }
60
-
61
- $return .= $this->_l('<div class="ecwid_catalog_product_price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">', 1);
62
- $return .= $this->_l(EcwidPlatform::get_price_label() . ': <span itemprop="price">' . EcwidPlatform::esc_html($product["price"]) . '</span>');
63
-
64
- $return .= $this->_l('<span itemprop="priceCurrency">' . EcwidPlatform::esc_html($profile['currency']) . '</span>');
65
- if (!isset($product['quantity']) || (isset($product['quantity']) && $product['quantity'] > 0)) {
66
- $return .= $this->_l('<link itemprop="availability" href="http://schema.org/InStock" />In stock');
67
- }
68
- $return .= $this->_l('</div>', -1);
69
-
70
- $return .= $this->_l('<div class="ecwid_catalog_product_description" itemprop="description">', 1);
71
- $return .= $this->_l($product['description']);
72
- $return .= $this->_l('</div>', -1);
73
-
74
- if (is_array($product['attributes']) && !empty($product['attributes'])) {
75
-
76
- foreach ($product['attributes'] as $attribute) {
77
- if (trim($attribute['value']) != '') {
78
- $return .= $this->_l('<div class="ecwid_catalog_product_attribute">', 1);
79
-
80
- $attr_string = EcwidPlatform::esc_html($attribute['name']) . ':';
81
-
82
- if (isset($attribute['internalName']) && $attribute['internalName'] == 'Brand') {
83
- $attr_string .= '<span itemprop="brand">' . EcwidPlatform::esc_html($attribute['value']) . '</span>';
84
- } else {
85
- $attr_string .= EcwidPlatform::esc_html($attribute['value']);
86
- }
87
-
88
- $return .= $this->_l($attr_string);
89
- $return .= $this->_l('</div>', -1);
90
- }
91
- }
92
- }
93
-
94
- if (is_array($product["options"]))
95
- {
96
- $allowed_types = array('TEXTFIELD', 'DATE', 'TEXTAREA', 'SELECT', 'RADIO', 'CHECKBOX');
97
- foreach($product["options"] as $product_options)
98
- {
99
- if (!in_array($product_options['type'], $allowed_types)) continue;
100
-
101
- $return .= $this->_l('<div class="ecwid_catalog_product_options">', 1);
102
- $return .=$this->_l('<span>' . EcwidPlatform::esc_html($product_options["name"]) . '</span>');
103
-
104
- if($product_options["type"] == "TEXTFIELD" || $product_options["type"] == "DATE")
105
- {
106
- $return .=$this->_l('<input type="text" size="40" name="'. EcwidPlatform::esc_attr($product_options["name"]) . '">');
107
- }
108
- if($product_options["type"] == "TEXTAREA")
109
- {
110
- $return .=$this->_l('<textarea name="' . EcwidPlatform::esc_attr($product_options["name"]) . '"></textarea>');
111
- }
112
- if ($product_options["type"] == "SELECT")
113
- {
114
- $return .= $this->_l('<select name="'. $product_options["name"].'">', 1);
115
- foreach ($product_options["choices"] as $options_param)
116
- {
117
- $return .= $this->_l(
118
- sprintf(
119
- '<option value="%s">%s (%s)</option>',
120
- EcwidPlatform::esc_attr($options_param['text']),
121
- EcwidPlatform::esc_html($options_param['text']),
122
- EcwidPlatform::esc_html($options_param['priceModifier'])
123
- )
124
- );
125
- }
126
- $return .= $this->_l('</select>', -1);
127
- }
128
- if($product_options["type"] == "RADIO")
129
- {
130
- foreach ($product_options["choices"] as $options_param)
131
- {
132
- $return .= $this->_l(
133
- sprintf(
134
- '<input type="radio" name="%s" value="%s" />%s (%s)',
135
- EcwidPlatform::esc_attr($product_options['name']),
136
- EcwidPlatform::esc_attr($options_param['text']),
137
- EcwidPlatform::esc_html($options_param['text']),
138
- EcwidPlatform::esc_html($options_param['priceModifier'])
139
- )
140
- );
141
- }
142
- }
143
- if($product_options["type"] == "CHECKBOX")
144
- {
145
- foreach ($product_options["choices"] as $options_param)
146
- {
147
- $return .= $this->_l(
148
- sprintf(
149
- '<input type="checkbox" name="%s" value="%s" />%s (%s)',
150
- EcwidPlatform::esc_attr($product_options['name']),
151
- EcwidPlatform::esc_attr($options_param['text']),
152
- EcwidPlatform::esc_html($options_param['text']),
153
- EcwidPlatform::esc_html($options_param['priceModifier'])
154
- )
155
- );
156
- }
157
- }
158
-
159
- $return .= $this->_l('</div>', -1);
160
- }
161
- }
162
-
163
- if (is_array($product["galleryImages"]))
164
- {
165
- foreach ($product["galleryImages"] as $galleryimage)
166
- {
167
- if (empty($galleryimage["alt"])) $galleryimage["alt"] = htmlspecialchars($product["name"]);
168
- $return .= $this->_l(
169
- sprintf(
170
- '<img src="%s" alt="%s" title="%s" />',
171
- EcwidPlatform::esc_attr($galleryimage['url']),
172
- EcwidPlatform::esc_attr($galleryimage['alt']),
173
- EcwidPlatform::esc_attr($galleryimage['alt'])
174
- )
175
- );
176
- }
177
- }
178
-
179
- $return .= $this->_l("</div>", -1);
180
- }
181
-
182
- return $return;
183
- }
184
-
185
- public function get_category($id)
186
- {
187
- $params = array
188
- (
189
- array("alias" => "c", "action" => "categories", "params" => array("parent" => $id)),
190
- array("alias" => "p", "action" => "products", "params" => array("category" => $id)),
191
- array("alias" => "pf", "action" => "profile")
192
- );
193
- if ($id > 0) {
194
- $params[] = array('alias' => 'category', "action" => "category", "params" => array("id" => $id));
195
- }
196
-
197
- $batch_result = $this->ecwid_api->get_batch_request($params);
198
-
199
- $category = $id > 0 ? $batch_result['category'] : null;
200
- $categories = $batch_result["c"];
201
- $products = $batch_result["p"];
202
- $profile = $batch_result["pf"];
203
-
204
- $return = $this->_l('');
205
-
206
- if (!is_null($category)) {
207
- $return .= $this->_l('<h2>' . EcwidPlatform::esc_html($category['name']) . '</h2>');
208
- $return .= $this->_l('<div>' . $category['description'] . '</div>');
209
- }
210
-
211
- if (is_array($categories))
212
- {
213
- foreach ($categories as $category)
214
- {
215
- $category_url = $this->get_category_url($category);
216
-
217
- $category_name = $category["name"];
218
- $return .= $this->_l('<div class="ecwid_catalog_category_name">', 1);
219
- $return .= $this->_l('<a href="' . EcwidPlatform::esc_attr($category_url) . '">' . EcwidPlatform::esc_html($category_name) . '</a>');
220
- $return .= $this->_l('</div>', -1);
221
- }
222
- }
223
-
224
- if (is_array($products))
225
- {
226
- foreach ($products as $product)
227
- {
228
-
229
- $product_url = $this->get_product_url($product);
230
-
231
- $product_name = $product['name'];
232
- $product_price = $product['price'] . ' ' . $profile['currency'];
233
- $return .= $this->_l('<div>', 1);
234
- $return .= $this->_l('<span class="ecwid_product_name">', 1);
235
- $return .= $this->_l('<a href="' . EcwidPlatform::esc_attr($product_url) . '">' . EcwidPlatform::esc_html($product_name) . '</a>');
236
- $return .= $this->_l('</span>', -1);
237
- $return .= $this->_l('<span class="ecwid_product_price">' . EcwidPlatform::esc_html($product_price) . '</span>');
238
- $return .= $this->_l('</div>', -1);
239
- }
240
- }
241
-
242
- return $return;
243
- }
244
-
245
- public function parse_escaped_fragment($escaped_fragment)
246
- {
247
- $fragment = urldecode($escaped_fragment);
248
- $return = array();
249
-
250
- if (preg_match('/^(\/~\/)([a-z]+)\/(.*)$/', $fragment, $matches)) {
251
- parse_str($matches[3], $return);
252
- $return['mode'] = $matches[2];
253
- } elseif (preg_match('!.*/(p|c)/([0-9]*)!', $fragment, $matches)) {
254
- if (count($matches) == 3 && in_array($matches[1], array('p', 'c'))) {
255
- $return = array(
256
- 'mode' => 'p' == $matches[1] ? 'product' : 'category',
257
- 'id' => $matches[2]
258
- );
259
- }
260
- }
261
-
262
- return $return;
263
- }
264
-
265
- public function get_category_name($id)
266
- {
267
- $category = $this->ecwid_api->get_category($id);
268
-
269
- $result = '';
270
- if (is_array($category) && isset($category['name'])) {
271
- $result = $category['name'];
272
- }
273
-
274
- return $result;
275
- }
276
-
277
- public function get_product_name($id)
278
- {
279
- $product = $this->ecwid_api->get_product($id);
280
-
281
- $result = '';
282
- if (is_array($product) && isset($product['name'])) {
283
- $result = $product['name'];
284
- }
285
-
286
- return $result;
287
- }
288
-
289
-
290
- public function get_category_description($id)
291
- {
292
- $category = $this->ecwid_api->get_category($id);
293
-
294
- $result = '';
295
- if (is_array($category) && isset($category['description'])) {
296
- $result = $category['description'];
297
- }
298
-
299
- return $result;
300
- }
301
-
302
- public function get_product_description($id)
303
- {
304
- $product = $this->ecwid_api->get_product($id);
305
-
306
- $result = '';
307
- if (is_array($product) && isset($product['description'])) {
308
- $result = $product['description'];
309
- }
310
-
311
- return $result;
312
- }
313
-
314
- public function get_product_url($product)
315
- {
316
- if (is_numeric($product) && $this->ecwid_api->is_api_enabled()) {
317
- $product = $this->ecwid_api->get_product($product);
318
- }
319
-
320
- return $this->get_entity_url($product, 'p');
321
- }
322
-
323
- public function get_category_url($category)
324
- {
325
- if (is_numeric($category) && $this->ecwid_api->is_api_enabled()) {
326
- $category = $this->ecwid_api->get_category($category);
327
- }
328
-
329
- return $this->get_entity_url($category, 'c');
330
- }
331
-
332
- protected function get_entity_url($entity, $type) {
333
-
334
- $link = $this->store_base_url;
335
-
336
- if (is_numeric($entity)) {
337
- return $link . '#!/' . $type . '/' . $entity;
338
- } elseif (is_array($entity) && isset($entity['url'])) {
339
- $link .= substr($entity['url'], strpos($entity['url'], '#'));
340
- }
341
-
342
- return $link;
343
-
344
- }
345
-
346
- /*
347
- * A helper function to produce indented html output.
348
- * Indent change need to be 1 for opening tag lines and -1 for closing tag lines.
349
- * Regular lines should omit the second parameter.
350
- * Example:
351
- * _l('<parent-tag>', 1);
352
- * _l('<content-tag>content</content-tag>');
353
- * _l('</parent-tag>', -1)
354
- *
355
- */
356
- protected function _l($code, $indent_change = 0)
357
- {
358
- static $indent = 0;
359
-
360
- if ($indent_change < 0) $indent -= 1;
361
- $str = str_repeat(' ', $indent) . $code . "\n";
362
- if ($indent_change > 0) $indent += 1;
363
-
364
- return $str;
365
- }
366
- }
1
+ <?php
2
+
3
+ class EcwidCatalog
4
+ {
5
+ var $store_id = 0;
6
+ var $store_base_url = '';
7
+ var $ecwid_api = null;
8
+
9
+ public function __construct($store_id, $store_base_url)
10
+ {
11
+ $this->store_id = intval($store_id);
12
+ $this->store_base_url = $store_base_url;
13
+ $this->ecwid_api = new EcwidProductApi($this->store_id);
14
+ }
15
+
16
+ public function get_product($id)
17
+ {
18
+ $params = array
19
+ (
20
+ array("alias" => "p", "action" => "product", "params" => array("id" => $id)),
21
+ array("alias" => "pf", "action" => "profile")
22
+ );
23
+
24
+ $batch_result = $this->ecwid_api->get_batch_request($params);
25
+ $product = $batch_result["p"];
26
+ $profile = $batch_result["pf"];
27
+
28
+ $return = $this->_l('');
29
+
30
+ if (is_array($product))
31
+ {
32
+
33
+ $return .= $this->_l('<div itemscope itemtype="http://schema.org/Product">', 1);
34
+ $return .= $this->_l('<h2 class="ecwid_catalog_product_name" itemprop="name">' . EcwidPlatform::esc_html($product["name"]) . '</h2>');
35
+ $return .= $this->_l('<p class="ecwid_catalog_product_sku" itemprop="sku">' . EcwidPlatform::esc_html($product["sku"]) . '</p>');
36
+
37
+ if (!empty($product["thumbnailUrl"]))
38
+ {
39
+ $return .= $this->_l('<div class="ecwid_catalog_product_image">', 1);
40
+ $return .= $this->_l(
41
+ sprintf(
42
+ '<img itemprop="image" src="%s" alt="%s" />',
43
+ EcwidPlatform::esc_attr($product['originalImageUrl']),
44
+ EcwidPlatform::esc_attr($product['name'] . ' ' . $product['sku'])
45
+ )
46
+ );
47
+ $return .= $this->_l('</div>', -1);
48
+ }
49
+
50
+ if(isset($product['categories']) && is_array($product["categories"]))
51
+ {
52
+ foreach ($product["categories"] as $ecwid_category)
53
+ {
54
+ if($ecwid_category["defaultCategory"] == true)
55
+ {
56
+ $return .= $this->_l('<div class="ecwid_catalog_product_category">' . EcwidPlatform::esc_html($ecwid_category['name']) . '</div>');
57
+ }
58
+ }
59
+ }
60
+
61
+ $return .= $this->_l('<div class="ecwid_catalog_product_price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">', 1);
62
+ $return .= $this->_l(EcwidPlatform::get_price_label() . ': <span itemprop="price">' . EcwidPlatform::esc_html($product["price"]) . '</span>');
63
+
64
+ $return .= $this->_l('<span itemprop="priceCurrency">' . EcwidPlatform::esc_html($profile['currency']) . '</span>');
65
+ if (!isset($product['quantity']) || (isset($product['quantity']) && $product['quantity'] > 0)) {
66
+ $return .= $this->_l('<link itemprop="availability" href="http://schema.org/InStock" />In stock');
67
+ }
68
+ $return .= $this->_l('</div>', -1);
69
+
70
+ $return .= $this->_l('<div class="ecwid_catalog_product_description" itemprop="description">', 1);
71
+ $return .= $this->_l($product['description']);
72
+ $return .= $this->_l('</div>', -1);
73
+
74
+ if (is_array($product['attributes']) && !empty($product['attributes'])) {
75
+
76
+ foreach ($product['attributes'] as $attribute) {
77
+ if (trim($attribute['value']) != '') {
78
+ $return .= $this->_l('<div class="ecwid_catalog_product_attribute">', 1);
79
+
80
+ $attr_string = EcwidPlatform::esc_html($attribute['name']) . ':';
81
+
82
+ if (isset($attribute['internalName']) && $attribute['internalName'] == 'Brand') {
83
+ $attr_string .= '<span itemprop="brand">' . EcwidPlatform::esc_html($attribute['value']) . '</span>';
84
+ } else {
85
+ $attr_string .= EcwidPlatform::esc_html($attribute['value']);
86
+ }
87
+
88
+ $return .= $this->_l($attr_string);
89
+ $return .= $this->_l('</div>', -1);
90
+ }
91
+ }
92
+ }
93
+
94
+ if (is_array($product["options"]))
95
+ {
96
+ $allowed_types = array('TEXTFIELD', 'DATE', 'TEXTAREA', 'SELECT', 'RADIO', 'CHECKBOX');
97
+ foreach($product["options"] as $product_options)
98
+ {
99
+ if (!in_array($product_options['type'], $allowed_types)) continue;
100
+
101
+ $return .= $this->_l('<div class="ecwid_catalog_product_options">', 1);
102
+ $return .=$this->_l('<span>' . EcwidPlatform::esc_html($product_options["name"]) . '</span>');
103
+
104
+ if($product_options["type"] == "TEXTFIELD" || $product_options["type"] == "DATE")
105
+ {
106
+ $return .=$this->_l('<input type="text" size="40" name="'. EcwidPlatform::esc_attr($product_options["name"]) . '">');
107
+ }
108
+ if($product_options["type"] == "TEXTAREA")
109
+ {
110
+ $return .=$this->_l('<textarea name="' . EcwidPlatform::esc_attr($product_options["name"]) . '"></textarea>');
111
+ }
112
+ if ($product_options["type"] == "SELECT")
113
+ {
114
+ $return .= $this->_l('<select name="'. $product_options["name"].'">', 1);
115
+ foreach ($product_options["choices"] as $options_param)
116
+ {
117
+ $return .= $this->_l(
118
+ sprintf(
119
+ '<option value="%s">%s (%s)</option>',
120
+ EcwidPlatform::esc_attr($options_param['text']),
121
+ EcwidPlatform::esc_html($options_param['text']),
122
+ EcwidPlatform::esc_html($options_param['priceModifier'])
123
+ )
124
+ );
125
+ }
126
+ $return .= $this->_l('</select>', -1);
127
+ }
128
+ if($product_options["type"] == "RADIO")
129
+ {
130
+ foreach ($product_options["choices"] as $options_param)
131
+ {
132
+ $return .= $this->_l(
133
+ sprintf(
134
+ '<input type="radio" name="%s" value="%s" />%s (%s)',
135
+ EcwidPlatform::esc_attr($product_options['name']),
136
+ EcwidPlatform::esc_attr($options_param['text']),
137
+ EcwidPlatform::esc_html($options_param['text']),
138
+ EcwidPlatform::esc_html($options_param['priceModifier'])
139
+ )
140
+ );
141
+ }
142
+ }
143
+ if($product_options["type"] == "CHECKBOX")
144
+ {
145
+ foreach ($product_options["choices"] as $options_param)
146
+ {
147
+ $return .= $this->_l(
148
+ sprintf(
149
+ '<input type="checkbox" name="%s" value="%s" />%s (%s)',
150
+ EcwidPlatform::esc_attr($product_options['name']),
151
+ EcwidPlatform::esc_attr($options_param['text']),
152
+ EcwidPlatform::esc_html($options_param['text']),
153
+ EcwidPlatform::esc_html($options_param['priceModifier'])
154
+ )
155
+ );
156
+ }
157
+ }
158
+
159
+ $return .= $this->_l('</div>', -1);
160
+ }
161
+ }
162
+
163
+ if (is_array($product["galleryImages"]))
164
+ {
165
+ foreach ($product["galleryImages"] as $galleryimage)
166
+ {
167
+ if (empty($galleryimage["alt"])) $galleryimage["alt"] = htmlspecialchars($product["name"]);
168
+ $return .= $this->_l(
169
+ sprintf(
170
+ '<img src="%s" alt="%s" title="%s" />',
171
+ EcwidPlatform::esc_attr($galleryimage['url']),
172
+ EcwidPlatform::esc_attr($galleryimage['alt']),
173
+ EcwidPlatform::esc_attr($galleryimage['alt'])
174
+ )
175
+ );
176
+ }
177
+ }
178
+
179
+ $return .= $this->_l("</div>", -1);
180
+ }
181
+
182
+ return $return;
183
+ }
184
+
185
+ public function get_category($id)
186
+ {
187
+ $params = array
188
+ (
189
+ array("alias" => "c", "action" => "categories", "params" => array("parent" => $id)),
190
+ array("alias" => "p", "action" => "products", "params" => array("category" => $id)),
191
+ array("alias" => "pf", "action" => "profile")
192
+ );
193
+ if ($id > 0) {
194
+ $params[] = array('alias' => 'category', "action" => "category", "params" => array("id" => $id));
195
+ }
196
+
197
+ $batch_result = $this->ecwid_api->get_batch_request($params);
198
+
199
+ $category = $id > 0 ? $batch_result['category'] : null;
200
+ $categories = $batch_result["c"];
201
+ $products = $batch_result["p"];
202
+ $profile = $batch_result["pf"];
203
+
204
+ $return = $this->_l('');
205
+
206
+ if (!is_null($category)) {
207
+ $return .= $this->_l('<h2>' . EcwidPlatform::esc_html($category['name']) . '</h2>');
208
+ $return .= $this->_l('<div>' . $category['description'] . '</div>');
209
+ }
210
+
211
+ if (is_array($categories))
212
+ {
213
+ foreach ($categories as $category)
214
+ {
215
+ $category_url = $this->get_category_url($category);
216
+
217
+ $category_name = $category["name"];
218
+ $return .= $this->_l('<div class="ecwid_catalog_category_name">', 1);
219
+ $return .= $this->_l('<a href="' . EcwidPlatform::esc_attr($category_url) . '">' . EcwidPlatform::esc_html($category_name) . '</a>');
220
+ $return .= $this->_l('</div>', -1);
221
+ }
222
+ }
223
+
224
+ if (is_array($products))
225
+ {
226
+ foreach ($products as $product)
227
+ {
228
+
229
+ $product_url = $this->get_product_url($product);
230
+
231
+ $product_name = $product['name'];
232
+ $product_price = $product['price'] . ' ' . $profile['currency'];
233
+ $return .= $this->_l('<div>', 1);
234
+ $return .= $this->_l('<span class="ecwid_product_name">', 1);
235
+ $return .= $this->_l('<a href="' . EcwidPlatform::esc_attr($product_url) . '">' . EcwidPlatform::esc_html($product_name) . '</a>');
236
+ $return .= $this->_l('</span>', -1);
237
+ $return .= $this->_l('<span class="ecwid_product_price">' . EcwidPlatform::esc_html($product_price) . '</span>');
238
+ $return .= $this->_l('</div>', -1);
239
+ }
240
+ }
241
+
242
+ return $return;
243
+ }
244
+
245
+ public function parse_escaped_fragment($escaped_fragment)
246
+ {
247
+ $fragment = urldecode($escaped_fragment);
248
+ $return = array();
249
+
250
+ if (preg_match('/^(\/~\/)([a-z]+)\/(.*)$/', $fragment, $matches)) {
251
+ parse_str($matches[3], $return);
252
+ $return['mode'] = $matches[2];
253
+ } elseif (preg_match('!.*/(p|c)/([0-9]*)!', $fragment, $matches)) {
254
+ if (count($matches) == 3 && in_array($matches[1], array('p', 'c'))) {
255
+ $return = array(
256
+ 'mode' => 'p' == $matches[1] ? 'product' : 'category',
257
+ 'id' => $matches[2]
258
+ );
259
+ }
260
+ }
261
+
262
+ return $return;
263
+ }
264
+
265
+ public function get_category_name($id)
266
+ {
267
+ $category = $this->ecwid_api->get_category($id);
268
+
269
+ $result = '';
270
+ if (is_array($category) && isset($category['name'])) {
271
+ $result = $category['name'];
272
+ }
273
+
274
+ return $result;
275
+ }
276
+
277
+ public function get_product_name($id)
278
+ {
279
+ $product = $this->ecwid_api->get_product($id);
280
+
281
+ $result = '';
282
+ if (is_array($product) && isset($product['name'])) {
283
+ $result = $product['name'];
284
+ }
285
+
286
+ return $result;
287
+ }
288
+
289
+
290
+ public function get_category_description($id)
291
+ {
292
+ $category = $this->ecwid_api->get_category($id);
293
+
294
+ $result = '';
295
+ if (is_array($category) && isset($category['description'])) {
296
+ $result = $category['description'];
297
+ }
298
+
299
+ return $result;
300
+ }
301
+
302
+ public function get_product_description($id)
303
+ {
304
+ $product = $this->ecwid_api->get_product($id);
305
+
306
+ $result = '';
307
+ if (is_array($product) && isset($product['description'])) {
308
+ $result = $product['description'];
309
+ }
310
+
311
+ return $result;
312
+ }
313
+
314
+ public function get_product_url($product)
315
+ {
316
+ if (is_numeric($product) && $this->ecwid_api->is_api_enabled()) {
317
+ $product = $this->ecwid_api->get_product($product);
318
+ }
319
+
320
+ return $this->get_entity_url($product, 'p');
321
+ }
322
+
323
+ public function get_category_url($category)
324
+ {
325
+ if (is_numeric($category) && $this->ecwid_api->is_api_enabled()) {
326
+ $category = $this->ecwid_api->get_category($category);
327
+ }
328
+
329
+ return $this->get_entity_url($category, 'c');
330
+ }
331
+
332
+ protected function get_entity_url($entity, $type) {
333
+
334
+ $link = $this->store_base_url;
335
+
336
+ if (is_numeric($entity)) {
337
+ return $link . '#!/' . $type . '/' . $entity;
338
+ } elseif (is_array($entity) && isset($entity['url'])) {
339
+ $link .= substr($entity['url'], strpos($entity['url'], '#'));
340
+ }
341
+
342
+ return $link;
343
+
344
+ }
345
+
346
+ /*
347
+ * A helper function to produce indented html output.
348
+ * Indent change need to be 1 for opening tag lines and -1 for closing tag lines.
349
+ * Regular lines should omit the second parameter.
350
+ * Example:
351
+ * _l('<parent-tag>', 1);
352
+ * _l('<content-tag>content</content-tag>');
353
+ * _l('</parent-tag>', -1)
354
+ *
355
+ */
356
+ protected function _l($code, $indent_change = 0)
357
+ {
358
+ static $indent = 0;
359
+
360
+ if ($indent_change < 0) $indent -= 1;
361
+ $str = str_repeat(' ', $indent) . $code . "\n";
362
+ if ($indent_change > 0) $indent += 1;
363
+
364
+ return $str;
365
+ }
366
+ }
lib/ecwid_platform.php CHANGED
@@ -1,46 +1,46 @@
1
- <?php
2
-
3
- class EcwidPlatform {
4
-
5
- static public function esc_attr($value)
6
- {
7
- return esc_attr($value);
8
- }
9
-
10
- static public function esc_html($value)
11
- {
12
- return esc_html($value);
13
- }
14
-
15
- static public function get_price_label()
16
- {
17
- return __('Price', 'ecwid-shopping-cart');
18
- }
19
-
20
- static public function fetch_url($url)
21
- {
22
- $result = wp_remote_get($url);
23
-
24
- $return = array(
25
- 'code' => '',
26
- 'data' => '',
27
- 'message' => ''
28
- );
29
-
30
- if (is_array($result)) {
31
- $return = array(
32
- 'code' => $result['response']['code'],
33
- 'data' => $result['body']
34
- );
35
- } elseif (is_object($result)) {
36
- $return = array(
37
- 'code' => $result->get_error_code(),
38
- 'data' => $result->get_error_data(),
39
- 'message' => $result->get_error_message()
40
- );
41
- }
42
-
43
- return $return;
44
-
45
- }
46
- }
1
+ <?php
2
+
3
+ class EcwidPlatform {
4
+
5
+ static public function esc_attr($value)
6
+ {
7
+ return esc_attr($value);
8
+ }
9
+
10
+ static public function esc_html($value)
11
+ {
12
+ return esc_html($value);
13
+ }
14
+
15
+ static public function get_price_label()
16
+ {
17
+ return __('Price', 'ecwid-shopping-cart');
18
+ }
19
+
20
+ static public function fetch_url($url)
21
+ {
22
+ $result = wp_remote_get($url);
23
+
24
+ $return = array(
25
+ 'code' => '',
26
+ 'data' => '',
27
+ 'message' => ''
28
+ );
29
+
30
+ if (is_array($result)) {
31
+ $return = array(
32
+ 'code' => $result['response']['code'],
33
+ 'data' => $result['body']
34
+ );
35
+ } elseif (is_object($result)) {
36
+ $return = array(
37
+ 'code' => $result->get_error_code(),
38
+ 'data' => $result->get_error_data(),
39
+ 'message' => $result->get_error_message()
40
+ );
41
+ }
42
+
43
+ return $return;
44
+
45
+ }
46
+ }
lib/ecwid_product_api.php CHANGED
@@ -1,232 +1,232 @@
1
- <?php
2
-
3
- include_once dirname(__FILE__) . '/ecwid_platform.php';
4
-
5
- class EcwidProductApi {
6
-
7
- var $store_id = '';
8
-
9
- var $error = '';
10
-
11
- var $error_code = '';
12
-
13
- var $ECWID_PRODUCT_API_ENDPOINT = '';
14
-
15
- function __construct($store_id) {
16
-
17
- $this->ECWID_PRODUCT_API_ENDPOINT = 'http://app.ecwid.com/api/v1';
18
- $this->ECWID_PRODUCT_API_ENDPOINT_HTTPS = 'https://app.ecwid.com/api/v1';
19
- $this->store_id = intval($store_id);
20
- }
21
-
22
- function process_request($url) {
23
-
24
- $result = false;
25
- $fetch_result = EcwidPlatform::fetch_url($url);
26
-
27
- if ($fetch_result['code'] == 200) {
28
- $this->error = '';
29
- $this->error_code = '';
30
- $json = $fetch_result['data'];
31
- $result = json_decode($json, true);
32
- } else {
33
- $this->error = $fetch_result['data'];
34
- $this->error_code = $fetch_result['code'];
35
- }
36
-
37
- return $result;
38
- }
39
-
40
- function get_all_categories() {
41
-
42
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/categories';
43
- $categories = $this->process_request($api_url);
44
-
45
- return $categories;
46
- }
47
-
48
- function get_subcategories_by_id($parent_category_id = 0) {
49
-
50
- $parent_category_id = intval($parent_category_id);
51
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/categories?parent=' . $parent_category_id;
52
- $categories = $this->process_request($api_url);
53
-
54
- return $categories;
55
- }
56
-
57
- function get_all_products() {
58
-
59
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/products';
60
- $products = $this->process_request($api_url);
61
-
62
- return $products;
63
- }
64
-
65
-
66
- function get_products_by_category_id($category_id = 0) {
67
-
68
- $category_id = intval($category_id);
69
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/products?category=" . $category_id;
70
- $products = $this->process_request($api_url);
71
-
72
- return $products;
73
- }
74
-
75
- function get_product($product_id) {
76
-
77
- static $cached;
78
-
79
- $product_id = intval($product_id);
80
-
81
- if (isset($cached[$product_id])) {
82
- return $cached[$product_id];
83
- }
84
-
85
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/product?id=" . $product_id;
86
- $cached[$product_id] = $this->process_request($api_url);
87
-
88
- return $cached[$product_id];
89
- }
90
-
91
- function get_product_https($product_id) {
92
-
93
- static $cached;
94
-
95
- $product_id = intval($product_id);
96
-
97
- if (isset($cached[$product_id])) {
98
- return $cached[$product_id];
99
- }
100
-
101
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT_HTTPS . "/" . $this->store_id . "/product?id=" . $product_id;
102
- $cached[$product_id] = $this->process_request($api_url);
103
-
104
- return $cached[$product_id];
105
- }
106
-
107
-
108
- function get_category($category_id) {
109
-
110
- static $cached = array();
111
-
112
- $category_id = intval($category_id);
113
-
114
- if (isset($cached[$category_id])) {
115
- return $cached[$category_id];
116
- }
117
-
118
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/category?id=" . $category_id;
119
- $cached[$category_id] = $this->process_request($api_url);
120
-
121
- return $cached[$category_id];
122
- }
123
-
124
- function get_batch_request($params) {
125
-
126
- if (!is_array($params)) {
127
- return false;
128
- }
129
-
130
- $api_url = '';
131
- foreach ($params as $param) {
132
-
133
- $alias = $param["alias"];
134
- $action = $param["action"];
135
-
136
- if (isset($param['params']))
137
- $action_params = $param["params"];
138
-
139
- if (!empty($api_url))
140
- $api_url .= "&";
141
-
142
- $api_url .= ($alias . "=" . $action);
143
-
144
- // if there are the parameters - add it to url
145
- if (is_array($action_params)) {
146
-
147
- $action_param_str = "?";
148
- $is_first = true;
149
-
150
- foreach ($action_params as $action_param_name => $action_param_value) {
151
- if (!$is_first) {
152
- $action_param_str .= "&";
153
- }
154
- $action_param_str .= $action_param_name . "=" . $action_param_value;
155
- $is_first = false;
156
- }
157
-
158
- $action_param_str = urlencode($action_param_str);
159
- $api_url .= $action_param_str;
160
- }
161
-
162
- }
163
-
164
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/batch?". $api_url;
165
- $data = $this->process_request($api_url);
166
-
167
- return $data;
168
- }
169
-
170
- function get_random_products($count) {
171
-
172
- $count = intval($count);
173
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/random_products?count=" . $count;
174
- $random_products = $this->process_request($api_url);
175
-
176
- return $random_products;
177
- }
178
-
179
- function get_profile() {
180
-
181
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/profile";
182
- $profile = $this->process_request($api_url);
183
-
184
- return $profile;
185
- }
186
-
187
- function is_api_enabled() {
188
-
189
- // quick and lightweight request
190
- $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/profile";
191
-
192
- $this->process_request($api_url);
193
-
194
- return $this->error_code === '';
195
- }
196
-
197
- function get_method_response_stream($method)
198
- {
199
-
200
- $request_url = '';
201
- switch($method) {
202
-
203
- case 'products':
204
- case 'categories':
205
- $request_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/' . $method;
206
- break;
207
- default:
208
- return false;
209
- }
210
-
211
- $stream = null;
212
-
213
- try {
214
-
215
- if (ini_get('allow_url_fopen')) {
216
- $stream = fopen($request_url, 'r');
217
- } else {
218
- $response = EcwidPlatform::fetch_url($request_url);
219
- $body = $response['data'];
220
- $stream = fopen('php://temp', 'rw');
221
- fwrite($stream, $body);
222
- rewind($stream);
223
- }
224
-
225
- } catch (Exception $e) {
226
-
227
- $stream = null;
228
- }
229
-
230
- return $stream;
231
- }
232
- }
1
+ <?php
2
+
3
+ include_once dirname(__FILE__) . '/ecwid_platform.php';
4
+
5
+ class EcwidProductApi {
6
+
7
+ var $store_id = '';
8
+
9
+ var $error = '';
10
+
11
+ var $error_code = '';
12
+
13
+ var $ECWID_PRODUCT_API_ENDPOINT = '';
14
+
15
+ function __construct($store_id) {
16
+
17
+ $this->ECWID_PRODUCT_API_ENDPOINT = 'http://app.ecwid.com/api/v1';
18
+ $this->ECWID_PRODUCT_API_ENDPOINT_HTTPS = 'https://app.ecwid.com/api/v1';
19
+ $this->store_id = intval($store_id);
20
+ }
21
+
22
+ function process_request($url) {
23
+
24
+ $result = false;
25
+ $fetch_result = EcwidPlatform::fetch_url($url);
26
+
27
+ if ($fetch_result['code'] == 200) {
28
+ $this->error = '';
29
+ $this->error_code = '';
30
+ $json = $fetch_result['data'];
31
+ $result = json_decode($json, true);
32
+ } else {
33
+ $this->error = $fetch_result['data'];
34
+ $this->error_code = $fetch_result['code'];
35
+ }
36
+
37
+ return $result;
38
+ }
39
+
40
+ function get_all_categories() {
41
+
42
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/categories';
43
+ $categories = $this->process_request($api_url);
44
+
45
+ return $categories;
46
+ }
47
+
48
+ function get_subcategories_by_id($parent_category_id = 0) {
49
+
50
+ $parent_category_id = intval($parent_category_id);
51
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/categories?parent=' . $parent_category_id;
52
+ $categories = $this->process_request($api_url);
53
+
54
+ return $categories;
55
+ }
56
+
57
+ function get_all_products() {
58
+
59
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/products';
60
+ $products = $this->process_request($api_url);
61
+
62
+ return $products;
63
+ }
64
+
65
+
66
+ function get_products_by_category_id($category_id = 0) {
67
+
68
+ $category_id = intval($category_id);
69
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/products?category=" . $category_id;
70
+ $products = $this->process_request($api_url);
71
+
72
+ return $products;
73
+ }
74
+
75
+ function get_product($product_id) {
76
+
77
+ static $cached;
78
+
79
+ $product_id = intval($product_id);
80
+
81
+ if (isset($cached[$product_id])) {
82
+ return $cached[$product_id];
83
+ }
84
+
85
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/product?id=" . $product_id;
86
+ $cached[$product_id] = $this->process_request($api_url);
87
+
88
+ return $cached[$product_id];
89
+ }
90
+
91
+ function get_product_https($product_id) {
92
+
93
+ static $cached;
94
+
95
+ $product_id = intval($product_id);
96
+
97
+ if (isset($cached[$product_id])) {
98
+ return $cached[$product_id];
99
+ }
100
+
101
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT_HTTPS . "/" . $this->store_id . "/product?id=" . $product_id;
102
+ $cached[$product_id] = $this->process_request($api_url);
103
+
104
+ return $cached[$product_id];
105
+ }
106
+
107
+
108
+ function get_category($category_id) {
109
+
110
+ static $cached = array();
111
+
112
+ $category_id = intval($category_id);
113
+
114
+ if (isset($cached[$category_id])) {
115
+ return $cached[$category_id];
116
+ }
117
+
118
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/category?id=" . $category_id;
119
+ $cached[$category_id] = $this->process_request($api_url);
120
+
121
+ return $cached[$category_id];
122
+ }
123
+
124
+ function get_batch_request($params) {
125
+
126
+ if (!is_array($params)) {
127
+ return false;
128
+ }
129
+
130
+ $api_url = '';
131
+ foreach ($params as $param) {
132
+
133
+ $alias = $param["alias"];
134
+ $action = $param["action"];
135
+
136
+ if (isset($param['params']))
137
+ $action_params = $param["params"];
138
+
139
+ if (!empty($api_url))
140
+ $api_url .= "&";
141
+
142
+ $api_url .= ($alias . "=" . $action);
143
+
144
+ // if there are the parameters - add it to url
145
+ if (is_array($action_params)) {
146
+
147
+ $action_param_str = "?";
148
+ $is_first = true;
149
+
150
+ foreach ($action_params as $action_param_name => $action_param_value) {
151
+ if (!$is_first) {
152
+ $action_param_str .= "&";
153
+ }
154
+ $action_param_str .= $action_param_name . "=" . $action_param_value;
155
+ $is_first = false;
156
+ }
157
+
158
+ $action_param_str = urlencode($action_param_str);
159
+ $api_url .= $action_param_str;
160
+ }
161
+
162
+ }
163
+
164
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/batch?". $api_url;
165
+ $data = $this->process_request($api_url);
166
+
167
+ return $data;
168
+ }
169
+
170
+ function get_random_products($count) {
171
+
172
+ $count = intval($count);
173
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/random_products?count=" . $count;
174
+ $random_products = $this->process_request($api_url);
175
+
176
+ return $random_products;
177
+ }
178
+
179
+ function get_profile() {
180
+
181
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/profile";
182
+ $profile = $this->process_request($api_url);
183
+
184
+ return $profile;
185
+ }
186
+
187
+ function is_api_enabled() {
188
+
189
+ // quick and lightweight request
190
+ $api_url = $this->ECWID_PRODUCT_API_ENDPOINT . "/" . $this->store_id . "/profile";
191
+
192
+ $this->process_request($api_url);
193
+
194
+ return $this->error_code === '';
195
+ }
196
+
197
+ function get_method_response_stream($method)
198
+ {
199
+
200
+ $request_url = '';
201
+ switch($method) {
202
+
203
+ case 'products':
204
+ case 'categories':
205
+ $request_url = $this->ECWID_PRODUCT_API_ENDPOINT . '/' . $this->store_id . '/' . $method;
206
+ break;
207
+ default:
208
+ return false;
209
+ }
210
+
211
+ $stream = null;
212
+
213
+ try {
214
+
215
+ if (ini_get('allow_url_fopen')) {
216
+ $stream = fopen($request_url, 'r');
217
+ } else {
218
+ $response = EcwidPlatform::fetch_url($request_url);
219
+ $body = $response['data'];
220
+ $stream = fopen('php://temp', 'rw');
221
+ fwrite($stream, $body);
222
+ rewind($stream);
223
+ }
224
+
225
+ } catch (Exception $e) {
226
+
227
+ $stream = null;
228
+ }
229
+
230
+ return $stream;
231
+ }
232
+ }
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: ecwid
3
  Tags: ecwid, shopping cart, ecommerce, wordpress ecommerce, wp e-commerce, paypal, e-commerce, online store, store, shop, cart, online shop, shopping, digital goods, downloadable products, product catalog, ecomerce, products, facebook, f-commerce
4
  Requires at least: 2.8
5
- Tested up to: 4.2
6
- Stable tag: 3.3
7
 
8
  Ecwid is a full-featured shopping cart that can be added to any Wordpress site in less than 5 minutes. Start using Ecwid for free today.
9
 
@@ -107,6 +107,19 @@ http://codex.wordpress.org/Managing_Plugins#Installing_Plugins
107
  * [Ecwid site](http://www.ecwid.com/?source=wporg-plugin-site "Ecwid Site")
108
 
109
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  = 3.3 =
111
  - **Improved Single Sign On functionality.** Single Sign On module has been available in Ecwid Wordpress plugin for a while – it makes it possible for your customers to sign into your Wordpress site and fully use the Ecwid store installed on the site without having to sign in to Ecwid. Now we added a few improvements that should make the feature more useful. In particular, the Ecwid's "Sign in" link was usually hidden when Single Sign On is used, supposing a customer should use the Wordpress login functionality. Now, we made the link visible and redirecting to the Wordpress login form to avoid confusing the user who otherwise has to look for the area to login.
112
  - **Storefront layout improvements for the "Evolve" WordPress theme.** We adjusted Ecwid plugin to better integrate with a popular and beautiful free Wordpress theme – Evolve. In particular, we fixed the borders appearing around every storefront element in this theme. Ecwid stores now look a way better on WordPress sites with Evolve theme to provide better customer experience on any device and to generate more sales in your store.
2
  Contributors: ecwid
3
  Tags: ecwid, shopping cart, ecommerce, wordpress ecommerce, wp e-commerce, paypal, e-commerce, online store, store, shop, cart, online shop, shopping, digital goods, downloadable products, product catalog, ecomerce, products, facebook, f-commerce
4
  Requires at least: 2.8
5
+ Tested up to: 4.3
6
+ Stable tag: 3.4
7
 
8
  Ecwid is a full-featured shopping cart that can be added to any Wordpress site in less than 5 minutes. Start using Ecwid for free today.
9
 
107
  * [Ecwid site](http://www.ecwid.com/?source=wporg-plugin-site "Ecwid Site")
108
 
109
  == Changelog ==
110
+ = 3.4 =
111
+ - **New look for the categories menu widget.** The old Ecwid categories menu widget (horizontal categories) was created long time ago and has been working in thousands of Ecwid stores. However, it doesn't adapt itself for the customer screen size as well as the other Ecwid widgets do. This has been always be a problem for responsive sites which look good on mobile devices. The new widget is fully responsive and looks great on mobile devices. To enable the new look of the categories widget on your site, navigate to Ecwid plugin settings -> "Advanced" tab and tick the "Enable the new category menu" checkbox. Once enabled, it will your store menu widget to the new look. If you don't have this option on the Advanced page, that means you installed the plugin after this change and the new categories are already enabled in your store. Enjoy!
112
+ - **Bigger product images for search engines.** The plugin used to generate small product thumbnails on special store pages for search engines. Now it displays the original large product pictures there to assure better indexing of your product images in Google. Please make sure you're on one of Ecwid paid plans to make your products along with the pictures indexable by search engines.
113
+ - **A few improvements and fixes to make plugin perfectly compatible with Wordpress 4.3 and the new Twenty Sixteen Wordpress theme.** Please feel free to update your sites to the newest Wordpress version, if you haven't yet, and try the brand new Wordpress theme (Twenty Sixteen) – your store should work OK with them.
114
+ - **Fixed SEO issues on the sites with Genesis theme.** The Genesis theme places a special 'canonical' tag on each site page to improve the SEO of the pages. This in some cases conflicted with Ecwid plugin. We overcame this from our side and now the plugin is compatible with SEO features of Genesis theme – your store should be better indexed by search engines with this improvement.
115
+ - **Fixed a bug with duplicate store pages that appeared if the user re-installed the plugin.** If you for some reason need to remove the plugin and install it again, everything will work smoothly now with no extra store pages drafts.
116
+ - **Improve the search widget layout.** On a lot of Wordpress themes, the product search widget was displayed with 100% width, which makes the search input all-page-width. We fixed that and now it looks better.
117
+ - Minor improvements and bug fixes.
118
+
119
+ = 3.3.1 =
120
+ - **Small improvement for "Twenty Twelve" WordPress theme.** The default drop down menu stayed open after clicking Ecwid links sometimes. We adjusted our plugin to work around this issue.
121
+ - **Fixes of PHP notices.** In some cases the plugin caused some PHP notices or warnings to appear on screen if the site was run in debug mode. Although it did not cause any malfunction in plugin operation, these messages could be quite annoying. We fixed it.
122
+
123
  = 3.3 =
124
  - **Improved Single Sign On functionality.** Single Sign On module has been available in Ecwid Wordpress plugin for a while – it makes it possible for your customers to sign into your Wordpress site and fully use the Ecwid store installed on the site without having to sign in to Ecwid. Now we added a few improvements that should make the feature more useful. In particular, the Ecwid's "Sign in" link was usually hidden when Single Sign On is used, supposing a customer should use the Wordpress login functionality. Now, we made the link visible and redirecting to the Wordpress login form to avoid confusing the user who otherwise has to look for the area to login.
125
  - **Storefront layout improvements for the "Evolve" WordPress theme.** We adjusted Ecwid plugin to better integrate with a popular and beautiful free Wordpress theme – Evolve. In particular, we fixed the borders appearing around every storefront element in this theme. Ecwid stores now look a way better on WordPress sites with Evolve theme to provide better customer experience on any device and to generate more sales in your store.
templates/admin-message.php CHANGED
@@ -1,51 +1,51 @@
1
- <div class="ecwid-message <?php echo esc_attr($type); ?>">
2
- <?php if ($title): ?>
3
- <div class="ecwid-message-title">
4
- <?php echo esc_html($title); ?>
5
- </div>
6
- <?php endif; ?>
7
-
8
- <div class="ecwid-message-content">
9
- <?php echo $message; ?>
10
- </div>
11
-
12
- <?php if ($primary_button || $secondary_button || $do_not_show_again): ?>
13
- <div class="ecwid-message-buttons">
14
- <?php if ($primary_button): ?>
15
- <div>
16
- <a
17
- class="button button-primary"
18
- href="<?php echo esc_attr($primary_url); ?>"
19
- <?php if ($primary_blank): ?>
20
- target="_blank"
21
- <?php endif; ?>
22
- >
23
- <?php echo esc_html($primary_title); ?>
24
- </a>
25
- </div>
26
- <?php endif; ?>
27
-
28
- <?php if ($secondary_button): ?>
29
- <div>
30
- <a
31
- class="button"
32
- href="<?php echo esc_attr($secondary_url); ?>"
33
- <?php if ($secondary_blank): ?>
34
- target="_blank"
35
- <?php endif; ?>
36
- >
37
- <?php echo esc_html($secondary_title); ?>
38
- </a>
39
- </div>
40
- <?php endif; ?>
41
-
42
- <?php if ($do_not_show_again): ?>
43
- <div class="hide-wrapper">
44
- <a class="ecwid-message-hide" name="<?php echo $name; ?>" href="javascript: void(0);">
45
- <?php _e('Never show this message again', 'ecwid-shopping-cart'); ?>
46
- </a>
47
- </div>
48
- <?php endif; ?>
49
- </div>
50
- <?php endif; ?>
51
  </div>
1
+ <div class="ecwid-message <?php echo esc_attr($type); ?>">
2
+ <?php if ($title): ?>
3
+ <div class="ecwid-message-title">
4
+ <?php echo esc_html($title); ?>
5
+ </div>
6
+ <?php endif; ?>
7
+
8
+ <div class="ecwid-message-content">
9
+ <?php echo $message; ?>
10
+ </div>
11
+
12
+ <?php if ($primary_button || $secondary_button || $do_not_show_again): ?>
13
+ <div class="ecwid-message-buttons">
14
+ <?php if ($primary_button): ?>
15
+ <div>
16
+ <a
17
+ class="button button-primary"
18
+ href="<?php echo esc_attr($primary_url); ?>"
19
+ <?php if ($primary_blank): ?>
20
+ target="_blank"
21
+ <?php endif; ?>
22
+ >
23
+ <?php echo esc_html($primary_title); ?>
24
+ </a>
25
+ </div>
26
+ <?php endif; ?>
27
+
28
+ <?php if ($secondary_button): ?>
29
+ <div>
30
+ <a
31
+ class="button"
32
+ href="<?php echo esc_attr($secondary_url); ?>"
33
+ <?php if ($secondary_blank): ?>
34
+ target="_blank"
35
+ <?php endif; ?>
36
+ >
37
+ <?php echo esc_html($secondary_title); ?>
38
+ </a>
39
+ </div>
40
+ <?php endif; ?>
41
+
42
+ <?php if ($do_not_show_again): ?>
43
+ <div class="hide-wrapper">
44
+ <a class="ecwid-message-hide" name="<?php echo $name; ?>" href="javascript: void(0);">
45
+ <?php _e('Never show this message again', 'ecwid-shopping-cart'); ?>
46
+ </a>
47
+ </div>
48
+ <?php endif; ?>
49
+ </div>
50
+ <?php endif; ?>
51
  </div>
templates/advanced-settings.php CHANGED
@@ -1,123 +1,152 @@
1
- <div class="wrap">
2
- <form class="pure-form pure-form-aligned ecwid-settings advanced-settings" method="POST" action="options.php">
3
-
4
- <h2><?php _e('Ecwid Shopping Cart — Advanced settings', 'ecwid-shopping-cart'); ?></h2>
5
-
6
- <?php settings_fields('ecwid_options_page'); ?>
7
- <input type="hidden" name="settings_section" value="advanced" />
8
-
9
- <fieldset>
10
-
11
- <?php if (get_option('ecwid_hide_appearance_menu') != 'Y'): ?>
12
- <div class="pure-control-group bottom-border">
13
-
14
- <?php if (ecwid_is_paid_account()): ?>
15
- <label for="ecwid_default_category_id">
16
- <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
17
- </label>
18
-
19
- <select name="ecwid_default_category_id" id="ecwid_default_category_id">
20
- <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
21
- <?php foreach ($categories as $category): ?>
22
- <option
23
- value="<?php echo esc_attr($category['id']); ?>"
24
- <?php if ($category['id'] == get_option('ecwid_default_category_id')): ?>
25
- selected="selected"
26
- <?php endif; ?>
27
- >
28
- <?php echo esc_html($category['path_str']); ?>
29
- </option>
30
- <?php endforeach; ?>
31
- </select>
32
- <?php else: ?>
33
-
34
- <label for="ecwid_default_category_id">
35
- <?php _e('Default category ID', 'ecwid-shopping-cart'); ?>
36
- </label>
37
-
38
- <input
39
- id="ecwid_default_category_id"
40
- name="ecwid_default_category_id"
41
- type="text"
42
- placeholder="<?php _e('Default category ID', 'ecwid-shopping-cart'); ?>"
43
- value="<?php echo esc_attr(get_option('ecwid_default_category_id')) ?>"
44
- />
45
- <?php endif; ?>
46
- <div class="note">
47
- <?php _e('By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. "Featured Products") to new visitors.', 'ecwid-shopping-cart'); ?>
48
- </div>
49
- <div class="note">
50
- <?php if (!ecwid_is_paid_account()): ?>
51
- <?php echo sprintf(
52
- __('In order to set this option, <a %s>find an ID of the necessary category</a> and save it here.', 'ecwid-shopping-cart'),
53
- 'target="_blank" href="http://kb.ecwid.com/w/page/23947812/How%20to%20get%20ID%20of%20your%20product%20or%20category"'
54
- );
55
- ?>
56
- <?php endif; ?>
57
- </div>
58
- </div>
59
-
60
- <hr />
61
-
62
- <?php endif; ?>
63
-
64
-
65
- <div class="pure-control-group last">
66
- <label for="ecwid_sso_secret_key">
67
- <?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>
68
- </label>
69
-
70
- <input
71
- id="ecwid_sso_secret_key"
72
- type="text"
73
- name="ecwid_sso_secret_key"
74
- placeholder="<?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>"
75
- value="<?php echo esc_attr(get_option('ecwid_sso_secret_key')); ?>"
76
- />
77
-
78
- <div class="note">
79
- <?php _e('Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website.', 'ecwid-shopping-cart'); ?>
80
- </div>
81
- <div class="note grayed-links">
82
- <?php _e('In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at "System Settings > Apps > Legacy API Keys > Single Sign-On Secret Key" page. This feature is available for <a href="http://www.ecwid.com/compare-plans.html" target="_blank">paid users</a> only.', 'ecwid-shopping-cart'); ?>
83
- </div>
84
- </div>
85
-
86
- <hr />
87
-
88
- <div class="pure-control-group checkbox">
89
- <div class="label">
90
- <label for="ecwid_use_chameleon">
91
-
92
- <input
93
- id="ecwid_use_chameleon"
94
- name="ecwid_use_chameleon"
95
- type="checkbox"
96
- <?php if (get_option('ecwid_use_chameleon')): ?>
97
- checked="checked"
98
- <?php endif; ?>
99
- <?php echo $disabled_str; ?>
100
- />
101
- <?php _e('Chameleon skin <sup>beta</sup>', 'ecwid-shopping-cart'); ?>
102
- </label>
103
-
104
- <div class="note">
105
- <?php _e('Automatic adjustment of your store design to your Wordpress theme. Whatever Wordpress theme you use, Ecwid will detect predominant colors and font and use them in your product catalog.', 'ecwid-shopping-cart'); ?>
106
- </div>
107
- <div class="note grayed-links">
108
- <?php echo sprintf(__('Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>.', 'ecwid-shopping-cart'), ' target="_blank" href="http://help.ecwid.com/customer/portal/emails/new"'); ?>
109
- </div>
110
- </div>
111
-
112
- </fieldset>
113
-
114
- <fieldset>
115
-
116
- <div class="pure-control-group">
117
- <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>">
118
- <?php _e('Save changes', 'ecwid-shopping-cart'); ?>
119
- </button>
120
- </div>
121
- </fieldset>
122
- </form>
123
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <form class="pure-form pure-form-aligned ecwid-settings advanced-settings" method="POST" action="options.php">
3
+
4
+ <h2><?php _e('Ecwid Shopping Cart — Advanced settings', 'ecwid-shopping-cart'); ?></h2>
5
+
6
+ <?php settings_fields('ecwid_options_page'); ?>
7
+ <input type="hidden" name="settings_section" value="advanced" />
8
+
9
+ <fieldset>
10
+
11
+ <?php if (get_option('ecwid_hide_appearance_menu') != 'Y'): ?>
12
+ <div class="pure-control-group bottom-border">
13
+
14
+ <?php if (ecwid_is_paid_account()): ?>
15
+ <label for="ecwid_default_category_id">
16
+ <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
17
+ </label>
18
+
19
+ <select name="ecwid_default_category_id" id="ecwid_default_category_id">
20
+ <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
21
+ <?php foreach ($categories as $category): ?>
22
+ <option
23
+ value="<?php echo esc_attr($category['id']); ?>"
24
+ <?php if ($category['id'] == get_option('ecwid_default_category_id')): ?>
25
+ selected="selected"
26
+ <?php endif; ?>
27
+ >
28
+ <?php echo esc_html($category['path_str']); ?>
29
+ </option>
30
+ <?php endforeach; ?>
31
+ </select>
32
+ <?php else: ?>
33
+
34
+ <label for="ecwid_default_category_id">
35
+ <?php _e('Default category ID', 'ecwid-shopping-cart'); ?>
36
+ </label>
37
+
38
+ <input
39
+ id="ecwid_default_category_id"
40
+ name="ecwid_default_category_id"
41
+ type="text"
42
+ placeholder="<?php _e('Default category ID', 'ecwid-shopping-cart'); ?>"
43
+ value="<?php echo esc_attr(get_option('ecwid_default_category_id')) ?>"
44
+ />
45
+ <?php endif; ?>
46
+ <div class="note">
47
+ <?php _e('By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. "Featured Products") to new visitors.', 'ecwid-shopping-cart'); ?>
48
+ </div>
49
+ <div class="note">
50
+ <?php if (!ecwid_is_paid_account()): ?>
51
+ <?php echo sprintf(
52
+ __('In order to set this option, <a %s>find an ID of the necessary category</a> and save it here.', 'ecwid-shopping-cart'),
53
+ 'target="_blank" href="http://kb.ecwid.com/w/page/23947812/How%20to%20get%20ID%20of%20your%20product%20or%20category"'
54
+ );
55
+ ?>
56
+ <?php endif; ?>
57
+ </div>
58
+ </div>
59
+
60
+ <hr />
61
+
62
+ <?php endif; ?>
63
+
64
+
65
+ <div class="pure-control-group last">
66
+ <label for="ecwid_sso_secret_key">
67
+ <?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>
68
+ </label>
69
+
70
+ <input
71
+ id="ecwid_sso_secret_key"
72
+ type="text"
73
+ name="ecwid_sso_secret_key"
74
+ placeholder="<?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>"
75
+ value="<?php echo esc_attr(get_option('ecwid_sso_secret_key')); ?>"
76
+ />
77
+
78
+ <div class="note">
79
+ <?php _e('Single Sign-On Secret Key is an option that allows your customers access to your WordPress site as well as the Ecwid shopping cart. When customers log in to your site, they will automatically be logged in to your Ecwid store as well. It makes sense to enable this feature if your visitors actually create accounts in your WordPress website.', 'ecwid-shopping-cart'); ?>
80
+ </div>
81
+ <div class="note grayed-links">
82
+ <?php _e('In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at "System Settings > Apps > Legacy API Keys > Single Sign-On Secret Key" page. This feature is available for <a href="http://www.ecwid.com/compare-plans.html" target="_blank">paid users</a> only.', 'ecwid-shopping-cart'); ?>
83
+ </div>
84
+ </div>
85
+
86
+ <hr />
87
+
88
+ <div class="pure-control-group checkbox">
89
+ <div class="label">
90
+ <label for="ecwid_use_chameleon">
91
+
92
+ <input
93
+ id="ecwid_use_chameleon"
94
+ name="ecwid_use_chameleon"
95
+ type="checkbox"
96
+ <?php if (get_option('ecwid_use_chameleon')): ?>
97
+ checked="checked"
98
+ <?php endif; ?>
99
+ />
100
+ <?php _e('Chameleon skin <sup>beta</sup>', 'ecwid-shopping-cart'); ?>
101
+ </label>
102
+
103
+ <div class="note">
104
+ <?php _e('Automatic adjustment of your store design to your Wordpress theme. Whatever Wordpress theme you use, Ecwid will detect predominant colors and font and use them in your product catalog.', 'ecwid-shopping-cart'); ?>
105
+ </div>
106
+ <div class="note grayed-links">
107
+ <?php echo sprintf(__('Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>.', 'ecwid-shopping-cart'), ' target="_blank" href="http://help.ecwid.com/customer/portal/emails/new"'); ?>
108
+ </div>
109
+ </div>
110
+
111
+
112
+ <?php if (ecwid_migrations_is_original_plugin_version_older_than('3.4')): ?>
113
+ <hr />
114
+
115
+ <div class="pure-control-group checkbox">
116
+ <div class="label">
117
+ <label for="ecwid_use_new_horizontal_categories">
118
+
119
+ <input
120
+ id="ecwid_use_new_horizontal_categories"
121
+ name="ecwid_use_new_horizontal_categories"
122
+ type="checkbox"
123
+ <?php if (get_option('ecwid_use_new_horizontal_categories') == 'Y'): ?>
124
+ checked="checked"
125
+ <?php endif; ?>
126
+ value="Y"
127
+ />
128
+ <?php _e('Enable the new category menu', 'ecwid-shopping-cart'); ?>
129
+ </label>
130
+
131
+ <div class="note">
132
+ <?php echo sprintf(
133
+ __('The new category menu looks better and is more mobile-friendly. If you haven\'t yet added category menu to your store page, you can do that in the <a %s>store page editor</a> (enable the "Show categories" option)', 'ecwid-shopping-cart'),
134
+ 'href="post.php?post=' . ecwid_get_current_store_page_id() . '&action=edit&show-ecwid=true"'
135
+ ); ?>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ <?php endif; ?>
140
+
141
+ </fieldset>
142
+
143
+ <fieldset>
144
+
145
+ <div class="pure-control-group">
146
+ <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>">
147
+ <?php _e('Save changes', 'ecwid-shopping-cart'); ?>
148
+ </button>
149
+ </div>
150
+ </fieldset>
151
+ </form>
152
+ </div>
templates/appearance-settings.php CHANGED
@@ -1,222 +1,222 @@
1
- <div class="wrap">
2
- <form class="pure-form pure-form-aligned ecwid-settings appearance-settings" method="POST" action="options.php">
3
-
4
- <h2><?php _e('Ecwid Shopping Cart — Appearance settings', 'ecwid-shopping-cart'); ?></h2>
5
-
6
- <?php settings_fields('ecwid_options_page'); ?>
7
- <input type="hidden" name="settings_section" value="appearance" />
8
-
9
- <fieldset>
10
-
11
- <div class="pure-control-group small-input">
12
- <div class="input">
13
- <div>
14
- <input
15
- id="ecwid_show_search_box"
16
- name="ecwid_show_search_box"
17
- type="checkbox"
18
- <?php if (get_option('ecwid_show_search_box')): ?>
19
- checked="checked"
20
- <?php endif; ?>
21
- <?php echo $disabled_str; ?>
22
- />
23
- </div>
24
- </div>
25
- <div class="label">
26
- <label for="ecwid_show_search_box">
27
- <?php _e('Display search box above products', 'ecwid-shopping-cart'); ?>
28
- </label>
29
- </div>
30
- <div class="note">
31
- <?php echo sprintf(__('Or you can add search box to your website\'s toolbar using <a href="%s">WordPress native widgets</a>', 'ecwid-shopping-cart'), 'widgets.php?from-ecwid=appearance'); ?>
32
- </div>
33
- </div>
34
-
35
- <div class="pure-control-group small-input">
36
- <div class="input">
37
- <div>
38
- <input
39
- id="ecwid_show_categories"
40
- name="ecwid_show_categories"
41
- type="checkbox"
42
- <?php if (get_option('ecwid_show_categories')): ?>
43
- checked="checked"
44
- <?php endif; ?>
45
- <?php echo $disabled_str; ?>
46
- />
47
- </div>
48
- </div>
49
- <div class="label">
50
- <label for="ecwid_show_categories">
51
- <?php _e('Display horizontal categories above products', 'ecwid-shopping-cart'); ?>
52
- </label>
53
- </div>
54
- <div class="note">
55
- <?php echo sprintf(__('Or you can add vertical categories to your website\'s toolbar using <a href="%s">WordPress native widgets</a>', 'ecwid-shopping-cart'), 'widgets.php?from-ecwid-appearance'); ?>
56
- </div>
57
- </div>
58
-
59
-
60
- <div class="pure-control-group small-input">
61
- <div class="input">
62
- <div>
63
- <input
64
- id="ecwid_enable_minicart"
65
- name="ecwid_enable_minicart"
66
- type="checkbox"
67
- <?php if (get_option('ecwid_enable_minicart')): ?>
68
- checked="checked"
69
- <?php endif; ?>
70
- <?php echo $disabled_str; ?>
71
- />
72
- </div>
73
- </div>
74
- <div class="label">
75
- <label for="ecwid_enable_minicart">
76
- <?php _e('Enable minicart attached to horizontal categories', 'ecwid-shopping-cart'); ?>
77
- </label>
78
- </div>
79
- <div class="note">
80
- <?php _e("You should disable this option, if you added minicart to your website's&nbsp;sidebar", 'ecwid-shopping-cart'); ?>
81
- </div>
82
- </div>
83
-
84
- <div class="pure-control-group small-input">
85
- <div class="input">
86
- <div>
87
- <input
88
- id="ecwid_pb_categoriesperrow"
89
- name="ecwid_pb_categoriesperrow"
90
- type="text"
91
- class="number"
92
- value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
93
- <?php echo $disabled_str; ?>
94
- />
95
- </div>
96
- </div>
97
- <div class="label">
98
- <label for="ecwid_pb_categoriesperrow">
99
- <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
100
- </label>
101
- </div>
102
- <div class="note">
103
- </div>
104
- </div>
105
-
106
- <hr />
107
-
108
-
109
- <div class="pure-control-group">
110
- <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
111
- <div class="ecwid-pb-view-size grid active" tabindex="1">
112
- <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
113
- <div class="main-area">
114
- <?php ecwid_embed_svg('grid'); ?>
115
- </div>
116
- <div class="right">
117
- <div class="ruler"></div>
118
- <input
119
- type="text"
120
- size="2"
121
- name="ecwid_pb_productspercolumn_grid"
122
- class="number"
123
- value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_grid')); ?>"
124
- />
125
- </div>
126
- <div class="bottom">
127
- <div class="ruler"></div>
128
- <input
129
- type="text"
130
- size="2"
131
- name="ecwid_pb_productsperrow_grid"
132
- class="number"
133
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
134
- />
135
- </div>
136
- </div>
137
-
138
- <div class="ecwid-pb-view-size list" tabindex="1">
139
- <div class="title"><?php _e('List view', 'ecwid-shopping-cart'); ?></div>
140
- <div class="main-area">
141
- <?php ecwid_embed_svg('list'); ?>
142
- </div>
143
- <div class="right">
144
- <div class="ruler"></div>
145
- <input
146
- type="text"
147
- size="2"
148
- name="ecwid_pb_productsperpage_list"
149
- class="number"
150
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
151
- </div>
152
- </div>
153
-
154
-
155
- <div class="ecwid-pb-view-size table" tabindex="1">
156
- <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
157
- <div class="main-area">
158
- <?php ecwid_embed_svg('table'); ?>
159
- </div>
160
- <div class="right">
161
- <div class="ruler"></div>
162
- <input
163
- type="text"
164
- size="2"
165
- name="ecwid_pb_productsperpage_table"
166
- class="number"
167
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
168
- />
169
- </div>
170
- </div>
171
- <p class="note pb-note"><?php _e('Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products.', 'ecwid-shopping-cart'); ?></p>
172
- </div>
173
-
174
- <hr />
175
-
176
- <div class="pure-control-group">
177
- <label for="ecwid_pb_defaultview">
178
- <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
179
- </label>
180
-
181
- <select id="ecwid_pb_defaultview" name="ecwid_pb_defaultview" $disabled_str>
182
- <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
183
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
184
- </option>
185
- <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
186
- <?php _e('List', 'ecwid-shopping-cart'); ?>
187
- </option>
188
- <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
189
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
190
- </option>
191
- </select>
192
- </div>
193
-
194
- <div class="pure-control-group">
195
- <label for="ecwid_pb_searchview">
196
- <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
197
- </label>
198
-
199
- <select id="ecwid_pb_searchview" name="ecwid_pb_searchview" $disabled_str>
200
- <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
201
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
202
- </option>
203
- <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
204
- <?php _e('List', 'ecwid-shopping-cart'); ?>
205
- </option>
206
- <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
207
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
208
- </option>
209
- </select>
210
- </div>
211
-
212
- </fieldset>
213
-
214
- <fieldset>
215
- <hr />
216
- <div class="pure-control-group">
217
- <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>"><?php _e('Save changes', 'ecwid-shopping-cart'); ?></button>
218
- </div>
219
- </fieldset>
220
- </form>
221
-
222
- </div>
1
+ <div class="wrap">
2
+ <form class="pure-form pure-form-aligned ecwid-settings appearance-settings" method="POST" action="options.php">
3
+
4
+ <h2><?php _e('Ecwid Shopping Cart — Appearance settings', 'ecwid-shopping-cart'); ?></h2>
5
+
6
+ <?php settings_fields('ecwid_options_page'); ?>
7
+ <input type="hidden" name="settings_section" value="appearance" />
8
+
9
+ <fieldset>
10
+
11
+ <div class="pure-control-group small-input">
12
+ <div class="input">
13
+ <div>
14
+ <input
15
+ id="ecwid_show_search_box"
16
+ name="ecwid_show_search_box"
17
+ type="checkbox"
18
+ <?php if (get_option('ecwid_show_search_box')): ?>
19
+ checked="checked"
20
+ <?php endif; ?>
21
+ <?php echo $disabled_str; ?>
22
+ />
23
+ </div>
24
+ </div>
25
+ <div class="label">
26
+ <label for="ecwid_show_search_box">
27
+ <?php _e('Display search box above products', 'ecwid-shopping-cart'); ?>
28
+ </label>
29
+ </div>
30
+ <div class="note">
31
+ <?php echo sprintf(__('Or you can add search box to your website\'s toolbar using <a href="%s">WordPress native widgets</a>', 'ecwid-shopping-cart'), 'widgets.php?from-ecwid=appearance'); ?>
32
+ </div>
33
+ </div>
34
+
35
+ <div class="pure-control-group small-input">
36
+ <div class="input">
37
+ <div>
38
+ <input
39
+ id="ecwid_show_categories"
40
+ name="ecwid_show_categories"
41
+ type="checkbox"
42
+ <?php if (get_option('ecwid_show_categories')): ?>
43
+ checked="checked"
44
+ <?php endif; ?>
45
+ <?php echo $disabled_str; ?>
46
+ />
47
+ </div>
48
+ </div>
49
+ <div class="label">
50
+ <label for="ecwid_show_categories">
51
+ <?php _e('Display categories above products', 'ecwid-shopping-cart'); ?>
52
+ </label>
53
+ </div>
54
+ <div class="note">
55
+ <?php echo sprintf(__('Or you can add vertical categories to your website\'s toolbar using <a href="%s">WordPress native widgets</a>', 'ecwid-shopping-cart'), 'widgets.php?from-ecwid-appearance'); ?>
56
+ </div>
57
+ </div>
58
+
59
+
60
+ <div class="pure-control-group small-input">
61
+ <div class="input">
62
+ <div>
63
+ <input
64
+ id="ecwid_enable_minicart"
65
+ name="ecwid_enable_minicart"
66
+ type="checkbox"
67
+ <?php if (get_option('ecwid_enable_minicart')): ?>
68
+ checked="checked"
69
+ <?php endif; ?>
70
+ <?php echo $disabled_str; ?>
71
+ />
72
+ </div>
73
+ </div>
74
+ <div class="label">
75
+ <label for="ecwid_enable_minicart">
76
+ <?php _e('Enable minicart attached to categories', 'ecwid-shopping-cart'); ?>
77
+ </label>
78
+ </div>
79
+ <div class="note">
80
+ <?php _e("You should disable this option, if you added minicart to your website's&nbsp;sidebar", 'ecwid-shopping-cart'); ?>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="pure-control-group small-input">
85
+ <div class="input">
86
+ <div>
87
+ <input
88
+ id="ecwid_pb_categoriesperrow"
89
+ name="ecwid_pb_categoriesperrow"
90
+ type="text"
91
+ class="number"
92
+ value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
93
+ <?php echo $disabled_str; ?>
94
+ />
95
+ </div>
96
+ </div>
97
+ <div class="label">
98
+ <label for="ecwid_pb_categoriesperrow">
99
+ <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
100
+ </label>
101
+ </div>
102
+ <div class="note">
103
+ </div>
104
+ </div>
105
+
106
+ <hr />
107
+
108
+
109
+ <div class="pure-control-group">
110
+ <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
111
+ <div class="ecwid-pb-view-size grid active" tabindex="1">
112
+ <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
113
+ <div class="main-area">
114
+ <?php ecwid_embed_svg('grid'); ?>
115
+ </div>
116
+ <div class="right">
117
+ <div class="ruler"></div>
118
+ <input
119
+ type="text"
120
+ size="2"
121
+ name="ecwid_pb_productspercolumn_grid"
122
+ class="number"
123
+ value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_grid')); ?>"
124
+ />
125
+ </div>
126
+ <div class="bottom">
127
+ <div class="ruler"></div>
128
+ <input
129
+ type="text"
130
+ size="2"
131
+ name="ecwid_pb_productsperrow_grid"
132
+ class="number"
133
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
134
+ />
135
+ </div>
136
+ </div>
137
+
138
+ <div class="ecwid-pb-view-size list" tabindex="1">
139
+ <div class="title"><?php _e('List view', 'ecwid-shopping-cart'); ?></div>
140
+ <div class="main-area">
141
+ <?php ecwid_embed_svg('list'); ?>
142
+ </div>
143
+ <div class="right">
144
+ <div class="ruler"></div>
145
+ <input
146
+ type="text"
147
+ size="2"
148
+ name="ecwid_pb_productsperpage_list"
149
+ class="number"
150
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
151
+ </div>
152
+ </div>
153
+
154
+
155
+ <div class="ecwid-pb-view-size table" tabindex="1">
156
+ <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
157
+ <div class="main-area">
158
+ <?php ecwid_embed_svg('table'); ?>
159
+ </div>
160
+ <div class="right">
161
+ <div class="ruler"></div>
162
+ <input
163
+ type="text"
164
+ size="2"
165
+ name="ecwid_pb_productsperpage_table"
166
+ class="number"
167
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
168
+ />
169
+ </div>
170
+ </div>
171
+ <p class="note pb-note"><?php _e('Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products.', 'ecwid-shopping-cart'); ?></p>
172
+ </div>
173
+
174
+ <hr />
175
+
176
+ <div class="pure-control-group">
177
+ <label for="ecwid_pb_defaultview">
178
+ <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
179
+ </label>
180
+
181
+ <select id="ecwid_pb_defaultview" name="ecwid_pb_defaultview" $disabled_str>
182
+ <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
183
+ <?php _e('Grid', 'ecwid-shopping-cart'); ?>
184
+ </option>
185
+ <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
186
+ <?php _e('List', 'ecwid-shopping-cart'); ?>
187
+ </option>
188
+ <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
189
+ <?php _e('Table', 'ecwid-shopping-cart'); ?>
190
+ </option>
191
+ </select>
192
+ </div>
193
+
194
+ <div class="pure-control-group">
195
+ <label for="ecwid_pb_searchview">
196
+ <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
197
+ </label>
198
+
199
+ <select id="ecwid_pb_searchview" name="ecwid_pb_searchview" $disabled_str>
200
+ <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
201
+ <?php _e('Grid', 'ecwid-shopping-cart'); ?>
202
+ </option>
203
+ <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
204
+ <?php _e('List', 'ecwid-shopping-cart'); ?>
205
+ </option>
206
+ <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
207
+ <?php _e('Table', 'ecwid-shopping-cart'); ?>
208
+ </option>
209
+ </select>
210
+ </div>
211
+
212
+ </fieldset>
213
+
214
+ <fieldset>
215
+ <hr />
216
+ <div class="pure-control-group">
217
+ <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>"><?php _e('Save changes', 'ecwid-shopping-cart'); ?></button>
218
+ </div>
219
+ </fieldset>
220
+ </form>
221
+
222
+ </div>
templates/connect.php CHANGED
@@ -1,52 +1,52 @@
1
- <div class="wrap ecwid-admin ecwid-connect<?php if ($no_oauth): ?> no-oauth<?php else: ?> with-oauth<?php endif; ?>">
2
- <div class="box">
3
- <div class="head"><?php ecwid_embed_svg('ecwid_logo_symbol_RGB');?>
4
- <h3>
5
- <?php _e( 'Ecwid Shopping Cart', 'ecwid-shopping-cart' ); ?>
6
- </h3>
7
- </div>
8
- <div class="greeting-image">
9
- <img src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
10
- </div>
11
-
12
- <div class="greeting-message mobile-br">
13
- <?php _e( 'Connect your store<br /> to this WordPress site', 'ecwid-shopping-cart' ); ?>
14
- </div>
15
-
16
- <div class="connect-store-id no-oauth">
17
- <input type="text" id="ecwid-store-id" placeholder="<?php _e('Enter your Store ID', 'ecwid-shopping-cart'); ?>" />
18
- </div>
19
- <div class="connect-button">
20
- <a href="admin-post.php?action=ecwid_connect" class="with-oauth"><?php _e( 'Connect Ecwid store', 'ecwid-shopping-cart' ); ?></a>
21
- <a id="ecwid-connect-no-oauth" href="admin-post.php?action=ecwid_connect" class="no-oauth"><?php _e( 'Save and connect', 'ecwid-shopping-cart' ); ?></a>
22
- </div>
23
-
24
- <?php if (!$connection_error): ?>
25
-
26
- <div class="note initial with-oauth">
27
- <?php _e( 'After clicking button you need to login and accept permissions to use our plugin', 'ecwid-shopping-cart' ); ?>
28
- </div>
29
-
30
- <?php else: ?>
31
-
32
- <div class="note auth-error">
33
- <span>
34
- <?php _e( 'Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again.', 'ecwid-shopping-cart' ); ?>
35
- </span>
36
- </div>
37
-
38
- <?php endif; ?>
39
-
40
- <h4 class="no-oauth where-to-find-store-id" style="text-align: center"><?php _e('Where to find your Store ID:', 'ecwid-shopping-cart'); ?></h4>
41
- <div class="note no-oauth">
42
- <?php echo sprintf( __('Store ID is a unique identifier of your Ecwid account. You can find it in your Ecwid control panel: open the <a %s>Dashboard page</a> and find the "<b>Store ID: NNNNNNN</b>" text, where <b>NNNNNNN</b> is your Store&nbsp;ID.', 'ecwid-shopping-cart'), 'href="https://my.ecwid.com/cp/CP.html?source=wporg#dashboard" target="_blank"'); ?>
43
- </div>
44
-
45
- <div class="create-account-link">
46
- <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>">
47
- <?php _e( "Don't have Ecwid account? Create it here", 'ecwid-shopping-cart' ); ?>
48
- </a>
49
- </div>
50
- </div>
51
- <p><?php echo sprintf(__('Questions? Visit <a %s>Ecwid support center</a>', 'ecwid-shopping-cart'), 'target="_blank" href="http://help.ecwid.com/?source=wporg"'); ?></p>
52
- </div>
1
+ <div class="wrap ecwid-admin ecwid-connect<?php if ($no_oauth): ?> no-oauth<?php else: ?> with-oauth<?php endif; ?>">
2
+ <div class="box">
3
+ <div class="head"><?php ecwid_embed_svg('ecwid_logo_symbol_RGB');?>
4
+ <h3>
5
+ <?php _e( 'Ecwid Shopping Cart', 'ecwid-shopping-cart' ); ?>
6
+ </h3>
7
+ </div>
8
+ <div class="greeting-image">
9
+ <img src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
10
+ </div>
11
+
12
+ <div class="greeting-message mobile-br">
13
+ <?php _e( 'Connect your store<br /> to this WordPress site', 'ecwid-shopping-cart' ); ?>
14
+ </div>
15
+
16
+ <div class="connect-store-id no-oauth">
17
+ <input type="text" id="ecwid-store-id" placeholder="<?php _e('Enter your Store ID', 'ecwid-shopping-cart'); ?>" />
18
+ </div>
19
+ <div class="connect-button">
20
+ <a href="admin-post.php?action=ecwid_connect" class="with-oauth"><?php _e( 'Connect Ecwid store', 'ecwid-shopping-cart' ); ?></a>
21
+ <a id="ecwid-connect-no-oauth" href="admin-post.php?action=ecwid_connect" class="no-oauth"><?php _e( 'Save and connect', 'ecwid-shopping-cart' ); ?></a>
22
+ </div>
23
+
24
+ <?php if (!$connection_error): ?>
25
+
26
+ <div class="note initial with-oauth">
27
+ <?php _e( 'After clicking button you need to login and accept permissions to use our plugin', 'ecwid-shopping-cart' ); ?>
28
+ </div>
29
+
30
+ <?php else: ?>
31
+
32
+ <div class="note auth-error">
33
+ <span>
34
+ <?php _e( 'Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again.', 'ecwid-shopping-cart' ); ?>
35
+ </span>
36
+ </div>
37
+
38
+ <?php endif; ?>
39
+
40
+ <h4 class="no-oauth where-to-find-store-id" style="text-align: center"><?php _e('Where to find your Store ID:', 'ecwid-shopping-cart'); ?></h4>
41
+ <div class="note no-oauth">
42
+ <?php echo sprintf( __('Store ID is a unique identifier of your Ecwid account. You can find it in your Ecwid control panel: open the <a %s>Dashboard page</a> and find the "<b>Store ID: NNNNNNN</b>" text, where <b>NNNNNNN</b> is your Store&nbsp;ID.', 'ecwid-shopping-cart'), 'href="https://my.ecwid.com/cp/CP.html?source=wporg#dashboard" target="_blank"'); ?>
43
+ </div>
44
+
45
+ <div class="create-account-link">
46
+ <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>">
47
+ <?php _e( "Don't have Ecwid account? Create it here", 'ecwid-shopping-cart' ); ?>
48
+ </a>
49
+ </div>
50
+ </div>
51
+ <p><?php echo sprintf(__('Questions? Visit <a %s>Ecwid support center</a>', 'ecwid-shopping-cart'), 'target="_blank" href="http://help.ecwid.com/?source=wporg"'); ?></p>
52
+ </div>
templates/dashboard.php CHANGED
@@ -1,58 +1,58 @@
1
- <div class="wrap ecwid-admin ecwid-dashboard">
2
- <div class="box">
3
- <div class="head">
4
- <?php ecwid_embed_svg('ecwid_logo_symbol_RGB');?>
5
- <h3>
6
- <?php _e( 'Ecwid Shopping Cart', 'ecwid-shopping-cart' ); ?>
7
- </h3>
8
- <div class="store-id drop-down">
9
- <span>
10
- <?php _e( 'Store ID', 'ecwid-shopping-cart' ); ?> : <?php echo get_ecwid_store_id(); ?>
11
- </span>
12
- <ul>
13
- <li>
14
- <a href="admin-post.php?action=ecwid_disconnect"><?php _e( 'Disconnect store', 'ecwid-shopping-cart' ); ?></a>
15
- </li>
16
- </ul>
17
- </div>
18
- </div>
19
- <div class="body">
20
- <div class="greeting-image">
21
- <img src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_ready.png" width="142" />
22
- </div>
23
-
24
- <div class="greeting">
25
- <?php if (@$_GET['settings-updated']): ?>
26
- <div class="greeting-title">
27
- <?php _e('Congratulations!', 'ecwid-shopping-cart'); ?>
28
- </div>
29
- <div class="greeting-message mobile-br">
30
- <?php _e( 'Your Ecwid store is now connected<br /> to your WordPress website', 'ecwid-shopping-cart' ); ?>
31
- </div>
32
- <?php else: ?>
33
-
34
- <div class="greeting-title">
35
- <?php _e('Greetings!', 'ecwid-shopping-cart'); ?>
36
- </div>
37
- <div class="greeting-message mobile-br">
38
- <?php _e( 'Your Ecwid store is connected<br /> to your WordPress website', 'ecwid-shopping-cart' ); ?>
39
- </div>
40
- <?php endif; ?>
41
-
42
- <ul class="greeting-links">
43
- <li>
44
- <a target="_blank" href="<?php echo ecwid_get_store_page_url(); ?>"><?php _e('Visit storefront', 'ecwid-shopping-cart'); ?></a>
45
- </li>
46
- <li>
47
- <a target="_blank" href="//my.ecwid.com/cp?source=wporg"><?php _e('Open control panel', 'ecwid-shopping-cart'); ?></a>
48
- </li>
49
- </ul>
50
-
51
-
52
-
53
- </div>
54
- </div>
55
-
56
- </div>
57
- <p><?php echo sprintf(__('Questions? Visit <a %s>Ecwid support center</a>', 'ecwid-shopping-cart'), 'target="_blank" href="http://help.ecwid.com/?source=wporg"'); ?></p>
58
- </div>
1
+ <div class="wrap ecwid-admin ecwid-dashboard">
2
+ <div class="box">
3
+ <div class="head">
4
+ <?php ecwid_embed_svg('ecwid_logo_symbol_RGB');?>
5
+ <h3>
6
+ <?php _e( 'Ecwid Shopping Cart', 'ecwid-shopping-cart' ); ?>
7
+ </h3>
8
+ <div class="store-id drop-down">
9
+ <span>
10
+ <?php _e( 'Store ID', 'ecwid-shopping-cart' ); ?> : <?php echo get_ecwid_store_id(); ?>
11
+ </span>
12
+ <ul>
13
+ <li>
14
+ <a href="admin-post.php?action=ecwid_disconnect"><?php _e( 'Disconnect store', 'ecwid-shopping-cart' ); ?></a>
15
+ </li>
16
+ </ul>
17
+ </div>
18
+ </div>
19
+ <div class="body">
20
+ <div class="greeting-image">
21
+ <img src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_ready.png" width="142" />
22
+ </div>
23
+
24
+ <div class="greeting">
25
+ <?php if (@$_GET['settings-updated']): ?>
26
+ <div class="greeting-title">
27
+ <?php _e('Congratulations!', 'ecwid-shopping-cart'); ?>
28
+ </div>
29
+ <div class="greeting-message mobile-br">
30
+ <?php _e( 'Your Ecwid store is now connected<br /> to your WordPress website', 'ecwid-shopping-cart' ); ?>
31
+ </div>
32
+ <?php else: ?>
33
+
34
+ <div class="greeting-title">
35
+ <?php _e('Greetings!', 'ecwid-shopping-cart'); ?>
36
+ </div>
37
+ <div class="greeting-message mobile-br">
38
+ <?php _e( 'Your Ecwid store is connected<br /> to your WordPress website', 'ecwid-shopping-cart' ); ?>
39
+ </div>
40
+ <?php endif; ?>
41
+
42
+ <ul class="greeting-links">
43
+ <li>
44
+ <a target="_blank" href="<?php echo ecwid_get_store_page_url(); ?>"><?php _e('Visit storefront', 'ecwid-shopping-cart'); ?></a>
45
+ </li>
46
+ <li>
47
+ <a target="_blank" href="//my.ecwid.com/cp?source=wporg"><?php _e('Open control panel', 'ecwid-shopping-cart'); ?></a>
48
+ </li>
49
+ </ul>
50
+
51
+
52
+
53
+ </div>
54
+ </div>
55
+
56
+ </div>
57
+ <p><?php echo sprintf(__('Questions? Visit <a %s>Ecwid support center</a>', 'ecwid-shopping-cart'), 'target="_blank" href="http://help.ecwid.com/?source=wporg"'); ?></p>
58
+ </div>
templates/landing.php CHANGED
@@ -1,163 +1,163 @@
1
- <div class="ecwid-landing <?php echo $register ? 'register' : 'connect'; echo $connection_error ? ' conn-error': ''; ?>">
2
- <div class="ecwid-thank">
3
- <h1 class="on-register">
4
- <span><?php _e('Plugin is installed successfully!', 'ecwid-shopping-cart'); ?></span>
5
- <?php _e('There are just a few steps left to start selling<br /> on your WordPress site', 'ecwid-shopping-cart'); ?>
6
- </h1>
7
- <h1 class="on-connect">
8
- <span><?php _e('Plugin is installed successfully!', 'ecwid-shopping-cart'); ?></span>
9
- <?php _e('There are few little steps left to start selling<br /> on your WordPress site', 'ecwid-shopping-cart'); ?>
10
- </h1>
11
- <div class="ecwid-thank-steps">
12
- <div class="ecwid-thank-step ecwid-thank-step-one<?php echo $register ?'' : ' active'; ?>">
13
- <div class="ecwid-thank-step-image"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/ecwid.svg" class="none-active"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/ecwid-active.svg" class="active"></div>
14
- <div class="ecwid-thank-step-description">
15
- <h2><?php _e('Register', 'ecwid-shopping-cart'); ?></h2>
16
- <p><?php _e('Create a free Ecwid account to manage your store and inventory.<br /> No credit card required', 'ecwid-shopping-cart'); ?></p>
17
- </div>
18
- </div>
19
- <div class="ecwid-thank-step ecwid-thank-step-two">
20
- <div class="ecwid-thank-step-image"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/plug.svg" class="none-active"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/plug-active.svg" class="active"></div>
21
- <div class="ecwid-thank-step-description">
22
- <h2>
23
- <?php _e('Connect', 'ecwid-shopping-cart'); ?>
24
- </h2>
25
- <p class="on-register"><?php _e('Add your Ecwid store to your site <nobr>in two clicks</nobr>', 'ecwid-shopping-cart'); ?></p>
26
- <p class="on-connect"><?php _e('Connect your Ecwid store to this site <nobr>in two clicks</nobr>', 'ecwid-shopping-cart'); ?></p>
27
- </div>
28
- </div>
29
- <div class="ecwid-thank-step ecwid-thank-step-three">
30
- <div class="ecwid-thank-step-image">
31
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/dollar.svg" class="none-active">
32
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/dollar-active.svg" class="active">
33
- </div>
34
- <div class="ecwid-thank-step-description">
35
- <h2><?php _e('Start selling', 'ecwid-shopping-cart'); ?></h2>
36
- <p><?php _e('Your storefront is ready', 'ecwid-shopping-cart'); ?></p>
37
- </div>
38
- </div>
39
- </div>
40
- <div class="ecwid-button">
41
- <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" class="button button--blue on-register" onclick="javascript:switch_to_connect()">
42
- <?php _e('Create Ecwid store', 'ecwid-shopping-cart'); ?>
43
- </a>
44
- <a class="button button--green on-connect" href="admin-post.php?action=ecwid_connect">
45
- <?php _e('Connect your store', 'ecwid-shopping-cart'); ?>
46
- </a>
47
- <div class="button-description-mobile on-register">
48
- <?php _e('Free registration, No credit card required', 'ecwid-shopping-cart'); ?>
49
- </div>
50
- <div class="button-description-mobile on-error ecwid-connection-error">
51
- <?php _e( 'Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site.', 'ecwid-shopping-cart' ); ?>
52
- </div>
53
- <div class="button-description-mobile on-connect on-no-error">
54
- <?php _e('You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site', 'ecwid-shopping-cart'); ?>
55
- </div>
56
- <div class="ecwid-button-description on-register">
57
- <?php _e('Already have Ecwid account?', 'ecwid-shopping-cart'); ?>
58
- <a href="admin-post.php?action=ecwid_connect"><?php _e('Connect your store to Wordpress site', 'ecwid-shopping-cart'); ?></a>
59
- </div>
60
- <div class="ecwid-button-description on-connect">
61
- <?php _e('Don\'t have an Ecwid account?', 'ecwid-shopping-cart'); ?>
62
- <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" onclick="javascript:switch_to_connect();"><?php _e('Register at Ecwid for free', 'ecwid-shopping-cart'); ?></a>
63
- </div>
64
- <div class="button-description-mobile on-register">
65
- <?php _e('You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site', 'ecwid-shopping-cart'); ?>
66
- </div>
67
- <div class="button-description-mobile on-connect">
68
- <?php _e('No credit card required', 'ecwid-shopping-cart'); ?>
69
- </div>
70
- <div class="button-description-mobile">
71
- <h3><?php _e('Get ready to sell online', 'ecwid-shopping-cart'); ?></h3>
72
- </div>
73
- </div>
74
- <div class="ecwid-thank-background">
75
- <div class="ecwid-thank-background-tablet"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/tablet-iphone.png"></div>
76
- </div>
77
- </div>
78
- <div class="ecwid-description">
79
- <div class="ecwid-description-inner">
80
- <div class="ecwid-description-image"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/ecwid-description-image.jpg"></div>
81
- <div class="ecwid-description-text">
82
- <h2><?php _e('Sell Everywhere<br>with your Ecwid store', 'ecwid-shopping-cart'); ?></h2>
83
- <p><?php _e('Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com.', 'ecwid-shopping-cart'); ?></p>
84
- <p><?php _e('Use Ecwid\'s mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store.', 'ecwid-shopping-cart'); ?></p>
85
- </div>
86
- </div>
87
- </div>
88
- <div class="ecwid-features">
89
- <div class="ecwid-features-inner">
90
- <h2><?php _e('Features', 'ecwid-shopping-cart'); ?></h2>
91
- <div class="ecwid-features-top">
92
- <div class="ecwid-features-top-item">
93
- <div class="ecwid-features-top-item-image">
94
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/wordpress.svg">
95
- </div>
96
- <div class="ecwid-features-top-item-text">
97
- <h3><?php _e('Compatible with your theme', 'ecwid-shopping-cart'); ?></h3>
98
- <p><?php echo sprintf(__('Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box.', 'ecwid-shopping-cart'), ecwid_get_theme_name()); ?></p>
99
- </div>
100
- </div>
101
- <div class="ecwid-features-top-item">
102
- <div class="ecwid-features-top-item-image">
103
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/gift.svg" class="gift">
104
- </div>
105
- <div class="ecwid-features-top-item-text">
106
- <h3><?php _e('Free and always up to date', 'ecwid-shopping-cart'); ?></h3>
107
- <p><?php _e('Free plan always available with tons of features<br>at no additional cost. Updates are seamless, automatic<br>and free of charge.', 'ecwid-shopping-cart'); ?></p>
108
- </div>
109
- </div>
110
- </div>
111
- <div class="ecwid-features-bottom">
112
- <div class="ecwid-features-bottom-item">
113
- <div class="ecwid-features-bottom-item-image">
114
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/responsive-grow.svg">
115
- </div>
116
- <div class="ecwid-features-bottom-item-text">
117
- <h3><?php _e('Responsive design', 'ecwid-shopping-cart'); ?></h3>
118
- <p><?php _e('Your store looks perfect<br />on all devices', 'ecwid-shopping-cart'); ?></p>
119
- </div>
120
- </div>
121
- <div class="ecwid-features-bottom-item">
122
- <div class="ecwid-features-bottom-item-image">
123
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/secure-pci.svg" class="secure">
124
- </div>
125
- <div class="ecwid-features-bottom-item-text">
126
- <h3><?php _e('PCI-DSS Certified', 'ecwid-shopping-cart'); ?></h3>
127
- <p><?php _e('Secure checkout with over 40<br />payment options', 'ecwid-shopping-cart'); ?></p>
128
- </div>
129
- </div>
130
- <div class="ecwid-features-bottom-item">
131
- <div class="ecwid-features-bottom-item-image">
132
- <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/global.svg">
133
- </div>
134
- <div class="ecwid-features-bottom-item-text">
135
- <h3><?php _e('Global Reach', 'ecwid-shopping-cart'); ?></h3>
136
- <p><?php _e('More than 800,000 merchants in 175 countries', 'ecwid-shopping-cart'); ?></p>
137
- </div>
138
- </div>
139
- </div>
140
- </div>
141
- </div>
142
- <div class="ecwid-start">
143
- <h2><?php _e('Start selling <br>on your WordPress <nobr>site for free</nobr>', 'ecwid-shopping-cart'); ?>
144
- </h2>
145
- <div class="ecwid-button">
146
- <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" class="button button--blue on-register" onclick="javascript:switch_to_connect();">
147
- <?php _e('Get Started, Create Ecwid Account', 'ecwid-shopping-cart'); ?>
148
- </a>
149
- <a class="button button--green on-connect" href="admin-post.php?action=ecwid_connect">
150
- <?php _e('Connect your store', 'ecwid-shopping-cart'); ?>
151
- </a>
152
- <div class="ecwid-button-description on-register">
153
- <?php _e('Already have Ecwid account?', 'ecwid-shopping-cart'); ?>
154
- <a href="admin-post.php?action=ecwid_connect"><?php _e('Connect your store to this site', 'ecwid-shopping-cart'); ?></a>
155
- </div>
156
- <div class="ecwid-button-description on-connect">
157
- <?php _e('Don\'t have an Ecwid account?', 'ecwid-shopping-cart'); ?>
158
- <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" onclick="javascript:switch_to_connect()"><?php _e('Register at Ecwid for free', 'ecwid-shopping-cart'); ?></a>
159
- </div>
160
-
161
- </div>
162
- </div>
163
  </div>
1
+ <div class="ecwid-landing <?php echo $register ? 'register' : 'connect'; echo $connection_error ? ' conn-error': ''; ?>">
2
+ <div class="ecwid-thank">
3
+ <h1 class="on-register">
4
+ <span><?php _e('Plugin is installed successfully!', 'ecwid-shopping-cart'); ?></span>
5
+ <?php _e('There are just a few steps left to start selling<br /> on your WordPress site', 'ecwid-shopping-cart'); ?>
6
+ </h1>
7
+ <h1 class="on-connect">
8
+ <span><?php _e('Plugin is installed successfully!', 'ecwid-shopping-cart'); ?></span>
9
+ <?php _e('There are few little steps left to start selling<br /> on your WordPress site', 'ecwid-shopping-cart'); ?>
10
+ </h1>
11
+ <div class="ecwid-thank-steps">
12
+ <div class="ecwid-thank-step ecwid-thank-step-one<?php echo $register ?'' : ' active'; ?>">
13
+ <div class="ecwid-thank-step-image"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/ecwid.svg" class="none-active"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/ecwid-active.svg" class="active"></div>
14
+ <div class="ecwid-thank-step-description">
15
+ <h2><?php _e('Register', 'ecwid-shopping-cart'); ?></h2>
16
+ <p><?php _e('Create a free Ecwid account to manage your store and inventory.<br /> No credit card required', 'ecwid-shopping-cart'); ?></p>
17
+ </div>
18
+ </div>
19
+ <div class="ecwid-thank-step ecwid-thank-step-two">
20
+ <div class="ecwid-thank-step-image"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/plug.svg" class="none-active"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/plug-active.svg" class="active"></div>
21
+ <div class="ecwid-thank-step-description">
22
+ <h2>
23
+ <?php _e('Connect', 'ecwid-shopping-cart'); ?>
24
+ </h2>
25
+ <p class="on-register"><?php _e('Add your Ecwid store to your site <nobr>in two clicks</nobr>', 'ecwid-shopping-cart'); ?></p>
26
+ <p class="on-connect"><?php _e('Connect your Ecwid store to this site <nobr>in two clicks</nobr>', 'ecwid-shopping-cart'); ?></p>
27
+ </div>
28
+ </div>
29
+ <div class="ecwid-thank-step ecwid-thank-step-three">
30
+ <div class="ecwid-thank-step-image">
31
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/dollar.svg" class="none-active">
32
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/dollar-active.svg" class="active">
33
+ </div>
34
+ <div class="ecwid-thank-step-description">
35
+ <h2><?php _e('Start selling', 'ecwid-shopping-cart'); ?></h2>
36
+ <p><?php _e('Your storefront is ready', 'ecwid-shopping-cart'); ?></p>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <div class="ecwid-button">
41
+ <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" class="button button--blue on-register" onclick="javascript:switch_to_connect()">
42
+ <?php _e('Create Ecwid store', 'ecwid-shopping-cart'); ?>
43
+ </a>
44
+ <a class="button button--green on-connect" href="admin-post.php?action=ecwid_connect">
45
+ <?php _e('Connect your store', 'ecwid-shopping-cart'); ?>
46
+ </a>
47
+ <div class="button-description-mobile on-register">
48
+ <?php _e('Free registration, No credit card required', 'ecwid-shopping-cart'); ?>
49
+ </div>
50
+ <div class="button-description-mobile on-error ecwid-connection-error">
51
+ <?php _e( 'Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site.', 'ecwid-shopping-cart' ); ?>
52
+ </div>
53
+ <div class="button-description-mobile on-connect on-no-error">
54
+ <?php _e('You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site', 'ecwid-shopping-cart'); ?>
55
+ </div>
56
+ <div class="ecwid-button-description on-register">
57
+ <?php _e('Already have Ecwid account?', 'ecwid-shopping-cart'); ?>
58
+ <a href="admin-post.php?action=ecwid_connect"><?php _e('Connect your store to Wordpress site', 'ecwid-shopping-cart'); ?></a>
59
+ </div>
60
+ <div class="ecwid-button-description on-connect">
61
+ <?php _e('Don\'t have an Ecwid account?', 'ecwid-shopping-cart'); ?>
62
+ <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" onclick="javascript:switch_to_connect();"><?php _e('Register at Ecwid for free', 'ecwid-shopping-cart'); ?></a>
63
+ </div>
64
+ <div class="button-description-mobile on-register">
65
+ <?php _e('You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site', 'ecwid-shopping-cart'); ?>
66
+ </div>
67
+ <div class="button-description-mobile on-connect">
68
+ <?php _e('No credit card required', 'ecwid-shopping-cart'); ?>
69
+ </div>
70
+ <div class="button-description-mobile">
71
+ <h3><?php _e('Get ready to sell online', 'ecwid-shopping-cart'); ?></h3>
72
+ </div>
73
+ </div>
74
+ <div class="ecwid-thank-background">
75
+ <div class="ecwid-thank-background-tablet"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/tablet-iphone.png"></div>
76
+ </div>
77
+ </div>
78
+ <div class="ecwid-description">
79
+ <div class="ecwid-description-inner">
80
+ <div class="ecwid-description-image"><img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/ecwid-description-image.jpg"></div>
81
+ <div class="ecwid-description-text">
82
+ <h2><?php _e('Sell Everywhere<br>with your Ecwid store', 'ecwid-shopping-cart'); ?></h2>
83
+ <p><?php _e('Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com.', 'ecwid-shopping-cart'); ?></p>
84
+ <p><?php _e('Use Ecwid\'s mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store.', 'ecwid-shopping-cart'); ?></p>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ <div class="ecwid-features">
89
+ <div class="ecwid-features-inner">
90
+ <h2><?php _e('Features', 'ecwid-shopping-cart'); ?></h2>
91
+ <div class="ecwid-features-top">
92
+ <div class="ecwid-features-top-item">
93
+ <div class="ecwid-features-top-item-image">
94
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/wordpress.svg">
95
+ </div>
96
+ <div class="ecwid-features-top-item-text">
97
+ <h3><?php _e('Compatible with your theme', 'ecwid-shopping-cart'); ?></h3>
98
+ <p><?php echo sprintf(__('Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box.', 'ecwid-shopping-cart'), ecwid_get_theme_name()); ?></p>
99
+ </div>
100
+ </div>
101
+ <div class="ecwid-features-top-item">
102
+ <div class="ecwid-features-top-item-image">
103
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/gift.svg" class="gift">
104
+ </div>
105
+ <div class="ecwid-features-top-item-text">
106
+ <h3><?php _e('Free and always up to date', 'ecwid-shopping-cart'); ?></h3>
107
+ <p><?php _e('Free plan always available with tons of features<br>at no additional cost. Updates are seamless, automatic<br>and free of charge.', 'ecwid-shopping-cart'); ?></p>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ <div class="ecwid-features-bottom">
112
+ <div class="ecwid-features-bottom-item">
113
+ <div class="ecwid-features-bottom-item-image">
114
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/responsive-grow.svg">
115
+ </div>
116
+ <div class="ecwid-features-bottom-item-text">
117
+ <h3><?php _e('Responsive design', 'ecwid-shopping-cart'); ?></h3>
118
+ <p><?php _e('Your store looks perfect<br />on all devices', 'ecwid-shopping-cart'); ?></p>
119
+ </div>
120
+ </div>
121
+ <div class="ecwid-features-bottom-item">
122
+ <div class="ecwid-features-bottom-item-image">
123
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/secure-pci.svg" class="secure">
124
+ </div>
125
+ <div class="ecwid-features-bottom-item-text">
126
+ <h3><?php _e('PCI-DSS Certified', 'ecwid-shopping-cart'); ?></h3>
127
+ <p><?php _e('Secure checkout with over 40<br />payment options', 'ecwid-shopping-cart'); ?></p>
128
+ </div>
129
+ </div>
130
+ <div class="ecwid-features-bottom-item">
131
+ <div class="ecwid-features-bottom-item-image">
132
+ <img src="<?php echo ECWID_PLUGIN_URL; ?>images/landing/global.svg">
133
+ </div>
134
+ <div class="ecwid-features-bottom-item-text">
135
+ <h3><?php _e('Global Reach', 'ecwid-shopping-cart'); ?></h3>
136
+ <p><?php _e('More than 800,000 merchants in 175 countries', 'ecwid-shopping-cart'); ?></p>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ <div class="ecwid-start">
143
+ <h2><?php _e('Start selling <br>on your WordPress <nobr>site for free</nobr>', 'ecwid-shopping-cart'); ?>
144
+ </h2>
145
+ <div class="ecwid-button">
146
+ <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" class="button button--blue on-register" onclick="javascript:switch_to_connect();">
147
+ <?php _e('Get Started, Create Ecwid Account', 'ecwid-shopping-cart'); ?>
148
+ </a>
149
+ <a class="button button--green on-connect" href="admin-post.php?action=ecwid_connect">
150
+ <?php _e('Connect your store', 'ecwid-shopping-cart'); ?>
151
+ </a>
152
+ <div class="ecwid-button-description on-register">
153
+ <?php _e('Already have Ecwid account?', 'ecwid-shopping-cart'); ?>
154
+ <a href="admin-post.php?action=ecwid_connect"><?php _e('Connect your store to this site', 'ecwid-shopping-cart'); ?></a>
155
+ </div>
156
+ <div class="ecwid-button-description on-connect">
157
+ <?php _e('Don\'t have an Ecwid account?', 'ecwid-shopping-cart'); ?>
158
+ <a target="_blank" href="<?php echo esc_attr(ecwid_get_register_link()); ?>" onclick="javascript:switch_to_connect()"><?php _e('Register at Ecwid for free', 'ecwid-shopping-cart'); ?></a>
159
+ </div>
160
+
161
+ </div>
162
+ </div>
163
  </div>
templates/reconnect.php CHANGED
@@ -1,31 +1,31 @@
1
- <div class="wrap ecwid-admin ecwid-connect">
2
- <div class="box">
3
- <h3>
4
- <?php ecwid_embed_svg('ecwid_logo_symbol_RGB');?>
5
- <?php _e( 'Ecwid Shopping Cart', 'ecwid-shopping-cart' ); ?>
6
- <span class="close"></span>
7
- </h3>
8
- <div class="greeting-image">
9
- <img src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
10
- </div>
11
-
12
- <div class="greeting-message mobile-br">
13
- <?php _e( 'Reconnect your store<br /> to this WordPress site', 'ecwid-shopping-cart' ); ?>
14
- </div>
15
-
16
- <div class="connect-button">
17
- <a href="<?php echo esc_attr($ecwid_oauth->get_auth_dialog_url()); ?>"><?php _e( 'Reconnect Ecwid store', 'ecwid-shopping-cart' ); ?></a>
18
- </div>
19
-
20
- <div class="note initial">
21
- <?php _e( 'New features available, reconnect to be in touch with our updates', 'ecwid-shopping-cart' ); ?>
22
- </div>
23
-
24
- <div class="create-account-link">
25
- <a href="">
26
- <?php _e( "Don't have Ecwid account? Create it here", 'ecwid-shopping-cart' ); ?>
27
- </a>
28
- </div>
29
- </div>
30
- <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>', 'ecwid-shopping-cart'); ?></p>
31
- </div>
1
+ <div class="wrap ecwid-admin ecwid-connect">
2
+ <div class="box">
3
+ <h3>
4
+ <?php ecwid_embed_svg('ecwid_logo_symbol_RGB');?>
5
+ <?php _e( 'Ecwid Shopping Cart', 'ecwid-shopping-cart' ); ?>
6
+ <span class="close"></span>
7
+ </h3>
8
+ <div class="greeting-image">
9
+ <img src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
10
+ </div>
11
+
12
+ <div class="greeting-message mobile-br">
13
+ <?php _e( 'Reconnect your store<br /> to this WordPress site', 'ecwid-shopping-cart' ); ?>
14
+ </div>
15
+
16
+ <div class="connect-button">
17
+ <a href="<?php echo esc_attr($ecwid_oauth->get_auth_dialog_url()); ?>"><?php _e( 'Reconnect Ecwid store', 'ecwid-shopping-cart' ); ?></a>
18
+ </div>
19
+
20
+ <div class="note initial">
21
+ <?php _e( 'New features available, reconnect to be in touch with our updates', 'ecwid-shopping-cart' ); ?>
22
+ </div>
23
+
24
+ <div class="create-account-link">
25
+ <a href="">
26
+ <?php _e( "Don't have Ecwid account? Create it here", 'ecwid-shopping-cart' ); ?>
27
+ </a>
28
+ </div>
29
+ </div>
30
+ <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>', 'ecwid-shopping-cart'); ?></p>
31
+ </div>
templates/store-popup.php CHANGED
@@ -1,267 +1,267 @@
1
- <script data-cfasync="false" type="text/javascript">
2
- var ecwid_store_svg = '<?php echo get_site_url('', 'index.php?file=ecwid_store_svg.svg'); ?>';
3
- </script>
4
- <div id="ecwid-store-popup-content">
5
- <div class="media-modal wp-core-ui">
6
- <div class="media-modal-content">
7
- <a class="media-modal-close" href="#" title="Close"><span class="media-modal-icon"></span></a>
8
- <div class="media-frame wp-core-ui hide-router">
9
- <div class="media-frame-menu">
10
- <div class="media-menu">
11
- <a href="#" class="media-menu-item" data-content="add-store"><?php _e('Add Store', 'ecwid-shopping-cart'); ?></a>
12
- <a href="#" class="media-menu-item" data-content="store-settings"><?php _e('Store settings', 'ecwid-shopping-cart'); ?></a>
13
- <a href="#" class="media-menu-item" data-content="appearance"><?php _e('Appearance', 'ecwid-shopping-cart'); ?></a>
14
- </div>
15
- </div>
16
-
17
- <div class="media-frame-title add-store">
18
- <h1>
19
- <?php _e('Add Store', 'ecwid-shopping-cart'); ?><span class="dashicons dashicons-arrow-down"></span>
20
- </h1>
21
- </div>
22
-
23
- <div class="media-frame-title store-settings">
24
- <h1>
25
- <?php _e('Store settings', 'ecwid-shopping-cart'); ?><span class="dashicons dashicons-arrow-down"></span>
26
- </h1>
27
- </div>
28
-
29
- <div class="media-frame-title appearance">
30
- <h1>
31
- <?php _e('Appearance', 'ecwid-shopping-cart'); ?><span class="dashicons dashicons-arrow-down"></span>
32
- </h1>
33
- </div>
34
-
35
- <div class="media-frame-content ecwid-store-editor store-settings">
36
-
37
- <div class="store-settings-wrapper">
38
- <div class="store-settings-preview">
39
- <?php ecwid_embed_svg('add-store'); ?>
40
- <label for="show_search" class="ecwid-search" data-ecwid-widget="search"></label>
41
- <label for="show_categories" class="ecwid-categories" data-ecwid-widget="categories"></label>
42
- <label for="show_minicart" class="ecwid-minicart" data-ecwid-widget="minicart"></label>
43
- </div>
44
-
45
- <div class="store-settings">
46
- <h3><?php _e('Choose widgets to show', 'ecwid-shopping-cart'); ?></h3>
47
- <p class="note"><?php _e('Product catalog will be shown automatically', 'ecwid-shopping-cart'); ?></p>
48
-
49
- <div class="pure-control-group">
50
- <label data-ecwid-widget="search">
51
- <input type="checkbox" name="show_search" id="show_search" />
52
- <?php _e('Show search', 'ecwid-shopping-cart'); ?>
53
- </label>
54
- </div>
55
-
56
- <div class="pure-control-group">
57
- <label data-ecwid-widget="minicart">
58
- <input type="checkbox" name="show_minicart" id="show_minicart" />
59
- <?php _e('Show minicart', 'ecwid-shopping-cart'); ?>
60
- </label>
61
- </div>
62
-
63
- <div class="pure-control-group">
64
- <label data-ecwid-widget="categories">
65
- <input type="checkbox" name="show_categories" id="show_categories" />
66
- <?php _e('Show horizontal categories', 'ecwid-shopping-cart'); ?>
67
- </label>
68
- </div>
69
- </div>
70
- <div class="note">
71
- <?php echo sprintf(
72
- __('Additionally, you can add store controls to your website\'s toolbar using <a %s>WordPress native widgets</a>', 'ecwid-shopping-cart'),
73
- ' target="_blank" href="widgets.php?from-ecwid=' . (isset($_GET['post']) ? $_GET['post'] : 'new') . '"'
74
- );
75
- ?>
76
- </div>
77
- </div>
78
-
79
- </div>
80
-
81
- <div class="media-frame-content ecwid-store-editor appearance">
82
-
83
- <div class="pure-control-group pb-views">
84
- <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
85
- <div class="ecwid-pb-view-size grid active" tabindex="1">
86
- <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
87
- <div class="main-area">
88
- <?php ecwid_embed_svg('grid'); ?>
89
- </div>
90
- <div class="right">
91
- <div class="ruler"></div>
92
- <input
93
- type="text"
94
- size="2"
95
- name="grid_rows"
96
- class="number"
97
- value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_grid')); ?>"
98
- />
99
- </div>
100
- <div class="bottom">
101
- <div class="ruler"></div>
102
- <input
103
- type="text"
104
- size="2"
105
- name="grid_columns"
106
- class="number"
107
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
108
- />
109
- </div>
110
- </div>
111
-
112
- <div class="ecwid-pb-view-size list" tabindex="1">
113
- <div class="title"><?php _e('List view', 'ecwid-shopping-cart'); ?></div>
114
- <div class="main-area">
115
- <?php ecwid_embed_svg('list'); ?>
116
- </div>
117
- <div class="right">
118
- <div class="ruler"></div>
119
- <input
120
- type="text"
121
- size="2"
122
- name="list_rows"
123
- class="number"
124
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
125
- </div>
126
- </div>
127
-
128
-
129
- <div class="ecwid-pb-view-size table" tabindex="1">
130
- <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
131
- <div class="main-area">
132
- <?php ecwid_embed_svg('table'); ?>
133
- </div>
134
- <div class="right">
135
- <div class="ruler"></div>
136
- <input
137
- type="text"
138
- size="2"
139
- name="table_rows"
140
- class="number"
141
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
142
- />
143
- </div>
144
- </div>
145
- <p class="note pb-note"><?php _e('Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products.', 'ecwid-shopping-cart'); ?></p>
146
- </div>
147
-
148
- <hr class="after-pb" />
149
-
150
- <div class="pure-control-group params-list default-category-id">
151
-
152
- <?php if (ecwid_is_paid_account()): ?>
153
- <?php if ($categories): ?>
154
- <label for="ecwid_default_category_id">
155
- <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
156
- </label>
157
-
158
-
159
- <div class="value">
160
-
161
- <select name="default_category_id" id="ecwid_default_category_id">
162
- <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
163
- <?php foreach ($categories as $category): ?>
164
- <option
165
- value="<?php echo esc_attr($category['id']); ?>"
166
- <?php if ($category['id'] == get_option('ecwid_default_category_id')): ?>
167
- selected="selected"
168
- <?php endif; ?>
169
- >
170
- <?php echo esc_html($category['path_str']); ?>
171
- </option>
172
- <?php endforeach; ?>
173
- </select>
174
- </div>
175
-
176
- <?php endif; ?>
177
- <?php else: ?>
178
-
179
- <label for="ecwid_default_category_id">
180
- <?php _e('Default category ID', 'ecwid-shopping-cart'); ?>
181
- </label>
182
-
183
- <input
184
- id="ecwid_default_category_id"
185
- name="ecwid_default_category_id"
186
- type="text"
187
- placeholder="<?php _e('Default category ID', 'ecwid-shopping-cart'); ?>"
188
- value="<?php echo esc_attr(get_option('ecwid_default_category_id')) ?>"
189
- />
190
- <?php endif; ?>
191
-
192
- </div>
193
-
194
- <div class="pure-control-group params-list">
195
- <label for="ecwid_pb_categoriesperrow">
196
- <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
197
- </label>
198
- <input
199
- id="ecwid_pb_categoriesperrow"
200
- name="categories_per_row"
201
- type="text"
202
- class="number"
203
- value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
204
- />
205
- </div>
206
-
207
- <div class="pure-control-group params-list">
208
- <label for="ecwid_pb_defaultview">
209
- <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
210
- </label>
211
- <select id="ecwid_pb_defaultview" name="category_view">
212
- <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
213
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
214
- </option>
215
- <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
216
- <?php _e('List', 'ecwid-shopping-cart'); ?>
217
- </option>
218
- <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
219
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
220
- </option>
221
- </select>
222
- </div>
223
-
224
- <div class="pure-control-group params-list">
225
- <label for="ecwid_pb_searchview">
226
- <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
227
- </label>
228
-
229
- <select id="ecwid_pb_searchview" name="search_view">
230
- <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
231
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
232
- </option>
233
- <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
234
- <?php _e('List', 'ecwid-shopping-cart'); ?>
235
- </option>
236
- <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
237
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
238
- </option>
239
- </select>
240
- </div>
241
- </div>
242
-
243
- <div class="media-frame-toolbar">
244
- <div class="media-toolbar">
245
- <div class="media-toolbar-secondary">
246
- <?php if (get_ecwid_store_id() != ECWID_DEMO_STORE_ID): ?>
247
- <div class="store-id"><?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <?php echo esc_attr(get_ecwid_store_id()); ?></div>
248
- <?php else: ?>
249
- <div class="store-id"><?php _e('Demo store', 'ecwid-shopping-cart'); ?></div>
250
- <?php endif; ?>
251
- <div class="setting-link">
252
- <a target="_blank" href="admin.php?page=ecwid"><?php _e('Ecwid plugin settings', 'ecwid-shopping-cart'); ?>
253
- </div>
254
- </div>
255
- <div class="media-toolbar-primary add-store">
256
- <a href="#" class="button media-button button-primary button-large media-button-select"><?php _e('Insert into page'); ?></a>
257
- </div>
258
- <div class="media-toolbar-primary store-settings">
259
- <a href="#" class="button media-button button-primary button-large media-button-select"><?php _e('Update'); ?></a>
260
- </div>
261
- </div>
262
- </div>
263
- </div>
264
- </div>
265
- </div>
266
- <div class="media-modal-backdrop"></div>
267
- </div>
1
+ <script data-cfasync="false" type="text/javascript">
2
+ var ecwid_store_svg = '<?php echo get_site_url('', 'index.php?file=ecwid_store_svg.svg'); ?>';
3
+ </script>
4
+ <div id="ecwid-store-popup-content">
5
+ <div class="media-modal wp-core-ui">
6
+ <div class="media-modal-content">
7
+ <a class="media-modal-close" href="#" title="Close"><span class="media-modal-icon"></span></a>
8
+ <div class="media-frame wp-core-ui hide-router">
9
+ <div class="media-frame-menu">
10
+ <div class="media-menu">
11
+ <a href="#" class="media-menu-item" data-content="add-store"><?php _e('Add Store', 'ecwid-shopping-cart'); ?></a>
12
+ <a href="#" class="media-menu-item" data-content="store-settings"><?php _e('Store settings', 'ecwid-shopping-cart'); ?></a>
13
+ <a href="#" class="media-menu-item" data-content="appearance"><?php _e('Appearance', 'ecwid-shopping-cart'); ?></a>
14
+ </div>
15
+ </div>
16
+
17
+ <div class="media-frame-title add-store">
18
+ <h1>
19
+ <?php _e('Add Store', 'ecwid-shopping-cart'); ?><span class="dashicons dashicons-arrow-down"></span>
20
+ </h1>
21
+ </div>
22
+
23
+ <div class="media-frame-title store-settings">
24
+ <h1>
25
+ <?php _e('Store settings', 'ecwid-shopping-cart'); ?><span class="dashicons dashicons-arrow-down"></span>
26
+ </h1>
27
+ </div>
28
+
29
+ <div class="media-frame-title appearance">
30
+ <h1>
31
+ <?php _e('Appearance', 'ecwid-shopping-cart'); ?><span class="dashicons dashicons-arrow-down"></span>
32
+ </h1>
33
+ </div>
34
+
35
+ <div class="media-frame-content ecwid-store-editor store-settings">
36
+
37
+ <div class="store-settings-wrapper">
38
+ <div class="store-settings-preview">
39
+ <?php ecwid_embed_svg('add-store'); ?>
40
+ <label for="show_search" class="ecwid-search" data-ecwid-widget="search"></label>
41
+ <label for="show_categories" class="ecwid-categories" data-ecwid-widget="categories"></label>
42
+ <label for="show_minicart" class="ecwid-minicart" data-ecwid-widget="minicart"></label>
43
+ </div>
44
+
45
+ <div class="store-settings">
46
+ <h3><?php _e('Choose widgets to show', 'ecwid-shopping-cart'); ?></h3>
47
+ <p class="note"><?php _e('Product catalog will be shown automatically', 'ecwid-shopping-cart'); ?></p>
48
+
49
+ <div class="pure-control-group">
50
+ <label data-ecwid-widget="search">
51
+ <input type="checkbox" name="show_search" id="show_search" />
52
+ <?php _e('Show search', 'ecwid-shopping-cart'); ?>
53
+ </label>
54
+ </div>
55
+
56
+ <div class="pure-control-group">
57
+ <label data-ecwid-widget="minicart">
58
+ <input type="checkbox" name="show_minicart" id="show_minicart" />
59
+ <?php _e('Show minicart', 'ecwid-shopping-cart'); ?>
60
+ </label>
61
+ </div>
62
+
63
+ <div class="pure-control-group">
64
+ <label data-ecwid-widget="categories">
65
+ <input type="checkbox" name="show_categories" id="show_categories" />
66
+ <?php _e('Show categories', 'ecwid-shopping-cart'); ?>
67
+ </label>
68
+ </div>
69
+ </div>
70
+ <div class="note">
71
+ <?php echo sprintf(
72
+ __('Additionally, you can add store controls to your website\'s toolbar using <a %s>WordPress native widgets</a>', 'ecwid-shopping-cart'),
73
+ ' target="_blank" href="widgets.php?from-ecwid=' . (isset($_GET['post']) ? $_GET['post'] : 'new') . '"'
74
+ );
75
+ ?>
76
+ </div>
77
+ </div>
78
+
79
+ </div>
80
+
81
+ <div class="media-frame-content ecwid-store-editor appearance">
82
+
83
+ <div class="pure-control-group pb-views">
84
+ <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
85
+ <div class="ecwid-pb-view-size grid active" tabindex="1">
86
+ <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
87
+ <div class="main-area">
88
+ <?php ecwid_embed_svg('grid'); ?>
89
+ </div>
90
+ <div class="right">
91
+ <div class="ruler"></div>
92
+ <input
93
+ type="text"
94
+ size="2"
95
+ name="grid_rows"
96
+ class="number"
97
+ value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_grid')); ?>"
98
+ />
99
+ </div>
100
+ <div class="bottom">
101
+ <div class="ruler"></div>
102
+ <input
103
+ type="text"
104
+ size="2"
105
+ name="grid_columns"
106
+ class="number"
107
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
108
+ />
109
+ </div>
110
+ </div>
111
+
112
+ <div class="ecwid-pb-view-size list" tabindex="1">
113
+ <div class="title"><?php _e('List view', 'ecwid-shopping-cart'); ?></div>
114
+ <div class="main-area">
115
+ <?php ecwid_embed_svg('list'); ?>
116
+ </div>
117
+ <div class="right">
118
+ <div class="ruler"></div>
119
+ <input
120
+ type="text"
121
+ size="2"
122
+ name="list_rows"
123
+ class="number"
124
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
125
+ </div>
126
+ </div>
127
+
128
+
129
+ <div class="ecwid-pb-view-size table" tabindex="1">
130
+ <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
131
+ <div class="main-area">
132
+ <?php ecwid_embed_svg('table'); ?>
133
+ </div>
134
+ <div class="right">
135
+ <div class="ruler"></div>
136
+ <input
137
+ type="text"
138
+ size="2"
139
+ name="table_rows"
140
+ class="number"
141
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
142
+ />
143
+ </div>
144
+ </div>
145
+ <p class="note pb-note"><?php _e('Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, Ecwid will adapt the number of columns to hold all products.', 'ecwid-shopping-cart'); ?></p>
146
+ </div>
147
+
148
+ <hr class="after-pb" />
149
+
150
+ <div class="pure-control-group params-list default-category-id">
151
+
152
+ <?php if (ecwid_is_paid_account()): ?>
153
+ <?php if ($categories): ?>
154
+ <label for="ecwid_default_category_id">
155
+ <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
156
+ </label>
157
+
158
+
159
+ <div class="value">
160
+
161
+ <select name="default_category_id" id="ecwid_default_category_id">
162
+ <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
163
+ <?php foreach ($categories as $category): ?>
164
+ <option
165
+ value="<?php echo esc_attr($category['id']); ?>"
166
+ <?php if ($category['id'] == get_option('ecwid_default_category_id')): ?>
167
+ selected="selected"
168
+ <?php endif; ?>
169
+ >
170
+ <?php echo esc_html($category['path_str']); ?>
171
+ </option>
172
+ <?php endforeach; ?>
173
+ </select>
174
+ </div>
175
+
176
+ <?php endif; ?>
177
+ <?php else: ?>
178
+
179
+ <label for="ecwid_default_category_id">
180
+ <?php _e('Default category ID', 'ecwid-shopping-cart'); ?>
181
+ </label>
182
+
183
+ <input
184
+ id="ecwid_default_category_id"
185
+ name="ecwid_default_category_id"
186
+ type="text"
187
+ placeholder="<?php _e('Default category ID', 'ecwid-shopping-cart'); ?>"
188
+ value="<?php echo esc_attr(get_option('ecwid_default_category_id')) ?>"
189
+ />
190
+ <?php endif; ?>
191
+
192
+ </div>
193
+
194
+ <div class="pure-control-group params-list">
195
+ <label for="ecwid_pb_categoriesperrow">
196
+ <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
197
+ </label>
198
+ <input
199
+ id="ecwid_pb_categoriesperrow"
200
+ name="categories_per_row"
201
+ type="text"
202
+ class="number"
203
+ value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
204
+ />
205
+ </div>
206
+
207
+ <div class="pure-control-group params-list">
208
+ <label for="ecwid_pb_defaultview">
209
+ <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
210
+ </label>
211
+ <select id="ecwid_pb_defaultview" name="category_view">
212
+ <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
213
+ <?php _e('Grid', 'ecwid-shopping-cart'); ?>
214
+ </option>
215
+ <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
216
+ <?php _e('List', 'ecwid-shopping-cart'); ?>
217
+ </option>
218
+ <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
219
+ <?php _e('Table', 'ecwid-shopping-cart'); ?>
220
+ </option>
221
+ </select>
222
+ </div>
223
+
224
+ <div class="pure-control-group params-list">
225
+ <label for="ecwid_pb_searchview">
226
+ <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
227
+ </label>
228
+
229
+ <select id="ecwid_pb_searchview" name="search_view">
230
+ <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
231
+ <?php _e('Grid', 'ecwid-shopping-cart'); ?>
232
+ </option>
233
+ <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
234
+ <?php _e('List', 'ecwid-shopping-cart'); ?>
235
+ </option>
236
+ <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
237
+ <?php _e('Table', 'ecwid-shopping-cart'); ?>
238
+ </option>
239
+ </select>
240
+ </div>
241
+ </div>
242
+
243
+ <div class="media-frame-toolbar">
244
+ <div class="media-toolbar">
245
+ <div class="media-toolbar-secondary">
246
+ <?php if (get_ecwid_store_id() != ECWID_DEMO_STORE_ID): ?>
247
+ <div class="store-id"><?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <?php echo esc_attr(get_ecwid_store_id()); ?></div>
248
+ <?php else: ?>
249
+ <div class="store-id"><?php _e('Demo store', 'ecwid-shopping-cart'); ?></div>
250
+ <?php endif; ?>
251
+ <div class="setting-link">
252
+ <a target="_blank" href="admin.php?page=ecwid"><?php _e('Ecwid plugin settings', 'ecwid-shopping-cart'); ?>
253
+ </div>
254
+ </div>
255
+ <div class="media-toolbar-primary add-store">
256
+ <a href="#" class="button media-button button-primary button-large media-button-select"><?php _e('Insert into page'); ?></a>
257
+ </div>
258
+ <div class="media-toolbar-primary store-settings">
259
+ <a href="#" class="button media-button button-primary button-large media-button-select"><?php _e('Update'); ?></a>
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </div>
265
+ </div>
266
+ <div class="media-modal-backdrop"></div>
267
+ </div>
templates/store-svg.php CHANGED
@@ -1,36 +1,36 @@
1
- <?php
2
- echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
3
- echo '<?xml-stylesheet type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans%3A300italic%2C400italic%2C600italic%2C300%2C400%2C600&subset=latin%2Clatin-ext&ver=3.9.2" ?>';
4
- echo '<?xml-stylesheet type="text/css" href="http://localhost/2.css" ?>';
5
- ?><!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
6
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
7
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
8
- viewBox="0 0 500 220" enable-background="new 0 0 500 220" xml:space="preserve">
9
-
10
- <text x="245" y="115" text-anchor="middle" fill="#050303" font-family="Open Sans,Helvetica Neue,sans-serif" font-size="20"><?php _e('Your store will be shown here!', 'ecwid-shopping-cart'); ?></text>
11
- <text x="245" y="137" text-anchor="middle" fill="#999999" font-family="Open Sans,Helvetica Neue,sans-serif" font-size="14">
12
- <?php if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID): ?>
13
- <?php _e('Demo Store', 'ecwid-shopping-cart'); ?>
14
- <?php else: ?>
15
- <?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <?php echo esc_attr(get_ecwid_store_id()); ?>
16
- <?php endif; ?>
17
- </text>
18
-
19
- <g>
20
- <path fill="#77B644" d="M225.7,82.3c0-0.4,0.3-0.8,0.8-0.8h41.1c0.4,0,0.8,0.3,0.8,0.8v1.6c0,0.4-0.3,0.8-0.8,0.8h-41.1
21
- c-0.4,0-0.8-0.3-0.8-0.8V82.3z"/>
22
- <path fill="#77B644" d="M268.4,56.6c-1.6-3.3-2.4-6.5-3.3-11.9c0-0.3-0.7-1.3-1.6-1.3h-33c-0.9,0-1.6,1-1.6,1.3
23
- c0,0-1.6,10.2-3.3,11.9c0,1.7,0,5,0,5s0,0.1,0.1,0.1h-0.1c0,0,0.1,0.8,1.2,1.3c0.1,0.1,0.3,0.2,0.5,0.2v0v14.9
24
- c0,0.9,0.9,1.5,1.8,1.5h13V66c0-0.9,0.9-1.6,1.8-1.6h6.6c0.9,0,1.6,0.7,1.6,1.6v13.7h13.1c0.9,0,1.6-0.6,1.6-1.5V63.3v-0.1
25
- c1.3-0.2,1.6-1.5,1.6-1.5h0c0-0.1,0-0.1,0-0.1S268.4,58.3,268.4,56.6z M238.5,73.1c0,0.9-0.4,1.6-1.3,1.6h-3.4
26
- c-0.9,0-1.3-0.7-1.3-1.6v-6.6c0-0.9,0.4-1.6,1.3-1.6h3.4c0.9,0,1.3,0.7,1.3,1.6V73.1z M261.5,73.1c0,0.9-0.4,1.6-1.3,1.6h-3.4
27
- c-0.9,0-1.3-0.7-1.3-1.6v-6.6c0-0.9,0.4-1.6,1.3-1.6h3.4c0.9,0,1.3,0.7,1.3,1.6V73.1z M261.8,46.4c0,0,1.8,8.4,2.8,10.2
28
- c-1.6,0-4.5,0-4.5,0l-1.6-10.2H261.8z M264.8,58.3l0,1.3c-0.2,1.1-1.1,2-2.3,2c-1.3,0-2.3-0.8-2.3-2.1c0,0,0.1-1.2,0.1-1.2H264.8z
29
- M252.3,59.1l0-0.9h4.7l0,1.3c-0.2,1.1-1.1,2-2.3,2c-1.3,0-2.3-1-2.3-2.3C252.4,59.2,252.4,59.2,252.3,59.1L252.3,59.1z
30
- M255.2,46.4c0,0,1.2,8.2,1.8,10.2c0.5,0-4.6,0-4.6,0l-0.5-10.2H255.2z M245.3,46.4h3.4l0.6,10.2h-4.5L245.3,46.4z M244.7,58.3h4.6
31
- l0,1.2c-0.1,1.2-1.1,2.1-2.3,2.1c-1.2,0-2.2-0.9-2.3-2.1L244.7,58.3z M238.7,46.4h3.3l-0.5,10.2c0,0-3.2,0-4.4,0
32
- C237.6,54.8,238.7,46.4,238.7,46.4z M236.9,58.3h4.6l0,0.9h0c0,0,0,0.1,0,0.1c0,1.3-1,2.3-2.3,2.3c-1.2,0-2.1-0.9-2.3-2L236.9,58.3
33
- z M232.1,46.4h3.2L234,56.6c0,0-3.3,0-4.5,0C230.8,54.3,232.1,46.4,232.1,46.4z M229.2,58.3h4.6c0,0,0,0.9,0,1c0,1.3-1,2.3-2.3,2.3
34
- c-1.1,0-2.1-0.8-2.3-1.9L229.2,58.3z"/>
35
- </g>
36
- </svg>
1
+ <?php
2
+ echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
3
+ echo '<?xml-stylesheet type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans%3A300italic%2C400italic%2C600italic%2C300%2C400%2C600&subset=latin%2Clatin-ext&ver=3.9.2" ?>';
4
+ echo '<?xml-stylesheet type="text/css" href="http://localhost/2.css" ?>';
5
+ ?><!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
6
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
7
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
8
+ viewBox="0 0 500 220" enable-background="new 0 0 500 220" xml:space="preserve">
9
+
10
+ <text x="245" y="115" text-anchor="middle" fill="#050303" font-family="Open Sans,Helvetica Neue,sans-serif" font-size="20"><?php _e('Your store will be shown here!', 'ecwid-shopping-cart'); ?></text>
11
+ <text x="245" y="137" text-anchor="middle" fill="#999999" font-family="Open Sans,Helvetica Neue,sans-serif" font-size="14">
12
+ <?php if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID): ?>
13
+ <?php _e('Demo Store', 'ecwid-shopping-cart'); ?>
14
+ <?php else: ?>
15
+ <?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <?php echo esc_attr(get_ecwid_store_id()); ?>
16
+ <?php endif; ?>
17
+ </text>
18
+
19
+ <g>
20
+ <path fill="#77B644" d="M225.7,82.3c0-0.4,0.3-0.8,0.8-0.8h41.1c0.4,0,0.8,0.3,0.8,0.8v1.6c0,0.4-0.3,0.8-0.8,0.8h-41.1
21
+ c-0.4,0-0.8-0.3-0.8-0.8V82.3z"/>
22
+ <path fill="#77B644" d="M268.4,56.6c-1.6-3.3-2.4-6.5-3.3-11.9c0-0.3-0.7-1.3-1.6-1.3h-33c-0.9,0-1.6,1-1.6,1.3
23
+ c0,0-1.6,10.2-3.3,11.9c0,1.7,0,5,0,5s0,0.1,0.1,0.1h-0.1c0,0,0.1,0.8,1.2,1.3c0.1,0.1,0.3,0.2,0.5,0.2v0v14.9
24
+ c0,0.9,0.9,1.5,1.8,1.5h13V66c0-0.9,0.9-1.6,1.8-1.6h6.6c0.9,0,1.6,0.7,1.6,1.6v13.7h13.1c0.9,0,1.6-0.6,1.6-1.5V63.3v-0.1
25
+ c1.3-0.2,1.6-1.5,1.6-1.5h0c0-0.1,0-0.1,0-0.1S268.4,58.3,268.4,56.6z M238.5,73.1c0,0.9-0.4,1.6-1.3,1.6h-3.4
26
+ c-0.9,0-1.3-0.7-1.3-1.6v-6.6c0-0.9,0.4-1.6,1.3-1.6h3.4c0.9,0,1.3,0.7,1.3,1.6V73.1z M261.5,73.1c0,0.9-0.4,1.6-1.3,1.6h-3.4
27
+ c-0.9,0-1.3-0.7-1.3-1.6v-6.6c0-0.9,0.4-1.6,1.3-1.6h3.4c0.9,0,1.3,0.7,1.3,1.6V73.1z M261.8,46.4c0,0,1.8,8.4,2.8,10.2
28
+ c-1.6,0-4.5,0-4.5,0l-1.6-10.2H261.8z M264.8,58.3l0,1.3c-0.2,1.1-1.1,2-2.3,2c-1.3,0-2.3-0.8-2.3-2.1c0,0,0.1-1.2,0.1-1.2H264.8z
29
+ M252.3,59.1l0-0.9h4.7l0,1.3c-0.2,1.1-1.1,2-2.3,2c-1.3,0-2.3-1-2.3-2.3C252.4,59.2,252.4,59.2,252.3,59.1L252.3,59.1z
30
+ M255.2,46.4c0,0,1.2,8.2,1.8,10.2c0.5,0-4.6,0-4.6,0l-0.5-10.2H255.2z M245.3,46.4h3.4l0.6,10.2h-4.5L245.3,46.4z M244.7,58.3h4.6
31
+ l0,1.2c-0.1,1.2-1.1,2.1-2.3,2.1c-1.2,0-2.2-0.9-2.3-2.1L244.7,58.3z M238.7,46.4h3.3l-0.5,10.2c0,0-3.2,0-4.4,0
32
+ C237.6,54.8,238.7,46.4,238.7,46.4z M236.9,58.3h4.6l0,0.9h0c0,0,0,0.1,0,0.1c0,1.3-1,2.3-2.3,2.3c-1.2,0-2.1-0.9-2.3-2L236.9,58.3
33
+ z M232.1,46.4h3.2L234,56.6c0,0-3.3,0-4.5,0C230.8,54.3,232.1,46.4,232.1,46.4z M229.2,58.3h4.6c0,0,0,0.9,0,1c0,1.3-1,2.3-2.3,2.3
34
+ c-1.1,0-2.1-0.8-2.3-1.9L229.2,58.3z"/>
35
+ </g>
36
+ </svg>