Ecwid Ecommerce Shopping Cart - Version 2.2

Version Description

  • Improved compatibility with the new Wordpress version 3.8 which brings great features like brand new responsive theme, revamped admin backend and other improvements. Ecwid plugin is now ready for that, so your store will work perfectly with the new Wordpress version
  • The plugin settings pages are now available in seven languages: English, Italian, Russian, French, German, Spanish, Brazilian Portuguese. Ecwid itself is available in 45 languages, so customers from all over the world can purchase from your store
  • Design improvements of the plugin settings pages including Retina-ready icons
Download this release

Release Info

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

Code changes from version 2.1 to 2.2

css/2014adjustments.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .site-content .entry-header, .site-content .entry-content, .site-content .entry-summary, .site-content .entry-meta {
2
+ max-width: none;
3
+ }
css/admin.3.8.css ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @font-face {
2
+ font-family: 'ecwid-logo';
3
+ src: url('fonts/ecwid-logo.eot');
4
+ }
5
+ @font-face {
6
+ font-family: 'ecwid-logo';
7
+ src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg6wDYEAAAC8AAAAYGNtYXAAoABGAAABHAAAADxnYXNwAAAAEAAAAVgAAAAIZ2x5ZnWz5hcAAAFgAAADwGhlYWQAXU/JAAAFIAAAADZoaGVhB4YEAAAABVgAAAAkaG10eAYAADwAAAV8AAAADGxvY2EACgHgAAAFiAAAAAhtYXhwABABdwAABZAAAAAgbmFtZUPBEJcAAAWwAAABVHBvc3QAAwAAAAAHBAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAABAACAAVwPA/8D/wAPAAEAAAAAAAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEACgAAAAGAAQAAQACACAAV///AAAAIABX////4f+rAAEAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAwAPP/8A8QDhAAUACkAQgBXAGwAgQCWAKsAwADVAV8BdAAANxQOAiMiLgI1ND4CMzIeAhUhFA4CIyIuAjU0PgIzMh4CFQMhIg4CFREUHgIzITI+AjURNC4CIwcyHgIVFA4CIyIuAjU0PgIzFTIeAhUUDgIjIi4CNTQ+AjMnMh4CFRQOAiMiLgI1ND4CMxUyHgIVFA4CIyIuAjU0PgIzJzIeAhUUDgIjIi4CNTQ+AjMVMh4CFRQOAiMiLgI1ND4CMwMiLgI1ND4CMzIeAhUUDgIjJQYmKgEjLgMxMA4CByoCJiMuAycuAzU0PgEWMx4DFx4DFx4DFx4BMjY3PgM1PAIUMTM0MDIUMSMwHAIVHAEeARceATIWMzIWOgEzOgI2Mz4DNz4DNz4DMTA+Ajc+AR4BBw4DBw4DBw4DIxciLgI1ND4CMzIeAhUUDgIj8wQHCQUFCQYEBAYJBQUJBwQCUgQGCQYFCQYEBAYJBQYJBgQO/ZIdMycWFiczHQJuHTQmFhYmNB3JCA4KBgYKDggHDgoGBgoOBwgOCgYGCg4IBw4KBgYKDgdwCA4KBgYKDggIDQsGBgsNCAgOCgYGCg4ICA0LBgYLDQh0CA0LBgYLDQgIDgoGBgoOCAgNCwYGCw0ICA4KBgYKDgiwDxwUDAwUHA8QHBQMDBQcEAG1DyIhHQgICwYDBAoRDg0eGhYFGCUbEwYHHB0WBwkKBQ4bFQ8CBQoLDAYHEBAPCAcVFBIEBQUDAVcBAQIEBAEDAgMCAQcJCwYGCwsKBQkRDQkCDBUSDgYGCgcEBgkMBwUTEQkDBAYFBgICCw8PBhMuLCUJnhAcFAwMFBwQDxsVDAwVGw/PBQkHBAQHCQUFCQYEBAYJBQUJBwQEBwkFBQkGBAQGCQUCtRYmMh39jh0yJhYWJjIdAnIdMiYW4QULDQgIDQoGBgoNCAgNCwWBBgoNCAgNCwUFCw0ICA0KBoEFCw0ICA0KBgYKDQgIDQsFgQYKDQgIDQsFBQsNCAgNCgaBBQsNCAgNCgYGCg0ICA0LBYEGCg0ICA0LBQULDQgIDQoG/mIMFBsQDxsVCwsVGw8QGxQMqQEBAQUIBQUHBgEBAQ0UGA0NXmhVBQUEAgEBCRAUDB0zLSUOEhUKAwEBAQIDAgUEBAIDAgEBAQEBAQIBAgQFBAMBAQEBAgIOEQ8EH1ZVRAwMEAkDBAQEAQECAgkLChISFAwLOENEFkFDHQGoCxQbEA8bFAwMFBsPEBsUCwAAAAABAAAAAQAAkKtPM18PPPUACwQAAAAAAM69BaYAAAAAzr0FpgAA//wDxAOEAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAPAPEAAEAAAAAAAAAAAAAAAAAAAADAAAAAAIAAAAEAAA8AAAAAAAKAeAAAQAAAAMBdQAMAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABABQAAAABAAAAAAACAA4AXAABAAAAAAADABQAKgABAAAAAAAEABQAagABAAAAAAAFABYAFAABAAAAAAAGAAoAPgABAAAAAAAKACgAfgADAAEECQABABQAAAADAAEECQACAA4AXAADAAEECQADABQAKgADAAEECQAEABQAagADAAEECQAFABYAFAADAAEECQAGABQASAADAAEECQAKACgAfgBlAGMAdwBpAGQALQBsAG8AZwBvAFYAZQByAHMAaQBvAG4AIAAwAC4AMABlAGMAdwBpAGQALQBsAG8AZwBvZWN3aWQtbG9nbwBlAGMAdwBpAGQALQBsAG8AZwBvAFIAZQBnAHUAbABhAHIAZQBjAHcAaQBkAC0AbABvAGcAbwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'),
8
+ url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAdwAAsAAAAAByQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDrANgWNtYXAAAAFoAAAAPAAAADwAoABGZ2FzcAAAAaQAAAAIAAAACAAAABBnbHlmAAABrAAAA8AAAAPAdbPmF2hlYWQAAAVsAAAANgAAADYAXU/JaGhlYQAABaQAAAAkAAAAJAeGBABobXR4AAAFyAAAAAwAAAAMBgAAPGxvY2EAAAXUAAAACAAAAAgACgHgbWF4cAAABdwAAAAgAAAAIAAQAXduYW1lAAAF/AAAAVQAAAFUQ8EQl3Bvc3QAAAdQAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAgAFcDwP/A/8ADwABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAAoAAAABgAEAAEAAgAgAFf//wAAACAAV////+H/qwABAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAAMADz//APEA4QAFAApAEIAVwBsAIEAlgCrAMAA1QFfAXQAADcUDgIjIi4CNTQ+AjMyHgIVIRQOAiMiLgI1ND4CMzIeAhUDISIOAhURFB4CMyEyPgI1ETQuAiMHMh4CFRQOAiMiLgI1ND4CMxUyHgIVFA4CIyIuAjU0PgIzJzIeAhUUDgIjIi4CNTQ+AjMVMh4CFRQOAiMiLgI1ND4CMycyHgIVFA4CIyIuAjU0PgIzFTIeAhUUDgIjIi4CNTQ+AjMDIi4CNTQ+AjMyHgIVFA4CIyUGJioBIy4DMTAOAgcqAiYjLgMnLgM1ND4BFjMeAxceAxceAxceATI2Nz4DNTwCFDEzNDAyFDEjMBwCFRwBHgEXHgEyFjMyFjoBMzoCNjM+Azc+Azc+AzEwPgI3PgEeAQcOAwcOAwcOAyMXIi4CNTQ+AjMyHgIVFA4CI/MEBwkFBQkGBAQGCQUFCQcEAlIEBgkGBQkGBAQGCQUGCQYEDv2SHTMnFhYnMx0Cbh00JhYWJjQdyQgOCgYGCg4IBw4KBgYKDgcIDgoGBgoOCAcOCgYGCg4HcAgOCgYGCg4ICA0LBgYLDQgIDgoGBgoOCAgNCwYGCw0IdAgNCwYGCw0ICA4KBgYKDggIDQsGBgsNCAgOCgYGCg4IsA8cFAwMFBwPEBwUDAwUHBABtQ8iIR0ICAsGAwQKEQ4NHhoWBRglGxMGBxwdFgcJCgUOGxUPAgUKCwwGBxAQDwgHFRQSBAUFAwFXAQECBAQBAwIDAgEHCQsGBgsLCgUJEQ0JAgwVEg4GBgoHBAYJDAcFExEJAwQGBQYCAgsPDwYTLiwlCZ4QHBQMDBQcEA8bFQwMFRsPzwUJBwQEBwkFBQkGBAQGCQUFCQcEBAcJBQUJBgQEBgkFArUWJjId/Y4dMiYWFiYyHQJyHTImFuEFCw0ICA0KBgYKDQgIDQsFgQYKDQgIDQsFBQsNCAgNCgaBBQsNCAgNCgYGCg0ICA0LBYEGCg0ICA0LBQULDQgIDQoGgQULDQgIDQoGBgoNCAgNCwWBBgoNCAgNCwUFCw0ICA0KBv5iDBQbEA8bFQsLFRsPEBsUDKkBAQEFCAUFBwYBAQENFBgNDV5oVQUFBAIBAQkQFAwdMy0lDhIVCgMBAQECAwIFBAQCAwIBAQEBAQECAQIEBQQDAQEBAQICDhEPBB9WVUQMDBAJAwQEBAEBAgIJCwoSEhQMCzhDRBZBQx0BqAsUGxAPGxQMDBQbDxAbFAsAAAAAAQAAAAEAAJCrTzNfDzz1AAsEAAAAAADOvQWmAAAAAM69BaYAAP/8A8QDhAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAADwDxAABAAAAAAAAAAAAAAAAAAAAAwAAAAACAAAABAAAPAAAAAAACgHgAAEAAAADAXUADAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAUAAAAAQAAAAAAAgAOAFwAAQAAAAAAAwAUACoAAQAAAAAABAAUAGoAAQAAAAAABQAWABQAAQAAAAAABgAKAD4AAQAAAAAACgAoAH4AAwABBAkAAQAUAAAAAwABBAkAAgAOAFwAAwABBAkAAwAUACoAAwABBAkABAAUAGoAAwABBAkABQAWABQAAwABBAkABgAUAEgAAwABBAkACgAoAH4AZQBjAHcAaQBkAC0AbABvAGcAbwBWAGUAcgBzAGkAbwBuACAAMAAuADAAZQBjAHcAaQBkAC0AbABvAGcAb2Vjd2lkLWxvZ28AZQBjAHcAaQBkAC0AbABvAGcAbwBSAGUAZwB1AGwAYQByAGUAYwB3AGkAZAAtAGwAbwBnAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('woff');
9
+ font-weight: normal;
10
+ font-style: normal;
11
+ }
12
+
13
+ #adminmenu #toplevel_page_ecwid div.wp-menu-image:before {
14
+ font-family: 'ecwid-logo' !important;
15
+ content: 'W';
16
+ -webkit-font-smoothing: antialiased;
17
+ -moz-osx-font-smoothing: grayscale;
18
+ }
19
+
20
+ #adminmenu #toplevel_page_ecwid div.wp-menu-image {
21
+ margin: 0px;
22
+ width: 34px;
23
+ height: 30px;
24
+ }
25
+
26
+ #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon.ecwid-top-menu-item {
27
+ font: 400 20px/1 'ecwid-logo' !important;
28
+ -webkit-font-smoothing: antialiased;
29
+ -moz-osx-font-smoothing: grayscale;
30
+ background-image: none;
31
+ color: white;
32
+ width: auto;
33
+ margin-right: 0px;
34
+ margin-top: 2px;
35
+ }
36
+
37
+ #wpadminbar #wp-admin-bar-ecwid-main .ab-icon.ecwid-top-menu-item:before {
38
+ content: 'W';
39
+ width: auto;
40
+ margin-right: 0px;
41
+ }
42
+
43
+ @media screen and (max-width: 782px) {
44
+ #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon.ecwid-top-menu-item {
45
+ font: 400 32px/46px 'ecwid-logo' !important;
46
+ width: 46px;
47
+ padding: 0px 2px;
48
+ text-align: center;
49
+ margin-top: 0px;
50
+ }
51
+ }
css/admin.css CHANGED
@@ -1,4 +1,5 @@
1
  #wpadminbar .ecwid-top-menu-item {
 
2
  width: 23px;
3
  height: 28px;
4
  background: url(../images/icon-head-default.png) no-repeat 0% 2px;
@@ -36,4 +37,8 @@
36
 
37
  #hide-vote-message.hiding {
38
  cursor: wait;
 
 
 
 
39
  }
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;
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
  }
css/settings.3.8.css ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ .ecwid-settings.advanced-settings input,
33
+ .ecwid-settings.advanced-settings select {
34
+ width: 200px;
35
+ height: 30px;
36
+ margin-right: 15px;
37
+ font-size: 13px;
38
+ border-color: #cacaca;
39
+ }
40
+
41
+ .pure-form.ecwid-settings.general-settings .pure-button-secondary,
42
+ .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover
43
+ {
44
+ color: #0074a2;
45
+ }
46
+
47
+ .pure-form.ecwid-settings.general-settings .pure-button-secondary:hover,
48
+ .pure-form.ecwid-settings a.pure-button:not(.pure-button-primary):hover
49
+ {
50
+ border-color: #0074a2;
51
+ }
52
+
53
+ .ecwid-settings.general-settings button {
54
+ top: 1px;
55
+ padding: 2px 10px 1px;
56
+ height: 32px;
57
+ }
58
+
59
+ .ecwid-pb-view-size .ruler {
60
+ background: #cacaca;
61
+ }
css/settings.css CHANGED
@@ -1,389 +1,407 @@
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
- /* 2.8 compatibility for left menu icon */
51
- .wp-menu-image>a>img {
52
- display: none;
53
- }
54
-
55
- .ecwid-settings {
56
- width: 650px;
57
- }
58
-
59
- .ecwid-settings .pure-control-group {
60
- margin-bottom: 19px;
61
- }
62
-
63
- .ecwid-settings legend {
64
- margin-bottom: 10px;
65
- }
66
-
67
- .ecwid-settings hr {
68
- margin-left: 0px;
69
- border: 0px none;
70
- height: 1px;
71
- background: #e5e5e5;
72
- margin-bottom: 20px;
73
- }
74
-
75
- .pure-form.ecwid-settings .pure-control-group label {
76
- width: 232px;
77
- font-weight: bold;
78
- text-align: left;
79
- margin-right: 5px;
80
- }
81
-
82
- .ecwid-settings.general-settings button {
83
- position: relative;
84
- top: 2px;
85
- padding: 5px 31px 5px 31px;
86
- margin-left: 5px;
87
- }
88
-
89
- .ecwid-settings.general-settings hr {
90
- margin-bottom: 6px;
91
- }
92
-
93
- .ecwid-settings .warning {
94
- background: #FFF797;
95
- font-size: 12px;
96
- padding: 8px 14px 8px 14px;
97
- font-weight: bold;
98
- color: #444444;
99
- }
100
-
101
- .ecwid-settings.appearance-settings h3 {
102
- font-size: 12px;
103
- }
104
-
105
- .ecwid-settings.appearance-settings input[type=text] {
106
- font-size: 13px;
107
- padding: 5px 3px 4px 3px;
108
- outline: 1px solid white;
109
- outline-offset: 0px;
110
- }
111
-
112
- .ecwid-settings input[type=text].number {
113
- width: 27px;
114
- text-align: center;
115
- }
116
-
117
- .ecwid-settings select {
118
- padding: 5px;
119
- }
120
-
121
- .ecwid-settings .note.pb-note {
122
- margin-right: 30px;
123
- margin-left: 30px;
124
- }
125
-
126
- .ecwid-settings.appearance-settings {
127
- max-width: 650px;
128
- }
129
-
130
- .ecwid-settings.appearance-settings .products-per-page-label {
131
- padding-top: 5px;
132
- padding-bottom: 15px;
133
- display: block;
134
- }
135
-
136
- .ecwid-settings.appearance-settings input[type=checkbox] {
137
- margin-right: 3px;
138
- margin-left: 7px;
139
- }
140
-
141
- .ecwid-pb-view-size {
142
- display: inline-block;
143
- position: relative;
144
- width: 153px;
145
- height: 153px;
146
- margin-left: 30px;
147
- margin-right: 25px;
148
- }
149
-
150
- .ecwid-pb-view-size .title {
151
- margin: 8px;
152
- width: 110px;
153
- text-align: center;
154
- }
155
-
156
- .ecwid-pb-view-size * {
157
- transition: background-image .3s, border-color .3s, font-weight .3s;
158
- }
159
-
160
- .ecwid-pb-view-size.grid .main-area {
161
- background-image: url(../images/grid-default.png);
162
- }
163
-
164
- .ecwid-pb-view-size.list .main-area {
165
- background-image: url(../images/list-default.png);
166
- }
167
-
168
- .ecwid-pb-view-size.table .main-area {
169
- background-image: url(../images/table-default.png);
170
- }
171
-
172
- .ecwid-pb-view-size .main-area {
173
- width: 116px;
174
- height: 82px;
175
- border: 2px solid #d1eef6;
176
- border-radius: 2px;
177
- float: left;
178
- background-position: 50% 50%;
179
- background-repeat: no-repeat;
180
- }
181
-
182
- .ecwid-pb-view-size .right {
183
- height:86px;
184
- float: right;
185
- position: relative;
186
- }
187
-
188
- .ecwid-pb-view-size .right input
189
- {
190
- margin-top: 30px;
191
- }
192
-
193
- .ecwid-pb-view-size .bottom input
194
- {
195
- margin-left: 48px;
196
- }
197
-
198
- .ecwid-pb-view-size .bottom {
199
- width: 120px;
200
- margin-top: 8px;
201
- position: absolute;
202
- top: 114px;
203
- }
204
-
205
- .ecwid-pb-view-size .ruler {
206
- position: absolute;
207
- background: #cccccc;
208
- z-index: -1;
209
- }
210
-
211
- .ecwid-pb-view-size .right .ruler {
212
- width: 1px;
213
- height: 100%;
214
- right: 13px;
215
- }
216
-
217
- .ecwid-pb-view-size .bottom .ruler {
218
- width: 100%;
219
- height: 1px;
220
- bottom: 12px;
221
- }
222
-
223
- .ecwid-settings.advanced-settings .pure-control-group {
224
- margin-bottom: 20px;
225
- }
226
-
227
- .ecwid-settings.advanced-settings .pure-control-group.last {
228
- margin-bottom: 0px;
229
- }
230
-
231
- .ecwid-settings.advanced-settings input,
232
- .ecwid-settings.advanced-settings select
233
- {
234
- width: 160px;
235
- height: 25px;
236
- margin-right: 15px;
237
- }
238
-
239
- .ecwid-settings.advanced-settings .note {
240
- margin-top: 15px;
241
- }
242
-
243
- .ecwid-settings .note.inline-note {
244
- max-width: 300px;
245
- margin-left: 15px;
246
- vertical-align: middle;
247
- }
248
-
249
- .general-settings {
250
- font-size: 14px;
251
- max-width: 750px;
252
- }
253
-
254
- .general-settings .greeting-box {
255
- background: url(../images/store_inprogress.png);
256
- background-repeat: no-repeat;
257
- background-position: 18px 3px;
258
- height: 141px;
259
- padding-left: 190px;
260
- padding-bottom: 12px;
261
- display: table-cell;
262
- vertical-align: middle;
263
- }
264
-
265
- .general-settings .greeting-box.complete {
266
- background-image: url(../images/store_ready.png);
267
- height: 141px;
268
- }
269
-
270
- .general-settings .greeting-box .main-message {
271
- font-size: 22px;
272
- font-weight: bold;
273
- line-height: 22px;
274
- }
275
-
276
- .general-settings .greeting-box .secondary-message {
277
- font-size: 18px;
278
- padding-top: 6px;
279
- line-height: 20px;
280
- }
281
-
282
- .general-settings ol {
283
- margin-top: 30px;
284
- padding-left: 10px;
285
- list-style-position: inside;
286
- }
287
-
288
- .general-settings ol li {
289
- font-size: 20px;
290
- margin-bottom: 34px;
291
- font-weight: bold;
292
- padding-top: 10px;
293
- }
294
-
295
- .general-settings ol li * {
296
- color: #333333;
297
- font-size:13px;
298
- font-weight: normal;
299
- }
300
-
301
- .general-settings ol li h4 {
302
- font-size: 20px;
303
- font-weight: bold;
304
- margin: 0px 0px 12px;
305
- display: inline-block;
306
- }
307
-
308
- .general-settings .ecwid-account-buttons .pure-button {
309
- margin: 20px 17px 20px 0px;
310
- }
311
-
312
- .general-settings p.note {
313
- font-weight: bold;
314
- }
315
-
316
- .ecwid-settings .note {
317
- font-size: 11px;
318
- color: #A0A0A0;
319
- display: inline-block;
320
- line-height: 16px;
321
- }
322
-
323
-
324
- .general-settings input[type=text] {
325
- height: 34px;
326
- font-size: 14px;
327
- }
328
-
329
- .general-settings .find-store-id-in-cp {
330
- line-height: 18px;
331
- margin-bottom: 15px;
332
- }
333
-
334
- .general-settings .find-store-id-in-cp em {
335
- color: #246fba;
336
- font-style: normal;
337
- }
338
-
339
- .general-settings #ecwid_store_id {
340
- position: relative;
341
- top: 2px;
342
- width: 153px;
343
- }
344
-
345
- .general-settings .section {
346
- line-height: 24px;
347
- height: 80px;
348
- display: table;
349
- vertical-align: middle;
350
- width: 640px;
351
- }
352
-
353
- .general-settings .section .left {
354
- display: table-cell;
355
- vertical-align: middle;
356
- }
357
-
358
- .general-settings .section .right {
359
- display: table-cell;
360
- vertical-align: middle;
361
- text-align: right;
362
- }
363
-
364
- .general-settings .section.small-text {
365
- line-height: normal;
366
- }
367
-
368
-
369
- .general-settings .section .left-section {
370
- float: left;
371
- }
372
-
373
- .general-settings .section .main-info {
374
- font-size: 18px;
375
- }
376
-
377
- .general-settings .section .secondary-info {
378
- font-size: 12px;
379
- line-height: 20px;
380
- }
381
-
382
- .ecwid-settings .note.grayed-links,
383
- .ecwid-settings .note.grayed-links a:not(:hover)
384
- {
385
- font-size: 11px;
386
- color: #A0A0A0;
387
- margin-top:10px;
388
- margin-bottom: 10px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  }
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
+ /* 2.8 compatibility for left menu icon */
51
+ .wp-menu-image>a>img {
52
+ display: none;
53
+ }
54
+
55
+ .ecwid-settings {
56
+ width: 650px;
57
+ }
58
+
59
+ .ecwid-settings .pure-control-group {
60
+ margin-bottom: 19px;
61
+ }
62
+
63
+ .ecwid-settings legend {
64
+ margin-bottom: 10px;
65
+ }
66
+
67
+ .ecwid-settings hr {
68
+ margin-left: 0px;
69
+ border: 0px none;
70
+ height: 1px;
71
+ background: #e5e5e5;
72
+ margin-bottom: 20px;
73
+ }
74
+
75
+ .pure-form.ecwid-settings .pure-control-group label {
76
+ width: 232px;
77
+ font-weight: bold;
78
+ text-align: left;
79
+ margin-right: 5px;
80
+ }
81
+
82
+ .ecwid-settings.general-settings button {
83
+ position: relative;
84
+ top: 2px;
85
+ padding: 5px 31px 5px 31px;
86
+ margin-left: 5px;
87
+ }
88
+
89
+ .ecwid-settings.general-settings hr {
90
+ margin-bottom: 6px;
91
+ }
92
+
93
+ .ecwid-settings .warning {
94
+ background: #FFF797;
95
+ font-size: 12px;
96
+ padding: 8px 14px 8px 14px;
97
+ font-weight: bold;
98
+ color: #444444;
99
+ }
100
+
101
+ .ecwid-settings.appearance-settings h3 {
102
+ font-size: 12px;
103
+ }
104
+
105
+ .ecwid-settings.appearance-settings input[type=text] {
106
+ font-size: 13px;
107
+ padding: 5px 3px 4px 3px;
108
+ outline-offset: 0px;
109
+ }
110
+
111
+ .ecwid-settings input[type=text].number {
112
+ width: 27px;
113
+ text-align: center;
114
+ }
115
+
116
+ .ecwid-settings select {
117
+ padding: 5px;
118
+ }
119
+
120
+ .ecwid-settings .note.pb-note {
121
+ margin-right: 30px;
122
+ margin-left: 30px;
123
+ }
124
+
125
+ .ecwid-settings.appearance-settings {
126
+ max-width: 650px;
127
+ }
128
+
129
+ .ecwid-settings.appearance-settings .products-per-page-label {
130
+ padding-top: 5px;
131
+ padding-bottom: 15px;
132
+ display: block;
133
+ }
134
+
135
+ .ecwid-settings.appearance-settings input[type=checkbox] {
136
+ margin-right: 3px;
137
+ margin-left: 7px;
138
+ }
139
+
140
+ .ecwid-pb-view-size {
141
+ display: inline-block;
142
+ position: relative;
143
+ width: 153px;
144
+ height: 153px;
145
+ margin-left: 30px;
146
+ margin-right: 25px;
147
+ }
148
+
149
+ .ecwid-pb-view-size .title {
150
+ margin: 8px;
151
+ width: 110px;
152
+ text-align: center;
153
+ }
154
+
155
+ .ecwid-pb-view-size * {
156
+ transition: background-image .3s, border-color .3s, font-weight .3s;
157
+ }
158
+
159
+
160
+ .ecwid-pb-view-size .main-area {
161
+ width: 116px;
162
+ height: 82px;
163
+ border: 2px solid rgb(125, 209, 227);
164
+ border-color: rgba(125, 209, 227, .5);
165
+ border-radius: 2px;
166
+ float: left;
167
+ background-position: 50% 50%;
168
+ background-repeat: no-repeat;
169
+ text-align: center;
170
+ }
171
+
172
+ .ecwid-pb-view-size .main-area svg {
173
+ margin-top: 7px;
174
+ }
175
+
176
+ .ecwid-pb-view-size .main-area path,
177
+ .ecwid-pb-view-size .main-area rect {
178
+ fill: rgb(125, 209, 227);
179
+ }
180
+
181
+ .ecwid-pb-view-size .fallback-image {
182
+ width: 100px;
183
+ height: 66px;
184
+ background-repeat: no-repeat;
185
+ margin-top:7px;
186
+ margin-left:8px;
187
+ }
188
+
189
+ .ecwid-pb-view-size .grid-image {
190
+ background-image: url(../images/grid.png);
191
+ }
192
+
193
+ .ecwid-pb-view-size .list-image {
194
+ background-image: url(../images/list.png);
195
+ }
196
+
197
+ .ecwid-pb-view-size .table-image {
198
+ background-image: url(../images/table.png);
199
+ }
200
+
201
+ .ecwid-pb-view-size .right {
202
+ height:86px;
203
+ float: right;
204
+ position: relative;
205
+ }
206
+
207
+ .ecwid-pb-view-size .right input
208
+ {
209
+ margin-top: 30px;
210
+ }
211
+
212
+ .ecwid-pb-view-size .bottom input
213
+ {
214
+ margin-left: 48px;
215
+ }
216
+
217
+ .ecwid-pb-view-size .bottom {
218
+ width: 120px;
219
+ margin-top: 8px;
220
+ position: absolute;
221
+ top: 114px;
222
+ }
223
+
224
+ .ecwid-pb-view-size .ruler {
225
+ position: absolute;
226
+ background: #cccccc;
227
+ z-index: -1;
228
+ }
229
+
230
+ .ecwid-pb-view-size .right .ruler {
231
+ width: 1px;
232
+ height: 100%;
233
+ right: 13px;
234
+ }
235
+
236
+ .ecwid-pb-view-size .bottom .ruler {
237
+ width: 100%;
238
+ height: 1px;
239
+ bottom: 12px;
240
+ }
241
+
242
+ .ecwid-settings.advanced-settings .pure-control-group {
243
+ margin-bottom: 20px;
244
+ }
245
+
246
+ .ecwid-settings.advanced-settings .pure-control-group.last {
247
+ margin-bottom: 0px;
248
+ }
249
+
250
+ .ecwid-settings.advanced-settings input,
251
+ .ecwid-settings.advanced-settings select
252
+ {
253
+ width: 160px;
254
+ height: 25px;
255
+ margin-right: 15px;
256
+ }
257
+
258
+ .ecwid-settings.advanced-settings .note {
259
+ margin-top: 15px;
260
+ }
261
+
262
+ .ecwid-settings .note.inline-note {
263
+ max-width: 300px;
264
+ margin-left: 15px;
265
+ vertical-align: middle;
266
+ }
267
+
268
+ .general-settings {
269
+ font-size: 14px;
270
+ max-width: 750px;
271
+ }
272
+
273
+ .general-settings .greeting-box {
274
+ height: 141px;
275
+ padding-left: 190px;
276
+ padding-bottom: 12px;
277
+ display: table-cell;
278
+ vertical-align: middle;
279
+ position: relative;
280
+ }
281
+
282
+ .general-settings .greeting-image {
283
+ position: absolute;
284
+ left: 14px;
285
+ top: 0px;
286
+ }
287
+
288
+ .general-settings .greeting-box .main-message {
289
+ font-size: 22px;
290
+ font-weight: bold;
291
+ line-height: 22px;
292
+ }
293
+
294
+ .general-settings .greeting-box .secondary-message {
295
+ font-size: 18px;
296
+ padding-top: 6px;
297
+ line-height: 20px;
298
+ }
299
+
300
+ .general-settings ol {
301
+ margin-top: 30px;
302
+ padding-left: 10px;
303
+ list-style-position: inside;
304
+ }
305
+
306
+ .general-settings ol li {
307
+ font-size: 20px;
308
+ margin-bottom: 34px;
309
+ font-weight: bold;
310
+ padding-top: 10px;
311
+ }
312
+
313
+ .general-settings ol li * {
314
+ color: #333333;
315
+ font-size:13px;
316
+ font-weight: normal;
317
+ }
318
+
319
+ .general-settings ol li h4 {
320
+ font-size: 20px;
321
+ font-weight: bold;
322
+ margin: 0px 0px 12px;
323
+ display: inline-block;
324
+ }
325
+
326
+ .general-settings .ecwid-account-buttons .pure-button {
327
+ margin: 20px 17px 20px 0px;
328
+ }
329
+
330
+ .general-settings p.note {
331
+ font-weight: bold;
332
+ }
333
+
334
+ .ecwid-settings .note {
335
+ font-size: 11px;
336
+ color: #A0A0A0;
337
+ display: inline-block;
338
+ line-height: 16px;
339
+ }
340
+
341
+
342
+ .general-settings input[type=text] {
343
+ height: 34px;
344
+ font-size: 14px;
345
+ }
346
+
347
+ .general-settings .find-store-id-in-cp {
348
+ line-height: 18px;
349
+ margin-bottom: 15px;
350
+ }
351
+
352
+ .general-settings .find-store-id-in-cp em {
353
+ color: #246fba;
354
+ font-style: normal;
355
+ }
356
+
357
+ .general-settings #ecwid_store_id {
358
+ position: relative;
359
+ top: 2px;
360
+ width: 153px;
361
+ }
362
+
363
+ .general-settings .section {
364
+ line-height: 24px;
365
+ height: 80px;
366
+ display: table;
367
+ vertical-align: middle;
368
+ width: 640px;
369
+ }
370
+
371
+ .general-settings .section .left {
372
+ display: table-cell;
373
+ vertical-align: middle;
374
+ }
375
+
376
+ .general-settings .section .right {
377
+ display: table-cell;
378
+ vertical-align: middle;
379
+ text-align: right;
380
+ }
381
+
382
+ .general-settings .section.small-text {
383
+ line-height: normal;
384
+ }
385
+
386
+
387
+ .general-settings .section .left-section {
388
+ float: left;
389
+ }
390
+
391
+ .general-settings .section .main-info {
392
+ font-size: 18px;
393
+ }
394
+
395
+ .general-settings .section .secondary-info {
396
+ font-size: 12px;
397
+ line-height: 20px;
398
+ }
399
+
400
+ .ecwid-settings .note.grayed-links,
401
+ .ecwid-settings .note.grayed-links a:not(:hover)
402
+ {
403
+ font-size: 11px;
404
+ color: #A0A0A0;
405
+ margin-top:10px;
406
+ margin-bottom: 10px;
407
  }
