Ecwid Ecommerce Shopping Cart - Version 5.4.2

Version Description

  • Loading speed optimization for the Single Product widgets. We continue working on improving the Ecwid ecommerce plugin loading speed. This update includes optimization of single product widgets. The optimization should have especially good effect if you added multiple single product widgets on a page (e.g. for creating a featured slider or a customized products grid).
  • The Recently Viewed Products widget is also optimized. It now works much faster. If you havent used the widget before, feel free to enable it under Appearance -> Widgets.
  • The legacy Appearance settings page is removed from the plugin admin menu. The old Appearance settings page was removed from the plugin settings navigation. To configure the product catalog settings (displayed widgets, products per page etc), you can open your store page for editing in the WordPress admin backend and click the Edit appearance button there. If you dont have a store on the page, click the Add store button in the page editor and set the appearance settings there they will be applied to your store on that page.
  • Fixed Strict standards code notices. Some users may discover this notice on their site, if the debugging messages are not disabled in the Wordpress installation. That didnt affect the store functionality, but looked odd. We fixed that there should not be any warning messages displayed now.
  • Minor fixes and improvements.
Download this release

Release Info

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

Code changes from version 5.4.1 to 5.4.2

Files changed (54) hide show
  1. css/pure-min.css +0 -11
  2. css/settings.3.8.css +0 -41
  3. css/settings.css +0 -25
  4. ecwid-shopping-cart.php +19 -51
  5. ecwid_menu_icon.png +0 -0
  6. images/grid-active.png +0 -0
  7. images/grid-default.png +0 -0
  8. images/grid.png +0 -0
  9. images/list-active.png +0 -0
  10. images/list-default.png +0 -0
  11. images/list.png +0 -0
  12. images/table-active.png +0 -0
  13. images/table-default.png +0 -0
  14. images/table.png +0 -0
  15. includes/class-ecwid-admin.php +0 -10
  16. includes/class-ecwid-kissmetrics.php +0 -122
  17. includes/class-ecwid-product-popup.php +2 -0
  18. includes/shortcodes/class-ecwid-shortcode-product.php +4 -2
  19. includes/widgets/class-ecwid-widget-recently-viewed.php +23 -4
  20. js/advanced.js +0 -0
  21. js/chameleon.js +0 -5
  22. js/ecwid-chameleon.js +0 -253
  23. js/kissmetrics.js +0 -50
  24. js/product-popup.js +17 -2
  25. js/themes/flora.js +0 -2
  26. js/themes/thevoux-wp.js +0 -2
  27. languages/ecwid-shopping-cart.pot +1074 -142
  28. lib/EcwidCatalog.php +0 -269
  29. lib/EcwidSitemapBuilder.php +0 -85
  30. lib/JSONStreamingParser/LICENSE.txt +0 -8
  31. lib/JSONStreamingParser/Listener.php +0 -20
  32. lib/JSONStreamingParser/Listener/SubsetConsumer.php +0 -75
  33. lib/JSONStreamingParser/Parser.php +0 -493
  34. lib/JSONStreamingParser/ParsingError.php +0 -12
  35. lib/class-ecwid-message-manager.php +0 -236
  36. lib/class-ecwid-theme-manager.php +0 -173
  37. lib/ecwid_api_v3.php +8 -8
  38. lib/ecwid_catalog_entry.php +8 -4
  39. lib/ecwid_category.php +4 -4
  40. lib/ecwid_product.php +67 -26
  41. lib/html-catalog-templates/product.php +1 -1
  42. lib/themes.php +0 -58
  43. lib/themes/class-ecwid-theme-2014.php +0 -21
  44. lib/themes/class-ecwid-theme-base.php +0 -24
  45. lib/themes/class-ecwid-theme-bretheon.php +0 -36
  46. lib/themes/class-ecwid-theme-pagelines.php +0 -19
  47. lib/themes/class-ecwid-theme-responsive.php +0 -56
  48. readme.txt +9 -1
  49. templates/advanced-settings.php +1 -31
  50. templates/appearance-settings.php +0 -222
  51. templates/general-settings-initial.php +0 -75
  52. templates/general-settings.php +0 -75
  53. templates/setup.php +0 -75
  54. templates/wp-dashboard-widget.php +0 -146
css/pure-min.css DELETED
@@ -1,11 +0,0 @@
1
- /*!
2
- Pure v0.3.0
3
- Copyright 2013 Yahoo! Inc. All rights reserved.
4
- Licensed under the BSD License.
5
- https://github.com/yui/pure/blob/master/LICENSE.md
6
- */
7
- /*!
8
- normalize.css v1.1.2 | MIT License | git.io/normalize
9
- Copyright (c) Nicolas Gallagher and Jonathan Neal
10
- */
11
- /*! normalize.css v1.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1.5em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px;-webkit-transition:.1s linear -webkit-box-shadow;-moz-transition:.1s linear -moz-box-shadow;-ms-transition:.1s linear box-shadow;-o-transition:.1s linear box-shadow;transition:.1s linear box-shadow}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-ms-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;font-size:.8em;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-transition:.3s linear border;-moz-transition:.3s linear border;-ms-transition:.3s linear border;-o-transition:.3s linear border;transition:.3s linear border;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin dotted #333;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border:1px solid #ee5f5b}.pure-form input:focus:invalid:focus,.pure-form textarea:focus:invalid:focus,.pure-form select:focus:invalid:focus{border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em;font-size:90%}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;font-size:125%;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 10em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input{display:block;padding:10px;margin:0;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus{z-index:2}.pure-form .pure-group input:first-child{top:1px;border-radius:4px 4px 0 0}.pure-form .pure-group input:last-child{top:-2px;border-radius:0 0 4px 4px}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.pure-form-message{display:block;color:#666;font-size:90%}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:80%;padding:.2em 0 .8em}}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-5-24,.pure-u-7-24,.pure-u-11-24,.pure-u-13-24,.pure-u-17-24,.pure-u-19-24,.pure-u-23-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1{width:100%}.pure-u-1-2{width:50%;*width:49.969%}.pure-u-1-3{width:33.3333%;*width:33.3023%}.pure-u-2-3{width:66.6667%;*width:66.6357%}.pure-u-1-4{width:25%;*width:24.969%}.pure-u-3-4{width:75%;*width:74.969%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-1-6{width:16.6667%;*width:16.6357%}.pure-u-5-6{width:83.3333%;*width:83.3023%}.pure-u-1-8{width:12.5%;*width:12.469%}.pure-u-3-8{width:37.5%;*width:37.469%}.pure-u-5-8{width:62.5%;*width:62.469%}.pure-u-7-8{width:87.5%;*width:87.469%}.pure-u-1-12{width:8.3333%;*width:8.3023%}.pure-u-5-12{width:41.6667%;*width:41.6357%}.pure-u-7-12{width:58.3333%;*width:58.3023%}.pure-u-11-12{width:91.6667%;*width:91.6357%}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-g-r{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g-r{word-spacing:-.43em}.pure-g-r [class *="pure-u"]{font-family:sans-serif}.pure-g-r img{max-width:100%;height:auto}@media (min-width:980px){.pure-visible-phone{display:none}.pure-visible-tablet{display:none}.pure-hidden-desktop{display:none}}@media (max-width:480px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}}@media (max-width:767px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}.pure-hidden-phone{display:none}.pure-visible-desktop{display:none}}@media (min-width:768px) and (max-width:979px){.pure-hidden-tablet{display:none}.pure-visible-desktop{display:none}}.pure-menu ul{position:absolute;visibility:hidden}.pure-menu.pure-menu-open{visibility:visible;z-index:2;width:100%}.pure-menu ul{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.pure-menu>ul{position:relative}.pure-menu-open>ul{left:0;top:0;visibility:visible}.pure-menu-open>ul:focus{outline:0}.pure-menu li{position:relative}.pure-menu a,.pure-menu .pure-menu-heading{display:block;color:inherit;line-height:1.5em;padding:5px 20px;text-decoration:none;white-space:nowrap}.pure-menu.pure-menu-horizontal>.pure-menu-heading{display:inline-block;*display:inline;zoom:1;margin:0;vertical-align:middle}.pure-menu.pure-menu-horizontal>ul{display:inline-block;*display:inline;zoom:1;vertical-align:middle;height:2.4em}.pure-menu li a{padding:5px 20px}.pure-menu-can-have-children>.pure-menu-label:after{content:'\25B8';float:right;font-family:'Lucida Grande','Lucida Sans Unicode','DejaVu Sans',sans-serif;margin-right:-20px;margin-top:-1px}.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px 2px;overflow:hidden}.pure-menu-hidden{display:none}.pure-menu-fixed{position:fixed;top:0;left:0;width:100%}.pure-menu-horizontal li{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-horizontal li li{display:block}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label:after{content:"\25BE"}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-horizontal li.pure-menu-separator{height:50%;width:1px;margin:0 7px}.pure-menu-horizontal li li.pure-menu-separator{height:1px;width:auto;margin:7px 2px}.pure-menu.pure-menu-open,.pure-menu.pure-menu-horizontal li .pure-menu-children{background:#fff;border:1px solid #b7b7b7}.pure-menu.pure-menu-horizontal,.pure-menu.pure-menu-horizontal .pure-menu-heading{border:0}.pure-menu a{border:1px solid transparent;border-left:0;border-right:0}.pure-menu a,.pure-menu .pure-menu-can-have-children>li:after{color:#777}.pure-menu .pure-menu-can-have-children>li:hover:after{color:#fff}.pure-menu .pure-menu-open{background:#dedede}.pure-menu li a:hover,.pure-menu li a:focus{background:#eee}.pure-menu li.pure-menu-disabled a:hover,.pure-menu li.pure-menu-disabled a:focus{background:#fff;color:#bfbfbf}.pure-menu .pure-menu-disabled>a{background-image:none;border-color:transparent;cursor:default}.pure-menu .pure-menu-disabled>a,.pure-menu .pure-menu-can-have-children.pure-menu-disabled>a:after{color:#bfbfbf}.pure-menu .pure-menu-heading{color:#565d64;text-transform:uppercase;font-size:90%;margin-top:.5em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dfdfdf}.pure-menu .pure-menu-selected a{color:#000}.pure-menu.pure-menu-open.pure-menu-fixed{border:0;border-bottom:1px solid #b7b7b7}.pure-paginator{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;list-style:none;margin:0;padding:0}.opera-only :-o-prefocus,.pure-paginator{word-spacing:-.43em}.pure-paginator li{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-paginator .pure-button{border-radius:0;padding:.8em 1.4em;vertical-align:top;height:1.1em}.pure-paginator .pure-button:focus,.pure-paginator .pure-button:active{outline-style:none}.pure-paginator .prev,.pure-paginator .next{color:#C0C1C3;text-shadow:0 -1px 0 rgba(0,0,0,.45)}.pure-paginator .prev{border-radius:2px 0 0 2px}.pure-paginator .next{border-radius:0 2px 2px 0}@media (max-width:480px){.pure-menu-horizontal{width:100%}.pure-menu-children li{display:block;border-bottom:1px solid #000}}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:6px 12px}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}
 
 
 
 
 
 
 
 
 
 
 
css/settings.3.8.css CHANGED
@@ -58,7 +58,6 @@
58
 
59
  @media screen and (max-width: 782px) {
60
  .ecwid-settings.general-settings,
61
- .ecwid-settings.appearance-settings,
62
  .ecwid-settings.advanced-settings
63
  {
64
  max-width: inherit;
@@ -143,46 +142,6 @@
143
  position: relative;
144
  }
145
 
146
- .appearance-settings.ecwid-settings .ecwid-pb-view-size {
147
- display: block;
148
- }
149
-
150
- .appearance-settings.ecwid-settings .ecwid-pb-view-size input {
151
- position: relative;
152
- z-index: 2;
153
- }
154
-
155
- .appearance-settings.ecwid-settings .pure-control-group.small-input input {
156
- margin: 0px auto;
157
- }
158
-
159
- .appearance-settings.ecwid-settings .ecwid-pb-view-size {
160
- margin: 0px auto 33px;
161
- padding: 0px;
162
- }
163
-
164
- .appearance-settings.ecwid-settings .ecwid-pb-view-size .ruler {
165
- z-index: 1;
166
- position: absolute;
167
- }
168
-
169
- .appearance-settings.ecwid-settings .ecwid-pb-view-size .bottom {
170
- margin-top: 5px;
171
- }
172
-
173
- .appearance-settings.ecwid-settings .ecwid-pb-view-size.list,
174
- .appearance-settings.ecwid-settings .ecwid-pb-view-size.table {
175
- margin-bottom: 0px;
176
- }
177
-
178
- .appearance-settings.ecwid-settings .note.pb-note {
179
- margin: 0px;
180
- }
181
-
182
- .appearance-settings.ecwid-settings select {
183
- width: 100%;
184
- }
185
-
186
  .advanced-settings.ecwid-settings .pure-control-group:not(.checkbox) label {
187
  margin-top:35px;
188
  }
58
 
59
  @media screen and (max-width: 782px) {
60
  .ecwid-settings.general-settings,
 
61
  .ecwid-settings.advanced-settings
62
  {
63
  max-width: inherit;
142
  position: relative;
143
  }
144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  .advanced-settings.ecwid-settings .pure-control-group:not(.checkbox) label {
146
  margin-top:35px;
147
  }
css/settings.css CHANGED
@@ -133,16 +133,6 @@ display: none;
133
  color: #444444;
134
  }
135
 
136
- .ecwid-settings.appearance-settings h3 {
137
- font-size: 12px;
138
- }
139
-
140
- .ecwid-settings.appearance-settings input[type=text] {
141
- font-size: 13px;
142
- padding: 5px 3px 4px 3px;
143
- outline-offset: 0px;
144
- }
145
-
146
  .ecwid-settings input[type=text].number {
147
  width: 27px;
148
  text-align: center;
@@ -157,21 +147,6 @@ display: none;
157
  margin-left: 30px;
158
  }
159
 
160
- .ecwid-settings.appearance-settings {
161
- max-width: 650px;
162
- }
163
-
164
- .ecwid-settings.appearance-settings .products-per-page-label {
165
- padding-top: 5px;
166
- padding-bottom: 15px;
167
- display: block;
168
- }
169
-
170
- .ecwid-settings.appearance-settings input[type=checkbox] {
171
- margin-right: 3px;
172
- margin-left: 7px;
173
- }
174
-
175
  .ecwid-pb-view-size {
176
  display: inline-block;
177
  position: relative;
133
  color: #444444;
134
  }
135
 
 
 
 
 
 
 
 
 
 
 
136
  .ecwid-settings input[type=text].number {
137
  width: 27px;
138
  text-align: center;
147
  margin-left: 30px;
148
  }
149
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  .ecwid-pb-view-size {
151
  display: inline-block;
152
  position: relative;
ecwid-shopping-cart.php CHANGED
@@ -5,7 +5,7 @@ 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: 5.4.1
9
  Author URI: http://www.ecwid.com?source=wporg
10
  */
11
 
@@ -620,6 +620,9 @@ function ecwid_check_version()
620
  delete_option('ecwid_use_new_search');
621
  delete_option('ecwid_use_new_categories');
622
  // /Since 5.4
 
 
 
623
 
624
  Ecwid_Config::load_from_ini();
625
 
@@ -636,6 +639,8 @@ function ecwid_check_version()
636
 
637
  flush_rewrite_rules();
638
  }
 
 
639
  }
640
 
641
  function ecwid_get_woocommerce_status() {
@@ -1008,7 +1013,7 @@ function ecwid_canonical() {
1008
  $link = $product->url;
1009
  } elseif ( $params['mode'] == 'category' ) {
1010
  $category = Ecwid_Category::get_by_id( $params['id'] );
1011
- $link = $category->url;
1012
  }
1013
  }
1014
  }
@@ -1213,7 +1218,7 @@ function _ecwid_get_seo_title()
1213
 
1214
  if ( $params['mode'] == 'product' ) {
1215
  $product = Ecwid_Product::get_by_id( $params['id'] );
1216
- if ( isset( $product->seoTitle ) ) {
1217
  $ecwid_seo_title = $product->seoTitle;
1218
  } else {
1219
  $ecwid_seo_title = $product->name;
@@ -1221,13 +1226,15 @@ function _ecwid_get_seo_title()
1221
 
1222
  if ( $product->defaultCategoryId ) {
1223
  $category = $api->get_category( $product->defaultCategoryId );
1224
- if ( $category ) {
1225
  $ecwid_seo_title .= ' ' . ecwid_get_title_separator() . ' ' . $category->name;
1226
  }
1227
  }
1228
  } else if ( $params['mode'] == 'category' ) {
1229
  $category = $api->get_category( $params['id'] );
1230
- $ecwid_seo_title = $category->name;
 
 
1231
  }
1232
  }
1233
  }
