├── themes └── client │ └── html │ └── default │ ├── catalog-home.js │ ├── account-review.js │ ├── basket-related.js │ ├── catalog-product.css │ ├── catalog-product.js │ ├── checkout-confirm.js │ ├── supplier-detail.js │ ├── assets │ ├── icon.png │ ├── logo.png │ ├── preloader.gif │ ├── default-skin.png │ ├── bootstrap-icons.woff │ ├── bootstrap-icons.woff2 │ ├── roboto-condensed-v19-latin-700.woff │ ├── roboto-condensed-v19-latin-700.woff2 │ ├── roboto-condensed-v19-latin-regular.woff │ ├── roboto-condensed-v19-latin-regular.woff2 │ └── default-skin.svg │ ├── supplier-detail.css │ ├── basket-related.css │ ├── catalog-stage.js │ ├── checkout-confirm.css │ ├── locale-select.js │ ├── account-basket.js │ ├── account-history.js │ ├── account-subscription.js │ ├── account-review.css │ ├── account-favorite.css │ ├── account-favorite.js │ ├── basket-bulk.css │ ├── account-history.css │ ├── catalog-home.css │ ├── account-basket.css │ ├── account-subscription.css │ ├── catalog-stage.css │ ├── account-watch.css │ ├── account-profile.js │ ├── account-watch.js │ ├── catalog-session.js │ ├── basket-standard.js │ ├── locale-select.css │ ├── basket-standard.css │ ├── account-profile.css │ └── email.css ├── i18n ├── ar ├── bg ├── bn ├── ca ├── cs ├── da ├── de ├── el ├── en ├── es ├── et ├── fa ├── fi ├── fr ├── he ├── hr ├── hu ├── id ├── it ├── ja ├── ka ├── ko ├── lb ├── lt ├── lv ├── my ├── nb ├── nl ├── no ├── pl ├── pt ├── ro ├── ru ├── sk ├── sl ├── sr ├── sv ├── th ├── tk ├── tr ├── uk ├── vi ├── zh ├── es_AR ├── pt_BR ├── pt_PT ├── zh_CN └── code │ ├── ar │ ├── bg │ ├── ca │ ├── cs │ ├── da │ ├── de │ ├── el │ ├── en │ ├── es │ ├── et │ ├── fa │ ├── fi │ ├── fr │ ├── he │ ├── hr │ ├── hu │ ├── id │ ├── it │ ├── ja │ ├── ko │ ├── lb │ ├── lt │ ├── lv │ ├── my │ ├── nb │ ├── nl │ ├── no │ ├── pl │ ├── pt │ ├── ro │ ├── ru │ ├── sk │ ├── sl │ ├── sr │ ├── sv │ ├── th │ ├── tk │ ├── tr │ ├── uk │ ├── vi │ ├── zh │ ├── es_AR │ ├── pt_BR │ ├── pt_PT │ └── zh_CN ├── .gitignore ├── templates └── client │ └── html │ ├── catalog │ ├── stock │ │ └── header.php │ ├── suggest │ │ ├── header.php │ │ └── body.php │ ├── count │ │ ├── body.php │ │ ├── header.php │ │ ├── tree-body.php │ │ ├── attribute-body.php │ │ └── supplier-body.php │ ├── session │ │ ├── body.php │ │ ├── header.php │ │ └── seen-body.php │ ├── filter │ │ ├── header.php │ │ └── price-body.php │ ├── stage │ │ ├── header.php │ │ └── body.php │ ├── product │ │ ├── header.php │ │ └── body.php │ ├── detail │ │ ├── navigator.php │ │ └── seen.php │ └── lists │ │ └── items.php │ ├── checkout │ ├── update │ │ ├── body.php │ │ └── header.php │ ├── confirm │ │ └── header.php │ └── standard │ │ ├── header.php │ │ ├── address-body.php │ │ └── body.php │ ├── locale │ └── select │ │ ├── body.php │ │ ├── header.php │ │ ├── language-body.php │ │ └── currency-body.php │ ├── common │ ├── partials │ │ └── badges.php │ └── summary │ │ ├── address.php │ │ └── service.php │ ├── basket │ ├── bulk │ │ └── header.php │ ├── related │ │ ├── header.php │ │ └── body.php │ ├── mini │ │ └── header.php │ └── standard │ │ └── header.php │ ├── account │ ├── profile │ │ └── header.php │ ├── review │ │ └── header.php │ ├── subscription │ │ └── header.php │ ├── watch │ │ └── header.php │ ├── favorite │ │ └── header.php │ ├── basket │ │ └── header.php │ └── history │ │ └── header.php │ ├── error.php │ └── supplier │ └── detail │ └── body.php ├── config ├── controller.php └── client.php ├── .tx └── config ├── manifest.php ├── tests ├── bootstrap.php ├── phpunit.xml ├── Client │ ├── Html │ │ ├── Common │ │ │ └── Decorator │ │ │ │ ├── Example.php │ │ │ │ ├── ContextTest.php │ │ │ │ ├── ClientTest.php │ │ │ │ └── ExampleTest.php │ │ ├── Catalog │ │ │ ├── Count │ │ │ │ ├── Supplier │ │ │ │ │ └── StandardTest.php │ │ │ │ ├── Attribute │ │ │ │ │ └── StandardTest.php │ │ │ │ ├── Tree │ │ │ │ │ └── StandardTest.php │ │ │ │ └── StandardTest.php │ │ │ ├── Filter │ │ │ │ ├── Search │ │ │ │ │ └── StandardTest.php │ │ │ │ ├── Price │ │ │ │ │ └── StandardTest.php │ │ │ │ ├── StandardTest.php │ │ │ │ └── Supplier │ │ │ │ │ └── StandardTest.php │ │ │ ├── Session │ │ │ │ ├── Seen │ │ │ │ │ └── StandardTest.php │ │ │ │ └── StandardTest.php │ │ │ ├── Tree │ │ │ │ └── StandardTest.php │ │ │ ├── Price │ │ │ │ └── StandardTest.php │ │ │ ├── Stock │ │ │ │ └── StandardTest.php │ │ │ ├── Search │ │ │ │ └── StandardTest.php │ │ │ ├── Supplier │ │ │ │ └── StandardTest.php │ │ │ ├── Attribute │ │ │ │ └── StandardTest.php │ │ │ ├── Home │ │ │ │ └── StandardTest.php │ │ │ ├── Suggest │ │ │ │ └── StandardTest.php │ │ │ └── Product │ │ │ │ └── StandardTest.php │ │ ├── Basket │ │ │ ├── Bulk │ │ │ │ └── StandardTest.php │ │ │ └── Related │ │ │ │ └── StandardTest.php │ │ ├── Account │ │ │ ├── Profile │ │ │ │ └── StandardTest.php │ │ │ ├── Basket │ │ │ │ └── StandardTest.php │ │ │ ├── Review │ │ │ │ └── StandardTest.php │ │ │ └── History │ │ │ │ └── StandardTest.php │ │ ├── Locale │ │ │ └── Select │ │ │ │ ├── StandardTest.php │ │ │ │ ├── Language │ │ │ │ └── StandardTest.php │ │ │ │ └── Currency │ │ │ │ └── StandardTest.php │ │ └── Checkout │ │ │ └── Standard │ │ │ └── Process │ │ │ ├── Address │ │ │ └── StandardTest.php │ │ │ └── Account │ │ │ └── StandardTest.php │ └── HtmlTest.php ├── phpunit-coverage.xml └── Base │ └── View │ └── Helper │ ├── Attrname │ └── StandardTest.php │ └── Image │ └── StandardTest.php ├── src ├── Client │ └── Html │ │ ├── Exception.php │ │ ├── Common │ │ ├── Client │ │ │ └── Factory │ │ │ │ ├── Base.php │ │ │ │ └── Iface.php │ │ └── Decorator │ │ │ ├── Iface.php │ │ │ └── Context.php │ │ ├── Catalog │ │ ├── Filter │ │ │ └── Search │ │ │ │ └── Standard.php │ │ └── Session │ │ │ └── Seen │ │ │ └── Standard.php │ │ ├── Checkout │ │ └── Standard │ │ │ └── Process │ │ │ ├── Address │ │ │ └── Standard.php │ │ │ └── Account │ │ │ └── Standard.php │ │ ├── Locale │ │ └── Select │ │ │ ├── Currency │ │ │ └── Standard.php │ │ │ └── Language │ │ │ └── Standard.php │ │ └── Basket │ │ └── Base.php └── Base │ └── View │ └── Helper │ ├── Attrname │ ├── Iface.php │ └── Standard.php │ └── Image │ ├── Iface.php │ └── Standard.php ├── README.md └── composer.json /themes/client/html/default/catalog-home.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/client/html/default/account-review.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/client/html/default/basket-related.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/client/html/default/catalog-product.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/client/html/default/catalog-product.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/client/html/default/checkout-confirm.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/client/html/default/supplier-detail.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /i18n/ar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ar -------------------------------------------------------------------------------- /i18n/bg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/bg -------------------------------------------------------------------------------- /i18n/bn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/bn -------------------------------------------------------------------------------- /i18n/ca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ca -------------------------------------------------------------------------------- /i18n/cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/cs -------------------------------------------------------------------------------- /i18n/da: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/da -------------------------------------------------------------------------------- /i18n/de: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/de -------------------------------------------------------------------------------- /i18n/el: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/el -------------------------------------------------------------------------------- /i18n/en: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/en -------------------------------------------------------------------------------- /i18n/es: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/es -------------------------------------------------------------------------------- /i18n/et: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/et -------------------------------------------------------------------------------- /i18n/fa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/fa -------------------------------------------------------------------------------- /i18n/fi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/fi -------------------------------------------------------------------------------- /i18n/fr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/fr -------------------------------------------------------------------------------- /i18n/he: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/he -------------------------------------------------------------------------------- /i18n/hr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/hr -------------------------------------------------------------------------------- /i18n/hu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/hu -------------------------------------------------------------------------------- /i18n/id: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/id -------------------------------------------------------------------------------- /i18n/it: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/it -------------------------------------------------------------------------------- /i18n/ja: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ja -------------------------------------------------------------------------------- /i18n/ka: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ka -------------------------------------------------------------------------------- /i18n/ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ko -------------------------------------------------------------------------------- /i18n/lb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/lb -------------------------------------------------------------------------------- /i18n/lt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/lt -------------------------------------------------------------------------------- /i18n/lv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/lv -------------------------------------------------------------------------------- /i18n/my: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/my -------------------------------------------------------------------------------- /i18n/nb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/nb -------------------------------------------------------------------------------- /i18n/nl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/nl -------------------------------------------------------------------------------- /i18n/no: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/no -------------------------------------------------------------------------------- /i18n/pl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/pl -------------------------------------------------------------------------------- /i18n/pt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/pt -------------------------------------------------------------------------------- /i18n/ro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ro -------------------------------------------------------------------------------- /i18n/ru: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/ru -------------------------------------------------------------------------------- /i18n/sk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/sk -------------------------------------------------------------------------------- /i18n/sl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/sl -------------------------------------------------------------------------------- /i18n/sr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/sr -------------------------------------------------------------------------------- /i18n/sv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/sv -------------------------------------------------------------------------------- /i18n/th: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/th -------------------------------------------------------------------------------- /i18n/tk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/tk -------------------------------------------------------------------------------- /i18n/tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/tr -------------------------------------------------------------------------------- /i18n/uk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/uk -------------------------------------------------------------------------------- /i18n/vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/vi -------------------------------------------------------------------------------- /i18n/zh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/zh -------------------------------------------------------------------------------- /i18n/es_AR: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/es_AR -------------------------------------------------------------------------------- /i18n/pt_BR: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/pt_BR -------------------------------------------------------------------------------- /i18n/pt_PT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/pt_PT -------------------------------------------------------------------------------- /i18n/zh_CN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/zh_CN -------------------------------------------------------------------------------- /i18n/code/ar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/ar -------------------------------------------------------------------------------- /i18n/code/bg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/bg -------------------------------------------------------------------------------- /i18n/code/ca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/ca -------------------------------------------------------------------------------- /i18n/code/cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/cs -------------------------------------------------------------------------------- /i18n/code/da: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/da -------------------------------------------------------------------------------- /i18n/code/de: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/de -------------------------------------------------------------------------------- /i18n/code/el: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/el -------------------------------------------------------------------------------- /i18n/code/en: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/en -------------------------------------------------------------------------------- /i18n/code/es: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/es -------------------------------------------------------------------------------- /i18n/code/et: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/et -------------------------------------------------------------------------------- /i18n/code/fa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/fa -------------------------------------------------------------------------------- /i18n/code/fi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/fi -------------------------------------------------------------------------------- /i18n/code/fr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/fr -------------------------------------------------------------------------------- /i18n/code/he: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/he -------------------------------------------------------------------------------- /i18n/code/hr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/hr -------------------------------------------------------------------------------- /i18n/code/hu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/hu -------------------------------------------------------------------------------- /i18n/code/id: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/id -------------------------------------------------------------------------------- /i18n/code/it: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/it -------------------------------------------------------------------------------- /i18n/code/ja: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/ja -------------------------------------------------------------------------------- /i18n/code/ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/ko -------------------------------------------------------------------------------- /i18n/code/lb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/lb -------------------------------------------------------------------------------- /i18n/code/lt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/lt -------------------------------------------------------------------------------- /i18n/code/lv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/lv -------------------------------------------------------------------------------- /i18n/code/my: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/my -------------------------------------------------------------------------------- /i18n/code/nb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/nb -------------------------------------------------------------------------------- /i18n/code/nl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/nl -------------------------------------------------------------------------------- /i18n/code/no: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/no -------------------------------------------------------------------------------- /i18n/code/pl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/pl -------------------------------------------------------------------------------- /i18n/code/pt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/pt -------------------------------------------------------------------------------- /i18n/code/ro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/ro -------------------------------------------------------------------------------- /i18n/code/ru: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/ru -------------------------------------------------------------------------------- /i18n/code/sk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/sk -------------------------------------------------------------------------------- /i18n/code/sl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/sl -------------------------------------------------------------------------------- /i18n/code/sr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/sr -------------------------------------------------------------------------------- /i18n/code/sv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/sv -------------------------------------------------------------------------------- /i18n/code/th: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/th -------------------------------------------------------------------------------- /i18n/code/tk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/tk -------------------------------------------------------------------------------- /i18n/code/tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/tr -------------------------------------------------------------------------------- /i18n/code/uk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/uk -------------------------------------------------------------------------------- /i18n/code/vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/vi -------------------------------------------------------------------------------- /i18n/code/zh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/zh -------------------------------------------------------------------------------- /i18n/code/es_AR: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/es_AR -------------------------------------------------------------------------------- /i18n/code/pt_BR: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/pt_BR -------------------------------------------------------------------------------- /i18n/code/pt_PT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/pt_PT -------------------------------------------------------------------------------- /i18n/code/zh_CN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/i18n/code/zh_CN -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | tests/tmp 2 | .phpunit.result.cache 3 | .phpunit.cache 4 | .potrans 5 | coveralls.json 6 | coverage.xml 7 | *.log 8 | *.ser 9 | -------------------------------------------------------------------------------- /themes/client/html/default/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/icon.png -------------------------------------------------------------------------------- /themes/client/html/default/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/logo.png -------------------------------------------------------------------------------- /themes/client/html/default/assets/preloader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/preloader.gif -------------------------------------------------------------------------------- /themes/client/html/default/assets/default-skin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/default-skin.png -------------------------------------------------------------------------------- /themes/client/html/default/assets/bootstrap-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/bootstrap-icons.woff -------------------------------------------------------------------------------- /themes/client/html/default/assets/bootstrap-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/bootstrap-icons.woff2 -------------------------------------------------------------------------------- /templates/client/html/catalog/stock/header.php: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /themes/client/html/default/assets/roboto-condensed-v19-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aimeos/ai-client-html/HEAD/themes/client/html/default/assets/roboto-condensed-v19-latin-regular.woff2 -------------------------------------------------------------------------------- /templates/client/html/catalog/count/body.php: -------------------------------------------------------------------------------- 1 | get( 'body' ); 9 | -------------------------------------------------------------------------------- /templates/client/html/catalog/count/header.php: -------------------------------------------------------------------------------- 1 | get( 'header' ); 9 | -------------------------------------------------------------------------------- /templates/client/html/checkout/update/body.php: -------------------------------------------------------------------------------- 1 | response()->getBody(); 9 | -------------------------------------------------------------------------------- /config/controller.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'catalog' => [ 6 | 'levels-always' => 4, // show always four category levels for megamenu 7 | 'levels-only' => 4, // don't load more then four category levels for megamenu 8 | ] 9 | ] 10 | ]; 11 | -------------------------------------------------------------------------------- /templates/client/html/catalog/count/tree-body.php: -------------------------------------------------------------------------------- 1 | 9 | get( 'treeCountList', map() )->toJson( JSON_FORCE_OBJECT ) ?> 10 | -------------------------------------------------------------------------------- /templates/client/html/catalog/count/attribute-body.php: -------------------------------------------------------------------------------- 1 | 9 | get( 'attributeCountList', map() )->toJson( JSON_FORCE_OBJECT ) ?> 10 | -------------------------------------------------------------------------------- /templates/client/html/catalog/count/supplier-body.php: -------------------------------------------------------------------------------- 1 | 9 | get( 'supplierCountList', map() )->toJson( JSON_FORCE_OBJECT ) ?> 10 | -------------------------------------------------------------------------------- /themes/client/html/default/supplier-detail.css: -------------------------------------------------------------------------------- 1 | .supplier-detail { 2 | padding-top: 4rem; 3 | margin-bottom: 2rem; 4 | background-color: var(--ai-bg-alt); 5 | } 6 | 7 | .supplier-detail-basic { 8 | padding: 0 2rem; 9 | } 10 | 11 | .supplier-detail .image-single img { 12 | max-height: 20rem; 13 | padding: 0 2rem; 14 | width: 100%; 15 | } 16 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | 4 | [o:aimeos:p:aimeos-core:r:client] 5 | file_filter = i18n/.po 6 | source_file = i18n/source.pot 7 | source_lang = en 8 | type = PO 9 | 10 | [o:aimeos:p:aimeos-core:r:client-code] 11 | file_filter = i18n/code/.po 12 | source_file = i18n/code/source.pot 13 | source_lang = en 14 | type = PO 15 | -------------------------------------------------------------------------------- /templates/client/html/locale/select/body.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 |
13 | 14 | get( 'body' ) ?> 15 | 16 |
17 | -------------------------------------------------------------------------------- /themes/client/html/default/basket-related.css: -------------------------------------------------------------------------------- 1 | /* Related products to basket */ 2 | 3 | .basket-related { 4 | margin: 2rem 0; 5 | } 6 | 7 | .basket-related-bought .header { 8 | border-bottom: 1px solid var(--ai-secondary); 9 | text-transform: uppercase; 10 | text-align: start; 11 | font-weight: normal; 12 | padding: 0.5rem 1rem; 13 | color: var(--ai-secondary); 14 | } 15 | 16 | .basket-related h1 { 17 | display: none; 18 | } 19 | -------------------------------------------------------------------------------- /manifest.php: -------------------------------------------------------------------------------- 1 | 'ai-client-html', 5 | 'depends' => [ 6 | 'aimeos-core', 7 | 'ai-controller-frontend', 8 | ], 9 | 'include' => [ 10 | 'src', 11 | ], 12 | 'i18n' => [ 13 | 'client' => 'i18n', 14 | 'client/code' => 'i18n/code', 15 | ], 16 | 'config' => [ 17 | 'config', 18 | ], 19 | 'template' => [ 20 | 'client/html/templates' => [ 21 | 'templates/client/html', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /templates/client/html/checkout/update/header.php: -------------------------------------------------------------------------------- 1 | response()->getStatusCode() . ' ' . $this->response()->getReasonPhrase() ); 9 | 10 | foreach( $this->response()->getHeaders() as $key => $value ) 11 | { 12 | foreach( (array) $value as $val ) { 13 | @header( $key . ': ' . $val ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /templates/client/html/common/partials/badges.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 |
13 | html( $this->translate( 'client', 'New' ) ) ?> 14 | html( $this->translate( 'client', 'Sale' ) ) ?> 15 |
16 | -------------------------------------------------------------------------------- /templates/client/html/catalog/session/body.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 |
13 | 14 | block()->get( 'catalog/session/pinned' ) ?> 15 | block()->get( 'catalog/session/seen' ) ?> 16 | 17 |
18 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Base/ 6 | 7 | 8 | Client/ 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/Client/Html/Exception.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/catalog/filter/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | ?> 11 | 12 | 13 | -------------------------------------------------------------------------------- /templates/client/html/catalog/stage/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/locale/select/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/account/profile/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/account/review/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/basket/related/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/catalog/session/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Client/Html/Common/Client/Factory/Base.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/client/html/basket/mini/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | 15 | get( 'miniHeader' ) ?> 16 | -------------------------------------------------------------------------------- /templates/client/html/account/watch/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /themes/client/html/default/catalog-stage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Catalog session client actions 3 | */ 4 | AimeosCatalogStage = { 5 | 6 | /** 7 | * Back to last page 8 | */ 9 | onBack() { 10 | 11 | $("body").on("click", ".catalog-stage-breadcrumb a.back", ev => { 12 | 13 | history.back(); 14 | return false; 15 | }); 16 | }, 17 | 18 | 19 | /** 20 | * Initializes the catalog session actions 21 | */ 22 | init: function() { 23 | if(this.once) return; 24 | this.once = true; 25 | 26 | this.onBack(); 27 | } 28 | }; 29 | 30 | 31 | $(function() { 32 | AimeosCatalogStage.init(); 33 | }); -------------------------------------------------------------------------------- /themes/client/html/default/checkout-confirm.css: -------------------------------------------------------------------------------- 1 | .checkout-confirm { 2 | padding: 2rem 0; 3 | } 4 | 5 | .checkout-confirm-basic { 6 | padding: 2rem 0; 7 | margin-top: 1.5rem; 8 | } 9 | 10 | .checkout-confirm-basic .attr-list { 11 | padding: 0.5rem 1rem; 12 | margin: 0.5rem; 13 | } 14 | 15 | .checkout-confirm-basic .attr-list .name, 16 | .checkout-confirm-basic .attr-list .value { 17 | display: inline-block; 18 | width: 25%; 19 | } 20 | 21 | .checkout-confirm-basic h2 { 22 | border-bottom: 1px solid var(--ai-secondary); 23 | padding: 0.5rem 1rem; 24 | margin: 0.5rem; 25 | margin-top: 0; 26 | } 27 | -------------------------------------------------------------------------------- /templates/client/html/account/favorite/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/Client/Html/Common/Decorator/Example.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /templates/client/html/account/history/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tests/phpunit-coverage.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ../src 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Base/ 16 | 17 | 18 | Client/ 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/Client/Html/Common/Client/Factory/Iface.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | 13 | 14 | 15 | itemsStockUrl ) ) : ?> 16 | itemsStockUrl as $url ) : ?> 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Base/View/Helper/Attrname/Iface.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | get( 'errors', [] ) ) ) : ?> 13 |
14 |
    15 | 16 |
  • html( $error ) ?>
  • 17 | 18 |