ecwid-shopping-cart.php CHANGED
@@ -1,1227 +1,1305 @@
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: 2.1
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
-
15
- define("APP_ECWID_COM", "app.ecwid.com");
16
- define("ECWID_DEMO_STORE_ID", 1003);
17
-
18
- if ( ! defined( 'ECWID_PLUGIN_DIR' ) ) {
19
- define( 'ECWID_PLUGIN_DIR', plugin_dir_path( realpath(__FILE__) ) );
20
- }
21
-
22
- if ( ! defined( 'ECWID_PLUGIN_URL' ) ) {
23
- define( 'ECWID_PLUGIN_URL', plugin_dir_url( realpath(__FILE__) ) );
24
- }
25
-
26
- if ( is_admin() ){
27
- add_action('admin_init', 'ecwid_settings_api_init');
28
- add_action('admin_notices', 'ecwid_show_admin_messages');
29
- add_action('admin_menu', 'ecwid_options_add_page');
30
- add_action('wp_dashboard_setup', 'ecwid_add_dashboard_widgets' );
31
- add_action('admin_enqueue_scripts', 'ecwid_common_admin_scripts');
32
- add_action('admin_enqueue_scripts', 'ecwid_register_admin_styles');
33
- add_action('admin_enqueue_scripts', 'ecwid_register_settings_styles');
34
- add_action('wp_ajax_ecwid_hide_vote_message', 'ecwid_hide_vote_message');
35
- add_filter('plugins_loaded', 'ecwid_load_textdomain');
36
- add_filter('plugin_action_links_ecwid-shopping-cart/ecwid-shopping-cart.php', 'ecwid_plugin_actions');
37
-
38
- } else {
39
- add_shortcode('ecwid_script', 'ecwid_script_shortcode');
40
- add_shortcode('ecwid_minicart', 'ecwid_minicart_shortcode');
41
- add_shortcode('ecwid_searchbox', 'ecwid_searchbox_shortcode');
42
- add_shortcode('ecwid_categories', 'ecwid_categories_shortcode');
43
- add_shortcode('ecwid_productbrowser', 'ecwid_productbrowser_shortcode');
44
- add_action('init', 'ecwid_backward_compatibility');
45
- add_action('send_headers', 'ecwid_503_on_store_closed');
46
- add_action('template_redirect', 'ecwid_404_on_broken_escaped_fragment');
47
- add_action('wp_title', 'ecwid_seo_compatibility_init', 0);
48
- add_filter('wp_title', 'ecwid_seo_title', 20);
49
- add_action('plugins_loaded', 'ecwid_minifier_compatibility', 0);
50
- add_action('wp_head', 'ecwid_meta_description', 0);
51
- add_action('wp_head', 'ecwid_ajax_crawling_fragment');
52
- add_action('wp_head', 'ecwid_meta');
53
- add_action('wp_head', 'ecwid_seo_compatibility_restore', 1000);
54
- add_filter( 'widget_meta_poweredby', 'ecwid_add_credits');
55
- $ecwid_seo_title = '';
56
- }
57
- add_action('admin_bar_menu', 'add_ecwid_admin_bar_node', 1000);
58
-
59
- $version = get_bloginfo('version');
60
-
61
- if (version_compare($version, '3.6') < 0) {
62
- /**
63
- * A copy of has_shortcode functionality from wordpress 3.6
64
- * http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/shortcodes.php
65
- */
66
-
67
- if (!function_exists('shortcode_exists')) {
68
- function shortcode_exists( $tag ) {
69
- global $shortcode_tags;
70
- return array_key_exists( $tag, $shortcode_tags );
71
- }
72
- }
73
-
74
- if (!function_exists('has_shortcode')) {
75
- function has_shortcode( $content, $tag ) {
76
- if ( shortcode_exists( $tag ) ) {
77
- preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
78
- if ( empty( $matches ) )
79
- return false;
80
-
81
- foreach ( $matches as $shortcode ) {
82
- if ( $tag === $shortcode[2] ) {
83
- return true;
84
- }
85
- }
86
- }
87
- return false;
88
- }
89
- }
90
- }
91
-
92
- function ecwid_load_textdomain() {
93
- load_plugin_textdomain( 'ecwid-shopping-cart', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
94
-
95
- }
96
-
97
- function ecwid_404_on_broken_escaped_fragment() {
98
- if (!ecwid_is_api_enabled()) {
99
- return;
100
- }
101
-
102
- if (!isset($_GET['_escaped_fragment_'])) {
103
- return;
104
- }
105
-
106
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
107
- $api = ecwid_new_product_api();
108
-
109
- if (isset($params['mode']) && !empty($params['mode']) && isset($params['id'])) {
110
- $result = array();
111
- if ($params['mode'] == 'product') {
112
- $result = $api->get_product($params['id']);
113
- } elseif ($params['mode'] == 'category') {
114
- $result = $api->get_category($params['id']);
115
- }
116
- if (empty($result)) {
117
- global $wp_query;
118
-
119
- $wp_query->set_404();
120
- }
121
- }
122
- }
123
-
124
- function ecwid_503_on_store_closed() {
125
- if (!ecwid_is_api_enabled()) {
126
- return;
127
- }
128
-
129
- if (!isset($_GET['_escaped_fragment_'])) {
130
- return;
131
- }
132
-
133
- $api = ecwid_new_product_api();
134
- $profile = $api->get_profile();
135
-
136
- if ($profile['closed']) {
137
- header('HTTP/1.1 503 Service Temporarily Unavailable');
138
- header('Status: 503 Service Temporarily Unavailable');
139
- }
140
- }
141
-
142
- function ecwid_backward_compatibility() {
143
- // Backward compatibility with 1.1.2 and earlier
144
- if (isset($_GET['ecwid_product_id']) || isset($_GET['ecwid_category_id'])) {
145
- $ecwid_page = get_option("ecwid_store_page_id");
146
- $ecwid_page = get_page_link($ecwid_page);
147
- $ecwid_page .= '#!/~/';
148
-
149
- if (isset($_GET['ecwid_product_id']))
150
- $redirect = $ecwid_page . 'product/id=' . $_GET['ecwid_product_id'];
151
- elseif (isset($_GET['ecwid_category_id']))
152
- $redirect = $ecwid_page . 'category/id=' . $_GET['ecwid_category_id'];
153
-
154
- wp_redirect($redirect, 301);
155
- exit();
156
- }
157
- }
158
-
159
- function ecwid_minifier_compatibility()
160
- {
161
- if ( !function_exists( 'get_plugins' ) ) { require_once ( ABSPATH . 'wp-admin/includes/plugin.php' ); }
162
-
163
- $plugins = get_plugins();
164
- $wp_minify_plugin = 'wp-minify/wp-minify.php';
165
- if (array_key_exists($wp_minify_plugin, $plugins) && is_plugin_active($wp_minify_plugin)) {
166
- global $wp_minify;
167
-
168
- if (is_object($wp_minify) && array_key_exists('default_exclude', get_object_vars($wp_minify)) && is_array($wp_minify->default_exclude)) {
169
- $wp_minify->default_exclude[] = 'ecwid.com/script.js';
170
- }
171
- }
172
- }
173
-
174
- function ecwid_override_option($name, $new_value = null)
175
- {
176
- static $overridden = array();
177
-
178
- if (!array_key_exists($name, $overridden)) {
179
- $overridden[$name] = get_option($name);
180
- }
181
-
182
- if (!is_null($new_value)) {
183
- update_option($name, $new_value);
184
- } else {
185
- update_option($name, $overridden[$name]);
186
- }
187
- }
188
-
189
- function ecwid_seo_compatibility_init($title)
190
- {
191
- if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
192
- return $title;
193
- }
194
-
195
- // Default wordpress canonical
196
- remove_action( 'wp_head','rel_canonical');
197
-
198
- // Yoast Wordpress SEO
199
- global $wpseo_front;
200
- // Canonical
201
- remove_action( 'wpseo_head', array( $wpseo_front, 'canonical' ), 20);
202
- // Title
203
- remove_action( 'get_header', array( $wpseo_front, 'force_rewrite_output_buffer' ) );
204
- remove_action( 'wp_footer', array( $wpseo_front, 'flush_cache'));
205
- // Description
206
- remove_action( 'wpseo_head', array( $wpseo_front, 'metadesc' ), 10 );
207
-
208
- // Platinum SEO Pack
209
- // Canonical
210
- ecwid_override_option('psp_canonical', false);
211
- // Title
212
- ecwid_override_option('aiosp_rewrite_titles', false);
213
-
214
- // All in one SEO Pack
215
- global $aioseop_options, $aiosp;
216
- // Canonical
217
- $aioseop_options['aiosp_can'] = false;
218
- // Title
219
- add_filter('aioseop_title', __return_null);
220
- // Description
221
- add_filter('aioseop_description', __return_null);
222
-
223
-
224
- return $title;
225
-
226
- }
227
-
228
- function ecwid_seo_compatibility_restore()
229
- {
230
- if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
231
- return;
232
- }
233
-
234
- ecwid_override_option('psp_canonical');
235
- ecwid_override_option('aiosp_rewrite_titles');
236
- }
237
-
238
- function add_ecwid_admin_bar_node() {
239
- global $wp_admin_bar;
240
- if ( !is_super_admin() || !is_admin_bar_showing() )
241
- return;
242
-
243
- $wp_admin_bar->add_menu( array(
244
- 'id' => 'ecwid_main',
245
- 'title' => '<div class="ecwid-top-menu-item"></div>',
246
- ));
247
- $wp_admin_bar->add_menu(array(
248
- "id" => "ecwid_help",
249
- "title" => __("Get help", 'ecwid-shopping-cart'),
250
- "parent" => "ecwid_main",
251
- 'href' => 'http://help.ecwid.com'
252
- )
253
- );
254
- $wp_admin_bar->add_menu(array(
255
- "id" => "ecwid_home",
256
- "title" => __("Go to Ecwid site", 'ecwid-shopping-cart'),
257
- "parent" => "ecwid_main",
258
- 'href' => 'http://www.ecwid.com?source=wporg'
259
- )
260
- );
261
- $wp_admin_bar->add_menu(array(
262
- "id" => "ecwid_go_to_page",
263
- "title" => __("Visit storefront", 'ecwid-shopping-cart'),
264
- "parent" => "ecwid_main",
265
- 'href' => get_page_link(get_option("ecwid_store_page_id"))
266
- )
267
- );
268
- $wp_admin_bar->add_menu(array(
269
- "id" => "ecwid_control_panel",
270
- "title" => __("Manage my store", 'ecwid-shopping-cart'),
271
- "parent" => "ecwid_main",
272
- 'href' => 'https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard'
273
- )
274
- );
275
- $wp_admin_bar->add_menu(array(
276
- "id" => "ecwid_settings",
277
- "title" => __("Manage plugin settings", 'ecwid-shopping-cart'),
278
- "parent" => "ecwid_main",
279
- 'href' => admin_url('admin.php?page=ecwid')
280
- )
281
- );
282
- $wp_admin_bar->add_menu(array(
283
- "id" => "ecwid_fb_app",
284
- "title" => __("→ Sell on Facebook", 'ecwid-shopping-cart'),
285
- "parent" => "ecwid_main",
286
- 'href' => 'http://apps.facebook.com/ecwid-shop/?fb_source=wp'
287
- )
288
- );
289
- }
290
-
291
- function ecwid_page_has_productbrowser()
292
- {
293
- static $result = null;
294
-
295
- if (is_null($result)) {
296
- $post_content = get_post(get_the_ID())->post_content;
297
- $result = has_shortcode($post_content, 'ecwid_productbrowser');
298
- }
299
-
300
- return $result;
301
- }
302
-
303
- function ecwid_ajax_crawling_fragment() {
304
- $ecwid_page_id = get_option("ecwid_store_page_id");
305
- if (ecwid_is_api_enabled() && !isset($_GET['_escaped_fragment_']) && ecwid_page_has_productbrowser())
306
- echo '<meta name="fragment" content="!">' . PHP_EOL;
307
- }
308
-
309
- function ecwid_meta() {
310
-
311
- echo '<link rel="dns-prefetch" href="//images-cdn.ecwid.com/">' . PHP_EOL;
312
- echo '<link rel="dns-prefetch" href="//images.ecwid.com/">' . PHP_EOL;
313
- echo '<link rel="dns-prefetch" href="//app.ecwid.com/">' . PHP_EOL;
314
-
315
- if (!ecwid_page_has_productbrowser()) {
316
- $ecwid_page_id = get_option("ecwid_store_page_id");
317
- $page_url = get_page_link($ecwid_page_id);
318
- echo '<link rel="prefetch" href="' . $page_url . '" />' . PHP_EOL;
319
- echo '<link rel="prerender" href="' . $page_url . '" />' . PHP_EOL;
320
- }
321
- }
322
-
323
- function ecwid_meta_description() {
324
-
325
- $allowed = ecwid_is_api_enabled() && isset($_GET['_escaped_fragment_']);
326
- if (!$allowed) return;
327
-
328
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
329
- if (!$params) return;
330
-
331
- if (!in_array($params['mode'], array('category', 'product')) || !isset($params['id'])) return;
332
-
333
- $api = ecwid_new_product_api();
334
- if ($params['mode'] == 'product') {
335
- $product = $api->get_product($params['id']);
336
- $description = $product['description'];
337
- } elseif ($params['mode'] == 'category') {
338
- $category = $api->get_category($params['id']);
339
- $description = $category['description'];
340
- } else return;
341
-
342
- $description = strip_tags($description);
343
- $description = html_entity_decode($description, ENT_NOQUOTES, 'UTF-8');
344
-
345
- $description = preg_replace("![\\s]+!", " ", $description);
346
- $description = trim($description, " \t\xA0\n\r"); // Space, tab, non-breaking space, newline, carriage return
347
- $description = mb_substr($description, 0, 160);
348
- $description = htmlspecialchars($description, ENT_COMPAT | ENT_HTML401, 'UTF-8');
349
-
350
- echo <<<HTML
351
- <meta name="description" content="$description" />
352
- HTML;
353
- }
354
-
355
- function ecwid_hide_vote_message()
356
- {
357
- update_option('ecwid_show_vote_message', false);
358
- }
359
-
360
- function ecwid_get_product_and_category($category_id, $product_id) {
361
- $params = array
362
- (
363
- array("alias" => "c", "action" => "category", "params" => array("id" => $category_id)),
364
- array("alias" => "p", "action" => "product", "params" => array("id" => $product_id)),
365
- );
366
-
367
- $api = ecwid_new_product_api();
368
- $batch_result = $api->get_batch_request($params);
369
-
370
- $category = $batch_result["c"];
371
- $product = $batch_result["p"];
372
- $return = "";
373
-
374
- if (is_array($product)) {
375
- $return .=$product["name"];
376
- }
377
-
378
- if(is_array($category)) {
379
- $return.=" | ";
380
- $return .=$category["name"];
381
- }
382
- return $return;
383
- }
384
-
385
- function ecwid_seo_title($content) {
386
- if (isset($_GET['_escaped_fragment_']) && ecwid_is_api_enabled()) {
387
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
388
- $ecwid_seo_title = '';
389
-
390
- $api = ecwid_new_product_api();
391
-
392
- if (isset($params['mode']) && !empty($params['mode'])) {
393
- if ($params['mode'] == 'product') {
394
- if (isset($params['category']) && !empty($params['category'])){
395
- $ecwid_seo_title = ecwid_get_product_and_category($params['category'], $params['id']);
396
- } elseif (empty($params['category'])) {
397
- $ecwid_product = $api->get_product($params['id']);
398
- $ecwid_seo_title = $ecwid_product['name'];
399
- if(is_array($ecwid_product['categories'])){
400
- foreach ($ecwid_product['categories'] as $ecwid_category){
401
- if($ecwid_category['defaultCategory']==true){
402
- $ecwid_seo_title .=" | ";
403
- $ecwid_seo_title .= $ecwid_category['name'];
404
- }
405
- }
406
- }
407
- }
408
- }
409
-
410
- elseif ($params['mode'] == 'category'){
411
- $api = ecwid_new_product_api();
412
- $ecwid_category = $api->get_category($params['id']);
413
- $ecwid_seo_title = $ecwid_category['name'];
414
- }
415
- }
416
- if (!empty($ecwid_seo_title))
417
- return $ecwid_seo_title . " | " . $content;
418
- else
419
- return $content;
420
-
421
- } else {
422
- return $content;
423
- }
424
- }
425
-
426
- function ecwid_add_credits($powered_by)
427
- {
428
- if (!ecwid_is_paid_account()) {
429
-
430
- $new_powered_by = '<li>';
431
- $new_powered_by .= sprintf(
432
- __('Online store powered by <a %s>Ecwid</a>', 'ecwid-shopping-cart'),
433
- 'target="_blank" href="//www.ecwid.com?source=wporg"'
434
- );
435
- $new_powered_by .= '</li>';
436
-
437
- $powered_by .= $new_powered_by;
438
- }
439
-
440
- return $powered_by;
441
- }
442
-
443
- function ecwid_wrap_shortcode_content($content)
444
- {
445
- return "<!-- Ecwid shopping cart plugin v 2.1 --><div>$content</div><!-- END Ecwid Shopping Cart v 2.1 -->";
446
- }
447
-
448
- function ecwid_get_scriptjs_code() {
449
- if (!defined('ECWID_SCRIPTJS')) {
450
- $store_id = get_ecwid_store_id();
451
- $s = '<script type="text/javascript" data-cfasync="false" src="//' . APP_ECWID_COM . '/script.js?' . $store_id . '"></script>';
452
- define('ECWID_SCRIPTJS','Yep');
453
- $s = $s . ecwid_sso();
454
- return $s;
455
- } else {
456
- return '';
457
- }
458
- }
459
-
460
- function ecwid_script_shortcode() {
461
- return ecwid_wrap_shortcode_content(ecwid_get_scriptjs_code());
462
- }
463
-
464
- function ecwid_minicart_shortcode() {
465
-
466
- $ecwid_enable_minicart = get_option('ecwid_enable_minicart');
467
- $ecwid_show_categories = get_option('ecwid_show_categories');
468
- if (!empty($ecwid_enable_minicart) && !empty($ecwid_show_categories)) {
469
- $s = <<<EOT
470
- <script type="text/javascript"> xMinicart("style=","layout=attachToCategories"); </script>
471
- EOT;
472
- return ecwid_wrap_shortcode_content($s);
473
- } else {
474
- return "";
475
- }
476
- }
477
- function ecwid_searchbox_shortcode() {
478
- $ecwid_show_search_box = get_option('ecwid_show_search_box');
479
- if (!empty($ecwid_show_search_box)) {
480
- $s = <<<EOT
481
- <script type="text/javascript"> xSearchPanel("style="); </script>
482
- EOT;
483
- return ecwid_wrap_shortcode_content($s);
484
- } else {
485
- return "";
486
- }
487
- }
488
-
489
- function ecwid_categories_shortcode() {
490
- $ecwid_show_categories = get_option('ecwid_show_categories');
491
- if (!empty($ecwid_show_categories)) {
492
- $s = <<<EOT
493
- <script type="text/javascript"> xCategories("style="); </script>
494
- EOT;
495
- return ecwid_wrap_shortcode_content($s);
496
- } else {
497
- return "";
498
- }
499
- }
500
-
501
- function ecwid_parse_escaped_fragment($escaped_fragment) {
502
- $fragment = urldecode($escaped_fragment);
503
- $return = array();
504
-
505
- if (preg_match('/^(\/~\/)([a-z]+)\/(.*)$/', $fragment, $matches)) {
506
- parse_str($matches[3], $return);
507
- $return['mode'] = $matches[2];
508
- }
509
- return $return;
510
- }
511
-
512
- function ecwid_productbrowser_shortcode($shortcode_params) {
513
- global $ecwid_seo_product_title;
514
- $store_id = get_ecwid_store_id();
515
- $list_of_views = array('list','grid','table');
516
-
517
- $ecwid_pb_categoriesperrow = get_option('ecwid_pb_categoriesperrow');
518
- $ecwid_pb_productspercolumn_grid = get_option('ecwid_pb_productspercolumn_grid');
519
- $ecwid_pb_productsperrow_grid = get_option('ecwid_pb_productsperrow_grid');
520
- $ecwid_pb_productsperpage_list = get_option('ecwid_pb_productsperpage_list');
521
- $ecwid_pb_productsperpage_table = get_option('ecwid_pb_productsperpage_table');
522
- $ecwid_pb_defaultview = get_option('ecwid_pb_defaultview');
523
- $ecwid_pb_searchview = get_option('ecwid_pb_searchview');
524
-
525
- $ecwid_mobile_catalog_link = get_option('ecwid_mobile_catalog_link');
526
- $ecwid_default_category_id =
527
- !empty($shortcode_params) && array_key_exists('default_category_id', $shortcode_params)
528
- ? $shortcode_params['default_category_id']
529
- : get_option('ecwid_default_category_id');
530
-
531
- if (empty($ecwid_pb_categoriesperrow)) {
532
- $ecwid_pb_categoriesperrow = 3;
533
- }
534
- if (empty($ecwid_pb_productspercolumn_grid)) {
535
- $ecwid_pb_productspercolumn_grid = 3;
536
- }
537
- if (empty($ecwid_pb_productsperrow_grid)) {
538
- $ecwid_pb_productsperrow_grid = 3;
539
- }
540
- if (empty($ecwid_pb_productsperpage_list)) {
541
- $ecwid_pb_productsperpage_list = 10;
542
- }
543
- if (empty($ecwid_pb_productsperpage_table)) {
544
- $ecwid_pb_productsperpage_table = 20;
545
- }
546
-
547
- if (empty($ecwid_pb_defaultview) || !in_array($ecwid_pb_defaultview, $list_of_views)) {
548
- $ecwid_pb_defaultview = 'grid';
549
- }
550
- if (empty($ecwid_pb_searchview) || !in_array($ecwid_pb_searchview, $list_of_views)) {
551
- $ecwid_pb_searchview = 'list';
552
- }
553
-
554
- if (empty($ecwid_mobile_catalog_link)) {
555
- $ecwid_mobile_catalog_link = "http://" . APP_ECWID_COM . "/jsp/{$store_id}/catalog";
556
- }
557
-
558
- if (empty($ecwid_default_category_id)) {
559
- $ecwid_default_category_str = '';
560
- } else {
561
- $ecwid_default_category_str = ',"defaultCategoryId='. $ecwid_default_category_id .'"';
562
- }
563
-
564
- $ecwid_open_product = '';
565
- $plain_content = '';
566
-
567
- if (ecwid_can_display_html_catalog()) {
568
- $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
569
- include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
570
- include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/EcwidCatalog.php';
571
-
572
- $page_url = get_page_link();
573
-
574
- $catalog = new EcwidCatalog($store_id, $page_url);
575
-
576
- if (isset($params['mode']) && !empty($params['mode'])) {
577
- if ($params['mode'] == 'product') {
578
- $plain_content = $catalog->get_product($params['id']);
579
- $plain_content .= '<script type="text/javascript"> if (!document.location.hash) document.location.hash = "!/~/product/id='. intval($params['id']) .'";</script>';
580
- } elseif ($params['mode'] == 'category') {
581
- $plain_content = $catalog->get_category($params['id']);
582
- $ecwid_default_category_str = ',"defaultCategoryId=' . $params['id'] . '"';
583
- }
584
-
585
- } else {
586
- $plain_content = $catalog->get_category(intval($ecwid_default_category_id));
587
- }
588
- } else {
589
- $plain_content = '<noscript>Your browser does not support JavaScript.<a href="' . $ecwid_mobile_catalog_link .'">HTML version of this store</a></noscript>';
590
- }
591
-
592
- $s = <<<EOT
593
- <script 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);</script>
594
- {$plain_content}
595
- EOT;
596
- return ecwid_wrap_shortcode_content($s);
597
- }
598
-
599
-
600
-
601
- function ecwid_store_activate() {
602
- $my_post = array();
603
- $content = <<<EOT
604
- <!-- Ecwid code. Please do not remove this line otherwise your Ecwid shopping cart will not work properly. --> [ecwid_script] [ecwid_minicart] [ecwid_searchbox] [ecwid_categories] [ecwid_productbrowser] <!-- Ecwid code end -->
605
- EOT;
606
- add_option("ecwid_store_page_id", '', '', 'yes');
607
- add_option("ecwid_store_id", ECWID_DEMO_STORE_ID, '', 'yes');
608
-
609
- add_option("ecwid_enable_minicart", 'Y', '', 'yes');
610
- add_option("ecwid_show_categories", 'Y', '', 'yes');
611
- add_option("ecwid_show_search_box", '', '', 'yes');
612
-
613
- add_option("ecwid_pb_categoriesperrow", '3', '', 'yes');
614
-
615
- add_option("ecwid_pb_productspercolumn_grid", '3', '', 'yes');
616
- add_option("ecwid_pb_productsperrow_grid", '3', '', 'yes');
617
- add_option("ecwid_pb_productsperpage_list", '10', '', 'yes');
618
- add_option("ecwid_pb_productsperpage_table", '20', '', 'yes');
619
-
620
- add_option("ecwid_pb_defaultview", 'grid', '', 'yes');
621
- add_option("ecwid_pb_searchview", 'list', '', 'yes');
622
-
623
- add_option("ecwid_mobile_catalog_link", '', '', 'yes');
624
- add_option("ecwid_default_category_id", '', '', 'yes');
625
-
626
- add_option('ecwid_is_api_enabled', 'on', '', 'yes');
627
- add_option('ecwid_api_check_time', 0, '', 'yes');
628
-
629
- add_option('ecwid_show_vote_message', true);
630
-
631
- add_option("ecwid_sso_secret_key", '', '', 'yes');
632
-
633
- add_option("ecwid_installation_date", time());
634
-
635
- $id = get_option("ecwid_store_page_id");
636
- $_tmp_page = null;
637
- if (!empty($id) and ($id > 0)) {
638
- $_tmp_page = get_post($id);
639
- }
640
- if ($_tmp_page !== null) {
641
- $my_post = array();
642
- $my_post['ID'] = $id;
643
- $my_post['post_status'] = 'publish';
644
- wp_update_post( $my_post );
645
-
646
- } else {
647
- $my_post['post_title'] = __('Store', 'ecwid-shopping-cart');
648
- $my_post['post_content'] = $content;
649
- $my_post['post_status'] = 'publish';
650
- $my_post['post_author'] = 1;
651
- $my_post['post_type'] = 'page';
652
- $id = wp_insert_post( $my_post );
653
- update_option('ecwid_store_page_id', $id);
654
- }
655
-
656
- }
657
-
658
- function ecwid_show_admin_messages() {
659
- if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID && $_GET['page'] != 'ecwid') {
660
-
661
- $ecwid_page_id = get_option("ecwid_store_page_id");
662
- $page_url = get_page_link($ecwid_page_id);
663
-
664
- $message = sprintf(
665
- __('<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.', 'ecwid-shopping-cart'),
666
- $page_url
667
- );
668
-
669
- ecwid_show_admin_message($message);
670
- }
671
- $install_date = get_option('ecwid_installation_date');
672
- if (!$install_date) {
673
- add_option('ecwid_installation_date', time());
674
- } else if (ecwid_is_paid_account() && $install_date + 60*60*24*30 < time() && get_option('ecwid_show_vote_message')) {
675
- $message = sprintf(
676
- __('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)', 'ecwid-shopping-cart'),
677
- 'target="_blank" href="http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart"'
678
- );
679
-
680
- ecwid_show_admin_message($message);
681
- }
682
- }
683
-
684
- function ecwid_show_admin_message($message) {
685
- $class = version_compare(get_bloginfo('version'), '3.0') < 0 ? "updated fade" : "update-nag";
686
- echo sprintf('<div class="%s" style="margin-top: 5px">%s</div>', $class, $message);
687
- }
688
-
689
- function ecwid_store_deactivate() {
690
- $ecwid_page_id = get_option("ecwid_store_page_id");
691
- $_tmp_page = null;
692
- if (!empty($ecwid_page_id) and ($ecwid_page_id > 0)) {
693
- $_tmp_page = get_page($ecwid_page_id);
694
- if ($_tmp_page !== null) {
695
- $my_post = array();
696
- $my_post['ID'] = $ecwid_page_id;
697
- $my_post['post_status'] = 'draft';
698
- wp_update_post( $my_post );
699
- } else {
700
- update_option('ecwid_store_page_id', '');
701
- }
702
- }
703
-
704
- }
705
-
706
- function ecwid_abs_intval($value) {
707
- if (!is_null($value))
708
- return abs(intval($value));
709
- else
710
- return null;
711
- }
712
-
713
- function ecwid_options_add_page() {
714
-
715
-
716
- add_menu_page(
717
- __('Ecwid shopping cart settings', 'ecwid-shopping-cart'),
718
- __('Ecwid Store', 'ecwid-shopping-cart'),
719
- 'manage_options',
720
- 'ecwid',
721
- 'ecwid_general_settings_do_page'
722
- );
723
-
724
- add_submenu_page(
725
- 'ecwid',
726
- __('General settings', 'ecwid-shopping-cart'),
727
- __('General', 'ecwid-shopping-cart'),
728
- 'manage_options',
729
- 'ecwid',
730
- 'ecwid_general_settings_do_page'
731
- );
732
-
733
- add_submenu_page(
734
- 'ecwid',
735
- __('Appearance settings', 'ecwid-shopping-cart'),
736
- __('Appearance', 'ecwid-shopping-cart'),
737
- 'manage_options',
738
- 'ecwid-appearance',
739
- 'ecwid_appearance_settings_do_page'
740
- );
741
-
742
- add_submenu_page(
743
- 'ecwid',
744
- __('Advanced settings', 'ecwid-shopping-cart'),
745
- __('Advanced', 'ecwid-shopping-cart'),
746
- 'manage_options',
747
- 'ecwid-advanced',
748
- 'ecwid_advanced_settings_do_page'
749
- );
750
- //add_options_page('Ecwid shopping cart settings', 'Ecwid shopping cart', 'manage_options', 'ecwid_options_page', 'ecwid_options_do_page');
751
- }
752
-
753
- function ecwid_register_admin_styles() {
754
- wp_register_style('ecwid-admin-css', plugins_url('ecwid-shopping-cart/css/admin.css'), array(), '', 'all');
755
- wp_enqueue_style('ecwid-admin-css');
756
- }
757
-
758
- function ecwid_register_settings_styles() {
759
- wp_register_style('ecwid-settings-pure-css', plugins_url('ecwid-shopping-cart/css/pure-min.css'), array(), '', 'all');
760
- wp_enqueue_style('ecwid-settings-pure-css');
761
- wp_register_style('ecwid-settings-css', plugins_url('ecwid-shopping-cart/css/settings.css'), array(), '', 'all');
762
- wp_enqueue_style('ecwid-settings-css');
763
- }
764
-
765
- function ecwid_plugin_actions($links) {
766
- $settings_link = "<a href='admin.php?page=ecwid'>"
767
- . (get_ecwid_store_id() == ECWID_DEMO_STORE_ID ? __('Setup', 'ecwid-shopping-cart') : __('Settings') )
768
- . "</a>";
769
- array_unshift( $links, $settings_link );
770
-
771
- return $links;
772
- }
773
-
774
-
775
- function ecwid_settings_api_init() {
776
-
777
- if (isset($_POST['settings_section'])) switch ($_POST['settings_section']) {
778
- case 'appearance':
779
- register_setting('ecwid_options_page', 'ecwid_enable_minicart');
780
-
781
- register_setting('ecwid_options_page', 'ecwid_show_categories');
782
- register_setting('ecwid_options_page', 'ecwid_show_search_box');
783
-
784
- register_setting('ecwid_options_page', 'ecwid_pb_categoriesperrow', 'ecwid_abs_intval');
785
- register_setting('ecwid_options_page', 'ecwid_pb_productspercolumn_grid', 'ecwid_abs_intval');
786
- register_setting('ecwid_options_page', 'ecwid_pb_productsperrow_grid', 'ecwid_abs_intval');
787
- register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_list', 'ecwid_abs_intval');
788
- register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_table', 'ecwid_abs_intval');
789
- register_setting('ecwid_options_page', 'ecwid_pb_defaultview');
790
- register_setting('ecwid_options_page', 'ecwid_pb_searchview');
791
- break;
792
-
793
- case 'general':
794
- register_setting('ecwid_options_page', 'ecwid_store_id','ecwid_abs_intval' );
795
- break;
796
-
797
- case 'advanced':
798
- register_setting('ecwid_options_page', 'ecwid_default_category_id');
799
- register_setting('ecwid_options_page', 'ecwid_sso_secret_key');
800
- break;
801
-
802
- }
803
- if (isset($_POST['ecwid_store_id'])) {
804
- update_option('ecwid_is_api_enabled', 'off');
805
- update_option('ecwid_api_check_time', 0);
806
- }
807
- }
808
-
809
- function ecwid_common_admin_scripts() {
810
-
811
- wp_register_script('ecwid-admin-js', plugins_url('ecwid-shopping-cart/js/admin.js'), array(), '', '');
812
- wp_enqueue_script('ecwid-admin-js');
813
-
814
- }
815
-
816
- function ecwid_general_settings_do_page() {
817
-
818
- if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID) {
819
- require_once plugin_dir_path(__FILE__) . '/templates/general-settings-initial.php';
820
- } else {
821
- require_once plugin_dir_path(__FILE__) . '/templates/general-settings.php';
822
- }
823
- }
824
-
825
- function ecwid_advanced_settings_do_page() {
826
- wp_register_script('ecwid-advanced-js', plugins_url('ecwid-shopping-cart/js/advanced.js'), array(), '', '');
827
- wp_enqueue_script('ecwid-advanced-js');
828
-
829
- $categories = false;
830
- if (ecwid_is_paid_account()) {
831
- $api = ecwid_new_product_api();
832
- $categories = $api->get_all_categories();
833
- $by_id = array();
834
- foreach ($categories as $key => $category) {
835
- $by_id[$category['id']] = $category;
836
- }
837
- unset($categories);
838
-
839
- foreach ($by_id as $id => $category) {
840
- $name_path = array($category['name']);
841
- while (isset($category['parentId'])) {
842
- $category = $by_id[$category['parentId']];
843
- $name_path[] = $category['name'];
844
- }
845
-
846
- $by_id[$id]['path'] = array_reverse($name_path);
847
- $by_id[$id]['path_str'] = implode(" > ", $by_id[$id]['path']);
848
- }
849
-
850
- function sort_by_path($a, $b) {
851
- return strcmp($a['path_str'], $b['path_str']);
852
- }
853
-
854
- uasort($by_id, 'sort_by_path');
855
-
856
- $categories = $by_id;
857
- }
858
-
859
- require_once plugin_dir_path(__FILE__) . '/templates/advanced-settings.php';
860
- }
861
-
862
- function ecwid_appearance_settings_do_page() {
863
-
864
- wp_register_script('ecwid-appearance-js', plugins_url('ecwid-shopping-cart/js/appearance.js'), array(), '', '');
865
- wp_enqueue_script('ecwid-appearance-js');
866
-
867
- $disabled = false;
868
- if (!empty($ecwid_page_id) && ($ecwid_page_id > 0)) {
869
- $_tmp_page = get_post($ecwid_page_id);
870
- $content = $_tmp_page->post_content;
871
- if ( (strpos($content, "[ecwid_productbrowser]") === false) && (strpos($content, "xProductBrowser") !== false) )
872
- $disabled = true;
873
- }
874
- // $disabled_str is used in appearance settings template
875
- if ($disabled)
876
- $disabled_str = 'disabled = "disabled"';
877
- else
878
- $disabled_str = "";
879
-
880
- require_once ECWID_PLUGIN_DIR . 'templates/appearance-settings.php';
881
- }
882
-
883
- function get_ecwid_store_id() {
884
- static $store_id = null;
885
- if (is_null($store_id)) {
886
- $store_id = get_option('ecwid_store_id');
887
- if (empty($store_id))
888
- $store_id = ECWID_DEMO_STORE_ID;
889
- }
890
- return $store_id;
891
- }
892
-
893
- function ecwid_dashboard_widget_function() {
894
- echo "<a href=\"https://my.ecwid.com/\" target=\"_blank\">Go to the Ecwid Control Panel</a><br /><br /><a href=\"http://kb.ecwid.com/\" target=\"_blank\">Ecwid Knowledge Base</a>&nbsp;|&nbsp;<a href=\"http://www.ecwid.com/forums/\" target=\"_blank\">Ecwid Forums</a>";
895
- }
896
-
897
- function ecwid_add_dashboard_widgets() {
898
- if (current_user_can('administrator')) {
899
- wp_add_dashboard_widget('ecwid_dashboard_widget','Ecwid Links', 'ecwid_dashboard_widget_function');
900
- }
901
- }
902
-
903
-
904
- class EcwidMinicartWidget extends WP_Widget {
905
-
906
- function EcwidMinicartWidget() {
907
- $widget_ops = array('classname' => 'widget_ecwid_minicart', 'description' => __("Your store's minicart", 'ecwid-shopping-cart') );
908
- $this->WP_Widget('ecwidminicart', __('Ecwid Shopping Bag (Normal)', 'ecwid-shopping-cart'), $widget_ops);
909
-
910
- }
911
-
912
- function widget($args, $instance) {
913
- extract($args);
914
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
915
-
916
- echo $before_widget;
917
-
918
- if ( $title )
919
- echo $before_title . $title . $after_title;
920
-
921
- echo '<div>';
922
- echo ecwid_get_scriptjs_code();
923
-
924
- $ecwid_page_id = get_option("ecwid_store_page_id");
925
- $page_url = get_page_link($ecwid_page_id);
926
- $_tmp_page = get_page($ecwid_page_id);
927
- if (!empty($page_url) && $_tmp_page != null)
928
- echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
929
- echo <<<EOT
930
- <script type="text/javascript"> xMinicart("style="); </script>
931
- </div>
932
- EOT;
933
-
934
- echo $after_widget;
935
- }
936
-
937
- function update($new_instance, $old_instance){
938
- $instance = $old_instance;
939
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
940
-
941
- return $instance;
942
- }
943
-
944
- function form($instance){
945
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
946
-
947
- $title = htmlspecialchars($instance['title']);
948
-
949
- 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>';
950
- }
951
-
952
- }
953
-
954
- class EcwidMinicartMiniViewWidget extends WP_Widget {
955
-
956
- function EcwidMinicartMiniViewWidget() {
957
- $widget_ops = array('classname' => 'widget_ecwid_minicart_miniview', 'description' => __("Your store's minicart", 'ecwid-shopping-cart') );
958
- $this->WP_Widget('ecwidminicart_miniview', __('Ecwid Shopping Bag (Mini view)', 'ecwid-shopping-cart'), $widget_ops);
959
- }
960
-
961
- function widget($args, $instance) {
962
- extract($args);
963
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
964
-
965
- echo $before_widget;
966
-
967
- if ( $title )
968
- echo $before_title . $title . $after_title;
969
-
970
- echo '<div>';
971
- echo ecwid_get_scriptjs_code();
972
-
973
- $ecwid_page_id = get_option("ecwid_store_page_id");
974
- $page_url = get_page_link($ecwid_page_id);
975
- $_tmp_page = get_page($ecwid_page_id);
976
- if (!empty($page_url) && $_tmp_page != null)
977
- echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
978
- echo <<<EOT
979
- <script type="text/javascript"> xMinicart("style=left:10px","layout=Mini"); </script>
980
- </div>
981
- EOT;
982
-
983
- echo $after_widget;
984
- }
985
-
986
- function update($new_instance, $old_instance){
987
- $instance = $old_instance;
988
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
989
-
990
- return $instance;
991
- }
992
-
993
- function form($instance){
994
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
995
-
996
- $title = htmlspecialchars($instance['title']);
997
-
998
- 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>';
999
- }
1000
-
1001
- }
1002
-
1003
-
1004
- class EcwidSearchWidget extends WP_Widget {
1005
-
1006
- function EcwidSearchWidget() {
1007
- $widget_ops = array('classname' => 'widget_ecwid_search', 'description' => __("Your store's search box", 'ecwid-shopping-cart'));
1008
- $this->WP_Widget('ecwidsearch', __('Ecwid Search Box', 'ecwid-shopping-cart'), $widget_ops);
1009
- }
1010
-
1011
- function widget($args, $instance) {
1012
- extract($args);
1013
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1014
-
1015
- echo $before_widget;
1016
-
1017
- if ( $title )
1018
- echo $before_title . $title . $after_title;
1019
-
1020
- echo '<div>';
1021
- echo ecwid_get_scriptjs_code();
1022
-
1023
- $ecwid_page_id = get_option("ecwid_store_page_id");
1024
- $page_url = get_page_link($ecwid_page_id);
1025
- $_tmp_page = get_page($ecwid_page_id);
1026
- if (!empty($page_url) && $_tmp_page != null)
1027
- echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
1028
- echo <<<EOT
1029
- <script type="text/javascript"> xSearchPanel("style="); </script>
1030
- </div>
1031
- EOT;
1032
-
1033
- echo $after_widget;
1034
- }
1035
-
1036
- function update($new_instance, $old_instance){
1037
- $instance = $old_instance;
1038
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1039
-
1040
- return $instance;
1041
- }
1042
-
1043
- function form($instance){
1044
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1045
-
1046
- $title = htmlspecialchars($instance['title']);
1047
-
1048
- 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>';
1049
- }
1050
-
1051
- }
1052
-
1053
- class EcwidVCategoriesWidget extends WP_Widget {
1054
-
1055
- function EcwidVCategoriesWidget() {
1056
- $widget_ops = array('classname' => 'widget_ecwid_vcategories', 'description' => __('Vertical menu of categories', 'ecwid-shopping-cart'));
1057
- $this->WP_Widget('ecwidvcategories', __('Ecwid Vertical Categories', 'ecwid-shopping-cart'), $widget_ops);
1058
- }
1059
-
1060
- function widget($args, $instance) {
1061
- extract($args);
1062
- $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1063
-
1064
- echo $before_widget;
1065
-
1066
- if ( $title )
1067
- echo $before_title . $title . $after_title;
1068
-
1069
- echo '<div>';
1070
- echo ecwid_get_scriptjs_code();
1071
- $ecwid_page_id = get_option("ecwid_store_page_id");
1072
- $page_url = get_page_link($ecwid_page_id);
1073
- $_tmp_page = get_page($ecwid_page_id);
1074
- if (!empty($page_url) && $_tmp_page != null)
1075
- echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
1076
- echo <<<EOT
1077
- <script type="text/javascript"> xVCategories("style="); </script>
1078
- </div>
1079
- EOT;
1080
-
1081
- echo $after_widget;
1082
- }
1083
-
1084
- function update($new_instance, $old_instance){
1085
- $instance = $old_instance;
1086
- $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1087
-
1088
- return $instance;
1089
- }
1090
-
1091
- function form($instance){
1092
- $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1093
-
1094
- $title = htmlspecialchars($instance['title']);
1095
-
1096
- 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>';
1097
- }
1098
-
1099
- }
1100
-
1101
-
1102
- function ecwid_sidebar_widgets_init() {
1103
- register_widget('EcwidMinicartWidget');
1104
- register_widget('EcwidSearchWidget');
1105
- register_widget('EcwidVCategoriesWidget');
1106
- register_widget('EcwidMinicartMiniViewWidget');
1107
- }
1108
-
1109
- add_action('widgets_init', 'ecwid_sidebar_widgets_init');
1110
-
1111
- function ecwid_encode_json($data) {
1112
- if(version_compare(PHP_VERSION,"5.2.0",">=")) {
1113
- return json_encode($data);
1114
- } else {
1115
- include_once(ABSPATH . 'wp-content/plugins/ecwid-shopping-cart/lib/JSON.php');
1116
- $json_parser = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
1117
- return $json_parser->encode($data);
1118
- }
1119
- }
1120
-
1121
-
1122
-
1123
- function ecwid_sso() {
1124
- $key = get_option('ecwid_sso_secret_key');
1125
- if (empty($key)) {
1126
- return "";
1127
- }
1128
-
1129
- global $current_user;
1130
- get_currentuserinfo();
1131
-
1132
- if ($current_user->ID) {
1133
- $user_data = array(
1134
- 'appId' => "wp_" . get_ecwid_store_id(),
1135
- 'userId' => "{$current_user->ID}",
1136
- 'profile' => array(
1137
- 'email' => $current_user->user_email,
1138
- 'billingPerson' => array(
1139
- 'name' => $current_user->display_name
1140
- )
1141
- )
1142
- );
1143
- $user_data = base64_encode(ecwid_encode_json($user_data));
1144
- $time = time();
1145
- $hmac = ecwid_hmacsha1("$user_data $time", $key);
1146
- return "<script> var ecwid_sso_profile='$user_data $hmac $time' </script>";
1147
- }
1148
- else {
1149
- return "<script> var ecwid_sso_profile='' </script>";
1150
- }
1151
-
1152
-
1153
- }
1154
-
1155
- // from: http://www.php.net/manual/en/function.sha1.php#39492
1156
-
1157
- function ecwid_hmacsha1($data, $key) {
1158
- if (function_exists("hash_hmac")) {
1159
- return hash_hmac('sha1', $data, $key);
1160
- } else {
1161
- $blocksize=64;
1162
- $hashfunc='sha1';
1163
- if (strlen($key)>$blocksize)
1164
- $key=pack('H*', $hashfunc($key));
1165
- $key=str_pad($key,$blocksize,chr(0x00));
1166
- $ipad=str_repeat(chr(0x36),$blocksize);
1167
- $opad=str_repeat(chr(0x5c),$blocksize);
1168
- $hmac = pack(
1169
- 'H*',$hashfunc(
1170
- ($key^$opad).pack(
1171
- 'H*',$hashfunc(
1172
- ($key^$ipad).$data
1173
- )
1174
- )
1175
- )
1176
- );
1177
- return bin2hex($hmac);
1178
- }
1179
- }
1180
-
1181
- function ecwid_can_display_html_catalog()
1182
- {
1183
- if (!isset($_GET['_escaped_fragment_'])) return;
1184
-
1185
- $api = ecwid_new_product_api();
1186
- if (!$api) return;
1187
-
1188
- $profile = $api->get_profile();
1189
- if (!$profile) return;
1190
-
1191
- return $profile['closed'] != true;
1192
- }
1193
-
1194
- function ecwid_is_paid_account()
1195
- {
1196
- return ecwid_is_api_enabled() && get_ecwid_store_id() != ECWID_DEMO_STORE_ID;
1197
- }
1198
-
1199
- function ecwid_is_api_enabled()
1200
- {
1201
- $ecwid_is_api_enabled = get_option('ecwid_is_api_enabled');
1202
- $ecwid_api_check_time = get_option('ecwid_api_check_time');
1203
- $now = time();
1204
-
1205
- if ($now > ($ecwid_api_check_time + 60 * 60 * 3)) {
1206
- // check whether API is available once in 3 hours
1207
- $ecwid = ecwid_new_product_api();
1208
- $ecwid_is_api_enabled = ($ecwid->is_api_enabled() ? 'on' : 'off');
1209
- update_option('ecwid_is_api_enabled', $ecwid_is_api_enabled);
1210
- update_option('ecwid_api_check_time', $now);
1211
- }
1212
-
1213
- if ('on' == $ecwid_is_api_enabled)
1214
- return true;
1215
- else
1216
- return false;
1217
- }
1218
-
1219
- function ecwid_new_product_api()
1220
- {
1221
- include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
1222
- $ecwid_store_id = intval(get_ecwid_store_id());
1223
- $api = new EcwidProductApi($ecwid_store_id);
1224
-
1225
- return $api;
1226
- }
1227
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: 2.2
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
+
15
+ define("APP_ECWID_COM", "app.ecwid.com");
16
+ define("ECWID_DEMO_STORE_ID", 1003);
17
+
18
+ if ( ! defined( 'ECWID_PLUGIN_DIR' ) ) {
19
+ define( 'ECWID_PLUGIN_DIR', plugin_dir_path( realpath(__FILE__) ) );
20
+ }
21
+
22
+ if ( ! defined( 'ECWID_PLUGIN_URL' ) ) {
23
+ define( 'ECWID_PLUGIN_URL', plugin_dir_url( realpath(__FILE__) ) );
24
+ }
25
+
26
+ if ( is_admin() ){
27
+ add_action('admin_init', 'ecwid_settings_api_init');
28
+ add_action('admin_notices', 'ecwid_show_admin_messages');
29
+ add_action('admin_menu', 'ecwid_options_add_page');
30
+ add_action('wp_dashboard_setup', 'ecwid_add_dashboard_widgets' );
31
+ add_action('admin_enqueue_scripts', 'ecwid_common_admin_scripts');
32
+ add_action('admin_enqueue_scripts', 'ecwid_register_admin_styles');
33
+ add_action('admin_enqueue_scripts', 'ecwid_register_settings_styles');
34
+ add_action('wp_ajax_ecwid_hide_vote_message', 'ecwid_hide_vote_message');
35
+ add_filter('plugins_loaded', 'ecwid_load_textdomain');
36
+ add_filter('plugin_action_links_ecwid-shopping-cart/ecwid-shopping-cart.php', 'ecwid_plugin_actions');
37
+ add_action('admin_head', 'ecwid_ie8_fonts_inclusion');
38
+ } else {
39
+ add_shortcode('ecwid_script', 'ecwid_script_shortcode');
40
+ add_shortcode('ecwid_minicart', 'ecwid_minicart_shortcode');
41
+ add_shortcode('ecwid_searchbox', 'ecwid_searchbox_shortcode');
42
+ add_shortcode('ecwid_categories', 'ecwid_categories_shortcode');
43
+ add_shortcode('ecwid_productbrowser', 'ecwid_productbrowser_shortcode');
44
+ add_action('init', 'ecwid_backward_compatibility');
45
+ add_action('send_headers', 'ecwid_503_on_store_closed');
46
+ add_action('template_redirect', 'ecwid_404_on_broken_escaped_fragment');
47
+ add_action('wp_title', 'ecwid_seo_compatibility_init', 0);
48
+ add_filter('wp_title', 'ecwid_seo_title', 20);
49
+ add_action('plugins_loaded', 'ecwid_minifier_compatibility', 0);
50
+ add_action('wp_head', 'ecwid_meta_description', 0);
51
+ add_action('wp_head', 'ecwid_ajax_crawling_fragment');
52
+ add_action('wp_head', 'ecwid_meta');
53
+ add_action('wp_head', 'ecwid_seo_compatibility_restore', 1000);
54
+ add_filter( 'widget_meta_poweredby', 'ecwid_add_credits');
55
+ $ecwid_seo_title = '';
56
+ }
57
+ add_action('admin_bar_menu', 'add_ecwid_admin_bar_node', 1000);
58
+
59
+ $version = get_bloginfo('version');
60
+
61
+ if (version_compare($version, '3.6') < 0) {
62
+ /**
63
+ * A copy of has_shortcode functionality from wordpress 3.6
64
+ * http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/shortcodes.php
65
+ */
66
+
67
+ if (!function_exists('shortcode_exists')) {
68
+ function shortcode_exists( $tag ) {
69
+ global $shortcode_tags;
70
+ return array_key_exists( $tag, $shortcode_tags );
71
+ }
72
+ }
73
+
74
+ if (!function_exists('has_shortcode')) {
75
+ function has_shortcode( $content, $tag ) {
76
+ if ( shortcode_exists( $tag ) ) {
77
+ preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
78
+ if ( empty( $matches ) )
79
+ return false;
80
+
81
+ foreach ( $matches as $shortcode ) {
82
+ if ( $tag === $shortcode[2] ) {
83
+ return true;
84
+ }
85
+ }
86
+ }
87
+ return false;
88
+ }
89
+ }
90
+ }
91
+ $theme_name = '';
92
+ if (version_compare($version, '3.4') < 0) {
93
+ $theme_name = get_current_theme();
94
+ } else {
95
+ $theme = wp_get_theme();
96
+ $theme_name = $theme->get('Name');
97
+ }
98
+ if ($theme_name == 'Twenty Fourteen') {
99
+ add_action('wp_enqueue_scripts', 'ecwid_adjust_theme2014');
100
+
101
+ function ecwid_adjust_theme2014() {
102
+ if (ecwid_page_has_productbrowser()) {
103
+ wp_register_style('ecwid_theme2014', plugins_url('ecwid-shopping-cart/css/2014adjustments.css'), array('twentyfourteen-style'), '', 'all');
104
+ wp_enqueue_style('ecwid_theme2014');
105
+ }
106
+ }
107
+ }
108
+
109
+ if (is_admin()) {
110
+ $main_button_class = "";
111
+ if (version_compare($version, '3.8-beta') > 0) {
112
+ $main_button_class = "button-primary";
113
+ } else {
114
+ $main_button_class = "pure-button pure-button-primary";
115
+ }
116
+
117
+ define('ECWID_MAIN_BUTTON_CLASS', $main_button_class);
118
+ }
119
+
120
+ function ecwid_ie8_fonts_inclusion()
121
+ {
122
+ if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 8') === false) return;
123
+
124
+ $url = ECWID_PLUGIN_URL . '/fonts/ecwid-logo.eot';
125
+ echo <<<HTML
126
+ <style>
127
+ @font-face {
128
+ font-family: 'ecwid-logo';
129
+ src:url($url);
130
+ }
131
+ </style>
132
+ <script type="text/javascript">
133
+ </script>
134
+ HTML;
135
+
136
+ }
137
+
138
+ function ecwid_load_textdomain() {
139
+ load_plugin_textdomain( 'ecwid-shopping-cart', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
140
+
141
+ }
142
+
143
+ function ecwid_404_on_broken_escaped_fragment() {
144
+ if (!ecwid_is_api_enabled()) {
145
+ return;
146
+ }
147
+
148
+ if (!isset($_GET['_escaped_fragment_'])) {
149
+ return;
150
+ }
151
+
152
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
153
+ $api = ecwid_new_product_api();
154
+
155
+ if (isset($params['mode']) && !empty($params['mode']) && isset($params['id'])) {
156
+ $result = array();
157
+ if ($params['mode'] == 'product') {
158
+ $result = $api->get_product($params['id']);
159
+ } elseif ($params['mode'] == 'category') {
160
+ $result = $api->get_category($params['id']);
161
+ }
162
+ if (empty($result)) {
163
+ global $wp_query;
164
+
165
+ $wp_query->set_404();
166
+ }
167
+ }
168
+ }
169
+
170
+ function ecwid_503_on_store_closed() {
171
+ if (!ecwid_is_api_enabled()) {
172
+ return;
173
+ }
174
+
175
+ if (!isset($_GET['_escaped_fragment_'])) {
176
+ return;
177
+ }
178
+
179
+ $api = ecwid_new_product_api();
180
+ $profile = $api->get_profile();
181
+
182
+ if ($profile['closed']) {
183
+ header('HTTP/1.1 503 Service Temporarily Unavailable');
184
+ header('Status: 503 Service Temporarily Unavailable');
185
+ }
186
+ }
187
+
188
+ function ecwid_backward_compatibility() {
189
+ // Backward compatibility with 1.1.2 and earlier
190
+ if (isset($_GET['ecwid_product_id']) || isset($_GET['ecwid_category_id'])) {
191
+ $ecwid_page = get_option("ecwid_store_page_id");
192
+ $ecwid_page = get_page_link($ecwid_page);
193
+ $ecwid_page .= '#!/~/';
194
+
195
+ if (isset($_GET['ecwid_product_id']))
196
+ $redirect = $ecwid_page . 'product/id=' . $_GET['ecwid_product_id'];
197
+ elseif (isset($_GET['ecwid_category_id']))
198
+ $redirect = $ecwid_page . 'category/id=' . $_GET['ecwid_category_id'];
199
+
200
+ wp_redirect($redirect, 301);
201
+ exit();
202
+ }
203
+ }
204
+
205
+ function ecwid_minifier_compatibility()
206
+ {
207
+ if ( !function_exists( 'get_plugins' ) ) { require_once ( ABSPATH . 'wp-admin/includes/plugin.php' ); }
208
+
209
+ $plugins = get_plugins();
210
+ $wp_minify_plugin = 'wp-minify/wp-minify.php';
211
+ if (array_key_exists($wp_minify_plugin, $plugins) && is_plugin_active($wp_minify_plugin)) {
212
+ global $wp_minify;
213
+
214
+ if (is_object($wp_minify) && array_key_exists('default_exclude', get_object_vars($wp_minify)) && is_array($wp_minify->default_exclude)) {
215
+ $wp_minify->default_exclude[] = 'ecwid.com/script.js';
216
+ }
217
+ }
218
+ }
219
+
220
+ function ecwid_override_option($name, $new_value = null)
221
+ {
222
+ static $overridden = array();
223
+
224
+ if (!array_key_exists($name, $overridden)) {
225
+ $overridden[$name] = get_option($name);
226
+ }
227
+
228
+ if (!is_null($new_value)) {
229
+ update_option($name, $new_value);
230
+ } else {
231
+ update_option($name, $overridden[$name]);
232
+ }
233
+ }
234
+
235
+ function ecwid_seo_compatibility_init($title)
236
+ {
237
+ if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
238
+ return $title;
239
+ }
240
+
241
+ // Default wordpress canonical
242
+ remove_action( 'wp_head','rel_canonical');
243
+
244
+ // Yoast Wordpress SEO
245
+ global $wpseo_front;
246
+ // Canonical
247
+ remove_action( 'wpseo_head', array( $wpseo_front, 'canonical' ), 20);
248
+ // Title
249
+ remove_action( 'get_header', array( $wpseo_front, 'force_rewrite_output_buffer' ) );
250
+ remove_action( 'wp_footer', array( $wpseo_front, 'flush_cache'));
251
+ // Description
252
+ remove_action( 'wpseo_head', array( $wpseo_front, 'metadesc' ), 10 );
253
+
254
+ // Platinum SEO Pack
255
+ // Canonical
256
+ ecwid_override_option('psp_canonical', false);
257
+ // Title
258
+ ecwid_override_option('aiosp_rewrite_titles', false);
259
+
260
+ // All in one SEO Pack
261
+ global $aioseop_options, $aiosp;
262
+ // Canonical
263
+ $aioseop_options['aiosp_can'] = false;
264
+ // Title
265
+ add_filter('aioseop_title', __return_null);
266
+ // Description
267
+ add_filter('aioseop_description', __return_null);
268
+
269
+
270
+ return $title;
271
+
272
+ }
273
+
274
+ function ecwid_seo_compatibility_restore()
275
+ {
276
+ if (!array_key_exists('_escaped_fragment_', $_GET) || !ecwid_page_has_productbrowser()) {
277
+ return;
278
+ }
279
+
280
+ ecwid_override_option('psp_canonical');
281
+ ecwid_override_option('aiosp_rewrite_titles');
282
+ }
283
+
284
+ function add_ecwid_admin_bar_node() {
285
+ global $wp_admin_bar;
286
+ if ( !is_super_admin() || !is_admin_bar_showing() )
287
+ return;
288
+
289
+ $wp_admin_bar->add_menu( array(
290
+ 'id' => 'ecwid-main',
291
+ 'title' => '<span class="ab-icon ecwid-top-menu-item"></span>',
292
+ 'href' => 'admin.php?page=ecwid',
293
+ ));
294
+ $wp_admin_bar->add_menu(array(
295
+ "id" => "ecwid-help",
296
+ "title" => __("Get help", 'ecwid-shopping-cart'),
297
+ "parent" => "ecwid-main",
298
+ 'href' => 'http://help.ecwid.com'
299
+ )
300
+ );
301
+ $wp_admin_bar->add_menu(array(
302
+ "id" => "ecwid-home",
303
+ "title" => __("Go to Ecwid site", 'ecwid-shopping-cart'),
304
+ "parent" => "ecwid-main",
305
+ 'href' => 'http://www.ecwid.com?source=wporg'
306
+ )
307
+ );
308
+ $wp_admin_bar->add_menu(array(
309
+ "id" => "ecwid-go-to-page",
310
+ "title" => __("Visit storefront", 'ecwid-shopping-cart'),
311
+ "parent" => "ecwid-main",
312
+ 'href' => get_page_link(get_option("ecwid_store_page_id"))
313
+ )
314
+ );
315
+ $wp_admin_bar->add_menu(array(
316
+ "id" => "ecwid-control-panel",
317
+ "title" => __("Manage my store", 'ecwid-shopping-cart'),
318
+ "parent" => "ecwid-main",
319
+ 'href' => 'https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard'
320
+ )
321
+ );
322
+ $wp_admin_bar->add_menu(array(
323
+ "id" => "ecwid-settings",
324
+ "title" => __("Manage plugin settings", 'ecwid-shopping-cart'),
325
+ "parent" => "ecwid-main",
326
+ 'href' => admin_url('admin.php?page=ecwid')
327
+ )
328
+ );
329
+ $wp_admin_bar->add_menu(array(
330
+ "id" => "ecwid-fb-app",
331
+ "title" => __("→ Sell on Facebook", 'ecwid-shopping-cart'),
332
+ "parent" => "ecwid-main",
333
+ 'href' => 'http://apps.facebook.com/ecwid-shop/?fb_source=wp'
334
+ )
335
+ );
336
+ }
337
+
338
+ function ecwid_page_has_productbrowser()
339
+ {
340
+ static $result = null;
341
+
342
+ if (is_null($result)) {
343
+ $post_content = get_post(get_the_ID())->post_content;
344
+ $result = has_shortcode($post_content, 'ecwid_productbrowser');
345
+ }
346
+
347
+ return $result;
348
+ }
349
+
350
+ function ecwid_ajax_crawling_fragment() {
351
+ $ecwid_page_id = get_option("ecwid_store_page_id");
352
+ if (ecwid_is_api_enabled() && !isset($_GET['_escaped_fragment_']) && ecwid_page_has_productbrowser())
353
+ echo '<meta name="fragment" content="!">' . PHP_EOL;
354
+ }
355
+
356
+ function ecwid_meta() {
357
+
358
+ echo '<link rel="dns-prefetch" href="//images-cdn.ecwid.com/">' . PHP_EOL;
359
+ echo '<link rel="dns-prefetch" href="//images.ecwid.com/">' . PHP_EOL;
360
+ echo '<link rel="dns-prefetch" href="//app.ecwid.com/">' . PHP_EOL;
361
+
362
+ if (!ecwid_page_has_productbrowser()) {
363
+ $ecwid_page_id = get_option("ecwid_store_page_id");
364
+ $page_url = get_page_link($ecwid_page_id);
365
+ echo '<link rel="prefetch" href="' . $page_url . '" />' . PHP_EOL;
366
+ echo '<link rel="prerender" href="' . $page_url . '" />' . PHP_EOL;
367
+ }
368
+ }
369
+
370
+ function ecwid_meta_description() {
371
+
372
+ $allowed = ecwid_is_api_enabled() && isset($_GET['_escaped_fragment_']);
373
+ if (!$allowed) return;
374
+
375
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
376
+ if (!$params) return;
377
+
378
+ if (!in_array($params['mode'], array('category', 'product')) || !isset($params['id'])) return;
379
+
380
+ $api = ecwid_new_product_api();
381
+ if ($params['mode'] == 'product') {
382
+ $product = $api->get_product($params['id']);
383
+ $description = $product['description'];
384
+ } elseif ($params['mode'] == 'category') {
385
+ $category = $api->get_category($params['id']);
386
+ $description = $category['description'];
387
+ } else return;
388
+
389
+ $description = strip_tags($description);
390
+ $description = html_entity_decode($description, ENT_NOQUOTES, 'UTF-8');
391
+
392
+ $description = preg_replace("![\\s]+!", " ", $description);
393
+ $description = trim($description, " \t\xA0\n\r"); // Space, tab, non-breaking space, newline, carriage return
394
+ $description = mb_substr($description, 0, 160);
395
+ $description = htmlspecialchars($description, ENT_COMPAT | ENT_HTML401, 'UTF-8');
396
+
397
+ echo <<<HTML
398
+ <meta name="description" content="$description" />
399
+ HTML;
400
+ }
401
+
402
+ function ecwid_hide_vote_message()
403
+ {
404
+ update_option('ecwid_show_vote_message', false);
405
+ }
406
+
407
+ function ecwid_get_product_and_category($category_id, $product_id) {
408
+ $params = array
409
+ (
410
+ array("alias" => "c", "action" => "category", "params" => array("id" => $category_id)),
411
+ array("alias" => "p", "action" => "product", "params" => array("id" => $product_id)),
412
+ );
413
+
414
+ $api = ecwid_new_product_api();
415
+ $batch_result = $api->get_batch_request($params);
416
+
417
+ $category = $batch_result["c"];
418
+ $product = $batch_result["p"];
419
+ $return = "";
420
+
421
+ if (is_array($product)) {
422
+ $return .=$product["name"];
423
+ }
424
+
425
+ if(is_array($category)) {
426
+ $return.=" | ";
427
+ $return .=$category["name"];
428
+ }
429
+ return $return;
430
+ }
431
+
432
+ function ecwid_seo_title($content) {
433
+ if (isset($_GET['_escaped_fragment_']) && ecwid_is_api_enabled()) {
434
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
435
+ $ecwid_seo_title = '';
436
+
437
+ $api = ecwid_new_product_api();
438
+
439
+ if (isset($params['mode']) && !empty($params['mode'])) {
440
+ if ($params['mode'] == 'product') {
441
+ if (isset($params['category']) && !empty($params['category'])){
442
+ $ecwid_seo_title = ecwid_get_product_and_category($params['category'], $params['id']);
443
+ } elseif (empty($params['category'])) {
444
+ $ecwid_product = $api->get_product($params['id']);
445
+ $ecwid_seo_title = $ecwid_product['name'];
446
+ if(is_array($ecwid_product['categories'])){
447
+ foreach ($ecwid_product['categories'] as $ecwid_category){
448
+ if($ecwid_category['defaultCategory']==true){
449
+ $ecwid_seo_title .=" | ";
450
+ $ecwid_seo_title .= $ecwid_category['name'];
451
+ }
452
+ }
453
+ }
454
+ }
455
+ }
456
+
457
+ elseif ($params['mode'] == 'category'){
458
+ $api = ecwid_new_product_api();
459
+ $ecwid_category = $api->get_category($params['id']);
460
+ $ecwid_seo_title = $ecwid_category['name'];
461
+ }
462
+ }
463
+ if (!empty($ecwid_seo_title))
464
+ return $ecwid_seo_title . " | " . $content;
465
+ else
466
+ return $content;
467
+
468
+ } else {
469
+ return $content;
470
+ }
471
+ }
472
+
473
+ function ecwid_add_credits($powered_by)
474
+ {
475
+ if (!ecwid_is_paid_account()) {
476
+
477
+ $new_powered_by = '<li>';
478
+ $new_powered_by .= sprintf(
479
+ __('<a %s>Online store powered by Ecwid</a>', 'ecwid-shopping-cart'),
480
+ 'target="_blank" href="//www.ecwid.com?source=wporg-metalink"'
481
+ );
482
+ $new_powered_by .= '</li>';
483
+
484
+ $powered_by .= $new_powered_by;
485
+ }
486
+
487
+ return $powered_by;
488
+ }
489
+
490
+ function ecwid_wrap_shortcode_content($content)
491
+ {
492
+ return "<!-- Ecwid shopping cart plugin v 2.2 -->"
493
+ . ecwid_get_scriptjs_code()
494
+ . "<div>$content</div>"
495
+ . "<!-- END Ecwid Shopping Cart v 2.2 -->";
496
+ }
497
+
498
+ function ecwid_get_scriptjs_code($force_lang = null) {
499
+ if (!defined('ECWID_SCRIPTJS')) {
500
+ $store_id = get_ecwid_store_id();
501
+ $force_lang_str = !is_null($force_lang) ? "&lang=$force_lang" : '';
502
+ $s = '<script type="text/javascript" data-cfasync="false" src="//' . APP_ECWID_COM . '/script.js?' . $store_id . $force_lang_str . '"></script>';
503
+
504
+ define('ECWID_SCRIPTJS','Yep');
505
+ $s = $s . ecwid_sso();
506
+ return $s;
507
+ } else {
508
+ return '';
509
+ }
510
+ }
511
+
512
+ function ecwid_script_shortcode($params) {
513
+ $attributes = shortcode_atts(
514
+ array(
515
+ 'lang' => null
516
+ ), $params
517
+ );
518
+
519
+ $content = "";
520
+ if (!is_null($attributes['lang'])) {
521
+ $content = ecwid_get_scriptjs_code($attributes['lang']);
522
+ }
523
+
524
+ return ecwid_wrap_shortcode_content($content);
525
+ }
526
+
527
+ function ecwid_minicart_shortcode() {
528
+
529
+ $ecwid_enable_minicart = get_option('ecwid_enable_minicart');
530
+ $ecwid_show_categories = get_option('ecwid_show_categories');
531
+ if (!empty($ecwid_enable_minicart) && !empty($ecwid_show_categories)) {
532
+ $s = <<<EOT
533
+ <script type="text/javascript"> xMinicart("style=","layout=attachToCategories"); </script>
534
+ EOT;
535
+ return ecwid_wrap_shortcode_content($s);
536
+ } else {
537
+ return "";
538
+ }
539
+ }
540
+ function ecwid_searchbox_shortcode() {
541
+ $ecwid_show_search_box = get_option('ecwid_show_search_box');
542
+ if (!empty($ecwid_show_search_box)) {
543
+ $s = <<<EOT
544
+ <script type="text/javascript"> xSearchPanel("style="); </script>
545
+ EOT;
546
+ return ecwid_wrap_shortcode_content($s);
547
+ } else {
548
+ return "";
549
+ }
550
+ }
551
+
552
+ function ecwid_categories_shortcode() {
553
+ $ecwid_show_categories = get_option('ecwid_show_categories');
554
+ if (!empty($ecwid_show_categories)) {
555
+ $s = <<<EOT
556
+ <script type="text/javascript"> xCategories("style="); </script>
557
+ EOT;
558
+ return ecwid_wrap_shortcode_content($s);
559
+ } else {
560
+ return "";
561
+ }
562
+ }
563
+
564
+ function ecwid_parse_escaped_fragment($escaped_fragment) {
565
+ $fragment = urldecode($escaped_fragment);
566
+ $return = array();
567
+
568
+ if (preg_match('/^(\/~\/)([a-z]+)\/(.*)$/', $fragment, $matches)) {
569
+ parse_str($matches[3], $return);
570
+ $return['mode'] = $matches[2];
571
+ }
572
+ return $return;
573
+ }
574
+
575
+ function ecwid_productbrowser_shortcode($shortcode_params) {
576
+ global $ecwid_seo_product_title;
577
+ $store_id = get_ecwid_store_id();
578
+ $list_of_views = array('list','grid','table');
579
+
580
+ $ecwid_pb_categoriesperrow = get_option('ecwid_pb_categoriesperrow');
581
+ $ecwid_pb_productspercolumn_grid = get_option('ecwid_pb_productspercolumn_grid');
582
+ $ecwid_pb_productsperrow_grid = get_option('ecwid_pb_productsperrow_grid');
583
+ $ecwid_pb_productsperpage_list = get_option('ecwid_pb_productsperpage_list');
584
+ $ecwid_pb_productsperpage_table = get_option('ecwid_pb_productsperpage_table');
585
+ $ecwid_pb_defaultview = get_option('ecwid_pb_defaultview');
586
+ $ecwid_pb_searchview = get_option('ecwid_pb_searchview');
587
+
588
+ $ecwid_mobile_catalog_link = get_option('ecwid_mobile_catalog_link');
589
+ $ecwid_default_category_id =
590
+ !empty($shortcode_params) && array_key_exists('default_category_id', $shortcode_params)
591
+ ? $shortcode_params['default_category_id']
592
+ : get_option('ecwid_default_category_id');
593
+
594
+ if (empty($ecwid_pb_categoriesperrow)) {
595
+ $ecwid_pb_categoriesperrow = 3;
596
+ }
597
+ if (empty($ecwid_pb_productspercolumn_grid)) {
598
+ $ecwid_pb_productspercolumn_grid = 3;
599
+ }
600
+ if (empty($ecwid_pb_productsperrow_grid)) {
601
+ $ecwid_pb_productsperrow_grid = 3;
602
+ }
603
+ if (empty($ecwid_pb_productsperpage_list)) {
604
+ $ecwid_pb_productsperpage_list = 10;
605
+ }
606
+ if (empty($ecwid_pb_productsperpage_table)) {
607
+ $ecwid_pb_productsperpage_table = 20;
608
+ }
609
+
610
+ if (empty($ecwid_pb_defaultview) || !in_array($ecwid_pb_defaultview, $list_of_views)) {
611
+ $ecwid_pb_defaultview = 'grid';
612
+ }
613
+ if (empty($ecwid_pb_searchview) || !in_array($ecwid_pb_searchview, $list_of_views)) {
614
+ $ecwid_pb_searchview = 'list';
615
+ }
616
+
617
+ if (empty($ecwid_mobile_catalog_link)) {
618
+ $ecwid_mobile_catalog_link = "http://" . APP_ECWID_COM . "/jsp/{$store_id}/catalog";
619
+ }
620
+
621
+ if (empty($ecwid_default_category_id)) {
622
+ $ecwid_default_category_str = '';
623
+ } else {
624
+ $ecwid_default_category_str = ',"defaultCategoryId='. $ecwid_default_category_id .'"';
625
+ }
626
+
627
+ $ecwid_open_product = '';
628
+ $plain_content = '';
629
+
630
+ if (ecwid_can_display_html_catalog()) {
631
+ $params = ecwid_parse_escaped_fragment($_GET['_escaped_fragment_']);
632
+ include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
633
+ include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/EcwidCatalog.php';
634
+
635
+ $page_url = get_page_link();
636
+
637
+ $catalog = new EcwidCatalog($store_id, $page_url);
638
+
639
+ if (isset($params['mode']) && !empty($params['mode'])) {
640
+ if ($params['mode'] == 'product') {
641
+ $plain_content = $catalog->get_product($params['id']);
642
+ $plain_content .= '<script type="text/javascript"> if (!document.location.hash) document.location.hash = "!/~/product/id='. intval($params['id']) .'";</script>';
643
+ } elseif ($params['mode'] == 'category') {
644
+ $plain_content = $catalog->get_category($params['id']);
645
+ $ecwid_default_category_str = ',"defaultCategoryId=' . $params['id'] . '"';
646
+ }
647
+
648
+ } else {
649
+ $plain_content = $catalog->get_category(intval($ecwid_default_category_id));
650
+ }
651
+ } else {
652
+ $plain_content = '<noscript>Your browser does not support JavaScript.<a href="' . $ecwid_mobile_catalog_link .'">HTML version of this store</a></noscript>';
653
+ }
654
+
655
+ $s = <<<EOT
656
+ <script 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);</script>
657
+ {$plain_content}
658
+ EOT;
659
+ return ecwid_wrap_shortcode_content($s);
660
+ }
661
+
662
+
663
+
664
+ function ecwid_store_activate() {
665
+ $my_post = array();
666
+ $content = <<<EOT
667
+ <!-- Ecwid code. Please do not remove this line otherwise your Ecwid shopping cart will not work properly. --> [ecwid_minicart] [ecwid_searchbox] [ecwid_categories] [ecwid_productbrowser] <!-- Ecwid code end -->
668
+ EOT;
669
+ add_option("ecwid_store_page_id", '', '', 'yes');
670
+ add_option("ecwid_store_id", ECWID_DEMO_STORE_ID, '', 'yes');
671
+
672
+ add_option("ecwid_enable_minicart", 'Y', '', 'yes');
673
+ add_option("ecwid_show_categories", '', '', 'yes');
674
+ add_option("ecwid_show_search_box", '', '', 'yes');
675
+
676
+ add_option("ecwid_pb_categoriesperrow", '3', '', 'yes');
677
+
678
+ add_option("ecwid_pb_productspercolumn_grid", '3', '', 'yes');
679
+ add_option("ecwid_pb_productsperrow_grid", '3', '', 'yes');
680
+ add_option("ecwid_pb_productsperpage_list", '10', '', 'yes');
681
+ add_option("ecwid_pb_productsperpage_table", '20', '', 'yes');
682
+
683
+ add_option("ecwid_pb_defaultview", 'grid', '', 'yes');
684
+ add_option("ecwid_pb_searchview", 'list', '', 'yes');
685
+
686
+ add_option("ecwid_mobile_catalog_link", '', '', 'yes');
687
+ add_option("ecwid_default_category_id", '', '', 'yes');
688
+
689
+ add_option('ecwid_is_api_enabled', 'on', '', 'yes');
690
+ add_option('ecwid_api_check_time', 0, '', 'yes');
691
+
692
+ add_option('ecwid_show_vote_message', true);
693
+
694
+ add_option("ecwid_sso_secret_key", '', '', 'yes');
695
+
696
+ add_option("ecwid_installation_date", time());
697
+
698
+ $id = get_option("ecwid_store_page_id");
699
+ $_tmp_page = null;
700
+ if (!empty($id) and ($id > 0)) {
701
+ $_tmp_page = get_post($id);
702
+ }
703
+ if ($_tmp_page !== null) {
704
+ $my_post = array();
705
+ $my_post['ID'] = $id;
706
+ $my_post['post_status'] = 'publish';
707
+ wp_update_post( $my_post );
708
+
709
+ } else {
710
+ $my_post['post_title'] = __('Store', 'ecwid-shopping-cart');
711
+ $my_post['post_content'] = $content;
712
+ $my_post['post_status'] = 'publish';
713
+ $my_post['post_author'] = 1;
714
+ $my_post['post_type'] = 'page';
715
+ $id = wp_insert_post( $my_post );
716
+ update_option('ecwid_store_page_id', $id);
717
+ }
718
+
719
+ }
720
+
721
+ function ecwid_show_admin_messages() {
722
+ if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID && $_GET['page'] != 'ecwid') {
723
+
724
+ $ecwid_page_id = get_option("ecwid_store_page_id");
725
+ $page_url = get_page_link($ecwid_page_id);
726
+
727
+ $message = sprintf(
728
+ __('<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.', 'ecwid-shopping-cart'),
729
+ $page_url
730
+ );
731
+
732
+ ecwid_show_admin_message($message);
733
+ }
734
+ $install_date = get_option('ecwid_installation_date');
735
+ if (!$install_date) {
736
+ add_option('ecwid_installation_date', time());
737
+ } else if (ecwid_is_paid_account() && $install_date + 60*60*24*30 < time() && get_option('ecwid_show_vote_message')) {
738
+ $message = sprintf(
739
+ __('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)', 'ecwid-shopping-cart'),
740
+ 'target="_blank" href="http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart"'
741
+ );
742
+
743
+ ecwid_show_admin_message($message);
744
+ }
745
+ }
746
+
747
+ function ecwid_show_admin_message($message) {
748
+ $class = version_compare(get_bloginfo('version'), '3.0') < 0 ? "updated fade" : "update-nag";
749
+ echo sprintf('<div class="%s" style="margin-top: 5px">%s</div>', $class, $message);
750
+ }
751
+
752
+ function ecwid_store_deactivate() {
753
+ $ecwid_page_id = get_option("ecwid_store_page_id");
754
+ $_tmp_page = null;
755
+ if (!empty($ecwid_page_id) and ($ecwid_page_id > 0)) {
756
+ $_tmp_page = get_page($ecwid_page_id);
757
+ if ($_tmp_page !== null) {
758
+ $my_post = array();
759
+ $my_post['ID'] = $ecwid_page_id;
760
+ $my_post['post_status'] = 'draft';
761
+ wp_update_post( $my_post );
762
+ } else {
763
+ update_option('ecwid_store_page_id', '');
764
+ }
765
+ }
766
+
767
+ }
768
+
769
+ function ecwid_abs_intval($value) {
770
+ if (!is_null($value))
771
+ return abs(intval($value));
772
+ else
773
+ return null;
774
+ }
775
+
776
+ function ecwid_options_add_page() {
777
+
778
+
779
+ add_menu_page(
780
+ __('Ecwid shopping cart settings', 'ecwid-shopping-cart'),
781
+ __('Ecwid Store', 'ecwid-shopping-cart'),
782
+ 'manage_options',
783
+ 'ecwid',
784
+ 'ecwid_general_settings_do_page'
785
+ );
786
+
787
+ add_submenu_page(
788
+ 'ecwid',
789
+ __('General settings', 'ecwid-shopping-cart'),
790
+ __('General', 'ecwid-shopping-cart'),
791
+ 'manage_options',
792
+ 'ecwid',
793
+ 'ecwid_general_settings_do_page'
794
+ );
795
+
796
+ add_submenu_page(
797
+ 'ecwid',
798
+ __('Appearance settings', 'ecwid-shopping-cart'),
799
+ __('Appearance', 'ecwid-shopping-cart'),
800
+ 'manage_options',
801
+ 'ecwid-appearance',
802
+ 'ecwid_appearance_settings_do_page'
803
+ );
804
+
805
+ add_submenu_page(
806
+ 'ecwid',
807
+ __('Advanced settings', 'ecwid-shopping-cart'),
808
+ __('Advanced', 'ecwid-shopping-cart'),
809
+ 'manage_options',
810
+ 'ecwid-advanced',
811
+ 'ecwid_advanced_settings_do_page'
812
+ );
813
+ //add_options_page('Ecwid shopping cart settings', 'Ecwid shopping cart', 'manage_options', 'ecwid_options_page', 'ecwid_options_do_page');
814
+ }
815
+
816
+ function ecwid_register_admin_styles() {
817
+ global $version;
818
+
819
+ wp_register_style('ecwid-admin-css', plugins_url('ecwid-shopping-cart/css/admin.css'), array(), '', 'all');
820
+ wp_enqueue_style('ecwid-admin-css');
821
+
822
+ if (version_compare($version, '3.8-beta') > 0) {
823
+ wp_register_style('ecwid-admin38-css', plugins_url('ecwid-shopping-cart/css/admin.3.8.css'), array('ecwid-admin-css'), '', 'all');
824
+ wp_enqueue_style('ecwid-admin38-css');
825
+ }
826
+ }
827
+
828
+ function ecwid_register_settings_styles() {
829
+ global $version;
830
+
831
+ wp_register_style('ecwid-settings-pure-css', plugins_url('ecwid-shopping-cart/css/pure-min.css'), array(), '', 'all');
832
+ wp_enqueue_style('ecwid-settings-pure-css');
833
+ wp_register_style('ecwid-settings-css', plugins_url('ecwid-shopping-cart/css/settings.css'), array(), '', 'all');
834
+ wp_enqueue_style('ecwid-settings-css');
835
+
836
+ if (version_compare($version, '3.8-beta') > 0) {
837
+ wp_register_style('ecwid-settings38-css', plugins_url('ecwid-shopping-cart/css/settings.3.8.css'), array('ecwid-settings-css'), '', 'all');
838
+ wp_enqueue_style('ecwid-settings38-css');
839
+ }}
840
+
841
+ function ecwid_plugin_actions($links) {
842
+ $settings_link = "<a href='admin.php?page=ecwid'>"
843
+ . (get_ecwid_store_id() == ECWID_DEMO_STORE_ID ? __('Setup', 'ecwid-shopping-cart') : __('Settings') )
844
+ . "</a>";
845
+ array_unshift( $links, $settings_link );
846
+
847
+ return $links;
848
+ }
849
+
850
+
851
+ function ecwid_settings_api_init() {
852
+
853
+ if (isset($_POST['settings_section'])) switch ($_POST['settings_section']) {
854
+ case 'appearance':
855
+ register_setting('ecwid_options_page', 'ecwid_enable_minicart');
856
+
857
+ register_setting('ecwid_options_page', 'ecwid_show_categories');
858
+ register_setting('ecwid_options_page', 'ecwid_show_search_box');
859
+
860
+ register_setting('ecwid_options_page', 'ecwid_pb_categoriesperrow', 'ecwid_abs_intval');
861
+ register_setting('ecwid_options_page', 'ecwid_pb_productspercolumn_grid', 'ecwid_abs_intval');
862
+ register_setting('ecwid_options_page', 'ecwid_pb_productsperrow_grid', 'ecwid_abs_intval');
863
+ register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_list', 'ecwid_abs_intval');
864
+ register_setting('ecwid_options_page', 'ecwid_pb_productsperpage_table', 'ecwid_abs_intval');
865
+ register_setting('ecwid_options_page', 'ecwid_pb_defaultview');
866
+ register_setting('ecwid_options_page', 'ecwid_pb_searchview');
867
+ break;
868
+
869
+ case 'general':
870
+ register_setting('ecwid_options_page', 'ecwid_store_id','ecwid_abs_intval' );
871
+ break;
872
+
873
+ case 'advanced':
874
+ register_setting('ecwid_options_page', 'ecwid_default_category_id');
875
+ register_setting('ecwid_options_page', 'ecwid_sso_secret_key');
876
+ break;
877
+
878
+ }
879
+ if (isset($_POST['ecwid_store_id'])) {
880
+ update_option('ecwid_is_api_enabled', 'off');
881
+ update_option('ecwid_api_check_time', 0);
882
+ }
883
+ }
884
+
885
+ function ecwid_common_admin_scripts() {
886
+
887
+ wp_register_script('ecwid-admin-js', plugins_url('ecwid-shopping-cart/js/admin.js'), array(), '', '');
888
+ wp_enqueue_script('ecwid-admin-js');
889
+
890
+ wp_register_script('ecwid-modernizr-js', plugins_url('ecwid-shopping-cart/js/modernizr.js'), array(), '', '');
891
+ wp_enqueue_script('ecwid-modernizr-js');
892
+ }
893
+
894
+ function ecwid_general_settings_do_page() {
895
+
896
+ if (get_ecwid_store_id() == ECWID_DEMO_STORE_ID) {
897
+ require_once plugin_dir_path(__FILE__) . '/templates/general-settings-initial.php';
898
+ } else {
899
+ require_once plugin_dir_path(__FILE__) . '/templates/general-settings.php';
900
+ }
901
+ }
902
+
903
+ function ecwid_advanced_settings_do_page() {
904
+ wp_register_script('ecwid-advanced-js', plugins_url('ecwid-shopping-cart/js/advanced.js'), array(), '', '');
905
+ wp_enqueue_script('ecwid-advanced-js');
906
+
907
+ $categories = false;
908
+ if (ecwid_is_paid_account()) {
909
+ $api = ecwid_new_product_api();
910
+ $categories = $api->get_all_categories();
911
+ $by_id = array();
912
+ foreach ($categories as $key => $category) {
913
+ $by_id[$category['id']] = $category;
914
+ }
915
+ unset($categories);
916
+
917
+ foreach ($by_id as $id => $category) {
918
+ $name_path = array($category['name']);
919
+ while (isset($category['parentId'])) {
920
+ $category = $by_id[$category['parentId']];
921
+ $name_path[] = $category['name'];
922
+ }
923
+
924
+ $by_id[$id]['path'] = array_reverse($name_path);
925
+ $by_id[$id]['path_str'] = implode(" > ", $by_id[$id]['path']);
926
+ }
927
+
928
+ function sort_by_path($a, $b) {
929
+ return strcmp($a['path_str'], $b['path_str']);
930
+ }
931
+
932
+ uasort($by_id, 'sort_by_path');
933
+
934
+ $categories = $by_id;
935
+ }
936
+
937
+ require_once plugin_dir_path(__FILE__) . '/templates/advanced-settings.php';
938
+ }
939
+
940
+ function ecwid_appearance_settings_do_page() {
941
+
942
+ wp_register_script('ecwid-appearance-js', plugins_url('ecwid-shopping-cart/js/appearance.js'), array(), '', '');
943
+ wp_enqueue_script('ecwid-appearance-js');
944
+
945
+ $disabled = false;
946
+ if (!empty($ecwid_page_id) && ($ecwid_page_id > 0)) {
947
+ $_tmp_page = get_post($ecwid_page_id);
948
+ $content = $_tmp_page->post_content;
949
+ if ( (strpos($content, "[ecwid_productbrowser]") === false) && (strpos($content, "xProductBrowser") !== false) )
950
+ $disabled = true;
951
+ }
952
+ // $disabled_str is used in appearance settings template
953
+ if ($disabled)
954
+ $disabled_str = 'disabled = "disabled"';
955
+ else
956
+ $disabled_str = "";
957
+
958
+ require_once ECWID_PLUGIN_DIR . 'templates/appearance-settings.php';
959
+ }
960
+
961
+ function get_ecwid_store_id() {
962
+ static $store_id = null;
963
+ if (is_null($store_id)) {
964
+ $store_id = get_option('ecwid_store_id');
965
+ if (empty($store_id))
966
+ $store_id = ECWID_DEMO_STORE_ID;
967
+ }
968
+ return $store_id;
969
+ }
970
+
971
+ function ecwid_dashboard_widget_function() {
972
+ echo "<a href=\"https://my.ecwid.com/\" target=\"_blank\">Go to the Ecwid Control Panel</a><br /><br /><a href=\"http://kb.ecwid.com/\" target=\"_blank\">Ecwid Knowledge Base</a>&nbsp;|&nbsp;<a href=\"http://www.ecwid.com/forums/\" target=\"_blank\">Ecwid Forums</a>";
973
+ }
974
+
975
+ function ecwid_add_dashboard_widgets() {
976
+ if (current_user_can('administrator')) {
977
+ wp_add_dashboard_widget('ecwid_dashboard_widget','Ecwid Links', 'ecwid_dashboard_widget_function');
978
+ }
979
+ }
980
+
981
+
982
+ class EcwidMinicartWidget extends WP_Widget {
983
+
984
+ function EcwidMinicartWidget() {
985
+ $widget_ops = array('classname' => 'widget_ecwid_minicart', 'description' => __("Your store's minicart", 'ecwid-shopping-cart') );
986
+ $this->WP_Widget('ecwidminicart', __('Ecwid Shopping Bag (Normal)', 'ecwid-shopping-cart'), $widget_ops);
987
+
988
+ }
989
+
990
+ function widget($args, $instance) {
991
+ extract($args);
992
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
993
+
994
+ echo $before_widget;
995
+
996
+ if ( $title )
997
+ echo $before_title . $title . $after_title;
998
+
999
+ echo '<div>';
1000
+ echo ecwid_get_scriptjs_code();
1001
+
1002
+ $ecwid_page_id = get_option("ecwid_store_page_id");
1003
+ $page_url = get_page_link($ecwid_page_id);
1004
+ $_tmp_page = get_page($ecwid_page_id);
1005
+ if (!empty($page_url) && $_tmp_page != null)
1006
+ echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
1007
+ echo <<<EOT
1008
+ <script type="text/javascript"> xMinicart("style="); </script>
1009
+ </div>
1010
+ EOT;
1011
+
1012
+ echo $after_widget;
1013
+ }
1014
+
1015
+ function update($new_instance, $old_instance){
1016
+ $instance = $old_instance;
1017
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1018
+
1019
+ return $instance;
1020
+ }
1021
+
1022
+ function form($instance){
1023
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1024
+
1025
+ $title = htmlspecialchars($instance['title']);
1026
+
1027
+ 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>';
1028
+ }
1029
+
1030
+ }
1031
+
1032
+ class EcwidMinicartMiniViewWidget extends WP_Widget {
1033
+
1034
+ function EcwidMinicartMiniViewWidget() {
1035
+ $widget_ops = array('classname' => 'widget_ecwid_minicart_miniview', 'description' => __("Your store's minicart", 'ecwid-shopping-cart') );
1036
+ $this->WP_Widget('ecwidminicart_miniview', __('Ecwid Shopping Bag (Mini view)', 'ecwid-shopping-cart'), $widget_ops);
1037
+ }
1038
+
1039
+ function widget($args, $instance) {
1040
+ extract($args);
1041
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1042
+
1043
+ echo $before_widget;
1044
+
1045
+ if ( $title )
1046
+ echo $before_title . $title . $after_title;
1047
+
1048
+ echo '<div>';
1049
+ echo ecwid_get_scriptjs_code();
1050
+
1051
+ $ecwid_page_id = get_option("ecwid_store_page_id");
1052
+ $page_url = get_page_link($ecwid_page_id);
1053
+ $_tmp_page = get_page($ecwid_page_id);
1054
+ if (!empty($page_url) && $_tmp_page != null)
1055
+ echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
1056
+ echo <<<EOT
1057
+ <script type="text/javascript"> xMinicart("style=left:10px","layout=Mini"); </script>
1058
+ </div>
1059
+ EOT;
1060
+
1061
+ echo $after_widget;
1062
+ }
1063
+
1064
+ function update($new_instance, $old_instance){
1065
+ $instance = $old_instance;
1066
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1067
+
1068
+ return $instance;
1069
+ }
1070
+
1071
+ function form($instance){
1072
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1073
+
1074
+ $title = htmlspecialchars($instance['title']);
1075
+
1076
+ 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>';
1077
+ }
1078
+
1079
+ }
1080
+
1081
+
1082
+ class EcwidSearchWidget extends WP_Widget {
1083
+
1084
+ function EcwidSearchWidget() {
1085
+ $widget_ops = array('classname' => 'widget_ecwid_search', 'description' => __("Your store's search box", 'ecwid-shopping-cart'));
1086
+ $this->WP_Widget('ecwidsearch', __('Ecwid Search Box', 'ecwid-shopping-cart'), $widget_ops);
1087
+ }
1088
+
1089
+ function widget($args, $instance) {
1090
+ extract($args);
1091
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1092
+
1093
+ echo $before_widget;
1094
+
1095
+ if ( $title )
1096
+ echo $before_title . $title . $after_title;
1097
+
1098
+ echo '<div>';
1099
+ echo ecwid_get_scriptjs_code();
1100
+
1101
+ $ecwid_page_id = get_option("ecwid_store_page_id");
1102
+ $page_url = get_page_link($ecwid_page_id);
1103
+ $_tmp_page = get_page($ecwid_page_id);
1104
+ if (!empty($page_url) && $_tmp_page != null)
1105
+ echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
1106
+ echo <<<EOT
1107
+ <script type="text/javascript"> xSearchPanel("style="); </script>
1108
+ </div>
1109
+ EOT;
1110
+
1111
+ echo $after_widget;
1112
+ }
1113
+
1114
+ function update($new_instance, $old_instance){
1115
+ $instance = $old_instance;
1116
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1117
+
1118
+ return $instance;
1119
+ }
1120
+
1121
+ function form($instance){
1122
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1123
+
1124
+ $title = htmlspecialchars($instance['title']);
1125
+
1126
+ 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>';
1127
+ }
1128
+
1129
+ }
1130
+
1131
+ class EcwidVCategoriesWidget extends WP_Widget {
1132
+
1133
+ function EcwidVCategoriesWidget() {
1134
+ $widget_ops = array('classname' => 'widget_ecwid_vcategories', 'description' => __('Vertical menu of categories', 'ecwid-shopping-cart'));
1135
+ $this->WP_Widget('ecwidvcategories', __('Ecwid Vertical Categories', 'ecwid-shopping-cart'), $widget_ops);
1136
+ }
1137
+
1138
+ function widget($args, $instance) {
1139
+ extract($args);
1140
+ $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title']);
1141
+
1142
+ echo $before_widget;
1143
+
1144
+ if ( $title )
1145
+ echo $before_title . $title . $after_title;
1146
+
1147
+ echo '<div>';
1148
+ echo ecwid_get_scriptjs_code();
1149
+ $ecwid_page_id = get_option("ecwid_store_page_id");
1150
+ $page_url = get_page_link($ecwid_page_id);
1151
+ $_tmp_page = get_page($ecwid_page_id);
1152
+ if (!empty($page_url) && $_tmp_page != null)
1153
+ echo "<script type=\"text/javascript\">var ecwid_ProductBrowserURL = \"$page_url\";</script>";
1154
+ echo <<<EOT
1155
+ <script type="text/javascript"> xVCategories("style="); </script>
1156
+ </div>
1157
+ EOT;
1158
+
1159
+ echo $after_widget;
1160
+ }
1161
+
1162
+ function update($new_instance, $old_instance){
1163
+ $instance = $old_instance;
1164
+ $instance['title'] = strip_tags(stripslashes($new_instance['title']));
1165
+
1166
+ return $instance;
1167
+ }
1168
+
1169
+ function form($instance){
1170
+ $instance = wp_parse_args( (array) $instance, array('title'=>'') );
1171
+
1172
+ $title = htmlspecialchars($instance['title']);
1173
+
1174
+ 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>';
1175
+ }
1176
+
1177
+ }
1178
+
1179
+
1180
+ function ecwid_sidebar_widgets_init() {
1181
+ register_widget('EcwidMinicartWidget');
1182
+ register_widget('EcwidSearchWidget');
1183
+ register_widget('EcwidVCategoriesWidget');
1184
+ register_widget('EcwidMinicartMiniViewWidget');
1185
+ }
1186
+
1187
+ add_action('widgets_init', 'ecwid_sidebar_widgets_init');
1188
+
1189
+ function ecwid_encode_json($data) {
1190
+ if(version_compare(PHP_VERSION,"5.2.0",">=")) {
1191
+ return json_encode($data);
1192
+ } else {
1193
+ include_once(ABSPATH . 'wp-content/plugins/ecwid-shopping-cart/lib/JSON.php');
1194
+ $json_parser = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
1195
+ return $json_parser->encode($data);
1196
+ }
1197
+ }
1198
+
1199
+
1200
+
1201
+ function ecwid_sso() {
1202
+ $key = get_option('ecwid_sso_secret_key');
1203
+ if (empty($key)) {
1204
+ return "";
1205
+ }
1206
+
1207
+ global $current_user;
1208
+ get_currentuserinfo();
1209
+
1210
+ if ($current_user->ID) {
1211
+ $user_data = array(
1212
+ 'appId' => "wp_" . get_ecwid_store_id(),
1213
+ 'userId' => "{$current_user->ID}",
1214
+ 'profile' => array(
1215
+ 'email' => $current_user->user_email,
1216
+ 'billingPerson' => array(
1217
+ 'name' => $current_user->display_name
1218
+ )
1219
+ )
1220
+ );
1221
+ $user_data = base64_encode(ecwid_encode_json($user_data));
1222
+ $time = time();
1223
+ $hmac = ecwid_hmacsha1("$user_data $time", $key);
1224
+ return "<script> var ecwid_sso_profile='$user_data $hmac $time' </script>";
1225
+ }
1226
+ else {
1227
+ return "<script> var ecwid_sso_profile='' </script>";
1228
+ }
1229
+
1230
+
1231
+ }
1232
+
1233
+ // from: http://www.php.net/manual/en/function.sha1.php#39492
1234
+
1235
+ function ecwid_hmacsha1($data, $key) {
1236
+ if (function_exists("hash_hmac")) {
1237
+ return hash_hmac('sha1', $data, $key);
1238
+ } else {
1239
+ $blocksize=64;
1240
+ $hashfunc='sha1';
1241
+ if (strlen($key)>$blocksize)
1242
+ $key=pack('H*', $hashfunc($key));
1243
+ $key=str_pad($key,$blocksize,chr(0x00));
1244
+ $ipad=str_repeat(chr(0x36),$blocksize);
1245
+ $opad=str_repeat(chr(0x5c),$blocksize);
1246
+ $hmac = pack(
1247
+ 'H*',$hashfunc(
1248
+ ($key^$opad).pack(
1249
+ 'H*',$hashfunc(
1250
+ ($key^$ipad).$data
1251
+ )
1252
+ )
1253
+ )
1254
+ );
1255
+ return bin2hex($hmac);
1256
+ }
1257
+ }
1258
+
1259
+ function ecwid_can_display_html_catalog()
1260
+ {
1261
+ if (!isset($_GET['_escaped_fragment_'])) return;
1262
+
1263
+ $api = ecwid_new_product_api();
1264
+ if (!$api) return;
1265
+
1266
+ $profile = $api->get_profile();
1267
+ if (!$profile) return;
1268
+
1269
+ return $profile['closed'] != true;
1270
+ }
1271
+
1272
+ function ecwid_is_paid_account()
1273
+ {
1274
+ return ecwid_is_api_enabled() && get_ecwid_store_id() != ECWID_DEMO_STORE_ID;
1275
+ }
1276
+
1277
+ function ecwid_is_api_enabled()
1278
+ {
1279
+ $ecwid_is_api_enabled = get_option('ecwid_is_api_enabled');
1280
+ $ecwid_api_check_time = get_option('ecwid_api_check_time');
1281
+ $now = time();
1282
+
1283
+ if ($now > ($ecwid_api_check_time + 60 * 60 * 3)) {
1284
+ // check whether API is available once in 3 hours
1285
+ $ecwid = ecwid_new_product_api();
1286
+ $ecwid_is_api_enabled = ($ecwid->is_api_enabled() ? 'on' : 'off');
1287
+ update_option('ecwid_is_api_enabled', $ecwid_is_api_enabled);
1288
+ update_option('ecwid_api_check_time', $now);
1289
+ }
1290
+
1291
+ if ('on' == $ecwid_is_api_enabled)
1292
+ return true;
1293
+ else
1294
+ return false;
1295
+ }
1296
+
1297
+ function ecwid_new_product_api()
1298
+ {
1299
+ include_once WP_PLUGIN_DIR . '/ecwid-shopping-cart/lib/ecwid_product_api.php';
1300
+ $ecwid_store_id = intval(get_ecwid_store_id());
1301
+ $api = new EcwidProductApi($ecwid_store_id);
1302
+
1303
+ return $api;
1304
+ }
1305
+ ?>
fonts/ecwid-logo.eot ADDED
Binary file
images/grid.png ADDED
Binary file
images/grid.svg ADDED
@@ -0,0 +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>
images/list.png ADDED
Binary file
images/list.svg ADDED
@@ -0,0 +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>
images/store_inprogress.png CHANGED
Binary file
images/store_ready.png CHANGED
Binary file
images/table.png ADDED
Binary file
images/table.svg ADDED
@@ -0,0 +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>
js/appearance.js CHANGED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ if (!Modernizr.svg) {
2
+ for (var i in {grid:1,list:1,table:1}) {
3
+ var parent = jQuery('.' + i + ' svg').parent();
4
+ parent.find('svg').remove();
5
+ parent.append('<div class="fallback-image ' + i + '-image"></div>');
6
+ }
7
+ }
js/modernizr.js ADDED
@@ -0,0 +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);
languages/ecwid-shopping-cart-de_DE.mo ADDED
Binary file
languages/ecwid-shopping-cart-de_DE.po ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid "Ecwid Shopping Cart"
2
+ msgstr ""
3
+ 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."
4
+ msgstr ""
5
+ msgid "Ecwid Team"
6
+ msgstr ""
7
+ msgid "Get help"
8
+ msgstr "Hilfe"
9
+ msgid "Go to Ecwid site"
10
+ msgstr "zur Ecwid-Website"
11
+ msgid "Visit storefront"
12
+ msgstr "zum Shop"
13
+ msgid "Manage my store"
14
+ msgstr "Shop verwalten"
15
+ msgid "Manage plugin settings"
16
+ msgstr "Plugin-Einstellungen verwalten"
17
+ msgid "→ Sell on Facebook"
18
+ msgstr "→ auf Facebook verkaufen"
19
+ msgid "Online store powered by <a %s>Ecwid</a>"
20
+ msgstr ""
21
+ msgid "Store"
22
+ msgstr "Shop"
23
+ 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."
24
+ msgstr "<strong>Ihr Ecwid-Onlineshop steht gleich bereit</strong>. Bitte rufen Sie die <a target=\"_blank\" href=\"%s\">erstellte Seite</a> auf, um Ihren Shop mit Demoartikeln anzuzeigen. Um die Installation abzuschließen, gehen Sie bitte zu den <a href=\"admin.php?page=ecwid\"><strong>Ecwid-Einstellungen</strong></a> und konfigurieren Sie das Plugin."
25
+ 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)"
26
+ msgstr ""
27
+ msgid "Ecwid shopping cart settings"
28
+ msgstr ""
29
+ msgid "Ecwid Store"
30
+ msgstr "Ecwid-Onlineshop"
31
+ msgid "General settings"
32
+ msgstr "Allgemeine Einstellungen"
33
+ msgid "General"
34
+ msgstr "Allgemein"
35
+ msgid "Appearance settings"
36
+ msgstr "Anzeigeneinstellungen"
37
+ msgid "Appearance"
38
+ msgstr "Anzeige"
39
+ msgid "Advanced settings"
40
+ msgstr "Erweiterte Einstellungen"
41
+ msgid "Advanced"
42
+ msgstr "Erweitert"
43
+ msgid "Setup"
44
+ msgstr ""
45
+ msgid "Your store's minicart"
46
+ msgstr "Miniwarenkorb Ihres Shops"
47
+ msgid "Ecwid Shopping Bag (Normal)"
48
+ msgstr "Ecwid-Warenkorb (normal)"
49
+ msgid "Ecwid Shopping Bag (Mini view)"
50
+ msgstr "Ecwid-Warenkorb (Miniansicht)"
51
+ msgid "Your store's search box"
52
+ msgstr "Suchfeld Ihres Shops"
53
+ msgid "Ecwid Search Box"
54
+ msgstr "Ecwid-Suchfeld"
55
+ msgid "Vertical menu of categories"
56
+ msgstr "Vertikale Kategoriennavigation"
57
+ msgid "Ecwid Vertical Categories"
58
+ msgstr "Ecwid vertikale Kategorien"
59
+ msgid "Price"
60
+ msgstr ""
61
+ msgid "Ecwid Shopping Cart - Advanced settings"
62
+ msgstr "Ecwid-Onlineshop ‒ Erweiterte Einstellungen"
63
+ msgid "Category shown by default"
64
+ msgstr "standardmäßig angezeigte Kategorie"
65
+ msgid "Store root category"
66
+ msgstr "Shop-Grundkategorie"
67
+ msgid "Default category ID"
68
+ msgstr "Standardkategorien-ID"
69
+ 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."
70
+ msgstr "Standardmäßig zeigt der Shop eine Liste von Grundkategorien an. Sie können diese Einstellung überschreiben und eine andere Kategorie anzeigen, wenn Kunden Ihren Shop zum ersten Mal öffnen. Dies ist sinnvoll, wenn Sie nur eine Kategorie haben oder allen neuen Besuchern einen bestimmten Satz von Artikeln (z.B. \"Ausgewählte Produkte\") anzeigen möchten."
71
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
72
+ msgstr "Zur Einstellung dieser Option <a %s>suchen Sie die ID der nötigen Kategorie</a> und speichern Sie diese hier."
73
+ msgid "Single Sign-On Secret Key"
74
+ msgstr "Single-Sign-on-Sicherheitsschlüssel"
75
+ 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."
76
+ msgstr "Diese optionale Funktion bietet Single-Sign-On: Wenn Kunden auf Ihrer Website eingeloggt sind, sind sie automatisch auch in Ihrem Ecwid-Onlineshop eingeloggt, selbst wenn sie bisher noch kein Konto für den Shop hatten. Die Aktivierung dieser Funktion ist sinnvoll, wenn Ihre Besucher eigentlich Konten auf Ihrer WordPress-Website erstellen."
77
+ 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."
78
+ msgstr "Zur Aktivierung dieser Funktion müssen Sie einen Sicherheitsschlüssel senden. Diesen Schlüssel finden Sie in Ihrem Ecwid-Steuermenü unter \"Systemeinstellungen > API > Single-Sign-on-API\". Diese Funktion ist nur bei <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">kostenpflichtigen Paketen</a> verfügbar."
79
+ msgid "Save changes"
80
+ msgstr "Änderungen speichern"
81
+ msgid "Ecwid Shopping Cart - Appearance settings"
82
+ msgstr "Ecwid-Onlineshop ‒ Anzeigeneinstellungen"
83
+ msgid "Display search box above products"
84
+ msgstr "Suchfeld oberhalb der Artikel anzeigen"
85
+ msgid "Or you can add search box to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
86
+ msgstr "Oder fügen Sie der Toolbar Ihrer Website mit den <a href=\"widgets.php\">vorhandenen WordPress-Widgets</a> ein Suchfeld hinzu."
87
+ msgid "Display horizontal categories above products"
88
+ msgstr "horizontale Kategorien oberhalb der Artikel anzeigen"
89
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
90
+ msgstr "Oder fügen Sie der Toolbar Ihrer Website mit den <a href=\"widgets.php\">vorhandenen WordPress-Widgets</a> vertikale Kategorien hinzu."
91
+ msgid "Enable minicart attached to horizontal categories"
92
+ msgstr "Miniwarenkorb Ihres Shops an horizontale Kategorien heften"
93
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar."
94
+ msgstr "Diese Option sollten Sie deaktivieren, wenn Sie den Miniwarenkorb der Seitenleiste Ihrer Website hinzugefügt haben."
95
+ msgid "Number of categories per row"
96
+ msgstr "Anzahl Kategorien pro Zeile"
97
+ msgid "Number of products per page"
98
+ msgstr "Anzahl Kategorien pro Seite"
99
+ msgid "Grid view"
100
+ msgstr "Gitteransicht"
101
+ msgid "List view"
102
+ msgstr "Listenansicht"
103
+ msgid "Table view"
104
+ msgstr "Tabellenansicht"
105
+ 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."
106
+ msgstr "Hier können Sie einstellen, wie viele Artikel pro Seite angezeigt werden sollen. Diese Optionen legen Maximalwerte fest. Falls nicht ausreichend Platz ist, um alle Artikelspalten anzuzeigen, passt Ecwid zur Berücksichtigung aller Artikel die Anzahl der Spalten an."
107
+ msgid "Default view mode on product pages"
108
+ msgstr "Standardanzeigemodus auf Artikelseiten"
109
+ msgid "Grid"
110
+ msgstr "Gitter"
111
+ msgid "List"
112
+ msgstr "Liste"
113
+ msgid "Table"
114
+ msgstr "Tabelle"
115
+ msgid "Default view mode on search results"
116
+ msgstr "Standardanzeigemodus für Suchergebnisse"
117
+ msgid "Store powered by Ecwid"
118
+ msgstr ""
119
+ msgid "Ecwid Shopping Cart - General settings"
120
+ msgstr "Ecwid-Onlineshop ‒ Allgemeine Einstellungen"
121
+ msgid "Thank you for choosing Ecwid to build your online store."
122
+ msgstr "Vielen Dank, dass Sie Ecwid zur Erstellung Ihres Onlineshops gewählt haben."
123
+ 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."
124
+ msgstr "Der erste Schritt auf dem Weg zur Eröffnung Ihres Onlineshops: <br />Legen Sie jetzt los und stellen Sie in <strong>3</strong> einfachen Schritten einen Onlineshop auf Ihre WordPress-Website."
125
+ msgid "Register at Ecwid"
126
+ msgstr "Bei Ecwid anmelden"
127
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
128
+ msgstr "Erstellen Sie ein neues Ecwid-Konto, mit dem Sie Ihren Shop und Ihren Warenbestand verwalten. Die Anmeldung ist kostenlos."
129
+ msgid "Create new Ecwid account"
130
+ msgstr "Neues Ecwid-Konto erstellen"
131
+ msgid "I already have Ecwid account, sign in"
132
+ msgstr "Ich habe bereits ein Ecwid-Konto, bitte einloggen"
133
+ msgid "You will be able to sign up through your exising Google, Facebook or PayPal profiles as well."
134
+ msgstr "Sie können sich auch über Ihre vorhandenen Google-, Facebook- oder PayPal-Konten anmelden."
135
+ msgid "Find your Store ID"
136
+ msgstr "Shop-ID suchen"
137
+ 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."
138
+ msgstr "Die Shop-ID ist ein eindeutiges Kennzeichen jedes Ecwid-Onlineshops und besteht aus mehreren Ziffern. Sie finden sie im Hauptmenü des Ecwid-Steuermenüs. Die Shop-ID wird außerdem mit der Begrüßungs-E-Mail nach der Anmeldung versendet."
139
+ msgid "Enter your Store ID"
140
+ msgstr "Shop-ID eingeben"
141
+ msgid "Enter your Store ID here:"
142
+ msgstr "Geben Sie hier Ihre Shop-ID ein:"
143
+ msgid "Store ID"
144
+ msgstr "Shop-ID"
145
+ msgid "Save and connect your Ecwid store to the site"
146
+ msgstr "Speichern Sie und verbinden Sie Ihren Ecwid-Onlineshop mit Ihrer Website"
147
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>."
148
+ msgstr "Fragen? Wechseln Sie zum <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid-Supportcenter</a>."
149
+ msgid "Congratulations!"
150
+ msgstr "Herzlichen Glückwunsch!"
151
+ msgid "Your Ecwid store is now connected to your WordPress website."
152
+ msgstr "Ihr Ecwid-Onlineshop ist jetzt mit Ihrer WordPress-Website verbunden."
153
+ msgid "Greetings!"
154
+ msgstr "Hallo!"
155
+ msgid "Your Ecwid store is connected to your WordPress website."
156
+ msgstr "Ihr Ecwid-Onlineshop ist mit Ihrer WordPress-Website verbunden."
157
+ msgid "Control panel"
158
+ msgstr "Steuermenü"
159
+ msgid "Account status"
160
+ msgstr "Kontostatus"
161
+ msgid "Paid"
162
+ msgstr "Bezahlpaket"
163
+ msgid "Free"
164
+ msgstr "Kostenloses Paket"
165
+ msgid "Thank you for supporting Ecwid!"
166
+ msgstr "Vielen Dank, dass Sie Ecwid nutzen!"
167
+ msgid "Upgrade to get access to cool premium features."
168
+ msgstr "Holen Sie sich jetzt tolle Premiumfunktionen mit einem Upgrade."
169
+ msgid "Billing and plans"
170
+ msgstr ""
171
+ msgid "Upgrade"
172
+ msgstr ""
173
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
174
+ msgstr ""
languages/ecwid-shopping-cart-es_ES.mo ADDED
Binary file
languages/ecwid-shopping-cart-es_ES.po ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid "Ecwid Shopping Cart"
2
+ msgstr ""
3
+ 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."
4
+ msgstr ""
5
+ msgid "Ecwid Team"
6
+ msgstr ""
7
+ msgid "Get help"
8
+ msgstr "Obtener ayuda"
9
+ msgid "Go to Ecwid site"
10
+ msgstr "Ir al sitio Ecwid"
11
+ msgid "Visit storefront"
12
+ msgstr "Visitar escaparate"
13
+ msgid "Manage my store"
14
+ msgstr "Gestionar mi tienda"
15
+ msgid "Manage plugin settings"
16
+ msgstr "Administrar la configuración de conexión"
17
+ msgid "→ Sell on Facebook"
18
+ msgstr "→ Vender en Facebook"
19
+ msgid "Online store powered by <a %s>Ecwid</a>"
20
+ msgstr ""
21
+ msgid "Store"
22
+ msgstr "Tienda"
23
+ 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."
24
+ 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."
25
+ 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)"
26
+ msgstr ""
27
+ msgid "Ecwid shopping cart settings"
28
+ msgstr ""
29
+ msgid "Ecwid Store"
30
+ msgstr "Tienda Ecwid"
31
+ msgid "General settings"
32
+ msgstr "Configuración general"
33
+ msgid "General"
34
+ msgstr "General"
35
+ msgid "Appearance settings"
36
+ msgstr "Opciones de aspecto"
37
+ msgid "Appearance"
38
+ msgstr "Aspecto"
39
+ msgid "Advanced settings"
40
+ msgstr "Opciones avanzadas"
41
+ msgid "Advanced"
42
+ msgstr "Avanzadas"
43
+ msgid "Setup"
44
+ msgstr ""
45
+ msgid "Your store's minicart"
46
+ msgstr "Mini carro de su tienda"
47
+ msgid "Ecwid Shopping Bag (Normal)"
48
+ msgstr "Bolsa de compras Ecwid (Normal)"
49
+ msgid "Ecwid Shopping Bag (Mini view)"
50
+ msgstr "Bolsa de compras Ecwid (Mini vista)"
51
+ msgid "Your store's search box"
52
+ msgstr "Caja de búsqueda de tu tienda"
53
+ msgid "Ecwid Search Box"
54
+ msgstr "Caja de búsqueda Ecwid"
55
+ msgid "Vertical menu of categories"
56
+ msgstr "Menú vertical de categorías"
57
+ msgid "Ecwid Vertical Categories"
58
+ msgstr "Categorías verticales Ecwid"
59
+ msgid "Price"
60
+ msgstr ""
61
+ msgid "Ecwid Shopping Cart - Advanced settings"
62
+ msgstr "Carro de compras Ecwid - Opciones avanzadas"
63
+ msgid "Category shown by default"
64
+ msgstr "Categoría mostrada por defecto"
65
+ msgid "Store root category"
66
+ msgstr "Categoría raíz de la tienda"
67
+ msgid "Default category ID"
68
+ msgstr "Identificación de categoría estandar"
69
+ 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."
70
+ 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."
71
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
72
+ msgstr "Para fijar esta opción, <a %s> encuentre una identificación de la categoría necesaria </a> y guárdela aquí."
73
+ msgid "Single Sign-On Secret Key"
74
+ msgstr "Clave única secreta de registro"
75
+ 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."
76
+ 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."
77
+ 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."
78
+ 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>."
79
+ msgid "Save changes"
80
+ msgstr "Guardar los cambios"
81
+ msgid "Ecwid Shopping Cart - Appearance settings"
82
+ msgstr "Tarjeta de Compras Ecwid - Ajustes de apariencia"
83
+ msgid "Display search box above products"
84
+ msgstr "Mostrar caja de búsqueda de productos de arriba"
85
+ msgid "Or you can add search box to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
86
+ msgstr "O puede añadir una caja de búsqueda a la barra de herramientas de su página web utilizando <a href=\"widgets.php\">WordPress native widgets</a>."
87
+ msgid "Display horizontal categories above products"
88
+ msgstr "Mostrar categorías horizontales sobre los productos"
89
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
90
+ msgstr "O puede añadir categorías verticales a la barra de herramientas de su página utilizando <a href=\"widgets.php\">WordPress native widgets</a>."
91
+ msgid "Enable minicart attached to horizontal categories"
92
+ msgstr "Active minicarrito unido a las categorías horizontales "
93
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar."
94
+ msgstr "Debería desabilitar esta opción, si añade un minicarro a su página web&nbsp;barra lateral."
95
+ msgid "Number of categories per row"
96
+ msgstr "Número de categorías por fila"
97
+ msgid "Number of products per page"
98
+ msgstr "Número dde productos por página"
99
+ msgid "Grid view"
100
+ msgstr "Vista de cuadro"
101
+ msgid "List view"
102
+ msgstr "Vista de lista"
103
+ msgid "Table view"
104
+ msgstr "Vista de tabla"
105
+ 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."
106
+ 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."
107
+ msgid "Default view mode on product pages"
108
+ msgstr "Vista del modo predefinido en páginas de productos"
109
+ msgid "Grid"
110
+ msgstr "Cuadro"
111
+ msgid "List"
112
+ msgstr "Lista"
113
+ msgid "Table"
114
+ msgstr "Tabla"
115
+ msgid "Default view mode on search results"
116
+ msgstr "Vista del modo predefinido en búsqueda de resultados"
117
+ msgid "Store powered by Ecwid"
118
+ msgstr ""
119
+ msgid "Ecwid Shopping Cart - General settings"
120
+ msgstr "Carro de Compras Ecwid- Configuración general"
121
+ msgid "Thank you for choosing Ecwid to build your online store."
122
+ msgstr "Gracias por elegir Ecwid para cosntruir su tienda online."
123
+ 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."
124
+ 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."
125
+ msgid "Register at Ecwid"
126
+ msgstr "Registrarse en Ecwid"
127
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
128
+ msgstr "Crear una nueva cuenta Ecwid que utilizará para gestionar su tienda e inventario. El registro es gratuíto."
129
+ msgid "Create new Ecwid account"
130
+ msgstr "Crear una nueva cuenta Ecwid"
131
+ msgid "I already have Ecwid account, sign in"
132
+ msgstr "Ya tengo una cuenta Ecwid, registrar"
133
+ msgid "You will be able to sign up through your exising Google, Facebook or PayPal profiles as well."
134
+ msgstr "Será además capaz de inscribirse a través de su perfil Google, Facebook o PayPal."
135
+ msgid "Find your Store ID"
136
+ msgstr "Encuentre la Identificación de su tienda"
137
+ 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."
138
+ 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."
139
+ msgid "Enter your Store ID"
140
+ msgstr "Introduzca la Identificación de su tienda "
141
+ msgid "Enter your Store ID here:"
142
+ msgstr "Introduzca la Identificación de su tienda aquí:"
143
+ msgid "Store ID"
144
+ msgstr "Identificación de tienda"
145
+ msgid "Save and connect your Ecwid store to the site"
146
+ msgstr "Guarde y conecte su tienda Ecwid al site"
147
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>."
148
+ msgstr "Preguntas? Visite <a href=\"http://help.ecwid.com/?source=wporg\">el centro de ayuda Ecwid</a>."
149
+ msgid "Congratulations!"
150
+ msgstr "Enhorabuena!"
151
+ msgid "Your Ecwid store is now connected to your WordPress website."
152
+ msgstr "Su tienda Ecwid está conectada a su página web WordPress."
153
+ msgid "Greetings!"
154
+ msgstr "Saludos!"
155
+ msgid "Your Ecwid store is connected to your WordPress website."
156
+ msgstr "Su tienda Ecwid está conectadaa su página web WordPress."
157
+ msgid "Control panel"
158
+ msgstr "Panel de control"
159
+ msgid "Account status"
160
+ msgstr "Estado de cuenta"
161
+ msgid "Paid"
162
+ msgstr "Pagado"
163
+ msgid "Free"
164
+ msgstr "Gratis"
165
+ msgid "Thank you for supporting Ecwid!"
166
+ msgstr "Gracias por apoyar a Ecwid!"
167
+ msgid "Upgrade to get access to cool premium features."
168
+ msgstr "Actualice para obtener acceso a interesantes funciones avanzadas."
169
+ msgid "Billing and plans"
170
+ msgstr ""
171
+ msgid "Upgrade"
172
+ msgstr ""
173
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
174
+ msgstr ""
languages/ecwid-shopping-cart-fr_FR.mo ADDED
Binary file
languages/ecwid-shopping-cart-fr_FR.po ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid "Ecwid Shopping Cart"
2
+ msgstr ""
3
+ 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."
4
+ msgstr ""
5
+ msgid "Ecwid Team"
6
+ msgstr ""
7
+ msgid "Get help"
8
+ msgstr "Obtenir de l'assistance"
9
+ msgid "Go to Ecwid site"
10
+ msgstr "Aller au site Ecwid"
11
+ msgid "Visit storefront"
12
+ msgstr "Visiter la vitrine"
13
+ msgid "Manage my store"
14
+ msgstr "Gérer ma boutique"
15
+ msgid "Manage plugin settings"
16
+ msgstr "Gérer mes paramètres de plugin"
17
+ msgid "→ Sell on Facebook"
18
+ msgstr "→ Vendre sur Facebook"
19
+ msgid "Online store powered by <a %s>Ecwid</a>"
20
+ msgstr ""
21
+ msgid "Store"
22
+ msgstr "Boutique"
23
+ 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."
24
+ 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."
25
+ 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)"
26
+ msgstr ""
27
+ msgid "Ecwid shopping cart settings"
28
+ msgstr ""
29
+ msgid "Ecwid Store"
30
+ msgstr "Boutique Ecwid"
31
+ msgid "General settings"
32
+ msgstr "Réglages généraux"
33
+ msgid "General"
34
+ msgstr "Général"
35
+ msgid "Appearance settings"
36
+ msgstr "Réglages d'apparence"
37
+ msgid "Appearance"
38
+ msgstr "Apparence"
39
+ msgid "Advanced settings"
40
+ msgstr "Réglages avancés"
41
+ msgid "Advanced"
42
+ msgstr "Avancés"
43
+ msgid "Setup"
44
+ msgstr ""
45
+ msgid "Your store's minicart"
46
+ msgstr "Le mini-panier de votre boutique"
47
+ msgid "Ecwid Shopping Bag (Normal)"
48
+ msgstr "Le Panier Ecwid (Normal)"
49
+ msgid "Ecwid Shopping Bag (Mini view)"
50
+ msgstr "Le Panier Ecwid (Mini-vue)"
51
+ msgid "Your store's search box"
52
+ msgstr "La boîte de recherche de votre boutique"
53
+ msgid "Ecwid Search Box"
54
+ msgstr "Boîte de Recherche Ecwid"
55
+ msgid "Vertical menu of categories"
56
+ msgstr "Menu vertical de catégories"
57
+ msgid "Ecwid Vertical Categories"
58
+ msgstr "Catégories Verticales Ecwid"
59
+ msgid "Price"
60
+ msgstr ""
61
+ msgid "Ecwid Shopping Cart - Advanced settings"
62
+ msgstr "Panier Ecwid - Réglages avancés"
63
+ msgid "Category shown by default"
64
+ msgstr "Catégorie affichée par défaut"
65
+ msgid "Store root category"
66
+ msgstr "Catégorie racine de la boutique"
67
+ msgid "Default category ID"
68
+ msgstr "Numéro de la catégorie par défaut"
69
+ 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."
70
+ 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."
71
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
72
+ msgstr "Afin de régler cette option, <a %s>trouvez le numéro de catégorie nécessaire</a> puis sauvegardez-le ici."
73
+ msgid "Single Sign-On Secret Key"
74
+ msgstr "Clé Secrète Single Sign-on"
75
+ 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."
76
+ 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."
77
+ 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."
78
+ 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>."
79
+ msgid "Save changes"
80
+ msgstr "Sauvegarder les modifications"
81
+ msgid "Ecwid Shopping Cart - Appearance settings"
82
+ msgstr "Panier Ecwid - Réglages d'apparence"
83
+ msgid "Display search box above products"
84
+ msgstr "Afficher la boîte de recherche au-dessus des produits"
85
+ msgid "Or you can add search box to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
86
+ msgstr "Vous pouvez aussi ajouter une boîte de recherche à la barre d'outils de votre site via les <a href=\"widgets.php\">widgets natifs de WordPress</a>."
87
+ msgid "Display horizontal categories above products"
88
+ msgstr "Afficher les catégories horizontales au-dessus des produits"
89
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
90
+ msgstr "Vous pouvez aussi ajouter des catégories verticales à la barre d'outils de votre site via les <a href=\"widgets.php\">widgets natifs de WordPress</a>."
91
+ msgid "Enable minicart attached to horizontal categories"
92
+ msgstr "Activer le mini-panier attaché aux catégories horizontales"
93
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar."
94
+ msgstr "Cette option devrait être désactivée si vous avez ajouté un mini-panier à la barre latérale de votre site."
95
+ msgid "Number of categories per row"
96
+ msgstr "Nombre de catégories par rangée"
97
+ msgid "Number of products per page"
98
+ msgstr "Nombre de produits par page"
99
+ msgid "Grid view"
100
+ msgstr "Affichage Vignettes"
101
+ msgid "List view"
102
+ msgstr "Affichage Liste"
103
+ msgid "Table view"
104
+ msgstr "Affichage Tableau"
105
+ 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."
106
+ 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."
107
+ msgid "Default view mode on product pages"
108
+ msgstr "Mode d'affichage par défaut des pages de produits"
109
+ msgid "Grid"
110
+ msgstr "Vignettes"
111
+ msgid "List"
112
+ msgstr "Liste"
113
+ msgid "Table"
114
+ msgstr "Tableau"
115
+ msgid "Default view mode on search results"
116
+ msgstr "Mode d'affichage par défaut des résultats de recherche"
117
+ msgid "Store powered by Ecwid"
118
+ msgstr ""
119
+ msgid "Ecwid Shopping Cart - General settings"
120
+ msgstr "Panier Ecwid - Réglages généraux"
121
+ msgid "Thank you for choosing Ecwid to build your online store."
122
+ msgstr "Merci d'avoir choisi Ecwid pour construire votre boutique en ligne."
123
+ 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."
124
+ 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."
125
+ msgid "Register at Ecwid"
126
+ msgstr "Inscrivez-vous chez Ecwid"
127
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
128
+ msgstr "Créez un nouveau compte Ecwid afin de pouvoir gérer votre boutique et votre inventaire. L'inscription est gratuite."
129
+ msgid "Create new Ecwid account"
130
+ msgstr "Créer un nouveau compte Ecwid"
131
+ msgid "I already have Ecwid account, sign in"
132
+ msgstr "J'ai déjà un compte Ecwid, se connecter"
133
+ msgid "You will be able to sign up through your exising Google, Facebook or PayPal profiles as well."
134
+ msgstr "Vous pourrez aussi vous connecter avec vos comptes Google, Facebook ou PayPal existants."
135
+ msgid "Find your Store ID"
136
+ msgstr "Trouver votre Numéro de Boutique."
137
+ 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."
138
+ 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."
139
+ msgid "Enter your Store ID"
140
+ msgstr "Entrer votre Numéro de Boutique"
141
+ msgid "Enter your Store ID here:"
142
+ msgstr "Entrez votre Numéro de Boutique ici :"
143
+ msgid "Store ID"
144
+ msgstr "Numéro de Boutique"
145
+ msgid "Save and connect your Ecwid store to the site"
146
+ msgstr "Sauvegardez et connectez votre boutique Ecwid au site."
147
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>."
148
+ msgstr "Des questions? Visitez le <a href=\"http://help.ecwid.com/?source=wporg\">centre d'assistance Ecwid</a>."
149
+ msgid "Congratulations!"
150
+ msgstr "Félicitations !"
151
+ msgid "Your Ecwid store is now connected to your WordPress website."
152
+ msgstr "Votre boutique Ecwid est maintenant connectée à votre site WordPress."
153
+ msgid "Greetings!"
154
+ msgstr "Salutations !"
155
+ msgid "Your Ecwid store is connected to your WordPress website."
156
+ msgstr "Votre boutique Ecwid est connectée à votre site WordPress."
157
+ msgid "Control panel"
158
+ msgstr "Panneau de contrôle"
159
+ msgid "Account status"
160
+ msgstr "Statut du compte"
161
+ msgid "Paid"
162
+ msgstr "Payant"
163
+ msgid "Free"
164
+ msgstr "Gratuit"
165
+ msgid "Thank you for supporting Ecwid!"
166
+ msgstr "Merci pour le soutien apporté à Ecwid !"
167
+ msgid "Upgrade to get access to cool premium features."
168
+ msgstr "Surclassez votre compte pour accéder à de super fonctionnalités premium."
169
+ msgid "Billing and plans"
170
+ msgstr ""
171
+ msgid "Upgrade"
172
+ msgstr ""
173
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
174
+ msgstr ""
languages/ecwid-shopping-cart-pt_BR.mo ADDED
Binary file
languages/ecwid-shopping-cart-pt_BR.po ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ msgid "Ecwid Shopping Cart"
10
+ msgstr ""
11
+ 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."
12
+ msgstr ""
13
+ msgid "Ecwid Team"
14
+ msgstr ""
15
+ msgid "Get help"
16
+ msgstr "Obter Ajuda"
17
+ msgid "Go to Ecwid site"
18
+ msgstr "Ir para o sítio Ecwid"
19
+ msgid "Visit storefront"
20
+ msgstr "Visitar frente da loja"
21
+ msgid "Manage my store"
22
+ msgstr "Gerir a minha loja"
23
+ msgid "Manage plugin settings"
24
+ msgstr "Gerir definições de plugin"
25
+ msgid "→ Sell on Facebook"
26
+ msgstr "→ Vender no Facebook"
27
+ msgid "Online store powered by <a %s>Ecwid</a>"
28
+ msgstr ""
29
+ msgid "Store"
30
+ msgstr "Loja"
31
+ 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."
32
+ 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."
33
+ 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)"
34
+ msgstr ""
35
+ msgid "Ecwid shopping cart settings"
36
+ msgstr ""
37
+ msgid "Ecwid Store"
38
+ msgstr "Loja Ecwid"
39
+ msgid "General settings"
40
+ msgstr "Definições Gerais"
41
+ msgid "General"
42
+ msgstr "Geral"
43
+ msgid "Appearance settings"
44
+ msgstr "Definições de Aparência"
45
+ msgid "Appearance"
46
+ msgstr "Aparência"
47
+ msgid "Advanced settings"
48
+ msgstr "Definições Avançadas"
49
+ msgid "Advanced"
50
+ msgstr "Avançadas"
51
+ msgid "Setup"
52
+ msgstr ""
53
+ msgid "Your store's minicart"
54
+ msgstr "O minicart da sua loja"
55
+ msgid "Ecwid Shopping Bag (Normal)"
56
+ msgstr "Saco de compras Ecwid (Normal)"
57
+ msgid "Ecwid Shopping Bag (Mini view)"
58
+ msgstr "Saco de compras Ecwid (Vista mini)"
59
+ msgid "Your store's search box"
60
+ msgstr "A barra de pesquisa da sua loja"
61
+ msgid "Ecwid Search Box"
62
+ msgstr "Barra de pesquisa Ecwid"
63
+ msgid "Vertical menu of categories"
64
+ msgstr "Menu vertical de categorias"
65
+ msgid "Ecwid Vertical Categories"
66
+ msgstr "Categorias verticais Ecwid"
67
+ msgid "Price"
68
+ msgstr ""
69
+ msgid "Ecwid Shopping Cart - Advanced settings"
70
+ msgstr "Carrinho de compras Ecwid - Definições Avançadas"
71
+ msgid "Category shown by default"
72
+ msgstr "Categoria mostrada por defeito"
73
+ msgid "Store root category"
74
+ msgstr "Categoria de raiz de loja"
75
+ msgid "Default category ID"
76
+ msgstr "Identificação de categoria por defeito"
77
+ 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."
78
+ 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."
79
+ msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
80
+ msgstr "De modo a configurar esta opção, <a %s> encontra um ID da categoria necessária</a>, salvando-a."
81
+ msgid "Single Sign-On Secret Key"
82
+ msgstr "Chave Secreta e Iniciar Sessão Único"
83
+ 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."
84
+ 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."
85
+ 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."
86
+ 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."
87
+ msgid "Save changes"
88
+ msgstr "Salvar alterações"
89
+ msgid "Ecwid Shopping Cart - Appearance settings"
90
+ msgstr "Carrinho de compras Ecwid - Definições Aparência"
91
+ msgid "Display search box above products"
92
+ msgstr "Mostrar barra de pesquisa acima dos produtos"
93
+ msgid "Or you can add search box to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
94
+ msgstr "Ou você pode adicionar uma barra de pesquisa no seu sítio usando <a href=\"widgets.php\">widgets nativos do WordPress</a>."
95
+ msgid "Display horizontal categories above products"
96
+ msgstr "Mostrar categorias horizontais acima dos produtos"
97
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"widgets.php\">WordPress native widgets</a>."
98
+ msgstr "Ou você pode adicionar categorias verticais na barra de ferramentas do seu sítio através de <a href=\"widgets.php\">widgets nativos do WordPress</a>."
99
+ msgid "Enable minicart attached to horizontal categories"
100
+ msgstr "Ativar minicart anexado às categorias horizontais"
101
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar."
102
+ msgstr "Deverá desativar esta opção se você adicionou o minicart à barra lateral do seu sítio."
103
+ msgid "Number of categories per row"
104
+ msgstr "Número de categorias por fila"
105
+ msgid "Number of products per page"
106
+ msgstr "Número de produtos por página"
107
+ msgid "Grid view"
108
+ msgstr "Vista Grelha"
109
+ msgid "List view"
110
+ msgstr "Vista Lista"
111
+ msgid "Table view"
112
+ msgstr "Vista Tabela"
113
+ 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."
114
+ 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."
115
+ msgid "Default view mode on product pages"
116
+ msgstr "Vista padrão nas páginas de produtos"
117
+ msgid "Grid"
118
+ msgstr "Grelha"
119
+ msgid "List"
120
+ msgstr "Lista"
121
+ msgid "Table"
122
+ msgstr "Tabela"
123
+ msgid "Default view mode on search results"
124
+ msgstr "Vista Padrão nos resultados de pesquisa"
125
+ msgid "Store powered by Ecwid"
126
+ msgstr ""
127
+ msgid "Ecwid Shopping Cart - General settings"
128
+ msgstr "Carrinho de Compras Ecwid - Definições Gerais"
129
+ msgid "Thank you for choosing Ecwid to build your online store."
130
+ msgstr "Obrigado por escolher Ecwid para construir a sua loja online"
131
+ 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."
132
+ 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."
133
+ msgid "Register at Ecwid"
134
+ msgstr "Registe-se na Ecwid"
135
+ msgid "Create a new Ecwid account which you will use to manage your store and inventory. The registration is free."
136
+ msgstr "Crie uma nova conta Ecwid que você utilizará para gerir a sua loja e inventário. O registo é grátis."
137
+ msgid "Create new Ecwid account"
138
+ msgstr "Crie uma nova conta Ecwid"
139
+ msgid "I already have Ecwid account, sign in"
140
+ msgstr "Já tenho uma conta Ecwid, iniciar sessão"
141
+ msgid "You will be able to sign up through your exising Google, Facebook or PayPal profiles as well."
142
+ msgstr "Você conseguirá iniciar sessão atráves dos seus perfis existentes do Google, Facebook ou PayPal."
143
+ msgid "Find your Store ID"
144
+ msgstr "Obtenha a sua ID de loja"
145
+ 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."
146
+ 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. "
147
+ msgid "Enter your Store ID"
148
+ msgstr "Insira a sua ID de Loja"
149
+ msgid "Enter your Store ID here:"
150
+ msgstr "Insira a sua ID de Loja aqui:"
151
+ msgid "Store ID"
152
+ msgstr "ID de Loja "
153
+ msgid "Save and connect your Ecwid store to the site"
154
+ msgstr "Salve e conete a sua loja Ecwid ao sítio"
155
+ msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>."
156
+ msgstr "Questões? Visite <a href=\"http://help.ecwid.com/?source=wporg\"> Centro de Apoio Ecwid</a>."
157
+ msgid "Congratulations!"
158
+ msgstr "Parabéns!"
159
+ msgid "Your Ecwid store is now connected to your WordPress website."
160
+ msgstr "A sua loja Ecwid está agora conetada ao seu sítio WorkPress."
161
+ msgid "Greetings!"
162
+ msgstr "Saudações!"
163
+ msgid "Your Ecwid store is connected to your WordPress website."
164
+ msgstr "A sua loja Ecwid está agora conetada ao seu sítio WorkPress."
165
+ msgid "Control panel"
166
+ msgstr "Painel de Controle"
167
+ msgid "Account status"
168
+ msgstr "Estado de Conta"
169
+ msgid "Paid"
170
+ msgstr "Pago"
171
+ msgid "Free"
172
+ msgstr "Grátis"
173
+ msgid "Thank you for supporting Ecwid!"
174
+ msgstr "Obrigado por apoiar Ecwid!"
175
+ msgid "Upgrade to get access to cool premium features."
176
+ msgstr "Atualize para ter acesso a características premium convenientes."
177
+ msgid "Billing and plans"
178
+ msgstr ""
179
+ msgid "Upgrade"
180
+ msgstr ""
181
+ msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
182
+ msgstr ""
languages/ecwid-shopping-cart-ru_RU.mo CHANGED
Binary file
languages/ecwid-shopping-cart-ru_RU.po CHANGED
@@ -15,6 +15,15 @@ msgstr ""
15
  "Content-Type: text/plain; charset=UTF-8\n"