@@ -1252,10 +1259,10 @@ function ecwid_oembed_url( $url, $permalink, $format ) {
1252
 
1253
  if ( $params['mode'] == 'product' ){
1254
  $product = Ecwid_Product::get_by_id( $params['id'] );
1255
- $permalink = $product->url;
1256
  } else if ( $params['mode'] == 'category' ) {
1257
  $category = Ecwid_Category::get_by_id( $params['id'] );
1258
- $permalink = $category->url;
1259
  }
1260
 
1261
  $url = add_query_arg( array(
@@ -1340,10 +1347,6 @@ function ecwid_get_scriptjs_params( $force_lang = null ) {
1340
  $params .= '&data_sync_products=1';
1341
  }
1342
 
1343
- if ( Ecwid_Seo_Links::is_enabled() ) {
1344
- $params .= '&data_clean_urls=1';
1345
- }
1346
-
1347
  return $params;
1348
  }
1349
 
@@ -1557,8 +1560,6 @@ EOT;
1557
 
1558
  add_option("ecwid_installation_date", time());
1559
 
1560
- add_option('ecwid_hide_appearance_menu', get_option('ecwid_store_id') == ECWID_DEMO_STORE_ID ? 'Y' : 'N', '', 'yes');
1561
-
1562
  /* All new options should go to check_version thing */
1563
 
1564
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-nav-menus.php';
@@ -1803,21 +1804,6 @@ function ecwid_settings_api_init() {
1803
 
1804
  if ( isset( $_POST['settings_section'] ) ) {
1805
  switch ( $_POST['settings_section'] ) {
1806
- case 'appearance':
1807
- register_setting( 'ecwid_options_page', 'ecwid_enable_minicart' );
1808
-
1809
- register_setting( 'ecwid_options_page', 'ecwid_show_categories' );
1810
- register_setting( 'ecwid_options_page', 'ecwid_show_search_box' );
1811
-
1812
- register_setting( 'ecwid_options_page', 'ecwid_pb_categoriesperrow', 'ecwid_abs_intval' );
1813
- register_setting( 'ecwid_options_page', 'ecwid_pb_productspercolumn_grid', 'ecwid_abs_intval' );
1814
- register_setting( 'ecwid_options_page', 'ecwid_pb_productsperrow_grid', 'ecwid_abs_intval' );
1815
- register_setting( 'ecwid_options_page', 'ecwid_pb_productsperpage_list', 'ecwid_abs_intval' );
1816
- register_setting( 'ecwid_options_page', 'ecwid_pb_productsperpage_table', 'ecwid_abs_intval' );
1817
- register_setting( 'ecwid_options_page', 'ecwid_pb_defaultview' );
1818
- register_setting( 'ecwid_options_page', 'ecwid_pb_searchview' );
1819
- break;
1820
-
1821
  case 'general':
1822
  register_setting( 'ecwid_options_page', 'ecwid_store_id', 'ecwid_abs_intval' );
1823
  if ( isset( $_POST['ecwid_store_id'] ) && intval( $_POST['ecwid_store_id'] ) == 0 ) {
@@ -1975,7 +1961,9 @@ function ecwid_general_settings_do_page() {
1975
  } else {
1976
  global $ecwid_oauth;
1977
 
1978
- if ( !$ecwid_oauth->has_scope( 'allow_sso' ) && !isset($_GET['reconnect']) ) {
 
 
1979
  if ( ecwid_test_oauth(true) ) {
1980
  require_once ECWID_PLUGIN_DIR . 'templates/reconnect-sso.php';
1981
  } else {
@@ -2287,27 +2275,6 @@ function ecwid_get_admin_iframe_upgrade_page() {
2287
  return 'billing:feature=sso&plan=ecwid_venture';
2288
  }
2289
 
2290
- function ecwid_appearance_settings_do_page() {
2291
-
2292
- wp_register_script('ecwid-appearance-js', ECWID_PLUGIN_URL . 'js/appearance.js', array(), get_option('ecwid_plugin_version'), true);
2293
- wp_enqueue_script('ecwid-appearance-js');
2294
-
2295
- $disabled = false;
2296
- if (!empty($ecwid_page_id) && ($ecwid_page_id > 0)) {
2297
- $_tmp_page = get_post($ecwid_page_id);
2298
- $content = $_tmp_page->post_content;
2299
- if ( (strpos($content, "[ecwid_productbrowser]") === false) && (strpos($content, "xProductBrowser") !== false) )
2300
- $disabled = true;
2301
- }
2302
- // $disabled_str is used in appearance settings template
2303
- if ($disabled)
2304
- $disabled_str = 'disabled = "disabled"';
2305
- else
2306
- $disabled_str = "";
2307
-
2308
- require_once ECWID_PLUGIN_DIR . 'templates/appearance-settings.php';
2309
- }
2310
-
2311
  function ecwid_debug_do_page() {
2312
 
2313
  if ( array_key_exists( 'reset_cache', $_GET ) ) {
@@ -2737,7 +2704,8 @@ function ecwid_update_store_id( $new_store_id ) {
2737
  update_option( 'ecwid_api_check_time', 0 );
2738
 
2739
  ecwid_invalidate_cache( true );
2740
-
 
2741
  do_action('ecwid_update_store_id', $new_store_id);
2742
  }
2743
 
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: 5.4.2
9
  Author URI: http://www.ecwid.com?source=wporg
10
  */
11
 
620
  delete_option('ecwid_use_new_search');
621
  delete_option('ecwid_use_new_categories');
622
  // /Since 5.4
623
+
624
+ // Since 5.4.2
625
+ delete_option('ecwid_hide_appearance_menu');
626
 
627
  Ecwid_Config::load_from_ini();
628
 
639
 
640
  flush_rewrite_rules();
641
  }
642
+
643
+ add_option('ecwid_disable_dashboard', '');
644
  }
645
 
646
  function ecwid_get_woocommerce_status() {
1013
  $link = $product->url;
1014
  } elseif ( $params['mode'] == 'category' ) {
1015
  $category = Ecwid_Category::get_by_id( $params['id'] );
1016
+ $link = $category->link;
1017
  }
1018
  }
1019
  }
1218
 
1219
  if ( $params['mode'] == 'product' ) {
1220
  $product = Ecwid_Product::get_by_id( $params['id'] );
1221
+ if ( isset( $product->seoTitle ) && !empty( $product->seoTitle ) ) {
1222
  $ecwid_seo_title = $product->seoTitle;
1223
  } else {
1224
  $ecwid_seo_title = $product->name;
1226
 
1227
  if ( $product->defaultCategoryId ) {
1228
  $category = $api->get_category( $product->defaultCategoryId );
1229
+ if ( $category && isset($category->name)) {
1230
  $ecwid_seo_title .= ' ' . ecwid_get_title_separator() . ' ' . $category->name;
1231
  }
1232
  }
1233
  } else if ( $params['mode'] == 'category' ) {
1234
  $category = $api->get_category( $params['id'] );
1235
+ if ( $category && isset( $category->name ) ) {
1236
+ $ecwid_seo_title = $category->name;
1237
+ }
1238
  }
1239
  }
1240
  }
1259
 
1260
  if ( $params['mode'] == 'product' ){
1261
  $product = Ecwid_Product::get_by_id( $params['id'] );
1262
+ $permalink = $product->link;
1263
  } else if ( $params['mode'] == 'category' ) {
1264
  $category = Ecwid_Category::get_by_id( $params['id'] );
1265
+ $permalink = $category->link;
1266
  }
1267
 
1268
  $url = add_query_arg( array(
1347
  $params .= '&data_sync_products=1';
1348
  }
1349
 
 
 
 
 
1350
  return $params;
1351
  }
1352
 
1560
 
1561
  add_option("ecwid_installation_date", time());
1562
 
 
 
1563
  /* All new options should go to check_version thing */
1564
 
1565
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-nav-menus.php';
1804
 
1805
  if ( isset( $_POST['settings_section'] ) ) {
1806
  switch ( $_POST['settings_section'] ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1807
  case 'general':
1808
  register_setting( 'ecwid_options_page', 'ecwid_store_id', 'ecwid_abs_intval' );
1809
  if ( isset( $_POST['ecwid_store_id'] ) && intval( $_POST['ecwid_store_id'] ) == 0 ) {
1961
  } else {
1962
  global $ecwid_oauth;
1963
 
1964
+ if ( get_option('ecwid_disable_dashboard') ) {
1965
+ require_once ECWID_PLUGIN_DIR . 'templates/dashboard.php';
1966
+ } else if ( !$ecwid_oauth->has_scope( 'allow_sso' ) && !isset($_GET['reconnect']) ) {
1967
  if ( ecwid_test_oauth(true) ) {
1968
  require_once ECWID_PLUGIN_DIR . 'templates/reconnect-sso.php';
1969
  } else {
2275
  return 'billing:feature=sso&plan=ecwid_venture';
2276
  }
2277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2278
  function ecwid_debug_do_page() {
2279
 
2280
  if ( array_key_exists( 'reset_cache', $_GET ) ) {
2704
  update_option( 'ecwid_api_check_time', 0 );
2705
 
2706
  ecwid_invalidate_cache( true );
2707
+ EcwidPlatform::cache_reset('all_categories');
2708
+
2709
  do_action('ecwid_update_store_id', $new_store_id);
2710
  }
2711
 
ecwid_menu_icon.png DELETED
Binary file
images/grid-active.png DELETED
Binary file
images/grid-default.png DELETED
Binary file
images/grid.png DELETED
Binary file
images/list-active.png DELETED
Binary file
images/list-default.png DELETED
Binary file
images/list.png DELETED
Binary file
images/table-active.png DELETED
Binary file
images/table-default.png DELETED
Binary file
images/table.png DELETED
Binary file
includes/class-ecwid-admin.php CHANGED
@@ -62,16 +62,6 @@ class Ecwid_Admin {
62
  'ecwid_admin_products_do_page'
63
  );
64
  }
65
- if (get_option('ecwid_hide_appearance_menu') != 'Y') {
66
- add_submenu_page(
67
- self::ADMIN_SLUG,
68
- __('Appearance settings', 'ecwid-shopping-cart'),
69
- __('Appearance', 'ecwid-shopping-cart'),
70
- 'manage_options',
71
- self::ADMIN_SLUG . '-appearance',
72
- 'ecwid_appearance_settings_do_page'
73
- );
74
- }
75
 
76
  if (!$is_newbie || (isset($_GET['page']) && $_GET['page'] == 'ecwid-advanced')) {
77
  add_submenu_page(
62
  'ecwid_admin_products_do_page'
63
  );
64
  }
 
 
 
 
 
 
 
 
 
 
65
 
66
  if (!$is_newbie || (isset($_GET['page']) && $_GET['page'] == 'ecwid-advanced')) {
67
  add_submenu_page(
includes/class-ecwid-kissmetrics.php DELETED
@@ -1,122 +0,0 @@
1
- <?php
2
-
3
- class Ecwid_Kissmetrics {
4
-
5
- const API_KEY = '12a19b058a28c5db7b722584d59e60e4f080e142';
6
- const STORAGE_OPTION_NAME = 'ecwid_kissmetrics';
7
- const EVENT_PREFIX = 'wp-plugin ';
8
-
9
- static $instance;
10
-
11
- public static function init() {
12
- self::$instance = new Ecwid_Kissmetrics();
13
- }
14
-
15
- public static function record( $event ) {
16
- $fire_in_background = array( 'wpPluginDeactivated', 'wpPluginUninstalled' );
17
- $raw_names = array( 'Signed Up' );
18
-
19
- $name = in_array( $event, $raw_names ) ? $event : self::EVENT_PREFIX . $event;
20
-
21
- if ( in_array( $event, $fire_in_background ) ) {
22
- self::$instance->_record( $name );
23
- } else {
24
- self::$instance->_enqueue_record( $name );
25
- }
26
- }
27
-
28
- public static function set( $name, $value ) {
29
- self::$instance->_enqueue_property( $name, $value );
30
- }
31
-
32
- private function __construct() {
33
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_script' ) );
34
- }
35
-
36
- public function enqueue_script() {
37
- wp_enqueue_script('ecwid-kissmetrics', 'https://scripts.kissmetrics.com/' . self::API_KEY . '.2.js');
38
- wp_enqueue_script('ecwid-kissmetrics-events', ECWID_PLUGIN_URL . 'js/kissmetrics.js', array( 'ecwid-kissmetrics' ), get_option('ecwid_plugin_version') );
39
-
40
-
41
- $this->_enqueue_property('Storefront URL', ecwid_get_store_page_url());
42
- $this->_enqueue_property('WP Theme', ecwid_get_theme_name());
43
- $this->_enqueue_property('WP Chameleon Enabled', get_option('ecwid_use_chameleon') ? 'true' : 'false');
44
-
45
- $woo = 'none';
46
- $all_plugins = get_plugins();
47
- if (array_key_exists('woocommerce/woocommerce.php', $all_plugins)) {
48
- $active_plugins = get_option('active_plugins');
49
- if (in_array('woocommerce/woocommerce.php', $active_plugins)) {
50
- $woo = 'active';
51
- } else {
52
- $woo = 'inactive';
53
- }
54
- }
55
- $kissmetrics['woo'] = $woo;
56
- $this->_enqueue_property('Woocommerce installed', $woo);
57
-
58
- $kissmetrics = array(
59
- 'items' => $this->_get_pending(),
60
- 'key' => self::API_KEY
61
- );
62
-
63
- $this->_flush_pending();
64
-
65
- $store_id = get_ecwid_store_id();
66
- if ($store_id != ECWID_DEMO_STORE_ID) {
67
- $kissmetrics['store_id'] = $store_id;
68
- }
69
-
70
- wp_localize_script('ecwid-kissmetrics-events', 'ecwid_kissmetrics', $kissmetrics);
71
- }
72
-
73
- protected function _record($event) {
74
-
75
- $params = array(
76
- '_k' => self::API_KEY,
77
- '_p' => $_COOKIE['km_ai'],
78
- '_n' => $event
79
- );
80
- $query = http_build_query($params);
81
- //die(var_dump($_COOKIE));
82
-
83
- $result = wp_remote_get('http://trk.kissmetrics.com/e?' . $query);
84
- }
85
-
86
- protected function _enqueue_record( $event ) {
87
- $items = $this->_get_pending();
88
-
89
- array_push( $items, array( 'event' => $event ) );
90
-
91
- update_option ( self::STORAGE_OPTION_NAME, $items );
92
- }
93
-
94
- protected function _enqueue_property( $name, $value ) {
95
- $items = $this->_get_pending();
96
-
97
- array_push( $items, array(
98
- 'property' => array(
99
- $name => $value
100
- )
101
- )
102
- );
103
-
104
- update_option ( self::STORAGE_OPTION_NAME, $items );
105
- }
106
-
107
- protected function _get_pending() {
108
- $value = get_option( self::STORAGE_OPTION_NAME );
109
-
110
- if ( !is_array($value) ) {
111
- $value = array();
112
- }
113
-
114
- return $value;
115
- }
116
-
117
- protected function _flush_pending() {
118
- update_option( self::STORAGE_OPTION_NAME, null );
119
- }
120
- }
121
-
122
- Ecwid_Kissmetrics::init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-ecwid-product-popup.php CHANGED
@@ -57,6 +57,8 @@ class Ecwid_Product_Popup {
57
 
58
  $params['limit'] = 10;
59
 
 
 
60
  if ( array_key_exists( 'page', $_REQUEST ) ) {
61
  $params['offset'] = $params['limit'] * ( $_REQUEST['page'] - 1 );
62
  }
57
 
58
  $params['limit'] = 10;
59
 
60
+ $params['offset'] = 0;
61
+
62
  if ( array_key_exists( 'page', $_REQUEST ) ) {
63
  $params['offset'] = $params['limit'] * ( $_REQUEST['page'] - 1 );
64
  }
includes/shortcodes/class-ecwid-shortcode-product.php CHANGED
@@ -44,7 +44,7 @@ class Ecwid_Shortcode_Product extends Ecwid_Shortcode_Base {
44
  if (!in_array($version, array('1', '2'))) {
45
  $attributes['version'] = 1;
46
  }
47
-
48
  $this->params = $attributes;
49
  }
50
 
@@ -63,10 +63,12 @@ class Ecwid_Shortcode_Product extends Ecwid_Shortcode_Base {
63
 
64
  $items = preg_split('![^0-9^a-z^A-Z^\-^_]!', $this->params['display']);
65
 
 
 
66
  if (is_array($items) && count($items) > 0) foreach ($items as $item) {
67
  if (array_key_exists($item, $display_items)) {
68
  if ($this->params['link'] == 'yes' && in_array($item, array('title', 'picture'))) {
69
- $product_link = Ecwid_Store_Page::get_product_url( $this->params['id'] );
70
  $result .= '<a href="' . esc_url($product_link) . '">' . $display_items[$item] . '</a>';
71
  } else {
72
  $result .= $display_items[$item];
44
  if (!in_array($version, array('1', '2'))) {
45
  $attributes['version'] = 1;
46
  }
47
+
48
  $this->params = $attributes;
49
  }
50
 
63
 
64
  $items = preg_split('![^0-9^a-z^A-Z^\-^_]!', $this->params['display']);
65
 
66
+ $product = Ecwid_Product::get_without_loading( $this->params['id'], (object)array('name' => '') );
67
+
68
  if (is_array($items) && count($items) > 0) foreach ($items as $item) {
69
  if (array_key_exists($item, $display_items)) {
70
  if ($this->params['link'] == 'yes' && in_array($item, array('title', 'picture'))) {
71
+ $product_link = $product->link;
72
  $result .= '<a href="' . esc_url($product_link) . '">' . $display_items[$item] . '</a>';
73
  } else {
74
  $result .= $display_items[$item];
includes/widgets/class-ecwid-widget-recently-viewed.php CHANGED
@@ -53,20 +53,39 @@ class Ecwid_Widget_Recently_Viewed extends WP_Widget {
53
 
54
  echo '<div class="ecwid-recently-viewed-products" data-ecwid-max="' . $instance['number_of_products'] . '">';
55
 
56
- $counter = 0;
57
  $ids = array();
58
  if ($recently_viewed && isset($recently_viewed->products)) {
59
 
60
- for ($i = count($recently_viewed->products) - 1; $i >= 0; $i--) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  $product = Ecwid_Product::get_by_id( $recently_viewed->products[$i]->id );
62
 
63
  if (!$product) {
64
  $product = Ecwid_Product::from_stdclass(
65
- $recently_viewed->products[$i],
66
- 'imageUrl', 'link'
67
  );
68
  }
69
 
 
 
70
  $counter++;
71
  if ( isset( $product->id ) && isset( $product->link ) ) {
72
  $ids[] = $product->id;
53
 
54
  echo '<div class="ecwid-recently-viewed-products" data-ecwid-max="' . $instance['number_of_products'] . '">';
55
 
56
+ $counter = 1;
57
  $ids = array();
58
  if ($recently_viewed && isset($recently_viewed->products)) {
59
 
60
+ $to_load = array();
61
+
62
+ foreach( $recently_viewed->products as $product_data ) {
63
+ $product = Ecwid_Product::get_without_loading( $product_data->id );
64
+ if ( !@$product->imageUrl ) {
65
+ $to_load[] = $product_data->id;
66
+ }
67
+ }
68
+
69
+ if ( !empty( $to_load ) ) {
70
+ Ecwid_Product::load_by_ids($to_load);
71
+ }
72
+
73
+ for ( $i = count($recently_viewed->products) - 1; $i >= 0; $i-- ) {
74
+
75
+ if ( $counter > $instance['number_of_products'] ) {
76
+ break;
77
+ }
78
+
79
  $product = Ecwid_Product::get_by_id( $recently_viewed->products[$i]->id );
80
 
81
  if (!$product) {
82
  $product = Ecwid_Product::from_stdclass(
83
+ $recently_viewed->products[$i]
 
84
  );
85
  }
86
 
87
+ if (!$product->link)
88
+
89
  $counter++;
90
  if ( isset( $product->id ) && isset( $product->link ) ) {
91
  $ids[] = $product->id;
js/advanced.js DELETED
File without changes
js/chameleon.js DELETED
@@ -1,5 +0,0 @@
1
- window.ec = {
2
- config: {
3
- chameleon: ecwidChameleon
4
- }
5
- }
 
 
 
 
 
js/ecwid-chameleon.js DELETED
@@ -1,253 +0,0 @@
1
- if (typeof(Ecwid) == 'object') {
2
- Ecwid.OnAPILoaded.add(function() {
3
-
4
- var html_id = document.getElementsByTagName("html")[0].id;
5
- var body_id = document.getElementsByTagName("body")[0].id;;
6
- var css_prefix = 'html#'+html_id+' body#'+body_id+'.chameleon';
7
-
8
- var css = '';
9
- var parent = document.querySelector('.ecwid-shopping-cart-product-browser').parentNode;
10
- var computedStyle = getComputedStyle(parent, null);
11
-
12
- var primary_color = tinycolor( (typeof ecwidChameleon !== 'undefined' && typeof ecwidChameleon.primary_color !== 'undefined') ? ecwidChameleon.primary_color : computedStyle.color );
13
- var primary_background = tinycolor( (typeof ecwidChameleon !== 'undefined' && typeof ecwidChameleon.primary_background !== 'undefined') ? ecwidChameleon.primary_background : getBackground(parent) );
14
-
15
- if (typeof ecwidChameleon !== 'undefined' && typeof ecwidChameleon.primary_background !== 'undefined') {
16
- var primary_link = tinycolor( ecwidChameleon.primary_link );
17
- }
18
- else {
19
- var a = document.createElement('a');
20
- a.href = a.textContent = url = '';
21
- parent.appendChild(a);
22
- var primary_link = tinycolor( document.defaultView.getComputedStyle(a, null).color );
23
- parent.removeChild(a);
24
- }
25
-
26
- if (tinycolor.equals(primary_background, 'transparent')) {
27
- primary_background = tinycolor('#fff');
28
- }
29
-
30
- var accent_color = tinycolor(primary_link.toString()).darken(15).brighten();
31
- var muted_accent_color = tinycolor(primary_link.toString()).darken(15).setAlpha(.6);
32
-
33
- var hover_link = tinycolor(primary_link.toString()).lighten(20);
34
- var muted_color = (primary_color.isLight()) ? tinycolor(primary_color.toString()).darken(15) : tinycolor(primary_color.toString()).lighten(20);
35
- var muted_link = tinycolor(primary_color.toString()).lighten(20);
36
- var secondary_link = tinycolor(primary_link.toString()).darken(20);
37
-
38
- var border_color = tinycolor(primary_color.toString()).setAlpha(.1);
39
-
40
- var muted_background = tinycolor(primary_background.toString());
41
- var muted_background = (muted_background.isLight()) ? muted_background.darken(5) : muted_background.lighten(15);
42
- var muted_soft_background = tinycolor(primary_background.toString());
43
- var muted_soft_background = (muted_soft_background.isLight()) ? muted_soft_background.darken(10) : muted_soft_background.lighten(20);
44
- var hover_background = tinycolor(primary_link.toString()).lighten(20).setAlpha(.2);
45
-
46
- var button_border_color = tinycolor(hover_link.toString()).darken(5);
47
- var button_hover_top = tinycolor(hover_link.toString()).lighten(5);
48
- var button_hover_bottom = tinycolor(primary_link.toString()).lighten(5);
49
- var button_shadow = tinycolor(button_border_color.toString()).lighten(15).setAlpha(.3);
50
- var button_hover_shadow = tinycolor(button_border_color.toString()).lighten(15).setAlpha(.4);
51
- var button_border_hover_color = tinycolor(hover_link.toString());
52
-
53
- // Additional rules
54
- if (!tinycolor.isReadable(accent_color, muted_soft_background)) {
55
- accent_color = tinycolor(secondary_link.toString()).brighten(20);
56
- muted_accent_color = tinycolor(secondary_link.toString()).lighten(20);
57
- }
58
- if (!tinycolor.isReadable(secondary_link, '#F0F0F0')) {
59
- secondary_link = (secondary_link.isLight()) ? tinycolor(secondary_link.toString()).darken() : tinycolor(secondary_link.toString()).lighten();
60
- }
61
- var button_color = tinycolor('#fff');
62
- if (!tinycolor.isReadable(button_color, primary_link)) {
63
- button_color = tinycolor(primary_background.toString());
64
- }
65
-
66
- // Font family
67
- css+= css_prefix + ' .ecwid, ' + css_prefix + ' .ecwid * '+ css_prefix + ' .ecwid-minicart *, ' + css_prefix + ' .ecwid-SearchPanel * { font-family: inherit !important; }\n';
68
-
69
-
70
- // Primary colors
71
- css+= css_prefix + ' div.ecwid-productBrowser-head{ color: '+ primary_color.toString() +'; }\n';
72
- css+= css_prefix + ' div.ecwid-productBrowser-productNameLink a, ' + css_prefix + ' div.ecwid-productBrowser-productNameLink a:active, ' + css_prefix + ' div.ecwid-productBrowser-productNameLink a:visited{ color: '+ muted_color.toString() +'; }\n';
73
- css+= css_prefix + ' div.ecwid-productBrowser-productsGrid-productMiddleFragment-mouseover div.ecwid-productBrowser-productNameLink a, ' + css_prefix + ' div.ecwid-productBrowser-productsGrid-productMiddleFragment-mouseover div.ecwid-productBrowser-productNameLink a:active, ' + css_prefix + ' div.ecwid-productBrowser-productsGrid-productMiddleFragment-mouseover div.ecwid-productBrowser-productNameLink a:visited{ font-size: 17px; color: '+ primary_color.toString() +'; }\n';
74
- css+= css_prefix + ' div.ecwid-productBrowser-cart div.ecwid-productBrowser-productNameLink a, ' + css_prefix + ' div.ecwid-productBrowser-cart div.ecwid-productBrowser-productNameLink a:active, ' + css_prefix + ' div.ecwid-productBrowser-cart div.ecwid-productBrowser-productNameLink a:visited{ color: '+ primary_color.toString() +'; }\n';
75
- css+= css_prefix + ' div.ecwid-productBrowser-cart div.ecwid-productBrowser-price{ color: '+ primary_color.toString() +'; }\n';
76
- css+= css_prefix + ' div.ecwid-productBrowser-cart-subtotalAmount, ' + css_prefix + ' div.ecwid-productBrowser-cart-subtotalAmountMinus, ' + css_prefix + ' div.ecwid-productBrowser-cart-shippingAmount, ' + css_prefix + ' div.ecwid-productBrowser-cart-taxAmount{ color: '+ primary_color.toString() +'; }\n';
77
- css+= css_prefix + ' div.ecwid-productBrowser-cart-totalLabel{ color: '+ primary_color.toString() +'; }\n';
78
- css+= css_prefix + ' table.ecwid-productBrowser-productsTable-v2 div.ecwid-productBrowser-productNameLink:hover a, ' + css_prefix + ' table.ecwid-productBrowser-productsList-v2 div.ecwid-productBrowser-productNameLink:hover a, ' + css_prefix + ' table.ecwid-productBrowser-productsGrid-v2 div.ecwid-productBrowser-productNameLink:hover a { color: '+ primary_color.toString() +'; }\n';
79
- css+= css_prefix + ' table.ecwid-Invoice-itemsTable .ecwid-productBrowser-price, ' + css_prefix + ' table.ecwid-Invoice-itemsTable .ecwid-Invoice-qtyLabel{ color: '+ primary_color.toString() +'; }\n';
80
- css+= css_prefix + ' .ecwid-minicart-mini-count{ color: '+ primary_link.toString() +'; }\n';
81
-
82
- // Muted colors
83
- css+= css_prefix + ' .ecwid{ color: '+ muted_color.toString() +'; }\n';
84
- css+= css_prefix + ' div.ecwid-productBrowser-categoryPath{ color: '+ muted_color.toString() +'; }\n';
85
- css+= css_prefix + ' div.ecwid-productBrowser-subcategories-categoryName{ color: '+ muted_color.toString() +'; }\n';
86
- css+= css_prefix + ' div.ecwid-results-topPanel div.ecwid-results-topPanel-itemsCountLabel{ color: '+ muted_color.toString() +'; }\n';
87
- css+= css_prefix + ' div.ecwid-productBrowser-sku{ color: '+ muted_color.toString() +'; }\n';
88
- css+= css_prefix + ' div.ecwid-results-topPanel div{ color: '+ muted_color.toString() +'; }\n';
89
- css+= css_prefix + ' div.ecwid-productBrowser-details-optionPanel label.ecwid-fieldLabel{ color: '+ muted_color.toString() +'; }\n';
90
- css+= css_prefix + ' div.ecwid-productBrowser-details-qtyLabel{ color: '+ muted_color.toString() +'; }\n';
91
- css+= css_prefix + ' div.ecwid-productBrowser-cart div.ecwid-productBrowser-sku{ color: '+ muted_color.toString() +'; }\n';
92
- css+= css_prefix + ' span.ecwid-productBrowser-cart-weight{ color: '+ muted_color.toString() +'; }\n';
93
- css+= css_prefix + ' div.ecwid-productBrowser-cart-optionsList{ color: '+ muted_color.toString() +'; }\n';
94
- css+= css_prefix + ' div.ecwid-productBrowser-cart-subtotalLabel,' + css_prefix + ' div.ecwid-productBrowser-cart-shippingLabel,' + css_prefix + ' div.ecwid-productBrowser-cart-taxLabel{ color: '+ muted_color.toString() +'; }\n';
95
- css+= css_prefix + ' div.ecwid-productBrowser-cart-estimationNote{ color: '+ muted_color.toString() +'; }\n';
96
- css+= css_prefix + ' label.ecwid-fieldLabel{ color: '+ muted_color.toString() +'; }\n';
97
- css+= css_prefix + ' div.ecwid-FormPopup-fieldWrapper label.ecwid-fieldLabel{ color: '+ muted_color.toString() +'; }\n';
98
- css+= css_prefix + ' div.ecwid-Checkout-PasswordBlock-tip{ color: '+ muted_color.toString() +'; }\n';
99
- css+= css_prefix + ' div.ecwid-pager{ color: '+ muted_color.toString() +'; }\n';
100
- css+= css_prefix + ' div.ecwid-pager span.ecwid-pager-link-disabled{ color: '+ muted_color.toString() +'; }\n';
101
- css+= css_prefix + ' div.ecwid-productBrowser-details-inTheBag div{ color: '+ muted_color.toString() +'; }\n';
102
- css+= css_prefix + ' div.ecwid-productBrowser-productsList-descr{ color: '+ muted_color.toString() +'; }\n';
103
- css+= css_prefix + ' div.ecwid-productBrowser-productsTable div.ecwid-productBrowser-sku{ color: '+ muted_color.toString() +'; }\n';
104
- css+= css_prefix + ' div.ecwid-productBrowser-extraFields-side{ color: '+ muted_color.toString() +'; }\n';
105
- css+= css_prefix + ' div.ecwid-Invoice-block{ color: '+ muted_color.toString() +'; }\n';
106
- css+= css_prefix + ' table.ecwid-Invoice-itemsTable .ecwid-productBrowser-sku{ color: '+ muted_color.toString() +'; }\n';
107
- css+= css_prefix + ' table.ecwid-Invoice-itemsTable .ecwid-Invoice-optionsList{ color: '+ muted_color.toString() +'; }\n';
108
- css+= css_prefix + ' table.ecwid-Invoice-itemsTable .ecwid-productBrowser-price,' + css_prefix + ' table.ecwid-Invoice-itemsTable .ecwid-Invoice-qtyLabel{ color: '+ muted_color.toString() +'; }\n';
109
- css+= css_prefix + ' div.ecwid-Invoice-Summary-label,' + css_prefix + ' div.ecwid-Invoice-Summary-value{ color: '+ muted_color.toString() +'; }\n';
110
- css+= css_prefix + ' div.ecwid-Invoice-header-placeOrder div.gwt-Label,' + css_prefix + ' div.ecwid-Invoice-footer-placeOrder div.gwt-Label,' + css_prefix + ' td.ecwid-Invoice-header-orderConfirmation-text,' + css_prefix + ' td.ecwid-Invoice-footer-orderConfirmation-text{ color: '+ muted_color.toString() +'; }\n';
111
- css+= css_prefix + ' div.ecwid-productBrowser-details-outOfStockLabel{ color: '+ muted_color.toString() +'; }\n';
112
-
113
- // Borders
114
- css+= css_prefix + ' div.ecwid-productBrowser-productsGrid-productTopFragment-mouseover,' + css_prefix + ' div.ecwid-productBrowser-productsGrid-productBottomFragment-mouseover{ border-color: '+ border_color.toString() +'; }\n';
115
- css+= css_prefix + ' .ecwid-productBrowser-productsGrid-v2 td.ecwid-productBrowser-productsGrid-productInside.ecwid-productBrowser-productsGrid-hover{ border-color: '+ border_color.toString() +'; }\n';
116
- css+= css_prefix + ' td.ecwid-productBrowser-productsList-mouseover{ border-color: '+ border_color.toString() +'; }\n';
117
- css+= css_prefix + ' .ecwid-productBrowser-relatedProducts .ecwid-productBrowser-relatedProducts-item-top-hover{ border-color: '+ border_color.toString() +'; }\n';
118
- css+= css_prefix + ' .ecwid-productBrowser-relatedProducts .ecwid-productBrowser-relatedProducts-item-bottom-hover{ border-color: '+ border_color.toString() +'; }\n';
119
- css+= css_prefix + ' table.ecwid-categoriesTabBar div.gwt-TabBarFirst,' + css_prefix + ' table.ecwid-categoriesTabBar div.gwt-TabBarRest,' + css_prefix + ' table.ecwid-categoriesTabBar table.gwt-TabBarItem,' + css_prefix + ' div.ecwid-categories-horizontal-menuBarContainer,' + css_prefix + ' td.ecwid-categories-vertical-table-cell,' + css_prefix + ' div.ecwid-categories-MenuBarPopup div.menuSeparatorInner{ border-color: '+ border_color.toString() +'; }\n';
120
-
121
- // Accents
122
- css+= css_prefix + ' div.ecwid-productBrowser-price{ color: '+ accent_color.toString() +'; }\n';
123
- css+= css_prefix + ' div.ecwid-productBrowser-details-inStockLabel{ color: '+ muted_accent_color.toString() +'; }\n';
124
- css+= css_prefix + ' div.ecwid-Checkout-blockTitle,' + css_prefix + ' table.ecwid-Checkout-blockTitle div.gwt-Label,' + css_prefix + ' table.ecwid-Checkout-blockTitle div.gwt-HTML{ color: '+ muted_accent_color.toString() +'; }\n';
125
- css+= css_prefix + ' div.ecwid-Checkout-BreadCrumbs-link-visited{ color: '+ muted_accent_color.toString() +'; }\n';
126
- css+= css_prefix + ' div.ecwid-Checkout-BreadCrumbs-link-current{ color: '+ muted_accent_color.toString() +'; border-color: '+ muted_accent_color.toString() +'; }\n';
127
- css+= css_prefix + ' div.ecwid-fieldEnvelope-label{ color: '+ accent_color.toString() +'; }\n';
128
- css+= css_prefix + ' input.gwt-PasswordTextBox,' + css_prefix + ' textarea.gwt-TextArea,' + css_prefix + ' input.gwt-DateBox{ color: '+ accent_color.toString() +'; }\n';
129
- css+= css_prefix + ' .ecwid div.ecwid-AccentedContinueButton-label{ color: '+ accent_color.toString() +'; }\n';
130
- css+= css_prefix + ' div.ecwid-productBrowser-cart-termsCheckbox-rollover{ background-color: '+ hover_background.toString() +'; }\n';
131
- css+= css_prefix + ' div.ecwid-productBrowser-cart-estimationNote span{ color: '+ muted_accent_color.toString() +'; }\n';
132
- css+= css_prefix + ' div.ecwid-productBrowser-cart-asterisk{ color: '+ muted_accent_color.toString() +'; }\n';
133
- css+= css_prefix + ' div.ecwid-productBrowser-cart-totalAmount{ color: '+ accent_color.toString() +'; }\n';
134
-
135
- // Primary links
136
- css+= css_prefix + ' div.ecwid-productBrowser-categoryPath a,' + css_prefix + ' div.ecwid-productBrowser-categoryPath a:active,' + css_prefix + ' div.ecwid-productBrowser-categoryPath a:visited{ color: '+ primary_link.toString() +'; }\n';
137
- css+= css_prefix + ' .ecwid a,' + css_prefix + ' .ecwid a:active, ' + css_prefix + ' .ecwid a:visited{ color: '+ primary_link.toString() +'; }\n';
138
- css+= css_prefix + ' div.ecwid-results-topPanel div.ecwid-results-topPanel-viewAsPanel-link{ color: '+ primary_link.toString() +'; }\n';
139
- css+= css_prefix + ' div.ecwid-pager span.ecwid-pager-link-enabled{ color: '+ primary_link.toString() +'; }\n';
140
- css+= css_prefix + ' div.ecwid-productBrowser-productsTable-addToBagLink{ color: '+ primary_link.toString() +'; }\n';
141
-
142
- // Hover links
143
- css+= css_prefix + ' div.ecwid-productBrowser-categoryPath a:hover{ color: '+ hover_link.toString() +'; }\n';
144
- css+= css_prefix + ' .ecwid a:hover{ color: '+ hover_link.toString() +'; }\n';
145
- css+= css_prefix + ' div.ecwid-results-topPanel div.ecwid-results-topPanel-viewAsPanel-link:hover{ color: '+ hover_link.toString() +'; }\n';
146
-
147
- // Backgrounds
148
- css+= css_prefix + ' .ecwid .ecwid-ProductDetails-gray-panel-bottom,' + css_prefix + ' .ecwid .ecwid-productBrowser-ask-advice-panel{ background-color: '+ muted_background.toString() +'; }\n';
149
- css+= css_prefix + ' .ecwid-productBrowser-details-rightPanel div.ecwid-productBrowser-sharePanel-header{ background-color: '+ muted_background.toString() +'; }\n';
150
- css+= css_prefix + ' a.ecwid-productBrowser-nav-left,' + css_prefix + ' a.ecwid-productBrowser-nav-right{ background-color: '+ muted_background.toString() +'; }\n';
151
- css+= css_prefix + ' .ecwid .ecwid-productBrowser-ask-advice-panel{ background-color: '+ muted_background.toString() +'; }\n';
152
- css+= css_prefix + ' .ecwid .ecwid-productBrowser-ask-advice-panel .ecwid-productBrowser-ask-advice-panel-icon{ background-color: '+ muted_background.toString() +'; }\n';
153
- css+= css_prefix + ' div.ecwid-productBrowser-backgroundedPanel{ background-color: '+ muted_soft_background.toString() +'; }\n';
154
- css+= css_prefix + ' .ecwid-productBrowser-details-rightPanel .ecwid-productBrowser-sharePanel-buttonsContainer{ background-color: '+ muted_soft_background.toString() +'; border-color: '+ tinycolor(muted_color.toString()).setAlpha(.2).toString() +'}\n';
155
- css+= css_prefix + ' tr.ecwid-productBrowser-cart-itemsTable-row-selected,' + css_prefix + ' td.ecwid-productBrowser-cart-itemsTable-cell-selected{ background-color: '+ muted_background.toString() +'; }\n';
156
- css+= css_prefix + ' div.ecwid-productBrowser-cart-EnterCouponBox{ background-color: '+ muted_background.toString() +'; border-color: transparent; }\n';
157
- css+= css_prefix + ' div.ecwid-form{ background-color: '+ muted_background.toString() +'; }\n';
158
- css+= css_prefix + ' .ecwid input.ecwid-productBrowser-details-qtyTextField{ color: '+ primary_color.toString() +'; }\n';
159
- css+= css_prefix + ' td.ecwid-productBrowser-productsTable-cell{ background-color: '+ primary_background.toString() +'; }\n';
160
- css+= css_prefix + ' td.ecwid-productBrowser-productsTable-cellOdd{ background-color: '+ muted_background.toString() +'; }\n';
161
- css+= css_prefix + ' input.gwt-TextBox, ' + css_prefix + ' input.gwt-PasswordTextBox, ' + css_prefix + ' textarea.gwt-TextArea, ' + css_prefix + ' input.gwt-DateBox, ' + css_prefix + ' .ecwid-SearchPanel-field{ background-color: '+ primary_background.toString() +'; }\n';
162
- css+= css_prefix + ' div.ecwid-Invoice-cell-title{ color: '+ muted_color +';background-color: '+ muted_background.toString() +'; }\n';
163
- css+= css_prefix + ' div.ecwid-Invoice-blockTitle{ color: '+ muted_color +';background-color: '+ muted_background.toString() +'; }\n';
164
- css+= css_prefix + ' td.ecwid-Invoice-cell{ background-color: '+ muted_background.toString() +'; }\n';
165
- css+= css_prefix + ' td.ecwid-Invoice-edgeCell{ background-color: '+ muted_background.toString() +'; }\n';
166
-
167
- // Buttons
168
- css+= css_prefix + ' div.ecwid-AddToBagButton::after { content: "' + msg('TableProductsContainer.add_to_bag', 'Add To Bag') + '"; white-space: nowrap; }\n';
169
- css+= css_prefix + ' div.ecwid-ContinueShoppingButton::after { content: "' + msg('ShoppingCartView.continue', 'Continue Shopping') + '"; white-space: nowrap; }\n';
170
- css+= css_prefix + ' div.ecwid-productBrowser-cart-checkoutButton:after { content: "' + msg('FBAutofillCheckout.Breadcrumbs.checkout', 'Checkout') + '"; white-space: nowrap; }\n';
171
- css+= css_prefix + ' div.ecwid-Checkout-placeOrderButton::after { content: "' + msg('FBAutofillCheckout.Breadcrumbs.checkout', 'Place Order') + '"; white-space: nowrap; }\n';
172
-
173
- css+= css_prefix + ' div.ecwid-ContinueShoppingButton::after,' + css_prefix + ' div.ecwid-Checkout-placeOrderButton::after, ' + css_prefix + ' div.ecwid-AddToBagButton::after, ' + css_prefix + ' div.ecwid-productBrowser-cart-checkoutButton::after, ' + css_prefix + ' button.ecwid-AccentedButton span, ' + css_prefix + ' div.ecwid-Checkout-placeOrderButton::after{ color: '+ button_color +'; }\n';
174
-
175
- css+= css_prefix + ' button.ecwid-AccentedButton,' + css_prefix + ' div.ecwid-AddToBagButton-up, ' + css_prefix + ' div.ecwid-productBrowser-cart-checkoutButton-up,' + css_prefix + ' div.ecwid-Checkout-placeOrderButton-up,' + css_prefix + ' div.ecwid-ContinueShoppingButton-up,' + css_prefix + ' div.ecwid-AddToBagButton-up-hovering,' + css_prefix + ' div.ecwid-AddToBagButton-down-hovering,' + css_prefix + ' div.ecwid-productBrowser-cart-checkoutButton-up-hovering,' + css_prefix + ' div.ecwid-productBrowser-cart-checkoutButton-down-hovering,' + css_prefix + ' div.ecwid-Checkout-placeOrderButton-down-hovering,' + css_prefix + ' div.ecwid-Checkout-placeOrderButton-up-hovering,' + css_prefix + ' div.ecwid-ContinueShoppingButton-up-hovering,' + css_prefix + ' div.ecwid-ContinueShoppingButton-down-hovering,' + css_prefix + ' button.ecwid-AccentedButton:hover { -webkit-box-sizing: border-box; box-sizing: border-box; width: auto; min-width: 160px; height: auto; padding: 11px 40px; background-color: '+primary_link+'; background-image: -webkit-gradient(linear, left top, left bottom, from('+hover_link+'), to('+primary_link+')); background-image: -webkit-linear-gradient(top, '+hover_link+', '+primary_link+'); background-image: -moz-linear-gradient(top, '+hover_link+', '+primary_link+'); background-image: -ms-linear-gradient(top, '+hover_link+', '+primary_link+'); background-image: -o-linear-gradient(top, '+hover_link+', '+primary_link+'); background-image: linear-gradient(to bottom, '+hover_link+', '+primary_link+'); border: 1px solid '+button_border_color+'; -webkit-box-shadow: inset 0 1px 0 '+button_shadow+'; box-shadow: inset 0 1px 0 '+button_shadow+'; text-decoration: none; text-shadow: 0 1px 0 rgba(0,0,0,0.1); border-radius: 3px; padding-left: 20px; padding-right: 20px; }\n';
176
-
177
- css+= css_prefix + ' div.ecwid-AddToBagButton-up-hovering,' + css_prefix + ' div.ecwid-productBrowser-cart-checkoutButton-up-hovering,' + css_prefix + ' div.ecwid-Checkout-placeOrderButton-up-hovering,' + css_prefix + ' div.ecwid-ContinueShoppingButton-up-hovering { background-image: -webkit-gradient(linear, left top, left bottom, from('+button_hover_top+'), to('+button_hover_bottom+')); background-image: -webkit-linear-gradient(top, '+button_hover_top+', '+button_hover_bottom+'); background-image: -moz-linear-gradient(top, '+button_hover_top+', '+button_hover_bottom+'); background-image: -ms-linear-gradient(top, '+button_hover_top+', '+button_hover_bottom+'); background-image: -o-linear-gradient(top, '+button_hover_top+', '+button_hover_bottom+'); background-image: linear-gradient(to bottom, '+button_hover_top+', '+button_hover_bottom+'); border: 1px solid '+button_border_hover_color+'; -webkit-box-shadow: inset 0 1px 0 '+button_hover_shadow+'; box-shadow: inset 0 1px 0 '+button_hover_shadow+'; text-decoration: none; text-shadow: 0 -1px 0 rgba(0,0,0,0.2); } \n';
178
-
179
-
180
- css+= css_prefix + ' button.gwt-Button,' + css_prefix + ' #wrapper button.gwt-Button{ color: '+ secondary_link +'; }\n';
181
- css+= css_prefix + ' button.ecwid-AccentedButton{ line-height: 1; }\n';
182
-
183
- // Search
184
- css+= css_prefix + ' .ecwid-SearchPanel-button { background-color: '+ muted_background.toString() +'; border: 1px solid '+ border_color +'; border-radius: 2px; color: '+ primary_color +'; cursor: pointer; font-size: 12px; height: 26px; outline: medium none; padding: 2px 5px; text-decoration: none; vertical-align: baseline; white-space: nowrap; }\n';
185
-
186
- // Categories
187
- css+= css_prefix + ' span.ecwid-categories-category{ color: '+ muted_color.toString() +'; }\n';
188
- css+= css_prefix + ' div.ecwid-categoriesMenuBar td.gwt-MenuItem-selected span.ecwid-categories-category,' + css_prefix + ' div.ecwid-categoriesMenuBar td.gwt-MenuItem-current span.ecwid-categories-category,' + css_prefix + ' td.ecwid-categories-vertical-table-cell-selected span.ecwid-categories-category,' + css_prefix + ' table.ecwid-categoriesTabBar table.gwt-TabBarItem-selected span.ecwid-categories-category{ color: '+ primary_link.toString() +'; }\n';
189
-
190
- css+= css_prefix + ' table.ecwid-categoriesTabBar table.gwt-TabBarItem-selected td { background: none !important; }\n';
191
- css+= css_prefix + ' table.ecwid-categoriesTabBar table.gwt-TabBarItem-selected { border: 1px solid; border-bottom: 0px; border-color: '+ border_color.toString() +'; }\n';
192
- css+= css_prefix + ' .ecwid .ecwid-productBrowser-ask-advice-panel { min-height: 18px; height: auto; }\n';
193
-
194
- head = document.getElementsByTagName('head')[0],
195
- style = document.createElement('style');
196
- style.type = 'text/css';
197
- if (style.styleSheet) {
198
- style.styleSheet.cssText = css;
199
- } else {
200
- style.appendChild(document.createTextNode(css));
201
- }
202
- head.appendChild(style);
203
- document.getElementsByTagName("body")[0].className += ' chameleon';
204
- });
205
- }
206
-
207
- function getLinkColor(url) {
208
- var a = document.createElement('a');
209
- a.href = a.textContent = url;
210
- document.body.appendChild(a);
211
- return document.defaultView.getComputedStyle(a, null).color;
212
- }
213
-
214
- function toCamelCase(s){
215
- for(var exp=/-([a-z])/; exp.test(s); s=s.replace(exp,RegExp.$1.toUpperCase()));
216
- return s;
217
- }
218
-
219
- function getStyle(e,a){
220
- var v=null;
221
- if(document.defaultView && document.defaultView.getComputedStyle){
222
- var cs = document.defaultView.getComputedStyle(e, null);
223
- if(cs && cs.getPropertyValue)
224
- v = cs.getPropertyValue(a);
225
- }
226
- if(!v && e.currentStyle)
227
- v = e.currentStyle[toCamelCase(a)];
228
- return v;
229
- }
230
-
231
- function getBackground(e){
232
- var v = getStyle(e,'background-color');
233
- while (!v || v=='transparent' || v=='#000000' || v=='rgba(0, 0, 0, 0)'){
234
- if( e == document.body )
235
- v = '#fff';
236
- else {
237
- e = e.parentNode;
238
- v = getStyle(e, 'background-color');
239
- }
240
- }
241
- return v;
242
- }
243
-
244
- function msg(label, defaultValue) {
245
- var messageBundles = (window.Ecwid && window.Ecwid.MessageBundles) ? window.Ecwid.MessageBundles : {};
246
- var bundle = messageBundles['ru.cdev.xnext.client'] ? messageBundles['ru.cdev.xnext.client'] : {};
247
- return bundle[label] || defaultValue;
248
- }
249
-
250
- // TinyColor v1.1.2
251
- // https://github.com/bgrins/TinyColor
252
- // Brian Grinstead, MIT License
253
- !function(){function t(r,n){if(r=r?r:"",n=n||{},r instanceof t)return r;if(!(this instanceof t))return new t(r,n);var a=e(r);this._originalInput=r,this._r=a.r,this._g=a.g,this._b=a.b,this._a=a.a,this._roundA=j(100*this._a)/100,this._format=n.format||a.format,this._gradientType=n.gradientType,this._r<1&&(this._r=j(this._r)),this._g<1&&(this._g=j(this._g)),this._b<1&&(this._b=j(this._b)),this._ok=a.ok,this._tc_id=I++}function e(t){var e={r:0,g:0,b:0},n=1,i=!1,o=!1;return"string"==typeof t&&(t=q(t)),"object"==typeof t&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(e=r(t.r,t.g,t.b),i=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=O(t.s),t.v=O(t.v),e=s(t.h,t.s,t.v),i=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=O(t.s),t.l=O(t.l),e=a(t.h,t.s,t.l),i=!0,o="hsl"),t.hasOwnProperty("a")&&(n=t.a)),n=k(n),{ok:i,format:t.format||o,r:T(255,$(e.r,0)),g:T(255,$(e.g,0)),b:T(255,$(e.b,0)),a:n}}function r(t,e,r){return{r:255*A(t,255),g:255*A(e,255),b:255*A(r,255)}}function n(t,e,r){t=A(t,255),e=A(e,255),r=A(r,255);var n,a,i=$(t,e,r),s=T(t,e,r),o=(i+s)/2;if(i==s)n=a=0;else{var f=i-s;switch(a=o>.5?f/(2-i-s):f/(i+s),i){case t:n=(e-r)/f+(r>e?6:0);break;case e:n=(r-t)/f+2;break;case r:n=(t-e)/f+4}n/=6}return{h:n,s:a,l:o}}function a(t,e,r){function n(t,e,r){return 0>r&&(r+=1),r>1&&(r-=1),1/6>r?t+6*(e-t)*r:.5>r?e:2/3>r?t+(e-t)*(2/3-r)*6:t}var a,i,s;if(t=A(t,360),e=A(e,100),r=A(r,100),0===e)a=i=s=r;else{var o=.5>r?r*(1+e):r+e-r*e,f=2*r-o;a=n(f,o,t+1/3),i=n(f,o,t),s=n(f,o,t-1/3)}return{r:255*a,g:255*i,b:255*s}}function i(t,e,r){t=A(t,255),e=A(e,255),r=A(r,255);var n,a,i=$(t,e,r),s=T(t,e,r),o=i,f=i-s;if(a=0===i?0:f/i,i==s)n=0;else{switch(i){case t:n=(e-r)/f+(r>e?6:0);break;case e:n=(r-t)/f+2;break;case r:n=(t-e)/f+4}n/=6}return{h:n,s:a,v:o}}function s(t,e,r){t=6*A(t,360),e=A(e,100),r=A(r,100);var n=N.floor(t),a=t-n,i=r*(1-e),s=r*(1-a*e),o=r*(1-(1-a)*e),f=n%6,h=[r,s,i,i,o,r][f],u=[o,r,r,s,i,i][f],l=[i,i,o,r,r,s][f];return{r:255*h,g:255*u,b:255*l}}function o(t,e,r,n){var a=[M(j(t).toString(16)),M(j(e).toString(16)),M(j(r).toString(16))];return n&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function f(t,e,r,n){var a=[M(P(n)),M(j(t).toString(16)),M(j(e).toString(16)),M(j(r).toString(16))];return a.join("")}function h(e,r){r=0===r?0:r||10;var n=t(e).toHsl();return n.s-=r/100,n.s=H(n.s),t(n)}function u(e,r){r=0===r?0:r||10;var n=t(e).toHsl();return n.s+=r/100,n.s=H(n.s),t(n)}function l(e){return t(e).desaturate(100)}function c(e,r){r=0===r?0:r||10;var n=t(e).toHsl();return n.l+=r/100,n.l=H(n.l),t(n)}function g(e,r){r=0===r?0:r||10;var n=t(e).toRgb();return n.r=$(0,T(255,n.r-j(255*-(r/100)))),n.g=$(0,T(255,n.g-j(255*-(r/100)))),n.b=$(0,T(255,n.b-j(255*-(r/100)))),t(n)}function d(e,r){r=0===r?0:r||10;var n=t(e).toHsl();return n.l-=r/100,n.l=H(n.l),t(n)}function b(e,r){var n=t(e).toHsl(),a=(j(n.h)+r)%360;return n.h=0>a?360+a:a,t(n)}function p(e){var r=t(e).toHsl();return r.h=(r.h+180)%360,t(r)}function m(e){var r=t(e).toHsl(),n=r.h;return[t(e),t({h:(n+120)%360,s:r.s,l:r.l}),t({h:(n+240)%360,s:r.s,l:r.l})]}function _(e){var r=t(e).toHsl(),n=r.h;return[t(e),t({h:(n+90)%360,s:r.s,l:r.l}),t({h:(n+180)%360,s:r.s,l:r.l}),t({h:(n+270)%360,s:r.s,l:r.l})]}function v(e){var r=t(e).toHsl(),n=r.h;return[t(e),t({h:(n+72)%360,s:r.s,l:r.l}),t({h:(n+216)%360,s:r.s,l:r.l})]}function y(e,r,n){r=r||6,n=n||30;var a=t(e).toHsl(),i=360/n,s=[t(e)];for(a.h=(a.h-(i*r>>1)+720)%360;--r;)a.h=(a.h+i)%360,s.push(t(a));return s}function w(e,r){r=r||6;for(var n=t(e).toHsv(),a=n.h,i=n.s,s=n.v,o=[],f=1/r;r--;)o.push(t({h:a,s:i,v:s})),s=(s+f)%1;return o}function x(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}function k(t){return t=parseFloat(t),(isNaN(t)||0>t||t>1)&&(t=1),t}function A(t,e){R(t)&&(t="100%");var r=F(t);return t=T(e,$(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),N.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function H(t){return T(1,$(0,t))}function S(t){return parseInt(t,16)}function R(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function F(t){return"string"==typeof t&&-1!=t.indexOf("%")}function M(t){return 1==t.length?"0"+t:""+t}function O(t){return 1>=t&&(t=100*t+"%"),t}function P(t){return Math.round(255*parseFloat(t)).toString(16)}function C(t){return S(t)/255}function q(t){t=t.replace(z,"").replace(E,"").toLowerCase();var e=!1;if(B[t])t=B[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=U.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=U.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=U.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=U.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=U.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=U.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=U.hex8.exec(t))?{a:C(r[1]),r:S(r[2]),g:S(r[3]),b:S(r[4]),format:e?"name":"hex8"}:(r=U.hex6.exec(t))?{r:S(r[1]),g:S(r[2]),b:S(r[3]),format:e?"name":"hex"}:(r=U.hex3.exec(t))?{r:S(r[1]+""+r[1]),g:S(r[2]+""+r[2]),b:S(r[3]+""+r[3]),format:e?"name":"hex"}:!1}function L(t){var e,r;return t=t||{level:"AA",size:"small"},e=(t.level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA"),"small"!==r&&"large"!==r&&(r="small"),{level:e,size:r}}var z=/^[\s,#]+/,E=/\s+$/,I=0,N=Math,j=N.round,T=N.min,$=N.max,D=N.random;t.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,r,n,a,i,s=this.toRgb();return t=s.r/255,e=s.g/255,r=s.b/255,n=.03928>=t?t/12.92:Math.pow((t+.055)/1.055,2.4),a=.03928>=e?e/12.92:Math.pow((e+.055)/1.055,2.4),i=.03928>=r?r/12.92:Math.pow((r+.055)/1.055,2.4),.2126*n+.7152*a+.0722*i},setAlpha:function(t){return this._a=k(t),this._roundA=j(100*this._a)/100,this},toHsv:function(){var t=i(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=i(this._r,this._g,this._b),e=j(360*t.h),r=j(100*t.s),n=j(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=n(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=n(this._r,this._g,this._b),e=j(360*t.h),r=j(100*t.s),a=j(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+a+"%)":"hsla("+e+", "+r+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return o(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return f(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:j(this._r),g:j(this._g),b:j(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+j(this._r)+", "+j(this._g)+", "+j(this._b)+")":"rgba("+j(this._r)+", "+j(this._g)+", "+j(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:j(100*A(this._r,255))+"%",g:j(100*A(this._g,255))+"%",b:j(100*A(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+j(100*A(this._r,255))+"%, "+j(100*A(this._g,255))+"%, "+j(100*A(this._b,255))+"%)":"rgba("+j(100*A(this._r,255))+"%, "+j(100*A(this._g,255))+"%, "+j(100*A(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":this._a<1?!1:G[o(this._r,this._g,this._b,!0)]||!1},toFilter:function(e){var r="#"+f(this._r,this._g,this._b,this._a),n=r,a=this._gradientType?"GradientType = 1, ":"";if(e){var i=t(e);n=i.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+a+"startColorstr="+r+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0,a=!e&&n&&("hex"===t||"hex6"===t||"hex3"===t||"name"===t);return a?"name"===t&&0===this._a?this.toName():this.toRgbString():("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),("hex"===t||"hex6"===t)&&(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(c,arguments)},brighten:function(){return this._applyModification(g,arguments)},darken:function(){return this._applyModification(d,arguments)},desaturate:function(){return this._applyModification(h,arguments)},saturate:function(){return this._applyModification(u,arguments)},greyscale:function(){return this._applyModification(l,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(p,arguments)},monochromatic:function(){return this._applyCombination(w,arguments)},splitcomplement:function(){return this._applyCombination(v,arguments)},triad:function(){return this._applyCombination(m,arguments)},tetrad:function(){return this._applyCombination(_,arguments)}},t.fromRatio=function(e,r){if("object"==typeof e){var n={};for(var a in e)e.hasOwnProperty(a)&&(n[a]="a"===a?e[a]:O(e[a]));e=n}return t(e,r)},t.equals=function(e,r){return e&&r?t(e).toRgbString()==t(r).toRgbString():!1},t.random=function(){return t.fromRatio({r:D(),g:D(),b:D()})},t.mix=function(e,r,n){n=0===n?0:n||50;var a,i=t(e).toRgb(),s=t(r).toRgb(),o=n/100,f=2*o-1,h=s.a-i.a;a=f*h==-1?f:(f+h)/(1+f*h),a=(a+1)/2;var u=1-a,l={r:s.r*a+i.r*u,g:s.g*a+i.g*u,b:s.b*a+i.b*u,a:s.a*o+i.a*(1-o)};return t(l)},t.readability=function(e,r){var n=t(e),a=t(r);return(Math.max(n.getLuminance(),a.getLuminance())+.05)/(Math.min(n.getLuminance(),a.getLuminance())+.05)},t.isReadable=function(e,r,n){var a,i,s=t.readability(e,r);switch(i=!1,a=L(n),a.level+a.size){case"AAsmall":case"AAAlarge":i=s>=4.5;break;case"AAlarge":i=s>=3;break;case"AAAsmall":i=s>=7}return i},t.mostReadable=function(e,r,n){var a,i,s,o,f=null,h=0;n=n||{},i=n.includeFallbackColors,s=n.level,o=n.size;for(var u=0;u<r.length;u++)a=t.readability(e,r[u]),a>h&&(h=a,f=t(r[u]));return t.isReadable(e,f,{level:s,size:o})||!i?f:(n.includeFallbackColors=!1,t.mostReadable(e,["#fff","#000"],n))};var B=t.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},G=t.hexNames=x(B),U=function(){var t="[-\\+]?\\d+%?",e="[-\\+]?\\d*\\.\\d+%?",r="(?:"+e+")|(?:"+t+")",n="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",a="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+a),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+a),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+a),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();"undefined"!=typeof module&&module.exports?module.exports=t:"function"==typeof define&&define.amd?define(function(){return t}):window.tinycolor=t}();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/kissmetrics.js DELETED
@@ -1,50 +0,0 @@
1
- if ( typeof ecwid_kissmetrics.store_id != 'undefined' ) {
2
- _kmq.push([ 'identify', ecwid_kissmetrics.store_id ] );
3
- }
4
-
5
- function ecwid_kissmetrics_set(nameValue) {
6
- ecwid_kissmetrics.items.push({'property' : nameValue });
7
-
8
- ecwid_kissmetrics_flush();
9
- }
10
-
11
- function ecwid_kissmetrics_record(event) {
12
- if (typeof this.fired == 'undefined') {
13
- this.fired = [];
14
- }
15
-
16
- event = 'wp-plugin ' + event;
17
-
18
- if (this.fired.indexOf(event) != -1) return;
19
-
20
- ecwid_kissmetrics.items.push({event: event});
21
- this.fired.push(event);
22
-
23
- ecwid_kissmetrics_flush();
24
- }
25
-
26
- function ecwid_kissmetrics_flush() {
27
- if (typeof _kmq == 'undefined') {
28
- return;
29
- }
30
-
31
- for (var i = 0; i < ecwid_kissmetrics.items.length; i++) {
32
- var item = ecwid_kissmetrics.items[i];
33
- if (typeof item.event != 'undefined') {
34
- _kmq.push(['record', ecwid_kissmetrics.items[i].event]);
35
- } else if (typeof item.property != 'undefined') {
36
- _kmq.push( [ 'set', ecwid_kissmetrics.items[i].property ] );
37
- }
38
- }
39
-
40
- ecwid_kissmetrics.items = [];
41
- }
42
-
43
- jQuery(document).ready(function() {
44
-
45
- jQuery.getScript('https://i.kissmetrics.com/i.js', function() {
46
- jQuery.getScript('https://scripts.kissmetrics.com/' + ecwid_kissmetrics.key + '.2.js', function() {
47
- ecwid_kissmetrics_flush();
48
- })
49
- });
50
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/product-popup.js CHANGED
@@ -263,6 +263,16 @@ jQuery(document).ready(function() {
263
  }
264
 
265
  var buildProductsTable = function(data) {
 
 
 
 
 
 
 
 
 
 
266
  if (Math.ceil(data.total / data.limit) < getSearchParams().page) {
267
  params = getSearchParams();
268
  params.page = 1;
@@ -331,9 +341,14 @@ jQuery(document).ready(function() {
331
  addProduct(data.items[i]);
332
  }
333
  } else {
334
- showEmpty(params.keyword);
 
 
 
 
 
335
  }
336
-
337
  renderSearchParams();
338
  assignHandlers();
339
  setCurrentProduct(null);
263
  }
264
 
265
  var buildProductsTable = function(data) {
266
+
267
+ if (data == null) {
268
+ data = {
269
+ total: 0,
270
+ limit: 1
271
+ }
272
+ }
273
+
274
+ var params = {};
275
+
276
  if (Math.ceil(data.total / data.limit) < getSearchParams().page) {
277
  params = getSearchParams();
278
  params.page = 1;
341
  addProduct(data.items[i]);
342
  }
343
  } else {
344
+ var keyword = '';
345
+ if (params.keyword) {
346
+ keyword = params.keyword;
347
+ }
348
+
349
+ showEmpty(keyword);
350
  }
351
+
352
  renderSearchParams();
353
  assignHandlers();
354
  setCurrentProduct(null);
js/themes/flora.js DELETED
@@ -1,2 +0,0 @@
1
- if (!window.History.options) window.History.options = {};
2
- window.History.options.html4Mode=1;
 
 
js/themes/thevoux-wp.js DELETED
@@ -1,2 +0,0 @@
1
- if (!window.History.options) window.History.options = {};
2
- window.History.options.html4Mode=1;
 
 
languages/ecwid-shopping-cart.pot CHANGED
@@ -1,516 +1,1448 @@
1
- msgid "Ecwid Shopping Cart"
 
 
2
  msgstr ""
 
 
 
 
 
 
 
 
 
 
3
 
4
- msgid "Ecwid Team"
 
5
  msgstr ""
6
 
7
- msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
 
8
  msgstr ""
9
 
10
- msgid "Get help"
 
11
  msgstr ""
12
 
13
- msgid "Go to Ecwid site"
 
14
  msgstr ""
15
 
16
- msgid "Visit storefront"
 
17
  msgstr ""
18
 
19
- msgid "Manage my store"
 
 
20
  msgstr ""
21
 
22
- msgid "Manage plugin settings"
 
23
  msgstr ""
24
 
25
- msgid "→ Sell on Facebook"
 
26
  msgstr ""
27
 
28
- msgid "<a %s>Online store powered by Ecwid</a>"
 
 
 
 
29
  msgstr ""
30
 
31
- msgid "Store"
 
32
  msgstr ""
33
 
34
- msgid "Ecwid shopping cart settings"
 
35
  msgstr ""
36
 
37
- msgid "Ecwid Store"
 
38
  msgstr ""
39
 
40
- msgid "Setup"
 
 
41
  msgstr ""
42
 
43
- msgid "Dashboard"
 
44
  msgstr ""
45
 
46
- msgid "Appearance settings"
 
47
  msgstr ""
48
 
49
- msgid "Appearance"
 
50
  msgstr ""
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  msgid "Advanced settings"
53
  msgstr ""
54
 
 
55
  msgid "Advanced"
56
  msgstr ""
57
 
58
- msgid "Hidden category"
 
59
  msgstr ""
60
 
61
- msgid "Recommendations for Your Online Store"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  msgstr ""
63
 
64
- msgid "Do you like Ecwid and want to help it grow? You can add this fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  msgstr ""
66
 
 
67
  msgid "Ecwid Badge"
68
  msgstr ""
69
 
 
 
70
  msgid "Ecwid shopping cart widget"
71
  msgstr ""
72
 
 
 
73
  msgid "Ecwid ecommerce solution"
74
  msgstr ""
75
 
 
 
76
  msgid "Ecwid free shopping cart"
77
  msgstr ""
78
 
 
 
79
  msgid "Ecwid shopping cart"
80
  msgstr ""
81
 
 
 
82
  msgid "Ecwid e-commerce widgets"
83
  msgstr ""
84
 
85
- msgid "Adds a cart widget for customer to see the products they added to the cart."
 
86
  msgstr ""
87
 
88
- msgid "Shopping Cart"
 
 
 
 
 
89
  msgstr ""
90
 
91
- msgid "Adds a compact cart widget for customer to see the products they added to the cart."
 
92
  msgstr ""
93
 
 
 
 
 
 
 
 
 
 
 
 
94
  msgid "Shopping Cart (Mini)"
95
  msgstr ""
96
 
97
- msgid "Displays a simple search box for your customers to find a product in your storex"
 
 
 
 
 
98
  msgstr ""
99
 
100
- msgid "Product Search"
 
 
101
  msgstr ""
102
 
103
- msgid "Adds vertical categories block to let the customer navigate your store."
 
 
 
104
  msgstr ""
105
 
106
- msgid "Store Categories"
 
 
107
  msgstr ""
108
 
109
- msgid "Displays a link to the store page in sidebar for customer to quickly access your store from any page on the site."
 
 
110
  msgstr ""
111
 
112
- msgid "Store Page Link"
 
 
113
  msgstr ""
114
 
115
- msgid "Shop"
 
116
  msgstr ""
117
 
118
- msgid "Displays a list of products recently viewed by the customer to easily return to the products they saw in your shop."
 
119
  msgstr ""
120
 
121
- msgid "Recently Viewed Products"
 
 
 
122
  msgstr ""
123
 
124
- msgid "You have not viewed any product yet. Open store."
 
 
 
125
  msgstr ""
126
 
127
- msgid "Store Link Title"
 
128
  msgstr ""
129
 
130
- msgid "Number of products to show"
 
131
  msgstr ""
132
 
133
- msgid "Greetings! Your Ecwid store is now active."
 
134
  msgstr ""
135
 
136
- msgid "Take a few simple steps to complete store setup"
 
137
  msgstr ""
138
 
139
- msgid "Set up Ecwid Store"
 
 
 
140
  msgstr ""
141
 
142
- msgid "Good job! Your store is set up and you're ready to sell."
 
143
  msgstr ""
144
 
145
- msgid "Now you can fine-tune your store's appearance"
 
 
146
  msgstr ""
147
 
148
- msgid "Visit Storefront"
 
149
  msgstr ""
150
 
151
- msgid "Configure Appearance"
 
152
  msgstr ""
153
 
154
- msgid "Your store is almost ready!"
 
155
  msgstr ""
156
 
157
- msgid "Connect your Ecwid account with this site to complete setup and start selling"
 
158
  msgstr ""
159
 
160
- msgid "Connect Your Ecwid Store"
 
161
  msgstr ""
162
 
163
- msgid "To add extra functions to your store, drag and drop Ecwid store elements on your site. When you're done, you can get back to modifying your settings."
 
164
  msgstr ""
165
 
166
- msgid "Back to Store Settings"
 
167
  msgstr ""
168
 
169
- msgid "Do you like your Ecwid online store? We'd appreciate it if you add your review and vote for the plugin on Wordpress site."
 
170
  msgstr ""
171
 
172
- msgid "Rate Ecwid at WordPress.org"
 
 
 
 
 
173
  msgstr ""
174
 
175
- msgid "Add Store"
 
176
  msgstr ""
177
 
178
- msgid "Edit Store"
 
179
  msgstr ""
180
 
181
- msgid "Edit Appearance"
 
 
 
182
  msgstr ""
183
 
184
- msgid "Price"
 
 
 
 
185
  msgstr ""
186
 
187
- msgid "Never show this message again"
 
 
 
 
188
  msgstr ""
189
 
190
- msgid "Ecwid Shopping Cart — Advanced settings"
 
191
  msgstr ""
192
 
 
193
  msgid "Category shown by default"
194
  msgstr ""
195
 
 
196
  msgid "Store root category"
197
  msgstr ""
198
 
199
- msgid "Default category ID"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  msgstr ""
201
 
202
- 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."
 
203
  msgstr ""
204
 
205
- msgid "In order to set this option, <a %s>find an ID of the necessary category</a> and save it here."
 
206
  msgstr ""
207
 
208
- msgid "Single Sign-On Secret Key"
 
 
 
 
209
  msgstr ""
210
 
211
- 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."
 
 
 
212
  msgstr ""
213
 
214
- msgid "In order to enable this feature, opt to use a secret key. You will find this key in your Ecwid control panel, at \"System Settings > Apps > Legacy API Keys > Single Sign-On Secret Key\" page. This feature is available for <a href=\"http://www.ecwid.com/compare-plans.html\" target=\"_blank\">paid users</a> only."
 
215
  msgstr ""
216
 
217
- msgid "Chameleon skin <sup>beta</sup>"
 
 
 
 
218
  msgstr ""
219
 
220
- msgid "Automatic adjustment of your store design to your Wordpress theme. Whatever Wordpress theme you use, Ecwid will detect predominant colors and font and use them in your product catalog."
 
 
 
221
  msgstr ""
222
 
223
- msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>."
 
224
  msgstr ""
225
 
226
- msgid "Enable the new category menu"
 
 
 
 
 
 
 
 
227
  msgstr ""
228
 
229
- msgid "The new category menu looks better and is more mobile-friendly. If you haven't yet added category menu to your store page, you can do that in the <a %s>store page editor</a> (enable the \"Show categories\" option)"
 
 
 
230
  msgstr ""
231
 
 
232
  msgid "Save changes"
233
  msgstr ""
234
 
235
- msgid "Ecwid Shopping Cart — Appearance settings"
 
 
236
  msgstr ""
237
 
238
- msgid "Display search box above products"
 
239
  msgstr ""
240
 
241
- msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
 
242
  msgstr ""
243
 
244
- msgid "Display categories above products"
 
 
245
  msgstr ""
246
 
247
- msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
 
248
  msgstr ""
249
 
250
- msgid "Enable minicart attached to categories"
 
 
 
 
251
  msgstr ""
252
 
253
- msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
 
254
  msgstr ""
255
 
256
- msgid "Number of categories per row"
 
 
 
 
 
257
  msgstr ""
258
 
259
- msgid "Number of products per page"
 
260
  msgstr ""
261
 
262
- msgid "Grid view"
 
 
263
  msgstr ""
264
 
265
- msgid "List view"
 
266
  msgstr ""
267
 
268
- msgid "Table view"
 
269
  msgstr ""
270
 
271
- 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."
 
272
  msgstr ""
273
 
274
- msgid "Default view mode on product pages"
 
275
  msgstr ""
276
 
277
- msgid "Grid"
 
278
  msgstr ""
279
 
280
- msgid "List"
 
281
  msgstr ""
282
 
283
- msgid "Table"
 
284
  msgstr ""
285
 
286
- msgid "Default view mode on search results"
 
287
  msgstr ""
288
 
289
- msgid "Connect your store<br /> to this WordPress site"
 
290
  msgstr ""
291
 
292
- msgid "Enter your Store ID"
 
293
  msgstr ""
294
 
295
- msgid "Connect Ecwid store"
 
296
  msgstr ""
297
 
298
- msgid "Save and connect"
 
299
  msgstr ""
300
 
301
- msgid "After clicking button you need to login and accept permissions to use our plugin"
 
302
  msgstr ""
303
 
304
- msgid "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
 
 
305
  msgstr ""
306
 
307
- msgid "Where to find your Store ID:"
 
308
  msgstr ""
309
 
310
- msgid "Store ID is a unique identifier of your Ecwid account. You can find it in your Ecwid control panel: open the <a %s>Dashboard page</a> and find the \"<b>Store ID: NNNNNNN</b>\" text, where <b>NNNNNNN</b> is your Store&nbsp;ID."
 
 
311
  msgstr ""
312
 
313
- msgid "Don't have Ecwid account? Create it here"
 
314
  msgstr ""
315
 
316
- msgid "Questions? Visit <a %s>Ecwid support center</a>"
 
317
  msgstr ""
318
 
319
- msgid "Store ID"
 
320
  msgstr ""
321
 
322
- msgid "Disconnect store"
 
 
323
  msgstr ""
324
 
325
- msgid "Congratulations!"
 
326
  msgstr ""
327
 
328
- msgid "Your Ecwid store is now connected<br /> to your WordPress website"
 
329
  msgstr ""
330
 
331
- msgid "Greetings!"
 
332
  msgstr ""
333
 
334
- msgid "Your Ecwid store is connected<br /> to your WordPress website"
 
335
  msgstr ""
336
 
337
- msgid "Open control panel"
 
338
  msgstr ""
339
 
340
- msgid "Plugin is installed successfully!"
 
341
  msgstr ""
342
 
343
- msgid "There are just a few steps left to start selling<br /> on your WordPress site"
 
 
 
344
  msgstr ""
345
 
346
- msgid "There are few little steps left to start selling<br /> on your WordPress site"
 
347
  msgstr ""
348
 
349
- msgid "Register"
 
350
  msgstr ""
351
 
352
- msgid "Create a free Ecwid account to manage your store and inventory.<br /> No credit card required"
 
353
  msgstr ""
354
 
355
- msgid "Connect"
 
356
  msgstr ""
357
 
358
- msgid "Add your Ecwid store to your site <nobr>in two clicks</nobr>"
 
359
  msgstr ""
360
 
361
- msgid "Connect your Ecwid store to this site <nobr>in two clicks</nobr>"
 
362
  msgstr ""
363
 
364
- msgid "Start selling"
 
 
365
  msgstr ""
366
 
367
- msgid "Your storefront is ready"
 
368
  msgstr ""
369
 
370
- msgid "Create Ecwid store"
 
371
  msgstr ""
372
 
373
- msgid "Connect your store"
 
 
 
 
374
  msgstr ""
375
 
376
- msgid "Free registration, No credit card required"
 
377
  msgstr ""
378
 
379
- msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
 
380
  msgstr ""
381
 
382
- msgid "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
 
383
  msgstr ""
384
 
385
- msgid "Already have Ecwid account?"
 
386
  msgstr ""
387
 
388
- msgid "Connect your store to Wordpress site"
 
389
  msgstr ""
390
 
391
- msgid "Don't have an Ecwid account?"
 
 
 
392
  msgstr ""
393
 
394
- msgid "Register at Ecwid for free"
 
395
  msgstr ""
396
 
397
- msgid "No credit card required"
 
 
 
 
 
 
 
398
  msgstr ""
399
 
 
400
  msgid "Get ready to sell online"
401
  msgstr ""
402
 
403
- msgid "Sell Everywhere<br>with your Ecwid store"
 
404
  msgstr ""
405
 
406
- msgid "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
 
 
 
407
  msgstr ""
408
 
409
- msgid "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
 
 
 
410
  msgstr ""
411
 
 
412
  msgid "Features"
413
  msgstr ""
414
 
 
415
  msgid "Compatible with your theme"
416
  msgstr ""
417
 
418
- msgid "Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box."
 
419
  msgstr ""
420
 
 
421
  msgid "Free and always up to date"
422
  msgstr ""
423
 
424
- msgid "Free plan always available with tons of features<br>at no additional cost. Updates are seamless, automatic<br>and free of charge."
 
 
 
425
  msgstr ""
426
 
 
427
  msgid "Responsive design"
428
  msgstr ""
429
 
 
430
  msgid "Your store looks perfect<br />on all devices"
431
  msgstr ""
432
 
433
- msgid "PCI-DSS Certified"
 
434
  msgstr ""
435
 
 
436
  msgid "Secure checkout with over 40<br />payment options"
437
  msgstr ""
438
 
 
439
  msgid "Global Reach"
440
  msgstr ""
441
 
442
- msgid "More than 800,000 merchants in 175 countries"
 
443
  msgstr ""
444
 
 
445
  msgid "Start selling <br>on your WordPress <nobr>site for free</nobr>"
446
  msgstr ""
447
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
  msgid "Get Started, Create Ecwid Account"
449
  msgstr ""
450
 
451
- msgid "Connect your store to this site"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452
  msgstr ""
453
 
454
- msgid "Reconnect your store<br /> to this WordPress site"
 
455
  msgstr ""
456
 
457
- msgid "Reconnect Ecwid store"
 
458
  msgstr ""
459
 
460
- msgid "New features available, reconnect to be in touch with our updates"
 
461
  msgstr ""
462
 
463
- msgid "Questions? Visit <a href=\"http://help.ecwid.com/?source=wporg\">Ecwid support center</a>"
 
464
  msgstr ""
465
 
466
- msgid "Store settings"
 
467
  msgstr ""
468
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  msgid "Choose widgets to show"
470
  msgstr ""
471
 
 
472
  msgid "Product catalog will be shown automatically"
473
  msgstr ""
474
 
 
475
  msgid "Show search"
476
  msgstr ""
477
 
 
478
  msgid "Show minicart"
479
  msgstr ""
480
 
 
481
  msgid "Show categories"
482
  msgstr ""
483
 
484
- msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
 
 
 
485
  msgstr ""
486
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  msgid "Demo store"
488
  msgstr ""
489
 
490
- msgid "Ecwid plugin settings"
 
 
 
 
 
491
  msgstr ""
492
 
 
 
 
 
 
493
  msgid "Your store will be shown here!"
494
  msgstr ""
495
 
 
496
  msgid "Demo Store"
497
  msgstr ""
498
 
499
- msgid "Sell On The Go with Ecwid iOS Application"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
500
  msgstr ""
501
 
502
- msgid "Ecwid iOS app allows you to manage your online store, sell your products on the go, and accept payments with your phone. Just download the Ecwid app, connect it to your Ecwid shop and have your sales at your fingertips!"
 
503
  msgstr ""
504
 
505
- msgid "Get Your Products Found on Google using XML Sitemap"
 
506
  msgstr ""
507
 
508
- msgid "Free Google XML Sitemaps plugin creates a sitemap that includes your store product links. This makes your product pages more visible to search engines and appear in the search results."
 
509
  msgstr ""
510
 
511
- msgid "Add Product Slider to Your Store"
 
 
 
 
512
  msgstr ""
513
 
514
- msgid "Add a fancy product slider to your site using a free WP Widgets Avalanche plugin which works perfectly with Ecwid"
 
 
 
515
  msgstr ""
516
 
 
 
 
1
+ # Copyright (C) 2017 Ecwid Shopping Cart
2
+ # This file is distributed under the same license as the Ecwid Shopping Cart package.
3
+ msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Ecwid Shopping Cart 5.4.1\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ecwid-shopping-"
7
+ "cart\n"
8
+ "POT-Creation-Date: 2017-07-05 09:05:23+00:00\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
 
16
+ #: ecwid-shopping-cart.php:847
17
+ msgid "%s plugin doesn't work well with my \"%s\" theme"
18
  msgstr ""
19
 
20
+ #: ecwid-shopping-cart.php:862
21
+ msgid "I have a problem with my %s store"
22
  msgstr ""
23
 
24
+ #: ecwid-shopping-cart.php:890 templates/dashboard.php:44
25
+ msgid "Visit storefront"
26
  msgstr ""
27
 
28
+ #: ecwid-shopping-cart.php:898
29
+ msgid "Manage my store"
30
  msgstr ""
31
 
32
+ #: ecwid-shopping-cart.php:906
33
+ msgid "Read FAQ"
34
  msgstr ""
35
 
36
+ #: ecwid-shopping-cart.php:908
37
+ msgid ""
38
+ "https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-"
39
  msgstr ""
40
 
41
+ #: ecwid-shopping-cart.php:917
42
+ msgid "Report a problem with the store"
43
  msgstr ""
44
 
45
+ #: ecwid-shopping-cart.php:1279
46
+ msgid "<a %s>Online store powered by %s</a>"
47
  msgstr ""
48
 
49
+ #: ecwid-shopping-cart.php:1592 includes/class-ecwid-nav-menus.php:111
50
+ #: includes/class-ecwid-nav-menus.php:297
51
+ #: includes/class-ecwid-nav-menus.php:300
52
+ #: includes/class-ecwid-nav-menus.php:308
53
+ msgid "Store"
54
  msgstr ""
55
 
56
+ #: ecwid-shopping-cart.php:1796 includes/class-ecwid-admin.php:31
57
+ msgid "Setup"
58
  msgstr ""
59
 
60
+ #: ecwid-shopping-cart.php:1796
61
+ msgid "Settings"
62
  msgstr ""
63
 
64
+ #: ecwid-shopping-cart.php:1857 includes/class-ecwid-admin.php:33
65
+ msgid "Dashboard"
66
  msgstr ""
67
 
68
+ #: ecwid-shopping-cart.php:1859 includes/class-ecwid-admin.php:58
69
+ #: includes/class-ecwid-admin.php:59 includes/class-ecwid-products.php:242
70
+ msgid "Products"
71
  msgstr ""
72
 
73
+ #: ecwid-shopping-cart.php:1861
74
+ msgid "Orders"
75
  msgstr ""
76
 
77
+ #: ecwid-shopping-cart.php:1863 includes/class-ecwid-nav-menus.php:144
78
+ msgid "Refresh categories list"
79
  msgstr ""
80
 
81
+ #: ecwid-shopping-cart.php:1864 includes/class-ecwid-nav-menus.php:145
82
+ msgid "Done"
83
  msgstr ""
84
 
85
+ #: ecwid-shopping-cart.php:1865 includes/class-ecwid-nav-menus.php:146
86
+ msgid ""
87
+ "The store top-level categories are automatically added to this drop-down menu"
88
+ msgstr ""
89
+
90
+ #: ecwid-shopping-cart.php:1974 includes/class-ecwid-oauth.php:336
91
+ msgid ""
92
+ "To be able to choose a product to insert to your posts and pages, you will "
93
+ "need to re-connect your site to your %s store. This will only require you to "
94
+ "accept permissions request – so that the plugin will be able to list your "
95
+ "products in the \"Add product\" dialog."
96
+ msgstr ""
97
+
98
+ #: ecwid-shopping-cart.php:2466
99
+ msgid "Recommendations for Your Online Store"
100
+ msgstr ""
101
+
102
+ #: includes/class-ecwid-admin.php:21
103
+ msgid "%s shopping cart settings"
104
+ msgstr ""
105
+
106
+ #: includes/class-ecwid-admin.php:22
107
+ msgid "%s Store"
108
+ msgstr ""
109
+
110
+ #: includes/class-ecwid-admin.php:48 includes/class-ecwid-admin.php:49
111
+ msgid "Sales"
112
+ msgstr ""
113
+
114
+ #: includes/class-ecwid-admin.php:69
115
  msgid "Advanced settings"
116
  msgstr ""
117
 
118
+ #: includes/class-ecwid-admin.php:70
119
  msgid "Advanced"
120
  msgstr ""
121
 
122
+ #: includes/class-ecwid-admin.php:83 includes/class-ecwid-admin.php:84
123
+ msgid "Help"
124
  msgstr ""
125
 
126
+ #: includes/class-ecwid-integration-divibuilder.php:25
127
+ msgid "Ecwid"
128
+ msgstr ""
129
+
130
+ #: includes/class-ecwid-integration-divibuilder.php:41
131
+ msgid "Content"
132
+ msgstr ""
133
+
134
+ #: includes/class-ecwid-integration-divibuilder.php:44
135
+ msgid "Here you can create the content that will be used within the module."
136
+ msgstr ""
137
+
138
+ #: includes/class-ecwid-integration-divibuilder.php:49
139
+ msgid "Admin Label"
140
+ msgstr ""
141
+
142
+ #: includes/class-ecwid-integration-divibuilder.php:51
143
+ msgid ""
144
+ "This will change the label of the module in the builder for easy "
145
+ "identification."
146
+ msgstr ""
147
+
148
+ #: includes/class-ecwid-integration-divibuilder.php:54
149
+ msgid "CSS ID"
150
+ msgstr ""
151
+
152
+ #: includes/class-ecwid-integration-divibuilder.php:57
153
+ msgid ""
154
+ "Enter an optional CSS ID to be used for this module. An ID can be used to "
155
+ "create custom CSS styling, or to create links to particular sections of your "
156
+ "page."
157
+ msgstr ""
158
+
159
+ #: includes/class-ecwid-integration-divibuilder.php:60
160
+ msgid "CSS Class"
161
+ msgstr ""
162
+
163
+ #: includes/class-ecwid-integration-divibuilder.php:63
164
+ msgid ""
165
+ "Enter optional CSS classes to be used for this module. A CSS class can be "
166
+ "used to create custom CSS styling. You can add multiple classes, separated "
167
+ "with a space."
168
+ msgstr ""
169
+
170
+ #: includes/class-ecwid-message-manager.php:45
171
+ msgid ""
172
+ "Sorry, there is a problem. This page is supposed to display your store "
173
+ "Control Panel. However, this Wordpress site doesn't seem to be able to "
174
+ "connect to the Ecwid server to show your store dashboard here. This is "
175
+ "likely caused by your server misconfiguration and can be fixed by your "
176
+ "hosting provider. Here is a more techy description of the problem, which you "
177
+ "can send to your hosting provider: \"The Wordpress function wp_remote_post() "
178
+ "failed to connect a remote server because of some error: \"%s\". Seems like "
179
+ "HTTP POST requests are disabled on this server\". <br /><br />Please feel "
180
+ "free to contact us at <a %s>wordpress@ecwid.com</a> and we will help you "
181
+ "contact your hosting and ask them to fix the issue. <br /><br /> Meanwhile, "
182
+ "to manage your store, you can use the Ecwid Web Control Panel at <a %s>my."
183
+ "ecwid.com</a>. Your store front is working fine as well and you can check it "
184
+ "here: <a %s>%s</a>."
185
+ msgstr ""
186
+
187
+ #: includes/class-ecwid-message-manager.php:194
188
+ msgid "Greetings! Your %s plugin is now active."
189
+ msgstr ""
190
+
191
+ #: includes/class-ecwid-message-manager.php:195
192
+ msgid "Take a few simple steps to complete store setup"
193
+ msgstr ""
194
+
195
+ #: includes/class-ecwid-message-manager.php:196
196
+ msgid "Set up %s Store"
197
+ msgstr ""
198
+
199
+ #: includes/class-ecwid-message-manager.php:204
200
+ msgid "Your store is almost ready!"
201
+ msgstr ""
202
+
203
+ #: includes/class-ecwid-message-manager.php:205
204
+ msgid "Complete setup and start selling"
205
+ msgstr ""
206
+
207
+ #: includes/class-ecwid-message-manager.php:206
208
+ msgid "Complete Setup"
209
+ msgstr ""
210
+
211
+ #: includes/class-ecwid-message-manager.php:212
212
+ msgid ""
213
+ "To add extra functions to your store, drag and drop %s store elements on "
214
+ "your site. When you're done, you can get back to modifying your settings."
215
+ msgstr ""
216
+
217
+ #: includes/class-ecwid-message-manager.php:213
218
+ msgid "Back to Store Settings"
219
+ msgstr ""
220
+
221
+ #: includes/class-ecwid-message-manager.php:220
222
+ msgid ""
223
+ "Do you like your %s online store? We'd appreciate it if you add your review "
224
+ "and vote for the plugin on WordPress site."
225
+ msgstr ""
226
+
227
+ #: includes/class-ecwid-message-manager.php:224
228
+ msgid "Rate %s at WordPress.org"
229
+ msgstr ""
230
+
231
+ #: includes/class-ecwid-nav-menus.php:25
232
+ msgid "Ecwid Menu Item"
233
+ msgstr ""
234
+
235
+ #: includes/class-ecwid-nav-menus.php:143
236
+ msgid "Store Page"
237
+ msgstr ""
238
+
239
+ #: includes/class-ecwid-nav-menus.php:254
240
+ msgid "Select All"
241
+ msgstr ""
242
+
243
+ #: includes/class-ecwid-nav-menus.php:257
244
+ msgid "Add to Menu"
245
+ msgstr ""
246
+
247
+ #: includes/class-ecwid-nav-menus.php:273
248
+ msgid "Cart"
249
+ msgstr ""
250
+
251
+ #: includes/class-ecwid-nav-menus.php:276
252
+ #: includes/widgets/class-ecwid-widget-minicart.php:6
253
+ msgid "Shopping Cart"
254
+ msgstr ""
255
+
256
+ #: includes/class-ecwid-nav-menus.php:281
257
+ #: includes/class-ecwid-nav-menus.php:284
258
+ #: includes/widgets/class-ecwid-widget-search.php:10
259
+ msgid "Product Search"
260
+ msgstr ""
261
+
262
+ #: includes/class-ecwid-nav-menus.php:289
263
+ #: includes/class-ecwid-nav-menus.php:292
264
+ msgid "My Account"
265
+ msgstr ""
266
+
267
+ #: includes/class-ecwid-nav-menus.php:305
268
+ msgid "Store with Categories Menu"
269
+ msgstr ""
270
+
271
+ #: includes/class-ecwid-product-popup.php:94
272
+ msgid "Add Product"
273
+ msgstr ""
274
+
275
+ #: includes/class-ecwid-product-popup.php:134
276
+ msgid "First Page"
277
+ msgstr ""
278
+
279
+ #: includes/class-ecwid-product-popup.php:135
280
+ msgid "Previous Page"
281
+ msgstr ""
282
+
283
+ #: includes/class-ecwid-product-popup.php:136
284
+ msgid "Next Page"
285
+ msgstr ""
286
+
287
+ #: includes/class-ecwid-product-popup.php:137
288
+ msgid "Last Page"
289
  msgstr ""
290
 
291
+ #: includes/class-ecwid-store-editor.php:44 templates/store-popup.php:11
292
+ #: templates/store-popup.php:19
293
+ msgid "Add Store"
294
+ msgstr ""
295
+
296
+ #: includes/class-ecwid-store-editor.php:52
297
+ msgid "Edit Store"
298
+ msgstr ""
299
+
300
+ #: includes/class-ecwid-store-editor.php:67
301
+ msgid "Edit Appearance"
302
+ msgstr ""
303
+
304
+ #: includes/faq_entries.php:5
305
+ msgid "How secure is this plugin? Is my store PCI DSS compliant?"
306
+ msgstr ""
307
+
308
+ #: includes/faq_entries.php:6
309
+ msgid ""
310
+ "Ecwid is PCI DSS Level 1 certified, which is the gold standard for e-"
311
+ "commerce solutions worldwide. This means you won’t have any banking "
312
+ "compliance issues when selling online with Ecwid. <a target=\"_blank\" href="
313
+ "\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-"
314
+ "downloadable-#secureplugin\">More details.</a>"
315
+ msgstr ""
316
+
317
+ #: includes/faq_entries.php:12
318
+ msgid "How can I manage my store from a mobile device?"
319
+ msgstr ""
320
+
321
+ #: includes/faq_entries.php:13
322
+ msgid ""
323
+ "Ecwid provides free mobile applications for iOS and Android to manage your "
324
+ "store and sell on the go. Scan products, track inventory, manage sales and "
325
+ "accept payments using your mobile device as a POS station. <a target=\"_blank"
326
+ "\" href=\"https://www.ecwid.com/ecwid-mobile\">More details.</a>"
327
+ msgstr ""
328
+
329
+ #: includes/faq_entries.php:20
330
+ msgid "How to set up a storefront on Facebook with Ecwid?"
331
+ msgstr ""
332
+
333
+ #: includes/faq_entries.php:21
334
+ msgid ""
335
+ "You can add your online store to your Facebook business page. No addons "
336
+ "needed. Ecwid will automatically synchronize products, customers, orders and "
337
+ "inventory between your WordPress and Facebook storefronts. <a target=\"_blank"
338
+ "\" href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-"
339
+ "downloadable-#How%20to%20add%20my%20store%20to%20Facebook\">More details.</a>"
340
+ msgstr ""
341
+
342
+ #: includes/faq_entries.php:28
343
+ msgid "How can I add a cart widget to my site sidebar?"
344
+ msgstr ""
345
+
346
+ #: includes/faq_entries.php:30
347
+ msgid ""
348
+ "You can add product search box, cart widget and more on the <a href=\"%s\">"
349
+ "\"Appearance / Widgets page\"</a> here in your site admin. <a target=\"_blank"
350
+ "\" href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-"
351
+ "downloadable-#Sidebar%%20widgets\">More details.</a>"
352
+ msgstr ""
353
+
354
+ #: includes/faq_entries.php:38
355
+ msgid "How much does Ecwid cost?"
356
+ msgstr ""
357
+
358
+ #: includes/faq_entries.php:39
359
+ msgid ""
360
+ "Our 4 account types vary by number of products, types of functionality, and "
361
+ "level of support. For more information, check out our <a target=\"_blank\" "
362
+ "href=\"https://www.ecwid.com/pricing\">pricing page.</a><br /><br />Free - "
363
+ "Up to 10 products<br />Venture - $15/month<br />Business - $35/month<br /"
364
+ ">Unlimited - $99/month<br /><br />Pro Tip: You can also save money by "
365
+ "enrolling in our annual plans."
366
+ msgstr ""
367
+
368
+ #: includes/faq_entries.php:45
369
+ msgid "How do I add store categories to the site menu."
370
+ msgstr ""
371
+
372
+ #: includes/faq_entries.php:46
373
+ msgid ""
374
+ "You can add the store categories menu to your site menu to help your "
375
+ "customers easily navigate your site. Just open \"Appearance > Menus\" in "
376
+ "your WordPress control panel and add the \"Store with Categories Menu\" item "
377
+ "to your site menu. A drop-down menu containing your store categories will "
378
+ "automatically appear on your site."
379
+ msgstr ""
380
+
381
+ #: includes/faq_entries.php:52
382
+ msgid "How do I put my products in the sitemap?"
383
+ msgstr ""
384
+
385
+ #: includes/faq_entries.php:53
386
+ msgid ""
387
+ "To create sitemap for your Wordpress site we suggest using <a target=\"_blank"
388
+ "\" href=\"https://wordpress.org/plugins/google-sitemap-generator/\">Google "
389
+ "XML Sitemaps</a> or <a target=\"_blank\" href=\"https://wordpress.org/"
390
+ "plugins/wordpress-seo/\">Yoast Wordpress SEO</a>. &nbsp;plugins. These "
391
+ "plugins are fully compatible with Ecwid and allow to generate a sitemap that "
392
+ "will contain links to categories and product pages, so the store pages will "
393
+ "get indexed faster. Please note that this option is available to <a target="
394
+ "\"_blank\" href=\"https://www.ecwid.com/pricing\">paid Ecwid users</a>."
395
+ msgstr ""
396
+
397
+ #: includes/faq_entries.php:58
398
+ msgid ""
399
+ "How to add a single product with the add to bag button to the site pages?"
400
+ msgstr ""
401
+
402
+ #: includes/faq_entries.php:59
403
+ msgid ""
404
+ "To feature a single product on a separate page or blog post of your site, "
405
+ "use <b>[ecwid_product]</b> shortcode. <a target=\"_blank\" href=\"https://"
406
+ "support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-"
407
+ "#Howtoembedasingleproductonapageorpostofmysite\">How to use it.</a>"
408
+ msgstr ""
409
+
410
+ #: includes/faq_entries.php:65
411
+ msgid "Is it possible to display my store on the site home page?"
412
+ msgstr ""
413
+
414
+ #: includes/faq_entries.php:66
415
+ msgid ""
416
+ "You can display your store on the site main page. Adjust the \"Reading\" "
417
+ "settings of your site as described in our <a target=\"_blank\" href="
418
+ "\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-"
419
+ "downloadable-#displaystoreonhomepage\">Help Center.</a>"
420
+ msgstr ""
421
+
422
+ #: includes/oembed.php:68 includes/oembed.php:97 templates/help.php:96
423
+ msgid "See more"
424
+ msgstr ""
425
+
426
+ #: includes/themes/class-ecwid-theme-twentyfifteen.php:32
427
+ #: includes/themes/class-ecwid-theme-twentyfifteen.php:38
428
+ #: includes/themes/class-ecwid-theme-twentyseventeen.php:47
429
+ #: includes/themes/class-ecwid-theme-twentyseventeen.php:53
430
+ #: includes/themes/class-ecwid-theme-twentysixteen.php:35
431
+ #: includes/themes/class-ecwid-theme-twentysixteen.php:41
432
+ #: includes/widgets/class-ecwid-widget-store-link.php:29
433
+ msgid "Shop"
434
+ msgstr ""
435
+
436
+ #: includes/widgets/class-ecwid-widget-badge.php:9
437
+ msgid ""
438
+ "Do you like Ecwid and want to help it grow? You can add this fancy 'Powered "
439
+ "by Ecwid' badge on your site to show your visitors that you're a proud user "
440
+ "of Ecwid."
441
  msgstr ""
442
 
443
+ #: includes/widgets/class-ecwid-widget-badge.php:10
444
  msgid "Ecwid Badge"
445
  msgstr ""
446
 
447
+ #: includes/widgets/class-ecwid-widget-badge.php:17
448
+ #: includes/widgets/class-ecwid-widget-badge.php:23
449
  msgid "Ecwid shopping cart widget"
450
  msgstr ""
451
 
452
+ #: includes/widgets/class-ecwid-widget-badge.php:29
453
+ #: includes/widgets/class-ecwid-widget-badge.php:65
454
  msgid "Ecwid ecommerce solution"
455
  msgstr ""
456
 
457
+ #: includes/widgets/class-ecwid-widget-badge.php:35
458
+ #: includes/widgets/class-ecwid-widget-badge.php:71
459
  msgid "Ecwid free shopping cart"
460
  msgstr ""
461
 
462
+ #: includes/widgets/class-ecwid-widget-badge.php:41
463
+ #: includes/widgets/class-ecwid-widget-badge.php:53
464
  msgid "Ecwid shopping cart"
465
  msgstr ""
466
 
467
+ #: includes/widgets/class-ecwid-widget-badge.php:47
468
+ #: includes/widgets/class-ecwid-widget-badge.php:59
469
  msgid "Ecwid e-commerce widgets"
470
  msgstr ""
471
 
472
+ #: includes/widgets/class-ecwid-widget-floating-shopping-cart.php:15
473
+ msgid "Adds a shopping cart widget to the top right corner of your site."
474
  msgstr ""
475
 
476
+ #: includes/widgets/class-ecwid-widget-floating-shopping-cart.php:16
477
+ msgid "Shopping Cart (Floating)"
478
+ msgstr ""
479
+
480
+ #: includes/widgets/class-ecwid-widget-floating-shopping-cart.php:114
481
+ msgid "Position"
482
  msgstr ""
483
 
484
+ #: includes/widgets/class-ecwid-widget-floating-shopping-cart.php:117
485
+ msgid "Bottom right"
486
  msgstr ""
487
 
488
+ #: includes/widgets/class-ecwid-widget-floating-shopping-cart.php:122
489
+ msgid "Top right"
490
+ msgstr ""
491
+
492
+ #: includes/widgets/class-ecwid-widget-minicart-miniview.php:5
493
+ msgid ""
494
+ "Adds a compact cart widget for customer to see the products they added to "
495
+ "the cart."
496
+ msgstr ""
497
+
498
+ #: includes/widgets/class-ecwid-widget-minicart-miniview.php:6
499
  msgid "Shopping Cart (Mini)"
500
  msgstr ""
501
 
502
+ #: includes/widgets/class-ecwid-widget-minicart-miniview.php:44
503
+ #: includes/widgets/class-ecwid-widget-minicart.php:44
504
+ #: includes/widgets/class-ecwid-widget-search.php:49
505
+ #: includes/widgets/class-ecwid-widget-vcategories.php:43
506
+ #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:71
507
+ msgid "Title:"
508
  msgstr ""
509
 
510
+ #: includes/widgets/class-ecwid-widget-minicart.php:5
511
+ msgid ""
512
+ "Adds a cart widget for customer to see the products they added to the cart."
513
  msgstr ""
514
 
515
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:9
516
+ msgid ""
517
+ "Displays a list of products recently viewed by the customer to easily return "
518
+ "to the products they saw in your shop."
519
  msgstr ""
520
 
521
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:10
522
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:151
523
+ msgid "Recently Viewed Products"
524
  msgstr ""
525
 
526
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:122
527
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:152
528
+ msgid "You have not viewed any product yet. Open store."
529
  msgstr ""
530
 
531
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:162
532
+ #: templates/product-popup.php:160
533
+ msgid "Title"
534
  msgstr ""
535
 
536
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:163
537
+ msgid "Store Link Title"
538
  msgstr ""
539
 
540
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:164
541
+ msgid "Number of products to show"
542
  msgstr ""
543
 
544
+ #: includes/widgets/class-ecwid-widget-search.php:9
545
+ msgid ""
546
+ "Displays a simple search box for your customers to find a product in your "
547
+ "store"
548
  msgstr ""
549
 
550
+ #: includes/widgets/class-ecwid-widget-store-link.php:5
551
+ msgid ""
552
+ "Displays a link to the store page in sidebar for customer to quickly access "
553
+ "your store from any page on the site."
554
  msgstr ""
555
 
556
+ #: includes/widgets/class-ecwid-widget-store-link.php:6
557
+ msgid "Store Page Link"
558
  msgstr ""
559
 
560
+ #: includes/widgets/class-ecwid-widget-store-link.php:33
561
+ msgid "Text"
562
  msgstr ""
563
 
564
+ #: includes/widgets/class-ecwid-widget-vcategories.php:5
565
+ msgid "Adds vertical categories block to let the customer navigate your store."
566
  msgstr ""
567
 
568
+ #: includes/widgets/class-ecwid-widget-vcategories.php:6
569
+ msgid "Store Categories"
570
  msgstr ""
571
 
572
+ #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:11
573
+ msgid ""
574
+ "Adds root categories list to the sidebar to let your customers navigate the "
575
+ "store."
576
  msgstr ""
577
 
578
+ #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:12
579
+ msgid "Store Root Categories"
580
  msgstr ""
581
 
582
+ #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:22
583
+ #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:68
584
+ msgid "Browse by Category"
585
  msgstr ""
586
 
587
+ #: lib/ecwid_platform.php:59 templates/product-popup.php:171
588
+ msgid "Price"
589
  msgstr ""
590
 
591
+ #: templates/admin-footer.php:4
592
+ msgid "Manage Store on iPhone, iPad or Android"
593
  msgstr ""
594
 
595
+ #: templates/admin-footer.php:7
596
+ msgid "Get %s mobile app"
597
  msgstr ""
598
 
599
+ #: templates/admin-footer.php:13
600
+ msgid "Questions?"
601
  msgstr ""
602
 
603
+ #: templates/admin-footer.php:21
604
+ msgid "Want to connect another %s store?"
605
  msgstr ""
606
 
607
+ #: templates/admin-footer.php:23
608
+ msgid "<a %s>Reconnect</a>"
609
  msgstr ""
610
 
611
+ #: templates/admin-message.php:45
612
+ msgid "Never show this message again"
613
  msgstr ""
614
 
615
+ #: templates/admin-timeout.php:9
616
+ msgid "Sorry we're having technical difficulties."
617
  msgstr ""
618
 
619
+ #: templates/admin-timeout.php:11
620
+ msgid ""
621
+ "Our team is already working on this issue. Please refresh the page in a few "
622
+ "minutes. If the issue persists, please contact <a target=\"_blank\" href="
623
+ "\"https://help.ecwid.com/customer/portal/emails/new\">our customer support "
624
+ "team</a>."
625
  msgstr ""
626
 
627
+ #: templates/advanced-settings.php:1
628
+ msgid "%s Shopping Cart — Advanced settings"
629
  msgstr ""
630
 
631
+ #: templates/advanced-settings.php:29
632
+ msgid "SEO friendly clean URLs"
633
  msgstr ""
634
 
635
+ #: templates/advanced-settings.php:34
636
+ msgid ""
637
+ "This enables new clean URLs format in your store. The new urls do not "
638
+ "contain hash sign ('#'), so they look nicer and are better indexed by Google."
639
  msgstr ""
640
 
641
+ #: templates/advanced-settings.php:38
642
+ msgid ""
643
+ "To enable clean URLs in your store, you will need to enable pretty "
644
+ "permalinks in your WordPress site settings. Navigate to <a%s>Settings-"
645
+ ">Permalink</a> and enable the \"Post name\" permalink type."
646
  msgstr ""
647
 
648
+ #: templates/advanced-settings.php:44
649
+ msgid ""
650
+ "Note: the new URLs will be automatically enabled for every store in one of "
651
+ "upcoming updates so please make sure to check how the new URLs work in your "
652
+ "store and <a %s>let us know</a> if you face any trouble with them"
653
  msgstr ""
654
 
655
+ #: templates/advanced-settings.php:44 templates/advanced-settings.php:188
656
+ msgid "https://support.ecwid.com/hc/en-us/requests/new"
657
  msgstr ""
658
 
659
+ #: templates/advanced-settings.php:57 templates/store-popup.php:154
660
  msgid "Category shown by default"
661
  msgstr ""
662
 
663
+ #: templates/advanced-settings.php:61 templates/store-popup.php:161
664
  msgid "Store root category"
665
  msgstr ""
666
 
667
+ #: templates/advanced-settings.php:74
668
+ msgid ""
669
+ "By default, the storefront shows a list of root categories. You can override "
670
+ "this behavior and show a different category when customers open your store "
671
+ "for the first time. This is useful if you only have one category or want to "
672
+ "display a specific set of items (e.g. \"Featured Products\") to new visitors."
673
+ msgstr ""
674
+
675
+ #: templates/advanced-settings.php:97
676
+ msgid "Customer Single Sign-On"
677
+ msgstr ""
678
+
679
+ #: templates/advanced-settings.php:102
680
+ msgid ""
681
+ "Single Sign-On allows your customers to have a single login for your "
682
+ "WordPress site and your %s store. When someone logs in to your site, they "
683
+ "will automatically be logged in to their customer account in your store as "
684
+ "well with no need to enter their email/password again."
685
  msgstr ""
686
 
687
+ #: templates/advanced-settings.php:109
688
+ msgid "Upgrade to get this feature"
689
  msgstr ""
690
 
691
+ #: templates/advanced-settings.php:112
692
+ msgid "Please subscribe to a paid plan to get this feature."
693
  msgstr ""
694
 
695
+ #: templates/advanced-settings.php:118
696
+ msgid ""
697
+ "To allow %s automatically log in customers to your store, please provide it "
698
+ "with a permission to use the customer data in the store. <a %s>Please use "
699
+ "this link to do that</a>"
700
  msgstr ""
701
 
702
+ #: templates/advanced-settings.php:124
703
+ msgid ""
704
+ "To make sure your customer can actually log in to your site and store, "
705
+ "enable registration in the <a %s>site settings</a>"
706
  msgstr ""
707
 
708
+ #: templates/advanced-settings.php:146
709
+ msgid "Chameleon skin"
710
  msgstr ""
711
 
712
+ #: templates/advanced-settings.php:150
713
+ msgid ""
714
+ "Automatic adjustment of your store design to your WordPress theme. Whatever "
715
+ "WordPress theme you use, %s will detect predominant colors and font and use "
716
+ "them in your product catalog."
717
  msgstr ""
718
 
719
+ #: templates/advanced-settings.php:153
720
+ msgid ""
721
+ "Please note this functionality is in beta. So if you run into difficulties "
722
+ "or find problems with Chameleon, please <a %s>let us know</a>."
723
  msgstr ""
724
 
725
+ #: templates/advanced-settings.php:176
726
+ msgid "Integration with search on your site <sup>beta</sup>"
727
  msgstr ""
728
 
729
+ #: templates/advanced-settings.php:180
730
+ msgid ""
731
+ "%s stores your products data in a secure cloud storage. The product pages "
732
+ "are displayed on the fly when a customer browses your store. So, basically, "
733
+ "the products are not stored on the site, that's why the site search doesn't "
734
+ "find product pages while looking through site pages and posts. This option "
735
+ "enables a local storage mode: the products will be stored both in the cloud "
736
+ "and on your site. The site search results will list product pages as well as "
737
+ "regular pages/posts of your site."
738
  msgstr ""
739
 
740
+ #: templates/advanced-settings.php:188
741
+ msgid ""
742
+ "Please note this functionality is in beta. So if you run into difficulties "
743
+ "or find problems with it, please <a %s>let us know</a>."
744
  msgstr ""
745
 
746
+ #: templates/advanced-settings.php:197
747
  msgid "Save changes"
748
  msgstr ""
749
 
750
+ #: templates/connect.php:5 templates/dashboard.php:6
751
+ #: templates/reconnect-sso.php:5 templates/reconnect.php:5
752
+ msgid "%s Shopping Cart"
753
  msgstr ""
754
 
755
+ #: templates/connect.php:13 templates/reconnect.php:13
756
+ msgid "Connect your store<br /> to this WordPress site"
757
  msgstr ""
758
 
759
+ #: templates/connect.php:17
760
+ msgid "Enter your Store ID"
761
  msgstr ""
762
 
763
+ #: templates/connect.php:20 templates/landing_old.php:27
764
+ #: templates/reconnect.php:23
765
+ msgid "Connect"
766
  msgstr ""
767
 
768
+ #: templates/connect.php:21
769
+ msgid "Save and connect"
770
  msgstr ""
771
 
772
+ #: templates/connect.php:27 templates/reconnect.php:46
773
+ msgid ""
774
+ "To sell using %1$s, you must allow WordPress to access the %1$s plugin. The "
775
+ "connect button will direct you to your %1$s account where you can provide "
776
+ "permission."
777
  msgstr ""
778
 
779
+ #: templates/connect.php:32
780
+ msgid "Where to find your Store ID:"
781
  msgstr ""
782
 
783
+ #: templates/connect.php:34
784
+ msgid ""
785
+ "Store ID is a unique identifier of your %1$s account. You can find it in "
786
+ "your %1$s control panel: open the <a %2$s>Dashboard page</a> and find the "
787
+ "\"<b>Store ID: NNNNNNN</b>\" text, where <b>NNNNNNN</b> is your Store&nbsp;"
788
+ "ID."
789
  msgstr ""
790
 
791
+ #: templates/connect.php:39
792
+ msgid "Don't have an %s account? Create one now."
793
  msgstr ""
794
 
795
+ #: templates/dashboard.php:10 templates/store-popup.php:231
796
+ #: templates/store-svg.php:15
797
+ msgid "Store ID"
798
  msgstr ""
799
 
800
+ #: templates/dashboard.php:14
801
+ msgid "Disconnect store"
802
  msgstr ""
803
 
804
+ #: templates/dashboard.php:27
805
+ msgid "Congratulations!"
806
  msgstr ""
807
 
808
+ #: templates/dashboard.php:30
809
+ msgid "Your %s store is now connected<br /> to your WordPress website"
810
  msgstr ""
811
 
812
+ #: templates/dashboard.php:35
813
+ msgid "Greetings!"
814
  msgstr ""
815
 
816
+ #: templates/dashboard.php:38
817
+ msgid "Your %s store is connected<br /> to your WordPress website"
818
  msgstr ""
819
 
820
+ #: templates/dashboard.php:47
821
+ msgid "Open control panel"
822
  msgstr ""
823
 
824
+ #: templates/debug.php:14
825
+ msgid "Download log file"
826
  msgstr ""
827
 
828
+ #: templates/help.php:11
829
+ msgid "How can we help you?"
830
  msgstr ""
831
 
832
+ #: templates/help.php:15
833
+ msgid "https://support.ecwid.com/hc/en-us/search"
834
  msgstr ""
835
 
836
+ #: templates/help.php:17
837
+ msgid "E.g. How to set up shipping"
838
  msgstr ""
839
 
840
+ #: templates/help.php:21
841
+ msgid "Search the Knowledge Base"
842
  msgstr ""
843
 
844
+ #: templates/help.php:29
845
+ msgid "https://support.ecwid.com/hc/en-us/sections/201706719-Ecwid-Basics"
846
  msgstr ""
847
 
848
+ #: templates/help.php:31
849
+ msgid "Ecwid Basics"
850
  msgstr ""
851
 
852
+ #: templates/help.php:35
853
+ msgid ""
854
+ "https://support.ecwid.com/hc/en-us/sections/201758475-Manage-Your-Ecwid-Store"
855
  msgstr ""
856
 
857
+ #: templates/help.php:37
858
+ msgid "Manage Your Ecwid Store"
859
  msgstr ""
860
 
861
+ #: templates/help.php:41
862
+ msgid ""
863
+ "https://support.ecwid.com/hc/en-us/sections/201758445-Customize-Your-Store"
864
  msgstr ""
865
 
866
+ #: templates/help.php:43
867
+ msgid "Customize Your Store"
868
  msgstr ""
869
 
870
+ #: templates/help.php:47
871
+ msgid "https://support.ecwid.com/hc/en-us/sections/201706799-Billing-Questions"
872
  msgstr ""
873
 
874
+ #: templates/help.php:49
875
+ msgid "Billing Questions"
876
  msgstr ""
877
 
878
+ #: templates/help.php:53
879
+ msgid ""
880
+ "https://support.ecwid.com/hc/en-us/sections/201702859-Technical-Reference"
881
  msgstr ""
882
 
883
+ #: templates/help.php:55
884
+ msgid "Technical Reference"
885
  msgstr ""
886
 
887
+ #: templates/help.php:62
888
+ msgid "Frequently Asked Questions"
889
  msgstr ""
890
 
891
+ #: templates/help.php:205
892
+ msgid "Contact us"
893
  msgstr ""
894
 
895
+ #: templates/help.php:206
896
+ msgid "Still have questions about Ecwid? Let us know!"
897
  msgstr ""
898
 
899
+ #: templates/help.php:211
900
+ msgid "https://www.ecwid.com/forums"
901
  msgstr ""
902
 
903
+ #: templates/help.php:211
904
+ msgid "Forums"
905
  msgstr ""
906
 
907
+ #: templates/help.php:212
908
+ msgid ""
909
+ "Join the Ecwid community. Discuss support topics and store ideas with other "
910
+ "Ecwid users."
911
  msgstr ""
912
 
913
+ #: templates/help.php:221
914
+ msgid "Send a message to our support team"
915
  msgstr ""
916
 
917
+ #: templates/help.php:227
918
+ msgid "Subject"
919
  msgstr ""
920
 
921
+ #: templates/help.php:228
922
+ msgid "Type in your message here"
923
  msgstr ""
924
 
925
+ #: templates/help.php:231
926
+ msgid "Send Message"
927
  msgstr ""
928
 
929
+ #: templates/help.php:242
930
+ msgid "Send message failed"
931
  msgstr ""
932
 
933
+ #: templates/help.php:248
934
+ msgid "Your email has been sent"
935
  msgstr ""
936
 
937
+ #: templates/help.php:249
938
+ msgid ""
939
+ " Thank you very much for contacting us! We will get back to you shortly."
940
  msgstr ""
941
 
942
+ #: templates/help.php:250
943
+ msgid "You can send a new request here."
944
  msgstr ""
945
 
946
+ #: templates/landing.php:8
947
+ msgid "Welcome to %s!"
948
  msgstr ""
949
 
950
+ #: templates/landing.php:9
951
+ msgid ""
952
+ "Thank you for choosing %s to build your online store. The first step to sell "
953
+ "successfully online is to setup your store! Let’s get started and add a "
954
+ "store to your website in a few simple steps."
955
  msgstr ""
956
 
957
+ #: templates/landing.php:15 templates/landing.php:132
958
+ msgid "Create Free %s Store"
959
  msgstr ""
960
 
961
+ #: templates/landing.php:31 templates/landing.php:148
962
+ msgid "Store is created"
963
  msgstr ""
964
 
965
+ #: templates/landing.php:35 templates/landing.php:152
966
+ msgid "Creating store"
967
  msgstr ""
968
 
969
+ #: templates/landing.php:39 templates/landing.php:156
970
+ msgid "Preparing your store dashboard"
971
  msgstr ""
972
 
973
+ #: templates/landing.php:43 templates/landing_old.php:52
974
+ msgid "Free registration, No credit card required"
975
  msgstr ""
976
 
977
+ #: templates/landing.php:46
978
+ msgid ""
979
+ "Connection error: please click the button again and give permissions for "
980
+ "this plugin<br /> to show your %s store on this site."
981
  msgstr ""
982
 
983
+ #: templates/landing.php:49 templates/landing.php:160
984
+ msgid "Already have %s account?"
985
  msgstr ""
986
 
987
+ #: templates/landing.php:50 templates/landing_old.php:62
988
+ msgid "Connect your store to Wordpress site"
989
+ msgstr ""
990
+
991
+ #: templates/landing.php:53
992
+ msgid ""
993
+ "You will be asked to log in to your %s Control Panel<br />and give "
994
+ "permissions to show your store on this site"
995
  msgstr ""
996
 
997
+ #: templates/landing.php:56 templates/landing_old.php:75
998
  msgid "Get ready to sell online"
999
  msgstr ""
1000
 
1001
+ #: templates/landing.php:67
1002
+ msgid "Sell Everywhere<br>with your %s store"
1003
  msgstr ""
1004
 
1005
+ #: templates/landing.php:68 templates/landing_old.php:87
1006
+ msgid ""
1007
+ "Start selling on your WordPress site. Then mirror your shop on your Facebook "
1008
+ "page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
1009
  msgstr ""
1010
 
1011
+ #: templates/landing.php:69
1012
+ msgid ""
1013
+ "Use %s's mobile-POS to swipe credit cards and sell on the go. Your orders "
1014
+ "and inventory are always synchronized with your online store."
1015
  msgstr ""
1016
 
1017
+ #: templates/landing.php:75 templates/landing_old.php:94
1018
  msgid "Features"
1019
  msgstr ""
1020
 
1021
+ #: templates/landing.php:82 templates/landing_old.php:101
1022
  msgid "Compatible with your theme"
1023
  msgstr ""
1024
 
1025
+ #: templates/landing.php:83
1026
+ msgid "%s is compatible with your<br>“%s” WordPress theme<br>out of the box."
1027
  msgstr ""
1028
 
1029
+ #: templates/landing.php:91 templates/landing_old.php:110
1030
  msgid "Free and always up to date"
1031
  msgstr ""
1032
 
1033
+ #: templates/landing.php:92 templates/landing_old.php:111
1034
+ msgid ""
1035
+ "Free plan always available with tons of features<br>at no additional cost. "
1036
+ "Updates are seamless, automatic<br>and free of charge."
1037
  msgstr ""
1038
 
1039
+ #: templates/landing.php:102 templates/landing_old.php:121
1040
  msgid "Responsive design"
1041
  msgstr ""
1042
 
1043
+ #: templates/landing.php:103 templates/landing_old.php:122
1044
  msgid "Your store looks perfect<br />on all devices"
1045
  msgstr ""
1046
 
1047
+ #: templates/landing.php:111 templates/landing_old.php:130
1048
+ msgid "PCI DSS Certified"
1049
  msgstr ""
1050
 
1051
+ #: templates/landing.php:112 templates/landing_old.php:131
1052
  msgid "Secure checkout with over 40<br />payment options"
1053
  msgstr ""
1054
 
1055
+ #: templates/landing.php:120 templates/landing_old.php:139
1056
  msgid "Global Reach"
1057
  msgstr ""
1058
 
1059
+ #: templates/landing.php:121
1060
+ msgid "Over 1 million merchants in 175 countries"
1061
  msgstr ""
1062
 
1063
+ #: templates/landing.php:128 templates/landing_old.php:147
1064
  msgid "Start selling <br>on your WordPress <nobr>site for free</nobr>"
1065
  msgstr ""
1066
 
1067
+ #: templates/landing.php:161 templates/landing_old.php:158
1068
+ msgid "Connect your store to this site"
1069
+ msgstr ""
1070
+
1071
+ #: templates/landing_old.php:8 templates/landing_old.php:12
1072
+ msgid "Plugin is installed successfully!"
1073
+ msgstr ""
1074
+
1075
+ #: templates/landing_old.php:9
1076
+ msgid ""
1077
+ "There are just a few steps left to start selling<br /> on your WordPress site"
1078
+ msgstr ""
1079
+
1080
+ #: templates/landing_old.php:13
1081
+ msgid ""
1082
+ "There are few little steps left to start selling<br /> on your WordPress site"
1083
+ msgstr ""
1084
+
1085
+ #: templates/landing_old.php:19
1086
+ msgid "Register"
1087
+ msgstr ""
1088
+
1089
+ #: templates/landing_old.php:20
1090
+ msgid ""
1091
+ "Create a free Ecwid account to manage your store and inventory.<br /> No "
1092
+ "credit card required"
1093
+ msgstr ""
1094
+
1095
+ #: templates/landing_old.php:29
1096
+ msgid "Add your Ecwid store to your site <nobr>in two clicks</nobr>"
1097
+ msgstr ""
1098
+
1099
+ #: templates/landing_old.php:30
1100
+ msgid "Connect your Ecwid store to this site <nobr>in two clicks</nobr>"
1101
+ msgstr ""
1102
+
1103
+ #: templates/landing_old.php:39
1104
+ msgid "Start selling"
1105
+ msgstr ""
1106
+
1107
+ #: templates/landing_old.php:40
1108
+ msgid "Your storefront is ready"
1109
+ msgstr ""
1110
+
1111
+ #: templates/landing_old.php:46
1112
+ msgid "Create Ecwid store"
1113
+ msgstr ""
1114
+
1115
+ #: templates/landing_old.php:49 templates/landing_old.php:154
1116
+ msgid "Connect your store"
1117
+ msgstr ""
1118
+
1119
+ #: templates/landing_old.php:55
1120
+ msgid ""
1121
+ "Connection error: please click the button again and give permissions for "
1122
+ "this plugin<br /> to show your Ecwid store on this site."
1123
+ msgstr ""
1124
+
1125
+ #: templates/landing_old.php:58 templates/landing_old.php:69
1126
+ msgid ""
1127
+ "You will be asked to log in to your Ecwid Control Panel<br />and give "
1128
+ "permissions to show your store on this site"
1129
+ msgstr ""
1130
+
1131
+ #: templates/landing_old.php:61 templates/landing_old.php:157
1132
+ msgid "Already have Ecwid account?"
1133
+ msgstr ""
1134
+
1135
+ #: templates/landing_old.php:65 templates/landing_old.php:161
1136
+ msgid "Don't have an Ecwid account?"
1137
+ msgstr ""
1138
+
1139
+ #: templates/landing_old.php:66 templates/landing_old.php:162
1140
+ msgid "Register at Ecwid for free"
1141
+ msgstr ""
1142
+
1143
+ #: templates/landing_old.php:72
1144
+ msgid "No credit card required"
1145
+ msgstr ""
1146
+
1147
+ #: templates/landing_old.php:86
1148
+ msgid "Sell Everywhere<br>with your Ecwid store"
1149
+ msgstr ""
1150
+
1151
+ #: templates/landing_old.php:88
1152
+ msgid ""
1153
+ "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders "
1154
+ "and inventory are always synchronized with your online store."
1155
+ msgstr ""
1156
+
1157
+ #: templates/landing_old.php:102
1158
+ msgid ""
1159
+ "Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box."
1160
+ msgstr ""
1161
+
1162
+ #: templates/landing_old.php:140
1163
+ msgid "More than 800,000 merchants in 175 countries"
1164
+ msgstr ""
1165
+
1166
+ #: templates/landing_old.php:151
1167
  msgid "Get Started, Create Ecwid Account"
1168
  msgstr ""
1169
 
1170
+ #: templates/product-popup.php:23
1171
+ msgid "Name"
1172
+ msgstr ""
1173
+
1174
+ #: templates/product-popup.php:29
1175
+ msgid "SKU"
1176
+ msgstr ""
1177
+
1178
+ #: templates/product-popup.php:47 templates/product-popup.php:53
1179
+ #: templates/product-popup.php:56
1180
+ msgid "Search"
1181
+ msgstr ""
1182
+
1183
+ #: templates/product-popup.php:49
1184
+ msgid "Title or SKU"
1185
+ msgstr ""
1186
+
1187
+ #: templates/product-popup.php:69
1188
+ msgid "Current Page"
1189
+ msgstr ""
1190
+
1191
+ #: templates/product-popup.php:80
1192
+ msgid "Next page"
1193
+ msgstr ""
1194
+
1195
+ #: templates/product-popup.php:94
1196
+ msgid ""
1197
+ "Nothing found for <span class=\"empty-page__term\">\"{{ data.term }}\"</span>"
1198
  msgstr ""
1199
 
1200
+ #: templates/product-popup.php:96
1201
+ msgid "Try another search."
1202
  msgstr ""
1203
 
1204
+ #: templates/product-popup.php:97
1205
+ msgid "Browse all products."
1206
  msgstr ""
1207
 
1208
+ #: templates/product-popup.php:122 templates/product-popup.php:127
1209
+ msgid "Choose Product"
1210
  msgstr ""
1211
 
1212
+ #: templates/product-popup.php:123 templates/product-popup.php:131
1213
+ msgid "Customize widget"
1214
  msgstr ""
1215
 
1216
+ #: templates/product-popup.php:140
1217
+ msgid "Choose product properties to display in widget"
1218
  msgstr ""
1219
 
1220
+ #: templates/product-popup.php:150
1221
+ msgid "Picture"
1222
+ msgstr ""
1223
+
1224
+ #: templates/product-popup.php:155
1225
+ msgid "Options"
1226
+ msgstr ""
1227
+
1228
+ #: templates/product-popup.php:165
1229
+ msgid "Quantity"
1230
+ msgstr ""
1231
+
1232
+ #: templates/product-popup.php:176
1233
+ msgid "«Buy now» button"
1234
+ msgstr ""
1235
+
1236
+ #: templates/product-popup.php:183 templates/store-popup.php:13
1237
+ #: templates/store-popup.php:31
1238
+ msgid "Appearance"
1239
+ msgstr ""
1240
+
1241
+ #: templates/product-popup.php:196
1242
+ msgid "Add border"
1243
+ msgstr ""
1244
+
1245
+ #: templates/product-popup.php:201
1246
+ msgid "Show price inside the \"Buy now\" button"
1247
+ msgstr ""
1248
+
1249
+ #: templates/product-popup.php:206
1250
+ msgid "Center align on a page"
1251
+ msgstr ""
1252
+
1253
+ #: templates/product-popup.php:218
1254
+ msgid "customize appearance"
1255
+ msgstr ""
1256
+
1257
+ #: templates/product-popup.php:219
1258
+ msgid "select product"
1259
+ msgstr ""
1260
+
1261
+ #: templates/product-popup.php:220
1262
+ msgid "Insert"
1263
+ msgstr ""
1264
+
1265
+ #: templates/reconnect-sso.php:11
1266
+ msgid "Your store Control Panel. Right here in WordPress."
1267
+ msgstr ""
1268
+
1269
+ #: templates/reconnect-sso.php:12
1270
+ msgid ""
1271
+ "Manage products, track sales, adjust settings - <nobr>All without</nobr> "
1272
+ "leaving this page."
1273
+ msgstr ""
1274
+
1275
+ #: templates/reconnect-sso.php:14
1276
+ msgid "Re-connect to Enable Control Panel"
1277
+ msgstr ""
1278
+
1279
+ #: templates/reconnect.php:31
1280
+ msgid ""
1281
+ "Connection error - after clicking button you need to login and accept "
1282
+ "permissions to use our plugin. Please, try again."
1283
+ msgstr ""
1284
+
1285
+ #: templates/reconnect.php:39
1286
+ msgid ""
1287
+ "Looks like your site does not support remote POST requests that are required "
1288
+ "for %s API to work. Please, contact your hosting provider to enable cURL."
1289
+ msgstr ""
1290
+
1291
+ #: templates/store-popup.php:12 templates/store-popup.php:25
1292
+ msgid "Store elements"
1293
+ msgstr ""
1294
+
1295
+ #: templates/store-popup.php:46
1296
  msgid "Choose widgets to show"
1297
  msgstr ""
1298
 
1299
+ #: templates/store-popup.php:47
1300
  msgid "Product catalog will be shown automatically"
1301
  msgstr ""
1302
 
1303
+ #: templates/store-popup.php:52
1304
  msgid "Show search"
1305
  msgstr ""
1306
 
1307
+ #: templates/store-popup.php:59
1308
  msgid "Show minicart"
1309
  msgstr ""
1310
 
1311
+ #: templates/store-popup.php:66
1312
  msgid "Show categories"
1313
  msgstr ""
1314
 
1315
+ #: templates/store-popup.php:72
1316
+ msgid ""
1317
+ "Additionally, you can add store controls to your website's toolbar using <a "
1318
+ "%s>WordPress native widgets</a>"
1319
  msgstr ""
1320
 
1321
+ #: templates/store-popup.php:84
1322
+ msgid "Number of products per page"
1323
+ msgstr ""
1324
+
1325
+ #: templates/store-popup.php:86
1326
+ msgid "Grid view"
1327
+ msgstr ""
1328
+
1329
+ #: templates/store-popup.php:113
1330
+ msgid "List view"
1331
+ msgstr ""
1332
+
1333
+ #: templates/store-popup.php:130
1334
+ msgid "Table view"
1335
+ msgstr ""
1336
+
1337
+ #: templates/store-popup.php:145
1338
+ msgid ""
1339
+ "Here you can control how many products will be displayed per page. These "
1340
+ "options define maximum values. If there is not enough space to show all "
1341
+ "product columns, %s will adapt the number of columns to hold all products."
1342
+ msgstr ""
1343
+
1344
+ #: templates/store-popup.php:180
1345
+ msgid "Number of categories per row"
1346
+ msgstr ""
1347
+
1348
+ #: templates/store-popup.php:193
1349
+ msgid "Default view mode on product pages"
1350
+ msgstr ""
1351
+
1352
+ #: templates/store-popup.php:197 templates/store-popup.php:215
1353
+ msgid "Grid"
1354
+ msgstr ""
1355
+
1356
+ #: templates/store-popup.php:200 templates/store-popup.php:218
1357
+ msgid "List"
1358
+ msgstr ""
1359
+
1360
+ #: templates/store-popup.php:203 templates/store-popup.php:221
1361
+ msgid "Table"
1362
+ msgstr ""
1363
+
1364
+ #: templates/store-popup.php:210
1365
+ msgid "Default view mode on search results"
1366
+ msgstr ""
1367
+
1368
+ #: templates/store-popup.php:233
1369
  msgid "Demo store"
1370
  msgstr ""
1371
 
1372
+ #: templates/store-popup.php:236
1373
+ msgid "Open store dashboard"
1374
+ msgstr ""
1375
+
1376
+ #: templates/store-popup.php:240
1377
+ msgid "Insert into page"
1378
  msgstr ""
1379
 
1380
+ #: templates/store-popup.php:243
1381
+ msgid "Update"
1382
+ msgstr ""
1383
+
1384
+ #: templates/store-svg.php:10
1385
  msgid "Your store will be shown here!"
1386
  msgstr ""
1387
 
1388
+ #: templates/store-svg.php:13
1389
  msgid "Demo Store"
1390
  msgstr ""
1391
 
1392
+ #: templates/sync.php:161
1393
+ msgid ""
1394
+ "To enable this feature, the plugin needs a permission to read your store "
1395
+ "product information."
1396
+ msgstr ""
1397
+
1398
+ #: templates/sync.php:162
1399
+ msgid "Provide access."
1400
+ msgstr ""
1401
+
1402
+ #: templates/sync.php:167 templates/sync.php:168
1403
+ msgid "Synchronize products"
1404
+ msgstr ""
1405
+
1406
+ #: templates/sync.php:175
1407
+ msgid ""
1408
+ "We're synchronizing your products. This may take a few minutes. Please do "
1409
+ "not reload the page."
1410
+ msgstr ""
1411
+
1412
+ #: templates/sync.php:179
1413
+ msgid "Products synchronized: %s out of %s"
1414
+ msgstr ""
1415
+
1416
+ #: templates/sync.php:186
1417
+ msgid ""
1418
+ "Products are successfully synchronized. The product pages are up to date."
1419
  msgstr ""
1420
 
1421
+ #: templates/sync.php:190
1422
+ msgid "Last update"
1423
  msgstr ""
1424
 
1425
+ #: templates/sync.php:193
1426
+ msgid "Not synchronized yet"
1427
  msgstr ""
1428
 
1429
+ #. Plugin Name of the plugin/theme
1430
+ msgid "Ecwid Shopping Cart"
1431
  msgstr ""
1432
 
1433
+ #. #-#-#-#-# ecwid-shopping-cart.pot (Ecwid Shopping Cart 5.4.1) #-#-#-#-#
1434
+ #. Plugin URI of the plugin/theme
1435
+ #. #-#-#-#-# ecwid-shopping-cart.pot (Ecwid Shopping Cart 5.4.1) #-#-#-#-#
1436
+ #. Author URI of the plugin/theme
1437
+ msgid "http://www.ecwid.com?source=wporg"
1438
  msgstr ""
1439
 
1440
+ #. Description of the plugin/theme
1441
+ msgid ""
1442
+ "Ecwid is a free full-featured shopping cart. It can be easily integrated "
1443
+ "with any Wordpress blog and takes less than 5 minutes to set up."
1444
  msgstr ""
1445
 
1446
+ #. Author of the plugin/theme
1447
+ msgid "Ecwid Team"
1448
+ msgstr ""
lib/EcwidCatalog.php DELETED
@@ -1,269 +0,0 @@
1
- <?php
2
-
3
- class EcwidCatalog
4
- {
5
- var $store_id = 0;
6
- var $store_base_url = '';
7
- var $ecwid_api = null;
8
-
9
- function __construct($store_id, $store_base_url)
10
- {
11
- $this->store_id = intval($store_id);
12
- $this->store_base_url = $store_base_url;
13
- $this->ecwid_api = new EcwidProductApi($this->store_id);
14
- }
15
-
16
- function EcwidCatalog($store_id)
17
- {
18
- if(version_compare(PHP_VERSION,"5.0.0","<"))
19
- $this->__construct($store_id);
20
- }
21
-
22
- function _l($code, $indent_change = 0)
23
- {
24
- static $indent = 0;
25
-
26
- if ($indent_change < 0) $indent -= 1;
27
- $str = str_repeat(' ', $indent) . $code . "\n";
28
- if ($indent_change > 0) $indent += 1;
29
-
30
- return $str;
31
- }
32
-
33
- function get_product($id)
34
- {
35
- $params = array
36
- (
37
- array("alias" => "p", "action" => "product", "params" => array("id" => $id)),
38
- array("alias" => "pf", "action" => "profile")
39
- );
40
-
41
- $batch_result = $this->ecwid_api->get_batch_request($params);
42
- $product = $batch_result["p"];
43
- $profile = $batch_result["pf"];
44
-
45
- $return = $this->_l('');
46
-
47
- if (is_array($product))
48
- {
49
-
50
- $return .= $this->_l('<div itemscope itemtype="http://schema.org/Product">', 1);
51
- $return .= $this->_l('<h2 class="ecwid_catalog_product_name" itemprop="name">' . esc_html($product["name"]) . '</h2>');
52
- $return .= $this->_l('<p class="ecwid_catalog_product_sku" itemprop="sku">' . esc_html($product["sku"]) . '</p>');
53
-
54
- if (!empty($product["thumbnailUrl"]))
55
- {
56
- $return .= $this->_l('<div class="ecwid_catalog_product_image">', 1);
57
- $return .= $this->_l(
58
- sprintf(
59
- '<img itemprop="image" src="%s" alt="%s" />',
60
- esc_attr($product['thumbnailUrl']),
61
- esc_attr($product['name'] . ' ' . $product['sku'])
62
- )
63
- );
64
- $return .= $this->_l('</div>', -1);
65
- }
66
-
67
- if(is_array($product["categories"]))
68
- {
69
- foreach ($product["categories"] as $ecwid_category)
70
- {
71
- if($ecwid_category["defaultCategory"] == true)
72
- {
73
- $return .= $this->_l('<div class="ecwid_catalog_product_category">' . esc_html($ecwid_category['name']) . '</div>');
74
- }
75
- }
76
- }
77
-
78
- $return .= $this->_l('<div class="ecwid_catalog_product_price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">', 1);
79
- $return .= $this->_l(__('Price', 'ecwid-shopping-cart') . ': <span itemprop="price">' . esc_html($product["price"]) . '</span>');
80
-
81
- $return .= $this->_l('<span itemprop="priceCurrency">' . esc_html($profile['currency']) . '</span>');
82
- if (!isset($product['quantity']) || (isset($product['quantity']) && $product['quantity'] > 0)) {
83
- $return .= $this->_l('<link itemprop="availability" href="http://schema.org/InStock" />In stock');
84
- }
85
- $return .= $this->_l('</div>', -1);
86
-
87
- $return .= $this->_l('<div class="ecwid_catalog_product_description" itemprop="description">', 1);
88
- $return .= $this->_l($product['description']);
89
- $return .= $this->_l('</div>', -1);
90
-
91
- if (is_array($product['attributes']) && !empty($product['attributes'])) {
92
-
93
- foreach ($product['attributes'] as $attribute) {
94
- if (trim($attribute['value']) != '') {
95
- $return .= $this->_l('<div class="ecwid_catalog_product_attribute">', 1);
96
-
97
- $attr_string = $attribute['name'] . ':';
98
-
99
- if (isset($attribute['internalName']) && $attribute['internalName'] == 'Brand') {
100
- $attr_string .= '<span itemprop="brand">' . $attribute['value'] . '</span>';
101
- } else {
102
- $attr_string .= $attribute['value'];
103
- }
104
-
105
- $return .= $this->_l($attr_string);
106
- $return .= $this->_l('</div>', -1);
107
- }
108
- }
109
- }
110
-
111
- if (is_array($product["options"]))
112
- {
113
- $allowed_types = array('TEXTFIELD', 'DATE', 'TEXTAREA', 'SELECT', 'RADIO', 'CHECKBOX');
114
- foreach($product["options"] as $product_options)
115
- {
116
- if (!in_array($product_options['type'], $allowed_types)) continue;
117
-
118
- $return .= $this->_l('<div class="ecwid_catalog_product_options">', 1);
119
- $return .=$this->_l('<span>' . esc_html($product_options["name"]) . '</span>');
120
-
121
- if($product_options["type"] == "TEXTFIELD" || $product_options["type"] == "DATE")
122
- {
123
- $return .=$this->_l('<input type="text" size="40" name="'. esc_attr($product_options["name"]) . '">');
124
- }
125
- if($product_options["type"] == "TEXTAREA")
126
- {
127
- $return .=$this->_l('<textarea name="' . esc_attr($product_options["name"]) . '></textarea>');
128
- }
129
- if ($product_options["type"] == "SELECT")
130
- {
131
- $return .= $this->_l('<select name='. $product_options["name"].'>', 1);
132
- foreach ($product_options["choices"] as $options_param)
133
- {
134
- $return .= $this->_l(
135
- sprintf(
136
- '<option value="%s">%s (%s)</option>',
137
- esc_attr($options_param['text']),
138
- esc_html($options_param['text']),
139
- esc_html($options_param['priceModifier'])
140
- )
141
- );
142
- }
143
- $return .= $this->_l('</select>', -1);
144
- }
145
- if($product_options["type"] == "RADIO")
146
- {
147
- foreach ($product_options["choices"] as $options_param)
148
- {
149
- $return .= $this->_l(
150
- sprintf(
151
- '<input type="radio" name="%s" value="%s" />%s (%s)',
152
- esc_attr($product_options['name']),
153
- esc_attr($options_param['text']),
154
- esc_html($options_param['text']),
155
- esc_html($options_param['priceModifier'])
156
- )
157
- );
158
- }
159
- }
160
- if($product_options["type"] == "CHECKBOX")
161
- {
162
- foreach ($product_options["choices"] as $options_param)
163
- {
164
- $return .= $this->_l(
165
- sprintf(
166
- '<input type="checkbox" name="%s" value="%s" />%s (%s)',
167
- esc_attr($product_options['name']),
168
- esc_attr($options_param['text']),
169
- esc_html($options_param['text']),
170
- esc_html($options_param['priceModifier'])
171
- )
172
- );
173
- }
174
- }
175
-
176
- $return .= $this->_l('</div>', -1);
177
- }
178
- }
179
-
180
- if (is_array($product["galleryImages"]))
181
- {
182
- foreach ($product["galleryImages"] as $galleryimage)
183
- {
184
- if (empty($galleryimage["alt"])) $galleryimage["alt"] = htmlspecialchars($product["name"]);
185
- $return .= $this->_l(
186
- sprintf(
187
- '<img src="%s" alt="%s" title="%s" />',
188
- esc_attr($galleryimage['url']),
189
- esc_attr($galleryimage['alt']),
190
- esc_attr($galleryimage['alt'])
191
- )
192
- );
193
- }
194
- }
195
-
196
- $return .= $this->_l("</div>", -1);
197
- }
198
-
199
- return $return;
200
- }
201
-
202
- function get_category($id)
203
- {
204
- $params = array
205
- (
206
- array("alias" => "c", "action" => "categories", "params" => array("parent" => $id)),
207
- array("alias" => "p", "action" => "products", "params" => array("category" => $id)),
208
- array("alias" => "pf", "action" => "profile")
209
- );
210
- if ($id > 0) {
211
- $params[] = array('alias' => 'category', "action" => "category", "params" => array("id" => $id));
212
- }
213
-
214
- $batch_result = $this->ecwid_api->get_batch_request($params);
215
-
216
- $category = $id > 0 ? $batch_result['category'] : null;
217
- $categories = $batch_result["c"];
218
- $products = $batch_result["p"];
219
- $profile = $batch_result["pf"];
220
-
221
- $return = $this->_l('');
222
-
223
- if (!is_null($category)) {
224
- $return .= $this->_l('<h2>' . esc_html($category['name']) . '</h2>');
225
- $return .= $this->_l('<div>' . $category['description'] . '</div>');
226
- }
227
-
228
- if (is_array($categories))
229
- {
230
- foreach ($categories as $category)
231
- {
232
- $category_url = ecwid_get_category_url($category);
233
-
234
- $category_name = $category["name"];
235
- $return .= $this->_l('<div class="ecwid_catalog_category_name">', 1);
236
- $return .= $this->_l('<a href="' . esc_attr($category_url) . '">' . esc_html($category_name) . '</a>');
237
- $return .= $this->_l('</div>', -1);
238
- }
239
- }
240
-
241
- if (is_array($products))
242
- {
243
- foreach ($products as $product)
244
- {
245
-
246
- $product_url = ecwid_get_product_url($product);
247
-
248
- $product_name = $product['name'];
249
- $product_price = $product['price'] . ' ' . $profile['currency'];
250
- $return .= $this->_l('<div>', 1);
251
- $return .= $this->_l('<span class="ecwid_product_name">', 1);
252
- $return .= $this->_l('<a href="' . esc_attr($product_url) . '">' . esc_html($product_name) . '</a>');
253
- $return .= $this->_l('</span>', -1);
254
- $return .= $this->_l('<span class="ecwid_product_price">' . esc_html($product_price) . '</span>');
255
- $return .= $this->_l('</div>', -1);
256
- }
257
- }
258
-
259
- return $return;
260
- }
261
-
262
- function build_url($url_from_ecwid)
263
- {
264
- if (preg_match('/(.*)(#!)(.*)/', $url_from_ecwid, $matches))
265
- return $this->store_base_url . $matches[2] . $matches[3];
266
- else
267
- return '';
268
- }
269
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/EcwidSitemapBuilder.php DELETED
@@ -1,85 +0,0 @@
1
- <?php
2
-
3
- require_once dirname(__FILE__) . '/JSONStreamingParser/Listener.php';
4
- require_once dirname(__FILE__) . '/JSONStreamingParser/Parser.php';
5
-
6
-
7
- class EcwidSitemapBuilder implements JsonStreamingParser_Listener {
8
- var $_stack;
9
- var $_key;
10
- var $callback;
11
- var $base_url;
12
- var $api;
13
- var $type;
14
-
15
- public function __construct($base_url, $callback, $api) {
16
- $this->callback = $callback;
17
- $this->base_url = $base_url;
18
- $this->api = $api;
19
- }
20
-
21
- public function generate() {
22
-
23
- foreach (array('products', 'categories') as $type) {
24
- $this->type = $type;
25
- $stream = $this->api->get_method_response_stream($type);
26
- if (!is_null($stream)) {
27
- try {
28
- $parser = new JsonStreamingParser_Parser($stream, $this);
29
- $parser->parse();
30
- } catch (Exception $e) {
31
- fclose($stream);
32
- }
33
- }
34
- }
35
-
36
- return true;
37
- }
38
-
39
- public function file_position($line, $char) {
40
-
41
- }
42
-
43
- public function start_document() {
44
- $this->_stack = array();
45
-
46
- $this->_key = null;
47
- }
48
-
49
- public function end_document() {
50
- }
51
-
52
- public function start_object() {
53
- array_push($this->_stack, array());
54
- }
55
-
56
- public function end_object() {
57
-
58
- $obj = array_pop($this->_stack);
59
- if (is_array($obj) && array_key_exists('url', $obj)) {
60
- $callback = $this->callback;
61
-
62
- $callback(
63
- ecwid_get_entity_url($obj, $this->type == 'products' ? 'p' : 'c'),
64
- $this->type == 'products' ? 0.6 : 0.5,
65
- 'weekly'
66
- );
67
- }
68
- }
69
-
70
- public function start_array() {
71
- }
72
-
73
- public function end_array() {
74
- }
75
-
76
- public function key($key) {
77
- $this->_key = $key;
78
- }
79
-
80
- public function value($value) {
81
- if ($this->_key == 'url') {
82
- $this->_stack[0]['url'] = $value;
83
- }
84
- }
85
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/JSONStreamingParser/LICENSE.txt DELETED
@@ -1,8 +0,0 @@
1
- The MIT License (MIT)
2
- Copyright © 2013 <copyright holders>
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
-
6
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
-
8
- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
 
 
 
 
 
 
lib/JSONStreamingParser/Listener.php DELETED
@@ -1,20 +0,0 @@
1
- <?php
2
- interface JsonStreamingParser_Listener {
3
-
4
- public function file_position($line, $char);
5
-
6
- public function start_document();
7
- public function end_document();
8
-
9
- public function start_object();
10
- public function end_object();
11
-
12
- public function start_array();
13
- public function end_array();
14
-
15
- // Key will always be a string
16
- public function key($key);
17
-
18
- // Note that value may be a string, integer, boolean, array, etc.
19
- public function value($value);
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/JSONStreamingParser/Listener/SubsetConsumer.php DELETED
@@ -1,75 +0,0 @@
1
- <?php
2
-
3
- namespace JsonStreamingParser\Listener;
4
-
5
- abstract class SubsetConsumer implements \JsonStreamingParser_Listener
6
- {
7
- private $keyValueStack;
8
- private $key;
9
-
10
- /**
11
- * @param mixed $data
12
- * @return boolean if data was consumed and can be discarded
13
- */
14
- abstract protected function consume($data);
15
-
16
- public function file_position($line, $char) {
17
-
18
- }
19
-
20
- public function start_document()
21
- {
22
- $this->keyValueStack = array();
23
- }
24
-
25
- public function end_document()
26
- {
27
- }
28
-
29
- public function start_object()
30
- {
31
- array_push($this->keyValueStack, is_null($this->key) ? array(array()) : array($this->key => array()));
32
- $this->key = null;
33
- }
34
-
35
- public function end_object()
36
- {
37
- $keyValue = array_pop($this->keyValueStack);
38
- $obj = reset($keyValue);
39
- $this->key = key($keyValue);
40
- $hasBeenConsumed = $this->consume($obj);
41
-
42
- if (!empty($this->keyValueStack)) {
43
- $this->value($hasBeenConsumed ? '*consumed*' : $obj);
44
- }
45
-
46
- }
47
-
48
- public function start_array()
49
- {
50
- $this->start_object();
51
- }
52
-
53
- public function end_array()
54
- {
55
- $this->end_object();
56
- }
57
-
58
- public function key($key)
59
- {
60
- $this->key = $key;
61
- }
62
-
63
- public function value($value)
64
- {
65
- $keyValue = array_pop($this->keyValueStack);
66
- $objKey = key($keyValue);
67
-
68
- if ($this->key) {
69
- $keyValue[$objKey][$this->key] = $value;
70
- } else {
71
- array_push($keyValue[$objKey], $value);
72
- }
73
- array_push($this->keyValueStack, $keyValue);
74
- }
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/JSONStreamingParser/Parser.php DELETED
@@ -1,493 +0,0 @@
1
- <?php
2
- require_once 'ParsingError.php';
3
- require_once 'Listener.php';
4
-
5
- class JsonStreamingParser_Parser {
6
- private $_state;
7
- const STATE_START_DOCUMENT = 0;
8
- const STATE_DONE = -1;
9
- const STATE_IN_ARRAY = 1;
10
- const STATE_IN_OBJECT = 2;
11
- const STATE_END_KEY = 3;
12
- const STATE_AFTER_KEY = 4;
13
- const STATE_IN_STRING = 5;
14
- const STATE_START_ESCAPE = 6;
15
- const STATE_UNICODE = 7;
16
- const STATE_IN_NUMBER = 8;
17
- const STATE_IN_TRUE = 9;
18
- const STATE_IN_FALSE = 10;
19
- const STATE_IN_NULL = 11;
20
- const STATE_AFTER_VALUE = 12;
21
-
22
- const STACK_OBJECT = 0;
23
- const STACK_ARRAY = 1;
24
- const STACK_KEY = 2;
25
- const STACK_STRING = 3;
26
- private $_stack;
27
-
28
- private $_stream;
29
-
30
- /**
31
- * @var JsonStreamingParser_Listener
32
- */
33
- private $_listener;
34
-
35
- private $_buffer;
36
- private $_buffer_size;
37
- private $_unicode_buffer;
38
- private $_unicode_high_codepoint;
39
- private $_line_ending;
40
-
41
- private $_line_number;
42
- private $_char_number;
43
-
44
-
45
- public function __construct($stream, $listener, $line_ending = "\n") {
46
- if (!is_resource($stream) || get_resource_type($stream) != 'stream') {
47
- throw new InvalidArgumentException("Argument is not a stream");
48
- }
49
- if (!in_array("JsonStreamingParser_Listener", class_implements(get_class($listener)))) {
50
- throw new InvalidArgumentException("Listener must implement JsonStreamingParser_Listener");
51
- }
52
-
53
- $this->_stream = $stream;
54
- $this->_listener = $listener;
55
-
56
- $this->_state = self::STATE_START_DOCUMENT;
57
- $this->_stack = array();
58
-
59
- $this->_buffer = '';
60
- $this->_buffer_size = 8192;
61
- $this->_unicode_buffer = array();
62
- $this->_unicode_high_codepoint = -1;
63
- $this->_line_ending = $line_ending;
64
- }
65
-
66
-
67
- public function parse() {
68
- $this->_line_number = 1;
69
- $this->_char_number = 1;
70
-
71
- while (!feof($this->_stream)) {
72
- $pos = ftell($this->_stream);
73
- $line = stream_get_line($this->_stream, $this->_buffer_size, $this->_line_ending);
74
- $ended = (bool)(ftell($this->_stream) - strlen($line) - $pos);
75
-
76
- $byteLen = strlen($line);
77
- for ($i = 0; $i < $byteLen; $i++) {
78
- $this->_listener->file_position($this->_line_number, $this->_char_number);
79
- $this->_consume_char($line[$i]);
80
- $this->_char_number++;
81
- }
82
-
83
- if ($ended) {
84
- $this->_line_number++;
85
- $this->_char_number = 1;
86
- }
87
-
88
- }
89
- }
90
-
91
- private function _consume_char($c) {
92
- // valid whitespace characters in JSON (from RFC4627 for JSON) include:
93
- // space, horizontal tab, line feed or new line, and carriage return.
94
- // thanks: http://stackoverflow.com/questions/16042274/definition-of-whitespace-in-json
95
- if (($c === " " || $c === "\t" || $c === "\n" || $c === "\r") &&
96
- !($this->_state === self::STATE_IN_STRING ||
97
- $this->_state === self::STATE_UNICODE ||
98
- $this->_state === self::STATE_START_ESCAPE ||
99
- $this->_state === self::STATE_IN_NUMBER ||
100
- $this->_state === self::STATE_START_DOCUMENT)) {
101
- return;
102
- }
103
-
104
- switch ($this->_state) {
105
-
106
- case self::STATE_START_DOCUMENT:
107
- $this->_listener->start_document();
108
- if ($c === '[') {
109
- $this->_start_array();
110
- } elseif ($c === '{') {
111
- $this->_start_object();
112
- } else {
113
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
114
- "Document must start with object or array.");
115
- }
116
- break;
117
-
118
- case self::STATE_IN_ARRAY:
119
- if ($c === ']') {
120
- $this->_end_array();
121
- } else {
122
- $this->_start_value($c);
123
- }
124
- break;
125
-
126
- case self::STATE_IN_OBJECT:
127
- if ($c === '}') {
128
- $this->_end_object();
129
- } elseif ($c === '"') {
130
- $this->_start_key();
131
- } else {
132
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
133
- "Start of string expected for object key. Instead got: ".$c);
134
- }
135
- break;
136
-
137
- case self::STATE_END_KEY:
138
- if ($c !== ':') {
139
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
140
- "Expected ':' after key.");
141
- }
142
- $this->_state = self::STATE_AFTER_KEY;
143
- break;
144
-
145
- case self::STATE_AFTER_KEY:
146
- $this->_start_value($c);
147
- break;
148
-
149
- case self::STATE_IN_STRING:
150
- if ($c === '"') {
151
- $this->_end_string();
152
- } elseif ($c === '\\') {
153
- $this->_state = self::STATE_START_ESCAPE;
154
- } elseif (($c < "\x1f") || ($c === "\x7f")) {
155
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
156
- "Unescaped control character encountered: ".$c);
157
- } else {
158
- $this->_buffer .= $c;
159
- }
160
- break;
161
-
162
- case self::STATE_START_ESCAPE:
163
- $this->_process_escape_character($c);
164
- break;
165
-
166
- case self::STATE_UNICODE:
167
- $this->_process_unicode_character($c);
168
- break;
169
-
170
- case self::STATE_AFTER_VALUE:
171
- $within = end($this->_stack);
172
- if ($within === self::STACK_OBJECT) {
173
- if ($c === '}') {
174
- $this->_end_object();
175
- } elseif ($c === ',') {
176
- $this->_state = self::STATE_IN_OBJECT;
177
- } else {
178
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
179
- "Expected ',' or '}' while parsing object. Got: ".$c);
180
- }
181
- } elseif ($within === self::STACK_ARRAY) {
182
- if ($c === ']') {
183
- $this->_end_array();
184
- } elseif ($c === ',') {
185
- $this->_state = self::STATE_IN_ARRAY;
186
- } else {
187
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
188
- "Expected ',' or ']' while parsing array. Got: ".$c);
189
- }
190
- } else {
191
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
192
- "Finished a literal, but unclear what state to move to. Last state: ".$within);
193
- }
194
- break;
195
-
196
- case self::STATE_IN_NUMBER:
197
- if (preg_match('/\d/', $c)) {
198
- $this->_buffer .= $c;
199
- } elseif ($c === '.') {
200
- if (strpos($this->_buffer, '.') !== false) {
201
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
202
- "Cannot have multiple decimal points in a number.");
203
- } elseif (stripos($this->_buffer, 'e') !== false) {
204
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
205
- "Cannot have a decimal point in an exponent.");
206
- }
207
- $this->_buffer .= $c;
208
- } elseif ($c === 'e' || $c === 'E') {
209
- if (stripos($this->_buffer, 'e') !== false) {
210
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
211
- "Cannot have multiple exponents in a number.");
212
- }
213
- $this->_buffer .= $c;
214
- } elseif ($c === '+' || $c === '-') {
215
- $last = mb_substr($this->_buffer, -1);
216
- if (!($last === 'e' || $last === 'E')) {
217
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
218
- "Can only have '+' or '-' after the 'e' or 'E' in a number.");
219
- }
220
- $this->_buffer .= $c;
221
- } else {
222
- $this->_end_number();
223
- // we have consumed one beyond the end of the number
224
- $this->_consume_char($c);
225
- }
226
- break;
227
-
228
- case self::STATE_IN_TRUE:
229
- $this->_buffer .= $c;
230
- if (mb_strlen($this->_buffer) === 4) {
231
- $this->_end_true();
232
- }
233
- break;
234
-
235
- case self::STATE_IN_FALSE:
236
- $this->_buffer .= $c;
237
- if (mb_strlen($this->_buffer) === 5) {
238
- $this->_end_false();
239
- }
240
- break;
241
-
242
- case self::STATE_IN_NULL:
243
- $this->_buffer .= $c;
244
- if (mb_strlen($this->_buffer) === 4) {
245
- $this->_end_null();
246
- }
247
- break;
248
-
249
- case self::STATE_DONE:
250
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
251
- "Expected end of document.");
252
-
253
- default:
254
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
255
- "Internal error. Reached an unknown state: ".$this->_state);
256
- }
257
- }
258
-
259
- private function _is_hex_character($c) {
260
- return preg_match('/[0-9a-fA-F]/u', $c);
261
- }
262
-
263
- // Thanks: http://stackoverflow.com/questions/1805802/php-convert-unicode-codepoint-to-utf-8
264
- private function _convert_codepoint_to_character($num) {
265
- if($num<=0x7F) return chr($num);
266
- if($num<=0x7FF) return chr(($num>>6)+192).chr(($num&63)+128);
267
- if($num<=0xFFFF) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
268
- if($num<=0x1FFFFF) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128);
269
- return '';
270
- }
271
-
272
- private function _is_digit($c) {
273
- // Only concerned with the first character in a number.
274
- return preg_match('/[0-9]|-/u',$c);
275
- }
276
-
277
-
278
- private function _start_value($c) {
279
- if ($c === '[') {
280
- $this->_start_array();
281
- } elseif ($c === '{') {
282
- $this->_start_object();
283
- } elseif ($c === '"') {
284
- $this->_start_string();
285
- } elseif ($this->_is_digit($c)) {
286
- $this->_start_number($c);
287
- } elseif ($c === 't') {
288
- $this->_state = self::STATE_IN_TRUE;
289
- $this->_buffer .= $c;
290
- } elseif ($c === 'f') {
291
- $this->_state = self::STATE_IN_FALSE;
292
- $this->_buffer .= $c;
293
- } elseif ($c === 'n') {
294
- $this->_state = self::STATE_IN_NULL;
295
- $this->_buffer .= $c;
296
- } else {
297
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
298
- "Unexpected character for value: ".$c);
299
- }
300
- }
301
-
302
-
303
- private function _start_array() {
304
- $this->_listener->start_array();
305
- $this->_state = self::STATE_IN_ARRAY;
306
- array_push($this->_stack, self::STACK_ARRAY);
307
- }
308
-
309
- private function _end_array() {
310
- $popped = array_pop($this->_stack);
311
- if ($popped !== self::STACK_ARRAY) {
312
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
313
- "Unexpected end of array encountered.");
314
- }
315
- $this->_listener->end_array();
316
- $this->_state = self::STATE_AFTER_VALUE;
317
-
318
- if (empty($this->_stack)) {
319
- $this->_end_document();
320
- }
321
- }
322
-
323
-
324
- private function _start_object() {
325
- $this->_listener->start_object();
326
- $this->_state = self::STATE_IN_OBJECT;
327
- array_push($this->_stack, self::STACK_OBJECT);
328
- }
329
-
330
- private function _end_object() {
331
- $popped = array_pop($this->_stack);
332
- if ($popped !== self::STACK_OBJECT) {
333
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
334
- "Unexpected end of object encountered.");
335
- }
336
- $this->_listener->end_object();
337
- $this->_state = self::STATE_AFTER_VALUE;
338
-
339
- if (empty($this->_stack)) {
340
- $this->_end_document();
341
- }
342
- }
343
-
344
- private function _start_string() {
345
- array_push($this->_stack, self::STACK_STRING);
346
- $this->_state = self::STATE_IN_STRING;
347
- }
348
-
349
- private function _start_key() {
350
- array_push($this->_stack, self::STACK_KEY);
351
- $this->_state = self::STATE_IN_STRING;
352
- }
353
-
354
- private function _end_string() {
355
- $popped = array_pop($this->_stack);
356
- if ($popped === self::STACK_KEY) {
357
- $this->_listener->key($this->_buffer);
358
- $this->_state = self::STATE_END_KEY;
359
- } elseif ($popped === self::STACK_STRING) {
360
- $this->_listener->value($this->_buffer);
361
- $this->_state = self::STATE_AFTER_VALUE;
362
- } else {
363
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
364
- "Unexpected end of string.");
365
- }
366
- $this->_buffer = '';
367
- }
368
-
369
- private function _process_escape_character($c) {
370
- if ($c === '"') {
371
- $this->_buffer .= '"';
372
- } elseif ($c === '\\') {
373
- $this->_buffer .= '\\';
374
- } elseif ($c === '/') {
375
- $this->_buffer .= '/';
376
- } elseif ($c === 'b') {
377
- $this->_buffer .= "\x08";
378
- } elseif ($c === 'f') {
379
- $this->_buffer .= "\f";
380
- } elseif ($c === 'n') {
381
- $this->_buffer .= "\n";
382
- } elseif ($c === 'r') {
383
- $this->_buffer .= "\r";
384
- } elseif ($c === 't') {
385
- $this->_buffer .= "\t";
386
- } elseif ($c === 'u') {
387
- $this->_state = self::STATE_UNICODE;
388
- } else {
389
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
390
- "Expected escaped character after backslash. Got: ".$c);
391
- }
392
-
393
- if ($this->_state !== self::STATE_UNICODE) {
394
- $this->_state = self::STATE_IN_STRING;
395
- }
396
- }
397
-
398
- private function _process_unicode_character($c) {
399
- if (!$this->_is_hex_character($c)) {
400
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
401
- "Expected hex character for escaped unicode character. Unicode parsed: " . implode($this->_unicode_buffer) . " and got: ".$c);
402
- }
403
- array_push($this->_unicode_buffer, $c);
404
- if (count($this->_unicode_buffer) === 4) {
405
- $codepoint = hexdec(implode($this->_unicode_buffer));
406
-
407
- if ($codepoint >= 0xD800 && $codepoint < 0xDC00) {
408
- $this->_unicode_high_codepoint = $codepoint;
409
- $this->_unicode_buffer = array();
410
- } elseif ($codepoint >= 0xDC00 && $codepoint <= 0xDFFF) {
411
- if ($this->_unicode_high_codepoint === -1) {
412
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
413
- "Missing high codepoint for unicode low codepoint.");
414
- }
415
- $combined_codepoint = (($this->_unicode_high_codepoint - 0xD800) * 0x400) + ($codepoint - 0xDC00) + 0x10000;
416
-
417
- $this->_end_unicode_character($combined_codepoint);
418
- } else {
419
- $this->_end_unicode_character($codepoint);
420
- }
421
- }
422
- }
423
-
424
- private function _end_unicode_character($codepoint) {
425
- $this->_buffer .= $this->_convert_codepoint_to_character($codepoint);
426
- $this->_unicode_buffer = array();
427
- $this->_unicode_high_codepoint = -1;
428
- $this->_state = self::STATE_IN_STRING;
429
- }
430
-
431
-
432
- private function _start_number($c) {
433
- $this->_state = self::STATE_IN_NUMBER;
434
- $this->_buffer .= $c;
435
- }
436
-
437
- private function _end_number() {
438
- $num = $this->_buffer;
439
- if (preg_match('/\./', $num)) {
440
- $num = (float)($num);
441
- } else {
442
- $num = (int)($num);
443
- }
444
- $this->_listener->value($num);
445
-
446
- $this->_buffer = '';
447
- $this->_state = self::STATE_AFTER_VALUE;
448
- }
449
-
450
-
451
- private function _end_true() {
452
- $true = $this->_buffer;
453
- if ($true === 'true') {
454
- $this->_listener->value(true);
455
- } else {
456
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
457
- "Expected 'true'. Got: ".$true);
458
- }
459
- $this->_buffer = '';
460
- $this->_state = self::STATE_AFTER_VALUE;
461
- }
462
-
463
- private function _end_false() {
464
- $false = $this->_buffer;
465
- if ($false === 'false') {
466
- $this->_listener->value(false);
467
- } else {
468
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
469
- "Expected 'false'. Got: ".$false);
470
- }
471
- $this->_buffer = '';
472
- $this->_state = self::STATE_AFTER_VALUE;
473
- }
474
-
475
- private function _end_null() {
476
- $null = $this->_buffer;
477
- if ($null === 'null') {
478
- $this->_listener->value(null);
479
- } else {
480
- throw new JsonStreamingParser_ParsingError($this->_line_number, $this->_char_number,
481
- "Expected 'null'. Got: ".$null);
482
- }
483
- $this->_buffer = '';
484
- $this->_state = self::STATE_AFTER_VALUE;
485
- }
486
-
487
-
488
- private function _end_document() {
489
- $this->_listener->end_document();
490
- $this->_state = self::STATE_DONE;
491
- }
492
-
493
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/JSONStreamingParser/ParsingError.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
- class JsonStreamingParser_ParsingError extends Exception {
3
-
4
- /**
5
- * @param int $line
6
- * @param int $char
7
- * @param string $message
8
- */
9
- public function __construct($line, $char, $message) {
10
- parent::__construct("Parsing error in [$line:$char]. " . $message);
11
- }
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
lib/class-ecwid-message-manager.php DELETED
@@ -1,236 +0,0 @@
1
- <?php
2
-
3
- class Ecwid_Message_Manager
4
- {
5
- protected $messages = array();
6
-
7
- protected function Ecwid_Message_Manager()
8
- {
9
- $this->init_messages();
10
- }
11
-
12
- public static function show_messages()
13
- {
14
- $mm = self::get_instance();
15
-
16
- foreach ($mm->messages as $name => $message) {
17
- if ($mm->need_to_show_message($name)) {
18
- $mm->show_message($name);
19
- }
20
- }
21
- }
22
-
23
- public static function show_message($name, $params = array())
24
- {
25
- $mm = self::get_instance();
26
-
27
- $mm->need_to_show_message($name);
28
-
29
- if (!isset($mm->messages[$name]) && empty($params)) {
30
- trigger_error('Ecwid plugin error: unknown message ' . $name);
31
- return;
32
- }
33
-
34
- $params = $mm->get_message_params($name, $params);
35
-
36
- $type = $params['type'];
37
-
38
- $title = $params['title'];
39
- $message = $params['message'];
40
-
41
- $primary_button = isset($params['primary_title']);
42
- if ($primary_button) {
43
- $primary_title = $params['primary_title'];
44
- $primary_url = $params['primary_url'];
45
- $primary_blank = @$params['primary_blank'];
46
- }
47
- $secondary_button = isset($params['secondary_title']);
48
- if ($secondary_button) {
49
- $secondary_title = $params['secondary_title'];
50
- $secondary_url = $params['secondary_url'];
51
- $secondary_blank = $params['secondary_blank'];
52
- }
53
-
54
- $do_not_show_again = true == $params['hideable'];
55
-
56
- include ECWID_PLUGIN_DIR . '/templates/admin-message.php';
57
- }
58
-
59
- public static function disable_message($name)
60
- {
61
- $messages = get_option('ecwid_disabled_messages');
62
- $messages[$name] = true;
63
-
64
- update_option('ecwid_disabled_messages', $messages);
65
- }
66
-
67
- public static function enable_message($name)
68
- {
69
- $messages = get_option('ecwid_disabled_messages');
70
- if (isset($messages['name']))
71
- unset($messages['name']);
72
-
73
- update_option('ecwid_disabled_messages', $messages);
74
- }
75
-
76
- public static function reset_hidden_messages()
77
- {
78
- $hidden_messages = array();
79
-
80
- $messages = self::get_default_messages();
81
- foreach ($messages as $name => $message) {
82
- if (isset($message['default']) && $message['default'] == 'hidden') {
83
- $hidden_messages[$name] = true;
84
- }
85
- }
86
-
87
- update_option('ecwid_disabled_messages', array());
88
- }
89
-
90
- protected static function get_instance()
91
- {
92
- static $instance = null;
93
-
94
- if (is_null($instance)) {
95
- $instance = new Ecwid_Message_Manager();
96
- }
97
-
98
- return $instance;
99
- }
100
-
101
- protected function init_messages()
102
- {
103
- $this->messages = $this->get_default_messages();
104
-
105
- $hidden_messages = get_option('ecwid_disabled_messages');
106
-
107
- if ( !empty( $hidden_messages ) ) {
108
- foreach ($hidden_messages as $name => $message) {
109
- unset ($this->messages[$name]);
110
- }
111
- }
112
- }
113
-
114
- protected function get_message_params($name, $params)
115
- {
116
- if (is_array($name)) {
117
- $params = $name;
118
- $name = '';
119
- }
120
-
121
- if (isset($this->messages[$name])) {
122
- $params = array_merge(
123
- array('type' => 'info', 'title' => '', 'message' => '', 'hideable' => false),
124
- $this->messages[$name],
125
- $params
126
- );
127
- }
128
-
129
- if ($name == 'on_storeid_set') {
130
- $params['primary_url'] = ecwid_get_store_page_url();
131
- }
132
-
133
- $types_map = array(
134
- 'info' => 'updated',
135
- 'warning' => 'update-nag',
136
- 'error' => 'error'
137
- );
138
- $params['type'] = $types_map[$params['type']];
139
-
140
- return $params;
141
- }
142
-
143
- protected function get_default_messages()
144
- {
145
- return array(
146
- 'on_activate' => array(
147
- 'title' => __('Greetings! Your Ecwid store is now active.', 'ecwid-shopping-cart'),
148
- 'message' => __('Take a few simple steps to complete store setup', 'ecwid-shopping-cart'),
149
- 'primary_title' => __('Set up Ecwid Store', 'ecwid-shopping-cart'),
150
- 'primary_url' => 'admin.php?page=ecwid',
151
- 'hideable' => true,
152
- 'default' => 'disabled'
153
- ),
154
-
155
- 'on_storeid_set' => array(
156
- 'title' => __('Good job! Your store is set up and you\'re ready to sell.', 'ecwid-shopping-cart'),
157
- 'message' => __('Now you can fine-tune your store\'s appearance', 'ecwid-shopping-cart'),
158
- 'primary_title' => __('Visit Storefront', 'ecwid-shopping-cart'),
159
- 'primary_url' => '',
160
- 'primary_blank' => true,
161
- 'secondary_title' => __('Configure Appearance', 'ecwid-shopping-cart'),
162
- 'secondary_url' => 'admin.php?page=ecwid-appearance',
163
- 'hideable' => true
164
- ),
165
-
166
- 'no_storeid_on_setup_pages' => array(
167
- 'type' => 'warning',
168
- 'title' => __('Your store is almost ready!', 'ecwid-shopping-cart' ),
169
- 'message' => __('Connect your Ecwid account with this site to complete setup and start selling', 'ecwid-shopping-cart' ),
170
- 'primary_title' => __('Connect Your Ecwid Store', 'ecwid-shopping-cart' ),
171
- 'primary_url' => 'admin.php?page=ecwid',
172
- 'hideable' => true
173
- ),
174
-
175
- 'on_appearance_widgets' => array(
176
- 'message' => __('To add extra functions to your store, drag and drop Ecwid store elements on your site. When you\'re done, you can get back to modifying your settings.', 'ecwid-shopping-cart' ),
177
- 'secondary_title' => __('Back to Store Settings', 'ecwid-shopping-cart'),
178
- 'secondary_url' => 'admin.php?page=ecwid-appearance',
179
- 'hideable' => true
180
- ),
181
-
182
- 'please_vote' => array(
183
- 'message' => sprintf(
184
- __('Do you like your Ecwid online store? We\'d appreciate it if you add your review and vote for the plugin on Wordpress site.', 'ecwid-shopping-cart'),
185
- 'target="_blank" href="http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart"'
186
- ),
187
- 'primary_title' => __('Rate Ecwid at WordPress.org', 'ecwid-shopping-cart'),
188
- 'primary_url' => 'http://wordpress.org/support/view/plugin-reviews/ecwid-shopping-cart',
189
- 'hideable' => true
190
- )
191
- );
192
- }
193
-
194
- protected function need_to_show_message($name)
195
- {
196
- $admin_page = '';
197
- if (function_exists('get_current_screen')) {
198
- $screen = get_current_screen();
199
- $admin_page = $screen->base;
200
- }
201
-
202
- switch ($name) {
203
- case 'on_activate':
204
- return $admin_page == 'plugins' && get_ecwid_store_id() == ECWID_DEMO_STORE_ID;
205
-
206
- case 'on_storeid_set':
207
- return get_ecwid_store_id() != ECWID_DEMO_STORE_ID && $_GET['settings-updated'] == 'true' && $admin_page == 'toplevel_page_ecwid';
208
-
209
- case 'no_storeid_on_setup_pages':
210
- return get_ecwid_store_id() == ECWID_DEMO_STORE_ID
211
- && in_array($admin_page, array('ecwid-store_page_ecwid-advanced', 'ecwid-store_page_ecwid-appearance'));
212
-
213
- case 'on_appearance_widgets':
214
- return isset($_GET['from-ecwid-appearance']) && $admin_page == 'widgets';
215
-
216
- case 'please_vote':
217
- $install_date = get_option('ecwid_installation_date');
218
-
219
- $result = false;
220
- if (!$install_date) {
221
- add_option('ecwid_installation_date', time());
222
- } else {
223
- $result = ecwid_is_paid_account() && $install_date + 60*60*24*30 < time();
224
- }
225
-
226
- foreach ($this->messages as $_name => $message) {
227
- if ($_name != $name && $this->need_to_show_message($_name)) {
228
- return false;
229
- }
230
- }
231
-
232
- return $result;
233
- }
234
- }
235
-
236
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/class-ecwid-theme-manager.php DELETED
@@ -1,173 +0,0 @@
1
- <?php
2
-
3
- class Ecwid_Theme_Manager
4
- {
5
- protected $themes_map = array();
6
-
7
- protected $current_theme = '';
8
-
9
- protected $theme_name = '';
10
-
11
- public function Ecwid_Theme_Manager()
12
- {
13
- $this->init_themes_map();
14
- $this->detect_current_theme();
15
-
16
- add_filter('ecwid_minicart_shortcode_content', array($this, 'minicart_shortcode_content'));
17
- add_filter('ecwid_categories_shortcode_content', array($this, 'categories_shortcode_content'));
18
- add_filter('ecwid_search_shortcode_content', array($this, 'search_shortcode_content'));
19
- }
20
-
21
- public static function get_instance()
22
- {
23
- static $instance = null;
24
-
25
- if (is_null($instance)) {
26
- $instance = new Ecwid_Theme_Manager();
27
- }
28
-
29
- return $instance;
30
- }
31
-
32
- public function get_theme_name()
33
- {
34
- return $this->theme_name;
35
- }
36
-
37
- public function apply_adjustments()
38
- {
39
- if ( empty( $this->themes ) ) {
40
- return;
41
- }
42
-
43
- if ($this->theme_needs_scrolling_adjustment()) {
44
- wp_enqueue_script(
45
- 'ecwid-scroller',
46
- plugins_url( 'ecwid-shopping-cart/js/create_scroller.js' ),
47
- array( 'jquery' )
48
- );
49
- }
50
-
51
- if ( !array_key_exists( $this->current_theme, $this->themes ) ) {
52
- return;
53
- }
54
-
55
- $theme_data = $this->themes[$this->current_theme];
56
-
57
- if ( $theme_data['callback'] ) {
58
- $method = 'apply_theme_' . $this->current_theme;
59
- return $this->$method();
60
- }
61
-
62
- wp_enqueue_style(
63
- 'ecwid-theme-css',
64
- plugins_url( 'ecwid-shopping-cart/css/themes/' . $this->current_theme . '.css' ),
65
- isset( $theme_data['base_css'] ) ? array( $theme_data['base_css'] ) : array(),
66
- false,
67
- 'all'
68
- );
69
-
70
- if ( $theme_data['js'] ) {
71
- wp_enqueue_script(
72
- 'ecwid-theme-js',
73
- plugins_url( 'ecwid-shopping-cart/js/themes/' . $this->current_theme . '.js' ),
74
- array( 'jquery' )
75
- );
76
- }
77
- }
78
-
79
- public function minicart_shortcode_content($content)
80
- {
81
- return $content;
82
-
83
- if ($this->current_theme == 'responsive' && get_option('ecwid_enable_advanced_theme_layout') == 'Y' && get_the_ID() == get_option('ecwid_store_page_id')) {
84
- $content = '<script type="text/javascript"> xMinicart("style=","layout=Mini"); </script>';
85
- }
86
- }
87
-
88
- public function categories_shortcode_content($content)
89
- {
90
- return $content;
91
- }
92
-
93
- public function search_shortcode_content($content)
94
- {
95
- return $content;
96
- }
97
-
98
- public function has_advanced_layout()
99
- {
100
- return false;
101
-
102
- return $this->current_theme == 'responsive';
103
- }
104
-
105
- protected function detect_current_theme()
106
- {
107
- $version = get_bloginfo('version');
108
-
109
- if (version_compare( $version, '3.4' ) < 0) {
110
- $this->theme_name = get_current_theme();
111
- } else {
112
- $theme = wp_get_theme();
113
- $this->theme_name = $theme->get('Name');
114
- }
115
-
116
- foreach ( $this->themes as $internal_name => $theme ) {
117
- if ( $this->theme_name == $theme['name'] ) {
118
- $this->current_theme = $internal_name;
119
- break;
120
- }
121
- }
122
- }
123
-
124
- protected function init_themes_map()
125
- {
126
- $this->themes = array(
127
-
128
- '2014' => array(
129
- 'name' => 'Twenty Fourteen',
130
- 'base_css' => 'twentyfourteen-style',
131
- 'js' => false,
132
- ),
133
- 'pagelines' => array(
134
- 'name' => 'PageLines',
135
- 'base_css' => '',
136
- 'js' => true,
137
- ),
138
- 'responsive' => array(
139
- 'name' => 'Responsive'
140
- )
141
- );
142
- }
143
-
144
- protected function theme_needs_scrolling_adjustment() {
145
- return in_array( $this->current_theme, array( '2014', 'pagelines' ) );
146
- }
147
-
148
- protected function __apply_theme_responsive()
149
- {
150
- wp_enqueue_style( 'ecwid-open-sans-css' , 'http://fonts.googleapis.com/css?family=Open+Sans:400,700&subset=latin,cyrillic-ext,cyrillic,greek-ext,vietnamese,greek,latin-ext');
151
- wp_enqueue_style( 'dashicons' );
152
- wp_enqueue_style( 'ecwid-theme-fixes-css' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive-fixes.css' ), array(), false, 'all' );
153
- if (get_option('ecwid_enable_advanced_theme_layout') == 'Y') {
154
- wp_enqueue_style( 'ecwid-theme-adjustments-css' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive-adjustments.css' ), array(), false, 'all' );
155
- wp_enqueue_script( 'ecwid-theme-js', plugins_url( 'ecwid-shopping-cart/js/themes/responsive.js' ), array( 'jquery' ), false, true );
156
- }
157
-
158
- add_filter('body_class', array($this, 'body_class_responsive'));
159
- }
160
-
161
- public function body_class_responsive($classes)
162
- {
163
- if (get_option('ecwid_enable_minicart')) {
164
- $classes[] = 'ecwid-with-minicart';
165
- }
166
-
167
- if (get_option('ecwid_show_search_box')) {
168
- $classes[] = 'ecwid-with-search';
169
- }
170
-
171
- return $classes;
172
- }
173
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/ecwid_api_v3.php CHANGED
@@ -169,7 +169,7 @@ class Ecwid_Api_V3
169
 
170
  public function search_products($input_params) {
171
  $params = array('token');
172
- $passthru = array( 'updatedFrom', 'offset', 'limit', 'sortBy', 'keyword', 'baseUrl', 'cleanUrls', 'category' );
173
  foreach ($passthru as $name) {
174
  if ( array_key_exists( $name, $input_params ) ) {
175
  $params[$name] = (string)$input_params[$name];
@@ -197,17 +197,17 @@ class Ecwid_Api_V3
197
  }
198
 
199
  EcwidPlatform::store_in_products_cache( $url, $result );
200
- }
201
-
202
 
203
- $result = json_decode($result['data']);
204
-
205
- if ( !empty( $result->items ) ) {
206
- foreach ( $result->items as $item ) {
207
- Ecwid_Product::from_stdclass( $item );
208
  }
 
209
  }
210
 
 
 
211
  return $result;
212
  }
213
 
169
 
170
  public function search_products($input_params) {
171
  $params = array('token');
172
+ $passthru = array( 'updatedFrom', 'offset', 'limit', 'sortBy', 'keyword', 'baseUrl', 'cleanUrls', 'category', 'productId' );
173
  foreach ($passthru as $name) {
174
  if ( array_key_exists( $name, $input_params ) ) {
175
  $params[$name] = (string)$input_params[$name];
197
  }
198
 
199
  EcwidPlatform::store_in_products_cache( $url, $result );
 
 
200
 
201
+ if ( !empty( $result->items ) ) {
202
+ foreach ( $result->items as $item ) {
203
+ Ecwid_Product::init_from_stdclass( $item );
204
+ }
 
205
  }
206
+
207
  }
208
 
209
+ $result = json_decode($result['data']);
210
+
211
  return $result;
212
  }
213
 
lib/ecwid_catalog_entry.php CHANGED
@@ -66,18 +66,22 @@ abstract class Ecwid_Catalog_Entry {
66
  }
67
 
68
 
69
- public function get_seo_link( $baseUrl = false )
70
  {
71
  if ( isset( $this->_data->seo_link ) ) {
72
  return $this->_data->seo_link;
73
- } else if ( $this->_data->id && $this->_data->name ) {
74
 
75
  if ( !$baseUrl ) {
76
  $baseUrl = Ecwid_Store_Page::get_store_url();
77
  }
78
  $url = $baseUrl;
79
-
80
- $url .= '/' . urlencode( $this->_data->name ) . '-' . $this->_link_prefix . $this->_data->id;
 
 
 
 
81
 
82
  return $url;
83
  }
66
  }
67
 
68
 
69
+ public function get_seo_link( $baseUrl = '' )
70
  {
71
  if ( isset( $this->_data->seo_link ) ) {
72
  return $this->_data->seo_link;
73
+ } else if ( $this->_data->id && isset($this->_data->name) ) {
74
 
75
  if ( !$baseUrl ) {
76
  $baseUrl = Ecwid_Store_Page::get_store_url();
77
  }
78
  $url = $baseUrl;
79
+
80
+ if ($url && strlen($url) > 0 && strrpos($url, '/') != strlen($url) - 1) {
81
+ $url .= '/';
82
+ }
83
+
84
+ $url .= urlencode( $this->_data->name ) . '-' . $this->_link_prefix . $this->_data->id;
85
 
86
  return $url;
87
  }
lib/ecwid_category.php CHANGED
@@ -37,11 +37,11 @@ class Ecwid_Category extends Ecwid_Catalog_Entry
37
  public static function get_by_id( $id )
38
  {
39
  $e = new Ecwid_Category();
40
-
41
- if ( $e->_get_from_local_object_cache($id) ) {
42
- return $e->_get_from_local_object_cache($id);
43
  }
44
-
45
  $entry_data = $e->_get_from_cache( $id );
46
 
47
  if ( !$entry_data ) {
37
  public static function get_by_id( $id )
38
  {
39
  $e = new Ecwid_Category();
40
+
41
+ if ( $cat = $e->_get_from_local_object_cache($id) ) {
42
+ return $cat;
43
  }
44
+
45
  $entry_data = $e->_get_from_cache( $id );
46
 
47
  if ( !$entry_data ) {
lib/ecwid_product.php CHANGED
@@ -28,50 +28,80 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
28
  return new Ecwid_Category();
29
  }
30
 
31
- public static function from_stdclass( $data ) {
32
-
33
- $entry = new Ecwid_Product();
34
-
35
- $entry->_init_from_stdclass( $data );
36
-
37
- $entry->_put_into_local_object_cache( $entry );
38
- }
39
-
40
  public static function get_by_id( $id )
41
  {
42
- if ( $product = self::_get_from_local_object_cache($id) ) {
 
 
 
43
  return $product;
44
  }
45
-
46
- $p = new Ecwid_Product();
47
-
48
  $product_data = $p->_get_from_cache( $id );
49
 
50
  if ( !$product_data ) {
51
  $p->_load($id);
52
  } else {
53
- $p->_init_from_stdclass($product_data);
54
  }
55
 
56
- self::_put_into_local_object_cache($p);
 
 
57
 
58
  return $p;
59
  }
60
 
61
- protected function _get_from_cache( $id ) {
62
- return EcwidPlatform::get_from_products_cache( $this->_get_cache_key_by_id( $id ) );
63
- }
64
-
65
- protected function _init_from_stdclass( $data )
66
  {
67
- $this->_data = $data;
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
- EcwidPlatform::store_in_products_cache(
70
- $this->_get_cache_key_by_id( $data->id ),
71
- $data
72
- );
 
 
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  protected function _load($id) {
77
 
@@ -89,9 +119,20 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
89
  }
90
 
91
  if ($data) {
92
- $this->_init_from_stdclass( $data );
93
  }
94
 
95
  return $data;
96
  }
 
 
 
 
 
 
 
 
 
 
 
97
  }
28
  return new Ecwid_Category();
29
  }
30
 
 
 
 
 
 
 
 
 
 
31
  public static function get_by_id( $id )
32
  {
33
+
34
+ $p = new Ecwid_Product();
35
+
36
+ if ( $product = $p->_get_from_local_object_cache($id) ) {
37
  return $product;
38
  }
39
+
 
 
40
  $product_data = $p->_get_from_cache( $id );
41
 
42
  if ( !$product_data ) {
43
  $p->_load($id);
44
  } else {
45
+ $p->_data = $product_data;
46
  }
47
 
48
+ $p->_put_into_local_object_cache($p);
49
+
50
+ $p->_persist();
51
 
52
  return $p;
53
  }
54
 
55
+ public static function get_without_loading($id, $fallback_object = null)
 
 
 
 
56
  {
57
+ $p = new Ecwid_Product();
58
+
59
+ if ( $product = $p->_get_from_local_object_cache($id) ) {
60
+ return $product;
61
+ }
62
+
63
+ $product_data = $p->_get_from_cache( $id );
64
+ if (!$product_data) {
65
+ if ($fallback_object) {
66
+ $product_data = $fallback_object;
67
+ } else {
68
+ $product_data = new stdClass();
69
+ }
70
 
71
+ $product_data->id = $id;
72
+ }
73
+
74
+ $p->_data = $product_data;
75
+
76
+ return $p;
77
  }
78
 
79
+ public static function init_from_stdclass( $data )
80
+ {
81
+ $p = new Ecwid_Product();
82
+ $p->_data = $data;
83
+
84
+ $p->_persist();
85
+
86
+ return $p;
87
+ }
88
+
89
+ public static function load_by_ids($ids)
90
+ {
91
+ if ( !is_array( $ids ) || empty( $ids ) || !Ecwid_Api_V3::is_available() ) {
92
+ return;
93
+ }
94
+
95
+ $ids_string = implode( ',', $ids );
96
+
97
+ $api = new Ecwid_Api_V3();
98
+
99
+ $api->search_products( array( 'productId' => $ids_string ) );
100
+ }
101
+
102
+ protected function _get_from_cache( $id ) {
103
+ return EcwidPlatform::get_from_products_cache( $this->_get_cache_key_by_id( $id ) );
104
+ }
105
 
106
  protected function _load($id) {
107
 
119
  }
120
 
121
  if ($data) {
122
+ $this->_data = $data;
123
  }
124
 
125
  return $data;
126
  }
127
+
128
+ protected function _persist() {
129
+
130
+ if ( !property_exists($this->_data, 'id') ) {
131
+ return;
132
+ }
133
+ EcwidPlatform::store_in_products_cache(
134
+ $this->_get_cache_key_by_id( $this->_data->id ),
135
+ $this->_data
136
+ );
137
+ }
138
  }
lib/html-catalog-templates/product.php CHANGED
@@ -76,6 +76,6 @@
76
  <?php endforeach;
77
  endif; ?>
78
  <?php if ( $product->galleryImages ) foreach ( $product->galleryImages as $image):
79
- ?><img src="<?php echo EcwidPlatform::esc_attr( $image->url ); ?>" alt="<?php echo EcwidPlatform::esc_attr( $image->alt ? $image->alt : $product->name ); ?>" />
80
  <?php endforeach; ?>
81
  </div>
76
  <?php endforeach;
77
  endif; ?>
78
  <?php if ( $product->galleryImages ) foreach ( $product->galleryImages as $image):
79
+ ?><img src="<?php echo EcwidPlatform::esc_attr( $image->url ); ?>" alt="<?php echo EcwidPlatform::esc_attr( isset( $image->alt ) ? $image->alt : $product->name ); ?>" />
80
  <?php endforeach; ?>
81
  </div>
lib/themes.php DELETED
@@ -1,58 +0,0 @@
1
- <?php
2
-
3
- define( 'ECWID_THEMES_DIR', ECWID_PLUGIN_DIR . '/lib/themes' );
4
-
5
- add_action('after_switch_theme', 'ecwid_after_switch_theme');
6
-
7
- function ecwid_get_theme_name()
8
- {
9
- $version = get_bloginfo('version');
10
-
11
- if (version_compare( $version, '3.4' ) < 0) {
12
- $theme_name = get_current_theme();
13
- } else {
14
- $theme = wp_get_theme();
15
- $theme_name = $theme->get('Name');
16
- }
17
-
18
- return $theme_name;
19
- }
20
-
21
- function ecwid_apply_theme($theme_name = null)
22
- {
23
- $themes = array(
24
- 'Bretheon' => 'bretheon',
25
- 'Responsive' => 'responsive',
26
- 'Twenty Fourteen' => '2014',
27
- 'PageLines' => 'pagelines'
28
- );
29
-
30
- if (empty($theme_name)) {
31
- $theme_name = ecwid_get_theme_name();
32
- }
33
-
34
- $theme_file = '';
35
-
36
- if (array_key_exists($theme_name, $themes)) {
37
-
38
- $theme_file = ECWID_THEMES_DIR . '/class-ecwid-theme-' . $themes[$theme_name] . '.php';
39
- }
40
-
41
- $theme_file = apply_filters( 'ecwid_get_theme_file', $theme_file );
42
-
43
- if ( !empty( $theme_file ) && is_file( $theme_file ) && is_readable( $theme_file ) ) {
44
- require_once( $theme_file );
45
- }
46
- }
47
-
48
- function ecwid_after_switch_theme()
49
- {
50
- ecwid_apply_theme();
51
-
52
- global $ecwid_current_theme;
53
-
54
- update_option(
55
- 'ecwid_advanced_theme_layout',
56
- isset($ecwid_current_theme) && $ecwid_current_theme->has_advanced_layout ? 'Y' : 'N'
57
- );
58
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/themes/class-ecwid-theme-2014.php DELETED
@@ -1,21 +0,0 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_2014 extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Twenty Fourteen';
8
-
9
- protected $adjust_pb_scroll = true;
10
-
11
- public function __construct()
12
- {
13
- parent::__construct();
14
-
15
- if (ecwid_page_has_productbrowser()) {
16
- wp_enqueue_style( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/css/themes/2014.css' ), array('twentyfourteen-style') );
17
- }
18
- }
19
- }
20
-
21
- $ecwid_current_theme = new Ecwid_Theme_2014();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/themes/class-ecwid-theme-base.php DELETED
@@ -1,24 +0,0 @@
1
- <?php
2
-
3
- class Ecwid_Theme_Base {
4
-
5
- public $has_advanced_layout = false;
6
-
7
- protected $adjust_pb_scroll = false;
8
-
9
- public function __construct()
10
- {
11
- if ( $this->adjust_pb_scroll ) {
12
- wp_enqueue_script(
13
- 'ecwid-scroller',
14
- plugins_url( 'ecwid-shopping-cart/js/create_scroller.js' ),
15
- array( 'jquery' )
16
- );
17
- }
18
- }
19
-
20
- protected function need_advanced_layout()
21
- {
22
- return get_option('ecwid_advanced_theme_layout') == 'Y';
23
- }
24
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/themes/class-ecwid-theme-bretheon.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Bretheon extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Bretheon';
8
-
9
- public function __construct()
10
- {
11
- parent::__construct();
12
-
13
- add_filter( 'ecwid_page_has_product_browser', array( $this, 'has_product_browser' ) );
14
- }
15
-
16
- public function has_product_browser( $value )
17
- {
18
- if ( $value ) {
19
- return $value;
20
- }
21
-
22
- $meta = get_post_meta( get_the_ID(), 'mfn-page-items' );
23
- if ( is_array( $meta ) ) {
24
- $meta = base64_decode( $meta[0] );
25
-
26
- // not exactly the intended usage, but quite simple and still works
27
- // $meta is a serialized array that has the actual content
28
- // a right way is to walk through the structure and run has_shortcode against all fields
29
- $result = has_shortcode( $meta, 'ecwid_productbrowser' );
30
- }
31
-
32
- return $result;
33
- }
34
- }
35
-
36
- $ecwid_current_theme = new Ecwid_Theme_Bretheon();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/themes/class-ecwid-theme-pagelines.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Pagelines extends Ecwid_Theme_Base
6
- {
7
- protected $name = 'Pagelines';
8
-
9
- protected $adjust_pb_scroll = true;
10
-
11
- public function __construct()
12
- {
13
- parent::__construct();
14
-
15
- wp_enqueue_script( 'ecwid-theme-js', plugins_url( 'ecwid-shopping-cart/js/themes/pagelines.js' ), array( 'jquery' ), false, true );
16
- }
17
- }
18
-
19
- $ecwid_current_theme = new Ecwid_Theme_Pagelines();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/themes/class-ecwid-theme-responsive.php DELETED
@@ -1,56 +0,0 @@
1
- <?php
2
-
3
- require_once ECWID_THEMES_DIR . '/class-ecwid-theme-base.php';
4
-
5
- class Ecwid_Theme_Responsive extends Ecwid_Theme_Base
6
- {
7
- public $has_advanced_layout = true;
8
-
9
- public function __construct()
10
- {
11
- parent::__construct();
12
-
13
- if ( $this->need_advanced_layout() ) {
14
- wp_enqueue_style( 'ecwid-theme-adjustments' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive-adjustments.css' ), array(), false, 'all' );
15
- wp_enqueue_script( 'ecwid-theme', plugins_url( 'ecwid-shopping-cart/js/themes/responsive.js' ), array( 'jquery' ), false, true );
16
-
17
- add_filter( 'ecwid_minicart_shortcode_content', array( $this, 'minicart_shortcode_content' ) );
18
- }
19
-
20
- wp_enqueue_style( 'ecwid-open-sans' , 'http://fonts.googleapis.com/css?family=Open+Sans:400,700&subset=latin,cyrillic-ext,cyrillic,greek-ext,vietnamese,greek,latin-ext');
21
- wp_enqueue_style( 'dashicons' );
22
- wp_enqueue_style( 'ecwid-theme-fixes' , plugins_url( 'ecwid-shopping-cart/css/themes/responsive.css' ), array(), false, 'all' );
23
-
24
- add_filter('body_class', array($this, 'body_class'));
25
-
26
- add_action('ecwid_store_page_created', array($this, 'on_create_store_page'));
27
- add_action('switch_theme', array($this, 'switch_theme'));
28
- }
29
-
30
- public function minicart_shortcode_content( $content )
31
- {
32
-
33
- if ( get_the_ID() == get_option( 'ecwid_store_page_id' ) ) {
34
- $content = '<script type="text/javascript"> xMinicart("style=","layout=Mini"); </script>';
35
- }
36
-
37
- return $content;
38
- }
39
-
40
- public function body_class($classes)
41
- {
42
- if (get_option('ecwid_show_search_box')) {
43
- $classes[] = 'ecwid-with-search';
44
- }
45
-
46
- return $classes;
47
- }
48
-
49
- public function on_create_store_page($page_id)
50
- {
51
- update_post_meta($page_id, '_wp_page_template', 'full-width-page.php');
52
- }
53
- }
54
-
55
- global $ecwid_current_theme;
56
- $ecwid_current_theme = new Ecwid_Theme_Responsive();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Ecwid
3
  Tags: ecommerce, downloadable products, Facebook ecommerce, online store, paypal, product catalog, shop, shopping cart, store
4
  Requires at least: 3.5
5
  Tested up to: 4.8
6
- Stable tag: 5.4.1
7
 
8
  Powerful, easy to use ecommerce shopping cart. Bank level PCI DSS Level 1 security. iPhone & Android apps. Superb support. Free plan available.
9
 
@@ -149,6 +149,14 @@ You can use Ecwid’s built-in import tools to copy your store products from any
149
  * [Ecwid eCommerce Forums](https://www.ecwid.com/forums/forumdisplay.php?f=19)
150
 
151
  == Changelog ==
 
 
 
 
 
 
 
 
152
  = 5.4.1 =
153
  - Fixed an issue with the store page loading in the newest version 5.4. In some rare occasions, the store page might not display right after update to the version 5.4. We fixed the issue to make sure all stores are working well.
154
  - Added a workaround for a conflict with the third party “Product Advisor for Ecwid” plugin. The “Product Advisor” plugin has a bug that prevents it from working correctly with the newest versions of the Ecwid plugin. When the Product advisor plugin is enabled, the site pages do not respond. We added a workaround to the Ecwid plugin to make sure the WP admin pages will work well for the “Product advisor”. So, if you’re using the “Product advisor” plugin and see any issue with your site now, please disable that plugin in your WP admin backend. We’re speaking with the author of the Product advisor plugin so there will hopefully be a solution soon.
3
  Tags: ecommerce, downloadable products, Facebook ecommerce, online store, paypal, product catalog, shop, shopping cart, store
4
  Requires at least: 3.5
5
  Tested up to: 4.8
6
+ Stable tag: 5.4.2
7
 
8
  Powerful, easy to use ecommerce shopping cart. Bank level PCI DSS Level 1 security. iPhone & Android apps. Superb support. Free plan available.
9
 
149
  * [Ecwid eCommerce Forums](https://www.ecwid.com/forums/forumdisplay.php?f=19)
150
 
151
  == Changelog ==
152
+ = 5.4.2 =
153
+ - **Loading speed optimization for the Single Product widgets.** We continue working on improving the Ecwid ecommerce plugin loading speed. This update includes optimization of single product widgets. The optimization should have especially good effect if you added multiple single product widgets on a page (e.g. for creating a featured slider or a customized products grid).
154
+ - **The Recently Viewed Products widget is also optimized.** It now works much faster. If you haven’t used the widget before, feel free to enable it under Appearance -> Widgets.
155
+ - **The legacy “Appearance” settings page is removed from the plugin admin menu.** The old “Appearance” settings page was removed from the plugin settings navigation. To configure the product catalog settings (displayed widgets, products per page etc), you can open your store page for editing in the WordPress admin backend and click the “Edit appearance” button there. If you don’t have a store on the page, click the “Add store” button in the page editor and set the appearance settings there — they will be applied to your store on that page.
156
+ - **Fixed “Strict standards” code notices.** Some users may discover this notice on their site, if the debugging messages are not disabled in the Wordpress installation. That didn’t affect the store functionality, but looked odd. We fixed that — there should not be any warning messages displayed now.
157
+ - Minor fixes and improvements.
158
+
159
+
160
  = 5.4.1 =
161
  - Fixed an issue with the store page loading in the newest version 5.4. In some rare occasions, the store page might not display right after update to the version 5.4. We fixed the issue to make sure all stores are working well.
162
  - Added a workaround for a conflict with the third party “Product Advisor for Ecwid” plugin. The “Product Advisor” plugin has a bug that prevents it from working correctly with the newest versions of the Ecwid plugin. When the Product advisor plugin is enabled, the site pages do not respond. We added a workaround to the Ecwid plugin to make sure the WP admin pages will work well for the “Product advisor”. So, if you’re using the “Product advisor” plugin and see any issue with your site now, please disable that plugin in your WP admin backend. We’re speaking with the author of the Product advisor plugin so there will hopefully be a solution soon.
templates/advanced-settings.php CHANGED
@@ -48,37 +48,7 @@
48
 
49
  <hr />
50
  <?php endif; ?>
51
-
52
-
53
- <?php if (get_option('ecwid_hide_appearance_menu') != 'Y'): ?>
54
- <div class="pure-control-group bottom-border">
55
-
56
- <label for="ecwid_default_category_id">
57
- <?php _e('Category shown by default', 'ecwid-shopping-cart'); ?>
58
- </label>
59
-
60
- <select name="ecwid_default_category_id" id="ecwid_default_category_id">
61
- <option value=""><?php _e('Store root category', 'ecwid-shopping-cart'); ?></option>
62
- <?php foreach ($categories as $category): ?>
63
- <option
64
- value="<?php echo esc_attr($category->id); ?>"
65
- <?php if ($category->id == get_option('ecwid_default_category_id')): ?>
66
- selected="selected"
67
- <?php endif; ?>
68
- >
69
- <?php echo esc_html($category->path); ?>
70
- </option>
71
- <?php endforeach; ?>
72
- </select>
73
- <div class="note">
74
- <?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'); ?>
75
- </div>
76
- </div>
77
-
78
- <hr />
79
-
80
- <?php endif; ?>
81
-
82
  <div class="pure-control-group checkbox">
83
  <div class="label">
84
  <label for="ecwid_is_sso_enabled" class="premium-feature">
48
 
49
  <hr />
50
  <?php endif; ?>
51
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  <div class="pure-control-group checkbox">
53
  <div class="label">
54
  <label for="ecwid_is_sso_enabled" class="premium-feature">
templates/appearance-settings.php DELETED
@@ -1,222 +0,0 @@
1
- <h2><?php printf( __( '%s Shopping Cart — Appearance settings', 'ecwid-shopping-cart'), Ecwid_Config::get_brand() ); ?></h2>
2
-
3
- <div class="wrap">
4
- <form class="pure-form pure-form-aligned ecwid-settings appearance-settings" method="POST" action="options.php">
5
-
6
- <?php settings_fields('ecwid_options_page'); ?>
7
- <input type="hidden" name="settings_section" value="appearance" />
8
-
9
- <fieldset>
10
-
11
- <div class="pure-control-group small-input">
12
- <div class="input">
13
- <div>
14
- <input
15
- id="ecwid_show_search_box"
16
- name="ecwid_show_search_box"
17
- type="checkbox"
18
- <?php if (get_option('ecwid_show_search_box')): ?>
19
- checked="checked"
20
- <?php endif; ?>
21
- <?php echo $disabled_str; ?>
22
- />
23
- </div>
24
- </div>
25
- <div class="label">
26
- <label for="ecwid_show_search_box">
27
- <?php _e('Display search box above products', 'ecwid-shopping-cart'); ?>
28
- </label>
29
- </div>
30
- <div class="note">
31
- <?php echo sprintf(__('Or you can add search box to your website\'s toolbar using <a href="%s">WordPress native widgets</a>', 'ecwid-shopping-cart'), 'widgets.php?from-ecwid=appearance'); ?>
32
- </div>
33
- </div>
34
-
35
- <div class="pure-control-group small-input">
36
- <div class="input">
37
- <div>
38
- <input
39
- id="ecwid_show_categories"
40
- name="ecwid_show_categories"
41
- type="checkbox"
42
- <?php if (get_option('ecwid_show_categories')): ?>
43
- checked="checked"
44
- <?php endif; ?>
45
- <?php echo $disabled_str; ?>
46
- />
47
- </div>
48
- </div>
49
- <div class="label">
50
- <label for="ecwid_show_categories">
51
- <?php _e('Display categories above products', 'ecwid-shopping-cart'); ?>
52
- </label>
53
- </div>
54
- <div class="note">
55
- <?php echo sprintf(__('Or you can add vertical categories to your website\'s toolbar using <a href="%s">WordPress native widgets</a>', 'ecwid-shopping-cart'), 'widgets.php?from-ec-store=appearance'); ?>
56
- </div>
57
- </div>
58
-
59
-
60
- <div class="pure-control-group small-input">
61
- <div class="input">
62
- <div>
63
- <input
64
- id="ecwid_enable_minicart"
65
- name="ecwid_enable_minicart"
66
- type="checkbox"
67
- <?php if (get_option('ecwid_enable_minicart')): ?>
68
- checked="checked"
69
- <?php endif; ?>
70
- <?php echo $disabled_str; ?>
71
- />
72
- </div>
73
- </div>
74
- <div class="label">
75
- <label for="ecwid_enable_minicart">
76
- <?php _e('Enable minicart attached to categories', 'ecwid-shopping-cart'); ?>
77
- </label>
78
- </div>
79
- <div class="note">
80
- <?php _e("You should disable this option, if you added minicart to your website's&nbsp;sidebar", 'ecwid-shopping-cart'); ?>
81
- </div>
82
- </div>
83
-
84
- <div class="pure-control-group small-input">
85
- <div class="input">
86
- <div>
87
- <input
88
- id="ecwid_pb_categoriesperrow"
89
- name="ecwid_pb_categoriesperrow"
90
- type="text"
91
- class="number"
92
- value="<?php echo esc_attr(get_option('ecwid_pb_categoriesperrow')); ?>"
93
- <?php echo $disabled_str; ?>
94
- />
95
- </div>
96
- </div>
97
- <div class="label">
98
- <label for="ecwid_pb_categoriesperrow">
99
- <?php _e('Number of categories per row', 'ecwid-shopping-cart'); ?>
100
- </label>
101
- </div>
102
- <div class="note">
103
- </div>
104
- </div>
105
-
106
- <hr />
107
-
108
-
109
- <div class="pure-control-group">
110
- <label class="products-per-page-label"><?php _e('Number of products per page', 'ecwid-shopping-cart'); ?></label>
111
- <div class="ecwid-pb-view-size grid active" tabindex="1">
112
- <div class="title"><?php _e('Grid view', 'ecwid-shopping-cart'); ?></div>
113
- <div class="main-area">
114
- <?php ecwid_embed_svg('grid'); ?>
115
- </div>
116
- <div class="right">
117
- <div class="ruler"></div>
118
- <input
119
- type="text"
120
- size="2"
121
- name="ecwid_pb_productspercolumn_grid"
122
- class="number"
123
- value="<?php echo esc_attr(get_option('ecwid_pb_productspercolumn_grid')); ?>"
124
- />
125
- </div>
126
- <div class="bottom">
127
- <div class="ruler"></div>
128
- <input
129
- type="text"
130
- size="2"
131
- name="ecwid_pb_productsperrow_grid"
132
- class="number"
133
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperrow_grid')); ?>"
134
- />
135
- </div>
136
- </div>
137
-
138
- <div class="ecwid-pb-view-size list" tabindex="1">
139
- <div class="title"><?php _e('List view', 'ecwid-shopping-cart'); ?></div>
140
- <div class="main-area">
141
- <?php ecwid_embed_svg('list'); ?>
142
- </div>
143
- <div class="right">
144
- <div class="ruler"></div>
145
- <input
146
- type="text"
147
- size="2"
148
- name="ecwid_pb_productsperpage_list"
149
- class="number"
150
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_list')); ?>" />
151
- </div>
152
- </div>
153
-
154
-
155
- <div class="ecwid-pb-view-size table" tabindex="1">
156
- <div class="title"><?php _e('Table view', 'ecwid-shopping-cart'); ?></div>
157
- <div class="main-area">
158
- <?php ecwid_embed_svg('table'); ?>
159
- </div>
160
- <div class="right">
161
- <div class="ruler"></div>
162
- <input
163
- type="text"
164
- size="2"
165
- name="ecwid_pb_productsperpage_table"
166
- class="number"
167
- value="<?php echo esc_attr(get_option('ecwid_pb_productsperpage_table')); ?>"
168
- />
169
- </div>
170
- </div>
171
- <p class="note pb-note"><?php printf( __( '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, %s will adapt the number of columns to hold all products.', 'ecwid-shopping-cart'), Ecwid_Config::get_brand() ); ?></p>
172
- </div>
173
-
174
- <hr />
175
-
176
- <div class="pure-control-group">
177
- <label for="ecwid_pb_defaultview">
178
- <?php _e('Default view mode on product pages', 'ecwid-shopping-cart'); ?>
179
- </label>
180
-
181
- <select id="ecwid_pb_defaultview" name="ecwid_pb_defaultview" $disabled_str>
182
- <option value="grid" <?php if(get_option('ecwid_pb_defaultview') == 'grid') echo 'selected="selected"' ?> >
183
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
184
- </option>
185
- <option value="list" <?php if(get_option('ecwid_pb_defaultview') == 'list') echo 'selected="selected"' ?> >
186
- <?php _e('List', 'ecwid-shopping-cart'); ?>
187
- </option>
188
- <option value="table" <?php if(get_option('ecwid_pb_defaultview') == 'table') echo 'selected="selected"' ?> >
189
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
190
- </option>
191
- </select>
192
- </div>
193
-
194
- <div class="pure-control-group">
195
- <label for="ecwid_pb_searchview">
196
- <?php _e('Default view mode on search results', 'ecwid-shopping-cart'); ?>
197
- </label>
198
-
199
- <select id="ecwid_pb_searchview" name="ecwid_pb_searchview" $disabled_str>
200
- <option value="grid" <?php if(get_option('ecwid_pb_searchview') == 'grid') echo 'selected="selected"' ?> >
201
- <?php _e('Grid', 'ecwid-shopping-cart'); ?>
202
- </option>
203
- <option value="list" <?php if(get_option('ecwid_pb_searchview') == 'list') echo 'selected="selected"' ?> >
204
- <?php _e('List', 'ecwid-shopping-cart'); ?>
205
- </option>
206
- <option value="table" <?php if(get_option('ecwid_pb_searchview') == 'table') echo 'selected="selected"' ?> >
207
- <?php _e('Table', 'ecwid-shopping-cart'); ?>
208
- </option>
209
- </select>
210
- </div>
211
-
212
- </fieldset>
213
-
214
- <fieldset>
215
- <hr />
216
- <div class="pure-control-group">
217
- <button type="submit" class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>"><?php _e('Save changes', 'ecwid-shopping-cart'); ?></button>
218
- </div>
219
- </fieldset>
220
- </form>
221
-
222
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/general-settings-initial.php DELETED
@@ -1,75 +0,0 @@
1
- <div class="wrap">
2
-
3
- <form method="POST" action="options.php" class="pure-form ecwid-settings general-settings">
4
- <h2><?php _e('Ecwid Shopping Cart — General settings', 'ecwid-shopping-cart'); ?></h2>
5
- <?php settings_fields('ecwid_options_page'); ?>
6
- <fieldset>
7
-
8
- <input type="hidden" name="settings_section" value="general" />
9
-
10
- <div class="greeting-box">
11
-
12
- <div class="image-container">
13
- <img class="greeting-image" src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
14
- </div>
15
-
16
- <div class="messages-container">
17
- <div class="main-message">
18
-
19
- <?php _e('Thank you for choosing Ecwid to build your online store', 'ecwid-shopping-cart'); ?>
20
- </div>
21
- <div class="secondary-message">
22
- <?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'); ?>
23
- </div>
24
- </div>
25
-
26
- </div>
27
- <hr />
28
-
29
- <ol>
30
- <li>
31
- <h4><?php _e('Register at Ecwid', 'ecwid-shopping-cart'); ?></h4>
32
- <div>
33
- <?php _e('Create a new Ecwid account which you will use to manage your store and inventory. The registration is free.', 'ecwid-shopping-cart'); ?>
34
- </div>
35
- <div class="ecwid-account-buttons">
36
- <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#register">
37
- <?php _e('Create new Ecwid account', 'ecwid-shopping-cart'); ?>
38
- </a>
39
- <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
40
- <?php _e('I already have Ecwid account, sign in', 'ecwid-shopping-cart'); ?>
41
- </a>
42
- </div>
43
- <div class="note">
44
- <?php _e('You will be able to sign up through your existing Google, Facebook or PayPal profiles as well.', 'ecwid-shopping-cart'); ?>
45
- </div>
46
- </li>
47
- <li>
48
- <h4><?php _e('Find your Store ID', 'ecwid-shopping-cart'); ?></h4>
49
- <div>
50
- <?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'); ?>
51
- </div>
52
- </li>
53
- <li>
54
- <h4>
55
- <?php _e('Enter your Store ID', 'ecwid-shopping-cart'); ?>
56
- </h4>
57
- <div><label for="ecwid_store_id"><?php _e('Enter your Store ID here:', 'ecwid-shopping-cart'); ?></label></div>
58
- <div class="pure-control-group store-id">
59
- <input
60
- id="ecwid_store_id"
61
- name="ecwid_store_id"
62
- type="text"
63
- placeholder="<?php _e('Store ID', 'ecwid-shopping-cart'); ?>"
64
- value="<?php if (get_ecwid_store_id() != 1003) echo esc_attr(get_ecwid_store_id()); ?>"
65
- />
66
- <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>
67
- </div>
68
-
69
- </li>
70
- </ol>
71
- <hr />
72
- <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>', 'ecwid-shopping-cart'); ?></p>
73
- </fieldset>
74
- </form>
75
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/general-settings.php DELETED
@@ -1,75 +0,0 @@
1
- <div class="wrap">
2
-
3
- <form method="POST" action="options.php" class="pure-form ecwid-settings general-settings" name="settings">
4
- <h2><?php _e('Ecwid Shopping Cart — General settings', 'ecwid-shopping-cart'); ?></h2>
5
- <?php settings_fields('ecwid_options_page'); ?>
6
- <fieldset>
7
-
8
- <input type="hidden" name="settings_section" value="general" />
9
-
10
- <div class="greeting-box complete">
11
- <div class="image-container">
12
- <img class="greeting-image" src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_ready.png" width="142" />
13
- </div>
14
-
15
- <div class="messages-container">
16
- <?php if (array_key_exists('settings-updated', $_GET)): ?>
17
-
18
- <div class="main-message"><?php _e('Congratulations!', 'ecwid-shopping-cart'); ?></div>
19
- <div class="secondary-message"?><?php _e('Your Ecwid store is now connected to your WordPress website', 'ecwid-shopping-cart'); ?></div>
20
-
21
- <?php else: ?>
22
-
23
- <div class="main-message"><?php _e('Greetings!', 'ecwid-shopping-cart'); ?></div>
24
- <div class="secondary-message"?><?php _e('Your Ecwid store is connected to your WordPress website', 'ecwid-shopping-cart'); ?></div>
25
- <?php endif; ?>
26
- </div>
27
- </div>
28
- <hr />
29
- <div class="section">
30
- <div class="left">
31
- <span class="main-info">
32
- <?php _e('Store ID', 'ecwid-shopping-cart'); ?>: <strong><?php echo esc_attr(get_ecwid_store_id()); ?></strong>
33
- </span>
34
- </div>
35
- <div class="right two-buttons">
36
- <a class="pure-button" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
37
- <?php _e('Control panel', 'ecwid-shopping-cart'); ?>
38
- </a>
39
- <a class="pure-button" target="_blank" href="<?php echo esc_attr(get_page_link(get_option('ecwid_store_page_id'))); ?>">
40
- <?php _e('Visit storefront', 'ecwid-shopping-cart'); ?>
41
- </a>
42
- </div>
43
- </div>
44
-
45
- <?php if (!ecwid_is_paid_account()): ?>
46
- <div class="section account-section">
47
- <div class="left">
48
- <div class="secondary-info">
49
- <?php _e('Upgrade your account to get access to more Ecwid plugin features', 'ecwid-shopping-cart'); ?>
50
- </div>
51
- </div>
52
-
53
- <div class="right">
54
- <a class="<?php echo ECWID_MAIN_BUTTON_CLASS; ?>" target="_blank" href="http://www.ecwid.com/plans-and-pricing.html">
55
- <?php _e('Upgrade', 'ecwid-shopping-cart'); ?>
56
- </a>
57
- </div>
58
- </div>
59
- <?php endif; ?>
60
-
61
- <div class="note grayed-links">
62
- <?php
63
- echo sprintf(
64
- __('If you want to connect another Ecwid store, you can <a %s>disconnect the current one and change Store ID</a>.', 'ecwid-shopping-cart'),
65
- 'href="#" onClick="javascript:document.forms[\'settings\'].submit(); return false;"'
66
- );
67
- ?>
68
-
69
- </div>
70
-
71
- <hr />
72
- <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>', 'ecwid-shopping-cart'); ?></p>
73
- </fieldset>
74
- </form>
75
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/setup.php DELETED
@@ -1,75 +0,0 @@
1
- <div class="wrap">
2
-
3
- <form method="POST" action="options.php" class="pure-form ecwid-settings general-settings">
4
- <h2><?php _e('Ecwid Shopping Cart — Connect', 'ecwid-shopping-cart'); ?></h2>
5
- <?php settings_fields('ecwid_options_page'); ?>
6
- <fieldset>
7
-
8
- <input type="hidden" name="settings_section" value="general" />
9
-
10
- <div class="greeting-box">
11
-
12
- <div class="image-container">
13
- <img class="greeting-image" src="<?php echo(esc_attr(ECWID_PLUGIN_URL)); ?>/images/store_inprogress.png" width="142" />
14
- </div>
15
-
16
- <div class="messages-container">
17
- <div class="main-message">
18
-
19
- <?php _e('Thank you for choosing Ecwid to build your online store', 'ecwid-shopping-cart'); ?>
20
- </div>
21
- <div class="secondary-message">
22
- <?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'); ?>
23
- </div>
24
- </div>
25
-
26
- </div>
27
- <hr />
28
-
29
- <ol>
30
- <li>
31
- <h4><?php _e('Register at Ecwid', 'ecwid-shopping-cart'); ?></h4>
32
- <div>
33
- <?php _e('Create a new Ecwid account which you will use to manage your store and inventory. The registration is free.', 'ecwid-shopping-cart'); ?>
34
- </div>
35
- <div class="ecwid-account-buttons">
36
- <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#register">
37
- <?php _e('Create new Ecwid account', 'ecwid-shopping-cart'); ?>
38
- </a>
39
- <a class="pure-button pure-button-secondary" target="_blank" href="https://my.ecwid.com/cp/?source=wporg#t1=&t2=Dashboard">
40
- <?php _e('I already have Ecwid account, sign in', 'ecwid-shopping-cart'); ?>
41
- </a>
42
- </div>
43
- <div class="note">
44
- <?php _e('You will be able to sign up through your existing Google, Facebook or PayPal profiles as well.', 'ecwid-shopping-cart'); ?>
45
- </div>
46
- </li>
47
- <li>
48
- <h4><?php _e('Find your Store ID', 'ecwid-shopping-cart'); ?></h4>
49
- <div>
50
- <?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'); ?>
51
- </div>
52
- </li>
53
- <li>
54
- <h4>
55
- <?php _e('Enter your Store ID', 'ecwid-shopping-cart'); ?>
56
- </h4>
57
- <div><label for="ecwid_store_id"><?php _e('Enter your Store ID here:', 'ecwid-shopping-cart'); ?></label></div>
58
- <div class="pure-control-group store-id">
59
- <input
60
- id="ecwid_store_id"
61
- name="ecwid_store_id"
62
- type="text"
63
- placeholder="<?php _e('Store ID', 'ecwid-shopping-cart'); ?>"
64
- value="<?php if (get_ecwid_store_id() != 1003) echo esc_attr(get_ecwid_store_id()); ?>"
65
- />
66
- <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>
67
- </div>
68
-
69
- </li>
70
- </ol>
71
- <hr />
72
- <p><?php _e('Questions? Visit <a href="http://help.ecwid.com/?source=wporg">Ecwid support center</a>', 'ecwid-shopping-cart'); ?></p>
73
- </fieldset>
74
- </form>
75
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/wp-dashboard-widget.php DELETED
@@ -1,146 +0,0 @@
1
- <table style="width: 100%; border: 0px solid #C0C0C0; background-color: #FFFFFF" cellSpacing=0 cellPadding=3>
2
- <tr><td height=80 style="background-color: #FFFFFF">
3
- <!-- Begin Ad Code -->
4
- <script data-cfasync="false" type="text/javascript">
5
- function loadTextAd(sparkCounter, id, setID) {
6
- output179716="http://ab166273.adbutler-alion.com/adserve/;ID=" + id + ";setID=" + setID + ";type=textad;pid=" + rnd + ";layoutID=" + sparkCounter;
7
- document.writeln("<SCR" + "IPT SRC=" + output179716 + " type=\"text/javascript\"> <\/scr" + "ipt>");
8
- }
9
- var loadedTextAds179716;
10
- if(loadedTextAds179716 == null)
11
- loadedTextAds179716= new Array();
12
- var d = new Date();
13
- var id179716 = 166273;
14
- var setID179716 = 179716;
15
- var rnd = window.rnd || Math.floor(Math.random()*10e6);
16
- var sparkCounter179716;
17
- if(sparkCounter179716 == null)
18
- sparkCounter179716 = 1;
19
- else
20
- sparkCounter179716 = sparkCounter179716 + 1;
21
- id="abta179716" + sparkCounter179716;
22
- document.writeln("<div id='" + id + "'></div>");
23
- loadedTextAds179716[sparkCounter179716] = false;
24
- loadTextAd(sparkCounter179716, id179716, setID179716);
25
- </script>
26
-
27
- <!-- End Ad Code -->
28
- </td></tr>
29
- <tr><td height=80 style="background-color: #FFFFFF; border-top: 1px dashed #C0C0C0">
30
- <!-- Begin Ad Code -->
31
- <script data-cfasync="false" type="text/javascript">
32
- function loadTextAd(sparkCounter, id, setID) {
33
- output179716="http://ab166273.adbutler-alion.com/adserve/;ID=" + id + ";setID=" + setID + ";type=textad;pid=" + rnd + ";layoutID=" + sparkCounter;
34
- document.writeln("<SCR" + "IPT SRC=" + output179716 + " type=\"text/javascript\"> <\/scr" + "ipt>");
35
- }
36
- var loadedTextAds179716;
37
- if(loadedTextAds179716 == null)
38
- loadedTextAds179716= new Array();
39
- var d = new Date();
40
- var id179716 = 166273;
41
- var setID179716 = 179716;
42
- var rnd = window.rnd || Math.floor(Math.random()*10e6);
43
- var sparkCounter179716;
44
- if(sparkCounter179716 == null)
45
- sparkCounter179716 = 1;
46
- else
47
- sparkCounter179716 = sparkCounter179716 + 1;
48
- id="abta179716" + sparkCounter179716;
49
- document.writeln("<div id='" + id + "'></div>");
50
- loadedTextAds179716[sparkCounter179716] = false;
51
- loadTextAd(sparkCounter179716, id179716, setID179716);
52
- </script>
53
-
54
- <!-- End Ad Code -->
55
- </td></tr>
56
- <tr><td height=80 style="background-color: #FFFFFF; border-top: 1px dashed #C0C0C0">
57
- <!-- Begin Ad Code -->
58
- <script data-cfasync="false" type="text/javascript">
59
- function loadTextAd(sparkCounter, id, setID) {
60
- output179716="http://ab166273.adbutler-alion.com/adserve/;ID=" + id + ";setID=" + setID + ";type=textad;pid=" + rnd + ";layoutID=" + sparkCounter;
61
- document.writeln("<SCR" + "IPT SRC=" + output179716 + " type=\"text/javascript\"> <\/scr" + "ipt>");
62
- }
63
- var loadedTextAds179716;
64
- if(loadedTextAds179716 == null)
65
- loadedTextAds179716= new Array();
66
- var d = new Date();
67
- var id179716 = 166273;
68
- var setID179716 = 179716;
69
- var rnd = window.rnd || Math.floor(Math.random()*10e6);
70
- var sparkCounter179716;
71
- if(sparkCounter179716 == null)
72
- sparkCounter179716 = 1;
73
- else
74
- sparkCounter179716 = sparkCounter179716 + 1;
75
- id="abta179716" + sparkCounter179716;
76
- document.writeln("<div id='" + id + "'></div>");
77
- loadedTextAds179716[sparkCounter179716] = false;
78
- loadTextAd(sparkCounter179716, id179716, setID179716);
79
- </script>
80
-
81
- <!-- End Ad Code -->
82
- </td></tr>
83
- </table>
84
- <div class="ecwid-wp-dashboard-fallback">
85
- <div class="item" style="border-bottom: 1px dashed #C0C0C0">
86
- <div class="title">
87
- <a target="_blank" href="https://itunes.apple.com/bm/app/ecwid/id626731456">
88
- <?php _e('Sell On The Go with Ecwid iOS Application', 'ecwid-shopping-cart'); ?>
89
- </a>
90
- </div>
91
- <div class="content">
92
- <?php _e('Ecwid iOS app allows you to manage your online store, sell your products on the go, and accept payments with your phone. Just download the Ecwid app, connect it to your Ecwid shop and have your sales at your fingertips!', 'ecwid-shopping-cart'); ?>
93
- </div>
94
- </div>
95
- <div class="item" style="border-bottom: 1px dashed #C0C0C0">
96
- <div class="title">
97
- <a target="_blank" href="https://wordpress.org/plugins/google-sitemap-generator/">
98
- <?php _e('Get Your Products Found on Google using XML Sitemap', 'ecwid-shopping-cart'); ?>
99
- </a>
100
- </div>
101
- <div class="content">
102
- <?php _e('Free Google XML Sitemaps plugin creates a sitemap that includes your store product links. This makes your product pages more visible to search engines and appear in the search results.', 'ecwid-shopping-cart'); ?>
103
- </div>
104
- </div>
105
- <div class="item">
106
- <div class="title">
107
- <a target="_blank" href="https://wordpress.org/plugins/ecwid-widgets-avalanche/">
108
- <?php _e('Add Product Slider to Your Store', 'ecwid-shopping-cart'); ?>
109
- </a>
110
- </div>
111
- <div class="content">
112
- <?php _e('Add a fancy product slider to your site using a free WP Widgets Avalanche plugin which works perfectly with Ecwid', 'ecwid-shopping-cart'); ?>
113
- </div>
114
- </div>
115
- </div>
116
- <script data-cfasync="false" type="text/javascript">
117
- <!--
118
- (function() {
119
- function is_ad_loaded() {
120
- return jQuery('#abta1797161 table').length > 0;
121
- }
122
-
123
- function check_ads() {
124
- if (is_ad_loaded()) {
125
- jQuery('#ecwid_dashboard_widget div.inside > table').show();
126
- jQuery('#ecwid_dashboard_widget .ecwid-wp-dashboard-fallback').hide();
127
- } else {
128
- jQuery('#ecwid_dashboard_widget div.inside > table').hide();
129
- jQuery('#ecwid_dashboard_widget .ecwid-wp-dashboard-fallback').show();
130
- }
131
- }
132
-
133
- var ecwid_wp_dashboard_interval = setInterval(function() {
134
- check_ads();
135
- }, 500);
136
-
137
- check_ads();
138
-
139
- setTimeout(function() {
140
- if (!is_ad_loaded()) {
141
- clearInterval(ecwid_wp_dashboard_interval);
142
- }
143
- }, 3000);
144
- })();
145
- -->
146
- </script>