19 |
20 | 21 | get( 'infos', [] ) ) ) : ?> 22 |
23 |
    24 | 25 |
  • html( $error ) ?>
  • 26 | 27 |
28 |
29 | 30 | -------------------------------------------------------------------------------- /tests/Client/Html/Catalog/Count/Supplier/StandardTest.php: -------------------------------------------------------------------------------- 1 | object = new \Aimeos\Client\Html\Catalog\Count\Supplier\Standard( \TestHelper::context() ); 20 | } 21 | 22 | 23 | protected function tearDown() : void 24 | { 25 | unset( $this->object ); 26 | } 27 | 28 | 29 | public function testBody() 30 | { 31 | $this->object->setView( $this->object->data( \TestHelper::view() ) ); 32 | $output = $this->object->body(); 33 | 34 | $this->assertStringStartsWith( '{"', $output ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Client/Html/Common/Decorator/Iface.php: -------------------------------------------------------------------------------- 1 | object = new \Aimeos\Client\Html\Catalog\Count\Attribute\Standard( \TestHelper::context() ); 20 | } 21 | 22 | 23 | protected function tearDown() : void 24 | { 25 | unset( $this->object ); 26 | } 27 | 28 | 29 | public function testBody() 30 | { 31 | $this->object->setView( $this->object->data( \TestHelper::view() ) ); 32 | $output = $this->object->body(); 33 | 34 | $this->assertStringStartsWith( '{"', $output ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /themes/client/html/default/account-basket.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Account basket actions 3 | */ 4 | AimeosAccountBasket = { 5 | 6 | /** 7 | * Shows basket details without page reload 8 | */ 9 | onToggleDetail() { 10 | 11 | $(".account-basket").on("click", ".basket-item .action .btn", ev => { 12 | 13 | const target = $(ev.currentTarget).closest(".basket-item"); 14 | const details = $(".account-basket-detail", target); 15 | 16 | $(".btn.show", target).toggleClass('hidden'); 17 | $(".btn.close", target).toggleClass('hidden'); 18 | 19 | slideToggle(details[0], 300); 20 | 21 | return false; 22 | }); 23 | }, 24 | 25 | 26 | /** 27 | * Initializes the account basket actions 28 | */ 29 | init() { 30 | if(this.once) return; 31 | this.once = true; 32 | 33 | this.onToggleDetail(); 34 | } 35 | }; 36 | 37 | 38 | $(() => { 39 | AimeosAccountBasket.init(); 40 | }); -------------------------------------------------------------------------------- /themes/client/html/default/account-history.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Account history actions 3 | */ 4 | AimeosAccountHistory = { 5 | 6 | /** 7 | * Shows history details without page reload 8 | */ 9 | onToggleDetail() { 10 | 11 | $(".account-history").on("click", ".history-item .action .btn", ev => { 12 | 13 | const target = $(ev.currentTarget).closest(".history-item"); 14 | const details = $(".account-history-detail", target); 15 | 16 | $(".btn.show", target).toggleClass('hidden'); 17 | $(".btn.close", target).toggleClass('hidden'); 18 | 19 | slideToggle(details[0], 300); 20 | 21 | return false; 22 | }); 23 | }, 24 | 25 | 26 | /** 27 | * Initializes the account history actions 28 | */ 29 | init() { 30 | if(this.once) return; 31 | this.once = true; 32 | 33 | this.onToggleDetail(); 34 | } 35 | }; 36 | 37 | 38 | $(() => { 39 | AimeosAccountHistory.init(); 40 | }); -------------------------------------------------------------------------------- /templates/client/html/basket/standard/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | <?= $this->translate( 'client', 'Basket' ) ?> | <?= $enc->html( $this->get( 'contextSiteLabel', 'Aimeos' ) ) ?> 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/Client/Html/Catalog/Count/Tree/StandardTest.php: -------------------------------------------------------------------------------- 1 | object = new \Aimeos\Client\Html\Catalog\Count\Tree\Standard( \TestHelper::context() ); 20 | $this->object->setView( \TestHelper::view() ); 21 | } 22 | 23 | 24 | protected function tearDown() : void 25 | { 26 | unset( $this->object ); 27 | } 28 | 29 | 30 | public function testBody() 31 | { 32 | $this->object->setView( $this->object->data( \TestHelper::view() ) ); 33 | $output = $this->object->body(); 34 | 35 | $this->assertStringStartsWith( '{"', $output ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Base/View/Helper/Image/Iface.php: -------------------------------------------------------------------------------- 1 | { 12 | 13 | const target = $(ev.currentTarget).closest(".subscription-item"); 14 | const details = $(".account-subscription-detail", target); 15 | 16 | $(".btn.show", target).toggleClass('hidden'); 17 | $(".btn.close", target).toggleClass('hidden'); 18 | 19 | slideToggle(details[0], 300); 20 | 21 | return false; 22 | }); 23 | }, 24 | 25 | 26 | /** 27 | * Initializes the account subscription actions 28 | */ 29 | init() { 30 | if(this.once) return; 31 | this.once = true; 32 | 33 | this.onToggleDetail(); 34 | } 35 | }; 36 | 37 | 38 | $(() => { 39 | AimeosAccountSubscription.init(); 40 | }); -------------------------------------------------------------------------------- /templates/client/html/catalog/detail/navigator.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | ?> 11 | param( 'd_pos' ) !== null ) : ?> 12 |
13 | 28 |
29 | 30 | -------------------------------------------------------------------------------- /templates/client/html/checkout/confirm/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | <?= $this->translate( 'client', 'Confirmation' ) ?> | <?= $enc->html( $this->get( 'contextSiteLabel', 'Aimeos' ) ) ?> 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /templates/client/html/checkout/standard/header.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | <?= $this->translate( 'client', $this->get( 'standardStepActive' ) ) ?> | <?= $enc->html( $this->get( 'contextSiteLabel', 'Aimeos' ) ) ?> 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Aimeos logo 3 | 4 | 5 | # Aimeos HTML client 6 | 7 | [![Build Status](https://circleci.com/gh/aimeos/ai-client-html.svg?style=shield)](https://circleci.com/gh/aimeos/ai-client-html) 8 | [![Coverage Status](https://coveralls.io/repos/aimeos/ai-client-html/badge.svg?branch=master)](https://coveralls.io/r/aimeos/ai-client-html?branch=master) 9 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/aimeos/ai-client-html/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/aimeos/ai-client-html/?branch=master) 10 | [![License](https://poser.pugx.org/aimeos/ai-client-html/license.svg)](https://packagist.org/packages/aimeos/ai-client-html) 11 | 12 | Aimeos HTML components for e-commerce projects 13 | 14 | [![Aimeos demo](https://aimeos.org/fileadmin/user_upload/demo.jpg)](http://demo.aimeos.org/) 15 | 16 | -------------------------------------------------------------------------------- /themes/client/html/default/account-review.css: -------------------------------------------------------------------------------- 1 | .account-review { 2 | padding: 2rem 0; 3 | } 4 | 5 | .account-review .header { 6 | text-transform: uppercase; 7 | text-align: start; 8 | font-weight: normal; 9 | padding: 0.5rem 1rem; 10 | color: var(--ai-secondary); 11 | border-bottom: 1px solid var(--ai-secondary); 12 | } 13 | 14 | .account-review .review-item { 15 | padding: 1rem; 16 | } 17 | 18 | .account-review .col-md-6 { 19 | padding-top: 1rem; 20 | } 21 | 22 | .account-review .review-image { 23 | max-width: 100%; 24 | max-height: 10rem; 25 | } 26 | 27 | .account-review .review-rating input { 28 | vertical-align: middle; 29 | } 30 | 31 | .account-review .review-rating input:checked ~ label { 32 | color: var(--ai-primary); 33 | } 34 | 35 | .account-review .review-comment { 36 | width: 100%; 37 | height: 8.5rem; 38 | padding: 0.5rem; 39 | border: 1px solid var(--ai-tertiary); 40 | } 41 | 42 | .account-review .btn { 43 | display: block; 44 | margin: 1rem auto; 45 | } 46 | -------------------------------------------------------------------------------- /themes/client/html/default/account-favorite.css: -------------------------------------------------------------------------------- 1 | .account-favorite { 2 | padding: 2rem 0; 3 | } 4 | 5 | .account-favorite .header { 6 | text-transform: uppercase; 7 | text-align: start; 8 | font-weight: normal; 9 | padding: 0.5rem 1rem; 10 | color: var(--ai-secondary); 11 | border-bottom: 1px solid var(--ai-secondary); 12 | } 13 | 14 | .account-favorite .favorite-items { 15 | display: flex; 16 | justify-content: center; 17 | } 18 | 19 | .account-favorite .favorite-item { 20 | position: relative; 21 | text-align: end; 22 | width: 180px; 23 | margin: 1%; 24 | } 25 | 26 | .account-favorite .name { 27 | margin-top: 0.75rem; 28 | } 29 | 30 | .account-favorite .price-list .rebatepercent { 31 | display: none; 32 | } 33 | 34 | .account-favorite form.delete { 35 | position: absolute; 36 | left: 0; 37 | top: 0; 38 | } 39 | 40 | .account-favorite .minibutton.delete { 41 | color: var(--ai-secondary); 42 | background-color: var(--ai-bg); 43 | padding: .5rem 0.75rem; 44 | z-index: 5; 45 | } 46 | 47 | .account-favorite .media-item > img { 48 | width: 100%; 49 | } 50 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aimeos/ai-client-html", 3 | "description": "Aimeos standard HTML frontend", 4 | "keywords": ["aimeos", "extension", "client", "html"], 5 | "homepage": "https://aimeos.org/", 6 | "type": "aimeos-extension", 7 | "license": "LGPL-3.0-or-later", 8 | "support": { 9 | "source": "https://github.com/aimeos/ai-client-html", 10 | "issues": "https://github.com/aimeos/ai-client-html/issues", 11 | "forum": "https://aimeos.org/help", 12 | "wiki": "https://aimeos.org/docs" 13 | }, 14 | "prefer-stable": true, 15 | "minimum-stability": "dev", 16 | "require": { 17 | "php": "^8.0.11", 18 | "aimeos/aimeos-core": "dev-master", 19 | "aimeos/ai-controller-frontend": "dev-master" 20 | }, 21 | "require-dev": { 22 | "phpunit/phpunit": "~10.0||~11.0", 23 | "nyholm/psr7-server": "~1.0" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "Aimeos\\": "src" 28 | }, 29 | "classmap": [ 30 | "src" 31 | ] 32 | }, 33 | "autoload-dev": { 34 | "psr-4": { 35 | "Aimeos\\": "tests" 36 | }, 37 | "classmap": [ 38 | "tests" 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /templates/client/html/basket/related/body.php: -------------------------------------------------------------------------------- 1 | encoder(); 9 | 10 | 11 | ?> 12 | get( 'boughtItems', map() )->isEmpty() ) : ?> 13 | 14 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /tests/Client/Html/Catalog/Filter/Search/StandardTest.php: -------------------------------------------------------------------------------- 1 | object = new \Aimeos\Client\Html\Catalog\Filter\Search\Standard( \TestHelper::context() ); 24 | $this->object->setView( \TestHelper::view() ); 25 | } 26 | 27 | 28 | protected function tearDown() : void 29 | { 30 | \Aimeos\Controller\Frontend::cache( false ); 31 | \Aimeos\MShop::cache( false ); 32 | 33 | unset( $this->object ); 34 | } 35 | 36 | 37 | public function testBody() 38 | { 39 | $output = $this->object->body(); 40 | $this->assertStringStartsWith( ' 81 | -------------------------------------------------------------------------------- /tests/Client/Html/Catalog/Product/StandardTest.php: -------------------------------------------------------------------------------- 1 | view = \TestHelper::view(); 25 | $this->context = \TestHelper::context(); 26 | $this->context->config()->set( 'client/html/catalog/product/product-codes', ['CNE', 'ABCD', 'CNC'] ); 27 | 28 | $this->object = new \Aimeos\Client\Html\Catalog\Product\Standard( $this->context ); 29 | $this->object->setView( $this->view ); 30 | } 31 | 32 | 33 | protected function tearDown() : void 34 | { 35 | \Aimeos\Controller\Frontend::cache( false ); 36 | \Aimeos\MShop::cache( false ); 37 | 38 | unset( $this->object, $this->context, $this->view ); 39 | } 40 | 41 | 42 | public function testHeader() 43 | { 44 | 45 | $manager = \Aimeos\MShop::create( $this->context, 'product' ); 46 | $filter = $manager->filter()->add( ['product.code' => ['CNE', 'ABCD', 'CNC']] ); 47 | $map = $manager->search( $filter )->col( 'product.id', 'product.code' ); 48 | 49 | $tags = []; 50 | $expire = null; 51 | 52 | $this->object->setView( $this->object->data( $this->view, $tags, $expire ) ); 53 | $output = $this->object->header(); 54 | 55 | $this->assertStringContainsString( 'assertMatchesRegularExpression( $prodCodeParam . $map['CNE'] . '/', $output ); 58 | $this->assertMatchesRegularExpression( $prodCodeParam . $map['ABCD'] . '/', $output ); 59 | $this->assertMatchesRegularExpression( $prodCodeParam . $map['CNC'] . '/', $output ); 60 | $this->assertEquals( '2098-01-01 00:00:00', $expire ); 61 | } 62 | 63 | 64 | public function testBody() 65 | { 66 | 67 | $tags = []; 68 | $expire = null; 69 | 70 | $this->object->setView( $this->object->data( $this->view, $tags, $expire ) ); 71 | $output = $this->object->body(); 72 | 73 | $productNameCNE = '