16
  "Content-Transfer-Encoding: 8bit\n"
17
 
 
 
 
 
 
 
 
 
 
18
  msgid "Get help"
19
  msgstr "Получить помощь"
20
 
@@ -43,7 +52,7 @@ msgid "<strong>Ecwid shopping cart is almost ready</strong>. Please visit <a tar
43
  msgstr "<strong>Магазин Ecwid почти готов к использованию</strong>. Пройдите по <a target=\"_blank\" href=\"%s\">ссылке</a>, чтобы посмотреть ваш магазин с демонстрационными продуктами. Чтобы закончить установку, пожалуйста, откройте страницу <a href=\"admin.php?page=ecwid\"><strong>настроек Ecwid</strong></a> и настройте плагин."
44
 
45
  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)"
46
- msgstr "Вам нравится ваш магазин Ecwid? Будем благодарны, если вы <a %s>оставите отзыв и проголосуете</a> за этот плагин на сайте WordPress. (<a id=\"hide-vote-message\"> Закрыть</a> и больше не показывать это сообщение)"
47
 
48
  msgid "Ecwid shopping cart settings"
49
  msgstr "Настройки Ecwid"
@@ -120,7 +129,7 @@ msgstr "Секретный ключ системы единой авториза
120
  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."
121
  msgstr "Эта функция позволяет включить систему единой авторизации: когда покупатели вошли в свой аккаунт на вашем сайте, они автоматически входят в свой аккаунт Ecwid, даже если раньше у них его не было. Эта функция может быть полезна в случае, если ваши посетители создают свои аккаунты на вашем сайте."
122
 
123
- 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."
124
  msgstr "Чтобы включить эту функцию, вам необходимо ввести секретный ключ. Его можно найти в панели управления Ecwid в секции \"Настройки > API > Single Sign-on API\". Эта функция доступна только пользователям с <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">платным аккаунтом</a>."
125
 
126
  msgid "Save changes"
@@ -265,4 +274,4 @@ msgid "Upgrade"
265
  msgstr "Апгрейд"
266
 
267
  msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
268
- msgstr "Если вы хотите подключить другой магазин Ecwid, вы можете <a %s>отключить этот и ввести другой ID Магазина</a>."
15
  "Content-Type: text/plain; charset=UTF-8\n"
16
  "Content-Transfer-Encoding: 8bit\n"
17
 
18
+ msgid "Ecwid Shopping Cart"
19
+ msgstr "Интернет-магазин Ecwid"
20
+
21
+ 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."
22
+ msgstr "Ecwid - это бесплатный полнофункциональный интернет магазин. Его можно добавить к любому сайту, построенному на WordPress, и он требует не более 5 минут на настройку."
23
+
24
+ msgid "Ecwid Team"
25
+ msgstr "Команда Ecwid"
26
+
27
  msgid "Get help"
28
  msgstr "Получить помощь"
29
 