Cafe Noire Expresso

'; 74 | $productNameABCD = '

Unterproduct 1

'; 75 | $productNameCNC = '

Cafe Noire Cappuccino

'; 76 | $this->assertStringContainsString( $productNameCNE, $output ); 77 | $this->assertStringContainsString( $productNameABCD, $output ); 78 | $this->assertStringContainsString( $productNameCNC, $output ); 79 | 80 | $outputPosCNE = strpos( $output, $productNameCNE ); 81 | $outputPosABCD = strpos( $output, $productNameABCD ); 82 | $outputPosCNC = strpos( $output, $productNameCNC ); 83 | $this->assertGreaterThan( $outputPosCNE, $outputPosABCD ); 84 | $this->assertGreaterThan( $outputPosABCD, $outputPosCNC ); 85 | 86 | $this->assertEquals( '2098-01-01 00:00:00', $expire ); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /tests/Client/Html/Account/History/StandardTest.php: -------------------------------------------------------------------------------- 1 | context = \TestHelper::context(); 26 | $this->view = \TestHelper::view(); 27 | 28 | $this->object = new \Aimeos\Client\Html\Account\History\Standard( $this->context ); 29 | $this->object->setView( $this->view ); 30 | } 31 | 32 | 33 | protected function tearDown() : void 34 | { 35 | \Aimeos\Controller\Frontend::cache( false ); 36 | \Aimeos\MShop::cache( false ); 37 | 38 | unset( $this->object, $this->context, $this->view ); 39 | } 40 | 41 | 42 | public function testHeader() 43 | { 44 | $output = $this->object->header(); 45 | 46 | $this->assertStringContainsString( 'assertStringContainsString( '