52
  msgstr "<strong>Магазин Ecwid почти готов к использованию</strong>. Пройдите по <a target=\"_blank\" href=\"%s\">ссылке</a>, чтобы посмотреть ваш магазин с демонстрационными продуктами. Чтобы закончить установку, пожалуйста, откройте страницу <a href=\"admin.php?page=ecwid\"><strong>настроек Ecwid</strong></a> и настройте плагин."
53
 
54
  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)"
55
+ msgstr "Вам нравится ваш магазин Ecwid? Будем благодарны, если вы <a %s>оставите отзыв и проголосуете</a> за этот плагин на сайте WordPress. (<a id=\"hide-vote-message\">Закрыть</a> и больше не показывать это сообщение)"
56
 
57
  msgid "Ecwid shopping cart settings"
58
  msgstr "Настройки Ecwid"
129
  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."
130
  msgstr "Эта функция позволяет включить систему единой авторизации: когда покупатели вошли в свой аккаунт на вашем сайте, они автоматически входят в свой аккаунт Ecwid, даже если раньше у них его не было. Эта функция может быть полезна в случае, если ваши посетители создают свои аккаунты на вашем сайте."
131
 
132
+ 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."
133
  msgstr "Чтобы включить эту функцию, вам необходимо ввести секретный ключ. Его можно найти в панели управления Ecwid в секции \"Настройки > API > Single Sign-on API\". Эта функция доступна только пользователям с <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">платным аккаунтом</a>."
134
 
135
  msgid "Save changes"
274
  msgstr "Апгрейд"
275
 
276
  msgid "If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>."
277
+ msgstr "Если вы хотите подключить другой магазин Ecwid, вы можете <a %s>отключить этот и ввести другой ID Магазина</a>."
languages/ecwid-shopping-cart.pot CHANGED
@@ -1,11 +1,11 @@
1
- msgid ""
 
 
 
 
 
 
2
  msgstr ""
3
- "Project-Id-Version: Ecwid Shopping Cart\n"
4
- "PO-Revision-Date: 2013-11-25 17:38:21\n"
5
- "Last-Translator: <test@example.com>\n"
6
- "MIME-Version: 1.0\n"
7
- "Content-Type: text/plain; charset=UTF-8\n"
8
- "Content-Transfer-Encoding: 8bit\n"
9
 
10
  msgid "Get help"
11
  msgstr ""
@@ -112,7 +112,7 @@ msgstr ""
112
  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."
113
  msgstr ""
114
 
115
- 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."
116
  msgstr ""
117
 
118
  msgid "Save changes"
1
+ msgid "Ecwid Shopping Cart"
2
+ msgstr ""
3
+
4
+ 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."
5
+ msgstr ""
6
+
7
+ msgid "Ecwid Team"
8
  msgstr ""
 
 
 
 
 
 
9
 
10
  msgid "Get help"
11
  msgstr ""
112
  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."
113
  msgstr ""
114
 
115
+ 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."
116
  msgstr ""
117
 
118
  msgid "Save changes"
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: Ecwid Team
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: 3.7
6
- Stable tag: 2.1
7
 
8
  Ecwid is a free full-featured shopping cart that can easily be added to any blog
9
  and takes less than 5 minutes to set up.
@@ -78,6 +78,11 @@ http://codex.wordpress.org/Managing_Plugins#Installing_Plugins
78
  - Knowledge Base: [http://kb.ecwid.com](http://kb.ecwid.com)
79
 
80
  == Changelog ==
 
 
 
 
 
81
  = 2.1 =
82
  - Our plugin backend is now available in Italian, Russian and English. Thanks to Luciano Del Fico for the great help with the Italian translation.
83
 
2
  Contributors: Ecwid Team
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: 3.8
6
+ Stable tag: 2.2
7
 
8
  Ecwid is a free full-featured shopping cart that can easily be added to any blog
9
  and takes less than 5 minutes to set up.
78
  - Knowledge Base: [http://kb.ecwid.com](http://kb.ecwid.com)
79
 
80
  == Changelog ==
81
+ = 2.2 =
82
+ - Improved compatibility with the new Wordpress version 3.8 which brings great features like brand new responsive theme, revamped admin backend and other improvements. Ecwid plugin is now ready for that, so your store will work perfectly with the new Wordpress version
83
+ - The plugin settings pages are now available in seven languages: English, Italian, Russian, French, German, Spanish, Brazilian Portuguese. Ecwid itself is available in 45 languages, so customers from all over the world can purchase from your store
84
+ - Design improvements of the plugin settings pages including Retina-ready icons
85
+
86
  = 2.1 =
87
  - Our plugin backend is now available in Italian, Russian and English. Thanks to Luciano Del Fico for the great help with the Italian translation.
88
 
templates/advanced-settings.php CHANGED
@@ -1,92 +1,92 @@
1
- <form class="wrap pure-form pure-form-aligned ecwid-settings advanced-settings" method="POST" action="options.php">
2
-
3
- <h2><?php _e('Ecwid Shopping Cart - Advanced settings', 'ecwid-shopping-cart'); ?></h2>
4
-
5
- <?php settings_fields('ecwid_options_page'); ?>
6
- <input type="hidden" name="settings_section" value="advanced" />
7
-
8
- <fieldset>
9
-
10
- <div class="pure-control-group">
11
-
12
- <?php if (ecwid_is_paid_account()): ?>
13
- <label for="ecwid_default_category_id">
14
- <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
15
- </label>
16
-
17
- <select name="ecwid_default_category_id" id="ecwid_default_category_id">
18
- <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
19
- <?php foreach ($categories as $category): ?>
20
- <option
21
- value="<?php echo esc_attr($category['id']); ?>"
22
- <?php if ($category['id'] == get_option('ecwid_default_category_id')): ?>
23
- selected="selected"
24
- <?php endif; ?>
25
- >
26
- <?php echo esc_html($category['path_str']); ?>
27
- </option>
28
- <?php endforeach; ?>
29
- </select>
30
- <?php else: ?>
31
-
32
- <label for="ecwid_default_category_id">
33
- <?php _e('Default category ID', 'ecwid-shopping-cart'); ?>
34
- </label>
35
-
36
- <input
37
- id="ecwid_default_category_id"
38
- name="ecwid_default_category_id"
39
- type="text"
40
- placeholder="<?php _e('Default category ID', 'ecwid-shopping-cart'); ?>"
41
- value="<?php echo esc_attr(get_option('ecwid_default_category_id')) ?>"
42
- />
43
- <?php endif; ?>
44
- <div class="note">
45
- <?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'); ?>
46
- </div>
47
- <div class="note">
48
- <?php if (!ecwid_is_paid_account()): ?>
49
- <?php echo sprintf(
50
- __('In order to set this option, <a %s>find an ID of the necessary category</a> and save it here.', 'ecwid-shopping-cart'),
51
- 'target="_blank" href="http://kb.ecwid.com/w/page/23947812/How%20to%20get%20ID%20of%20your%20product%20or%20category"'
52
- );
53
- ?>
54
- <?php endif; ?>
55
- </div>
56
- </div>
57
-
58
- <hr />
59
-
60
- <div class="pure-control-group last">
61
- <label for="ecwid_sso_secret_key">
62
- <?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>
63
- </label>
64
-
65
- <input
66
- id="ecwid_sso_secret_key"
67
- type="text"
68
- name="ecwid_sso_secret_key"
69
- placeholder="<?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>"
70
- value="<?php echo esc_attr(get_option('ecwid_sso_secret_key')); ?>"
71
- />
72
-
73
- <div class="note">
74
- <?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'); ?>
75
- </div>
76
- <div class="note grayed-links">
77
- <?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 > 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.', 'ecwid-shopping-cart'); ?>
78
- </div>
79
- </div>
80
-
81
- </fieldset>
82
-
83
- <fieldset>
84
- <hr />
85
-
86
- <div class="pure-control-group">
87
- <button type="submit" class="pure-button pure-button-primary">
88
- <?php _e('Save changes', 'ecwid-shopping-cart'); ?>
89
- </button>
90
- </div>
91
- </fieldset>
92
  </form>
1
+ <form class="wrap pure-form pure-form-aligned ecwid-settings advanced-settings" method="POST" action="options.php">
2
+
3
+ <h2><?php _e('Ecwid Shopping Cart - Advanced settings', 'ecwid-shopping-cart'); ?></h2>
4
+
5
+ <?php settings_fields('ecwid_options_page'); ?>
6
+ <input type="hidden" name="settings_section" value="advanced" />
7
+
8
+ <fieldset>
9
+
10
+ <div class="pure-control-group">
11
+
12
+ <?php if (ecwid_is_paid_account()): ?>
13
+ <label for="ecwid_default_category_id">
14
+ <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
15
+ </label>
16
+
17
+ <select name="ecwid_default_category_id" id="ecwid_default_category_id">
18
+ <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
19
+ <?php foreach ($categories as $category): ?>
20
+ <option
21
+ value="<?php echo esc_attr($category['id']); ?>"
22
+ <?php if ($category['id'] == get_option('ecwid_default_category_id')): ?>
23
+ selected="selected"
24
+ <?php endif; ?>
25
+ >
26
+ <?php echo esc_html($category['path_str']); ?>
27
+ </option>
28
+ <?php endforeach; ?>
29
+ </select>
30
+ <?php else: ?>
31
+
32
+ <label for="ecwid_default_category_id">
33
+ <?php _e('Default category ID', 'ecwid-shopping-cart'); ?>
34
+ </label>
35
+
36
+ <input
37
+ id="ecwid_default_category_id"
38
+ name="ecwid_default_category_id"
39
+ type="text"
40
+ placeholder="<?php _e('Default category ID', 'ecwid-shopping-cart'); ?>"
41
+ value="<?php echo esc_attr(get_option('ecwid_default_category_id')) ?>"
42
+ />
43
+ <?php endif; ?>
44
+ <div class="note">
45
+ <?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'); ?>
46
+ </div>
47
+ <div class="note">
48
+ <?php if (!ecwid_is_paid_account()): ?>
49
+ <?php echo sprintf(
50
+ __('In order to set this option, <a %s>find an ID of the necessary category</a> and save it here.', 'ecwid-shopping-cart'),
51
+ 'target="_blank" href="http://kb.ecwid.com/w/page/23947812/How%20to%20get%20ID%20of%20your%20product%20or%20category"'
52
+ );
53
+ ?>
54
+ <?php endif; ?>
55
+ </div>
56
+ </div>
57
+
58
+ <hr />
59
+
60
+ <div class="pure-control-group last">
61
+ <label for="ecwid_sso_secret_key">
62
+ <?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>
63
+ </label>
64
+
65
+ <input
66
+ id="ecwid_sso_secret_key"
67
+ type="text"
68
+ name="ecwid_sso_secret_key"
69
+ placeholder="<?php _e('Single Sign-On Secret Key', 'ecwid-shopping-cart'); ?>"
70
+ value="<?php echo esc_attr(get_option('ecwid_sso_secret_key')); ?>"
71
+ />
72
+
73
+ <div class="note">
74
+ <?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'); ?>
75
+ </div>
76
+ <div class="note grayed-links">
77
+ <?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 > 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.', 'ecwid-shopping-cart'); ?>
78
+ </div>
79
+ </div>
80
+
81
+ </fieldset>
82
+
83
+ <fieldset>
84
+ <hr />
85
+
86
+ <div class="pure-control-group">
87
+ <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>">
88
+ <?php _e('Save changes', 'ecwid-shopping-cart'); ?>
89
+ </button>
90
+ </div>
91
+ </fieldset>
92
  </form>
templates/appearance-settings.php CHANGED
@@ -1,190 +1,205 @@
1
- <form class="wrap pure-form pure-form-aligned ecwid-settings appearance-settings" method="POST" action="options.php">
2
-
3
- <h2><?php _e('Ecwid Shopping Cart - Appearance settings', 'ecwid-shopping-cart'); ?></h2>
4
-
5
- <?php settings_fields('ecwid_options_page'); ?>
6
- <input type="hidden" name="settings_section" value="appearance" />
7
-
8
- <fieldset>
9
-
10
- <div class="pure-control-group">
11
- <label for="ecwid_show_search_box">
12
- <?php _e('Display search box above products', 'ecwid-shopping-cart'); ?>
13
- </label>
14
-
15
- <input
16
- id="ecwid_show_search_box"
17
- name="ecwid_show_search_box"
18
- type="checkbox"
19
- <?php if (get_option('ecwid_show_search_box')): ?>
20
- checked="checked"
21
- <?php endif; ?>
22
- $disabled_str
23
- />
24
- <span class="note inline-note">
25
- <?php _e('Or you can add search box to your website\'s toolbar using <a href="widgets.php">WordPress native widgets</a>.', 'ecwid-shopping-cart'); ?>
26
- </span>
27
- </div>
28
-
29
- <div class="pure-control-group">
30
- <label for="ecwid_show_categories">
31
- <?php _e('Display horizontal categories above products', 'ecwid-shopping-cart'); ?>
32
- </label>
33
-
34
- <input
35
- id="ecwid_show_categories"
36
- name="ecwid_show_categories"
37
- type="checkbox"
38
- <?php if (get_option('ecwid_show_categories')): ?>
39
- checked="checked"
40
- <?php endif; ?>
41
- $disabled_str
42
- />
43
- <span class="note inline-note">
44
- <?php _e('Or you can add vertical categories to your website\'s toolbar using <a href="widgets.php">WordPress native widgets</a>.', 'ecwid-shopping-cart'); ?>
45
- </span>
46
- </div>
47
-
48
- <div class="pure-control-group">
49
- <label for="ecwid_enable_minicart">
50
- <?php _e('Enable minicart attached to horizontal categories', 'ecwid-shopping-cart'); ?>
51
- </label>
52
-
53
- <input
54
- id="ecwid_enable_minicart"
55
- name="ecwid_enable_minicart"
56
- type="checkbox"
57
- <?php if (get_option('ecwid_enable_minicart')): ?>
58
- checked="checked"
59
- <?php endif; ?>
60
- $disabled_str
61
- />
62
- <span class="note inline-note">
63
- <?php _e("You should disable this option, if you added minicart to your website's&nbsp;sidebar.", 'ecwid-shopping-cart'); ?>
64
- </span>
65
- </div>
66
-
67
- <div class="pure-control-group">
68
- <label for="ecwid_pb_categoriesperrow">
69
- <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
70
- </label>
71
-
72
- <input
73
- id="ecwid_pb_categoriesperrow"
74
- name="ecwid_pb_categoriesperrow"
75
- type="text"
76
- class="number"
77
- value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
78
- $disabled_str
79
- />
80
- </div>
81
-
82
- <hr />
83
-
84
-
85
- <div class="pure-control-group">
86
- <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
87
- <div class="ecwid-pb-view-size grid active" tabindex="1">
88
- <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
89
- <div class="main-area"></div>
90
- <div class="right">
91
- <div class="ruler"></div>
92
- <input
93
- type="text"
94
- size="2"
95
- name="ecwid_pb_productsperrow_grid"
96
- class="number"
97
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
98
- />
99
- </div>
100
- <div class="bottom">
101
- <div class="ruler"></div>
102
- <input
103
- type="text"
104
- size="2"
105
- name="ecwid_pb_productspercolumn_grid"
106
- class="number"
107
- value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_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"></div>
115
- <div class="right">
116
- <div class="ruler"></div>
117
- <input
118
- type="text"
119
- size="2"
120
- name="ecwid_pb_productsperpage_list"
121
- class="number"
122
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
123
- </div>
124
- </div>
125
-
126
-
127
- <div class="ecwid-pb-view-size table" tabindex="1">
128
- <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
129
- <div class="main-area"></div>
130
- <div class="right">
131
- <div class="ruler"></div>
132
- <input
133
- type="text"
134
- size="2"
135
- name="ecwid_pb_productsperpage_table"
136
- class="number"
137
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
138
- />
139
- </div>
140
- </div>
141
- <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>
142
- </div>
143
-
144
- <hr />
145
-
146
- <div class="pure-control-group">
147
- <label for="ecwid_pb_defaultview">
148
- <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
149
- </label>
150
-
151
- <select id="ecwid_pb_defaultview" name="ecwid_pb_defaultview" $disabled_str>
152
- <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
153
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
154
- </option>
155
- <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
156
- <?php _e('List', 'ecwid-shopping-cart'); ?>
157
- </option>
158
- <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
159
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
160
- </option>
161
- </select>
162
- </div>
163
-
164
- <div class="pure-control-group">
165
- <label for="ecwid_pb_searchview">
166
- <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
167
- </label>
168
-
169
- <select id="ecwid_pb_searchview" name="ecwid_pb_searchview" $disabled_str>
170
- <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
171
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
172
- </option>
173
- <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
174
- <?php _e('List', 'ecwid-shopping-cart'); ?>
175
- </option>
176
- <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
177
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
178
- </option>
179
- </select>
180
- </div>
181
-
182
- </fieldset>
183
-
184
- <fieldset>
185
- <hr />
186
- <div class="pure-control-group">
187
- <button type="submit" class="pure-button pure-button-primary"><?php _e('Save changes', 'ecwid-shopping-cart'); ?></button>
188
- </div>
189
- </fieldset>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  </form>
1
+ <?php
2
+ function ecwid_embed_svg($name) {
3
+ $code = file_get_contents(ECWID_PLUGIN_DIR . '/images/' . $name . '.svg');
4
+
5
+ echo $code;
6
+ }
7
+
8
+ ?>
9
+
10
+ <form class="wrap pure-form pure-form-aligned ecwid-settings appearance-settings" method="POST" action="options.php">
11
+
12
+ <h2><?php _e('Ecwid Shopping Cart - Appearance settings', 'ecwid-shopping-cart'); ?></h2>
13
+
14
+ <?php settings_fields('ecwid_options_page'); ?>
15
+ <input type="hidden" name="settings_section" value="appearance" />
16
+
17
+ <fieldset>
18
+
19
+ <div class="pure-control-group">
20
+ <label for="ecwid_show_search_box">
21
+ <?php _e('Display search box above products', 'ecwid-shopping-cart'); ?>
22
+ </label>
23
+
24
+ <input
25
+ id="ecwid_show_search_box"
26
+ name="ecwid_show_search_box"
27
+ type="checkbox"
28
+ <?php if (get_option('ecwid_show_search_box')): ?>
29
+ checked="checked"
30
+ <?php endif; ?>
31
+ $disabled_str
32
+ />
33
+ <span class="note inline-note">
34
+ <?php _e('Or you can add search box to your website\'s toolbar using <a href="widgets.php">WordPress native widgets</a>.', 'ecwid-shopping-cart'); ?>
35
+ </span>
36
+ </div>
37
+
38
+ <div class="pure-control-group">
39
+ <label for="ecwid_show_categories">
40
+ <?php _e('Display horizontal categories above products', 'ecwid-shopping-cart'); ?>
41
+ </label>
42
+
43
+ <input
44
+ id="ecwid_show_categories"
45
+ name="ecwid_show_categories"
46
+ type="checkbox"
47
+ <?php if (get_option('ecwid_show_categories')): ?>
48
+ checked="checked"
49
+ <?php endif; ?>
50
+ $disabled_str
51
+ />
52
+ <span class="note inline-note">
53
+ <?php _e('Or you can add vertical categories to your website\'s toolbar using <a href="widgets.php">WordPress native widgets</a>.', 'ecwid-shopping-cart'); ?>
54
+ </span>
55
+ </div>
56
+
57
+ <div class="pure-control-group">
58
+ <label for="ecwid_enable_minicart">
59
+ <?php _e('Enable minicart attached to horizontal categories', 'ecwid-shopping-cart'); ?>
60
+ </label>
61
+
62
+ <input
63
+ id="ecwid_enable_minicart"
64
+ name="ecwid_enable_minicart"
65
+ type="checkbox"
66
+ <?php if (get_option('ecwid_enable_minicart')): ?>
67
+ checked="checked"
68
+ <?php endif; ?>
69
+ $disabled_str
70
+ />
71
+ <span class="note inline-note">
72
+ <?php _e("You should disable this option, if you added minicart to your website's&nbsp;sidebar.", 'ecwid-shopping-cart'); ?>
73
+ </span>
74
+ </div>
75
+
76
+ <div class="pure-control-group">
77
+ <label for="ecwid_pb_categoriesperrow">
78
+ <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
79
+ </label>
80
+
81
+ <input
82
+ id="ecwid_pb_categoriesperrow"
83
+ name="ecwid_pb_categoriesperrow"
84
+ type="text"
85
+ class="number"
86
+ value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
87
+ $disabled_str
88
+ />
89
+ </div>
90
+
91
+ <hr />
92
+
93
+
94
+ <div class="pure-control-group">
95
+ <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
96
+ <div class="ecwid-pb-view-size grid active" tabindex="1">
97
+ <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
98
+ <div class="main-area">
99
+ <?php ecwid_embed_svg('grid'); ?>
100
+ </div>
101
+ <div class="right">
102
+ <div class="ruler"></div>
103
+ <input
104
+ type="text"
105
+ size="2"
106
+ name="ecwid_pb_productsperrow_grid"
107
+ class="number"
108
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
109
+ />
110
+ </div>
111
+ <div class="bottom">
112
+ <div class="ruler"></div>
113
+ <input
114
+ type="text"
115
+ size="2"
116
+ name="ecwid_pb_productspercolumn_grid"
117
+ class="number"
118
+ value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_grid')); ?>"
119
+ />
120
+ </div>
121
+ </div>
122
+
123
+ <div class="ecwid-pb-view-size list" tabindex="1">
124
+ <div class="title"><?php _e('List view', 'ecwid-shopping-cart'); ?></div>
125
+ <div class="main-area">
126
+ <?php ecwid_embed_svg('list'); ?>
127
+ </div>
128
+ <div class="right">
129
+ <div class="ruler"></div>
130
+ <input
131
+ type="text"
132
+ size="2"
133
+ name="ecwid_pb_productsperpage_list"
134
+ class="number"
135
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
136
+ </div>
137
+ </div>
138
+
139
+
140
+ <div class="ecwid-pb-view-size table" tabindex="1">
141
+ <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
142
+ <div class="main-area">
143
+ <?php ecwid_embed_svg('table'); ?>
144
+ </div>
145
+ <div class="right">
146
+ <div class="ruler"></div>
147
+ <input
148
+ type="text"
149
+ size="2"
150
+ name="ecwid_pb_productsperpage_table"
151
+ class="number"
152
+ value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
153
+ />
154
+ </div>
155
+ </div>
156
+ <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>
157
+ </div>
158
+
159
+ <hr />
160
+
161
+ <div class="pure-control-group">
162
+ <label for="ecwid_pb_defaultview">
163
+ <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
164
+ </label>
165
+
166
+ <select id="ecwid_pb_defaultview" name="ecwid_pb_defaultview" $disabled_str>
167
+ <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
168
+ <?php _e('Grid', 'ecwid-shopping-cart'); ?>
169
+ </option>
170
+ <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
171
+ <?php _e('List', 'ecwid-shopping-cart'); ?>
172
+ </option>
173
+ <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
174
+ <?php _e('Table', 'ecwid-shopping-cart'); ?>
175
+ </option>
176
+ </select>
177
+ </div>
178
+
179
+ <div class="pure-control-group">
180
+ <label for="ecwid_pb_searchview">
181
+ <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
182
+ </label>
183
+
184
+ <select id="ecwid_pb_searchview" name="ecwid_pb_searchview" $disabled_str>
185
+ <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
186
+ <?php _e('Grid', 'ecwid-shopping-cart'); ?>
187
+ </option>
188
+ <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
189
+ <?php _e('List', 'ecwid-shopping-cart'); ?>
190
+ </option>
191
+ <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
192
+ <?php _e('Table', 'ecwid-shopping-cart'); ?>
193
+ </option>
194
+ </select>
195
+ </div>
196
+
197
+ </fieldset>
198
+
199
+ <fieldset>
200
+ <hr />
201
+ <div class="pure-control-group">
202
+ <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>"><?php _e('Save changes', 'ecwid-shopping-cart'); ?></button>
203
+ </div>
204
+ </fieldset>
205
  </form>
templates/general-settings-initial.php CHANGED
@@ -1,67 +1,70 @@
1
- <div class="wrap pure-form ecwid-settings general-settings">
2
-
3
- <h2><?php _e('Ecwid Shopping Cart - General settings', 'ecwid-shopping-cart'); ?></h2>
4
-
5
- <form method="POST" action="options.php">
6
- <?php settings_fields('ecwid_options_page'); ?>
7
- <fieldset>
8
-
9
- <input type="hidden" name="settings_section" value="general" />
10
-
11
- <div class="greeting-box">
12
- <div class="main-message">
13
- <?php _e('Thank you for choosing Ecwid to build your online store.', 'ecwid-shopping-cart'); ?>
14
- </div>
15
- <div class="secondary-message">
16
- <?php _e('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.', 'ecwid-shopping-cart'); ?>
17
- </div>
18
- </div>
19
- <hr />
20
-
21
- <ol>
22
- <li>
23
- <h4><?php _e('Register at Ecwid', 'ecwid-shopping-cart'); ?></h4>
24
- <div>
25
- <?php _e('Create a new Ecwid account which you will use to manage your store and inventory. The registration is free.', 'ecwid-shopping-cart'); ?>
26
- </div>
27
- <div class="ecwid-account-buttons">
28
- <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#register">
29
- <?php _e('Create new Ecwid account', 'ecwid-shopping-cart'); ?>
30
- </a>
31
- <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
32
- <?php _e('I already have Ecwid account, sign in', 'ecwid-shopping-cart'); ?>
33
- </a>
34
- </div>
35
- <div class="note">
36
- <?php _e('You will be able to sign up through your exising Google, Facebook or PayPal profiles as well.', 'ecwid-shopping-cart'); ?>
37
- </div>
38
- </li>
39
- <li>
40
- <h4><?php _e('Find your Store ID', 'ecwid-shopping-cart'); ?></h4>
41
- <div>
42
- <?php _e('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.', 'ecwid-shopping-cart'); ?>
43
- </div>
44
- </li>
45
- <li>
46
- <h4>
47
- <?php _e('Enter your Store ID', 'ecwid-shopping-cart'); ?>
48
- </h4>
49
- <div><label for="ecwid_store_id"><?php _e('Enter your Store ID here:', 'ecwid-shopping-cart'); ?></label></div>
50
- <div class="pure-control-group store-id">
51
- <input
52
- id="ecwid_store_id"
53
- name="ecwid_store_id"
54
- type="text"
55
- placeholder="<?php _e('Store ID', 'ecwid-shopping-cart'); ?>"
56
- value="<?php if (get_ecwid_store_id() != 1003) echo esc_attr(get_ecwid_store_id()); ?>"
57
- />
58
- <button type="submit" class="pure-button pure-button-primary"><?php _e('Save and connect your Ecwid store to the site', 'ecwid-shopping-cart'); ?></button>
59
- </div>
60
-
61
- </li>
62
- </ol>
63
- <hr />
64
- <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>.', 'ecwid-shopping-cart'); ?></p>
65
- </fieldset>
66
- </form>
 
 
 
67
  </div>
1
+ <div class="wrap pure-form ecwid-settings general-settings">
2
+
3
+ <h2><?php _e('Ecwid Shopping Cart - General settings', 'ecwid-shopping-cart'); ?></h2>
4
+
5
+ <form method="POST" action="options.php">
6
+ <?php settings_fields('ecwid_options_page'); ?>
7
+ <fieldset>
8
+
9
+ <input type="hidden" name="settings_section" value="general" />
10
+
11
+ <div class="greeting-box" style="position: relative">
12
+ <div class="main-message">
13
+
14
+ <?php _e('Thank you for choosing Ecwid to build your online store.', 'ecwid-shopping-cart'); ?>
15
+ </div>
16
+ <div class="secondary-message">
17
+ <?php _e('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.', 'ecwid-shopping-cart'); ?>
18
+ </div>
19
+
20
+ <img class="greeting-image" src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
21
+ </div>
22
+ <hr />
23
+
24
+ <ol>
25
+ <li>
26
+ <h4><?php _e('Register at Ecwid', 'ecwid-shopping-cart'); ?></h4>
27
+ <div>
28
+ <?php _e('Create a new Ecwid account which you will use to manage your store and inventory. The registration is free.', 'ecwid-shopping-cart'); ?>
29
+ </div>
30
+ <div class="ecwid-account-buttons">
31
+ <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#register">
32
+ <?php _e('Create new Ecwid account', 'ecwid-shopping-cart'); ?>
33
+ </a>
34
+ <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
35
+ <?php _e('I already have Ecwid account, sign in', 'ecwid-shopping-cart'); ?>
36
+ </a>
37
+ </div>
38
+ <div class="note">
39
+ <?php _e('You will be able to sign up through your exising Google, Facebook or PayPal profiles as well.', 'ecwid-shopping-cart'); ?>
40
+ </div>
41
+ </li>
42
+ <li>
43
+ <h4><?php _e('Find your Store ID', 'ecwid-shopping-cart'); ?></h4>
44
+ <div>
45
+ <?php _e('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.', 'ecwid-shopping-cart'); ?>
46
+ </div>
47
+ </li>
48
+ <li>
49
+ <h4>
50
+ <?php _e('Enter your Store ID', 'ecwid-shopping-cart'); ?>
51
+ </h4>
52
+ <div><label for="ecwid_store_id"><?php _e('Enter your Store ID here:', 'ecwid-shopping-cart'); ?></label></div>
53
+ <div class="pure-control-group store-id">
54
+ <input
55
+ id="ecwid_store_id"
56
+ name="ecwid_store_id"
57
+ type="text"
58
+ placeholder="<?php _e('Store ID', 'ecwid-shopping-cart'); ?>"
59
+ value="<?php if (get_ecwid_store_id() != 1003) echo esc_attr(get_ecwid_store_id()); ?>"
60
+ />
61
+ <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>"><?php _e('Save and connect your Ecwid store to the site', 'ecwid-shopping-cart'); ?></button>
62
+ </div>
63
+
64
+ </li>
65
+ </ol>
66
+ <hr />
67
+ <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>.', 'ecwid-shopping-cart'); ?></p>
68
+ </fieldset>
69
+ </form>
70
  </div>
templates/general-settings.php CHANGED
@@ -1,91 +1,92 @@
1
- <div class="wrap pure-form ecwid-settings general-settings">
2
- <h2><?php _e('Ecwid Shopping Cart - General settings', 'ecwid-shopping-cart'); ?></h2>
3
-
4
-
5
- <form method="POST" action="options.php" name="settings">
6
- <?php settings_fields('ecwid_options_page'); ?>
7
- <fieldset>
8
-
9
- <input type="hidden" name="settings_section" value="general" />
10
-
11
- <div class="greeting-box complete">
12
- <?php if ($_GET['settings-updated']): ?>
13
-
14
- <div class="main-message"><?php _e('Congratulations!', 'ecwid-shopping-cart'); ?></div>
15
- <div class="secondary-message"?><?php _e('Your Ecwid store is now connected to your WordPress website.', 'ecwid-shopping-cart'); ?></div>
16
-
17
- <?php else: ?>
18
-
19
- <div class="main-message"><?php _e('Greetings!', 'ecwid-shopping-cart'); ?></div>
20
- <div class="secondary-message"?><?php _e('Your Ecwid store is connected to your WordPress website.', 'ecwid-shopping-cart'); ?></div>
21
- <?php endif; ?>
22
- </div>
23
- <hr />
24
- <div class="section">
25
- <div class="left">
26
- <span class="main-info">
27
- <?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <strong><? echo esc_attr(get_ecwid_store_id()); ?></strong>
28
- </span>
29
- </div>
30
- <div class="right"">
31
- <a class="pure-button" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
32
- <?php _e('Control panel', 'ecwid-shopping-cart'); ?>
33
- </a>
34
- <a class="pure-button" target="_blank" href="<?php echo esc_attr(get_page_link(get_option('ecwid_store_page_id'))); ?>">
35
- <?php _e('Visit storefront', 'ecwid-shopping-cart'); ?>
36
- </a>
37
- </div>
38
- </div>
39
-
40
- <div class="section">
41
- <div class="left">
42
- <span class="main-info">
43
- <?php _e('Account status', 'ecwid-shopping-cart'); ?>:
44
- <strong>
45
- <?php
46
- if (ecwid_is_paid_account()) {
47
- _e('Paid', 'ecwid-shopping-cart');
48
- } else {
49
- _e('Free', 'ecwid-shopping-cart');
50
- }
51
- ?>
52
- </strong>
53
- </span>
54
- <div class="secondary-info">
55
- <?php
56
- if (ecwid_is_paid_account())
57
- _e('Thank you for supporting Ecwid!', 'ecwid-shopping-cart');
58
- else
59
- _e('Upgrade to get access to cool premium features.', 'ecwid-shopping-cart');
60
- ?>
61
- </div>
62
- </div>
63
-
64
- <div class="right">
65
- <?php if (ecwid_is_api_enabled()): ?>
66
- <a class="pure-button" target="_blank" href="https://my.ecwid.com/cp/CP.html#profile=Billing&t2=My_Profile">
67
- <?php _e('Billing and plans', 'ecwid-shopping-cart'); ?>
68
- </a>
69
- <?php else: ?>
70
- <a class="pure-button pure-button-primary" target="_blank" href="http://www.ecwid.com/plans-and-pricing.html">
71
- <?php _e('Upgrade', 'ecwid-shopping-cart'); ?>
72
- </a>
73
- <?php endif; ?>
74
- </div>
75
- </div>
76
-
77
- <div class="note grayed-links">
78
- <?php
79
- echo sprintf(
80
- __('If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>.', 'ecwid-shopping-cart'),
81
- 'href="#" onClick="javascript:document.forms[\'settings\'].submit(); return false;"'
82
- );
83
- ?>
84
-
85
- </div>
86
-
87
- <hr />
88
- <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>.', 'ecwid-shopping-cart'); ?></p>
89
- </fieldset>
90
- </form>
 
91
  </div>
1
+ <div class="wrap pure-form ecwid-settings general-settings">
2
+ <h2><?php _e('Ecwid Shopping Cart - General settings', 'ecwid-shopping-cart'); ?></h2>
3
+
4
+
5
+ <form method="POST" action="options.php" name="settings">
6
+ <?php settings_fields('ecwid_options_page'); ?>
7
+ <fieldset>
8
+
9
+ <input type="hidden" name="settings_section" value="general" />
10
+
11
+ <div class="greeting-box complete">
12
+ <?php if ($_GET['settings-updated']): ?>
13
+
14
+ <div class="main-message"><?php _e('Congratulations!', 'ecwid-shopping-cart'); ?></div>
15
+ <div class="secondary-message"?><?php _e('Your Ecwid store is now connected to your WordPress website.', 'ecwid-shopping-cart'); ?></div>
16
+
17
+ <?php else: ?>
18
+
19
+ <div class="main-message"><?php _e('Greetings!', 'ecwid-shopping-cart'); ?></div>
20
+ <div class="secondary-message"?><?php _e('Your Ecwid store is connected to your WordPress website.', 'ecwid-shopping-cart'); ?></div>
21
+ <?php endif; ?>
22
+ <img class="greeting-image" src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_ready.png" width="142" />
23
+ </div>
24
+ <hr />
25
+ <div class="section">
26
+ <div class="left">
27
+ <span class="main-info">
28
+ <?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <strong><? echo esc_attr(get_ecwid_store_id()); ?></strong>
29
+ </span>
30
+ </div>
31
+ <div class="right"">
32
+ <a class="pure-button" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
33
+ <?php _e('Control panel', 'ecwid-shopping-cart'); ?>
34
+ </a>
35
+ <a class="pure-button" target="_blank" href="<?php echo esc_attr(get_page_link(get_option('ecwid_store_page_id'))); ?>">
36
+ <?php _e('Visit storefront', 'ecwid-shopping-cart'); ?>
37
+ </a>
38
+ </div>
39
+ </div>
40
+
41
+ <div class="section">
42
+ <div class="left">
43
+ <span class="main-info">
44
+ <?php _e('Account status', 'ecwid-shopping-cart'); ?>:
45
+ <strong>
46
+ <?php
47
+ if (ecwid_is_paid_account()) {
48
+ _e('Paid', 'ecwid-shopping-cart');
49
+ } else {
50
+ _e('Free', 'ecwid-shopping-cart');
51
+ }
52
+ ?>
53
+ </strong>
54
+ </span>
55
+ <div class="secondary-info">
56
+ <?php
57
+ if (ecwid_is_paid_account())
58
+ _e('Thank you for supporting Ecwid!', 'ecwid-shopping-cart');
59
+ else
60
+ _e('Upgrade to get access to cool premium features.', 'ecwid-shopping-cart');
61
+ ?>
62
+ </div>
63
+ </div>
64
+
65
+ <div class="right">
66
+ <?php if (ecwid_is_api_enabled()): ?>
67
+ <a class="pure-button" target="_blank" href="https://my.ecwid.com/cp/CP.html#profile=Billing&t2=My_Profile">
68
+ <?php _e('Billing and plans', 'ecwid-shopping-cart'); ?>
69
+ </a>
70
+ <?php else: ?>
71
+ <a class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>" target="_blank" href="http://www.ecwid.com/plans-and-pricing.html">
72
+ <?php _e('Upgrade', 'ecwid-shopping-cart'); ?>
73
+ </a>
74
+ <?php endif; ?>
75
+ </div>
76
+ </div>
77
+
78
+ <div class="note grayed-links">
79
+ <?php
80
+ echo sprintf(
81
+ __('If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>.', 'ecwid-shopping-cart'),
82
+ 'href="#" onClick="javascript:document.forms[\'settings\'].submit(); return false;"'
83
+ );
84
+ ?>
85
+
86
+ </div>
87
+
88
+ <hr />
89
+ <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>.', 'ecwid-shopping-cart'); ?></p>
90
+ </fieldset>
91
+ </form>
92
  </div>