From 964b46c4a92af759b95c8bb8c7243c70fde25a6c Mon Sep 17 00:00:00 2001 From: mage2-team <mage2-team@magento.com> Date: Mon, 5 May 2014 03:46:02 -0700 Subject: [PATCH] 2.0.0.0-dev76 * Pricing improvements: * Eliminated code duplication from templates and implemented new calculation models for the following modules: * ConfigurableProduct * Wishlist * Rss * ProductAlert * JavaScript improvements: * Removed head.js usages from frontend * Removed head.js usages from adminhtml * Themes update: * Plushe styles are removed, Plushe theme is now based on blank * Fixed bugs: * Unable to place order with product that contains custom option 'file' * OnePageCheckout is not working if PayPal method is enabled to work via Payment Bridge * Impossible to reset password for admin user (incorrect reset password link in email) * Errors when deleting customer group specified as default one in the config * A number of essential buttons do not work and block other functionality in Internet Explorer 10 * "Insert Widget" button is missing in Insert Widget popup while creating CMS page * Impossible to change status for rating in admin * System email templates are not loaded when user creates new email template * Billing Agreements tab displays during New Customer creation in admin panel * Images are not displayed in WYSIWYG when editing default pages * Error message "Asymmetric transaction rollback" when creating simple product with flat catalog product option enabled in config * Fatal error when trying to preview sample(type=link) or view link for download(type="link") for downloadable product * Customer is redirected to Home Page after adding new address during multiple address checkout if secure URLs are enabled for frontend in config * Impossible to select value in the State/Province field in the customer registration form when customer uses multiple address checkout * Manage Stock option is not editable when using mass action on several products in the admin panel * Category is not displayed in layered navigation block when Flat Catalog is enabled in config * GitHub requests: * [#489] (https://github.com/magento/magento2/issues/489) -- PHPUnit 4.0 Compatibility * [#535] (https://github.com/magento/magento2/issues/535) -- Image management for products * Framework improvements: * Covered Magento lib form elements with unit tests: * `lib/Magento/Framework/Data/Form/Element/AbstractElement.php` * `lib/Magento/Framework/Data/Form/Element/Button.php` * `lib/Magento/Framework/Data/Form/Element/Checkbox.php` * `lib/Magento/Framework/Data/Form/Element/CollectionFactory.php` * `lib/Magento/Framework/Data/Form/Element/Column.php` * `lib/Magento/Framework/Data/Form/Element/File.php` * `lib/Magento/Framework/Data/Form/Element/Hidden.php` * `lib/Magento/Framework/Data/Form/Element/Editablemultiselect.php` * `lib/Magento/Framework/Data/Form/Element/Factory.php` * `lib/Magento/Framework/Data/Form/Element/Image.php` * `lib/Magento/Framework/Data/Form/Element/Imagefile.php` * `lib/Magento/Framework/Data/Form/Element/Label.php` * `lib/Magento/Framework/Data/Form/Element/Link.php` * `lib/Magento/Framework/Data/Form/Element/Multiselect.php` * `lib/Magento/Framework/Data/Form/Element/Note.php` * `lib/Magento/Framework/Data/Form/Element/Obscure.php` * `lib/Magento/Framework/Data/Form/Element/Password.php` * `lib/Magento/Framework/Data/Form/Element/Radio.php` * `lib/Magento/Framework/Data/Form/Element/Reset.php` * `lib/Magento/Framework/Data/Form/Element/Submit.php` * `lib/Magento/Framework/Data/Form/Element/Text.php` * `lib/Magento/Framework/Data/Form/Element/Textarea.php` --- CHANGELOG.md | 58 + app/autoload.php | 2 +- app/bootstrap.php | 2 +- .../Authorizenet/view/frontend/form/cc.phtml | 17 +- .../view/frontend/js/components.phtml | 40 + .../layout/checkout_onepage_index.xml | 3 + .../Widget/Grid/Column/Filter/Datetime.php | 4 +- .../Backend/view/adminhtml/layout/default.xml | 4 +- .../view/adminhtml/media/uploader.phtml | 2 +- .../Product/Composite/Fieldset/Bundle.php | 4 - .../Bundle/Block/Catalog/Product/Price.php | 56 +- .../Bundle/Block/Catalog/Product/View.php | 72 - .../Catalog/Product/View/Type/Bundle.php | 158 +- .../Product/View/Type/Bundle/Option.php | 87 +- .../Helper/Catalog/Product/Configuration.php | 41 +- .../Magento/Bundle/Model/Product/Type.php | 190 +- .../Model/Resource/Option/Collection.php | 2 +- .../Adjustment/BundleCalculatorInterface.php | 52 +- .../Bundle/Pricing/Adjustment/Calculator.php | 273 +- .../Bundle/Pricing/Price/BasePrice.php | 20 +- ...ceInterface.php => BasePriceInterface.php} | 12 +- .../Pricing/Price/BundleOptionPrice.php | 135 +- .../Price/BundleOptionPriceInterface.php | 5 - .../Pricing/Price/BundleSelectionFactory.php | 20 +- .../Pricing/Price/BundleSelectionPrice.php | 50 +- .../Bundle/Pricing/Price/ConfiguredPrice.php | 156 + .../Bundle/Pricing/Price/FinalPrice.php | 28 +- .../Bundle/Pricing/Price/GroupPrice.php | 7 +- .../Bundle/Pricing/Price/SpecialPrice.php | 12 +- .../Bundle/Pricing/Price/TierPrice.php | 5 + .../Bundle/Pricing/Render/FinalPriceBox.php | 2 +- app/code/Magento/Bundle/etc/di.xml | 84 +- .../view/adminhtml/product/edit/bundle.phtml | 4 +- .../adminhtml/product/stock/disabler.phtml | 2 +- .../layout/catalog_product_prices.xml | 0 .../product/price/final_price.phtml | 18 +- .../product/price/selection/amount.phtml | 0 .../product/price/tier_prices.phtml | 0 .../Magento/Bundle/view/frontend/bundle.js | 5 +- .../view/frontend/catalog/product/price.phtml | 265 - .../frontend/catalog/product/view/price.phtml | 105 - .../catalog/product/view/summary.phtml | 31 +- .../catalog/product/view/type/bundle.phtml | 12 +- .../product/view/type/bundle/options.phtml | 24 +- .../Bundle/view/frontend/js/components.phtml | 46 + .../layout/catalog_product_compare_index.xml | 34 - .../frontend/layout/catalog_product_view.xml | 34 - .../catalog_product_view_type_bundle.xml | 36 +- .../catalog_product_view_type_simple.xml | 5 - .../layout/catalogsearch_advanced_result.xml | 34 - .../checkout_cart_configure_type_bundle.xml | 3 + .../frontend/layout/checkout_cart_index.xml | 34 - .../Bundle/view/frontend/layout/default.xml | 15 +- .../view/frontend/layout/tag_product_list.xml | 34 - .../Captcha/view/frontend/default.phtml | 22 +- .../view/frontend/js/components.phtml} | 17 +- .../layout/checkout_onepage_index.xml | 3 + .../frontend/layout/contacts_index_index.xml | 3 + .../layout/customer_account_create.xml | 3 + .../customer_account_forgotpassword.xml | 3 + .../layout/customer_account_login.xml | 3 + .../Catalog/Block/Product/AbstractProduct.php | 195 +- .../Block/Product/Compare/ListCompare.php | 9 +- .../Catalog/Block/Product/ListProduct.php | 9 +- .../Catalog/Block/Product/NewProduct.php | 7 +- .../Magento/Catalog/Block/Product/Price.php | 70 +- .../Catalog/Block/Product/Price/Template.php | 89 - .../Block/Product/ProductList/Promotion.php | 7 +- .../Block/Product/ProductList/Random.php | 7 +- .../Block/Product/ProductList/Related.php | 7 +- .../Block/Product/ProductList/Upsell.php | 7 +- .../Magento/Catalog/Block/Product/Send.php | 7 +- .../Magento/Catalog/Block/Product/View.php | 27 +- .../Block/Product/View/AbstractView.php | 7 +- .../Block/Product/Widget/NewWidget.php | 17 +- .../Catalog/Helper/Product/Configuration.php | 20 +- .../Configuration/ConfigurationInterface.php | 8 +- .../Indexer/Product/Flat/AbstractAction.php | 270 +- .../Indexer/Product/Flat/Action/Eraser.php | 114 + .../Indexer/Product/Flat/Action/Indexer.php | 184 + .../Model/Indexer/Product/Flat/Action/Row.php | 62 +- .../Indexer/Product/Flat/Action/Rows.php | 39 +- .../Indexer/Product/Flat/FlatTableBuilder.php | 7 +- .../Indexer/Product/Flat/TableBuilder.php | 2 +- app/code/Magento/Catalog/Model/Product.php | 10 + .../Configuration/Item/ItemInterface.php | 8 +- .../Magento/Catalog/Model/Product/Option.php | 2 +- .../Model/Product/Option/Type/File.php | 1 - .../Magento/Catalog/Model/Product/Type.php | 7 +- .../Catalog/Model/Resource/Category/Flat.php | 16 +- .../Catalog/Pricing/Price/BasePrice.php | 23 +- .../Catalog/Pricing/Price/ConfiguredPrice.php | 111 + .../Price/ConfiguredPriceInterface.php | 26 +- .../Pricing/Price/CustomOptionPrice.php | 55 +- .../Price/CustomOptionPriceInterface.php | 5 - .../Catalog/Pricing/Price/FinalPrice.php | 26 +- .../Pricing/Price/FinalPriceInterface.php | 17 +- .../Catalog/Pricing/Price/GroupPrice.php | 28 +- .../Pricing/Price/GroupPriceInterface.php | 5 - .../Catalog/Pricing/Price/MsrpPrice.php | 22 +- .../Pricing/Price/MsrpPriceInterface.php | 11 +- .../Catalog/Pricing/Price/RegularPrice.php | 102 +- .../Catalog/Pricing/Price/SpecialPrice.php | 24 +- .../Pricing/Price/SpecialPriceInterface.php | 5 - .../Catalog/Pricing/Price/TierPrice.php | 53 +- .../Pricing/Price/TierPriceInterface.php | 5 - app/code/Magento/Catalog/Pricing/Render.php | 7 +- .../Pricing/Render/ConfiguredPriceBox.php | 56 + .../Catalog/Pricing/Render/FinalPriceBox.php | 14 +- .../Catalog/Pricing/Render/PriceBox.php | 10 +- app/code/Magento/Catalog/etc/di.xml | 79 +- .../adminhtml/catalog/base-image-uploader.js | 2 +- .../form/renderer/fieldset/element.phtml | 2 +- .../view/adminhtml/catalog/product/edit.phtml | 2 +- .../product/edit/action/inventory.phtml | 16 +- .../catalog/product/edit/price/group.phtml | 2 +- .../catalog/product/edit/price/tier.phtml | 2 +- .../CATALOG_PRODUCT_COMPOSITE_CONFIGURE.xml | 7 + ...ALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR.xml | 7 + ...ATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT.xml | 7 + .../view/adminhtml/product/edit/tabs.phtml | 1 + .../view/{frontend => base}/js/msrp.js | 0 .../view/{frontend => base}/js/tier-price.js | 0 .../layout/catalog_product_prices.xml | 4 + .../Catalog/view/base/layout/default.xml} | 14 +- .../view/base/layout/empty.xml} | 17 +- .../product/price/amount/default.phtml | 31 +- .../product/price/amount/option.phtml | 0 .../product/price/configured_price.phtml} | 24 +- .../product/price/final_price.phtml | 14 +- .../product/price/msrp_price.phtml | 53 +- .../product/price/tier_prices.phtml | 8 +- .../Catalog/view/frontend/js/components.phtml | 99 + .../Catalog/view/frontend/js/date-option.js | 3 + .../Catalog/view/frontend/js/price-option.js | 7 +- .../frontend/layout/MAP_price_msrp_item.xml | 41 - .../layout/MAP_price_msrp_wishlist_item.xml | 34 - .../frontend/layout/catalog_product_view.xml | 5 - .../Catalog/view/frontend/layout/default.xml | 26 +- .../view/frontend/product/compare/list.phtml | 23 +- .../frontend/product/compare/sidebar.phtml | 20 +- .../view/frontend/product/gallery.phtml | 9 +- .../view/frontend/product/list/items.phtml | 22 +- .../Catalog/view/frontend/product/price.phtml | 387 -- .../view/frontend/product/price_msrp.phtml | 41 +- .../frontend/product/price_msrp_item.phtml | 55 +- .../frontend/product/price_msrp_noform.phtml | 41 +- .../view/frontend/product/view/addto.phtml | 8 +- .../frontend/product/view/addtocart.phtml | 11 +- .../frontend/product/view/base-image.phtml | 62 +- .../view/frontend/product/view/form.phtml | 4 +- .../view/frontend/product/view/options.phtml | 4 +- .../product/view/options/type/date.phtml | 16 +- .../product/view/options/type/file.phtml | 26 +- .../frontend/product/view/price_clone.phtml | 2 +- .../frontend/product/view/tierprices.phtml | 228 - .../Block/Adminhtml/Form/Field/Stock.php | 2 +- .../Pricing/Price/CatalogRulePrice.php | 21 +- app/code/Magento/CatalogRule/etc/di.xml | 13 +- .../view/frontend/advanced/form.phtml | 35 +- .../view/frontend/form.mini.phtml | 19 +- .../Magento/Checkout/Block/Cart/Crosssell.php | 9 +- .../Checkout/Block/Cart/Item/Renderer.php | 53 +- .../Checkout/view/frontend/cart/coupon.phtml | 24 +- .../Checkout/view/frontend/cart/form.phtml | 39 +- .../cart/item/configure/updatecart.phtml | 16 +- .../view/frontend/cart/item/default.phtml | 24 +- .../view/frontend/cart/minicart.phtml | 14 +- .../view/frontend/cart/shipping.phtml | 30 +- .../view/frontend/js/components.phtml | 33 +- .../layout/checkout_cart_configure.xml | 3 + .../Checkout/view/frontend/onepage.phtml | 29 +- .../view/frontend/onepage/billing.phtml | 22 +- .../view/frontend/onepage/login.phtml | 31 +- .../view/frontend/onepage/shipping.phtml | 22 +- .../data/cms_setup/data-install-1.6.0.0.php | 4 +- .../Block/Product/View/Type/Configurable.php | 281 +- .../ConfigurableProduct/Helper/Data.php | 91 + .../Pricing/Price/AttributePrice.php | 316 + .../Pricing/Price/AttributePriceInterface.php | 47 + .../Magento/ConfigurableProduct/etc/di.xml | 23 + .../ConfigurableProduct/etc/module.xml | 1 + .../catalog/product/edit/super/matrix.phtml | 2 +- .../view/adminhtml/js/configurable.js | 32 +- .../product/configurable/stock/disabler.phtml | 2 +- .../view/frontend/js/components.phtml | 41 + .../view/frontend/js/configurable.js | 20 +- ...catalog_product_view_type_configurable.xml | 3 + .../view/type/options/configurable.phtml | 7 +- .../Magento/Contact/view/frontend/form.phtml | 17 +- app/code/Magento/Core/etc/di.xml | 2 +- .../Core/view/frontend/require_cookie.phtml | 4 +- .../Cron/Model/Config/Converter/Db.php | 2 +- .../Cron/Model/Config/Converter/Xml.php | 24 + app/code/Magento/Cron/Model/Observer.php | 6 +- app/code/Magento/Cron/Model/Schedule.php | 21 +- app/code/Magento/Cron/etc/crontab.xsd | 1 + .../Customer/Controller/Adminhtml/Index.php | 2 +- .../Magento/Customer/Model/Resource/Group.php | 3 +- .../Customer/view/frontend/address/book.phtml | 12 +- .../Customer/view/frontend/address/edit.phtml | 30 +- .../view/frontend/form/confirmation.phtml | 14 +- .../Customer/view/frontend/form/edit.phtml | 72 +- .../view/frontend/form/forgotpassword.phtml | 18 +- .../Customer/view/frontend/form/login.phtml | 18 +- .../view/frontend/form/register.phtml | 83 +- .../form/resetforgottenpassword.phtml | 18 +- .../view/frontend/js/components.phtml | 56 + .../layout/customer_account_create.xml | 3 + .../frontend/layout/customer_account_edit.xml | 3 + .../frontend/layout/customer_address_form.xml | 3 + .../layout/customer_address_index.xml | 3 + .../Customer/view/frontend/set-password.js | 3 + .../Block/Catalog/Product/Links.php | 108 +- .../Downloadable/Pricing/Price/LinkPrice.php | 4 +- .../Pricing/Price/LinkPriceInterface.php | 7 - app/code/Magento/Downloadable/etc/di.xml | 23 +- .../composite/fieldset/downloadable.phtml | 2 +- .../view/frontend/catalog/product/links.phtml | 21 +- .../view/frontend/downloadable.js | 13 +- .../view/frontend/js/components.phtml} | 26 +- ...catalog_product_view_type_downloadable.xml | 3 + .../Controller/Adminhtml/Email/Template.php | 1 + .../Magento/Email/Model/Template/Filter.php | 28 +- .../GiftMessage/view/frontend/inline.phtml | 41 +- .../Product/Composite/Fieldset/Grouped.php | 7 +- .../Block/Product/View/Type/Grouped.php | 26 - .../Pricing/Price/FinalPrice.php | 88 +- app/code/Magento/GroupedProduct/etc/di.xml | 23 +- .../GroupedProduct/etc/frontend/di.xml | 47 - .../layout/catalog_product_grouped.xml | 5 + .../adminhtml/product/grouped/grouped.phtml | 11 +- .../adminhtml/product/stock/disabler.phtml | 2 +- .../layout/catalog_product_prices.xml | 0 .../product/price/final_price.phtml | 2 +- .../frontend/product/view/type/grouped.phtml | 2 +- .../Magento/Install/view/install/begin.phtml | 4 +- .../Magento/Install/view/install/config.phtml | 12 +- .../Install/view/install/create_admin.phtml | 8 +- .../Magento/Install/view/install/locale.phtml | 4 +- .../Magento/Install/view/install/page.phtml | 2 +- .../frontend/checkout/address/select.phtml | 8 +- .../view/frontend/checkout/addresses.phtml | 15 +- .../view/frontend/checkout/billing.phtml | 32 +- .../view/frontend/checkout/overview.phtml | 7 +- .../view/frontend/js/components.phtml | 40 + .../multishipping_checkout_addresses.xml | 3 + .../layout/multishipping_checkout_billing.xml | 3 + .../view/frontend/js/components.phtml} | 26 +- .../view/frontend/layout/default.xml | 3 + .../Newsletter/view/frontend/subscribe.phtml | 18 +- .../view/frontend/form/ccsave.phtml | 11 +- .../PageCache/view/frontend/javascript.phtml | 4 +- .../view/frontend/js/components.phtml} | 33 +- .../view/frontend/layout/default.xml | 3 + .../Payment/Model/Checks/CanUseCheckout.php | 5 +- .../Payment/Model/Checks/CanUseForCountry.php | 5 +- .../Model/Checks/CanUseForCurrency.php | 5 +- .../Payment/Model/Checks/CanUseInternal.php | 5 +- .../Payment/Model/Checks/Composite.php | 5 +- .../Checks/PaymentMethodChecksInterface.php | 78 + .../Model/Checks/SpecificationInterface.php | 7 +- .../Payment/Model/Checks/TotalMinMax.php | 5 +- .../Payment/Model/Checks/ZeroTotal.php | 5 +- .../Payment/Model/Method/AbstractMethod.php | 4 +- .../Payment/view/frontend/form/cc.phtml | 11 +- .../Adminhtml/Customer/Edit/Tab/Agreement.php | 5 +- .../Paypal/view/frontend/express/review.phtml | 17 +- .../frontend/express/review/address.phtml | 26 +- .../view/frontend/express/shortcut.phtml | 18 +- .../Paypal/view/frontend/js/components.phtml | 46 + .../layout/checkout_onepage_index.xml | 3 + .../frontend/layout/paypal_express_review.xml | 4 + .../layout/paypal_payflowexpress_review.xml | 3 + .../Paypal/view/frontend/onepage.phtml | 12 +- .../view/frontend/payflowexpress/review.phtml | 21 +- .../view/frontend/js/components.phtml | 40 + .../layout/checkout_onepage_index.xml | 3 + .../layout/customer_account_create.xml | 3 + .../layout/customer_account_login.xml | 3 + .../view/frontend/remember_me_tooltip.phtml | 14 +- .../Block/Email/AbstractEmail.php | 45 + app/code/Magento/ProductAlert/Model/Email.php | 13 +- .../Magento/ProductAlert/Model/Observer.php | 1 + app/code/Magento/ProductAlert/etc/crontab.xml | 4 +- .../view/frontend/email/price.phtml | 21 +- .../view/frontend/email/stock.phtml | 18 +- .../Model/Plugin/ZeroTotal.php | 17 +- .../Reports/Block/Product/AbstractProduct.php | 7 +- .../Reports/Block/Product/Widget/Compared.php | 5 - .../Block/Product/Widget/Viewed/Item.php | 15 - .../reports_setup/data-install-1.6.0.0.php | 24 +- app/code/Magento/Reports/etc/module.xml | 1 - .../Reports/view/frontend/js/components.phtml | 40 + .../Reports/view/frontend/layout/default.xml | 3 + .../view/frontend/product/widget/viewed.phtml | 7 +- .../Magento/Review/Block/Customer/View.php | 7 +- .../Magento/Review/Block/Product/View.php | 7 +- app/code/Magento/Review/Block/View.php | 7 +- .../sql/review_setup/install-1.6.0.0.php | 12 +- .../Review/view/adminhtml/js/rating.js | 3 +- .../view/adminhtml/rating/detailed.phtml | 3 +- .../view/adminhtml/rating/validation-rules.js | 32 +- .../Magento/Review/view/frontend/form.phtml | 26 +- .../Rss/Block/Catalog/AbstractCatalog.php | 63 +- .../Magento/Rss/Block/Catalog/Category.php | 3 +- .../Magento/Rss/Block/Catalog/NewCatalog.php | 3 +- .../Magento/Rss/Block/Catalog/Special.php | 20 +- app/code/Magento/Rss/Block/Wishlist.php | 28 +- .../view/frontend/layout/rss_catalog_new.xml | 13 +- .../frontend/layout/rss_index_wishlist.xml | 10 +- .../Adminhtml/Order/Create/Items/Grid.php | 8 +- .../Sales/view/frontend/guest/form.phtml | 11 +- .../Sales/view/frontend/js/components.phtml | 49 + .../Sales/view/frontend/layout/default.xml | 3 + .../Sales/view/frontend/order/items.phtml | 4 +- .../Sales/view/frontend/reorder/sidebar.phtml | 16 +- .../view/frontend/widget/guest/form.phtml | 11 +- .../Sendfriend/view/frontend/send.phtml | 34 +- app/code/Magento/Store/Model/Storage/Db.php | 2 +- app/code/Magento/Tax/Model/Calculation.php | 16 +- app/code/Magento/Tax/Pricing/Adjustment.php | 7 +- .../Pricing/Price/Plugin/AttributePrice.php | 100 + .../Magento/Tax/Pricing/Render/Adjustment.php | 13 +- app/code/Magento/Tax/etc/di.xml | 3 + app/code/Magento/Tax/etc/module.xml | 1 + .../layout/catalog_product_prices.xml | 0 .../pricing/adjustment.phtml | 11 +- .../pricing/adjustment/bundle.phtml | 1 - .../pricing/adjustment/downloadable.phtml | 3 +- .../Theme/view/frontend/html/notices.phtml | 17 +- .../Theme/view/frontend/js/components.phtml | 3 + .../Theme/view/frontend/js/cookie.phtml | 15 +- .../frontend/layout/default_head_blocks.xml | 12 +- .../email/password_reset_confirmation.html | 2 +- .../activate/permissions/tab/webapi.phtml | 8 +- app/code/Magento/Weee/Helper/Data.php | 27 - app/code/Magento/Weee/Pricing/Adjustment.php | 10 +- .../Weee/Pricing/Render/Adjustment.php | 24 +- .../Weee/view/adminhtml/renderer/tax.phtml | 2 +- .../layout/catalog_product_prices.xml | 0 .../pricing/adjustment.phtml | 6 +- .../Magento/Widget/Block/Adminhtml/Widget.php | 1 + .../Magento/Widget/Model/Template/Filter.php | 5 +- .../Magento/Wishlist/Block/AbstractBlock.php | 56 +- .../Wishlist/Block/Customer/Wishlist.php | 7 +- .../Block/Customer/Wishlist/Item/Column.php | 8 +- .../Customer/Wishlist/Item/Column/Cart.php | 8 +- .../Block/Customer/Wishlist/Item/Options.php | 15 +- .../Block/Customer/Wishlist/Items.php | 12 +- .../Magento/Wishlist/Block/Share/Wishlist.php | 7 +- app/code/Magento/Wishlist/Model/Item.php | 13 +- .../view/frontend/item/column/cart.phtml | 13 +- .../view/frontend/item/configure/addto.phtml | 8 +- .../Wishlist/view/frontend/item/list.phtml | 1 + .../view/frontend/js/components.phtml | 47 + .../Wishlist/view/frontend/layout/default.xml | 3 + .../wishlist_index_configure_type_bundle.xml | 39 +- ...list_index_configure_type_configurable.xml | 3 + .../frontend/layout/wishlist_index_index.xml | 4 +- .../render/item/price_msrp_item.phtml | 37 +- .../Wishlist/view/frontend/shared.phtml | 9 +- .../Wishlist/view/frontend/sharing.phtml | 17 +- .../Wishlist/view/frontend/sidebar.phtml | 23 +- .../Magento/Wishlist/view/frontend/view.phtml | 40 +- .../Magento_Backend/layout/default.xml | 5 - .../all.less => blank/css/source/price.less} | 49 +- .../frontend/Magento/blank/css/styles.less | 1 + .../layout/checkout_cart_index.xml | 49 - .../Magento_Customer/layout/default.xml | 34 - .../controls/image_sizing.xml | 787 --- .../controls/quick_styles.xml | 1116 ---- .../layout/catalog_product_view.xml | 44 - .../layout/catalog_product_view.xml | 38 - .../layout/review_product_list.xml | 33 - .../plushe/Magento_Theme/layout/default.xml | 50 - .../layout/default_head_blocks.xml | 77 - .../frontend/Magento/plushe/css/print.css | 157 - .../plushe/css/source/clearless/arrows.less | 172 - .../plushe/css/source/clearless/grids.less | 186 - .../plushe/css/source/clearless/helpers.less | 248 - .../plushe/css/source/clearless/icons.less | 327 - .../plushe/css/source/clearless/resets.less | 307 - .../plushe/css/source/clearless/settings.less | 50 - .../plushe/css/source/clearless/sprites.less | 75 - .../css/source/clearless/typography.less | 66 - .../plushe/css/source/lib/buttons.less | 136 - .../Magento/plushe/css/source/lib/forms.less | 817 --- .../Magento/plushe/css/source/lib/grids.less | 384 -- .../Magento/plushe/css/source/lib/icons.less | 73 - .../plushe/css/source/lib/messages.less | 565 -- .../plushe/css/source/lib/navigation.less | 817 --- .../plushe/css/source/lib/sections.less | 203 - .../plushe/css/source/lib/snippets.less | 552 -- .../css/source/responsive/responsive.less | 2378 ------- .../plushe/css/source/styles/base.less | 427 -- .../plushe/css/source/styles/magento.less | 1549 ----- .../Magento/plushe/css/source/vars.less | 283 - .../frontend/Magento/plushe/css/styles.less | 5713 ----------------- .../frontend/Magento/plushe/fonts/.htaccess | 13 - .../Magento/plushe/fonts/icons/icons.dev.svg | 99 - .../Magento/plushe/fonts/icons/icons.eot | Bin 4344 -> 0 bytes .../Magento/plushe/fonts/icons/icons.svg | 99 - .../Magento/plushe/fonts/icons/icons.ttf | Bin 4188 -> 0 bytes .../Magento/plushe/fonts/icons/icons.woff | Bin 5220 -> 0 bytes .../Magento/plushe/fonts/marvel/OFL.txt | 93 - .../marvel/marvel-400-normal-webfont.eot | Bin 19062 -> 0 bytes .../marvel/marvel-400-normal-webfont.svg | 213 - .../marvel/marvel-400-normal-webfont.ttf | Bin 42136 -> 0 bytes .../marvel/marvel-400-normal-webfont.woff | Bin 21960 -> 0 bytes .../sourcesanspro-200-normal-webfont.eot | Bin 24029 -> 0 bytes .../sourcesanspro-200-normal-webfont.svg | 245 - .../sourcesanspro-200-normal-webfont.ttf | Bin 54196 -> 0 bytes .../sourcesanspro-200-normal-webfont.woff | Bin 26796 -> 0 bytes .../sourcesanspro-400-normal-webfont.eot | Bin 24107 -> 0 bytes .../sourcesanspro-400-normal-webfont.svg | 245 - .../sourcesanspro-400-normal-webfont.ttf | Bin 54820 -> 0 bytes .../sourcesanspro-400-normal-webfont.woff | Bin 26984 -> 0 bytes .../sourcesanspro-600-normal-webfont.eot | Bin 24228 -> 0 bytes .../sourcesanspro-600-normal-webfont.svg | 245 - .../sourcesanspro-600-normal-webfont.ttf | Bin 54012 -> 0 bytes .../sourcesanspro-600-normal-webfont.woff | Bin 27116 -> 0 bytes .../sourcesanspro-700-normal-webfont.eot | Bin 23844 -> 0 bytes .../sourcesanspro-700-normal-webfont.svg | 245 - .../sourcesanspro-700-normal-webfont.ttf | Bin 53496 -> 0 bytes .../sourcesanspro-700-normal-webfont.woff | Bin 26700 -> 0 bytes .../frontend/Magento/plushe/i18n/en_US.csv | 4 - .../Magento/plushe/images/banner1.jpg | Bin 27699 -> 0 bytes .../Magento/plushe/images/banner2.jpg | Bin 20777 -> 0 bytes .../Magento/plushe/images/banner3.jpg | Bin 11208 -> 0 bytes .../Magento/plushe/images/banner4.jpg | Bin 18920 -> 0 bytes .../Magento/plushe/images/blog_bg.png | Bin 2999 -> 0 bytes .../plushe/images/express-checkout-retina.png | Bin 19622 -> 0 bytes .../Magento/plushe/images/header-bg.jpg | Bin 21105 -> 0 bytes .../Magento/plushe/images/info_photo.jpg | Bin 7859 -> 0 bytes .../frontend/Magento/plushe/images/loader.gif | Bin 477 -> 0 bytes .../frontend/Magento/plushe/images/logo.gif | Bin 3454 -> 0 bytes .../Magento/plushe/images/logo_notext.gif | Bin 1964 -> 0 bytes .../Magento/plushe/images/main_image1.jpg | Bin 147971 -> 0 bytes .../Magento/plushe/images/social-links.png | Bin 7564 -> 0 bytes .../Magento/plushe/images/texture.png | Bin 81548 -> 0 bytes .../Magento/plushe/js/jquery.dropdowns.js | 110 - .../Magento/plushe/js/navigation-menu.js | 557 -- .../frontend/Magento/plushe/js/responsive.js | 130 - .../frontend/Magento/plushe/js/sticky.js | 59 - app/design/frontend/Magento/plushe/js/tabs.js | 169 - .../frontend/Magento/plushe/js/theme.js | 125 - .../frontend/Magento/plushe/mage/gallery.css | 223 - .../frontend/Magento/plushe/media/preview.jpg | Bin 113913 -> 12683 bytes app/design/frontend/Magento/plushe/theme.xml | 3 +- app/design/frontend/Magento/plushe/view.xml | 298 - .../Magento/TestFramework/Event/PhpUnit.php | 63 +- dev/tests/integration/framework/bootstrap.php | 7 +- .../tests/unit/framework/bootstrap.php | 2 +- .../Cleanup/TestCasePropertiesTest.php | 2 +- .../Catalog/Block/Product/AbstractTest.php | 42 - .../Magento/Cron/Model/ObserverTest.php | 3 + .../Controller/Adminhtml/IndexTest.php | 9 + .../Block/Catalog/Product/LinksTest.php | 176 - .../Adminhtml/Email/TemplateTest.php | 46 + .../Email/Model/Template/FilterTest.php | 7 + .../Magento/Framework/Code/GeneratorTest.php | 2 +- .../Controller/Adminhtml/Order/CreateTest.php | 6 +- .../Test/Integrity/Modular/ViewFilesTest.php | 6 +- .../Integrity/Theme/TemplateFilesTest.php | 1 - .../Block/Customer/Wishlist/ItemsTest.php | 20 +- dev/tests/js/jsTestDriverOrder.php | 2 +- dev/tests/js/pj | 0 dev/tests/js/run_js_tests.php | 2 +- dev/tests/performance/framework/bootstrap.php | 2 +- .../tests/unit/framework/bootstrap.php | 2 +- .../CodingStandard/Tool/CodeSniffer.php | 1 + .../Utility/AggregateInvoker.php | 2 +- .../Magento/TestFramework/Utility/Classes.php | 2 +- dev/tests/static/framework/bootstrap.php | 4 +- .../Utility/AggregateInvokerTest.php | 7 +- .../Magento/Test/Integrity/ClassesTest.php | 1 + .../Test/Integrity/Di/CompilerTest.php | 2 +- .../Test/Integrity/Layout/HandlesTest.php | 4 +- .../Integrity/_files/blacklist/namespace.txt | 3 + .../Integrity/_files/blacklist/reference.txt | 1 + .../Magento/Test/Legacy/LayoutTest.php | 1 - .../Test/Legacy/_files/obsolete_classes.php | 2 + .../Test/Legacy/_files/obsolete_constants.php | 10 + .../Test/Legacy/_files/obsolete_methods.php | 18 + .../Legacy/_files/obsolete_properties.php | 2 + .../Magento/Test/Legacy/_files/words_ce.xml | 33 + .../Php/_files/phpcs/whitelist/common.txt | 9 +- .../TestFramework/Listener/GarbageCleanup.php | 9 + dev/tests/unit/framework/bootstrap.php | 2 +- .../tests/unit/framework/bootstrap.php | 2 +- .../Catalog/Product/View/Type/BundleTest.php | 3 +- .../Pricing/Adjustment/CalculatorTest.php | 96 +- .../Bundle/Pricing/Price/BasePriceTest.php | 14 +- .../Pricing/Price/BundleOptionPriceTest.php | 400 ++ .../Price/BundleSelectionFactoryTest.php | 10 +- .../Price/BundleSelectionPriceTest.php | 10 +- .../Bundle/Pricing/Price/FinalPriceTest.php | 22 +- .../Bundle/Pricing/Price/GroupPriceTest.php | 4 +- .../Bundle/Pricing/Price/SpecialPriceTest.php | 10 +- .../Bundle/Pricing/Price/TierPriceTest.php | 4 +- .../Pricing/Render/FinalPriceBoxTest.php | 2 +- .../Product/Flat/Action/EraserTest.php | 109 + .../Indexer/Product/Flat/Action/RowTest.php | 93 +- .../Model/Product/Option/Type/FileTest.php | 114 + .../Magento/Catalog/Model/ProductTest.php | 9 + .../Catalog/Pricing/Price/BasePriceTest.php | 16 +- ...riceTest.php => CustomOptionPriceTest.php} | 99 +- .../Catalog/Pricing/Price/FinalPriceTest.php | 21 +- .../Catalog/Pricing/Price/GroupPriceTest.php | 35 +- .../Pricing/Price/RegularPriceTest.php | 23 +- .../Pricing/Price/SpecialPriceTest.php | 12 +- .../Catalog/Pricing/Price/TierPriceTest.php | 17 +- .../Pricing/Render/FinalPriceBoxTest.php | 157 +- .../Catalog/Pricing/Render/PriceBoxTest.php | 10 +- .../Magento/Catalog/Pricing/RenderTest.php | 8 +- .../Pricing/Price/CatalogRulePriceTest.php | 10 +- .../Checkout/Block/Cart/Item/RendererTest.php | 60 +- .../Magento/Checkout/Helper/DataTest.php | 40 +- .../Pricing/Price/AttributePriceTest.php | 392 ++ .../Cron/Model/Config/Converter/DbTest.php | 24 +- .../Cron/Model/Config/Converter/XmlTest.php | 22 +- .../Cron/Model/Config/Reader/DbTest.php | 2 +- .../Magento/Cron/Model/Config/XsdTest.php | 3 +- .../Model/Config/_files/crontab_valid.xml | 3 + .../Magento/Cron/Model/ObserverTest.php | 17 +- .../Model/ImportExport/Import/AddressTest.php | 8 +- .../Customer/Model/Resource/GroupTest.php | 96 + .../Import/CustomerComposite/DataTest.php | 6 +- .../Magento/Dhl/Model/CarrierTest.php | 14 +- .../Block/Catalog/Product/LinksTest.php | 178 +- .../Pricing/Price/LinkPriceTest.php | 10 +- .../Model/Validator/Attribute/DataTest.php | 11 - .../Framework/Autoload/IncludePathTest.php | 12 +- .../Cache/Frontend/Adapter/ZendTest.php | 4 +- .../Cache/Frontend/Decorator/BareTest.php | 6 +- .../Cache/Frontend/Decorator/ProfilerTest.php | 4 +- .../Code/Generator/EntityAbstractTest.php | 6 +- .../Framework/Code/Generator/IoTest.php | 2 +- .../Magento/Framework/Code/GeneratorTest.php | 10 +- .../Framework/DB/Adapter/Pdo/MysqlTest.php | 10 +- .../Data/Form/Element/AbstractElementTest.php | 667 ++ .../Data/Form/Element/ButtonTest.php | 100 + .../Data/Form/Element/CheckboxTest.php | 102 + .../Form/Element/CollectionFactoryTest.php | 66 + .../Data/Form/Element/ColumnTest.php | 74 + .../Framework/Data/Form/Element/FileTest.php | 75 + .../Data/Form/Element/HiddenTest.php | 87 + .../Framework/Data/Form/Element/ImageTest.php | 113 + .../Data/Form/Element/ImagefileTest.php | 74 + .../Framework/Data/Form/Element/LabelTest.php | 83 + .../Framework/Data/Form/Element/LinkTest.php | 134 + .../Framework/Data/Form/Element/NoteTest.php | 91 + .../Data/Form/Element/ObscureTest.php | 111 + .../Data/Form/Element/PasswordTest.php | 85 + .../Framework/Data/Form/Element/RadioTest.php | 75 + .../Framework/Data/Form/Element/ResetTest.php | 75 + .../Data/Form/Element/SubmitTest.php | 85 + .../Framework/Data/Form/Element/TextTest.php | 111 + .../Data/Form/Element/TextareaTest.php | 114 + .../Pricing/Adjustment/CalculatorTest.php | 86 +- .../Pricing/Adjustment/CollectionTest.php | 3 + .../Pricing/Adjustment/FactoryTest.php | 7 +- .../Framework/Pricing/Adjustment/PoolTest.php | 5 +- .../Framework/Pricing/Amount/BaseTest.php | 3 + .../Pricing/Price/AbstractPriceTest.php | 127 + .../Pricing/Price/CollectionTest.php | 121 + .../Framework/Pricing/Price/FactoryTest.php | 28 +- .../Framework/Pricing/Price/PoolTest.php | 120 + .../Magento/Framework/Pricing/Price/Stub.php | 46 + .../Framework/Pricing/PriceCompositeTest.php | 113 - .../Framework/Pricing/PriceInfo/BaseTest.php | 104 +- .../Pricing/PriceInfo/FactoryTest.php | 185 +- .../Pricing/Render/AbstractAdjustmentTest.php | 137 +- .../Framework/Pricing/Render/AmountTest.php | 120 +- .../Framework/Pricing/Render/LayoutTest.php | 3 + .../Framework/Pricing/Render/PriceBoxTest.php | 75 +- .../Pricing/Render/RendererPoolTest.php | 17 +- .../Magento/Framework/Pricing/RenderTest.php | 17 + .../Magento/Framework/ProfilerTest.php | 2 +- .../View/Design/Fallback/FactoryTest.php | 9 +- .../Strategy/Fallback/CachingProxyTest.php | 6 +- .../View/Layout/File/FactoryTest.php | 27 +- .../View/Layout/File/Source/BaseTest.php | 152 +- .../Layout/File/Source/Override/BaseTest.php | 14 +- .../Layout/File/Source/Override/ThemeTest.php | 20 +- .../Framework/View/Layout/FileTest.php | 4 +- .../Magento/Framework/View/UrlTest.php | 4 +- .../Model/Config/Source/LanguageTest.php | 190 - .../Block/Product/View/Type/GroupedTest.php | 84 +- .../Pricing/Price/FinalPriceTest.php | 120 +- .../Magento/PageCache/Model/ObserverTest.php | 17 +- .../Magento/Paypal/Model/IpnTest.php | 3 + .../Rss/Block/Catalog/CategoryTest.php | 147 + .../Rss/Block/Catalog/NewCatalogTest.php | 149 + .../Magento/Rss/Block/Catalog/SpecialTest.php | 271 + .../Magento/Rss/Block/WishlistTest.php | 404 ++ .../Sales/Controller/Adminhtml/OrderTest.php | 24 +- .../Magento/Sales/Model/Quote/ItemTest.php | 6 +- .../Magento/Store/Model/Storage/DbTest.php | 5 +- .../Magento/Tax/Pricing/AdjustmentTest.php | 154 +- .../Price/Plugin/AttributePriceTest.php | 175 + .../Tax/Pricing/Render/AdjustmentTest.php | 95 +- .../Magento/Usps/Model/CarrierTest.php | 12 +- .../Magento/Weee/Pricing/AdjustmentTest.php | 167 +- .../Weee/Pricing/Render/AdjustmentTest.php | 2 +- .../Tools/Dependency/generate/bootstrap.php | 8 +- dev/tools/Magento/Tools/Di/compiler.php | 2 +- .../Magento/Tools/Di/entity_generator.php | 2 +- dev/tools/Magento/Tools/Layout/xmlUpdater.php | 2 +- dev/tools/Magento/Tools/Migration/Acl/db.php | 2 +- .../Magento/Tools/Migration/system_config.php | 3 +- dev/tools/Magento/Tools/View/generator.php | 2 +- dev/tools/bootstrap.php | 2 +- dev/tools/layout/xml-updater.php | 2 +- lib/Magento/Framework/App/Http.php | 2 +- .../Framework/App/ObjectManagerFactory.php | 2 +- lib/Magento/Framework/AppInterface.php | 2 +- .../Framework/Autoload/IncludePath.php | 12 +- lib/Magento/Framework/Code/Generator.php | 2 +- .../Framework/Code/Generator/Autoloader.php | 2 +- .../Code/Generator/EntityAbstract.php | 4 +- lib/Magento/Framework/Code/Generator/Io.php | 2 +- .../Framework/Data/Form/Element/Label.php | 3 +- .../Framework/Data/Form/Element/Note.php | 9 +- .../Framework/Filesystem/File/ReadFactory.php | 3 +- .../Framework/Less/File/Source/Base.php | 2 +- .../Framework/Less/File/Source/Theme.php | 2 +- .../Adjustment/AdjustmentInterface.php | 2 + .../Pricing/Adjustment/Calculator.php | 5 + .../Adjustment/CalculatorInterface.php | 2 + .../Pricing/Adjustment/Collection.php | 4 +- .../Framework/Pricing/Adjustment/Factory.php | 6 +- .../Framework/Pricing/Adjustment/Pool.php | 2 + .../Pricing/Amount/AmountInterface.php | 2 + lib/Magento/Framework/Pricing/Amount/Base.php | 8 +- .../Pricing/Object/SaleableInterface.php | 23 +- .../Framework/Pricing/Price/AbstractPrice.php | 134 + .../Price/BasePriceProviderInterface.php | 35 + .../Framework/Pricing/Price/Collection.php | 149 + .../Framework/Pricing/Price/Factory.php | 6 +- lib/Magento/Framework/Pricing/Price/Pool.php | 162 + .../Pricing/Price/PriceInterface.php | 4 +- .../Framework/Pricing/PriceComposite.php | 89 - .../Pricing/PriceCurrencyInterface.php | 2 + .../Framework/Pricing/PriceInfo/Base.php | 110 +- .../Framework/Pricing/PriceInfo/Factory.php | 48 +- .../Framework/Pricing/PriceInfoInterface.php | 18 +- lib/Magento/Framework/Pricing/Render.php | 19 +- .../Pricing/Render/AbstractAdjustment.php | 6 +- .../Render/AdjustmentRenderInterface.php | 2 + .../Framework/Pricing/Render/Amount.php | 34 +- .../Pricing/Render/AmountRenderInterface.php | 9 +- .../Framework/Pricing/Render/Layout.php | 2 + .../Framework/Pricing/Render/PriceBox.php | 23 +- .../Render/PriceBoxRenderInterface.php | 2 + .../Framework/Pricing/Render/RendererPool.php | 4 +- lib/Magento/Framework/Url.php | 10 +- .../View/Design/Fallback/Factory.php | 6 +- lib/Magento/Framework/View/Layout/File.php | 16 +- .../Framework/View/Layout/File/Factory.php | 5 +- .../View/Layout/File/Source/Base.php | 21 +- .../View/Layout/PageType/Config/Converter.php | 6 +- pub/cron.php | 1 - pub/errors/404.php | 2 +- pub/errors/503.php | 2 +- pub/errors/noCache.php | 2 +- pub/errors/processor.php | 27 +- pub/errors/report.php | 2 +- pub/get.php | 19 +- pub/lib/headjs/head.load.min.js | 9 - 671 files changed, 12253 insertions(+), 28210 deletions(-) create mode 100644 app/code/Magento/Authorizenet/view/frontend/js/components.phtml delete mode 100644 app/code/Magento/Bundle/Block/Catalog/Product/View.php rename app/code/Magento/Bundle/Pricing/Price/{BundleSelectionPriceInterface.php => BasePriceInterface.php} (82%) create mode 100644 app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php rename app/code/Magento/Bundle/view/{frontend => base}/layout/catalog_product_prices.xml (100%) rename app/code/Magento/Bundle/view/{frontend => base}/product/price/final_price.phtml (73%) rename app/code/Magento/Bundle/view/{frontend => base}/product/price/selection/amount.phtml (100%) rename app/code/Magento/Bundle/view/{frontend => base}/product/price/tier_prices.phtml (100%) delete mode 100644 app/code/Magento/Bundle/view/frontend/catalog/product/price.phtml delete mode 100644 app/code/Magento/Bundle/view/frontend/catalog/product/view/price.phtml create mode 100644 app/code/Magento/Bundle/view/frontend/js/components.phtml delete mode 100644 app/code/Magento/Bundle/view/frontend/layout/catalog_product_compare_index.xml delete mode 100644 app/code/Magento/Bundle/view/frontend/layout/catalog_product_view.xml delete mode 100644 app/code/Magento/Bundle/view/frontend/layout/catalogsearch_advanced_result.xml delete mode 100644 app/code/Magento/Bundle/view/frontend/layout/checkout_cart_index.xml delete mode 100644 app/code/Magento/Bundle/view/frontend/layout/tag_product_list.xml rename app/code/Magento/{Catalog/view/frontend/product/view/price.phtml => Captcha/view/frontend/js/components.phtml} (69%) delete mode 100644 app/code/Magento/Catalog/Block/Product/Price/Template.php create mode 100644 app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php create mode 100644 app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php create mode 100644 app/code/Magento/Catalog/Pricing/Price/ConfiguredPrice.php rename dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/Stub/Order.php => app/code/Magento/Catalog/Pricing/Price/ConfiguredPriceInterface.php (67%) create mode 100644 app/code/Magento/Catalog/Pricing/Render/ConfiguredPriceBox.php rename app/code/Magento/Catalog/view/{frontend => base}/js/msrp.js (100%) rename app/code/Magento/Catalog/view/{frontend => base}/js/tier-price.js (100%) rename app/code/Magento/Catalog/view/{frontend => base}/layout/catalog_product_prices.xml (90%) rename app/{design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_category_view.xml => code/Magento/Catalog/view/base/layout/default.xml} (65%) rename app/code/Magento/{Bundle/view/frontend/layout/catalogsearch_result_index.xml => Catalog/view/base/layout/empty.xml} (64%) rename app/code/Magento/Catalog/view/{frontend => base}/product/price/amount/default.phtml (56%) rename app/code/Magento/Catalog/view/{frontend => base}/product/price/amount/option.phtml (100%) rename app/code/Magento/{Bundle/view/frontend/catalog/product/view/tierprices.phtml => Catalog/view/base/product/price/configured_price.phtml} (67%) rename app/code/Magento/Catalog/view/{frontend => base}/product/price/final_price.phtml (76%) rename app/code/Magento/Catalog/view/{frontend => base}/product/price/msrp_price.phtml (60%) rename app/code/Magento/Catalog/view/{frontend => base}/product/price/tier_prices.phtml (94%) create mode 100644 app/code/Magento/Catalog/view/frontend/js/components.phtml delete mode 100644 app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_item.xml delete mode 100644 app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_wishlist_item.xml delete mode 100644 app/code/Magento/Catalog/view/frontend/product/price.phtml delete mode 100644 app/code/Magento/Catalog/view/frontend/product/view/tierprices.phtml create mode 100644 app/code/Magento/ConfigurableProduct/Helper/Data.php create mode 100644 app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePrice.php create mode 100644 app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePriceInterface.php create mode 100644 app/code/Magento/ConfigurableProduct/view/frontend/js/components.phtml create mode 100644 app/code/Magento/Customer/view/frontend/js/components.phtml rename app/{design/frontend/Magento/plushe/Magento_Catalog/layout/default.xml => code/Magento/Downloadable/view/frontend/js/components.phtml} (66%) delete mode 100644 app/code/Magento/GroupedProduct/etc/frontend/di.xml rename app/code/Magento/GroupedProduct/view/{frontend => base}/layout/catalog_product_prices.xml (100%) rename app/code/Magento/GroupedProduct/view/{frontend => base}/product/price/final_price.phtml (95%) create mode 100644 app/code/Magento/Multishipping/view/frontend/js/components.phtml rename app/{design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_product_view.xml => code/Magento/Newsletter/view/frontend/js/components.phtml} (64%) rename app/code/Magento/{Bundle/view/frontend/layout/catalog_category_view.xml => PageCache/view/frontend/js/components.phtml} (60%) create mode 100644 app/code/Magento/Payment/Model/Checks/PaymentMethodChecksInterface.php create mode 100644 app/code/Magento/Paypal/view/frontend/js/components.phtml create mode 100644 app/code/Magento/Persistent/view/frontend/js/components.phtml create mode 100644 app/code/Magento/Reports/view/frontend/js/components.phtml create mode 100644 app/code/Magento/Sales/view/frontend/js/components.phtml create mode 100644 app/code/Magento/Tax/Pricing/Price/Plugin/AttributePrice.php rename app/code/Magento/Tax/view/{frontend => base}/layout/catalog_product_prices.xml (100%) rename app/code/Magento/Tax/view/{frontend => base}/pricing/adjustment.phtml (79%) rename app/code/Magento/Tax/view/{frontend => base}/pricing/adjustment/bundle.phtml (99%) rename app/code/Magento/Tax/view/{frontend => base}/pricing/adjustment/downloadable.phtml (99%) rename app/code/Magento/Weee/view/{frontend => base}/layout/catalog_product_prices.xml (100%) rename app/code/Magento/Weee/view/{frontend => base}/pricing/adjustment.phtml (93%) create mode 100644 app/code/Magento/Wishlist/view/frontend/js/components.phtml rename app/design/frontend/Magento/{plushe/css/source/clearless/all.less => blank/css/source/price.less} (55%) delete mode 100644 app/design/frontend/Magento/plushe/Magento_Checkout/layout/checkout_cart_index.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_Customer/layout/default.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/image_sizing.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/quick_styles.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_Reports/layout/catalog_product_view.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_Review/layout/catalog_product_view.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_Review/layout/review_product_list.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_Theme/layout/default.xml delete mode 100644 app/design/frontend/Magento/plushe/Magento_Theme/layout/default_head_blocks.xml delete mode 100644 app/design/frontend/Magento/plushe/css/print.css delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/arrows.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/grids.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/helpers.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/icons.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/resets.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/settings.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/sprites.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/clearless/typography.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/buttons.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/forms.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/grids.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/icons.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/messages.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/navigation.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/sections.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/lib/snippets.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/responsive/responsive.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/styles/base.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/styles/magento.less delete mode 100644 app/design/frontend/Magento/plushe/css/source/vars.less delete mode 100644 app/design/frontend/Magento/plushe/css/styles.less delete mode 100644 app/design/frontend/Magento/plushe/fonts/.htaccess delete mode 100644 app/design/frontend/Magento/plushe/fonts/icons/icons.dev.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/icons/icons.eot delete mode 100644 app/design/frontend/Magento/plushe/fonts/icons/icons.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/icons/icons.ttf delete mode 100644 app/design/frontend/Magento/plushe/fonts/icons/icons.woff delete mode 100644 app/design/frontend/Magento/plushe/fonts/marvel/OFL.txt delete mode 100644 app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.eot delete mode 100644 app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.ttf delete mode 100644 app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.woff delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf delete mode 100644 app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff delete mode 100644 app/design/frontend/Magento/plushe/i18n/en_US.csv delete mode 100644 app/design/frontend/Magento/plushe/images/banner1.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/banner2.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/banner3.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/banner4.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/blog_bg.png delete mode 100644 app/design/frontend/Magento/plushe/images/express-checkout-retina.png delete mode 100644 app/design/frontend/Magento/plushe/images/header-bg.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/info_photo.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/loader.gif delete mode 100644 app/design/frontend/Magento/plushe/images/logo.gif delete mode 100644 app/design/frontend/Magento/plushe/images/logo_notext.gif delete mode 100644 app/design/frontend/Magento/plushe/images/main_image1.jpg delete mode 100644 app/design/frontend/Magento/plushe/images/social-links.png delete mode 100644 app/design/frontend/Magento/plushe/images/texture.png delete mode 100644 app/design/frontend/Magento/plushe/js/jquery.dropdowns.js delete mode 100644 app/design/frontend/Magento/plushe/js/navigation-menu.js delete mode 100644 app/design/frontend/Magento/plushe/js/responsive.js delete mode 100644 app/design/frontend/Magento/plushe/js/sticky.js delete mode 100644 app/design/frontend/Magento/plushe/js/tabs.js delete mode 100644 app/design/frontend/Magento/plushe/js/theme.js delete mode 100644 app/design/frontend/Magento/plushe/mage/gallery.css delete mode 100644 app/design/frontend/Magento/plushe/view.xml delete mode 100644 dev/tests/integration/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php delete mode 100644 dev/tests/js/pj create mode 100644 dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleOptionPriceTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/EraserTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Option/Type/FileTest.php rename dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/{OptionPriceTest.php => CustomOptionPriceTest.php} (75%) create mode 100644 dev/tests/unit/testsuite/Magento/ConfigurableProduct/Pricing/Price/AttributePriceTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Customer/Model/Resource/GroupTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/AbstractElementTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ButtonTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CheckboxTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CollectionFactoryTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ColumnTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/FileTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/HiddenTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImageTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImagefileTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LabelTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LinkTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/NoteTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ObscureTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/PasswordTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/RadioTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ResetTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/SubmitTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextareaTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/AbstractPriceTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/CollectionTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/PoolTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/Stub.php delete mode 100644 dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceCompositeTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/GoogleAdwords/Model/Config/Source/LanguageTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/CategoryTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/NewCatalogTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/SpecialTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Rss/Block/WishlistTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Tax/Pricing/Price/Plugin/AttributePriceTest.php create mode 100644 lib/Magento/Framework/Pricing/Price/AbstractPrice.php create mode 100644 lib/Magento/Framework/Pricing/Price/BasePriceProviderInterface.php create mode 100644 lib/Magento/Framework/Pricing/Price/Collection.php create mode 100644 lib/Magento/Framework/Pricing/Price/Pool.php delete mode 100644 lib/Magento/Framework/Pricing/PriceComposite.php delete mode 100644 pub/lib/headjs/head.load.min.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 4532e6f1855..644fd1a5c88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,61 @@ +2.0.0.0-dev76 +============= +* Pricing improvements: + * Eliminated code duplication from templates and implemented new calculation models for the following modules: + * ConfigurableProduct + * Wishlist + * Rss + * ProductAlert +* JavaScript improvements: + * Removed head.js usages from frontend + * Removed head.js usages from adminhtml +* Themes update: + * Plushe styles are removed, Plushe theme is now based on blank +* Fixed bugs: + * Unable to place order with product that contains custom option 'file' + * OnePageCheckout is not working if PayPal method is enabled to work via Payment Bridge + * Impossible to reset password for admin user (incorrect reset password link in email) + * Errors when deleting customer group specified as default one in the config + * A number of essential buttons do not work and block other functionality in Internet Explorer 10 + * "Insert Widget" button is missing in Insert Widget popup while creating CMS page + * Impossible to change status for rating in admin + * System email templates are not loaded when user creates new email template + * Billing Agreements tab displays during New Customer creation in admin panel + * Images are not displayed in WYSIWYG when editing default pages + * Error message "Asymmetric transaction rollback" when creating simple product with flat catalog product option enabled in config + * Fatal error when trying to preview sample(type=link) or view link for download(type="link") for downloadable product + * Customer is redirected to Home Page after adding new address during multiple address checkout if secure URLs are enabled for frontend in config + * Impossible to select value in the State/Province field in the customer registration form when customer uses multiple address checkout + * Manage Stock option is not editable when using mass action on several products in the admin panel + * Category is not displayed in layered navigation block when Flat Catalog is enabled in config +* GitHub requests: + * [#489] (https://github.com/magento/magento2/issues/489) -- PHPUnit 4.0 Compatibility + * [#535] (https://github.com/magento/magento2/issues/535) -- Image management for products +* Framework improvements: + * Covered Magento lib form elements with unit tests: + * `lib/Magento/Framework/Data/Form/Element/AbstractElement.php` + * `lib/Magento/Framework/Data/Form/Element/Button.php` + * `lib/Magento/Framework/Data/Form/Element/Checkbox.php` + * `lib/Magento/Framework/Data/Form/Element/CollectionFactory.php` + * `lib/Magento/Framework/Data/Form/Element/Column.php` + * `lib/Magento/Framework/Data/Form/Element/File.php` + * `lib/Magento/Framework/Data/Form/Element/Hidden.php` + * `lib/Magento/Framework/Data/Form/Element/Editablemultiselect.php` + * `lib/Magento/Framework/Data/Form/Element/Factory.php` + * `lib/Magento/Framework/Data/Form/Element/Image.php` + * `lib/Magento/Framework/Data/Form/Element/Imagefile.php` + * `lib/Magento/Framework/Data/Form/Element/Label.php` + * `lib/Magento/Framework/Data/Form/Element/Link.php` + * `lib/Magento/Framework/Data/Form/Element/Multiselect.php` + * `lib/Magento/Framework/Data/Form/Element/Note.php` + * `lib/Magento/Framework/Data/Form/Element/Obscure.php` + * `lib/Magento/Framework/Data/Form/Element/Password.php` + * `lib/Magento/Framework/Data/Form/Element/Radio.php` + * `lib/Magento/Framework/Data/Form/Element/Reset.php` + * `lib/Magento/Framework/Data/Form/Element/Submit.php` + * `lib/Magento/Framework/Data/Form/Element/Text.php` + * `lib/Magento/Framework/Data/Form/Element/Textarea.php` + 2.0.0.0-dev75 ============= * Modularity improvements: diff --git a/app/autoload.php b/app/autoload.php index 50d3ccd77cd..1a52fe5a9bc 100644 --- a/app/autoload.php +++ b/app/autoload.php @@ -24,4 +24,4 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ require_once __DIR__ . '/../lib/Magento/Framework/Autoload/IncludePath.php'; -spl_autoload_register('\Magento\Framework\Autoload\IncludePath::load'); +spl_autoload_register([new \Magento\Framework\Autoload\IncludePath(), 'load']); diff --git a/app/bootstrap.php b/app/bootstrap.php index 74f7d43835d..e356336ce0f 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -63,7 +63,7 @@ define('BP', dirname(__DIR__)); require_once BP . '/app/functions.php'; require_once __DIR__ . '/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(array(BP . '/app/code', BP . '/lib')); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath(array(BP . '/app/code', BP . '/lib')); $classMapPath = BP . '/var/classmap.ser'; if (file_exists($classMapPath)) { require_once BP . '/lib/Magento/Framework/Autoload/ClassMap.php'; diff --git a/app/code/Magento/Authorizenet/view/frontend/form/cc.phtml b/app/code/Magento/Authorizenet/view/frontend/form/cc.phtml index 9d67b54ee95..f45a4ccdb30 100644 --- a/app/code/Magento/Authorizenet/view/frontend/form/cc.phtml +++ b/app/code/Magento/Authorizenet/view/frontend/form/cc.phtml @@ -34,23 +34,16 @@ <?php if ($this->isPartialAuthorization()): ?> <?php echo $this->getChildHtml('cards') ?> - <div class="release-amounts" data-container="release-amounts"> + <div class="release-amounts" + data-container="release-amounts" + data-mage-init='{"authorizenetAuthenticate":{"partialAuthorizationConfirmationMessage": "<?php echo $this->getPartialAuthorizationConfirmationMessage()?>", + "cancelConfirmationMessage": "<?php echo $this->getCancelConfirmationMessage() ?>", + "cancelUrl": "<?php echo $this->getCancelUrl() ?>"}}'> <button class="button" type="button" id="payment-button-cancel" name="cancel"><span><span>Cancel</span></span></button> <span><?php echo __('To cancel pending authorizations and release amounts that have already been processed during this payment, click Cancel.') ?></span> </div> <?php echo $this->showNoticeMessage(__('Please enter a different credit card number to complete your purchase.')) ?> - <script type="text/javascript"> - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Authorizenet::authorizenet-authenticate.js') ?>", function () { - $('[data-container="release-amounts"]').authorizenetAuthenticate({ - partialAuthorizationConfirmationMessage: '<?php echo $this->getPartialAuthorizationConfirmationMessage()?>', - cancelConfirmationMessage: '<?php echo $this->getCancelConfirmationMessage() ?>', - cancelUrl: '<?php echo $this->getCancelUrl() ?>' - }); - }); - })(jQuery); - </script> <span id="cancel-please-wait" class="please-wait load indicator" style="display: none" data-text="<?php echo __('Processing...') ?>"> <span><?php echo __('Processing...') ?></span> </span> diff --git a/app/code/Magento/Authorizenet/view/frontend/js/components.phtml b/app/code/Magento/Authorizenet/view/frontend/js/components.phtml new file mode 100644 index 00000000000..920b70b475a --- /dev/null +++ b/app/code/Magento/Authorizenet/view/frontend/js/components.phtml @@ -0,0 +1,40 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + authorizenetAuthenticate: [ + '<?php echo $this->getViewFileUrl('Magento_Authorizenet::authorizenet-authenticate.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Authorizenet/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Authorizenet/view/frontend/layout/checkout_onepage_index.xml index 423ca04f8cc..738038f686f 100644 --- a/app/code/Magento/Authorizenet/view/frontend/layout/checkout_onepage_index.xml +++ b/app/code/Magento/Authorizenet/view/frontend/layout/checkout_onepage_index.xml @@ -31,4 +31,7 @@ </arguments> </block> </referenceBlock> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="authorizenet_page_head_components" template="Magento_Authorizenet::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php index a5e956d90a9..6c7ec0a722d 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php @@ -83,7 +83,7 @@ class Datetime extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Date { if ($this->getColumn()->getFilterTime()) { try { - $dateObj = $this->getLocaleDate()->date(null, null, $locale, false); + $dateObj = $this->_localeDate->date(null, null, $locale, false); //set default timezone for store (admin) $dateObj->setTimezone( @@ -96,7 +96,7 @@ class Datetime extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Date //set date with applying timezone of store $dateObj->set( $date, - $this->getLocaleDate()->getDateTimeFormat( + $this->_localeDate->getDateTimeFormat( \Magento\Framework\Stdlib\DateTime\TimezoneInterface::FORMAT_TYPE_SHORT ), $locale diff --git a/app/code/Magento/Backend/view/adminhtml/layout/default.xml b/app/code/Magento/Backend/view/adminhtml/layout/default.xml index fc4a5c1a427..176052180d4 100644 --- a/app/code/Magento/Backend/view/adminhtml/layout/default.xml +++ b/app/code/Magento/Backend/view/adminhtml/layout/default.xml @@ -44,9 +44,9 @@ <argument name="file" xsi:type="string">jquery/jquery-ui-1.9.2.js</argument> </arguments> </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="head-load-min-js"> + <block class="Magento\Theme\Block\Html\Head\Script" name="js-head-js"> <arguments> - <argument name="file" xsi:type="string">headjs/head.load.min.js</argument> + <argument name="file" xsi:type="string">headjs/head.min.js</argument> </arguments> </block> <block class="Magento\Theme\Block\Html\Head\Script" name="underscore-js"> diff --git a/app/code/Magento/Backend/view/adminhtml/media/uploader.phtml b/app/code/Magento/Backend/view/adminhtml/media/uploader.phtml index 0dc97108f1a..6d160e1fe1c 100644 --- a/app/code/Magento/Backend/view/adminhtml/media/uploader.phtml +++ b/app/code/Magento/Backend/view/adminhtml/media/uploader.phtml @@ -51,7 +51,7 @@ $(function () { $('#fileupload').fileupload({ dataType: 'json', - dropZone: '#media_gallery_content', + dropZone: '[data-tab-panel=image-management]', sequentialUploads: true, acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, maxFileSize: <?php echo $this->getFileSizeService()->getMaxFileSize() ?>, diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Bundle.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Bundle.php index 6aa9711f8ac..373a054f931 100644 --- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Bundle.php +++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Bundle.php @@ -27,10 +27,6 @@ namespace Magento\Bundle\Block\Adminhtml\Catalog\Product\Composite\Fieldset; /** * Adminhtml block for fieldset of bundle product - * - * @category Magento - * @package Magento_Adminhtml - * @author Magento Core Team <core@magentocommerce.com> */ class Bundle extends \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle { diff --git a/app/code/Magento/Bundle/Block/Catalog/Product/Price.php b/app/code/Magento/Bundle/Block/Catalog/Product/Price.php index 9e523dd38d3..0de8cb4ac4d 100644 --- a/app/code/Magento/Bundle/Block/Catalog/Product/Price.php +++ b/app/code/Magento/Bundle/Block/Catalog/Product/Price.php @@ -81,13 +81,13 @@ class Price extends \Magento\Catalog\Block\Product\Price */ public function isRatesGraterThenZero() { - $_request = $this->_taxCalc->getRateRequest(false, false, false); - $_request->setProductClassId($this->getProduct()->getTaxClassId()); - $defaultTax = $this->_taxCalc->getRate($_request); + $request = $this->_taxCalc->getRateRequest(false, false, false); + $request->setProductClassId($this->getProduct()->getTaxClassId()); + $defaultTax = $this->_taxCalc->getRate($request); - $_request = $this->_taxCalc->getRateRequest(); - $_request->setProductClassId($this->getProduct()->getTaxClassId()); - $currentTax = $this->_taxCalc->getRate($_request); + $request = $this->_taxCalc->getRateRequest(); + $request->setProductClassId($this->getProduct()->getTaxClassId()); + $currentTax = $this->_taxCalc->getRate($request); return floatval($defaultTax) > 0 || floatval($currentTax) > 0; } @@ -101,54 +101,14 @@ class Price extends \Magento\Catalog\Block\Product\Price public function displayBothPrices() { $product = $this->getProduct(); - if ($product->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC && - $product->getPriceModel()->getIsPricesCalculatedByIndex() !== false + if ($product->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC + && $product->getPriceModel()->getIsPricesCalculatedByIndex() !== false ) { return false; } return $this->_taxData->displayBothPrices(); } - /** - * Convert block to html string - * - * @return string - */ - protected function _toHtml() - { - $product = $this->getProduct(); - if ($this->getMAPTemplate() && $this->_catalogData->canApplyMsrp( - $product - ) && $product->getPriceType() != \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC - ) { - $hiddenPriceHtml = parent::_toHtml(); - if ($this->_catalogData->isShowPriceOnGesture($product)) { - $this->setWithoutPrice(true); - } - $realPriceHtml = parent::_toHtml(); - $this->unsWithoutPrice(); - $addToCartUrl = $this->getLayout()->getBlock('product.info.bundle')->getAddToCartUrl($product); - $product->setAddToCartUrl($addToCartUrl); - $html = $this->getLayout()->createBlock( - 'Magento\Catalog\Block\Product\Price' - )->setTemplate( - $this->getMAPTemplate() - )->setRealPriceHtml( - $hiddenPriceHtml - )->setPriceElementIdPrefix( - 'bundle-price-' - )->setIdSuffix( - $this->getIdSuffix() - )->setProduct( - $product - )->toHtml(); - - return $realPriceHtml . $html; - } - - return parent::_toHtml(); - } - /** * @param null|string|bool|int|\Magento\Store\Model\Store $storeId * @return bool|\Magento\Store\Model\Website diff --git a/app/code/Magento/Bundle/Block/Catalog/Product/View.php b/app/code/Magento/Bundle/Block/Catalog/Product/View.php deleted file mode 100644 index 917f0382cf5..00000000000 --- a/app/code/Magento/Bundle/Block/Catalog/Product/View.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_Bundle - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - */ - -namespace Magento\Bundle\Block\Catalog\Product; - -/** - * Product View block (to modify getTierPrices method) - */ -class View extends \Magento\Catalog\Block\Product\View -{ - /** - * Get tier prices (formatted) - * - * @param \Magento\Catalog\Model\Product|null $product - * @return array - * @deprecated - */ - public function getTierPrices($product = null) - { - if ($product === null) { - $product = $this->getProduct(); - } - - $res = array(); - - $prices = $product->getFormatedTierPrice(); - if (is_array($prices)) { - $store = $this->_storeManager->getStore(); - $specialPrice = $product->getSpecialPrice(); - $defaultDiscount = max($product->getGroupPrice(), $specialPrice ? 100 - $specialPrice : 0); - foreach ($prices as $price) { - if ($defaultDiscount < $price['price']) { - $price['price_qty'] += 0; - $price['savePercent'] = ceil(100 - $price['price']); - - $priceExclTax = $this->_taxData->getPrice($product, $price['website_price']); - $price['formated_price'] = $store->formatPrice($store->convertPrice($priceExclTax)); - - $priceInclTax = $this->_taxData->getPrice($product, $price['website_price'], true); - $price['formated_price_incl_tax'] = $store->formatPrice($store->convertPrice($priceInclTax)); - - $res[] = $price; - } - } - } - - return $res; - } -} diff --git a/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle.php b/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle.php index 6fe9106aca1..3d9a2f6510d 100644 --- a/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle.php +++ b/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle.php @@ -25,19 +25,17 @@ */ namespace Magento\Bundle\Block\Catalog\Product\View\Type; +use Magento\Framework\Pricing\PriceCurrencyInterface; + /** * Catalog bundle product info block - * - * @category Magento - * @package Magento_Bundle - * @author Magento Core Team <core@magentocommerce.com> */ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView { /** - * @var mixed + * @var array */ - protected $_options = null; + protected $_options; /** * Default MAP renderer type @@ -51,18 +49,13 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView * * @var \Magento\Catalog\Helper\Product */ - protected $_catalogProduct = null; + protected $_catalogProduct; /** * @var \Magento\Bundle\Model\Product\PriceFactory */ protected $_productPrice; - /** - * @var \Magento\Core\Helper\Data - */ - protected $coreData; - /** * @var \Magento\Framework\Json\EncoderInterface */ @@ -73,12 +66,17 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView */ protected $_localeFormat; + /** + * @var PriceCurrencyInterface + */ + protected $priceCurrency; + /** * @param \Magento\Catalog\Block\Product\Context $context * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils * @param \Magento\Catalog\Helper\Product $catalogProduct * @param \Magento\Bundle\Model\Product\PriceFactory $productPrice - * @param \Magento\Core\Helper\Data $coreData + * @param PriceCurrencyInterface $priceCurrency * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder * @param \Magento\Framework\Locale\FormatInterface $localeFormat * @param array $data @@ -89,7 +87,7 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView \Magento\Framework\Stdlib\ArrayUtils $arrayUtils, \Magento\Catalog\Helper\Product $catalogProduct, \Magento\Bundle\Model\Product\PriceFactory $productPrice, - \Magento\Core\Helper\Data $coreData, + PriceCurrencyInterface $priceCurrency, \Magento\Framework\Json\EncoderInterface $jsonEncoder, \Magento\Framework\Locale\FormatInterface $localeFormat, array $data = array(), @@ -97,19 +95,18 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView ) { $this->_catalogProduct = $catalogProduct; $this->_productPrice = $productPrice; - $this->coreData = $coreData; + $this->priceCurrency = $priceCurrency; $this->jsonEncoder = $jsonEncoder; $this->_localeFormat = $localeFormat; parent::__construct( $context, $arrayUtils, - $data, - $priceBlockTypes + $data ); } /** - * @return mixed + * @return array */ public function getOptions() { @@ -159,8 +156,6 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView $options = array(); $selected = array(); $currentProduct = $this->getProduct(); - /* @var $bundlePriceModel \Magento\Bundle\Model\Product\Price */ - $bundlePriceModel = $this->_productPrice->create(); if ($preConfiguredFlag = $currentProduct->hasPreconfiguredValues()) { $preConfiguredValues = $currentProduct->getPreconfiguredValues(); @@ -169,84 +164,55 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView $position = 0; - foreach ($optionsArray as $_option) { - /* @var $_option \Magento\Bundle\Model\Option */ - if (!$_option->getSelections()) { + foreach ($optionsArray as $optionItem) { + /* @var $optionItem \Magento\Bundle\Model\Option */ + if (!$optionItem->getSelections()) { continue; } - $optionId = $_option->getId(); + $optionId = $optionItem->getId(); $option = array( 'selections' => array(), - 'title' => $_option->getTitle(), - 'isMulti' => in_array($_option->getType(), array('multi', 'checkbox')), + 'title' => $optionItem->getTitle(), + 'isMulti' => in_array($optionItem->getType(), array('multi', 'checkbox')), 'position' => $position++ ); - $selectionCount = count($_option->getSelections()); + $selectionCount = count($optionItem->getSelections()); - foreach ($_option->getSelections() as $_selection) { - /* @var $_selection \Magento\Catalog\Model\Product */ - $selectionId = $_selection->getSelectionId(); - $_qty = !($_selection->getSelectionQty() * 1) ? '1' : $_selection->getSelectionQty() * 1; + foreach ($optionItem->getSelections() as $selectionItem) { + /* @var $selectionItem \Magento\Catalog\Model\Product */ + $selectionId = $selectionItem->getSelectionId(); + $qty = !($selectionItem->getSelectionQty() * 1) ? '1' : $selectionItem->getSelectionQty() * 1; // recalculate currency - $tierPrices = $_selection->getTierPrice(); + $tierPrices = $selectionItem->getPriceInfo() + ->getPrice(\Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE) + ->getTierPriceList(); foreach ($tierPrices as &$tierPriceInfo) { - $tierPriceAmount = $_selection->getPriceInfo()->getPrice('regular_price') - ->getCustomAmount($tierPriceInfo['price']); - $tierPriceInfo['price'] = $this->coreData->currency($tierPriceInfo['price'], false, false); - $tierPriceInfo['inclTaxPrice'] = $this->coreData->currency( - $tierPriceAmount->getValue(), - false, - false - ); - $tierPriceInfo['exclTaxPrice'] = $this->coreData->currency( - $tierPriceAmount->getBaseAmount(), - false, - false + $price = $tierPriceInfo['price']; + $tierPriceInfo['price'] = $this->priceCurrency->convert( + $this->_taxData->displayPriceIncludingTax() ? $price->getValue() : $price->getBaseAmount() ); + $tierPriceInfo['exclTaxPrice'] = $this->priceCurrency->convert($price->getBaseAmount()); + $tierPriceInfo['inclTaxPrice'] = $this->priceCurrency->convert($price->getValue()); } - // unset($tierPriceInfo); // break the reference with the last element $canApplyMAP = false; - $bundleOptionPriceAmount = $currentProduct->getPriceInfo()->getPrice('bundle_option') - ->getOptionSelectionAmount($_selection); - $_priceInclTax = $bundleOptionPriceAmount->getValue(); - $_priceExclTax = $bundleOptionPriceAmount->getBaseAmount(); - - //if ($currentProduct->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_FIXED) { - // $_priceInclTax = $this->_taxData->getPrice($currentProduct, $itemPrice, true); - // $_priceExclTax = $this->_taxData->getPrice($currentProduct, $itemPrice); - //} - //$itemPrice = $bundlePriceModel->getSelectionFinalTotalPrice( - // $currentProduct, - // $_selection, - // $currentProduct->getQty(), - // $_selection->getQty(), - // false, - // false - //); + ->getOptionSelectionAmount($selectionItem); + $priceInclTax = $bundleOptionPriceAmount->getValue(); + $priceExclTax = $bundleOptionPriceAmount->getBaseAmount(); $selection = array( - 'qty' => $_qty, - 'customQty' => $_selection->getSelectionCanChangeQty(), - 'inclTaxPrice' => $this->coreData->currency( - $_priceInclTax, - false, - false - ), - 'exclTaxPrice' => $this->coreData->currency( - $_priceExclTax, - false, - false - ), - 'priceValue' => $this->coreData->currency($_selection->getSelectionPriceValue(), false, false), - 'priceType' => $_selection->getSelectionPriceType(), + 'qty' => $qty, + 'customQty' => $selectionItem->getSelectionCanChangeQty(), + 'inclTaxPrice' => $this->priceCurrency->convert($priceInclTax), + 'exclTaxPrice' => $this->priceCurrency->convert($priceExclTax), + 'priceType' => $selectionItem->getSelectionPriceType(), 'tierPrice' => $tierPrices, - 'name' => $_selection->getName(), + 'name' => $selectionItem->getName(), 'plusDisposition' => 0, 'minusDisposition' => 0, 'canApplyMAP' => $canApplyMAP @@ -257,17 +223,17 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView : $selection['exclTaxPrice']; $responseObject = new \Magento\Framework\Object(); - $args = array('response_object' => $responseObject, 'selection' => $_selection); + $args = array('response_object' => $responseObject, 'selection' => $selectionItem); $this->_eventManager->dispatch('bundle_product_view_config', $args); if (is_array($responseObject->getAdditionalOptions())) { - foreach ($responseObject->getAdditionalOptions() as $o => $v) { - $selection[$o] = $v; + foreach ($responseObject->getAdditionalOptions() as $index => $value) { + $selection[$index] = $value; } } $option['selections'][$selectionId] = $selection; - if (($_selection->getIsDefault() || - $selectionCount == 1 && $_option->getRequired()) && $_selection->isSalable() + if (($selectionItem->getIsDefault() || $selectionCount == 1 && $optionItem->getRequired()) + && $selectionItem->isSalable() ) { $selected[$optionId][] = $selectionId; } @@ -284,24 +250,32 @@ class Bundle extends \Magento\Catalog\Block\Product\View\AbstractView } $isFixedPrice = $this->getProduct()->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_FIXED; + $productAmount = $currentProduct + ->getPriceInfo() + ->getPrice(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE) + ->getAmount(); + + $baseProductAmount = $currentProduct + ->getPriceInfo() + ->getPrice(\Magento\Catalog\Pricing\Price\RegularPrice::PRICE_CODE) + ->getAmount(); + $config = array( 'options' => $options, 'selected' => $selected, 'bundleId' => $currentProduct->getId(), 'priceFormat' => $this->_localeFormat->getPriceFormat(), - 'basePrice' => $this->coreData->currency($currentProduct->getPrice(), false, false), - 'showIncludeTax' => $this->_taxData->displayPriceIncludingTax(), - 'finalBasePriceInclTax' => $this->coreData->currency( - $this->_taxData->getPrice($currentProduct, $currentProduct->getFinalPrice(), true), - false, - false - ), - 'finalBasePriceExclTax' => $this->coreData->currency($currentProduct->getFinalPrice(), false, false), + 'basePrice' => $this->priceCurrency->convert($baseProductAmount->getValue()), + 'finalBasePriceInclTax' => $this->priceCurrency->convert($productAmount->getValue()), + 'finalBasePriceExclTax' => $this->priceCurrency->convert($productAmount->getBaseAmount()), 'priceType' => $currentProduct->getPriceType(), - 'specialPrice' => $currentProduct->getSpecialPrice(), + 'specialPrice' => $currentProduct + ->getPriceInfo() + ->getPrice(\Magento\Catalog\Pricing\Price\SpecialPrice::PRICE_CODE) + ->getValue(), 'includeTax' => $this->_taxData->priceIncludesTax() ? 'true' : 'false', 'isFixedPrice' => $isFixedPrice, - 'isMAPAppliedDirectly' => $this->_catalogData->canApplyMsrp($this->getProduct(), null, false) + //'isMAPAppliedDirectly' => $this->_catalogData->canApplyMsrp($this->getProduct(), null, false) ); $config['finalPrice'] = $this->_taxData->displayPriceIncludingTax() diff --git a/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php b/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php index 0510e58ffcd..773dd24ce48 100644 --- a/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php +++ b/app/code/Magento/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php @@ -25,28 +25,26 @@ */ namespace Magento\Bundle\Block\Catalog\Product\View\Type\Bundle; +use Magento\Bundle\Model\Product\Price; + /** * Bundle option renderer - * - * @category Magento - * @package Magento_Bundle - * @author Magento Core Team <core@magentocommerce.com> */ class Option extends \Magento\Bundle\Block\Catalog\Product\Price { /** - * Store preconfigured options + * Store pre-configured options * * @var int|array|string */ - protected $_selectedOptions = null; + protected $_selectedOptions; /** * Show if option has a single selection * * @var bool */ - protected $_showSingle = null; + protected $_showSingle; /** * @var \Magento\Core\Helper\Data @@ -104,10 +102,10 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price public function showSingle() { if (is_null($this->_showSingle)) { - $_option = $this->getOption(); - $_selections = $_option->getSelections(); + $option = $this->getOption(); + $selections = $option->getSelections(); - $this->_showSingle = count($_selections) == 1 && $_option->getRequired(); + $this->_showSingle = count($selections) == 1 && $option->getRequired(); } return $this->_showSingle; @@ -120,29 +118,29 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price */ public function getDefaultValues() { - $_option = $this->getOption(); - $_default = $_option->getDefaultSelection(); - $_selections = $_option->getSelections(); + $option = $this->getOption(); + $default = $option->getDefaultSelection(); + $selections = $option->getSelections(); $selectedOptions = $this->_getSelectedOptions(); $inPreConfigured = $this->getProduct()->hasPreconfiguredValues() && - $this->getProduct()->getPreconfiguredValues()->getData('bundle_option_qty/' . $_option->getId()); + $this->getProduct()->getPreconfiguredValues()->getData('bundle_option_qty/' . $option->getId()); - if (empty($selectedOptions) && $_default) { - $_defaultQty = $_default->getSelectionQty() * 1; - $_canChangeQty = $_default->getSelectionCanChangeQty(); + if (empty($selectedOptions) && $default) { + $defaultQty = $default->getSelectionQty() * 1; + $canChangeQty = $default->getSelectionCanChangeQty(); } elseif (!$inPreConfigured && $selectedOptions && is_numeric($selectedOptions)) { - $selectedSelection = $_option->getSelectionById($selectedOptions); - $_defaultQty = $selectedSelection->getSelectionQty() * 1; - $_canChangeQty = $selectedSelection->getSelectionCanChangeQty(); + $selectedSelection = $option->getSelectionById($selectedOptions); + $defaultQty = $selectedSelection->getSelectionQty() * 1; + $canChangeQty = $selectedSelection->getSelectionCanChangeQty(); } elseif (!$this->showSingle() || $inPreConfigured) { - $_defaultQty = $this->_getSelectedQty(); - $_canChangeQty = (bool)$_defaultQty; + $defaultQty = $this->_getSelectedQty(); + $canChangeQty = (bool)$defaultQty; } else { - $_defaultQty = $_selections[0]->getSelectionQty() * 1; - $_canChangeQty = $_selections[0]->getSelectionCanChangeQty(); + $defaultQty = $selections[0]->getSelectionQty() * 1; + $canChangeQty = $selections[0]->getSelectionCanChangeQty(); } - return array($_defaultQty, $_canChangeQty); + return array($defaultQty, $canChangeQty); } /** @@ -226,18 +224,17 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price } /** - * @param \Magento\Catalog\Model\Product $_selection + * @param \Magento\Catalog\Model\Product $selection * @param bool $includeContainer * @return string */ - public function getSelectionQtyTitlePrice($_selection, $includeContainer = true) + public function getSelectionQtyTitlePrice($selection, $includeContainer = true) { - $price = $this->getProduct()->getPriceModel()->getSelectionPreFinalPrice($this->getProduct(), $_selection); - $this->setFormatProduct($_selection); - $priceTitle = $_selection->getSelectionQty() * 1 . ' x ' . $this->escapeHtml($_selection->getName()); + $this->setFormatProduct($selection); + $priceTitle = $selection->getSelectionQty() * 1 . ' x ' . $this->escapeHtml($selection->getName()); $priceTitle .= ' ' . ($includeContainer ? '<span class="price-notice">' : '') . '+' . - $this->renderPriceString($_selection, $includeContainer) . ($includeContainer ? '</span>' : ''); + $this->renderPriceString($selection, $includeContainer) . ($includeContainer ? '</span>' : ''); return $priceTitle; } @@ -245,17 +242,17 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price /** * Get price for selection product * - * @param \Magento\Catalog\Model\Product $_selection + * @param \Magento\Catalog\Model\Product $selection * @return int|float */ - public function getSelectionPrice($_selection) + public function getSelectionPrice($selection) { $price = 0; $store = $this->getProduct()->getStore(); - if ($_selection) { + if ($selection) { $price = $this->getProduct()->getPriceModel()->getSelectionPreFinalPrice( $this->getProduct(), - $_selection, + $selection, 1 ); if (is_numeric($price)) { @@ -268,15 +265,15 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price /** * Get title price for selection product * - * @param \Magento\Catalog\Model\Product $_selection + * @param \Magento\Catalog\Model\Product $selection * @param bool $includeContainer * @return string */ - public function getSelectionTitlePrice($_selection, $includeContainer = true) + public function getSelectionTitlePrice($selection, $includeContainer = true) { - $priceTitle = $this->escapeHtml($_selection->getName()); - $priceTitle .= ' ' . ($includeContainer ? '<span class="price-notice">' : '') . '+' . - $this->renderPriceString($_selection, $includeContainer) . ($includeContainer ? '</span>' : ''); + $priceTitle = $this->escapeHtml($selection->getName()); + $priceTitle .= ' ' . ($includeContainer ? '<span class="price-notice">' : '') . '+' + . $this->renderPriceString($selection, $includeContainer) . ($includeContainer ? '</span>' : ''); return $priceTitle; } @@ -305,9 +302,7 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price $taxHelper = $this->_taxData; $coreHelper = $this->_coreHelper; $currentProduct = $this->getProduct(); - if ($currentProduct->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC && - $this->getFormatProduct() - ) { + if ($currentProduct->getPriceType() == Price::PRICE_TYPE_DYNAMIC && $this->getFormatProduct()) { $product = $this->getFormatProduct(); } else { $product = $currentProduct; @@ -316,9 +311,9 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price $priceTax = $taxHelper->getPrice($product, $price); $priceIncTax = $taxHelper->getPrice($product, $price, true); - $formated = $coreHelper->currencyByStore($priceTax, $product->getStore(), true, $includeContainer); + $formatted = $coreHelper->currencyByStore($priceTax, $product->getStore(), true, $includeContainer); if ($taxHelper->displayBothPrices() && $priceTax != $priceIncTax) { - $formated .= ' (+' . $coreHelper->currencyByStore( + $formatted .= ' (+' . $coreHelper->currencyByStore( $priceIncTax, $product->getStore(), true, @@ -328,7 +323,7 @@ class Option extends \Magento\Bundle\Block\Catalog\Product\Price ) . ')'; } - return $formated; + return $formatted; } /** diff --git a/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php b/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php index 214914552f3..b0a840fba4e 100644 --- a/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php +++ b/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php @@ -25,31 +25,28 @@ */ namespace Magento\Bundle\Helper\Catalog\Product; +use Magento\Catalog\Helper\Product\Configuration\ConfigurationInterface; use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface; +use Magento\Framework\App\Helper\AbstractHelper; /** * Helper for fetching properties by product configurational item - * - * @category Magento - * @package Magento_Bundle - * @author Magento Core Team <core@magentocommerce.com> */ -class Configuration extends \Magento\Framework\App\Helper\AbstractHelper implements - \Magento\Catalog\Helper\Product\Configuration\ConfigurationInterface +class Configuration extends AbstractHelper implements ConfigurationInterface { /** * Core data * * @var \Magento\Core\Helper\Data */ - protected $_coreData = null; + protected $_coreData; /** * Catalog product configuration * * @var \Magento\Catalog\Helper\Product\Configuration */ - protected $_ctlgProdConfigur = null; + protected $productConfiguration; /** * @var \Magento\Framework\Escaper @@ -58,17 +55,17 @@ class Configuration extends \Magento\Framework\App\Helper\AbstractHelper impleme /** * @param \Magento\Framework\App\Helper\Context $context - * @param \Magento\Catalog\Helper\Product\Configuration $ctlgProdConfigur + * @param \Magento\Catalog\Helper\Product\Configuration $productConfiguration * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Framework\Escaper $escaper */ public function __construct( \Magento\Framework\App\Helper\Context $context, - \Magento\Catalog\Helper\Product\Configuration $ctlgProdConfigur, + \Magento\Catalog\Helper\Product\Configuration $productConfiguration, \Magento\Core\Helper\Data $coreData, \Magento\Framework\Escaper $escaper ) { - $this->_ctlgProdConfigur = $ctlgProdConfigur; + $this->productConfiguration = $productConfiguration; $this->_coreData = $coreData; $this->_escaper = $escaper; parent::__construct($context); @@ -102,7 +99,9 @@ class Configuration extends \Magento\Framework\App\Helper\AbstractHelper impleme public function getSelectionFinalPrice(ItemInterface $item, $selectionProduct) { $selectionProduct->unsetData('final_price'); - return $item->getProduct()->getPriceModel()->getSelectionFinalTotalPrice( + /** @var \Magento\Bundle\Model\Product\Price $priceModel */ + $priceModel = $item->getProduct()->getPriceModel(); + return $priceModel->getSelectionFinalTotalPrice( $item->getProduct(), $selectionProduct, $item->getQty() * 1, @@ -126,18 +125,14 @@ class Configuration extends \Magento\Framework\App\Helper\AbstractHelper impleme $options = array(); $product = $item->getProduct(); - /** - * @var \Magento\Bundle\Model\Product\Type - */ + /** @var \Magento\Bundle\Model\Product\Type $typeInstance */ $typeInstance = $product->getTypeInstance(); // get bundle options $optionsQuoteItemOption = $item->getOptionByCode('bundle_option_ids'); $bundleOptionsIds = $optionsQuoteItemOption ? unserialize($optionsQuoteItemOption->getValue()) : array(); if ($bundleOptionsIds) { - /** - * @var \Magento\Bundle\Model\Resource\Option\Collection - */ + /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection */ $optionsCollection = $typeInstance->getOptionsByIds($bundleOptionsIds, $product); // get and add bundle selections collection @@ -146,10 +141,7 @@ class Configuration extends \Magento\Framework\App\Helper\AbstractHelper impleme $bundleSelectionIds = unserialize($selectionsQuoteItemOption->getValue()); if (!empty($bundleSelectionIds)) { - $selectionsCollection = $typeInstance->getSelectionsByIds( - unserialize($selectionsQuoteItemOption->getValue()), - $product - ); + $selectionsCollection = $typeInstance->getSelectionsByIds($bundleSelectionIds, $product); $bundleOptions = $optionsCollection->appendSelections($selectionsCollection, true); foreach ($bundleOptions as $bundleOption) { @@ -188,6 +180,9 @@ class Configuration extends \Magento\Framework\App\Helper\AbstractHelper impleme */ public function getOptions(ItemInterface $item) { - return array_merge($this->getBundleOptions($item), $this->_ctlgProdConfigur->getCustomOptions($item)); + return array_merge( + $this->getBundleOptions($item), + $this->productConfiguration->getCustomOptions($item) + ); } } diff --git a/app/code/Magento/Bundle/Model/Product/Type.php b/app/code/Magento/Bundle/Model/Product/Type.php index fd7e030bd1e..c920cd7b36b 100644 --- a/app/code/Magento/Bundle/Model/Product/Type.php +++ b/app/code/Magento/Bundle/Model/Product/Type.php @@ -27,10 +27,6 @@ namespace Magento\Bundle\Model\Product; /** * Bundle Type Model - * - * @category Magento - * @package Magento_Bundle - * @author Magento Core Team <core@magentocommerce.com> */ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType { @@ -245,7 +241,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType } /** - * Retrieve parent ids array by requered child + * Retrieve parent ids array by required child * * @param int|array $childId * @return array @@ -369,17 +365,15 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType if ($product->getCanSaveBundleSelections()) { $product->canAffectOptions(true); $selections = $product->getBundleSelectionsData(); - if ($selections) { - if (!empty($selections)) { - $options = $product->getBundleOptionsData(); - if ($options) { - foreach ($options as $option) { - if (empty($option['delete']) || 1 != (int)$option['delete']) { - $product->setTypeHasOptions(true); - if (1 == (int)$option['required']) { - $product->setTypeHasRequiredOptions(true); - break; - } + if ($selections && !empty($selections)) { + $options = $product->getBundleOptionsData(); + if ($options) { + foreach ($options as $option) { + if (empty($option['delete']) || 1 != (int) $option['delete']) { + $product->setTypeHasOptions(true); + if (1 == (int) $option['required']) { + $product->setTypeHasRequiredOptions(true); + break; } } } @@ -409,17 +403,13 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType unset($option['option_id']); } - $optionModel = $this->_bundleOption->create()->setData( - $option - )->setParentId( - $product->getId() - )->setStoreId( - $product->getStoreId() - ); + $optionModel = $this->_bundleOption->create() + ->setData($option) + ->setParentId($product->getId()) + ->setStoreId($product->getStoreId()); - $optionModel->isDeleted((bool)$option['delete']); + $optionModel->isDeleted((bool) $option['delete']); $optionModel->save(); - $options[$key]['option_id'] = $optionModel->getOptionId(); } @@ -429,7 +419,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $selections = $product->getBundleSelectionsData(); if ($selections) { foreach ($selections as $index => $group) { - foreach ($group as $key => $selection) { + foreach ($group as $selection) { if (isset($selection['selection_id']) && $selection['selection_id'] == '') { unset($selection['selection_id']); } @@ -438,17 +428,13 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $selection['is_default'] = 0; } - $selectionModel = $this->_bundleModelSelection->create()->setData( - $selection - )->setOptionId( - $options[$index]['option_id'] - )->setWebsiteId( - $this->_storeManager->getStore($product->getStoreId())->getWebsiteId() - )->setParentProductId( - $product->getId() - ); + $selectionModel = $this->_bundleModelSelection->create() + ->setData($selection) + ->setOptionId($options[$index]['option_id']) + ->setWebsiteId($this->_storeManager->getStore($product->getStoreId())->getWebsiteId()) + ->setParentProductId($product->getId()); - $selectionModel->isDeleted((bool)$selection['delete']); + $selectionModel->isDeleted((bool) $selection['delete']); $selectionModel->save(); $selection['selection_id'] = $selectionModel->getSelectionId(); @@ -503,10 +489,10 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType public function getOptionsCollection($product) { if (!$product->hasData($this->_keyOptionsCollection)) { - $optionsCollection = $this->_bundleOption->create()->getResourceCollection()->setProductIdFilter( - $product->getId() - )->setPositionOrder(); - + $optionsCollection = $this->_bundleOption->create() + ->getResourceCollection() + ->setProductIdFilter($product->getId()) + ->setPositionOrder(); $storeId = $this->getStoreFilter($product); if ($storeId instanceof \Magento\Store\Model\Store) { $storeId = $storeId->getId(); @@ -531,23 +517,16 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $key = $this->_keySelectionsCollection . $keyOptionIds; if (!$product->hasData($key)) { $storeId = $product->getStoreId(); - $selectionsCollection = $this->_bundleCollection->create()->addAttributeToSelect( - $this->_config->getProductAttributes() - )->addAttributeToSelect( - 'tax_class_id' //used for calculation item taxes in Bundle with Dynamic Price - )->setFlag( - 'require_stock_items', - true - )->setFlag( - 'product_children', - true - )->setPositionOrder()->addStoreFilter( - $this->getStoreFilter($product) - )->setStoreId( - $storeId - )->addFilterByRequiredOptions()->setOptionIdsFilter( - $optionIds - ); + $selectionsCollection = $this->_bundleCollection->create() + ->addAttributeToSelect($this->_config->getProductAttributes()) + ->addAttributeToSelect('tax_class_id') //used for calculation item taxes in Bundle with Dynamic Price + ->setFlag('require_stock_items', true) + ->setFlag('product_children', true) + ->setPositionOrder() + ->addStoreFilter($this->getStoreFilter($product)) + ->setStoreId($storeId) + ->addFilterByRequiredOptions() + ->setOptionIdsFilter($optionIds); if (!$this->_catalogData->isPriceGlobal() && $storeId) { $websiteId = $this->_storeManager->getStore($storeId)->getWebsiteId(); @@ -562,7 +541,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType /** * Method is needed for specific actions to change given quote options values * according current product type logic - * Example: the cataloginventory validation of decimal qty can change qty to int, + * Example: the catalog inventory validation of decimal qty can change qty to int, * so need to change quote item qty option value too. * * @param array $options @@ -672,7 +651,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $isStrictProcessMode = $this->_isStrictProcessMode($processMode); $skipSaleableCheck = $this->_catalogProduct->getSkipSaleableCheck(); - $_appendAllSelections = (bool)$product->getSkipCheckRequiredOption() || $skipSaleableCheck; + $_appendAllSelections = (bool) $product->getSkipCheckRequiredOption() || $skipSaleableCheck; $options = $buyRequest->getBundleOption(); if (is_array($options)) { @@ -700,15 +679,15 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType } $selectionIds = array(); - foreach ($options as $optionId => $selectionId) { + foreach ($options as $selectionId) { if (!is_array($selectionId)) { if ($selectionId != '') { - $selectionIds[] = (int)$selectionId; + $selectionIds[] = (int) $selectionId; } } else { foreach ($selectionId as $id) { if ($id != '') { - $selectionIds[] = (int)$id; + $selectionIds[] = (int) $id; } } } @@ -718,7 +697,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $selections = $this->getSelectionsByIds($selectionIds, $product); // Check if added selections are still on sale - foreach ($selections->getItems() as $key => $selection) { + foreach ($selections->getItems() as $selection) { if (!$selection->isSalable() && !$skipSaleableCheck) { $_option = $optionsCollection->getItemById($selection->getOptionId()); if (is_array($options[$_option->getId()]) && count($options[$_option->getId()]) > 1) { @@ -745,12 +724,8 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $product->getTypeInstance()->setStoreFilter($product->getStoreId(), $product); $optionCollection = $product->getTypeInstance()->getOptionsCollection($product); - $optionIds = $product->getTypeInstance()->getOptionsIds($product); - $selectionIds = array(); - $selectionCollection = $product->getTypeInstance()->getSelectionsCollection($optionIds, $product); - $options = $optionCollection->appendSelections($selectionCollection, false, $_appendAllSelections); foreach ($options as $option) { @@ -771,11 +746,11 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType foreach ($selections as $selection) { if ($selection->getSelectionCanChangeQty() && isset($qtys[$selection->getOptionId()])) { - $qty = (double)$qtys[$selection->getOptionId()] > 0 ? $qtys[$selection->getOptionId()] : 1; + $qty = (float) $qtys[$selection->getOptionId()] > 0 ? $qtys[$selection->getOptionId()] : 1; } else { - $qty = (double)$selection->getSelectionQty() ? $selection->getSelectionQty() : 1; + $qty = (float) $selection->getSelectionQty() ? $selection->getSelectionQty() : 1; } - $qty = (double)$qty; + $qty = (float) $qty; $product->addCustomOption('selection_qty_' . $selection->getSelectionId(), $qty, $selection); $selection->addCustomOption('selection_id', $selection->getSelectionId()); @@ -783,7 +758,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $beforeQty = 0; $customOption = $product->getCustomOption('product_qty_' . $selection->getId()); if ($customOption && $customOption->getProduct()->getId() == $selection->getId()) { - $beforeQty = (double)$customOption->getValue(); + $beforeQty = (float) $customOption->getValue(); } $product->addCustomOption('product_qty_' . $selection->getId(), $qty + $beforeQty, $selection); @@ -808,15 +783,9 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType return __('We cannot add this item to your shopping cart.'); } - $result[] = $_result[0]->setParentProductId( - $product->getId() - )->addCustomOption( - 'bundle_option_ids', - serialize(array_map('intval', $optionIds)) - )->addCustomOption( - 'bundle_selection_attributes', - serialize($attributes) - ); + $result[] = $_result[0]->setParentProductId($product->getId()) + ->addCustomOption('bundle_option_ids', serialize(array_map('intval', $optionIds))) + ->addCustomOption('bundle_selection_attributes', serialize($attributes)); if ($isStrictProcessMode) { $_result[0]->setCartQty($qty); @@ -867,21 +836,16 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType if (!$usedSelections || serialize($usedSelectionsIds) != serialize($selectionIds)) { $storeId = $product->getStoreId(); - $usedSelections = $this->_bundleCollection->create()->addAttributeToSelect( - '*' - )->setFlag( - 'require_stock_items', - true - )->setFlag( - 'product_children', - true - )->addStoreFilter( - $this->getStoreFilter($product) - )->setStoreId( - $storeId - )->setPositionOrder()->addFilterByRequiredOptions()->setSelectionIdsFilter( - $selectionIds - ); + $usedSelections = $this->_bundleCollection + ->create() + ->addAttributeToSelect('*') + ->setFlag('require_stock_items', true) + ->setFlag('product_children', true) + ->addStoreFilter($this->getStoreFilter($product)) + ->setStoreId($storeId) + ->setPositionOrder() + ->addFilterByRequiredOptions() + ->setSelectionIdsFilter($selectionIds); if (!$this->_catalogData->isPriceGlobal() && $storeId) { $websiteId = $this->_storeManager->getStore($storeId)->getWebsiteId(); @@ -908,13 +872,13 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType $usedOptionsIds = $product->getData($this->_keyUsedOptionsIds); if (!$usedOptions || serialize($usedOptionsIds) != serialize($optionIds)) { - $usedOptions = $this->_bundleOption->create()->getResourceCollection()->setProductIdFilter( - $product->getId() - )->setPositionOrder()->joinValues( - $this->_storeManager->getStore()->getId() - )->setIdFilter( - $optionIds - ); + $usedOptions = $this->_bundleOption + ->create() + ->getResourceCollection() + ->setProductIdFilter($product->getId()) + ->setPositionOrder() + ->joinValues($this->_storeManager->getStore()->getId()) + ->setIdFilter($optionIds); $product->setData($this->_keyUsedOptions, $usedOptions); $product->setData($this->_keyUsedOptionsIds, $optionIds); } @@ -990,14 +954,24 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType * Sort selections method for usort function * Sort selections by option position, selection position and selection id * - * @param \Magento\Catalog\Model\Product $a - * @param \Magento\Catalog\Model\Product $b + * @param \Magento\Catalog\Model\Product $firstItem + * @param \Magento\Catalog\Model\Product $secondItem * @return int */ - public function shakeSelections($a, $b) + public function shakeSelections($firstItem, $secondItem) { - $aPosition = array($a->getOption()->getPosition(), $a->getOptionId(), $a->getPosition(), $a->getSelectionId()); - $bPosition = array($b->getOption()->getPosition(), $b->getOptionId(), $b->getPosition(), $b->getSelectionId()); + $aPosition = array( + $firstItem->getOption()->getPosition(), + $firstItem->getOptionId(), + $firstItem->getPosition(), + $firstItem->getSelectionId() + ); + $bPosition = array( + $secondItem->getOption()->getPosition(), + $secondItem->getOptionId(), + $secondItem->getPosition(), + $secondItem->getSelectionId() + ); if ($aPosition == $bPosition) { return 0; } else { @@ -1025,7 +999,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType } /** - * Allow for updates of chidren qty's + * Allow for updates of children qty's * * @param \Magento\Catalog\Model\Product $product * @return boolean true diff --git a/app/code/Magento/Bundle/Model/Resource/Option/Collection.php b/app/code/Magento/Bundle/Model/Resource/Option/Collection.php index ce0c4a11240..05637f454e8 100644 --- a/app/code/Magento/Bundle/Model/Resource/Option/Collection.php +++ b/app/code/Magento/Bundle/Model/Resource/Option/Collection.php @@ -171,7 +171,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac { if (is_array($ids)) { $this->addFieldToFilter('main_table.option_id', array('in' => $ids)); - } else if ($ids != '') { + } elseif ($ids != '') { $this->addFieldToFilter('main_table.option_id', $ids); } return $this; diff --git a/app/code/Magento/Bundle/Pricing/Adjustment/BundleCalculatorInterface.php b/app/code/Magento/Bundle/Pricing/Adjustment/BundleCalculatorInterface.php index 9e9923493f5..0c24bb0aee7 100644 --- a/app/code/Magento/Bundle/Pricing/Adjustment/BundleCalculatorInterface.php +++ b/app/code/Magento/Bundle/Pricing/Adjustment/BundleCalculatorInterface.php @@ -24,7 +24,7 @@ namespace Magento\Bundle\Pricing\Adjustment; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; /** @@ -34,9 +34,55 @@ interface BundleCalculatorInterface extends CalculatorInterface { /** * @param float|string $amount - * @param SaleableInterface $saleableItem + * @param Product $saleableItem * @param null|bool $exclude * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - public function getMaxAmount($amount, SaleableInterface $saleableItem, $exclude = null); + public function getMaxAmount($amount, Product $saleableItem, $exclude = null); + + /** + * Option amount calculation for saleable item + * + * @param Product $saleableItem + * @param null|string $exclude + * @param bool $searchMin + * @param \Magento\Framework\Pricing\Amount\AmountInterface|null $bundleProductAmount + * @return \Magento\Framework\Pricing\Amount\AmountInterface + */ + public function getOptionsAmount( + Product $saleableItem, + $exclude = null, + $searchMin = true, + $bundleProductAmount = null + ); + + /** + * Calculate amount for bundle product with all selection prices + * + * @param float $basePriceValue + * @param Product $bundleProduct + * @param \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] $selectionPriceList + * @param null|string $exclude code of adjustment that has to be excluded + * @return \Magento\Framework\Pricing\Amount\AmountInterface + */ + public function calculateBundleAmount($basePriceValue, $bundleProduct, $selectionPriceList, $exclude = null); + + /** + * Create selection price list for the retrieved options + * + * @param \Magento\Bundle\Model\Option $option + * @param Product $bundleProduct + * @return \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] + */ + public function createSelectionPriceList($option, $bundleProduct); + + /** + * Find minimal or maximal price for existing options + * + * @param \Magento\Bundle\Model\Option $option + * @param \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] $selectionPriceList + * @param bool $searchMin + * @return \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] + */ + public function processOptions($option, $selectionPriceList, $searchMin = true); } diff --git a/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php b/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php index a018f1a33d2..0c32a23043f 100644 --- a/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php +++ b/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php @@ -24,12 +24,12 @@ namespace Magento\Bundle\Pricing\Adjustment; +use Magento\Catalog\Model\Product; use Magento\Framework\Pricing\Object\SaleableInterface; use Magento\Framework\Pricing\Amount\AmountFactory; +use Magento\Bundle\Pricing\Price\BundleSelectionFactory; use Magento\Framework\Pricing\Adjustment\Calculator as CalculatorBase; use Magento\Bundle\Model\Product\Price; -use Magento\Bundle\Pricing\Price\BundleOptionPriceInterface; -use Magento\Bundle\Pricing\Price\BundleSelectionFactory; use Magento\Bundle\Pricing\Price\BundleOptionPrice; /** @@ -56,6 +56,7 @@ class Calculator implements BundleCalculatorInterface * @param CalculatorBase $calculator * @param AmountFactory $amountFactory * @param BundleSelectionFactory $bundleSelectionFactory + * @return Calculator */ public function __construct( CalculatorBase $calculator, @@ -77,147 +78,243 @@ class Calculator implements BundleCalculatorInterface */ public function getAmount($amount, SaleableInterface $saleableItem, $exclude = null) { - return $this->getOptionsAmount($amount, $saleableItem, $exclude, true); + return $this->getOptionsAmount($saleableItem, $exclude, true, $amount); } /** * Get amount for current product which is included price of existing options with maximal price * * @param float $amount - * @param SaleableInterface $saleableItem - * @param null $exclude + * @param Product $saleableItem + * @param null|string $exclude * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - public function getMaxAmount($amount, SaleableInterface $saleableItem, $exclude = null) + public function getMaxAmount($amount, Product $saleableItem, $exclude = null) { - return $this->getOptionsAmount($amount, $saleableItem, $exclude, false); + return $this->getOptionsAmount($saleableItem, $exclude, false, $amount); } /** - * Base calculation of amount for saleable item + * Option amount calculation for bundle product * - * @param float $amount - * @param SaleableInterface $saleableItem + * @param Product $saleableItem * @param null|string $exclude * @param bool $searchMin + * @param float $baseAmount * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - protected function getOptionsAmount($amount, SaleableInterface $saleableItem, $exclude = null, $searchMin = true) + public function getOptionsAmount( + Product $saleableItem, + $exclude = null, + $searchMin = true, + $baseAmount = 0. + ) { + return $this->calculateBundleAmount( + $baseAmount, + $saleableItem, + $this->getSelectionAmounts($saleableItem, $searchMin), + $exclude + ); + } + + /** + * Filter all options for bundle product + * + * @param Product $bundleProduct + * @param bool $searchMin + * @return array + */ + protected function getSelectionAmounts(Product $bundleProduct, $searchMin) { - $fullAmount = 0.; - $adjustments = []; - // Get amount for bundle product - $amountList[] = $this->calculator->getAmount($amount, $saleableItem); + // Flag shows - is it necessary to find minimal option amount in case if all options are not required + $shouldFindMinOption = false; + if ($searchMin + && $bundleProduct->getPriceType() == Price::PRICE_TYPE_DYNAMIC + && !$this->hasRequiredOption($bundleProduct) + ) { + $shouldFindMinOption = true; + } + $canSkipRequiredOptions = $searchMin && !$shouldFindMinOption; - $minOptionAmount = null; - /* @var $option \Magento\Bundle\Model\Option */ - foreach ($this->getBundleOptionPrice($saleableItem)->getOptions() as $option) { - if (!$option->getSelections()) { + $currentPrice = false; + $priceList = []; + foreach ($this->getBundleOptions($bundleProduct) as $option) { + if ($this->canSkipOption($option, $canSkipRequiredOptions)) { continue; } - // Add amounts for custom options - $optionsAmounts = $this->processOptions($option, $saleableItem, $searchMin); - if ($searchMin - && ($minOptionAmount === null || end($optionsAmounts)->getValue() < $minOptionAmount->getValue()) + $selectionPriceList = $this->createSelectionPriceList($option, $bundleProduct); + $selectionPriceList = $this->processOptions($option, $selectionPriceList, $searchMin); + + $lastValue = end($selectionPriceList)->getAmount()->getValue(); + if ($shouldFindMinOption + && (!$currentPrice || $lastValue < $currentPrice->getAmount()->getValue()) ) { - $minOptionAmount = end($optionsAmounts); - } elseif (!$searchMin) { - $amountList = array_merge($amountList, $optionsAmounts); + $currentPrice = end($selectionPriceList); + } elseif (!$shouldFindMinOption) { + $priceList = array_merge($priceList, $selectionPriceList); } } + return $shouldFindMinOption ? [$currentPrice] : $priceList; + } - if ($searchMin && $minOptionAmount) { - $amountList[] = $minOptionAmount; - } + /** + * Check this option if it should be skipped + * + * @param \Magento\Bundle\Model\Option $option + * @param bool $canSkipRequiredOption + * @return bool + */ + protected function canSkipOption($option, $canSkipRequiredOption) + { + return !$option->getSelections() || ($canSkipRequiredOption && !$option->getRequired()); + } - /** @var \Magento\Framework\Pricing\Amount\AmountInterface $itemAmount */ - foreach ($amountList as $itemAmount) { - $fullAmount += $itemAmount->getValue(); - foreach ($itemAmount->getAdjustmentAmounts() as $code => $adjustment) { - if ($exclude === null || $exclude !== $code) { - $adjustments[$code] = isset($adjustments[$code]) ? $adjustments[$code] + $adjustment : $adjustment; - } + /** + * Check the bundle product for availability of required options + * + * @param Product $bundleProduct + * @return bool + */ + protected function hasRequiredOption($bundleProduct) + { + $options = array_filter( + $this->getBundleOptions($bundleProduct), + function ($item) { + return $item->getRequired(); } - } - return $this->amountFactory->create($fullAmount, $adjustments); + ); + return !empty($options); } /** - * @param SaleableInterface $saleableItem - * @return BundleOptionPrice + * Get bundle options + * + * @param Product $saleableItem + * @return \Magento\Bundle\Model\Resource\Option\Collection */ - protected function getBundleOptionPrice(SaleableInterface $saleableItem) + protected function getBundleOptions(Product $saleableItem) { - return $saleableItem->getPriceInfo()->getPrice(BundleOptionPriceInterface::PRICE_TYPE_BUNDLE_OPTION); + /** @var BundleOptionPrice $bundlePrice */ + $bundlePrice = $saleableItem->getPriceInfo()->getPrice(BundleOptionPrice::PRICE_CODE); + return $bundlePrice->getOptions(); } /** - * @param \Magento\Bundle\Model\Option $option - * @param SaleableInterface $saleableItem - * @param bool $searchMin - * @return \Magento\Framework\Pricing\Amount\AmountInterface[] + * Calculate amount for bundle product with all selection prices + * + * @param float $basePriceValue + * @param Product $bundleProduct + * @param \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] $selectionPriceList + * @param null|string $exclude + * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - protected function processOptions($option, $saleableItem, $searchMin = true) + public function calculateBundleAmount($basePriceValue, $bundleProduct, $selectionPriceList, $exclude = null) { - $result = []; - foreach ($option->getSelections() as $selection) { - /* @var $selection \Magento\Bundle\Model\Selection|\Magento\Catalog\Model\Product */ - if (!$selection->isSalable()/* || ($searchMin && !$option->getRequired())*/) { - // @todo CatalogInventory Show out of stock Products - continue; - } - $current = $this->getSelection($selection, $saleableItem); - if (empty($result)) { - $result = [$current]; - continue; - } - if ($searchMin && end($result)->getValue() > $current->getValue()) { - $result = [$current]; - } elseif (!$searchMin && $option->isMultiSelection()) { - $result[] = $current; - } elseif (!$searchMin && !$option->isMultiSelection() && end($result)->getValue() < $current->getValue()) { - $result = [$current]; - } + if ($bundleProduct->getPriceType() == Price::PRICE_TYPE_FIXED) { + return $this->calculateFixedBundleAmount($basePriceValue, $bundleProduct, $selectionPriceList, $exclude); + } else { + return $this->calculateDynamicBundleAmount($basePriceValue, $bundleProduct, $selectionPriceList, $exclude); } - return $result; } /** - * @param \Magento\Bundle\Model\Selection $selection - * @param SaleableInterface $saleableItem + * Calculate amount for fixed bundle product + * + * @param float $basePriceValue + * @param Product $bundleProduct + * @param \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] $selectionPriceList + * @param null|string $exclude * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - protected function getSelection($selection, $saleableItem) + protected function calculateFixedBundleAmount($basePriceValue, $bundleProduct, $selectionPriceList, $exclude) { - if ($saleableItem->getPriceType() == Price::PRICE_TYPE_FIXED) { - return $this->createFixedAmount($selection, $saleableItem); - } else { - return $this->createDynamicAmount($selection, $saleableItem); + $fullAmount = $basePriceValue; + /** @var $option \Magento\Bundle\Model\Option */ + foreach ($selectionPriceList as $selectionPrice) { + $fullAmount += $selectionPrice->getValue(); } + return $this->calculator->getAmount($fullAmount, $bundleProduct, $exclude); } /** - * @param \Magento\Bundle\Model\Selection $selection - * @param SaleableInterface $saleableItem + * Calculate amount for dynamic bundle product + * + * @param float $basePriceValue + * @param Product $bundleProduct + * @param \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] $selectionPriceList + * @param null|string $exclude * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - protected function createDynamicAmount($selection, $saleableItem) + protected function calculateDynamicBundleAmount($basePriceValue, $bundleProduct, $selectionPriceList, $exclude) { - /** @var \Magento\Bundle\Pricing\Price\BundleSelectionPrice $price */ - $price = $this->selectionFactory->create($saleableItem, $selection, $selection->getSelectionQty()); - return $price->getAmount(); + $fullAmount = 0.; + $adjustments = []; + $amountList = [$this->calculator->getAmount($basePriceValue, $bundleProduct, $exclude)]; + /** @var $option \Magento\Bundle\Model\Option */ + foreach ($selectionPriceList as $selectionPrice) { + $amountList[] = $selectionPrice->getAmount(); + } + /** @var \Magento\Framework\Pricing\Amount\AmountInterface $itemAmount */ + foreach ($amountList as $itemAmount) { + $fullAmount += $itemAmount->getValue(); + foreach ($itemAmount->getAdjustmentAmounts() as $code => $adjustment) { + $adjustments[$code] = isset($adjustments[$code]) ? $adjustments[$code] + $adjustment : $adjustment; + } + } + if ($exclude && isset($adjustments[$exclude])) { + $fullAmount -= $adjustments[$exclude]; + unset($adjustments[$exclude]); + } + return $this->amountFactory->create($fullAmount, $adjustments); } /** - * @param \Magento\Bundle\Model\Selection $selection - * @param SaleableInterface $saleableItem - * @return \Magento\Framework\Pricing\Amount\AmountInterface + * Create selection price list for the retrieved options + * + * @param \Magento\Bundle\Model\Option $option + * @param Product $bundleProduct + * @return \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] + */ + public function createSelectionPriceList($option, $bundleProduct) + { + $priceList = []; + /* @var $selection \Magento\Bundle\Model\Selection|\Magento\Catalog\Model\Product */ + foreach ($option->getSelections() as $selection) { + if (!$selection->isSalable()) { + // @todo CatalogInventory Show out of stock Products + continue; + } + $priceList[] = $this->selectionFactory->create($bundleProduct, $selection, $selection->getSelectionQty()); + } + return $priceList; + } + + /** + * Find minimal or maximal price for existing options + * + * @param \Magento\Bundle\Model\Option $option + * @param \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] $selectionPriceList + * @param bool $searchMin + * @return \Magento\Bundle\Pricing\Price\BundleSelectionPrice[] */ - protected function createFixedAmount($selection, $saleableItem) + public function processOptions($option, $selectionPriceList, $searchMin = true) { - $selectionPrice = $this->selectionFactory - ->create($saleableItem, $selection, $selection->getSelectionQty()) - ->getValue(); - return $this->calculator->getAmount($selectionPrice, $saleableItem); + $result = []; + foreach ($selectionPriceList as $current) { + $currentValue = $current->getAmount()->getValue(); + if (empty($result)) { + $result = [$current]; + } elseif ($searchMin && end($result)->getAmount()->getValue() > $currentValue) { + $result = [$current]; + } elseif (!$searchMin && $option->isMultiSelection()) { + $result[] = $current; + } elseif (!$searchMin + && !$option->isMultiSelection() + && end($result)->getAmount()->getValue() < $currentValue + ) { + $result = [$current]; + } + } + return $result; } } diff --git a/app/code/Magento/Bundle/Pricing/Price/BasePrice.php b/app/code/Magento/Bundle/Pricing/Price/BasePrice.php index bcef83dff1f..28df06a393d 100644 --- a/app/code/Magento/Bundle/Pricing/Price/BasePrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/BasePrice.php @@ -29,7 +29,7 @@ use Magento\Catalog\Pricing\Price as CatalogPrice; /** * Bundle Base Price model */ -class BasePrice extends CatalogPrice\BasePrice +class BasePrice extends CatalogPrice\BasePrice implements BasePriceInterface { /** * Get Base Price Value @@ -39,30 +39,24 @@ class BasePrice extends CatalogPrice\BasePrice public function getValue() { if ($this->value === null) { - $this->value = $this->applyDiscount(parent::getValue()); + $this->value = $this->calculateBaseValue(parent::getValue()); } return $this->value; } /** - * Apply discount type prices + * Calculate base price for passed regular one * * @param float $price * @return float */ - public function applyDiscount($price) + public function calculateBaseValue($price) { $discount = [ 0, - $this->priceInfo - ->getPrice(CatalogPrice\TierPriceInterface::PRICE_TYPE_TIER, $this->quantity) - ->getValue(), - $this->priceInfo - ->getPrice(CatalogPrice\GroupPriceInterface::PRICE_TYPE_GROUP, $this->quantity) - ->getValue(), - $this->priceInfo - ->getPrice(CatalogPrice\SpecialPriceInterface::PRICE_TYPE_SPECIAL, $this->quantity) - ->getValue() + $this->priceInfo->getPrice(CatalogPrice\TierPrice::PRICE_CODE, $this->quantity)->getValue(), + $this->priceInfo->getPrice(CatalogPrice\GroupPrice::PRICE_CODE, $this->quantity)->getValue(), + $this->priceInfo->getPrice(CatalogPrice\SpecialPrice::PRICE_CODE, $this->quantity)->getValue() ]; $discount = max($discount); if ($discount) { diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPriceInterface.php b/app/code/Magento/Bundle/Pricing/Price/BasePriceInterface.php similarity index 82% rename from app/code/Magento/Bundle/Pricing/Price/BundleSelectionPriceInterface.php rename to app/code/Magento/Bundle/Pricing/Price/BasePriceInterface.php index 020f94061f2..0ba4fa0f70b 100644 --- a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPriceInterface.php +++ b/app/code/Magento/Bundle/Pricing/Price/BasePriceInterface.php @@ -21,15 +21,19 @@ * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ + namespace Magento\Bundle\Pricing\Price; /** - * Bundle selection price interface + * Bundle base price interface */ -interface BundleSelectionPriceInterface +interface BasePriceInterface { /** - * Price model code + * Calculate base price for passed regular one + * + * @param float $price + * @return float */ - const PRICE_TYPE_BUNDLE_SELECTION = 'bundle_selection'; + public function calculateBaseValue($price); } diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php b/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php index 9c77ef6aaf9..5cecd761e8c 100644 --- a/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php @@ -23,24 +23,24 @@ */ namespace Magento\Bundle\Pricing\Price; -use Magento\Catalog\Pricing\Price\RegularPrice; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Framework\Pricing\Price\AbstractPrice; use Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface; +use Magento\Catalog\Model\Product; /** * Bundle option price model */ -class BundleOptionPrice extends RegularPrice implements BundleOptionPriceInterface +class BundleOptionPrice extends AbstractPrice implements BundleOptionPriceInterface { /** - * @var string + * Price model code */ - protected $priceType = self::PRICE_TYPE_BUNDLE_OPTION; + const PRICE_CODE = 'bundle_option'; /** - * @var array + * @var BundleCalculatorInterface */ - protected $priceOptions; + protected $calculator; /** * @var BundleSelectionFactory @@ -53,20 +53,20 @@ class BundleOptionPrice extends RegularPrice implements BundleOptionPriceInterfa protected $maximalPrice; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param BundleCalculatorInterface $calculator * @param BundleSelectionFactory $bundleSelectionFactory */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, BundleCalculatorInterface $calculator, BundleSelectionFactory $bundleSelectionFactory ) { $this->selectionFactory = $bundleSelectionFactory; - parent::__construct($salableItem, $quantity, $calculator); - $this->salableItem->setQty($this->quantity); + parent::__construct($saleableItem, $quantity, $calculator); + $this->product->setQty($this->quantity); } /** @@ -80,6 +80,19 @@ class BundleOptionPrice extends RegularPrice implements BundleOptionPriceInterfa return $this->value; } + /** + * Getter for maximal price of options + * + * @return bool|float + */ + public function getMaxValue() + { + if (null === $this->maximalPrice) { + $this->maximalPrice = $this->calculateOptions(false); + } + return $this->maximalPrice; + } + /** * Get Options with attached Selections collection * @@ -87,112 +100,64 @@ class BundleOptionPrice extends RegularPrice implements BundleOptionPriceInterfa */ public function getOptions() { - if (null !== $this->priceOptions) { - return $this->priceOptions; - } - $this->salableItem->getTypeInstance()->setStoreFilter($this->salableItem->getStoreId(), $this->salableItem); + $bundleProduct = $this->product; + /** @var \Magento\Bundle\Model\Product\Type $typeInstance */ + $typeInstance = $bundleProduct->getTypeInstance(); + $typeInstance->setStoreFilter($bundleProduct->getStoreId(), $bundleProduct); - $optionCollection = $this->salableItem->getTypeInstance()->getOptionsCollection($this->salableItem); + /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionCollection */ + $optionCollection = $typeInstance->getOptionsCollection($bundleProduct); - $selectionCollection = $this->salableItem->getTypeInstance()->getSelectionsCollection( - $this->salableItem->getTypeInstance()->getOptionsIds($this->salableItem), - $this->salableItem + $selectionCollection = $typeInstance->getSelectionsCollection( + $typeInstance->getOptionsIds($bundleProduct), + $bundleProduct ); - $this->priceOptions = $optionCollection->appendSelections($selectionCollection, false, false); - return $this->priceOptions; + $priceOptions = $optionCollection->appendSelections($selectionCollection, false, false); + return $priceOptions; } /** + * Get selection amount + * * @param \Magento\Bundle\Model\Selection $selection * @return \Magento\Framework\Pricing\Amount\AmountInterface */ public function getOptionSelectionAmount($selection) { - return $this->createSelection($selection)->getAmount(); - } - - /** - * @param \Magento\Bundle\Model\Selection $selection - * @return \Magento\Bundle\Pricing\Price\BundleSelectionPriceInterface - */ - protected function createSelection($selection) - { - return $this->selectionFactory->create($this->salableItem, $selection, $selection->getSelectionQty()); + $selectionPrice = $this->selectionFactory->create($this->product, $selection, $selection->getSelectionQty()); + return $selectionPrice->getAmount(); } /** + * Calculate maximal or minimal options value + * * @param bool $searchMin * @return bool|float */ protected function calculateOptions($searchMin = true) { - $price = false; - $amountList = []; + $priceList = []; /* @var $option \Magento\Bundle\Model\Option */ foreach ($this->getOptions() as $option) { - if (!$option->getSelections()) { - continue; - } - $amountList = array_merge($amountList, $this->processOptions($option, $searchMin)); - } - if (!empty($amountList)) { - $price = 0.; - foreach ($amountList as $itemAmount) { - $price += $itemAmount->getValue(); - } - } - return $price; - } - - /** - * @param \Magento\Bundle\Model\Option $option - * @param bool $searchMin - * @return \Magento\Framework\Pricing\Amount\AmountInterface[] - */ - protected function processOptions($option, $searchMin = true) - { - $result = []; - foreach ($option->getSelections() as $selection) { - /* @var $selection \Magento\Bundle\Model\Selection */ - if (!$selection->isSalable() || ($searchMin && !$option->getRequired())) { - // @todo CatalogInventory Show out of stock Products + if ($searchMin && !$option->getRequired()) { continue; } - $current = $this->createSelection($selection); - if (empty($result)) { - $result = [$current]; - continue; - } - if ($searchMin && end($result)->getValue() > $current->getValue()) { - $result = [$current]; - } elseif (!$searchMin && $option->isMultiSelection()) { - $result[] = $current; - } elseif (!$searchMin && !$option->isMultiSelection() && end($result)->getValue() < $current->getValue()) { - $result = [$current]; - } + $selectionPriceList = $this->calculator->createSelectionPriceList($option, $this->product); + $selectionPriceList = $this->calculator->processOptions($option, $selectionPriceList, $searchMin); + $priceList = array_merge($priceList, $selectionPriceList); } - return $result; + $amount = $this->calculator->calculateBundleAmount(0., $this->product, $priceList); + return $amount->getValue(); } /** - * Getter for maximal price of options + * Get minimal amount of bundle price with options * - * @return bool|float - */ - public function getMaxValue() - { - if (null === $this->maximalPrice) { - $this->maximalPrice = $this->calculateOptions(false); - } - return $this->maximalPrice; - } - - /** * @return \Magento\Framework\Pricing\Amount\AmountInterface */ public function getAmount() { - return $this->calculator->getAmount(0, $this->salableItem); + return $this->calculator->getOptionsAmount($this->product); } } diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleOptionPriceInterface.php b/app/code/Magento/Bundle/Pricing/Price/BundleOptionPriceInterface.php index 735d2a5345b..1ebfaf97606 100644 --- a/app/code/Magento/Bundle/Pricing/Price/BundleOptionPriceInterface.php +++ b/app/code/Magento/Bundle/Pricing/Price/BundleOptionPriceInterface.php @@ -28,11 +28,6 @@ namespace Magento\Bundle\Pricing\Price; */ interface BundleOptionPriceInterface { - /** - * Price model code - */ - const PRICE_TYPE_BUNDLE_OPTION = 'bundle_option'; - /** * Return calculated options * diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionFactory.php b/app/code/Magento/Bundle/Pricing/Price/BundleSelectionFactory.php index 34312009cc2..473cd58d3cf 100644 --- a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionFactory.php +++ b/app/code/Magento/Bundle/Pricing/Price/BundleSelectionFactory.php @@ -24,7 +24,7 @@ namespace Magento\Bundle\Pricing\Price; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; /** * Bundle selection price factory @@ -34,7 +34,7 @@ class BundleSelectionFactory /** * Default selection class */ - const SELECTION_CLASS_DEFAULT = 'Magento\Bundle\Pricing\Price\BundleSelectionPriceInterface'; + const SELECTION_CLASS_DEFAULT = 'Magento\Bundle\Pricing\Price\BundleSelectionPrice'; /** * Object Manager @@ -56,26 +56,26 @@ class BundleSelectionFactory /** * Create Price object for particular product * - * @param SaleableInterface $bundleProduct - * @param SaleableInterface $selection + * @param Product $bundleProduct + * @param Product $selection * @param float $quantity * @param array $arguments * @throws \InvalidArgumentException - * @return BundleSelectionPriceInterface + * @return BundleSelectionPrice */ public function create( - SaleableInterface $bundleProduct, - SaleableInterface $selection, + Product $bundleProduct, + Product $selection, $quantity, array $arguments = [] ) { $arguments['bundleProduct'] = $bundleProduct; - $arguments['salableItem'] = $selection; + $arguments['saleableItem'] = $selection; $arguments['quantity'] = $quantity ? floatval($quantity) : 1.; $selectionPrice = $this->objectManager->create(self::SELECTION_CLASS_DEFAULT, $arguments); - if (!$selectionPrice instanceof BundleSelectionPriceInterface) { + if (!$selectionPrice instanceof BundleSelectionPrice) { throw new \InvalidArgumentException( - get_class($selectionPrice) . ' doesn\'t implement BundleSelectionPriceInterface' + get_class($selectionPrice) . ' doesn\'t extend BundleSelectionPrice' ); } return $selectionPrice; diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php b/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php index 465eee99417..80e089c3366 100644 --- a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php @@ -26,26 +26,33 @@ namespace Magento\Bundle\Pricing\Price; use Magento\Catalog\Pricing\Price as CatalogPrice; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; use Magento\Bundle\Model\Product\Price; -use Magento\Catalog\Pricing\Price\FinalPriceInterface; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; +use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Framework\Pricing\Price\AbstractPrice; /** * Bundle option price */ -class BundleSelectionPrice extends CatalogPrice\RegularPrice implements BundleSelectionPriceInterface +class BundleSelectionPrice extends AbstractPrice { /** - * @var string + * Price model code */ - protected $priceType = self::PRICE_TYPE_BUNDLE_SELECTION; + const PRICE_CODE = 'bundle_selection'; /** * @var \Magento\Catalog\Model\Product */ protected $bundleProduct; + /** + * @var BasePrice + */ + protected $bundleBasePrice; + /** * Event manager * @@ -54,25 +61,29 @@ class BundleSelectionPrice extends CatalogPrice\RegularPrice implements BundleSe protected $eventManager; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param CalculatorInterface $calculator - * @param \Magento\Catalog\Model\Product $bundleProduct - * @param \Magento\Framework\Event\ManagerInterface $eventManager + * @param SaleableInterface $bundleProduct + * @param ManagerInterface $eventManager */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, CalculatorInterface $calculator, - \Magento\Catalog\Model\Product $bundleProduct, - \Magento\Framework\Event\ManagerInterface $eventManager + SaleableInterface $bundleProduct, + ManagerInterface $eventManager ) { + parent::__construct($saleableItem, $quantity, $calculator); $this->bundleProduct = $bundleProduct; + $this->bundleBasePrice = $this->bundleProduct->getPriceInfo() + ->getPrice(CatalogPrice\BasePrice::PRICE_CODE, $this->quantity); $this->eventManager = $eventManager; - parent::__construct($salableItem, $quantity, $calculator); } /** + * Get the price value for one of selection product + * * @return bool|float */ public function getValue() @@ -83,30 +94,27 @@ class BundleSelectionPrice extends CatalogPrice\RegularPrice implements BundleSe if ($this->bundleProduct->getPriceType() == Price::PRICE_TYPE_DYNAMIC) { $value = $this->priceInfo - ->getPrice(FinalPriceInterface::PRICE_TYPE_FINAL, $this->quantity) + ->getPrice(FinalPrice::PRICE_CODE, $this->quantity) ->getValue(); } else { - if ($this->salableItem->getSelectionPriceType()) { + if ($this->product->getSelectionPriceType()) { // calculate price for selection type percent - // @todo get rid of final price data manipulation that should fire event to apply catalog rules $product = clone $this->bundleProduct; $price = $product->getPriceInfo() - ->getPrice(CatalogPrice\RegularPrice::PRICE_TYPE_PRICE_DEFAULT, $this->quantity) + ->getPrice(CatalogPrice\RegularPrice::PRICE_CODE, $this->quantity) ->getValue(); $product->setFinalPrice($price); $this->eventManager->dispatch( 'catalog_product_get_final_price', array('product' => $product, 'qty' => $this->bundleProduct->getQty()) ); - $value = $product->getData('final_price') * ($this->salableItem->getSelectionPriceValue() / 100); + $value = $product->getData('final_price') * ($this->product->getSelectionPriceValue() / 100); } else { // calculate price for selection type fixed - $value = $this->salableItem->getSelectionPriceValue() * $this->quantity; + $value = $this->product->getSelectionPriceValue() * $this->quantity; } } - $this->value = $this->bundleProduct->getPriceInfo() - ->getPrice(CatalogPrice\BasePrice::PRICE_TYPE_BASE_PRICE, $this->quantity) - ->applyDiscount($value); + $this->value = $this->bundleBasePrice->calculateBaseValue($value); return $this->value; } } diff --git a/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php b/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php new file mode 100644 index 00000000000..63cff4f22b9 --- /dev/null +++ b/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php @@ -0,0 +1,156 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Catalog + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Bundle\Pricing\Price; + +use Magento\Catalog\Model\Product; +use Magento\Catalog\Pricing\Price as CatalogPrice; +use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface; +use Magento\Catalog\Pricing\Price\ConfiguredPriceInterface; +use Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface; + +/** + * Configured price model + */ +class ConfiguredPrice extends CatalogPrice\FinalPrice implements ConfiguredPriceInterface +{ + /** + * Price type configured + */ + const PRICE_CODE = self::CONFIGURED_PRICE_CODE; + + /** + * @var BundleCalculatorInterface + */ + protected $calculator; + + /** + * @var null|ItemInterface + */ + protected $item; + + /** + * @param Product $saleableItem + * @param float $quantity + * @param BundleCalculatorInterface $calculator + * @param ItemInterface $item + */ + public function __construct( + Product $saleableItem, + $quantity, + BundleCalculatorInterface $calculator, + ItemInterface $item = null + ) { + $this->item = $item; + parent::__construct($saleableItem, $quantity, $calculator); + } + + /** + * @param ItemInterface $item + * @return $this + */ + public function setItem(ItemInterface $item) + { + $this->item = $item; + return $this; + } + + /** + * Get Options with attached Selections collection + * + * @return array|\Magento\Bundle\Model\Resource\Option\Collection + */ + public function getOptions() + { + $bundleProduct = $this->product; + $bundleOptions = []; + /** @var \Magento\Bundle\Model\Product\Type $typeInstance */ + $typeInstance = $bundleProduct->getTypeInstance(); + + // get bundle options + $optionsQuoteItemOption = $this->item->getOptionByCode('bundle_option_ids'); + $bundleOptionsIds = $optionsQuoteItemOption ? unserialize($optionsQuoteItemOption->getValue()) : array(); + if ($bundleOptionsIds) { + /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection */ + $optionsCollection = $typeInstance->getOptionsByIds($bundleOptionsIds, $bundleProduct); + // get and add bundle selections collection + $selectionsQuoteItemOption = $this->item->getOptionByCode('bundle_selection_ids'); + $bundleSelectionIds = unserialize($selectionsQuoteItemOption->getValue()); + if ($bundleSelectionIds) { + $selectionsCollection = $typeInstance->getSelectionsByIds($bundleSelectionIds, $bundleProduct); + $bundleOptions = $optionsCollection->appendSelections($selectionsCollection, true); + } + } + return $bundleOptions; + } + + /** + * Option amount calculation for bundle product + * + * @param float $baseValue + * @return \Magento\Framework\Pricing\Amount\AmountInterface + */ + public function getConfiguredAmount($baseValue = 0.) + { + $selectionPriceList = []; + foreach ($this->getOptions() as $option) { + $selectionPriceList = array_merge( + $selectionPriceList, + $this->calculator->createSelectionPriceList($option, $this->product) + ); + } + return $this->calculator->calculateBundleAmount( + $baseValue, + $this->product, + $selectionPriceList + ); + } + + /** + * Get price value + * + * @return float + */ + public function getValue() + { + if ($this->item) { + $configuredOptionsAmount = $this->getConfiguredAmount()->getBaseAmount(); + return parent::getValue() + $this->basePrice->calculateBaseValue($configuredOptionsAmount); + } else { + return parent::getValue(); + } + } + + /** + * Get Amount for configured price which is included amount for all selected options + * + * @return \Magento\Framework\Pricing\Amount\AmountInterface + */ + public function getAmount() + { + return $this->item ? $this->getConfiguredAmount($this->basePrice->getValue()) : parent::getAmount(); + } +} diff --git a/app/code/Magento/Bundle/Pricing/Price/FinalPrice.php b/app/code/Magento/Bundle/Pricing/Price/FinalPrice.php index 459bdca8909..d56223f5918 100644 --- a/app/code/Magento/Bundle/Pricing/Price/FinalPrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/FinalPrice.php @@ -26,7 +26,7 @@ namespace Magento\Bundle\Pricing\Price; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; use Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface; /** @@ -34,30 +34,27 @@ use Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface; */ class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice { + /** + * Price type final + */ + const PRICE_CODE = 'final_price'; + /** * @var BundleCalculatorInterface */ protected $calculator; /** - * @param SaleableInterface $salableItem - * @param float $quantity - * @param BundleCalculatorInterface $calculator + * @var BasePrice */ - public function __construct( - SaleableInterface $salableItem, - $quantity, - BundleCalculatorInterface $calculator - ) { - parent::__construct($salableItem, $quantity, $calculator); - } + protected $basePrice; /** * @return float */ public function getValue() { - return parent::getValue() + $this->basePrice->applyDiscount($this->getBundleOptionPrice()->getValue()); + return parent::getValue() + $this->basePrice->calculateBaseValue($this->getBundleOptionPrice()->getValue()); } /** @@ -65,7 +62,7 @@ class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice */ public function getMaximalPrice() { - return $this->calculator->getMaxAmount($this->basePrice->getValue(), $this->salableItem); + return $this->calculator->getMaxAmount($this->basePrice->getValue(), $this->product); } /** @@ -76,13 +73,12 @@ class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice return $this->getAmount(); } - /** * @return \Magento\Framework\Pricing\Amount\AmountInterface */ public function getAmount() { - return $this->calculator->getAmount(parent::getValue(), $this->salableItem); + return $this->calculator->getAmount(parent::getValue(), $this->product); } /** @@ -90,6 +86,6 @@ class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice */ protected function getBundleOptionPrice() { - return $this->priceInfo->getPrice(BundleOptionPriceInterface::PRICE_TYPE_BUNDLE_OPTION, $this->quantity); + return $this->priceInfo->getPrice(BundleOptionPrice::PRICE_CODE, $this->quantity); } } diff --git a/app/code/Magento/Bundle/Pricing/Price/GroupPrice.php b/app/code/Magento/Bundle/Pricing/Price/GroupPrice.php index 5ea82cde8ce..4ad01eb7649 100644 --- a/app/code/Magento/Bundle/Pricing/Price/GroupPrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/GroupPrice.php @@ -33,6 +33,11 @@ use Magento\Customer\Model\Session; */ class GroupPrice extends \Magento\Catalog\Pricing\Price\GroupPrice { + /** + * Price type group + */ + const PRICE_CODE = 'group_price'; + /** * @return float|bool */ @@ -59,7 +64,7 @@ class GroupPrice extends \Magento\Catalog\Pricing\Price\GroupPrice protected function getBasePrice($qty = null) { return $this->priceInfo - ->getPrice(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_TYPE_BASE_PRICE, $qty) + ->getPrice(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_CODE) ->getValue(); } } diff --git a/app/code/Magento/Bundle/Pricing/Price/SpecialPrice.php b/app/code/Magento/Bundle/Pricing/Price/SpecialPrice.php index 71632bc0a7e..91f7077ed2b 100644 --- a/app/code/Magento/Bundle/Pricing/Price/SpecialPrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/SpecialPrice.php @@ -26,11 +26,18 @@ namespace Magento\Bundle\Pricing\Price; +use Magento\Catalog\Pricing\Price\BasePrice as CatalogBasePrice; + /** * Special price model */ class SpecialPrice extends \Magento\Catalog\Pricing\Price\SpecialPrice { + /** + * Price type special + */ + const PRICE_CODE = 'special_price'; + /** * @return bool|float */ @@ -51,13 +58,12 @@ class SpecialPrice extends \Magento\Catalog\Pricing\Price\SpecialPrice } /** - * @param null|float $qty * @return bool|float */ - protected function getBasePrice($qty = null) + protected function getBasePrice() { return $this->priceInfo - ->getPrice(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_TYPE_BASE_PRICE, $qty) + ->getPrice(CatalogBasePrice::PRICE_CODE) ->getValue(); } } diff --git a/app/code/Magento/Bundle/Pricing/Price/TierPrice.php b/app/code/Magento/Bundle/Pricing/Price/TierPrice.php index 28b3bca19e3..da2b8654b40 100644 --- a/app/code/Magento/Bundle/Pricing/Price/TierPrice.php +++ b/app/code/Magento/Bundle/Pricing/Price/TierPrice.php @@ -29,6 +29,11 @@ namespace Magento\Bundle\Pricing\Price; */ class TierPrice extends \Magento\Catalog\Pricing\Price\TierPrice { + /** + * Price type tier + */ + const PRICE_CODE = 'tier_price'; + /** * @var bool */ diff --git a/app/code/Magento/Bundle/Pricing/Render/FinalPriceBox.php b/app/code/Magento/Bundle/Pricing/Render/FinalPriceBox.php index 3cfe54abfd8..56204fd682e 100644 --- a/app/code/Magento/Bundle/Pricing/Render/FinalPriceBox.php +++ b/app/code/Magento/Bundle/Pricing/Render/FinalPriceBox.php @@ -41,7 +41,7 @@ class FinalPriceBox extends CatalogRender\FinalPriceBox public function showRangePrice() { /** @var Price\BundleOptionPrice $optionPrice */ - $optionPrice = $this->getPriceType(Price\BundleOptionPriceInterface::PRICE_TYPE_BUNDLE_OPTION); + $optionPrice = $this->getPriceType(Price\BundleOptionPrice::PRICE_CODE); return $optionPrice->getValue() !== $optionPrice->getMaxValue(); } } diff --git a/app/code/Magento/Bundle/etc/di.xml b/app/code/Magento/Bundle/etc/di.xml index fc5df0b8e6c..2fb137e4cdf 100644 --- a/app/code/Magento/Bundle/etc/di.xml +++ b/app/code/Magento/Bundle/etc/di.xml @@ -48,69 +48,53 @@ </argument> </arguments> </type> - <type name="Magento\Framework\Pricing\PriceInfo\Factory"> + <virtualType name="Magento\Bundle\Pricing\Adjustment\Collection" type="Magento\Framework\Pricing\Adjustment\Collection"> <arguments> - <argument name="types" xsi:type="array"> - <item name="bundle" xsi:type="string">Magento\Bundle\Pricing\PriceInfo</item> + <argument name="adjustments" xsi:type="array"> + <item name="tax" xsi:type="const">Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE</item> + <item name="weee" xsi:type="const">Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE</item> </argument> </arguments> - </type> + </virtualType> + <preference for="Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface" type="Magento\Bundle\Pricing\Adjustment\Calculator" /> <virtualType name="Magento\Bundle\Pricing\PriceInfo" type="Magento\Framework\Pricing\PriceInfo\Base"> <arguments> - <argument name="prices" xsi:type="object">Magento\Bundle\Pricing\PriceComposite</argument> <argument name="adjustmentCollection" xsi:type="object">Magento\Bundle\Pricing\Adjustment\Collection</argument> </arguments> </virtualType> - <virtualType name="Magento\Bundle\Pricing\PriceComposite" type="Magento\Framework\Pricing\PriceComposite"> + <virtualType name="Magento\Bundle\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> <arguments> - <argument name="metadata" xsi:type="array"> - <item name="regular_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\RegularPrice</item> - <item name="include_in_base_price" xsi:type="boolean">true</item> - </item> - <item name="final_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Bundle\Pricing\Price\FinalPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="tier_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Bundle\Pricing\Price\TierPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="group_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\GroupPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="special_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\SpecialPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="msrp_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\MsrpPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="base_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Bundle\Pricing\Price\BasePrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="custom_option" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\OptionPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="bundle_option" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Bundle\Pricing\Price\BundleOptionPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> + <argument name="prices" xsi:type="array"> + <item name="regular_price" xsi:type="string">Magento\Catalog\Pricing\Price\RegularPrice</item> + <item name="final_price" xsi:type="string">Magento\Bundle\Pricing\Price\FinalPrice</item> + <item name="tier_price" xsi:type="string">Magento\Bundle\Pricing\Price\TierPrice</item> + <item name="group_price" xsi:type="string">Magento\Catalog\Pricing\Price\GroupPrice</item> + <item name="special_price" xsi:type="string">Magento\Catalog\Pricing\Price\SpecialPrice</item> + <item name="msrp_price" xsi:type="string">Magento\Catalog\Pricing\Price\MsrpPrice</item> + <item name="base_price" xsi:type="string">Magento\Bundle\Pricing\Price\BasePrice</item> + <item name="configured_price" xsi:type="string">Magento\Bundle\Pricing\Price\ConfiguredPrice</item> + <item name="bundle_option" xsi:type="string">Magento\Bundle\Pricing\Price\BundleOptionPrice</item> </argument> </arguments> </virtualType> - <virtualType name="Magento\Bundle\Pricing\Adjustment\Collection" type="Magento\Framework\Pricing\Adjustment\Collection"> + <virtualType name="Magento\Bundle\Pricing\Price\Collection" type="Magento\Framework\Pricing\Price\Collection"> <arguments> - <argument name="adjustments" xsi:type="array"> - <item name="tax" xsi:type="const">Magento\Tax\Pricing\Adjustment::CODE</item> - <item name="weee" xsi:type="const">Magento\Weee\Pricing\Adjustment::CODE</item> - </argument> + <argument name="pool" xsi:type="object">Magento\Bundle\Pricing\Price\Pool</argument> </arguments> </virtualType> - <preference for="Magento\Bundle\Pricing\Price\BundleSelectionPriceInterface" type="Magento\Bundle\Pricing\Price\BundleSelectionPrice" /> - <preference for="Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface" type="Magento\Bundle\Pricing\Adjustment\Calculator" /> + <type name="Magento\Framework\Pricing\PriceInfo\Factory"> + <arguments> + <argument name="types" xsi:type="array"> + <item name="bundle" xsi:type="array"> + <item name="infoClass" xsi:type="string">Magento\Bundle\Pricing\PriceInfo</item> + <item name="prices" xsi:type="string">Magento\Bundle\Pricing\Price\Collection</item> + </item> + </argument> + </arguments> + </type> + <type name="Magento\Bundle\Pricing\Price\FinalPrice"> + <arguments> + <argument name="calculator" xsi:type="object">Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface</argument> + </arguments> + </type> </config> diff --git a/app/code/Magento/Bundle/view/adminhtml/product/edit/bundle.phtml b/app/code/Magento/Bundle/view/adminhtml/product/edit/bundle.phtml index 13f1ba425c4..d49c2571894 100644 --- a/app/code/Magento/Bundle/view/adminhtml/product/edit/bundle.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/product/edit/bundle.phtml @@ -81,10 +81,10 @@ '<?php echo $this->getViewFileUrl('Magento_Bundle::product/validation-rules.js'); ?>'); jQuery(function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::js/bundle-product.js') ?>", function () { + head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::js/bundle-product.js') ?>", head.ready(function () { $('#bundle_product_container').mage('bundleProduct'); $('#product_bundle_container .collapse').collapse('hide'); - }); + })); }); </script> diff --git a/app/code/Magento/Bundle/view/adminhtml/product/stock/disabler.phtml b/app/code/Magento/Bundle/view/adminhtml/product/stock/disabler.phtml index cf245c03770..611221f650a 100644 --- a/app/code/Magento/Bundle/view/adminhtml/product/stock/disabler.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/product/stock/disabler.phtml @@ -24,7 +24,7 @@ ?> <script type="text/javascript"> (function($) { - $('#product_info_tabs_product-details_content').on('stockbeforedisable', function(e) { + $('[data-tab-panel=product-details]').on('stockbeforedisable', function(e) { if (e.productType === 'bundle') { return false; } diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_prices.xml b/app/code/Magento/Bundle/view/base/layout/catalog_product_prices.xml similarity index 100% rename from app/code/Magento/Bundle/view/frontend/layout/catalog_product_prices.xml rename to app/code/Magento/Bundle/view/base/layout/catalog_product_prices.xml diff --git a/app/code/Magento/Bundle/view/frontend/product/price/final_price.phtml b/app/code/Magento/Bundle/view/base/product/price/final_price.phtml similarity index 73% rename from app/code/Magento/Bundle/view/frontend/product/price/final_price.phtml rename to app/code/Magento/Bundle/view/base/product/price/final_price.phtml index cf1c4291df1..f507874bae1 100644 --- a/app/code/Magento/Bundle/view/frontend/product/price/final_price.phtml +++ b/app/code/Magento/Bundle/view/base/product/price/final_price.phtml @@ -31,21 +31,9 @@ $productId = $this->getSaleableItem()->getId(); /** @var \Magento\Bundle\Pricing\Price\FinalPrice $finalPriceModel */ $finalPriceModel = $this->getPrice(); ?> -<?php -if (isset($_GET['showmeprice'])) { - echo 'Regular Price :' . $this->getPriceType('regular_price')->getValue() . "<br />"; - echo 'Special Price :' . $this->getPriceType('special_price')->getValue(). "<br />"; - echo 'Group Price :' . $this->getPriceType('group_price')->getValue(). "<br />"; - echo 'Catalog Rule Price :' . $this->getPriceType('catalog_rule_price')->getValue(). "<br />"; - echo 'Tier Price :' . $this->getPriceType('tier_price')->getValue(). "<br />"; - echo 'Base Price :' . $this->getPriceType('base_price')->getValue(). "<br />"; - echo 'Final Price :' . $finalPriceModel->getValue(). "<br />"; - echo "<br />"; -} -?> <?php if ($this->getSaleableItem()->getPriceView()): ?> <p class="minimal-price"> - <?php echo $this->renderAmount($finalPriceModel->getAmount(), [ + <?php echo $this->renderAmount($finalPriceModel->getMinimalPrice(), [ 'display_label' => __('As low as'), 'price_id' => $this->getPriceId('from-'), 'include_container' => true @@ -54,7 +42,7 @@ if (isset($_GET['showmeprice'])) { <?php else: ?> <?php if ($this->showRangePrice()): ?> <p class="price-from"> - <?php echo $this->renderAmount($finalPriceModel->getAmount(), [ + <?php echo $this->renderAmount($finalPriceModel->getMinimalPrice(), [ 'display_label' => __('From:'), 'price_id' => $this->getPriceId('from-'), 'include_container' => true @@ -68,7 +56,7 @@ if (isset($_GET['showmeprice'])) { ]); ?> </p> <?php else: ?> - <?php echo $this->renderAmount($finalPriceModel->getAmount(), [ + <?php echo $this->renderAmount($finalPriceModel->getMinimalPrice(), [ 'price_id' => $this->getPriceId('product-price-'), 'include_container' => true ]); ?> diff --git a/app/code/Magento/Bundle/view/frontend/product/price/selection/amount.phtml b/app/code/Magento/Bundle/view/base/product/price/selection/amount.phtml similarity index 100% rename from app/code/Magento/Bundle/view/frontend/product/price/selection/amount.phtml rename to app/code/Magento/Bundle/view/base/product/price/selection/amount.phtml diff --git a/app/code/Magento/Bundle/view/frontend/product/price/tier_prices.phtml b/app/code/Magento/Bundle/view/base/product/price/tier_prices.phtml similarity index 100% rename from app/code/Magento/Bundle/view/frontend/product/price/tier_prices.phtml rename to app/code/Magento/Bundle/view/base/product/price/tier_prices.phtml diff --git a/app/code/Magento/Bundle/view/frontend/bundle.js b/app/code/Magento/Bundle/view/frontend/bundle.js index 7c061ff6b16..e5b6ae3ccd6 100644 --- a/app/code/Magento/Bundle/view/frontend/bundle.js +++ b/app/code/Magento/Bundle/view/frontend/bundle.js @@ -85,11 +85,12 @@ var parts = _qty.attr('id').split('-'), value = _elem.val(), quantity = parseInt(_qty.val(), 10); - if (quantity > 0 && _this.options.bundleConfig.options[parts[2]] && + if (quantity > 0 && + _this.options.bundleConfig.options[parts[2]] && _this.options.bundleConfig.options[parts[2]].selections[value] && _this.options.optionConfig.options[parts[2]].selections[_elem.val()] && _this.options.optionConfig.options[parts[2]] - ) { + ) { _this.options.bundleConfig.options[parts[2]].selections[value].qty = parseInt(quantity, 10); _this.options.optionConfig.options[parts[2]].selections[_elem.val()].qty = parseInt(quantity, 10); } diff --git a/app/code/Magento/Bundle/view/frontend/catalog/product/price.phtml b/app/code/Magento/Bundle/view/frontend/catalog/product/price.phtml deleted file mode 100644 index 49234a35756..00000000000 --- a/app/code/Magento/Bundle/view/frontend/catalog/product/price.phtml +++ /dev/null @@ -1,265 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -?> -<?php $_product = $this->getProduct() ?> -<?php $_priceModel = $_product->getPriceModel() ?> -<?php list($_minimalPriceTax, $_maximalPriceTax) = $_priceModel->getTotalPrices($_product, null, null, false) ?> -<?php list($_minimalPriceInclTax, $_maximalPriceInclTax) = $_priceModel->getTotalPrices($_product, null, true, false) ?> -<?php $_id = $_product->getId() ?> - -<?php $_weeeTaxAmount = 0; ?> -<?php /** @var $weeeHelper \Magento\Weee\Helper\Data */ ?> -<?php $weeeHelper = $this->helper('Magento\Weee\Helper\Data'); ?> - -<?php -$isFixed = $_product->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_FIXED; -if ($_product->getPriceType() == \Magento\Bundle\Model\Product\Price::PRICE_TYPE_FIXED) { - $_weeeTaxAmount = $weeeHelper->getAmount($_product); - $_weeeTaxAmountInclTaxes = $_weeeTaxAmount; - if ($weeeHelper->isTaxable()) { - $_attributes = $weeeHelper->getProductWeeeAttributesForRenderer($_product, null, null, null, true); - $_weeeTaxAmountInclTaxes = $weeeHelper->getAmountInclTaxes($_attributes); - } - if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(array(0, 1, 4))) { - $_minimalPriceTax += $_weeeTaxAmount; - $_minimalPriceInclTax += $_weeeTaxAmountInclTaxes; - } - if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(2)) { - $_minimalPriceInclTax += $_weeeTaxAmountInclTaxes; - } - - if ($weeeHelper->typeOfDisplay(array(1, 2, 4))) { - $_weeeTaxAttributes = $weeeHelper->getProductWeeeAttributesForDisplay($_product); - } -} -?> - -<div class="price-box"> - <?php if ($_product->getPriceView()): ?> - <p class="minimal-price"> - <span class="price-label"><?php echo __('As low as') ?>:</span> - <?php if ($this->displayBothPrices()): ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceTax) ?> - </span> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceInclTax) ?> - </span> - <?php else: ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceTax) ?> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <?php if ($weeeHelper->typeOfDisplay(2) && $_weeeTaxAmount): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceInclTax) ?> - <?php endif; ?> - <?php endif; ?> - </p> - <?php else: ?> - <?php if ($_minimalPriceTax <> $_maximalPriceTax): ?> - <p class="price-from"> - <span class="price-label"><?php echo __('From') ?>:</span> - <?php if ($this->displayBothPrices()): ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceTax) ?> - </span> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceInclTax) ?> - </span> - <?php else: ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceTax) ?> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <?php if ($weeeHelper->typeOfDisplay(2) && $_weeeTaxAmount): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceInclTax) ?> - <?php endif; ?> - <?php endif; ?> - </p> - <?php - if ($isFixed) { - if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(array(0, 1, 4))) { - $_maximalPriceTax += $_weeeTaxAmount; - $_maximalPriceInclTax += $_weeeTaxAmountInclTaxes; - } - if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(2)) { - $_maximalPriceInclTax += $_weeeTaxAmountInclTaxes; - } - } - ?> - <p class="price-to"> - <span class="price-label"><?php echo __('To') ?>:</span> - <?php if ($this->displayBothPrices()): ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_maximalPriceTax) ?> - </span> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_maximalPriceInclTax) ?> - </span> - <?php else: ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_maximalPriceTax) ?> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <?php if ($weeeHelper->typeOfDisplay(2) && $_weeeTaxAmount): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_maximalPriceInclTax) ?> - <?php endif; ?> - <?php endif; ?> - </p> - <?php else: ?> - <?php if ($this->displayBothPrices()): ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceTax) ?> - </span> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceInclTax) ?> - </span> - <?php else: ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceTax) ?> - <?php if ($_weeeTaxAmount && $isFixed && $weeeHelper->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($weeeHelper->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <?php if ($weeeHelper->typeOfDisplay(2) && $_weeeTaxAmount): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_minimalPriceInclTax) ?> - <?php endif; ?> - <?php endif; ?> - <?php endif; ?> - <?php endif; ?> -</div> diff --git a/app/code/Magento/Bundle/view/frontend/catalog/product/view/price.phtml b/app/code/Magento/Bundle/view/frontend/catalog/product/view/price.phtml deleted file mode 100644 index f06db442949..00000000000 --- a/app/code/Magento/Bundle/view/frontend/catalog/product/view/price.phtml +++ /dev/null @@ -1,105 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -?> -<?php $_product = $this->getProduct() ?> -<?php $_finalPrice = $_product->getFinalPrice() ?> -<?php $_finalPriceInclTax = $_product->getFinalPrice() ?> -<?php $_weeeTaxAmount = 0; ?> -<?php -if ($_product->getPriceType() == 1) { - $_weeeTaxAmount = $this->helper('Magento\Weee\Helper\Data')->getAmount($_product); - if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(array(1,2,4))) { - $_weeeTaxAttributes = $this->helper('Magento\Weee\Helper\Data')->getProductWeeeAttributesForDisplay($_product); - } -} -$isMAPTypeOnGesture = $this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product); -$canApplyMAP = $this->helper('Magento\Catalog\Helper\Data')->canApplyMsrp($_product); -?> -<?php if ($_product->getCanShowPrice() !== false):?> -<div class="price-box"> - <p class="price-as-configured"> - <span class="price-label"><?php echo __('Price as configured') ?>:</span> - <?php if (!$this->getWithoutPrice()): ?> - <span<?php if (!$isMAPTypeOnGesture && $canApplyMAP): ?> style="display:none"<?php endif ?> class="full-product-price"> - <?php if ($this->helper('Magento\Tax\Helper\Data')->displayBothPrices()): ?> - <span class="price-tax"> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>"> - <?php if (!$canApplyMAP): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_finalPrice,true,false) ?> - <?php endif ?> - </span> - </span> - <?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && $this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>"> - <?php if (!$canApplyMAP): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_finalPriceInclTax,true,false) ?> - <?php endif ?> - </span> - </span> - </span> - <?php else: ?> - <span class="price" id="product-price-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>"> - <?php if (!$canApplyMAP): ?> - <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_finalPrice,true,false) ?> - <?php endif ?> - </span> - <?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && $this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(array(2, 1, 4))): ?> - <span class="weee">(<small> - <?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(array(2, 4))): ?> - <?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?> - <?php else: ?> - <?php $amount = $_weeeTaxAttribute->getAmount(); ?> - <?php endif; ?> - - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($amount, true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - </small>)</span> - <?php endif; ?> - <?php endif; ?> - </span> - <?php endif ?> - </p> -</div> -<?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/catalog/product/view/summary.phtml b/app/code/Magento/Bundle/view/frontend/catalog/product/view/summary.phtml index aff43e4169d..4767cd194dd 100644 --- a/app/code/Magento/Bundle/view/frontend/catalog/product/view/summary.phtml +++ b/app/code/Magento/Bundle/view/frontend/catalog/product/view/summary.phtml @@ -27,7 +27,9 @@ $_product = $this->getProduct(); ?> <?php if ($_product->isSaleable() && $this->hasOptions()): ?> -<div id="bundleSummary" class="block bundle summary"> +<div id="bundleSummary" + class="block bundle summary" + data-mage-init='{"sticky":{"container": ".product.add.form"}}'> <div class="title"> <strong><?php echo __('Your Customization'); ?></strong> </div> @@ -68,24 +70,15 @@ <script> //<![CDATA[ (function ($) { - head.js("<?php echo $this->getViewFileUrl('mage/sticky.js') ?>",function() { - $('#bundleSummary').sticky({ - container: '.product.add.form' - }); - }); - - head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::js/slide.js')?>", function() { - $('.product.add.form').slide({ - slideSpeed: 1500, - slideSelector: '#bundle-slide', - slideBackSelector: '.action.customization.back', - bundleProductSelector: '#bundleProduct', - bundleOptionsContainer: '.product.add.form', - <?php if ($this->isStartCustomization()): ?> - autostart: true - <?php endif;?> - } - ); + $('.product.add.form').mage('slide', { + 'slideSpeed': 1500, + 'slideSelector': '#bundle-slide', + 'slideBackSelector': '.action.customization.back', + 'bundleProductSelector': '#bundleProduct', + 'bundleOptionsContainer': '.product.add.form', + <?php if ($this->isStartCustomization()): ?> + 'autostart': true + <?php endif;?> }); })(jQuery); //]]> diff --git a/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle.phtml b/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle.phtml index 6e1f581c966..8ade7b2e0e3 100644 --- a/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle.phtml +++ b/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle.phtml @@ -29,12 +29,12 @@ <script type="text/javascript"> //<![CDATA[ (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::/bundle.js') ?>", function() { - $('#product_addtocart_form').bundleOption({ - bundleConfig: <?php echo $this->getJsonConfig() ?>, - bundleOptionQtyPrefix: "#bundle-option-", - bundleOptionQtySuffix: "-qty-input", - priceSelectors: { + $(document).ready(function() { + $('#product_addtocart_form').mage('bundleOption', { + "bundleConfig": <?php echo $this->getJsonConfig() ?>, + "bundleOptionQtyPrefix": "#bundle-option-", + "bundleOptionQtySuffix": "-qty-input", + "priceSelectors": { "product-price": "#product-price-<?php echo $_product->getId()?>", "bundle-price": "#bundle-price-<?php echo $_product->getId()?>", "price-including-tax": "#price-including-tax-<?php echo $_product->getId()?>", diff --git a/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle/options.phtml b/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle/options.phtml index 0cdd508ba05..96bf9755008 100644 --- a/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle/options.phtml +++ b/app/code/Magento/Bundle/view/frontend/catalog/product/view/type/bundle/options.phtml @@ -24,18 +24,18 @@ ?> <?php /** @var $this Magento\Bundle\Block\Catalog\Product\View\Type\Bundle */ ?> <?php -$_product = $this->getProduct(); -$_helper = $this->helper('Magento\Catalog\Helper\Output'); +$product = $this->getProduct(); +$helper = $this->helper('Magento\Catalog\Helper\Output'); ?> -<?php $_options = $this->decorateArray($this->getOptions()); ?> -<?php if ($_product->isSaleable()):?> - <?php if (count($_options)): ?> +<?php $options = $this->decorateArray($this->getOptions()); ?> +<?php if ($product->isSaleable()):?> + <?php if (count($options)): ?> <script type="text/javascript"> //<![CDATA[ (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::bundle.js') ?>", function () { - $('#product_addtocart_form') - .bundleOption({'optionConfig':<?php echo $this->getJsonConfig()?>}) + $(document).ready(function() { + $('#product_addtocart_form').mage('bundleOption', { + optionConfig:<?php echo $this->getJsonConfig()?>}) .trigger('changeSelection'); }); })(jQuery); @@ -43,13 +43,13 @@ $_helper = $this->helper('Magento\Catalog\Helper\Output'); </script> <fieldset class="fieldset bundle options"> <legend id="customizeTitle" class="legend title"> - <span><?php echo __('Customize %1', $_helper->productAttribute($_product, $_product->getName(), 'name')) ?></span> + <span><?php echo __('Customize %1', $helper->productAttribute($product, $product->getName(), 'name')) ?></span> </legend><br /> - <?php foreach ($_options as $_option): ?> - <?php if (!$_option->getSelections()): ?> + <?php foreach ($options as $option): ?> + <?php if (!$option->getSelections()): ?> <?php continue; ?> <?php endif; ?> - <?php echo $this->getOptionHtml($_option) ?> + <?php echo $this->getOptionHtml($option) ?> <?php endforeach; ?> </fieldset> <?php else: ?> diff --git a/app/code/Magento/Bundle/view/frontend/js/components.phtml b/app/code/Magento/Bundle/view/frontend/js/components.phtml new file mode 100644 index 00000000000..290162c2534 --- /dev/null +++ b/app/code/Magento/Bundle/view/frontend/js/components.phtml @@ -0,0 +1,46 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> + <script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + sticky: [ + '<?php echo $this->getViewFileUrl('mage/sticky.js') ?>' + ], + bundleOption: [ + '<?php echo $this->getViewFileUrl('Magento_Bundle::bundle.js') ?>' + ], + slide: [ + '<?php echo $this->getViewFileUrl('Magento_Bundle::js/slide.js') ?>' + ] + }); + })(jQuery); + </script> +<?php echo $this->getChildHtml() ?> \ No newline at end of file diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_compare_index.xml b/app/code/Magento/Bundle/view/frontend/layout/catalog_product_compare_index.xml deleted file mode 100644 index e552001556c..00000000000 --- a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_compare_index.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="catalog.compare.list"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view.xml deleted file mode 100644 index 6455858a3ef..00000000000 --- a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="catalog.product.related"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_bundle.xml b/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_bundle.xml index 8066d67661c..a477b243567 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_bundle.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_bundle.xml @@ -25,11 +25,6 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <referenceBlock name="head"> - <block class="Magento\Theme\Block\Html\Head\Script" name="magento-bundle-bundle-js"> - <arguments> - <argument name="file" xsi:type="string">Magento_Bundle::bundle.js</argument> - </arguments> - </block> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-bundle-js-product-summary-js"> <arguments> <argument name="file" xsi:type="string">Magento_Bundle::js/product-summary.js</argument> @@ -42,11 +37,13 @@ </action> </referenceBlock> <referenceBlock name="product.info"> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.summary" as="form_top" template="catalog/product/view/summary.phtml"> - <block class="Magento\Bundle\Block\Catalog\Product\Price" name="bundle.prices" as="bundle_prices" template="catalog/product/view/price.phtml"> - <action method="setMAPTemplate"> - <argument name="tmpl" xsi:type="string">Magento_Catalog::product/price_msrp_item.phtml</argument> - </action> + <block class="Magento\Catalog\Block\Product\View" name="bundle.summary" as="form_top" template="Magento_Bundle::catalog/product/view/summary.phtml"> + <block class="Magento\Catalog\Pricing\Render" name="product.price.render.bundle.customization"> + <arguments> + <argument name="price_render" xsi:type="string">product.price.render.default</argument> + <argument name="price_type_code" xsi:type="string">configured_price</argument> + <argument name="zone" xsi:type="string">item_view</argument> + </arguments> </block> <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart.bundle" as="addtocart" template="product/view/addtocart.phtml"/> <block class="Magento\Catalog\Block\Product\View" name="product.info.addto.bundle" as="addto" template="product/view/addto.phtml"/> @@ -64,7 +61,7 @@ <move element="product.price.tier" destination="product.info.options.wrapper.bottom" before="-" /> <referenceBlock name="product.info.options.wrapper.bottom"> <block class="Magento\CatalogInventory\Block\Qtyincrements" name="product.info.qtyincrements" before="-" template="qtyincrements.phtml"/> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.back.button" as="backButton" after="-" template="catalog/product/view/backbutton.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="bundle.back.button" as="backButton" after="-" template="Magento_Bundle::catalog/product/view/backbutton.phtml"/> <action method="unsetChild"> <argument name="block" xsi:type="string">product.info.addtocart</argument> </action> @@ -80,21 +77,8 @@ <move element="product.info" destination="bundle.options.container" before="-"/> </referenceContainer> <referenceContainer name="product.info.type"> - <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle" as="product_type_data" template="catalog/product/view/type/bundle.phtml"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/view/price.phtml</argument> - </action> - </block> + <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle" as="product_type_data" template="catalog/product/view/type/bundle.phtml"/> <container name="product.info.bundle.extra" after="product.info.bundle" as="product_type_data_extra" label="Product Extra Info"/> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="customize.button" as="customize_button" template="catalog/product/view/customize.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="customize.button" as="customize_button" template="Magento_Bundle::catalog/product/view/customize.phtml"/> </referenceContainer> - <referenceBlock name="product.clone_prices"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/view/price.phtml</argument> - </action> - </referenceBlock> </layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_simple.xml b/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_simple.xml index 75418ce9632..de213eab989 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_simple.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/catalog_product_view_type_simple.xml @@ -25,11 +25,6 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <referenceBlock name="product.info.upsell"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> <action method="setItemLimit"> <argument name="type" xsi:type="string">bundle</argument> <argument name="limit" xsi:type="string">4</argument> diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalogsearch_advanced_result.xml b/app/code/Magento/Bundle/view/frontend/layout/catalogsearch_advanced_result.xml deleted file mode 100644 index 403b2e3b52a..00000000000 --- a/app/code/Magento/Bundle/view/frontend/layout/catalogsearch_advanced_result.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="search_result_list"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_configure_type_bundle.xml b/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_configure_type_bundle.xml index a96747e5482..d1c5bffba06 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_configure_type_bundle.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_configure_type_bundle.xml @@ -25,6 +25,9 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="catalog_product_view_type_bundle"/> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="bundle_cart_configure_head_components" template="Magento_Checkout::js/components.phtml"/> + </referenceBlock> <referenceBlock name="product.info.addtocart.bundle"> <action method="setTemplate"> <argument name="template" xsi:type="string">Magento_Checkout::cart/item/configure/updatecart.phtml</argument> diff --git a/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_index.xml b/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_index.xml deleted file mode 100644 index 6970987b0d2..00000000000 --- a/app/code/Magento/Bundle/view/frontend/layout/checkout_cart_index.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="checkout.cart.crosssell"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/default.xml b/app/code/Magento/Bundle/view/frontend/layout/default.xml index 795e85e565d..b7ad9b861ed 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/default.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/default.xml @@ -24,18 +24,7 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="wishlist_sidebar"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> - <referenceBlock name="catalog_product_price_template"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="bundle_checkout_page_head_components" template="Magento_Bundle::js/components.phtml"/> </referenceBlock> </layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/tag_product_list.xml b/app/code/Magento/Bundle/view/frontend/layout/tag_product_list.xml deleted file mode 100644 index 403b2e3b52a..00000000000 --- a/app/code/Magento/Bundle/view/frontend/layout/tag_product_list.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="search_result_list"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Captcha/view/frontend/default.phtml b/app/code/Magento/Captcha/view/frontend/default.phtml index c7fcca18f08..04d94e068da 100644 --- a/app/code/Magento/Captcha/view/frontend/default.phtml +++ b/app/code/Magento/Captcha/view/frontend/default.phtml @@ -31,26 +31,20 @@ <div class="control captcha"> <input name="<?php echo \Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE ?>[<?php echo $this->getFormId()?>]" type="text" class="input-text required-entry" data-validate="{required:true}" id="captcha_<?php echo $this->getFormId() ?>" /> <div class="nested"> - <div class="field captcha no-label" data-captcha="<?php echo $this->getFormId()?>" id="captcha-container-<?php echo $this->getFormId()?>"> + <div class="field captcha no-label" + data-captcha="<?php echo $this->getFormId()?>" + id="captcha-container-<?php echo $this->getFormId()?>" + data-mage-init='{"captcha":{"url": "<?php echo $this->getRefreshUrl()?>", + "type": "<?php echo $this->getFormId() ?>"}}'> <div class="control captcha-image"> <button type="button" class="action reload captcha-reload" title="<?php echo __('Reload captcha') ?>"><span><?php echo __('Reload captcha') ?></span></button> <img alt="<?php echo __('Please type the letters below')?>" class="captcha-img" height="<?php echo $this->getImgHeight() ?>" src="<?php echo $captcha->getImgSrc() ?>"/> <?php if ($captcha->isCaseSensitive()) :?> - <div class="captcha-note note"> - <?php echo __('<strong>Attention</strong>: Captcha is case sensitive.') ?> - </div> + <div class="captcha-note note"> + <?php echo __('<strong>Attention</strong>: Captcha is case sensitive.') ?> + </div> <?php endif; ?> </div> - <script type="text/javascript">//<![CDATA[ - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Captcha::captcha.js') ?>",function() { - $('#captcha-container-<?php echo $this->getFormId()?>').captcha({ - url: '<?php echo $this->getRefreshUrl()?>', - type: '<?php echo $this->getFormId() ?>' - }); - }); - })(jQuery); - //]]></script> </div> </div> </div> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/price.phtml b/app/code/Magento/Captcha/view/frontend/js/components.phtml similarity index 69% rename from app/code/Magento/Catalog/view/frontend/product/view/price.phtml rename to app/code/Magento/Captcha/view/frontend/js/components.phtml index 82ddae66f4a..637c92eb747 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/price.phtml +++ b/app/code/Magento/Captcha/view/frontend/js/components.phtml @@ -19,9 +19,22 @@ * needs please refer to http://www.magentocommerce.com for more information. * * @category design + * @package base_default * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -<?php $_product = $this->getProduct() ?> -<?php echo $this->getPriceHtml($_product) ?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + captcha: [ + '<?php echo $this->getViewFileUrl('Magento_Captcha::captcha.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml index c81985c1bc3..5d61af923cc 100644 --- a/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml +++ b/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml @@ -68,4 +68,7 @@ </action> </block> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="captcha_page_head_components" template="Magento_Captcha::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Captcha/view/frontend/layout/contacts_index_index.xml b/app/code/Magento/Captcha/view/frontend/layout/contacts_index_index.xml index 4a4996ea5f8..affbbb616da 100644 --- a/app/code/Magento/Captcha/view/frontend/layout/contacts_index_index.xml +++ b/app/code/Magento/Captcha/view/frontend/layout/contacts_index_index.xml @@ -37,4 +37,7 @@ </action> </block> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="captcha_page_head_components" template="Magento_Captcha::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Captcha/view/frontend/layout/customer_account_create.xml b/app/code/Magento/Captcha/view/frontend/layout/customer_account_create.xml index 6f2c7772e4f..67cc574af8c 100644 --- a/app/code/Magento/Captcha/view/frontend/layout/customer_account_create.xml +++ b/app/code/Magento/Captcha/view/frontend/layout/customer_account_create.xml @@ -37,4 +37,7 @@ </action> </block> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="captcha_page_head_components" template="Magento_Captcha::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Captcha/view/frontend/layout/customer_account_forgotpassword.xml b/app/code/Magento/Captcha/view/frontend/layout/customer_account_forgotpassword.xml index 208286eb724..5ce7ad5e554 100644 --- a/app/code/Magento/Captcha/view/frontend/layout/customer_account_forgotpassword.xml +++ b/app/code/Magento/Captcha/view/frontend/layout/customer_account_forgotpassword.xml @@ -37,4 +37,7 @@ </action> </block> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="captcha_page_head_components" template="Magento_Captcha::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Captcha/view/frontend/layout/customer_account_login.xml b/app/code/Magento/Captcha/view/frontend/layout/customer_account_login.xml index c345dae694f..f458c779d69 100644 --- a/app/code/Magento/Captcha/view/frontend/layout/customer_account_login.xml +++ b/app/code/Magento/Captcha/view/frontend/layout/customer_account_login.xml @@ -37,4 +37,7 @@ </action> </block> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="captcha_page_head_components" template="Magento_Captcha::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Catalog/Block/Product/AbstractProduct.php b/app/code/Magento/Catalog/Block/Product/AbstractProduct.php index 08c0ac7bf0e..283a717867c 100644 --- a/app/code/Magento/Catalog/Block/Product/AbstractProduct.php +++ b/app/code/Magento/Catalog/Block/Product/AbstractProduct.php @@ -34,8 +34,6 @@ */ namespace Magento\Catalog\Block\Product; -use Magento\Framework\View\Element\BlockInterface; - /** * Class AbstractProduct */ @@ -58,16 +56,6 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template */ protected $_priceBlockDefaultTemplate = 'product/price.phtml'; - /** - * @var string - */ - protected $_tierPriceDefaultTemplate = 'product/view/tierprices.phtml'; - - /** - * @var array - */ - protected $_priceBlockTypes = array(); - /** * Flag which allow/disallow to use link for as low as price * @@ -162,12 +150,10 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template /** * @param Context $context * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_imageHelper = $context->getImageHelper(); $this->_layoutHelper = $context->getLayoutHelper(); @@ -179,7 +165,6 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template $this->_taxData = $context->getTaxData(); $this->_catalogData = $context->getCatalogHelper(); $this->_mathRandom = $context->getMathRandom(); - $this->_priceBlockTypes = $priceBlockTypes; $this->reviewRenderer = $context->getReviewRenderer(); parent::__construct($context, $data); } @@ -267,51 +252,6 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template return null; } - /** - * @param string $productTypeId - * @return BlockInterface - */ - protected function _getPriceBlock($productTypeId) - { - if (!isset($this->_priceBlock[$productTypeId])) { - $block = $this->_block; - if (isset($this->_priceBlockTypes[$productTypeId])) { - if ($this->_priceBlockTypes[$productTypeId]['block'] != '') { - $block = $this->_priceBlockTypes[$productTypeId]['block']; - } - } - $this->_priceBlock[$productTypeId] = $this->getLayout()->createBlock($block); - } - return $this->_priceBlock[$productTypeId]; - } - - /** - * @param string $productTypeId - * @return string - */ - protected function _getPriceBlockTemplate($productTypeId) - { - if (isset($this->_priceBlockTypes[$productTypeId])) { - if ($this->_priceBlockTypes[$productTypeId]['template'] != '') { - return $this->_priceBlockTypes[$productTypeId]['template']; - } - } - return $this->_priceBlockDefaultTemplate; - } - - /** - * Prepares and returns block to render some product type - * - * @param string $productType - * @return \Magento\Framework\View\Element\Template - */ - public function _preparePriceRenderer($productType) - { - return $this->_getPriceBlock($productType) - ->setTemplate($this->_getPriceBlockTemplate($productType)) - ->setUseLinkForAsLowAs($this->_useLinkForAsLowAs); - } - /** * Returns product price block html * @@ -342,21 +282,6 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template ->toHtml(); } - /** - * Adding customized price template for product type - * - * @param string $type - * @param string $block - * @param string $template - * @return void - */ - public function addPriceBlockType($type, $block = '', $template = '') - { - if ($type) { - $this->_priceBlockTypes[$type] = array('block' => $block, 'template' => $template); - } - } - /** * Get product reviews summary * @@ -386,102 +311,6 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template return $this->getData('product'); } - /** - * Retrieve tier price template - * - * @return string - */ - public function getTierPriceTemplate() - { - if (!$this->hasData('tier_price_template')) { - return $this->_tierPriceDefaultTemplate; - } - - return $this->getData('tier_price_template'); - } - - /** - * Returns product tier price block html - * - * @param \Magento\Catalog\Model\Product $product - * @return string - */ - public function getTierPriceHtml($product = null) - { - if (is_null($product)) { - $product = $this->getProduct(); - } - return $this->_getPriceBlock($product->getTypeId()) - ->setTemplate($this->getTierPriceTemplate()) - ->setProduct($product) - ->toHtml(); - } - - /** - * Get tier prices (formatted) - * - * @param \Magento\Catalog\Model\Product $product - * @return array - * - * @deprecated see \Magento\Catalog\Pricing\Price\TierPrice - */ - public function getTierPrices($product = null) - { - if (is_null($product)) { - $product = $this->getProduct(); - } - $prices = $product->getFormatedTierPrice(); - - $res = array(); - if (is_array($prices)) { - foreach ($prices as $price) { - $price['price_qty'] = $price['price_qty'] * 1; - - $productPrice = $product->getPrice(); - if ($productPrice != $product->getFinalPrice()) { - $productPrice = $product->getFinalPrice(); - } - - // Group price must be used for percent calculation if it is lower - $groupPrice = $product->getGroupPrice(); - if ($productPrice > $groupPrice) { - $productPrice = $groupPrice; - } - - if ($price['price'] < $productPrice) { - $price['savePercent'] = ceil(100 - ((100 / $productPrice) * $price['price'])); - - $tierPrice = $this->_storeManager->getStore()->convertPrice( - $this->_taxData->getPrice($product, $price['website_price']) - ); - $price['formated_price'] = $this->_storeManager->getStore()->formatPrice($tierPrice); - $price['formated_price_incl_tax'] = $this->_storeManager->getStore()->formatPrice( - $this->_storeManager->getStore()->convertPrice( - $this->_taxData->getPrice($product, $price['website_price'], true) - ) - ); - - if ($this->_catalogData->canApplyMsrp($product)) { - $oldPrice = $product->getFinalPrice(); - $product->setPriceCalculation(false); - $product->setPrice($tierPrice); - $product->setFinalPrice($tierPrice); - - $this->getPriceHtml($product); - $product->setPriceCalculation(true); - - $price['real_price_html'] = $product->getRealPriceHtml(); - $product->setFinalPrice($oldPrice); - } - - $res[] = $price; - } - } - } - - return $res; - } - /** * Add all attributes and apply pricing logic to products collection * to get correct values in different products lists. @@ -656,26 +485,6 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template return (bool) $statusInfo->getDisplayStatus(); } - /** - * If exists price template block, retrieve price blocks from it - * - * @return \Magento\Catalog\Block\Product\AbstractProduct - */ - protected function _prepareLayout() - { - parent::_prepareLayout(); - - /* @var $block \Magento\Catalog\Block\Product\Price\Template */ - $block = $this->getLayout()->getBlock('catalog_product_price_template'); - if ($block) { - foreach ($block->getPriceBlockTypes() as $type => $priceBlock) { - $this->addPriceBlockType($type, $priceBlock['block'], $priceBlock['template']); - } - } - - return $this; - } - /** * Product thumbnail image url getter * @@ -830,7 +639,7 @@ abstract class AbstractProduct extends \Magento\Framework\View\Element\Template { return $this->getProductPriceHtml( $product, - \Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST ); } diff --git a/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php b/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php index 0c7420b7323..21f2196a89f 100644 --- a/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php +++ b/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php @@ -114,7 +114,6 @@ class ListCompare extends \Magento\Catalog\Block\Product\Compare\AbstractCompare * @param \Magento\Framework\App\Http\Context $httpContext * @param \Magento\Customer\Service\V1\CustomerCurrentService $currentCustomer * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -124,8 +123,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\Compare\AbstractCompare \Magento\Log\Model\Visitor $logVisitor, \Magento\Framework\App\Http\Context $httpContext, \Magento\Customer\Service\V1\CustomerCurrentService $currentCustomer, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_coreData = $coreData; $this->_itemCollectionFactory = $itemCollectionFactory; @@ -135,8 +133,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\Compare\AbstractCompare $this->currentCustomer = $currentCustomer; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } @@ -279,7 +276,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\Compare\AbstractCompare $price = ''; if ($priceRender) { $price = $priceRender->render( - \Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, $product, [ 'price_id' => 'product-price-' . $product->getId() . $idSuffix, diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 8db2d9d61e8..58ccf88a6ca 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -73,23 +73,20 @@ class ListProduct extends AbstractProduct implements IdentityInterface * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory * @param \Magento\Catalog\Model\Layer $catalogLayer * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Core\Helper\PostData $postDataHelper, \Magento\Catalog\Model\CategoryFactory $categoryFactory, \Magento\Catalog\Model\Layer $catalogLayer, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_categoryFactory = $categoryFactory; $this->_catalogLayer = $catalogLayer; $this->_postDataHelper = $postDataHelper; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); } @@ -359,7 +356,7 @@ class ListProduct extends AbstractProduct implements IdentityInterface $price = ''; if ($priceRender) { $price = $priceRender->render( - \Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, $product, [ 'include_container' => true, diff --git a/app/code/Magento/Catalog/Block/Product/NewProduct.php b/app/code/Magento/Catalog/Block/Product/NewProduct.php index 4c30c076853..61583653839 100644 --- a/app/code/Magento/Catalog/Block/Product/NewProduct.php +++ b/app/code/Magento/Catalog/Block/Product/NewProduct.php @@ -70,23 +70,20 @@ class NewProduct extends \Magento\Catalog\Block\Product\AbstractProduct implemen * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility * @param \Magento\Framework\App\Http\Context $httpContext * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory, \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility, \Magento\Framework\App\Http\Context $httpContext, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_productCollectionFactory = $productCollectionFactory; $this->_catalogProductVisibility = $catalogProductVisibility; $this->httpContext = $httpContext; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } diff --git a/app/code/Magento/Catalog/Block/Product/Price.php b/app/code/Magento/Catalog/Block/Product/Price.php index 01915db11b2..41c93760035 100644 --- a/app/code/Magento/Catalog/Block/Product/Price.php +++ b/app/code/Magento/Catalog/Block/Product/Price.php @@ -24,15 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Catalog\Block\Product; /** * Product price block - * - * @category Magento - * @package Magento_Catalog */ -namespace Magento\Catalog\Block\Product; - class Price extends \Magento\Framework\View\Element\Template implements \Magento\Framework\View\Block\IdentityInterface { /** @@ -158,70 +154,6 @@ class Price extends \Magento\Framework\View\Element\Template implements \Magento return $this->_idSuffix; } - /** - * Get tier prices (formatted) - * - * @param \Magento\Catalog\Model\Product $product - * @return array - * @deprecated - */ - public function getTierPrices($product = null) - { - if (is_null($product)) { - $product = $this->getProduct(); - } - $prices = $product->getFormatedTierPrice(); - - $res = array(); - if (is_array($prices)) { - foreach ($prices as $price) { - $price['price_qty'] = $price['price_qty'] * 1; - - $productPrice = $product->getPrice(); - if ($product->getPrice() != $product->getFinalPrice()) { - $productPrice = $product->getFinalPrice(); - } - - // Group price must be used for percent calculation if it is lower - $groupPrice = $product->getGroupPrice(); - if ($productPrice > $groupPrice) { - $productPrice = $groupPrice; - } - - if ($price['price'] < $productPrice) { - $price['savePercent'] = ceil(100 - 100 / $productPrice * $price['price']); - - $tierPrice = $this->_storeManager->getStore()->convertPrice( - $this->_taxData->getPrice($product, $price['website_price']) - ); - $price['formated_price'] = $this->_storeManager->getStore()->formatPrice($tierPrice); - $price['formated_price_incl_tax'] = $this->_storeManager->getStore()->formatPrice( - $this->_storeManager->getStore()->convertPrice( - $this->_taxData->getPrice($product, $price['website_price'], true) - ) - ); - - if ($this->_catalogData->canApplyMsrp($product)) { - $oldPrice = $product->getFinalPrice(); - $product->setPriceCalculation(false); - $product->setPrice($tierPrice); - $product->setFinalPrice($tierPrice); - - $this->getLayout()->getBlock('product.info')->getPriceHtml($product); - $product->setPriceCalculation(true); - - $price['real_price_html'] = $product->getRealPriceHtml(); - $product->setFinalPrice($oldPrice); - } - - $res[] = $price; - } - } - } - - return $res; - } - /** * Retrieve url for direct adding product to cart * diff --git a/app/code/Magento/Catalog/Block/Product/Price/Template.php b/app/code/Magento/Catalog/Block/Product/Price/Template.php deleted file mode 100644 index 9155725e6bf..00000000000 --- a/app/code/Magento/Catalog/Block/Product/Price/Template.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_Catalog - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - */ - - -/** - * Catalog Product Price Template Block - * - * @category Magento - * @package Magento_Catalog - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Catalog\Block\Product\Price; - -class Template extends \Magento\Framework\View\Element\AbstractBlock -{ - /** - * Product Price block types cache - * - * @var array - */ - protected $_priceBlockTypes = array(); - - /** - * @param \Magento\Framework\View\Element\Context $context - * @param array $priceBlockTypes - * @param array $data - */ - public function __construct( - \Magento\Framework\View\Element\Context $context, - array $priceBlockTypes = array(), - array $data = array() - ) { - $this->_priceBlockTypes = $priceBlockTypes; - parent::__construct($context, $data); - } - - /** - * Retrieve array of Price Block Types - * - * Key is price block type name and value is array of - * template and block strings - * - * @return array - */ - public function getPriceBlockTypes() - { - return $this->_priceBlockTypes; - } - - /** - * Adding customized price template for product type - * - * @param string $type - * @param string $block - * @param string $template - * @return \Magento\Catalog\Block\Product\Price\Template - */ - public function addPriceBlockType($type, $block = '', $template = '') - { - if ($type) { - $this->_priceBlockTypes[$type] = array('block' => $block, 'template' => $template); - } - - return $this; - } -} diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php b/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php index 72b6d870be9..cb74b0418b2 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php @@ -52,7 +52,6 @@ class Promotion extends \Magento\Catalog\Block\Product\ListProduct * @param \Magento\Catalog\Model\LayerFactory $layerFactory * @param CollectionFactory $productCollectionFactory * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -61,8 +60,7 @@ class Promotion extends \Magento\Catalog\Block\Product\ListProduct \Magento\Catalog\Model\Layer\Category $catalogLayer, \Magento\Catalog\Model\LayerFactory $layerFactory, CollectionFactory $productCollectionFactory, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_layerFactory = $layerFactory; $this->_productCollectionFactory = $productCollectionFactory; @@ -71,8 +69,7 @@ class Promotion extends \Magento\Catalog\Block\Product\ListProduct $postDataHelper, $categoryFactory, $catalogLayer, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Random.php b/app/code/Magento/Catalog/Block/Product/ProductList/Random.php index 0f953016224..b17024a0815 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Random.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Random.php @@ -54,7 +54,6 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct * @param \Magento\Catalog\Model\LayerFactory $layerFactory * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -63,8 +62,7 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct \Magento\Catalog\Model\Layer\Category $catalogLayer, \Magento\Catalog\Model\LayerFactory $layerFactory, \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_layerFactory = $layerFactory; $this->_productCollectionFactory = $productCollectionFactory; @@ -73,8 +71,7 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct $postDataHelper, $categoryFactory, $catalogLayer, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Related.php b/app/code/Magento/Catalog/Block/Product/ProductList/Related.php index 4dc7f58cd59..8ef064d5a0d 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Related.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Related.php @@ -74,23 +74,20 @@ class Related extends \Magento\Catalog\Block\Product\AbstractProduct implements * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility * @param \Magento\Checkout\Model\Session $checkoutSession * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Checkout\Model\Resource\Cart $checkoutCart, \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility, \Magento\Checkout\Model\Session $checkoutSession, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_checkoutCart = $checkoutCart; $this->_catalogProductVisibility = $catalogProductVisibility; $this->_checkoutSession = $checkoutSession; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php b/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php index 842461a1ddf..5b5fcf88e9a 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php @@ -89,23 +89,20 @@ class Upsell extends \Magento\Catalog\Block\Product\AbstractProduct implements \ * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility * @param \Magento\Checkout\Model\Session $checkoutSession * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Checkout\Model\Resource\Cart $checkoutCart, \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility, \Magento\Checkout\Model\Session $checkoutSession, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_checkoutCart = $checkoutCart; $this->_catalogProductVisibility = $catalogProductVisibility; $this->_checkoutSession = $checkoutSession; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Catalog/Block/Product/Send.php b/app/code/Magento/Catalog/Block/Product/Send.php index 6c7858e98aa..0d5cd904783 100644 --- a/app/code/Magento/Catalog/Block/Product/Send.php +++ b/app/code/Magento/Catalog/Block/Product/Send.php @@ -47,21 +47,18 @@ class Send extends \Magento\Catalog\Block\Product\AbstractProduct * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Customer\Helper\View $customerView * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Customer\Model\Session $customerSession, \Magento\Customer\Helper\View $customerView, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_customerSession = $customerSession; $this->_customerView = $customerView; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } diff --git a/app/code/Magento/Catalog/Block/Product/View.php b/app/code/Magento/Catalog/Block/Product/View.php index fcd14d4429e..f51dfd2f76b 100644 --- a/app/code/Magento/Catalog/Block/Product/View.php +++ b/app/code/Magento/Catalog/Block/Product/View.php @@ -95,7 +95,6 @@ class View extends AbstractProduct implements \Magento\Framework\View\Block\Iden * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig * @param \Magento\Framework\Locale\FormatInterface $localeFormat * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -107,8 +106,7 @@ class View extends AbstractProduct implements \Magento\Framework\View\Block\Iden \Magento\Catalog\Helper\Product $productHelper, \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig, \Magento\Framework\Locale\FormatInterface $localeFormat, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_productHelper = $productHelper; $this->_coreData = $coreData; @@ -120,8 +118,7 @@ class View extends AbstractProduct implements \Magento\Framework\View\Block\Iden $this->_localeFormat = $localeFormat; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); } @@ -249,15 +246,12 @@ class View extends AbstractProduct implements \Magento\Framework\View\Block\Iden $_request->setProductClassId($product->getTaxClassId()); $currentTax = $this->_taxCalculation->getRate($_request); - $_tierPrices = array(); - $_tierPricesInclTax = array(); - foreach ($product->getTierPrice() as $tierPrice) { - $_tierPrices[] = $this->_coreData->currency($tierPrice['website_price'], false, false); - $_tierPricesInclTax[] = $this->_coreData->currency( - $this->_taxData->getPrice($product, (int)$tierPrice['website_price'], true), - false, - false - ); + $tierPrices = array(); + + $tierPricesList = $product->getPriceInfo()->getPrice('tier_price')->getTierPriceList(); + + foreach ($tierPricesList as $tierPrice) { + $tierPrices[] = $this->_coreData->currency($tierPrice['price']->getValue(), false, false); } $config = array( 'productId' => $product->getId(), @@ -271,7 +265,7 @@ class View extends AbstractProduct implements \Magento\Framework\View\Block\Iden false ), 'productOldPrice' => $this->_coreData->currency( - $product->getPriceInfo()->getPrice('regular_price')->getAmount()->getBaseAmount(), + $product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue(), false, false ), @@ -293,8 +287,7 @@ class View extends AbstractProduct implements \Magento\Framework\View\Block\Iden 'plusDispositionTax' => 0, 'oldMinusDisposition' => 0, 'minusDisposition' => 0, - 'tierPrices' => $_tierPrices, - 'tierPricesInclTax' => $_tierPricesInclTax + 'tierPrices' => $tierPrices ); $responseObject = new \Magento\Framework\Object(); diff --git a/app/code/Magento/Catalog/Block/Product/View/AbstractView.php b/app/code/Magento/Catalog/Block/Product/View/AbstractView.php index e2a7ac5995f..c3eb8063b61 100644 --- a/app/code/Magento/Catalog/Block/Product/View/AbstractView.php +++ b/app/code/Magento/Catalog/Block/Product/View/AbstractView.php @@ -44,19 +44,16 @@ abstract class AbstractView extends \Magento\Catalog\Block\Product\AbstractProdu * @param \Magento\Catalog\Block\Product\Context $context * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Stdlib\ArrayUtils $arrayUtils, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->arrayUtils = $arrayUtils; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php b/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php index f1be592cd57..64d70288af1 100644 --- a/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php +++ b/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php @@ -62,21 +62,6 @@ class NewWidget extends \Magento\Catalog\Block\Product\NewProduct implements \Ma */ protected $_pager; - /** - * Initialize block's cache and template settings - * - * @return void - */ - protected function _construct() - { - parent::_construct(); - $this->addPriceBlockType( - 'bundle', - 'Magento\Bundle\Block\Catalog\Product\Price', - 'bundle/catalog/product/price.phtml' - ); - } - /** * Product collection initialize process * @@ -249,7 +234,7 @@ class NewWidget extends \Magento\Catalog\Block\Product\NewProduct implements \Ma $price = ''; if ($priceRender) { $price = $priceRender->render( - \Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, $product, $arguments ); diff --git a/app/code/Magento/Catalog/Helper/Product/Configuration.php b/app/code/Magento/Catalog/Helper/Product/Configuration.php index 02f33832346..89f7204d47b 100644 --- a/app/code/Magento/Catalog/Helper/Product/Configuration.php +++ b/app/code/Magento/Catalog/Helper/Product/Configuration.php @@ -25,13 +25,15 @@ */ namespace Magento\Catalog\Helper\Product; +use Magento\Catalog\Helper\Product\Configuration\ConfigurationInterface; +use Magento\Framework\App\Helper\AbstractHelper; + /** * Helper for fetching properties by product configurational item * * @SuppressWarnings(PHPMD.LongVariable) */ -class Configuration extends \Magento\Framework\App\Helper\AbstractHelper implements - \Magento\Catalog\Helper\Product\Configuration\ConfigurationInterface +class Configuration extends AbstractHelper implements ConfigurationInterface { /** * Filter manager @@ -89,15 +91,11 @@ class Configuration extends \Magento\Framework\App\Helper\AbstractHelper impleme $option = $product->getOptionById($optionId); if ($option) { $itemOption = $item->getOptionByCode('option_' . $option->getId()); - $group = $option->groupFactory( - $option->getType() - )->setOption( - $option - )->setConfigurationItem( - $item - )->setConfigurationItemOption( - $itemOption - ); + /** @var $group \Magento\Catalog\Model\Product\Option\Type\DefaultType */ + $group = $option->groupFactory($option->getType()) + ->setOption($option) + ->setConfigurationItem($item) + ->setConfigurationItemOption($itemOption); if ('file' == $option->getType()) { $downloadParams = $item->getFileDownloadParams(); diff --git a/app/code/Magento/Catalog/Helper/Product/Configuration/ConfigurationInterface.php b/app/code/Magento/Catalog/Helper/Product/Configuration/ConfigurationInterface.php index b72ccb67b63..2ac6d335ecc 100644 --- a/app/code/Magento/Catalog/Helper/Product/Configuration/ConfigurationInterface.php +++ b/app/code/Magento/Catalog/Helper/Product/Configuration/ConfigurationInterface.php @@ -24,15 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Catalog\Helper\Product\Configuration; + /** * Interface for product configuration helpers - * - * @category Magento - * @package Magento_Catalog - * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Catalog\Helper\Product\Configuration; - interface ConfigurationInterface { /** diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php index 70fe542c828..298f793a5e9 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php @@ -32,16 +32,6 @@ namespace Magento\Catalog\Model\Indexer\Product\Flat; */ abstract class AbstractAction { - /** - * Path to maximum available amount of indexes for flat indexer - */ - const XML_NODE_MAX_INDEX_COUNT = 'catalog/product/flat/max_index_count'; - - /** - * Maximum size of attributes chunk - */ - const ATTRIBUTES_CHUNK_SIZE = 59; - /** * Suffix for value field on composite attributes * @@ -50,50 +40,22 @@ abstract class AbstractAction protected $_valueFieldSuffix = '_value'; /** - * Resource instance + * Suffix for drop table (uses on flat table rename) * - * @var \Magento\Framework\App\Resource + * @var string */ - protected $_resource; + protected $_tableDropSuffix = '_drop_indexer'; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $_storeManager; - /** - * Catalog resource helper - * - * @var \Magento\Catalog\Model\Resource\Helper - */ - protected $_resourceHelper; - - /** - * Core store config - * - * @var \Magento\Framework\App\Config\ScopeConfigInterface - */ - protected $_scopeConfig; - - /** - * Suffix for drop table (uses on flat table rename) - * - * @var string - */ - protected $_tableDropSuffix = '_drop_indexer'; - /** * @var \Magento\Catalog\Helper\Product\Flat\Indexer */ protected $_productIndexerHelper; - /** - * Core data - * - * @var \Magento\Core\Helper\Data - */ - protected $_coreData; - /** * @var \Magento\Framework\DB\Adapter\AdapterInterface */ @@ -118,11 +80,6 @@ abstract class AbstractAction */ protected $_productTypes = array(); - /** - * @var \Magento\Catalog\Model\Indexer\Product\Flat\Processor - */ - protected $_flatProductProcessor; - /** * @var TableBuilder */ @@ -136,33 +93,23 @@ abstract class AbstractAction /** * @param \Magento\Framework\App\Resource $resource * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper - * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper * @param \Magento\Catalog\Model\Product\Type $productType - * @param Processor $flatProductProcessor * @param TableBuilder $tableBuilder * @param FlatTableBuilder $flatTableBuilder */ public function __construct( \Magento\Framework\App\Resource $resource, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Catalog\Model\Resource\Helper $resourceHelper, - \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper, \Magento\Catalog\Model\Product\Type $productType, - \Magento\Catalog\Model\Indexer\Product\Flat\Processor $flatProductProcessor, - \Magento\Catalog\Model\Indexer\Product\Flat\TableBuilder $tableBuilder, - \Magento\Catalog\Model\Indexer\Product\Flat\FlatTableBuilder $flatTableBuilder + TableBuilder $tableBuilder, + FlatTableBuilder $flatTableBuilder ) { - $this->_resource = $resource; $this->_storeManager = $storeManager; - $this->_resourceHelper = $resourceHelper; - $this->_scopeConfig = $scopeConfig; $this->_productIndexerHelper = $productHelper; $this->_productType = $productType; $this->_connection = $resource->getConnection('default'); - $this->_flatProductProcessor = $flatProductProcessor; $this->_tableBuilder = $tableBuilder; $this->_flatTableBuilder = $flatTableBuilder; } @@ -175,17 +122,6 @@ abstract class AbstractAction */ abstract public function execute($ids); - /** - * Retrieve Catalog Product Flat Table name - * - * @param int $storeId - * @return string - */ - public function getFlatTableName($storeId) - { - return sprintf('%s_%s', $this->_connection->getTableName('catalog_product_flat'), $storeId); - } - /** * Return temporary table name by regular table name * @@ -243,34 +179,6 @@ abstract class AbstractAction } } - /** - * Remove products from flat that are not exist - * - * @param array $ids - * @param int $storeId - * @return void - */ - protected function _removeDeletedProducts(array &$ids, $storeId) - { - $select = $this->_connection->select()->from( - $this->_productIndexerHelper->getTable('catalog_product_entity') - )->where( - 'entity_id IN(?)', - $ids - ); - $result = $this->_connection->query($select); - - $existentProducts = array(); - foreach ($result->fetchAll() as $product) { - $existentProducts[] = $product['entity_id']; - } - - $productsToDelete = array_diff($ids, $existentProducts); - $ids = $existentProducts; - - $this->deleteProductsFromStore($productsToDelete, $storeId); - } - /** * Retrieve Product Type Instances * as key - type code, value - instance model @@ -406,172 +314,6 @@ abstract class AbstractAction return $this; } - /** - * Reindex single product into flat product table - * - * @param int $storeId - * @param int $productId - * @return \Magento\Catalog\Model\Indexer\Product\Flat - */ - protected function _reindexSingleProduct($storeId, $productId) - { - $flatTable = $this->_productIndexerHelper->getFlatTableName($storeId); - - if (!$this->_connection->isTableExists($flatTable)) { - $this->_flatTableBuilder->build( - $storeId, - array($productId), - $this->_valueFieldSuffix, - $this->_tableDropSuffix, - false - ); - } - - $attributes = $this->_productIndexerHelper->getAttributes(); - $eavAttributes = $this->_productIndexerHelper->getTablesStructure($attributes); - $updateData = array(); - $describe = $this->_connection->describeTable($flatTable); - - foreach ($eavAttributes as $tableName => $tableColumns) { - $columnsChunks = array_chunk($tableColumns, self::ATTRIBUTES_CHUNK_SIZE, true); - - foreach ($columnsChunks as $columns) { - $select = $this->_connection->select(); - $selectValue = $this->_connection->select(); - $keyColumns = array( - 'entity_id' => 'e.entity_id', - 'attribute_id' => 't.attribute_id', - 'value' => $this->_connection->getIfNullSql('`t2`.`value`', '`t`.`value`') - ); - - if ($tableName != $this->_productIndexerHelper->getTable('catalog_product_entity')) { - $valueColumns = array(); - $ids = array(); - $select->from( - array('e' => $this->_productIndexerHelper->getTable('catalog_product_entity')), - $keyColumns - ); - - $selectValue->from( - array('e' => $this->_productIndexerHelper->getTable('catalog_product_entity')), - $keyColumns - ); - - /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */ - foreach ($columns as $columnName => $attribute) { - if (isset($describe[$columnName])) { - $ids[$attribute->getId()] = $columnName; - } - } - - $select->joinLeft( - array('t' => $tableName), - 'e.entity_id = t.entity_id ' . $this->_connection->quoteInto( - ' AND t.attribute_id IN (?)', - array_keys($ids) - ) . ' AND t.store_id = 0', - array() - )->joinLeft( - array('t2' => $tableName), - 't.entity_id = t2.entity_id ' . - ' AND t.attribute_id = t2.attribute_id ' . - $this->_connection->quoteInto( - ' AND t2.store_id = ?', - $storeId - ), - array() - )->where( - 'e.entity_id = ' . $productId - )->where( - 't.attribute_id IS NOT NULL' - ); - $cursor = $this->_connection->query($select); - while ($row = $cursor->fetch(\Zend_Db::FETCH_ASSOC)) { - $updateData[$ids[$row['attribute_id']]] = $row['value']; - $valueColumnName = $ids[$row['attribute_id']] . $this->_valueFieldSuffix; - if (isset($describe[$valueColumnName])) { - $valueColumns[$row['value']] = $valueColumnName; - } - } - - //Update not simple attributes (eg. dropdown) - if (!empty($valueColumns)) { - $valueIds = array_keys($valueColumns); - - $select = $this->_connection->select()->from( - array('t' => $this->_productIndexerHelper->getTable('eav_attribute_option_value')), - array('t.option_id', 't.value') - )->where( - $this->_connection->quoteInto('t.option_id IN (?)', $valueIds) - ); - $cursor = $this->_connection->query($select); - while ($row = $cursor->fetch(\Zend_Db::FETCH_ASSOC)) { - $valueColumnName = $valueColumns[$row['option_id']]; - if (isset($describe[$valueColumnName])) { - $updateData[$valueColumnName] = $row['value']; - } - } - } - } else { - $columnNames = array_keys($columns); - $columnNames[] = 'attribute_set_id'; - $columnNames[] = 'type_id'; - $select->from( - array('e' => $this->_productIndexerHelper->getTable('catalog_product_entity')), - $columnNames - )->where( - 'e.entity_id = ' . $productId - ); - $cursor = $this->_connection->query($select); - $row = $cursor->fetch(\Zend_Db::FETCH_ASSOC); - if (!empty($row)) { - foreach ($row as $columnName => $value) { - $updateData[$columnName] = $value; - } - } - } - } - } - - if (!empty($updateData)) { - $updateData += array('entity_id' => $productId); - $updateFields = array(); - foreach ($updateData as $key => $value) { - $updateFields[$key] = $key; - } - $this->_connection->insertOnDuplicate($flatTable, $updateData, $updateFields); - } - - return $this; - } - - /** - * Delete products from flat table(s) - * - * @param int|array $productId - * @param null|int $storeId - * @return void - */ - public function deleteProductsFromStore($productId, $storeId = null) - { - if (!is_array($productId)) { - $productId = array($productId); - } - if (null === $storeId) { - foreach ($this->_storeManager->getStores() as $store) { - $this->_connection->delete( - $this->_productIndexerHelper->getFlatTableName($store->getId()), - array('entity_id IN(?)' => $productId) - ); - } - } else { - $this->_connection->delete( - $this->_productIndexerHelper->getFlatTableName((int)$storeId), - array('entity_id IN(?)' => $productId) - ); - } - } - /** * Check is flat table for store exists * @@ -581,7 +323,7 @@ abstract class AbstractAction protected function _isFlatTableExists($storeId) { if (!isset($this->_flatTablesExist[$storeId])) { - $tableName = $this->getFlatTableName($storeId); + $tableName = $this->_productIndexerHelper->getFlatTableName($storeId); $isTableExists = $this->_connection->isTableExists($tableName); $this->_flatTablesExist[$storeId] = $isTableExists ? true : false; diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php new file mode 100644 index 00000000000..8829c244647 --- /dev/null +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php @@ -0,0 +1,114 @@ +<?php +/** + * Flat item ereaser. Used to clear items from flat table + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; + +class Eraser +{ + /** + * @var \Magento\Catalog\Helper\Product\Flat\Indexer + */ + protected $productIndexerHelper; + + /** + * @var \Magento\Framework\DB\Adapter\AdapterInterface + */ + protected $connection; + + /** + * @var \Magento\Store\Model\StoreManagerInterface + */ + protected $storeManager; + + /** + * @param \Magento\Framework\App\Resource $resource + * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper + * @param \Magento\Store\Model\StoreManagerInterface $storeManager + */ + public function __construct( + \Magento\Framework\App\Resource $resource, + \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper, + \Magento\Store\Model\StoreManagerInterface $storeManager + ) { + $this->productIndexerHelper = $productHelper; + $this->connection = $resource->getConnection('default'); + $this->storeManager = $storeManager; + } + + /** + * Remove products from flat that are not exist + * + * @param array $ids + * @param int $storeId + * @return void + */ + public function removeDeletedProducts(array &$ids, $storeId) + { + $select = $this->connection->select()->from( + $this->productIndexerHelper->getTable('catalog_product_entity') + )->where( + 'entity_id IN(?)', + $ids + ); + $result = $this->connection->query($select); + + $existentProducts = array(); + foreach ($result->fetchAll() as $product) { + $existentProducts[] = $product['entity_id']; + } + + $productsToDelete = array_diff($ids, $existentProducts); + $ids = $existentProducts; + + $this->deleteProductsFromStore($productsToDelete, $storeId); + } + + /** + * Delete products from flat table(s) + * + * @param int|array $productId + * @param null|int $storeId + * @return void + */ + public function deleteProductsFromStore($productId, $storeId = null) + { + if (!is_array($productId)) { + $productId = array($productId); + } + if (null === $storeId) { + foreach ($this->storeManager->getStores() as $store) { + $this->connection->delete( + $this->productIndexerHelper->getFlatTableName($store->getId()), + array('entity_id IN(?)' => $productId) + ); + } + } else { + $this->connection->delete( + $this->productIndexerHelper->getFlatTableName((int)$storeId), + array('entity_id IN(?)' => $productId) + ); + } + } +} diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php new file mode 100644 index 00000000000..9ddc75f04dd --- /dev/null +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php @@ -0,0 +1,184 @@ +<?php +/** + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; + +class Indexer +{ + /** + * Maximum size of attributes chunk + */ + const ATTRIBUTES_CHUNK_SIZE = 59; + + /** + * @var \Magento\Catalog\Helper\Product\Flat\Indexer + */ + protected $_productIndexerHelper; + + /** + * @var \Magento\Framework\DB\Adapter\AdapterInterface + */ + protected $_connection; + /** + * @param \Magento\Framework\App\Resource $resource + * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper + */ + public function __construct( + \Magento\Framework\App\Resource $resource, + \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper + ) { + $this->_productIndexerHelper = $productHelper; + $this->_connection = $resource->getConnection('default'); + } + + /** + * Write single product into flat product table + * + * @param int $storeId + * @param int $productId + * @param string $valueFieldSuffix + * @return \Magento\Catalog\Model\Indexer\Product\Flat + */ + public function write($storeId, $productId, $valueFieldSuffix = '') + { + $flatTable = $this->_productIndexerHelper->getFlatTableName($storeId); + + $attributes = $this->_productIndexerHelper->getAttributes(); + $eavAttributes = $this->_productIndexerHelper->getTablesStructure($attributes); + $updateData = array(); + $describe = $this->_connection->describeTable($flatTable); + + foreach ($eavAttributes as $tableName => $tableColumns) { + $columnsChunks = array_chunk($tableColumns, self::ATTRIBUTES_CHUNK_SIZE, true); + + foreach ($columnsChunks as $columns) { + $select = $this->_connection->select(); + $selectValue = $this->_connection->select(); + $keyColumns = array( + 'entity_id' => 'e.entity_id', + 'attribute_id' => 't.attribute_id', + 'value' => $this->_connection->getIfNullSql('`t2`.`value`', '`t`.`value`') + ); + + if ($tableName != $this->_productIndexerHelper->getTable('catalog_product_entity')) { + $valueColumns = array(); + $ids = array(); + $select->from( + array('e' => $this->_productIndexerHelper->getTable('catalog_product_entity')), + $keyColumns + ); + + $selectValue->from( + array('e' => $this->_productIndexerHelper->getTable('catalog_product_entity')), + $keyColumns + ); + + /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */ + foreach ($columns as $columnName => $attribute) { + if (isset($describe[$columnName])) { + $ids[$attribute->getId()] = $columnName; + } + } + + $select->joinLeft( + array('t' => $tableName), + 'e.entity_id = t.entity_id ' . $this->_connection->quoteInto( + ' AND t.attribute_id IN (?)', + array_keys($ids) + ) . ' AND t.store_id = 0', + array() + )->joinLeft( + array('t2' => $tableName), + 't.entity_id = t2.entity_id ' . + ' AND t.attribute_id = t2.attribute_id ' . + $this->_connection->quoteInto( + ' AND t2.store_id = ?', + $storeId + ), + array() + )->where( + 'e.entity_id = ' . $productId + )->where( + 't.attribute_id IS NOT NULL' + ); + $cursor = $this->_connection->query($select); + while ($row = $cursor->fetch(\Zend_Db::FETCH_ASSOC)) { + $updateData[$ids[$row['attribute_id']]] = $row['value']; + $valueColumnName = $ids[$row['attribute_id']] . $valueFieldSuffix; + if (isset($describe[$valueColumnName])) { + $valueColumns[$row['value']] = $valueColumnName; + } + } + + //Update not simple attributes (eg. dropdown) + if (!empty($valueColumns)) { + $valueIds = array_keys($valueColumns); + + $select = $this->_connection->select()->from( + array('t' => $this->_productIndexerHelper->getTable('eav_attribute_option_value')), + array('t.option_id', 't.value') + )->where( + $this->_connection->quoteInto('t.option_id IN (?)', $valueIds) + ); + $cursor = $this->_connection->query($select); + while ($row = $cursor->fetch(\Zend_Db::FETCH_ASSOC)) { + $valueColumnName = $valueColumns[$row['option_id']]; + if (isset($describe[$valueColumnName])) { + $updateData[$valueColumnName] = $row['value']; + } + } + } + } else { + $columnNames = array_keys($columns); + $columnNames[] = 'attribute_set_id'; + $columnNames[] = 'type_id'; + $select->from( + array('e' => $this->_productIndexerHelper->getTable('catalog_product_entity')), + $columnNames + )->where( + 'e.entity_id = ' . $productId + ); + $cursor = $this->_connection->query($select); + $row = $cursor->fetch(\Zend_Db::FETCH_ASSOC); + if (!empty($row)) { + foreach ($row as $columnName => $value) { + $updateData[$columnName] = $value; + } + } + } + } + } + + if (!empty($updateData)) { + $updateData += array('entity_id' => $productId); + $updateFields = array(); + foreach ($updateData as $key => $value) { + $updateFields[$key] = $key; + } + $this->_connection->insertOnDuplicate($flatTable, $updateData, $updateFields); + } + + return $this; + } +} diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php index 0aea1d535fd..c5c9491dd29 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php @@ -25,12 +25,58 @@ */ namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; +use Magento\Catalog\Model\Indexer\Product\Flat\Processor; +use Magento\Catalog\Model\Indexer\Product\Flat\TableBuilder; +use Magento\Catalog\Model\Indexer\Product\Flat\FlatTableBuilder; + /** * Class Row reindex action * @package Magento\Catalog\Model\Indexer\Product\Flat\Action */ class Row extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction { + /** + * @var \Magento\Catalog\Model\Indexer\Product\Flat\Action\Indexer + */ + protected $flatItemWriter; + + /** + * @var Eraser + */ + protected $flatItemEraser; + + /** + * @param \Magento\Framework\App\Resource $resource + * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper + * @param \Magento\Catalog\Model\Product\Type $productType + * @param TableBuilder $tableBuilder + * @param FlatTableBuilder $flatTableBuilder + * @param Indexer $flatItemWriter + * @param Eraser $flatItemEraser + */ + public function __construct( + \Magento\Framework\App\Resource $resource, + \Magento\Store\Model\StoreManagerInterface $storeManager, + \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper, + \Magento\Catalog\Model\Product\Type $productType, + TableBuilder $tableBuilder, + FlatTableBuilder $flatTableBuilder, + Indexer $flatItemWriter, + Eraser $flatItemEraser + ) { + parent::__construct( + $resource, + $storeManager, + $productHelper, + $productType, + $tableBuilder, + $flatTableBuilder + ); + $this->flatItemWriter = $flatItemWriter; + $this->flatItemEraser = $flatItemEraser; + } + /** * Execute row reindex action * @@ -45,9 +91,21 @@ class Row extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction } $ids = array($id); foreach ($this->_storeManager->getStores() as $store) { - $this->_removeDeletedProducts($ids, $store->getId()); + $tableExists = $this->_isFlatTableExists($store->getId()); + if ($tableExists) { + $this->flatItemEraser->removeDeletedProducts($ids, $store->getId()); + } if (isset($ids[0])) { - $this->_reindexSingleProduct($store->getId(), $ids[0]); + if (!$tableExists) { + $this->_flatTableBuilder->build( + $store->getId(), + array($ids[0]), + $this->_valueFieldSuffix, + $this->_tableDropSuffix, + false + ); + } + $this->flatItemWriter->write($store->getId(), $ids[0], $this->_valueFieldSuffix); } } return $this; diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php index cceba57cf0b..2fb5aaf3991 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php @@ -25,6 +25,9 @@ */ namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; +use Magento\Catalog\Model\Indexer\Product\Flat\TableBuilder; +use Magento\Catalog\Model\Indexer\Product\Flat\FlatTableBuilder; + /** * Class Rows reindex action for mass actions * @@ -32,6 +35,40 @@ namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; */ class Rows extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction { + /** + * @var Eraser + */ + protected $flatItemEraser; + + /** + * @param \Magento\Framework\App\Resource $resource + * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper + * @param \Magento\Catalog\Model\Product\Type $productType + * @param TableBuilder $tableBuilder + * @param FlatTableBuilder $flatTableBuilder + * @param Eraser $flatItemEraser + */ + public function __construct( + \Magento\Framework\App\Resource $resource, + \Magento\Store\Model\StoreManagerInterface $storeManager, + \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper, + \Magento\Catalog\Model\Product\Type $productType, + TableBuilder $tableBuilder, + FlatTableBuilder $flatTableBuilder, + Eraser $flatItemEraser + ) { + parent::__construct( + $resource, + $storeManager, + $productHelper, + $productType, + $tableBuilder, + $flatTableBuilder + ); + $this->flatItemEraser = $flatItemEraser; + } + /** * Execute multiple rows reindex action * @@ -48,7 +85,7 @@ class Rows extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction foreach ($this->_storeManager->getStores() as $store) { $idsBatches = array_chunk($ids, \Magento\Catalog\Helper\Product\Flat\Indexer::BATCH_SIZE); foreach ($idsBatches as $changedIds) { - $this->_removeDeletedProducts($changedIds, $store->getId()); + $this->flatItemEraser->removeDeletedProducts($changedIds, $store->getId()); if (!empty($changedIds)) { $this->_reindex($store->getId(), $changedIds); } diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php index f7f6a998e9b..e937a06a874 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php @@ -31,6 +31,11 @@ namespace Magento\Catalog\Model\Indexer\Product\Flat; */ class FlatTableBuilder { + /** + * Path to maximum available amount of indexes for flat indexer + */ + const XML_NODE_MAX_INDEX_COUNT = 'catalog/product/flat/max_index_count'; + /** * @var \Magento\Catalog\Helper\Product\Flat\Indexer */ @@ -123,7 +128,7 @@ class FlatTableBuilder $indexesNeed = $this->_productIndexerHelper->getFlatIndexes(); $maxIndex = $this->_config->getValue( - \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction::XML_NODE_MAX_INDEX_COUNT + self::XML_NODE_MAX_INDEX_COUNT ); if ($maxIndex && count($indexesNeed) > $maxIndex) { throw new \Magento\Framework\Model\Exception( diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php index 5d6481cc24b..c7b5a3d3763 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php @@ -258,7 +258,7 @@ class TableBuilder $columnsChunks = array_chunk( $tableColumns, - \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction::ATTRIBUTES_CHUNK_SIZE, + Action\Indexer::ATTRIBUTES_CHUNK_SIZE, true ); foreach ($columnsChunks as $columnsList) { diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php index 15446a4038d..aa42badd5ca 100644 --- a/app/code/Magento/Catalog/Model/Product.php +++ b/app/code/Magento/Catalog/Model/Product.php @@ -757,6 +757,16 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements IdentityIn return $this; } + /** + * Get quantity for product + * + * @return float + */ + public function getQty() + { + return $this->getData('qty'); + } + /** * Callback for entity reindex * diff --git a/app/code/Magento/Catalog/Model/Product/Configuration/Item/ItemInterface.php b/app/code/Magento/Catalog/Model/Product/Configuration/Item/ItemInterface.php index 4e85966cc05..540007beb7c 100644 --- a/app/code/Magento/Catalog/Model/Product/Configuration/Item/ItemInterface.php +++ b/app/code/Magento/Catalog/Model/Product/Configuration/Item/ItemInterface.php @@ -24,15 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Catalog\Model\Product\Configuration\Item; + /** * Product configurational item interface - * - * @category Magento - * @package Magento_Catalog - * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Catalog\Model\Product\Configuration\Item; - interface ItemInterface { /** diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php index 2de6843d454..7745e8a332b 100644 --- a/app/code/Magento/Catalog/Model/Product/Option.php +++ b/app/code/Magento/Catalog/Model/Product/Option.php @@ -431,7 +431,7 @@ class Option extends AbstractModel public function getPrice($flag = false) { if ($flag && $this->getPriceType() == 'percent') { - $basePrice = $this->getProduct()->getPriceInfo()->getPrice(BasePrice::PRICE_TYPE_BASE_PRICE)->getValue(); + $basePrice = $this->getProduct()->getPriceInfo()->getPrice(BasePrice::PRICE_CODE)->getValue(); $price = $basePrice * ($this->_getData('price') / 100); return $price; } diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php index b3d6f229b5f..9dae9ada9b2 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php @@ -782,7 +782,6 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType $this->_rootDirectory->getAbsolutePath($quotePath), $this->_rootDirectory->getAbsolutePath($orderPath) ); - $this->_rootDirectory->copyFile($quotePath, $orderPath); } catch (\Exception $e) { return $this; } diff --git a/app/code/Magento/Catalog/Model/Product/Type.php b/app/code/Magento/Catalog/Model/Product/Type.php index d1e9bf94d1c..bdfe35666f7 100644 --- a/app/code/Magento/Catalog/Model/Product/Type.php +++ b/app/code/Magento/Catalog/Model/Product/Type.php @@ -30,7 +30,6 @@ namespace Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product; -use Magento\Framework\Pricing\Object\SaleableInterface; class Type { @@ -181,12 +180,12 @@ class Type /** * Get Product Price Info object * - * @param SaleableInterface $product + * @param Product $saleableItem * @return \Magento\Framework\Pricing\PriceInfoInterface */ - public function getPriceInfo(SaleableInterface $product) + public function getPriceInfo(Product $saleableItem) { - return $this->_priceInfoFactory->create($product); + return $this->_priceInfoFactory->create($saleableItem); } /** diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php b/app/code/Magento/Catalog/Model/Resource/Category/Flat.php index e90bf636c49..17404be9d87 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Flat.php @@ -231,9 +231,10 @@ class Flat extends \Magento\Index\Model\Resource\AbstractResource * @param \Magento\Catalog\Model\Category|int $parentNode * @param integer $recursionLevel * @param integer $storeId + * @param bool $skipMenuFilter * @return array */ - protected function _loadNodes($parentNode = null, $recursionLevel = 0, $storeId = 0) + protected function _loadNodes($parentNode = null, $recursionLevel = 0, $storeId = 0, $skipMenuFilter = false) { $_conn = $this->_getReadAdapter(); $startLevel = 1; @@ -279,13 +280,14 @@ class Flat extends \Magento\Index\Model\Resource\AbstractResource )->where( 'main_table.is_active = ?', '1' - )->where( - 'main_table.include_in_menu = ?', - '1' - )->order( - 'main_table.position' ); + if (false == $skipMenuFilter) { + $select->where('main_table.include_in_menu = ?', '1'); + } + + $select->order('main_table.position'); + if ($parentPath) { $select->where($_conn->quoteInto("main_table.path like ?", "{$parentPath}/%")); } @@ -587,7 +589,7 @@ class Flat extends \Magento\Index\Model\Resource\AbstractResource */ public function getChildrenCategories($category) { - $categories = $this->_loadNodes($category, 1, $category->getStoreId()); + $categories = $this->_loadNodes($category, 1, $category->getStoreId(), true); return $categories; } diff --git a/app/code/Magento/Catalog/Pricing/Price/BasePrice.php b/app/code/Magento/Catalog/Pricing/Price/BasePrice.php index 51030def6a1..b98be1aa65a 100644 --- a/app/code/Magento/Catalog/Pricing/Price/BasePrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/BasePrice.php @@ -26,25 +26,17 @@ namespace Magento\Catalog\Pricing\Price; +use Magento\Framework\Pricing\Price\AbstractPrice; + /** * Class BasePrice */ -class BasePrice extends RegularPrice +class BasePrice extends AbstractPrice { /** * Price type identifier string */ - const PRICE_TYPE_BASE_PRICE = 'base_price'; - - /** - * @var string - */ - protected $priceType = self::PRICE_TYPE_BASE_PRICE; - - /** - * @var bool|float|null - */ - protected $maxValue; + const PRICE_CODE = 'base_price'; /** * Get Base Price Value @@ -55,8 +47,11 @@ class BasePrice extends RegularPrice { if ($this->value === null) { $this->value = false; - foreach ($this->priceInfo->getPricesIncludedInBase() as $price) { - $this->value = min($price->getValue(), $this->value ?: $price->getValue()); + foreach ($this->priceInfo->getPrices() as $code => $price) { + if ($price instanceof \Magento\Framework\Pricing\Price\BasePriceProviderInterface && $price->getValue() + ) { + $this->value = min($price->getValue(), $this->value ? : $price->getValue()); + } } } return $this->value; diff --git a/app/code/Magento/Catalog/Pricing/Price/ConfiguredPrice.php b/app/code/Magento/Catalog/Pricing/Price/ConfiguredPrice.php new file mode 100644 index 00000000000..3977fda3e48 --- /dev/null +++ b/app/code/Magento/Catalog/Pricing/Price/ConfiguredPrice.php @@ -0,0 +1,111 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Catalog + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Catalog\Pricing\Price; + +use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface; +use Magento\Catalog\Model\Product; +use Magento\Framework\Pricing\Adjustment\CalculatorInterface; + +/** + * Configured price model + */ +class ConfiguredPrice extends FinalPrice implements ConfiguredPriceInterface +{ + /** + * Price type configured + */ + const PRICE_CODE = self::CONFIGURED_PRICE_CODE; + + /** + * @var null|ItemInterface + */ + protected $item; + + /** + * @param Product $saleableItem + * @param float $quantity + * @param CalculatorInterface $calculator + * @param ItemInterface $item + */ + public function __construct( + Product $saleableItem, + $quantity, + CalculatorInterface $calculator, + ItemInterface $item = null + ) { + $this->item = $item; + parent::__construct($saleableItem, $quantity, $calculator); + } + + /** + * @param ItemInterface $item + * @return $this + */ + public function setItem(ItemInterface $item) + { + $this->item = $item; + return $this; + } + + /** + * Get value of configured options + * + * @return array + */ + protected function getOptionsValue() + { + $product = $this->item->getProduct(); + $value = 0.; + $optionIds = $this->item->getOptionByCode('option_ids'); + if ($optionIds) { + foreach (explode(',', $optionIds->getValue()) as $optionId) { + $option = $product->getOptionById($optionId); + if ($option) { + /** @var \Magento\Wishlist\Model\Item\Option $itemOption */ + $itemOption = $this->item->getOptionByCode('option_' . $option->getId()); + /** @var $group \Magento\Catalog\Model\Product\Option\Type\DefaultType */ + $group = $option->groupFactory($option->getType()) + ->setOption($option) + ->setConfigurationItem($this->item) + ->setConfigurationItemOption($itemOption); + $value += $group->getOptionPrice($itemOption->getValue(), $this->value); + } + } + } + return $value; + } + + /** + * Price value of product with configured options + * + * @return bool|float + */ + public function getValue() + { + return $this->item ? parent::getValue() + $this->getOptionsValue() : parent::getValue(); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/Stub/Order.php b/app/code/Magento/Catalog/Pricing/Price/ConfiguredPriceInterface.php similarity index 67% rename from dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/Stub/Order.php rename to app/code/Magento/Catalog/Pricing/Price/ConfiguredPriceInterface.php index f050a80c4cc..affec1ddb59 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/Stub/Order.php +++ b/app/code/Magento/Catalog/Pricing/Price/ConfiguredPriceInterface.php @@ -18,31 +18,29 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Catalog * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Sales\Controller\Adminhtml\Stub; -use Magento\Backend\App\Action; -use Magento\Sales\Controller\Adminhtml\Order as OrderController; +namespace Magento\Catalog\Pricing\Price; + +use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface; /** - * Magento Adminhtml Order Controller Test + * Configured price interface */ -class Order extends OrderController +interface ConfiguredPriceInterface { /** - * @var \Magento\Framework\App\Action\Title - */ - public $_title; - - /** - * @var \Magento\Framework\App\Action\Title + * Price type configured */ - public $_view; + const CONFIGURED_PRICE_CODE = 'configured_price'; /** - * @var \Magento\Framework\Message\ManagerInterface + * @param ItemInterface $item + * @return $this */ - public $messageManager; + public function setItem(ItemInterface $item); } diff --git a/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php b/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php index f81e2e3aa8c..9da910f99f5 100644 --- a/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php @@ -27,18 +27,19 @@ namespace Magento\Catalog\Pricing\Price; use Magento\Catalog\Pricing\Price; use Magento\Catalog\Model\Product\Option\Value; +use Magento\Framework\Pricing\Price\AbstractPrice; /** * Class OptionPrice * * @package Magento\Catalog\Pricing\Price */ -class CustomOptionPrice extends RegularPrice implements CustomOptionPriceInterface +class CustomOptionPrice extends AbstractPrice implements CustomOptionPriceInterface { /** - * @var string + * Price model code */ - protected $priceType = self::PRICE_TYPE_CUSTOM_OPTION; + const PRICE_CODE = 'custom_option_price'; /** * @var array @@ -46,17 +47,53 @@ class CustomOptionPrice extends RegularPrice implements CustomOptionPriceInterfa protected $priceOptions; /** - * Get Value + * Get minimal optoin item values * * @return bool|float */ public function getValue() + { + $requiredMinimalOptions = []; + $options = $this->product->getOptions(); + if ($options) { + /** @var $optionItem \Magento\Catalog\Model\Product\Option */ + foreach ($options as $optionItem) { + if (!$optionItem->getIsRequire()) { + continue; + } + $min = 0.; + /** @var $optionValue \Magento\Catalog\Model\Product\Option\Value */ + foreach ($optionItem->getValues() as $optionValue) { + $price = $optionValue->getPrice($optionValue->getPriceType() == Value::TYPE_PERCENT); + if (!$min) { + $min = $price; + } + if ($price < $min) { + $min = $price; + } + } + $requiredMinimalOptions[] = [ + 'option_id' => $optionItem->getId(), + 'type' => $optionItem->getType(), + 'min' => $min + ]; + } + } + return $requiredMinimalOptions; + } + + /** + * Return price for select custom options + * + * @return float + */ + public function getSelectedOptions() { if (null !== $this->value) { return $this->value; } $this->value = false; - $optionIds = $this->salableItem->getCustomOption('option_ids'); + $optionIds = $this->product->getCustomOption('option_ids'); if (!$optionIds) { return $this->value; } @@ -82,11 +119,11 @@ class CustomOptionPrice extends RegularPrice implements CustomOptionPriceInterfa { $value = 0.; foreach ($values as $optionId) { - $option = $this->salableItem->getOptionById($optionId); + $option = $this->product->getOptionById($optionId); if (!$option) { continue; } - $confItemOption = $this->salableItem->getCustomOption('option_' . $option->getId()); + $confItemOption = $this->product->getCustomOption('option_' . $option->getId()); $group = $option->groupFactory($option->getType()) ->setOption($option) @@ -107,7 +144,7 @@ class CustomOptionPrice extends RegularPrice implements CustomOptionPriceInterfa return $this->priceOptions; } $this->priceOptions = []; - $options = $this->salableItem->getOptions(); + $options = $this->product->getOptions(); if ($options) { /** @var $optionItem \Magento\Catalog\Model\Product\Option */ foreach ($options as $optionItem) { @@ -116,7 +153,7 @@ class CustomOptionPrice extends RegularPrice implements CustomOptionPriceInterfa $price = $optionValue->getPrice($optionValue->getPriceType() == Value::TYPE_PERCENT); $this->priceOptions[$optionValue->getId()][$price] = [ 'base_amount' => $price, - 'adjustment' => $this->getAmount()->getValue() + 'adjustment' => $this->getCustomAmount($price)->getValue() ]; } } diff --git a/app/code/Magento/Catalog/Pricing/Price/CustomOptionPriceInterface.php b/app/code/Magento/Catalog/Pricing/Price/CustomOptionPriceInterface.php index 5e897e8c0a9..1619e8a2af9 100644 --- a/app/code/Magento/Catalog/Pricing/Price/CustomOptionPriceInterface.php +++ b/app/code/Magento/Catalog/Pricing/Price/CustomOptionPriceInterface.php @@ -28,11 +28,6 @@ namespace Magento\Catalog\Pricing\Price; */ interface CustomOptionPriceInterface { - /** - * Price model code - */ - const PRICE_TYPE_CUSTOM_OPTION = 'custom_option_price'; - /** * Return calculated options * diff --git a/app/code/Magento/Catalog/Pricing/Price/FinalPrice.php b/app/code/Magento/Catalog/Pricing/Price/FinalPrice.php index 20fd00fbb55..0bb6144808d 100644 --- a/app/code/Magento/Catalog/Pricing/Price/FinalPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/FinalPrice.php @@ -27,17 +27,18 @@ namespace Magento\Catalog\Pricing\Price; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; +use Magento\Framework\Pricing\Price\AbstractPrice; /** * Final price model */ -class FinalPrice extends RegularPrice implements FinalPriceInterface +class FinalPrice extends AbstractPrice implements FinalPriceInterface { /** - * @var string + * Price type final */ - protected $priceType = self::PRICE_TYPE_FINAL; + const PRICE_CODE = 'final_price'; /** * @var BasePrice @@ -45,18 +46,17 @@ class FinalPrice extends RegularPrice implements FinalPriceInterface protected $basePrice; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param CalculatorInterface $calculator */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, CalculatorInterface $calculator ) { - parent::__construct($salableItem, $quantity, $calculator); - $this->basePrice = $this->priceInfo->getPrice(BasePrice::PRICE_TYPE_BASE_PRICE); - $this->baseAmount = $this->getValue(); + parent::__construct($saleableItem, $quantity, $calculator); + $this->basePrice = $this->priceInfo->getPrice(BasePrice::PRICE_CODE); } /** @@ -66,7 +66,7 @@ class FinalPrice extends RegularPrice implements FinalPriceInterface */ public function getValue() { - return max(0, $this->basePrice->getValue()); // + custom options price + return max(0, $this->basePrice->getValue()); } /** @@ -76,11 +76,11 @@ class FinalPrice extends RegularPrice implements FinalPriceInterface */ public function getMinimalPrice() { - $minimalPrice = $this->salableItem->getMinimalPrice(); + $minimalPrice = $this->product->getMinimalPrice(); if ($minimalPrice === null) { $minimalPrice = $this->getValue(); } - return $this->calculator->getAmount($minimalPrice, $this->salableItem); + return $this->calculator->getAmount($minimalPrice, $this->product); } /** @@ -90,6 +90,6 @@ class FinalPrice extends RegularPrice implements FinalPriceInterface */ public function getMaximalPrice() { - return $this->calculator->getAmount($this->getValue(), $this->salableItem); + return $this->calculator->getAmount($this->getValue(), $this->product); } } diff --git a/app/code/Magento/Catalog/Pricing/Price/FinalPriceInterface.php b/app/code/Magento/Catalog/Pricing/Price/FinalPriceInterface.php index 03f21043f1a..a8ddaa62cf4 100644 --- a/app/code/Magento/Catalog/Pricing/Price/FinalPriceInterface.php +++ b/app/code/Magento/Catalog/Pricing/Price/FinalPriceInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Catalog * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -25,12 +27,21 @@ namespace Magento\Catalog\Pricing\Price; /** - * Final price interface + * Special price interface */ interface FinalPriceInterface { /** - * Price type final + * Get Minimal Price Amount + * + * @return \Magento\Framework\Pricing\Amount\AmountInterface */ - const PRICE_TYPE_FINAL = 'final_price'; + public function getMinimalPrice(); + + /** + * Get Maximal Price Amount + * + * @return \Magento\Framework\Pricing\Amount\AmountInterface + */ + public function getMaximalPrice(); } diff --git a/app/code/Magento/Catalog/Pricing/Price/GroupPrice.php b/app/code/Magento/Catalog/Pricing/Price/GroupPrice.php index c2ccaf17b97..80d79213e71 100644 --- a/app/code/Magento/Catalog/Pricing/Price/GroupPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/GroupPrice.php @@ -27,18 +27,20 @@ namespace Magento\Catalog\Pricing\Price; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; +use \Magento\Catalog\Model\Product; use Magento\Customer\Model\Session; +use Magento\Framework\Pricing\Price\AbstractPrice; +use Magento\Framework\Pricing\Price\BasePriceProviderInterface; /** * Group price model */ -class GroupPrice extends RegularPrice implements GroupPriceInterface +class GroupPrice extends AbstractPrice implements GroupPriceInterface, BasePriceProviderInterface { /** - * @var string + * Price type group */ - protected $priceType = self::PRICE_TYPE_GROUP; + const PRICE_CODE = 'group_price'; /** * @var Session @@ -51,18 +53,18 @@ class GroupPrice extends RegularPrice implements GroupPriceInterface protected $storedGroupPrice; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param CalculatorInterface $calculator * @param Session $customerSession */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, CalculatorInterface $calculator, Session $customerSession ) { - parent::__construct($salableItem, $quantity, $calculator); + parent::__construct($saleableItem, $quantity, $calculator); $this->customerSession = $customerSession; } @@ -89,8 +91,8 @@ class GroupPrice extends RegularPrice implements GroupPriceInterface */ protected function getCustomerGroupId() { - if ($this->salableItem->getCustomerGroupId()) { - return (int) $this->salableItem->getCustomerGroupId(); + if ($this->product->getCustomerGroupId()) { + return (int) $this->product->getCustomerGroupId(); } return (int) $this->customerSession->getCustomerGroupId(); } @@ -104,13 +106,13 @@ class GroupPrice extends RegularPrice implements GroupPriceInterface return $this->storedGroupPrice; } - $this->storedGroupPrice = $this->salableItem->getData('group_price'); + $this->storedGroupPrice = $this->product->getData('group_price'); if (null === $this->storedGroupPrice) { - $attribute = $this->salableItem->getResource()->getAttribute('group_price'); + $attribute = $this->product->getResource()->getAttribute('group_price'); if ($attribute) { - $attribute->getBackend()->afterLoad($this->salableItem); - $this->storedGroupPrice = $this->salableItem->getData('group_price'); + $attribute->getBackend()->afterLoad($this->product); + $this->storedGroupPrice = $this->product->getData('group_price'); } } if (null === $this->storedGroupPrice || !is_array($this->storedGroupPrice)) { diff --git a/app/code/Magento/Catalog/Pricing/Price/GroupPriceInterface.php b/app/code/Magento/Catalog/Pricing/Price/GroupPriceInterface.php index cd20d163763..b65d86fa788 100644 --- a/app/code/Magento/Catalog/Pricing/Price/GroupPriceInterface.php +++ b/app/code/Magento/Catalog/Pricing/Price/GroupPriceInterface.php @@ -31,11 +31,6 @@ namespace Magento\Catalog\Pricing\Price; */ interface GroupPriceInterface { - /** - * Price type group - */ - const PRICE_TYPE_GROUP = 'group_price'; - /** * @return array */ diff --git a/app/code/Magento/Catalog/Pricing/Price/MsrpPrice.php b/app/code/Magento/Catalog/Pricing/Price/MsrpPrice.php index 6320f472e2c..1df96a4b8ff 100644 --- a/app/code/Magento/Catalog/Pricing/Price/MsrpPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/MsrpPrice.php @@ -28,7 +28,7 @@ namespace Magento\Catalog\Pricing\Price; use Magento\Catalog\Helper\Data; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; /** * MSRP price model @@ -36,9 +36,9 @@ use Magento\Framework\Pricing\Object\SaleableInterface; class MsrpPrice extends FinalPrice implements MsrpPriceInterface { /** - * @var string + * Price type MSRP */ - protected $priceType = self::PRICE_TYPE_MSRP; + const PRICE_CODE = 'msrp_price'; /** * @var \Magento\Catalog\Helper\Data @@ -46,18 +46,18 @@ class MsrpPrice extends FinalPrice implements MsrpPriceInterface protected $catalogDataHelper; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param CalculatorInterface $calculator * @param Data $catalogDataHelper */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, CalculatorInterface $calculator, Data $catalogDataHelper ) { - parent::__construct($salableItem, $quantity, $calculator); + parent::__construct($saleableItem, $quantity, $calculator); $this->catalogDataHelper = $catalogDataHelper; } @@ -68,7 +68,7 @@ class MsrpPrice extends FinalPrice implements MsrpPriceInterface */ public function isShowPriceOnGesture() { - return $this->catalogDataHelper->isShowPriceOnGesture($this->salableItem); + return $this->catalogDataHelper->isShowPriceOnGesture($this->product); } /** @@ -78,7 +78,7 @@ class MsrpPrice extends FinalPrice implements MsrpPriceInterface */ public function getMsrpPriceMessage() { - return $this->catalogDataHelper->getMsrpPriceMessage($this->salableItem); + return $this->catalogDataHelper->getMsrpPriceMessage($this->product); } /** @@ -94,11 +94,11 @@ class MsrpPrice extends FinalPrice implements MsrpPriceInterface /** * Check if can apply Minimum Advertise price to product * - * @param SaleableInterface $saleableItem + * @param Product $product * @return bool */ - public function canApplyMsrp(SaleableInterface $saleableItem) + public function canApplyMsrp(Product $product) { - return $this->catalogDataHelper->canApplyMsrp($saleableItem); + return $this->catalogDataHelper->canApplyMsrp($product); } } diff --git a/app/code/Magento/Catalog/Pricing/Price/MsrpPriceInterface.php b/app/code/Magento/Catalog/Pricing/Price/MsrpPriceInterface.php index 2dd7e123b91..145ea09a505 100644 --- a/app/code/Magento/Catalog/Pricing/Price/MsrpPriceInterface.php +++ b/app/code/Magento/Catalog/Pricing/Price/MsrpPriceInterface.php @@ -26,18 +26,13 @@ namespace Magento\Catalog\Pricing\Price; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; /** * MSRP price interface */ interface MsrpPriceInterface { - /** - * Price type MSRP - */ - const PRICE_TYPE_MSRP = 'msrp_price'; - /** * Check is product need gesture to show price * @@ -62,8 +57,8 @@ interface MsrpPriceInterface /** * Check if can apply Minimum Advertise price to product in specific visibility * - * @param SaleableInterface $product + * @param Product $saleableItem * @return bool */ - public function canApplyMsrp(SaleableInterface $product); + public function canApplyMsrp(Product $saleableItem); } diff --git a/app/code/Magento/Catalog/Pricing/Price/RegularPrice.php b/app/code/Magento/Catalog/Pricing/Price/RegularPrice.php index 53e702c71fb..e067dc4fa03 100644 --- a/app/code/Magento/Catalog/Pricing/Price/RegularPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/RegularPrice.php @@ -24,72 +24,18 @@ namespace Magento\Catalog\Pricing\Price; -use Magento\Framework\Pricing\Adjustment\CalculatorInterface; -use Magento\Framework\Pricing\Amount\AmountInterface; -use Magento\Framework\Pricing\Price\PriceInterface; -use Magento\Framework\Pricing\PriceInfoInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Framework\Pricing\Price\AbstractPrice; +use Magento\Framework\Pricing\Price\BasePriceProviderInterface; /** * Class RegularPrice */ -class RegularPrice implements PriceInterface +class RegularPrice extends AbstractPrice implements BasePriceProviderInterface { /** - * Default price type + * Price type */ - const PRICE_TYPE_PRICE_DEFAULT = 'regular_price'; - - /** - * @var string - */ - protected $priceType = self::PRICE_TYPE_PRICE_DEFAULT; - - /** - * @var SaleableInterface|\Magento\Catalog\Model\Product - */ - protected $salableItem; - - /** - * @var PriceInfoInterface - */ - protected $priceInfo; - - /** - * @var float - */ - protected $quantity; - - /** - * @var \Magento\Framework\Pricing\Adjustment\Calculator - */ - protected $calculator; - - /** - * @var bool|float - */ - protected $value; - - /** - * @var AmountInterface - */ - protected $amount; - - /** - * @param SaleableInterface $salableItem - * @param float $quantity - * @param CalculatorInterface $calculator - */ - public function __construct( - SaleableInterface $salableItem, - $quantity, - CalculatorInterface $calculator - ) { - $this->salableItem = $salableItem; - $this->quantity = $quantity; - $this->calculator = $calculator; - $this->priceInfo = $salableItem->getPriceInfo(); - } + const PRICE_CODE = 'regular_price'; /** * Get price value @@ -99,45 +45,9 @@ class RegularPrice implements PriceInterface public function getValue() { if ($this->value === null) { - $price = $this->salableItem->getPrice(); + $price = $this->product->getPrice(); $this->value = $price ? floatval($price) : false; } return $this->value; } - - /** - * Get Price Amount object - * - * @return AmountInterface - */ - public function getAmount() - { - if (null === $this->amount) { - $this->amount = $this->calculator->getAmount($this->getValue(), $this->salableItem); - } - return $this->amount; - } - - /** - * @param float $amount - * @param null|bool|string $exclude - * @return AmountInterface - */ - public function getCustomAmount($amount = null, $exclude = null) - { - if ($amount === null) { - $amount = $this->getValue(); - } - return $this->calculator->getAmount($amount, $this->salableItem, $exclude); - } - - /** - * Get price type code - * - * @return string - */ - public function getPriceType() - { - return $this->priceType; - } } diff --git a/app/code/Magento/Catalog/Pricing/Price/SpecialPrice.php b/app/code/Magento/Catalog/Pricing/Price/SpecialPrice.php index 78070d8fb51..90434c19ed3 100644 --- a/app/code/Magento/Catalog/Pricing/Price/SpecialPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/SpecialPrice.php @@ -27,18 +27,20 @@ namespace Magento\Catalog\Pricing\Price; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; +use Magento\Framework\Pricing\Price\AbstractPrice; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; +use Magento\Framework\Pricing\Price\BasePriceProviderInterface; /** * Special price model */ -class SpecialPrice extends RegularPrice implements SpecialPriceInterface +class SpecialPrice extends AbstractPrice implements SpecialPriceInterface, BasePriceProviderInterface { /** - * @var string + * Price type special */ - protected $priceType = self::PRICE_TYPE_SPECIAL; + const PRICE_CODE = 'special_price'; /** * @var TimezoneInterface @@ -46,18 +48,18 @@ class SpecialPrice extends RegularPrice implements SpecialPriceInterface protected $localeDate; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param CalculatorInterface $calculator * @param TimezoneInterface $localeDate */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, CalculatorInterface $calculator, TimezoneInterface $localeDate ) { - parent::__construct($salableItem, $quantity, $calculator); + parent::__construct($saleableItem, $quantity, $calculator); $this->localeDate = $localeDate; } @@ -84,7 +86,7 @@ class SpecialPrice extends RegularPrice implements SpecialPriceInterface */ public function getSpecialPrice() { - return $this->salableItem->getSpecialPrice(); + return $this->product->getSpecialPrice(); } /** @@ -94,7 +96,7 @@ class SpecialPrice extends RegularPrice implements SpecialPriceInterface */ public function getSpecialFromDate() { - return $this->salableItem->getSpecialFromDate(); + return $this->product->getSpecialFromDate(); } /** @@ -104,7 +106,7 @@ class SpecialPrice extends RegularPrice implements SpecialPriceInterface */ public function getSpecialToDate() { - return $this->salableItem->getSpecialToDate(); + return $this->product->getSpecialToDate(); } /** @@ -113,7 +115,7 @@ class SpecialPrice extends RegularPrice implements SpecialPriceInterface public function isScopeDateInInterval() { return $this->localeDate->isScopeDateInInterval( - $this->salableItem->getStore(), + $this->product->getStore(), $this->getSpecialFromDate(), $this->getSpecialToDate() ); diff --git a/app/code/Magento/Catalog/Pricing/Price/SpecialPriceInterface.php b/app/code/Magento/Catalog/Pricing/Price/SpecialPriceInterface.php index 60a14e73ccd..fb591fd3e16 100644 --- a/app/code/Magento/Catalog/Pricing/Price/SpecialPriceInterface.php +++ b/app/code/Magento/Catalog/Pricing/Price/SpecialPriceInterface.php @@ -31,11 +31,6 @@ namespace Magento\Catalog\Pricing\Price; */ interface SpecialPriceInterface { - /** - * Price type special - */ - const PRICE_TYPE_SPECIAL = 'special_price'; - /** * Returns special price * diff --git a/app/code/Magento/Catalog/Pricing/Price/TierPrice.php b/app/code/Magento/Catalog/Pricing/Price/TierPrice.php index 597dd4b4110..8a34bf7b834 100644 --- a/app/code/Magento/Catalog/Pricing/Price/TierPrice.php +++ b/app/code/Magento/Catalog/Pricing/Price/TierPrice.php @@ -25,21 +25,23 @@ namespace Magento\Catalog\Pricing\Price; use Magento\Framework\Pricing\Adjustment\CalculatorInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; -use Magento\Customer\Service\V1\CustomerGroupServiceInterface; +use Magento\Catalog\Model\Product; +use Magento\Customer\Model\Group; use Magento\Customer\Model\Session; +use Magento\Framework\Pricing\Price\AbstractPrice; use Magento\Framework\Pricing\PriceInfoInterface; use Magento\Framework\Pricing\Amount\AmountInterface; +use Magento\Framework\Pricing\Price\BasePriceProviderInterface; /** * Tire prices model */ -class TierPrice extends RegularPrice implements TierPriceInterface +class TierPrice extends AbstractPrice implements TierPriceInterface, BasePriceProviderInterface { /** - * @var string + * Price type tier */ - protected $priceType = self::PRICE_TYPE_TIER; + const PRICE_CODE = 'tier_price'; /** * @var Session @@ -73,23 +75,23 @@ class TierPrice extends RegularPrice implements TierPriceInterface protected $filterByBasePrice = true; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param CalculatorInterface $calculator * @param Session $customerSession */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, CalculatorInterface $calculator, Session $customerSession ) { - parent::__construct($salableItem, $quantity, $calculator); + parent::__construct($saleableItem, $quantity, $calculator); $this->customerSession = $customerSession; - if ($salableItem->hasCustomerGroupId()) { - $this->customerGroup = (int)$salableItem->getCustomerGroupId(); + if ($saleableItem->hasCustomerGroupId()) { + $this->customerGroup = (int) $saleableItem->getCustomerGroupId(); } else { - $this->customerGroup = (int)$this->customerSession->getCustomerGroupId(); + $this->customerGroup = (int) $this->customerSession->getCustomerGroupId(); } } @@ -104,7 +106,7 @@ class TierPrice extends RegularPrice implements TierPriceInterface $prices = $this->getStoredTierPrices(); $prevQty = PriceInfoInterface::PRODUCT_QUANTITY_DEFAULT; $this->value = $prevPrice = $tierPrice = false; - $priceGroup = CustomerGroupServiceInterface::CUST_GROUP_ALL; + $priceGroup = Group::CUST_GROUP_ALL; foreach ($prices as $price) { if (!$this->canApplyTierPrice($price, $priceGroup, $prevQty)) { @@ -172,9 +174,7 @@ class TierPrice extends RegularPrice implements TierPriceInterface $qtyCache = []; foreach ($priceList as $priceKey => $price) { /* filter price by customer group */ - if ($price['cust_group'] !== $this->customerGroup - && $price['cust_group'] !== CustomerGroupServiceInterface::CUST_GROUP_ALL - ) { + if ($price['cust_group'] !== $this->customerGroup && $price['cust_group'] !== Group::CUST_GROUP_ALL) { unset($priceList[$priceKey]); continue; } @@ -205,7 +205,7 @@ class TierPrice extends RegularPrice implements TierPriceInterface protected function getBasePrice() { /** @var float $productPrice is a minimal available price */ - return $this->priceInfo->getPrice(BasePrice::PRICE_TYPE_BASE_PRICE)->getValue(); + return $this->priceInfo->getPrice(BasePrice::PRICE_CODE)->getValue(); } /** @@ -214,7 +214,10 @@ class TierPrice extends RegularPrice implements TierPriceInterface */ public function getSavePercent(AmountInterface $amount) { - return ceil(100 - ((100 / $this->getBasePrice()) * $amount->getBaseAmount())); + return ceil( + 100 - ((100 / $this->priceInfo->getPrice(BasePrice::PRICE_CODE)->getAmount()->getBaseAmount()) + * $amount->getBaseAmount()) + ); } /** @@ -223,7 +226,7 @@ class TierPrice extends RegularPrice implements TierPriceInterface */ protected function applyAdjustment($price) { - return $this->calculator->getAmount($price, $this->salableItem); + return $this->calculator->getAmount($price, $this->product); } /** @@ -239,7 +242,7 @@ class TierPrice extends RegularPrice implements TierPriceInterface // Tier price can be applied, if: // tier price is for current customer group or is for all groups if ($currentTierPrice['cust_group'] !== $this->customerGroup - && $currentTierPrice['cust_group'] !== CustomerGroupServiceInterface::CUST_GROUP_ALL + && $currentTierPrice['cust_group'] !== Group::CUST_GROUP_ALL ) { return false; } @@ -253,8 +256,8 @@ class TierPrice extends RegularPrice implements TierPriceInterface } // and found tier qty is same as previous tier qty, but current tier group isn't ALL_GROUPS if ($currentTierPrice['price_qty'] == $prevQty - && $prevPriceGroup !== CustomerGroupServiceInterface::CUST_GROUP_ALL - && $currentTierPrice['cust_group'] === CustomerGroupServiceInterface::CUST_GROUP_ALL + && $prevPriceGroup !== Group::CUST_GROUP_ALL + && $currentTierPrice['cust_group'] === Group::CUST_GROUP_ALL ) { return false; } @@ -269,13 +272,13 @@ class TierPrice extends RegularPrice implements TierPriceInterface protected function getStoredTierPrices() { if (null === $this->rawPriceList) { - $this->rawPriceList = $this->salableItem->getData(self::PRICE_TYPE_TIER); + $this->rawPriceList = $this->product->getData(self::PRICE_CODE); if (null === $this->rawPriceList || !is_array($this->rawPriceList)) { /** @var \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute */ - $attribute = $this->salableItem->getResource()->getAttribute(self::PRICE_TYPE_TIER); + $attribute = $this->product->getResource()->getAttribute(self::PRICE_CODE); if ($attribute) { - $attribute->getBackend()->afterLoad($this->salableItem); - $this->rawPriceList = $this->salableItem->getData(self::PRICE_TYPE_TIER); + $attribute->getBackend()->afterLoad($this->product); + $this->rawPriceList = $this->product->getData(self::PRICE_CODE); } } if (null === $this->rawPriceList || !is_array($this->rawPriceList)) { diff --git a/app/code/Magento/Catalog/Pricing/Price/TierPriceInterface.php b/app/code/Magento/Catalog/Pricing/Price/TierPriceInterface.php index 5d5bd30c0ce..184628b9c6b 100644 --- a/app/code/Magento/Catalog/Pricing/Price/TierPriceInterface.php +++ b/app/code/Magento/Catalog/Pricing/Price/TierPriceInterface.php @@ -29,11 +29,6 @@ namespace Magento\Catalog\Pricing\Price; */ interface TierPriceInterface { - /** - * Price type tier - */ - const PRICE_TYPE_TIER = 'tier_price'; - /** * @return array */ diff --git a/app/code/Magento/Catalog/Pricing/Render.php b/app/code/Magento/Catalog/Pricing/Render.php index 47e7fa9c7f5..65bcef7dcbd 100644 --- a/app/code/Magento/Catalog/Pricing/Render.php +++ b/app/code/Magento/Catalog/Pricing/Render.php @@ -26,6 +26,7 @@ namespace Magento\Catalog\Pricing; +use Magento\Catalog\Model\Product; use Magento\Framework\Pricing\Object\SaleableInterface; use Magento\Framework\View\Element\Template; use Magento\Framework\Registry; @@ -73,7 +74,9 @@ class Render extends Template if ($priceRender instanceof PricingRender) { $product = $this->getProduct(); if ($product instanceof SaleableInterface) { - return $priceRender->render($this->getPriceTypeCode(), $product, $this->getData()); + $arguments = $this->getData(); + $arguments['render_block'] = $this; + return $priceRender->render($this->getPriceTypeCode(), $product, $arguments); } } return parent::_toHtml(); @@ -82,7 +85,7 @@ class Render extends Template /** * Returns saleable item instance * - * @return SaleableInterface + * @return Product */ protected function getProduct() { diff --git a/app/code/Magento/Catalog/Pricing/Render/ConfiguredPriceBox.php b/app/code/Magento/Catalog/Pricing/Render/ConfiguredPriceBox.php new file mode 100644 index 00000000000..f311d0eb321 --- /dev/null +++ b/app/code/Magento/Catalog/Pricing/Render/ConfiguredPriceBox.php @@ -0,0 +1,56 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Catalog\Pricing\Render; + +use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface; + +/** + * Class for configured_price rendering + */ +class ConfiguredPriceBox extends FinalPriceBox +{ + /** + * Retrieve an item instance to the configured price model + * + * @return $this + */ + protected function _prepareLayout() + { + /** @var $price \Magento\Bundle\Pricing\Price\ConfiguredPrice */ + $price = $this->getPrice(); + /** @var $renderBlock \Magento\Catalog\Pricing\Render */ + $renderBlock = $this->getRenderBlock(); + if ($renderBlock && $renderBlock->getItem() instanceof ItemInterface) { + $price->setItem($renderBlock->getItem()); + } elseif ($renderBlock + && $renderBlock->getParentBlock() + && $renderBlock->getParentBlock()->getItem() instanceof ItemInterface + ) { + $price->setItem($renderBlock->getParentBlock()->getItem()); + } + return parent::_prepareLayout(); + } +} diff --git a/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php b/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php index 4851766e972..06d8222b810 100644 --- a/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php +++ b/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php @@ -30,7 +30,6 @@ use Magento\Framework\Pricing\Render\PriceBox as BasePriceBox; use Magento\Catalog\Pricing\Price\MsrpPrice; use Magento\Framework\Pricing\Render; use Magento\Catalog\Pricing\Price; -use Magento\Catalog\Pricing\Price\MsrpPriceInterface; /** * Class for final_price rendering @@ -59,7 +58,7 @@ class FinalPriceBox extends BasePriceBox if ($msrpPriceType->canApplyMsrp($this->getSaleableItem())) { /** @var BasePriceBox $msrpBlock */ $msrpBlock = $this->rendererPool->createPriceRender( - MsrpPriceInterface::PRICE_TYPE_MSRP, + MsrpPrice::PRICE_CODE, $this->getSaleableItem(), [ 'real_price_html' => $result @@ -89,9 +88,8 @@ class FinalPriceBox extends BasePriceBox */ public function renderAmountMinimal() { - //@TODO Implement 'minimal_price' final price is a minimum price - - $price = $this->getPriceType(\Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL); + /** @var \Magento\Catalog\Pricing\Price\FinalPrice $price */ + $price = $this->getPriceType(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE); $id = $this->getPriceId() ? $this->getPriceId() : 'product-minimal-price-' . $this->getSaleableItem()->getId(); return $this->renderAmount( $price->getMinimalPrice(), @@ -111,8 +109,8 @@ class FinalPriceBox extends BasePriceBox */ public function hasSpecialPrice() { - $displayRegularPrice = $this->getPriceType(Price\RegularPrice::PRICE_TYPE_PRICE_DEFAULT)->getAmount(); - $displayFinalPrice = $this->getPriceType(Price\FinalPriceInterface::PRICE_TYPE_FINAL)->getAmount(); + $displayRegularPrice = $this->getPriceType(Price\RegularPrice::PRICE_CODE)->getAmount()->getValue(); + $displayFinalPrice = $this->getPriceType(Price\FinalPrice::PRICE_CODE)->getAmount()->getValue(); return $displayFinalPrice < $displayRegularPrice; } @@ -124,7 +122,7 @@ class FinalPriceBox extends BasePriceBox public function showMinimalPrice() { /** @var Price\FinalPrice $finalPrice */ - $finalPrice = $this->getPriceType(Price\FinalPriceInterface::PRICE_TYPE_FINAL); + $finalPrice = $this->getPriceType(Price\FinalPrice::PRICE_CODE); $finalPriceValue = $finalPrice->getAmount()->getValue(); $minimalPriceAValue = $finalPrice->getMinimalPrice()->getValue(); return $this->getDisplayMinimalPrice() diff --git a/app/code/Magento/Catalog/Pricing/Render/PriceBox.php b/app/code/Magento/Catalog/Pricing/Render/PriceBox.php index 113586b5915..0a5d2bbedc1 100644 --- a/app/code/Magento/Catalog/Pricing/Render/PriceBox.php +++ b/app/code/Magento/Catalog/Pricing/Render/PriceBox.php @@ -25,7 +25,7 @@ */ namespace Magento\Catalog\Pricing\Render; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; use Magento\Framework\Pricing\Price\PriceInterface; use Magento\Framework\Pricing\Render\PriceBox as PriceBoxRender; use Magento\Framework\View\Element\Template\Context; @@ -54,7 +54,7 @@ class PriceBox extends PriceBoxRender /** * @param Context $context - * @param SaleableInterface $saleableItem + * @param Product $saleableItem * @param PriceInterface $price * @param RendererPool $rendererPool * @param Data $coreDataHelper @@ -63,7 +63,7 @@ class PriceBox extends PriceBoxRender */ public function __construct( Context $context, - SaleableInterface $saleableItem, + Product $saleableItem, PriceInterface $price, RendererPool $rendererPool, Data $coreDataHelper, @@ -103,10 +103,10 @@ class PriceBox extends PriceBoxRender /** * Check if quantity can be displayed for tier price with msrp * - * @param SaleableInterface $product + * @param Product $product * @return bool */ - public function getCanDisplayQty(SaleableInterface $product) + public function getCanDisplayQty(Product $product) { //TODO Refactor - change to const similar to Model\Product\Type\Grouped::TYPE_CODE if ($product->getTypeId() == 'grouped') { diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml index e56521f410c..94c82da0d55 100644 --- a/app/code/Magento/Catalog/etc/di.xml +++ b/app/code/Magento/Catalog/etc/di.xml @@ -320,56 +320,11 @@ </argument> </arguments> </type> - <type name="Magento\Framework\Pricing\PriceInfo\Factory"> - <arguments> - <argument name="types" xsi:type="array"> - <item name="simple" xsi:type="string">Magento\Framework\Pricing\PriceInfo\Base</item> - </argument> - </arguments> - </type> - <type name="Magento\Framework\Pricing\PriceComposite"> - <arguments> - <argument name="metadata" xsi:type="array"> - <item name="regular_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\RegularPrice</item> - <item name="include_in_base_price" xsi:type="boolean">true</item> - </item> - <item name="final_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\FinalPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="tier_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\TierPrice</item> - <item name="include_in_base_price" xsi:type="boolean">true</item> - </item> - <item name="group_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\GroupPrice</item> - <item name="include_in_base_price" xsi:type="boolean">true</item> - </item> - <item name="special_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\SpecialPrice</item> - <item name="include_in_base_price" xsi:type="boolean">true</item> - </item> - <item name="msrp_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\MsrpPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="base_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\BasePrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - <item name="custom_option_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Catalog\Pricing\Price\CustomOptionPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> - </item> - </argument> - </arguments> - </type> <type name="Magento\Framework\Pricing\Adjustment\Collection"> <arguments> <argument name="adjustments" xsi:type="array"> - <item name="tax" xsi:type="const">Magento\Tax\Pricing\Adjustment::CODE</item> - <item name="weee" xsi:type="const">Magento\Weee\Pricing\Adjustment::CODE</item> + <item name="tax" xsi:type="const">Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE</item> + <item name="weee" xsi:type="const">Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE</item> </argument> </arguments> </type> @@ -386,4 +341,34 @@ </argument> </arguments> </type> + <virtualType name="Magento\Catalog\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> + <arguments> + <argument name="prices" xsi:type="array"> + <item name="regular_price" xsi:type="string">Magento\Catalog\Pricing\Price\RegularPrice</item> + <item name="final_price" xsi:type="string">Magento\Catalog\Pricing\Price\FinalPrice</item> + <item name="tier_price" xsi:type="string">Magento\Catalog\Pricing\Price\TierPrice</item> + <item name="group_price" xsi:type="string">Magento\Catalog\Pricing\Price\GroupPrice</item> + <item name="special_price" xsi:type="string">Magento\Catalog\Pricing\Price\SpecialPrice</item> + <item name="msrp_price" xsi:type="string">Magento\Catalog\Pricing\Price\MsrpPrice</item> + <item name="base_price" xsi:type="string">Magento\Catalog\Pricing\Price\BasePrice</item> + <item name="custom_option_price" xsi:type="string">Magento\Catalog\Pricing\Price\CustomOptionPrice</item> + <item name="configured_price" xsi:type="string">Magento\Catalog\Pricing\Price\ConfiguredPrice</item> + </argument> + </arguments> + </virtualType> + <virtualType name="Magento\Catalog\Pricing\Price\Collection" type="Magento\Framework\Pricing\Price\Collection"> + <arguments> + <argument name="pool" xsi:type="object">Magento\Catalog\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <type name="Magento\Framework\Pricing\PriceInfo\Factory"> + <arguments> + <argument name="types" xsi:type="array"> + <item name="default" xsi:type="array"> + <item name="infoClass" xsi:type="string">Magento\Framework\Pricing\PriceInfo\Base</item> + <item name="prices" xsi:type="string">Magento\Catalog\Pricing\Price\Collection</item> + </item> + </argument> + </arguments> + </type> </config> diff --git a/app/code/Magento/Catalog/view/adminhtml/catalog/base-image-uploader.js b/app/code/Magento/Catalog/view/adminhtml/catalog/base-image-uploader.js index d88d163e881..876da3951db 100644 --- a/app/code/Magento/Catalog/view/adminhtml/catalog/base-image-uploader.js +++ b/app/code/Magento/Catalog/view/adminhtml/catalog/base-image-uploader.js @@ -110,7 +110,7 @@ this.element.find('input[type="file"]').fileupload({ dataType: 'json', - dropZone: $dropPlaceholder, + dropZone: $dropPlaceholder.closest('[data-attribute-code]'), acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, maxFileSize: this.element.data('maxFileSize'), done: function(event, data) { diff --git a/app/code/Magento/Catalog/view/adminhtml/catalog/form/renderer/fieldset/element.phtml b/app/code/Magento/Catalog/view/adminhtml/catalog/form/renderer/fieldset/element.phtml index 7c3824988d4..2bf89e78c6e 100644 --- a/app/code/Magento/Catalog/view/adminhtml/catalog/form/renderer/fieldset/element.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/catalog/form/renderer/fieldset/element.phtml @@ -57,7 +57,7 @@ $fieldAttributes = $fieldId . ' class="' . $fieldClass . '" ' <?php if ($element->getType() == 'hidden'): ?> <?php echo $element->getElementHtml() ?> <?php else: ?> - <div<?php echo $fieldAttributes ?> data-element-id="<?php echo $element->getHtmlId() ?>" + <div<?php echo $fieldAttributes ?> data-attribute-code="<?php echo $element->getHtmlId() ?>" data-apply-to="<?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\Data')->jsonEncode( $element->hasEntityAttribute() ? $element->getEntityAttribute()->getApplyTo() : array() ))?>" diff --git a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit.phtml index 8c5362b9c0a..383b85b2ed4 100644 --- a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit.phtml @@ -321,7 +321,7 @@ jQuery(function($) { if (nameDataMapper.apply($elements.get(index)) == elementId) { return true; } - var $elementToMove = $('.fieldset>.field[data-element-id="' + elementId + '"]'); + var $elementToMove = $('.fieldset>.field[data-attribute-code="' + elementId + '"]'); if ($elementToMove.length === 0) { $elementToMove = $element; } diff --git a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/action/inventory.phtml b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/action/inventory.phtml index aa0568b6f66..21fa82aab5c 100644 --- a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/action/inventory.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/action/inventory.phtml @@ -63,7 +63,7 @@ </select> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input name="<?php echo $this->getFieldSuffix() ?>[use_config_manage_stock]" type="checkbox" id="inventory_use_config_manage_stock" onclick="toggleValueElements(this, this.parentNode, $('inventory_manage_stock_checkbox'));" value="1" checked="checked" disabled="disabled" /> + <input name="<?php echo $this->getFieldSuffix() ?>[use_config_manage_stock]" type="checkbox" id="inventory_use_config_manage_stock" onclick="toggleValueElements(this, this.parentNode.parentNode, $('inventory_manage_stock_checkbox'));" value="1" checked="checked" disabled="disabled" /> <label for="inventory_use_config_manage_stock" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_manage_stock_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -95,7 +95,7 @@ <input type="text" class="input-text validate-number" id="inventory_min_qty" name="<?php echo $this->getFieldSuffix() ?>[min_qty]" value="<?php echo $this->getDefaultConfigValue('min_qty')*1 ?>" disabled="disabled" /> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_min_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_min_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_min_qty_checkbox'));" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_min_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_min_qty]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, $('inventory_min_qty_checkbox'));" checked="checked" disabled="disabled" /> <label for="inventory_use_config_min_qty" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_min_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -112,7 +112,7 @@ <input type="text" class="input-text validate-number" id="inventory_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[min_sale_qty]" value="<?php echo $this->getDefaultConfigValue('min_sale_qty')*1 ?>" disabled="disabled" /> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_min_sale_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_min_sale_qty_checkbox'));" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_min_sale_qty]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, $('inventory_min_sale_qty_checkbox'));" checked="checked" disabled="disabled" /> <label for="inventory_use_config_min_sale_qty" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_min_sale_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -129,7 +129,7 @@ <input type="text" class="input-text validate-number" id="inventory_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[max_sale_qty]" value="<?php echo $this->getDefaultConfigValue('max_sale_qty')*1 ?>" disabled="disabled" /> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_max_sale_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_max_sale_checkbox'));" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_max_sale_qty]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, $('inventory_max_sale_checkbox'));" checked="checked" disabled="disabled" /> <label for="inventory_use_config_max_sale_qty" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_max_sale_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -169,7 +169,7 @@ </select> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_backorders" name="<?php echo $this->getFieldSuffix() ?>[use_config_backorders]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_backorders_checkbox'));" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_backorders" name="<?php echo $this->getFieldSuffix() ?>[use_config_backorders]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, $('inventory_backorders_checkbox'));" checked="checked" disabled="disabled" /> <label for="inventory_use_config_backorders" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_backorders_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -186,7 +186,7 @@ <input type="text" class="input-text validate-number" id="inventory_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[notify_stock_qty]" value="<?php echo $this->getDefaultConfigValue('notify_stock_qty')*1 ?>" disabled="disabled" /> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_notify_stock_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_notify_stock_qty_checkbox'));" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_notify_stock_qty]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, $('inventory_notify_stock_qty_checkbox'));" checked="checked" disabled="disabled" /> <label for="inventory_use_config_notify_stock_qty" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_notify_stock_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -206,7 +206,7 @@ </select> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_enable_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[use_config_enable_qty_increments]" value="1" onclick="toggleValueElements(this, this.parentNode, [$('inventory_enable_qty_increments_checkbox')]);" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_enable_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[use_config_enable_qty_increments]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, [$('inventory_enable_qty_increments_checkbox')]);" checked="checked" disabled="disabled" /> <label for="inventory_use_config_enable_qty_increments" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_enable_qty_increments_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> @@ -223,7 +223,7 @@ <input type="text" class="input-text validate-number" id="inventory_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[qty_increments]" value="<?php echo $this->getDefaultConfigValue('qty_increments')*1 ?>" disabled="disabled" /> </div> <div class="field-service" value-scope="<?php echo __('[GLOBAL]') ?>"> - <input type="checkbox" id="inventory_use_config_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[use_config_qty_increments]" value="1" onclick="toggleValueElements(this, this.parentNode, [$('inventory_qty_increments_checkbox')]);" checked="checked" disabled="disabled" /> + <input type="checkbox" id="inventory_use_config_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[use_config_qty_increments]" value="1" onclick="toggleValueElements(this, this.parentNode.parentNode, [$('inventory_qty_increments_checkbox')]);" checked="checked" disabled="disabled" /> <label for="inventory_use_config_qty_increments" class="normal"><?php echo __('Use Config Settings') ?></label> <span class="attribute-change-checkbox"> <input type="checkbox" id="inventory_qty_increments_checkbox" onclick="toggleValueElementsWithCheckbox(this)" /> diff --git a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/group.phtml b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/group.phtml index 0cf86cd08b6..02fba5cbd59 100644 --- a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/group.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/group.phtml @@ -35,7 +35,7 @@ $_priceValueValidation = $this->getPriceValidation('validate-zero-or-greater'); $_showWebsite= $this->isMultiWebsites(); ?> -<div class="field" id="attribute-<?php echo $_htmlId?>-container" data-element-id="<?php echo $_htmlId?>" +<div class="field" id="attribute-<?php echo $_htmlId?>-container" data-attribute-code="<?php echo $_htmlId?>" data-apply-to="<?php echo $this->escapeHtml( $this->helper('Magento\Core\Helper\Data')->jsonEncode( $element->hasEntityAttribute() ? $element->getEntityAttribute()->getApplyTo() : array() diff --git a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/tier.phtml b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/tier.phtml index 1289d8baaea..ba713ebb43f 100644 --- a/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/tier.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/catalog/product/edit/price/tier.phtml @@ -37,7 +37,7 @@ $element = $this->getElement(); <?php $_showWebsite = $this->isShowWebsiteColumn(); ?> <?php $_showWebsite= $this->isMultiWebsites(); ?> -<div class="field" id="attribute-<?php echo $_htmlId?>-container" data-element-id="<?php echo $_htmlId?>" +<div class="field" id="attribute-<?php echo $_htmlId?>-container" data-attribute-code="<?php echo $_htmlId?>" data-apply-to="<?php echo $this->escapeHtml( $this->helper('Magento\Core\Helper\Data')->jsonEncode( $element->hasEntityAttribute() ? $element->getEntityAttribute()->getApplyTo() : array() diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE.xml b/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE.xml index b87affca02a..4894b300a60 100644 --- a/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE.xml +++ b/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE.xml @@ -35,4 +35,11 @@ </block> <block class="Magento\Catalog\Block\Adminhtml\Product\Composite\Fieldset\Qty" name="product.composite.fieldset.qty" template="catalog/product/composite/fieldset/qty.phtml"/> </block> + <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> + <arguments> + <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> + <argument name="use_link_for_as_low_as" xsi:type="boolean">true</argument> + <!-- set "override" configuration settings here --> + </arguments> + </block> </layout> diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR.xml b/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR.xml index dca7f34bc95..8696cb9923e 100644 --- a/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR.xml +++ b/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR.xml @@ -25,4 +25,11 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <block class="Magento\Catalog\Block\Adminhtml\Product\Composite\Error" name="product.composite.error" output="1"/> + <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> + <arguments> + <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> + <argument name="use_link_for_as_low_as" xsi:type="boolean">true</argument> + <!-- set "override" configuration settings here --> + </arguments> + </block> </layout> diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT.xml b/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT.xml index 39952aea54f..ebc33502e83 100644 --- a/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT.xml +++ b/app/code/Magento/Catalog/view/adminhtml/layout/CATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT.xml @@ -25,4 +25,11 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <block class="Magento\Catalog\Block\Adminhtml\Product\Composite\Update\Result" name="product.composite.update.result" output="1"/> + <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> + <arguments> + <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> + <argument name="use_link_for_as_low_as" xsi:type="boolean">true</argument> + <!-- set "override" configuration settings here --> + </arguments> + </block> </layout> diff --git a/app/code/Magento/Catalog/view/adminhtml/product/edit/tabs.phtml b/app/code/Magento/Catalog/view/adminhtml/product/edit/tabs.phtml index 012fb48cc10..cd996e043d3 100644 --- a/app/code/Magento/Catalog/view/adminhtml/product/edit/tabs.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/product/edit/tabs.phtml @@ -72,6 +72,7 @@ </span> </a> <div id="<?php echo $this->getTabId($_tab) ?>_content" class="no-display" + data-tab-panel="<?=$_tab->getTabId() ?>" <?php echo $this->getUiId('tab', 'content', $_tab->getId()) ?>> <?php echo $this->getTabContent($_tab); ?> <?php foreach ($tabs as $childTab): ?> diff --git a/app/code/Magento/Catalog/view/frontend/js/msrp.js b/app/code/Magento/Catalog/view/base/js/msrp.js similarity index 100% rename from app/code/Magento/Catalog/view/frontend/js/msrp.js rename to app/code/Magento/Catalog/view/base/js/msrp.js diff --git a/app/code/Magento/Catalog/view/frontend/js/tier-price.js b/app/code/Magento/Catalog/view/base/js/tier-price.js similarity index 100% rename from app/code/Magento/Catalog/view/frontend/js/tier-price.js rename to app/code/Magento/Catalog/view/base/js/tier-price.js diff --git a/app/code/Magento/Catalog/view/frontend/layout/catalog_product_prices.xml b/app/code/Magento/Catalog/view/base/layout/catalog_product_prices.xml similarity index 90% rename from app/code/Magento/Catalog/view/frontend/layout/catalog_product_prices.xml rename to app/code/Magento/Catalog/view/base/layout/catalog_product_prices.xml index e8abbb7082c..8dda37e87c9 100644 --- a/app/code/Magento/Catalog/view/frontend/layout/catalog_product_prices.xml +++ b/app/code/Magento/Catalog/view/base/layout/catalog_product_prices.xml @@ -52,6 +52,10 @@ <item name="custom_option_price" xsi:type="array"> <item name="amount_render_template" xsi:type="string">Magento_Catalog::product/price/amount/option.phtml</item> </item> + <item name="configured_price" xsi:type="array"> + <item name="render_class" xsi:type="string">Magento\Catalog\Pricing\Render\ConfiguredPriceBox</item> + <item name="render_template" xsi:type="string">Magento_Catalog::product/price/configured_price.phtml</item> + </item> </item> <!--<item name="adjustments" xsi:type="array"></item>--> </argument> diff --git a/app/design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_category_view.xml b/app/code/Magento/Catalog/view/base/layout/default.xml similarity index 65% rename from app/design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_category_view.xml rename to app/code/Magento/Catalog/view/base/layout/default.xml index ed2bf54c468..7b8420a104c 100644 --- a/app/design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_category_view.xml +++ b/app/code/Magento/Catalog/view/base/layout/default.xml @@ -23,13 +23,13 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ --> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="product_list"> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> <arguments> - <!-- If position of argument is depend on image size changable in VDE: - positions:list-secondary,grid-secondary,list-actions,grid-actions,list-primary,grid-primary< - --> - <argument name="positioned" xsi:type="string">positions:list-secondary</argument> + <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> + <argument name="use_link_for_as_low_as" xsi:type="boolean">true</argument> + <!-- set "override" configuration settings here --> </arguments> - </referenceBlock> + </block> </layout> diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalogsearch_result_index.xml b/app/code/Magento/Catalog/view/base/layout/empty.xml similarity index 64% rename from app/code/Magento/Bundle/view/frontend/layout/catalogsearch_result_index.xml rename to app/code/Magento/Catalog/view/base/layout/empty.xml index 403b2e3b52a..7b8420a104c 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/catalogsearch_result_index.xml +++ b/app/code/Magento/Catalog/view/base/layout/empty.xml @@ -23,12 +23,13 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ --> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="search_result_list"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> + <arguments> + <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> + <argument name="use_link_for_as_low_as" xsi:type="boolean">true</argument> + <!-- set "override" configuration settings here --> + </arguments> + </block> </layout> diff --git a/app/code/Magento/Catalog/view/frontend/product/price/amount/default.phtml b/app/code/Magento/Catalog/view/base/product/price/amount/default.phtml similarity index 56% rename from app/code/Magento/Catalog/view/frontend/product/price/amount/default.phtml rename to app/code/Magento/Catalog/view/base/product/price/amount/default.phtml index 78228659433..13b3d89bf9e 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price/amount/default.phtml +++ b/app/code/Magento/Catalog/view/base/product/price/amount/default.phtml @@ -25,23 +25,20 @@ <?php /** @var \Magento\Framework\Pricing\Render\Amount $this */ ?> -<?php if ($this->getDisplayLabel()): ?> - <span class="price-label"><?php echo $this->getDisplayLabel(); ?></span> -<?php endif; ?> -<span> - <?php if ($this->getPriceDisplayLabel()): ?> - <span class="price-label"><?php echo $this->getPriceDisplayLabel(); ?></span> +<span class="price-container <?php echo $this->getAdjustmentCssClasses() ?>"> + <?php if ($this->getDisplayLabel()): ?> + <span class="price-label"><?php echo $this->getDisplayLabel(); ?></span> <?php endif; ?> - <span class="price <?php echo $this->getAdjustmentCssClasses() ?>" id="<?php echo $this->getPriceId() ?>"> - <?php echo $this->convertAndFormatCurrency($this->getDisplayValue(), (bool) $this->getIncludeContainer()) ?> + <span id="<?php echo $this->getPriceId() ?>" + <?php echo ($this->getPriceDisplayLabel()) ? 'data-label="' . $this->getPriceDisplayLabel() . '"' : '' ?> + class="price-wrapper <?php echo $this->getPriceWrapperCss();?>"> + <span class="price"> + <?php echo $this->convertAndFormatCurrency($this->getDisplayValue(), (bool) $this->getIncludeContainer()) ?> + </span> </span> + <?php if ($this->hasAdjustmentsHtml()): ?> + <span class="price-adjustments"> + <?php echo $this->getAdjustmentsHtml() ?> + </span> + <?php endif; ?> </span> -<?php if ($this->hasAdjustmentsHtml()): ?> -<?php if ($this->getZone() == \Magento\Framework\Pricing\Render::ZONE_ITEM_OPTION): ?> - (<small> - <?php echo $this->getAdjustmentsHtml() ?> - </small>) -<?php else: ?> - <?php echo $this->getAdjustmentsHtml() ?> -<?php endif; ?> -<?php endif; ?> diff --git a/app/code/Magento/Catalog/view/frontend/product/price/amount/option.phtml b/app/code/Magento/Catalog/view/base/product/price/amount/option.phtml similarity index 100% rename from app/code/Magento/Catalog/view/frontend/product/price/amount/option.phtml rename to app/code/Magento/Catalog/view/base/product/price/amount/option.phtml diff --git a/app/code/Magento/Bundle/view/frontend/catalog/product/view/tierprices.phtml b/app/code/Magento/Catalog/view/base/product/price/configured_price.phtml similarity index 67% rename from app/code/Magento/Bundle/view/frontend/catalog/product/view/tierprices.phtml rename to app/code/Magento/Catalog/view/base/product/price/configured_price.phtml index 04cf6a41f9c..78022950022 100644 --- a/app/code/Magento/Bundle/view/frontend/catalog/product/view/tierprices.phtml +++ b/app/code/Magento/Catalog/view/base/product/price/configured_price.phtml @@ -18,22 +18,20 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category design + * @package base_default * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> - <?php -/** - * @see \Magento\Catalog\Block\Product\View - */ -$_product = $this->getProduct(); -$_tierPrices = $this->getTierPrices(); +/** @var \Magento\Catalog\Pricing\Render\FinalPriceBox $this */ +/** @var \Magento\Catalog\Pricing\Price\ConfiguredPrice $configuredPrice */ +$configuredPrice = $this->getPrice(); ?> -<?php if (count($_tierPrices) > 0): ?> - <ul class="prices tier items"> - <?php foreach($_tierPrices as $_price): ?> - <li class="item"><?php echo __('Buy %1 with %2 discount each', $_price['price_qty'], '<strong class="benefit">'.($_price['price']*1).'%</strong>') ?></li> - <?php endforeach ?> - </ul> -<?php endif;?> +<p class="price-as-configured"> + <?php echo $this->renderAmount($configuredPrice->getAmount(), [ + 'display_label' => __('Price as configured:'), + 'include_container' => false + ]); ?> +</p> diff --git a/app/code/Magento/Catalog/view/frontend/product/price/final_price.phtml b/app/code/Magento/Catalog/view/base/product/price/final_price.phtml similarity index 76% rename from app/code/Magento/Catalog/view/frontend/product/price/final_price.phtml rename to app/code/Magento/Catalog/view/base/product/price/final_price.phtml index 9c99b8f95c4..6658439ac2a 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price/final_price.phtml +++ b/app/code/Magento/Catalog/view/base/product/price/final_price.phtml @@ -36,21 +36,9 @@ $priceModel = $this->getPriceType('regular_price'); /** @var \Magento\Catalog\Pricing\Price\FinalPrice $finalPriceModel */ $finalPriceModel = $this->getPriceType('final_price'); ?> -<?php -if (isset($_GET['showmeprice'])) { - echo 'Regular Price :' . $this->getPriceType('regular_price')->getValue() . "<br />"; - echo 'Special Price :' . $this->getPriceType('special_price')->getValue(). "<br />"; - echo 'Group Price :' . $this->getPriceType('group_price')->getValue(). "<br />"; - echo 'Catalog Rule Price :' . $this->getPriceType('catalog_rule_price')->getValue(). "<br />"; - echo 'Tier Price :' . $this->getPriceType('tier_price')->getValue(). "<br />"; - echo 'Base Price :' . $this->getPriceType('base_price')->getValue(). "<br />"; - echo 'Final Price :' . $this->getPriceType('final_price')->getValue(). "<br />"; - echo "<br />"; -} -?> <?php if ($this->hasSpecialPrice()): ?> <p class="old-price"> - <?php echo $this->renderAmount($priceModel->getCustomAmount($priceModel->getValue(), true), [ + <?php echo $this->renderAmount($priceModel->getAmount(), [ 'display_label' => __('Regular Price:'), 'price_id' => $this->getPriceId('old-price-'), 'include_container' => true, diff --git a/app/code/Magento/Catalog/view/frontend/product/price/msrp_price.phtml b/app/code/Magento/Catalog/view/base/product/price/msrp_price.phtml similarity index 60% rename from app/code/Magento/Catalog/view/frontend/product/price/msrp_price.phtml rename to app/code/Magento/Catalog/view/base/product/price/msrp_price.phtml index 451e896bb45..b1b449e3f7b 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price/msrp_price.phtml +++ b/app/code/Magento/Catalog/view/base/product/price/msrp_price.phtml @@ -33,7 +33,7 @@ /** @var Magento\Catalog\Pricing\Price\MsrpPriceInterface $priceType */ $priceType = $this->getPrice(); -/** @var $product \Magento\Catalog\Model\Product|\Magento\Framework\Pricing\Object\SaleableInterface */ +/** @var $product \Magento\Catalog\Model\Product */ $product = $this->getSaleableItem(); $productId = $product->getId(); // @todo: msrp works totally wrong, any excuses not accepted. will be refactored ASAP @@ -60,7 +60,18 @@ if ($product->isSaleable()) { <?php $priceElementId = $priceElementIdPrefix . $productId . $this->getIdSuffix(); ?> <span id="<?php echo $this->getPriceId() ? $this->getPriceId() : $priceElementId ?>" style="display:none"></span> <?php $popupId = 'msrp-popup-' . $productId . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($popupId);?>"><?php echo __('Click for price'); ?></a> + <a href="#" + id="<?php echo($popupId);?>" + data-mage-init='{"addToCart":{"cartForm": "#product_addtocart_form_from_popup", + "popupId": "#<?php echo $popupId; ?>", + "productName": "<?php echo $product->getName() ?>", + "realPrice": <?php echo $this->jsonEncode($this->getRealPriceHtml()) ?>, + "msrpPrice": <?php echo $this->jsonEncode($msrpPrice) ?>, + "priceElementId":"<?php echo $priceElementId ?>", + "closeButtonId": "#map-popup-close", + "popupCartButtonId": "#map-popup-button", + "addToCartUrl": "<?php echo $addToCartUrl; ?>"}}'><?php echo __('Click for price'); ?> + </a> <?php else: ?> <span class="msrp message"> <?php echo $priceType->getMsrpPriceMessage() ?> @@ -69,37 +80,11 @@ if ($product->isSaleable()) { <?php if ($this->getZone() == \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW): ?> <?php $helpLinkId = 'msrp-help-' . $productId . $this->getRandomString(20); ?> - <a href="#" id="<?php echo $helpLinkId;?>" class="action show map"> - <span><?php echo __("What's this?"); ?></span> + <a href="#" + id="<?php echo $helpLinkId;?>" + class="action show map" + data-mage-init='{"addToCart":{"helpLinkId": "#<?php echo $helpLinkId;?>", + "productName": "<?php echo $product->getName() ?>", + "closeButtonId": "#map-popup-close"}}'><span><?php echo __("What's this?"); ?></span> </a> <?php endif; ?> - -<script type="text/javascript"> - //<![CDATA[ - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", - function () { - <?php if ($priceType->isShowPriceOnGesture()): ?> - $('#<?php echo($popupId);?>').addToCart({ - cartForm: "#product_addtocart_form_from_popup", - popupId: "#<?php echo $popupId;?>", - productName: '<?php echo $product->getName() ?>', - realPrice: <?php echo $this->jsonEncode($this->getRealPriceHtml()) ?>, - msrpPrice: <?php echo $this->jsonEncode($msrpPrice) ?>, - priceElementId: '<?php echo $priceElementId ?>', - closeButtonId: '#map-popup-close', - popupCartButtonId: "#map-popup-button", - addToCartUrl: '<?php echo $addToCartUrl; ?>' - }); - <?php endif; ?> - <?php if ($this->getZone() == \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW): ?> - $("#<?php echo $helpLinkId;?>").addToCart({ - helpLinkId: "#<?php echo $helpLinkId;?>", - productName: '<?php echo $product->getName() ?>', - closeButtonId: '#map-popup-close' - }); - <?php endif; ?> - }); - })(jQuery); - //]]> -</script> diff --git a/app/code/Magento/Catalog/view/frontend/product/price/tier_prices.phtml b/app/code/Magento/Catalog/view/base/product/price/tier_prices.phtml similarity index 94% rename from app/code/Magento/Catalog/view/frontend/product/price/tier_prices.phtml rename to app/code/Magento/Catalog/view/base/product/price/tier_prices.phtml index 006e993c27c..a723dbbb185 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price/tier_prices.phtml +++ b/app/code/Magento/Catalog/view/base/product/price/tier_prices.phtml @@ -100,11 +100,9 @@ $product = $this->getSaleableItem(); <?php if ($msrpShowOnGesture):?> <script type="text/javascript"> (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/tier-price.js') ?>", function () { - $('.product.info.main').tierPrice({ - inputQty: '#qty', - productForm: '#product_addtocart_form' - }); + $('.product.info.main').mage('tierPrice', { + inputQty: '#qty', + productForm: '#product_addtocart_form' }); })(jQuery); </script> diff --git a/app/code/Magento/Catalog/view/frontend/js/components.phtml b/app/code/Magento/Catalog/view/frontend/js/components.phtml new file mode 100644 index 00000000000..ecd591e9e5c --- /dev/null +++ b/app/code/Magento/Catalog/view/frontend/js/components.phtml @@ -0,0 +1,99 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + catalogSearch: [ + '<?php echo $this->getViewFileUrl('jquery/handlebars/handlebars-v1.3.0.js')?>', + '<?php echo $this->getViewFileUrl('Magento_CatalogSearch::form-mini.js')?>' + ], + compareItems: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/compare.js')?>' + ], + compareList: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/list.js')?>' + ], + fileOption: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/file-option.js')?>' + ], + relatedProducts: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/related-products.js')?>' + ], + upsellProducts: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/upsell-products.js')?>' + ], + discountCode: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/discount-codes.js')?>' + ], + catalogGallery: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/gallery.js')?>' + ], + wishlist: [ + '<?php echo $this->getViewFileUrl('Magento_Wishlist::wishlist.js')?>' + ], + orderOverview: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/overview.js') ?>' + ], + rowBuilder: [ + '<?php echo $this->getViewFileUrl('Magento_Theme::js/row-builder.js') ?>' + ], + address: [ + '<?php echo $this->getViewFileUrl('Magento_Customer::address.js') ?>' + ], + priceOption: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/price-option.js') ?>' + ], + requireCookie: [ + '<?php echo $this->getViewFileUrl('Magento_Core::js/require-cookie.js') ?>' + ], + addToCart: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>' + ], + tierPrice: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/tier-price.js') ?>' + ], + dateOption: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/date-option.js') ?>' + ], + zoom: [ + '<?php echo $this->getViewFileUrl('mage/zoom.js') ?>' + ], + gallery: [ + '<?php echo $this->getViewFileUrl('mage/gallery.js') ?>' + ], + galleryFullScreen: [ + '<?php echo $this->getViewFileUrl('mage/gallery.js') ?>', + '<?php echo $this->getViewFileUrl('mage/gallery-fullscreen.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Catalog/view/frontend/js/date-option.js b/app/code/Magento/Catalog/view/frontend/js/date-option.js index c3fb458e522..9d277ecc7df 100644 --- a/app/code/Magento/Catalog/view/frontend/js/date-option.js +++ b/app/code/Magento/Catalog/view/frontend/js/date-option.js @@ -25,6 +25,9 @@ /*jshint browser:true jquery:true*/ (function($) { $.widget('mage.dateOption', { + options: { + }, + _create: function() { $(this.options.datepickerFieldSelector) .on('change', $.proxy(function() {this.element.trigger('reloadPrice');}, this)); diff --git a/app/code/Magento/Catalog/view/frontend/js/price-option.js b/app/code/Magento/Catalog/view/frontend/js/price-option.js index edb3cdff4df..e4b4f65c6d3 100644 --- a/app/code/Magento/Catalog/view/frontend/js/price-option.js +++ b/app/code/Magento/Catalog/view/frontend/js/price-option.js @@ -35,7 +35,6 @@ controlContainer: 'dd' }, _create: function() { - this.element.on('changePrice', $.proxy(function(e, data) { this.changePrice(data.config, data.price); }, this)).on('reloadPrice', $.proxy(function() { @@ -224,8 +223,10 @@ price = price + getOptionPrices[0]; } - - var priceHtml = $.tmpl(this.options.priceTemplate, {'formattedPrice': this._formatCurrency(price, this.options.priceConfig.priceFormat)}); + var priceHtml = $.tmpl( + this.options.priceTemplate, + {'formattedPrice': this._formatCurrency(price, this.options.priceConfig.priceFormat)} + ); priceElement.html(priceHtml[0].outerHTML); // If clone exists, update clone price as well if (!isClone && clone.length === 1) { diff --git a/app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_item.xml b/app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_item.xml deleted file mode 100644 index e09d8f92c57..00000000000 --- a/app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_item.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="catalog_product_price_template"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">product/price_msrp_item.phtml</argument> - </action> - </referenceBlock> - <referenceBlock name="product.clone_prices"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">product/price_msrp_item.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_wishlist_item.xml b/app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_wishlist_item.xml deleted file mode 100644 index 54214819253..00000000000 --- a/app/code/Magento/Catalog/view/frontend/layout/MAP_price_msrp_wishlist_item.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="catalog_product_price_template"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">Magento_Wishlist::render/item/price_msrp_item.phtml</argument> - </action> - </referenceBlock> -</layout> diff --git a/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml index 49792c14a2b..af981d30700 100644 --- a/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml +++ b/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml @@ -37,11 +37,6 @@ </arguments> </referenceBlock> <referenceBlock name="head"> - <block class="Magento\Theme\Block\Html\Head\Script" name="mage-zoom-js"> - <arguments> - <argument name="file" xsi:type="string">mage/zoom.js</argument> - </arguments> - </block> <block class="Magento\Theme\Block\Html\Head\Css" name="mage-gallery-css"> <arguments> <argument name="file" xsi:type="string">mage/gallery.css</argument> diff --git a/app/code/Magento/Catalog/view/frontend/layout/default.xml b/app/code/Magento/Catalog/view/frontend/layout/default.xml index a305f92da20..4cef193beb1 100644 --- a/app/code/Magento/Catalog/view/frontend/layout/default.xml +++ b/app/code/Magento/Catalog/view/frontend/layout/default.xml @@ -30,36 +30,12 @@ <referenceContainer name="right"> <block class="Magento\Catalog\Block\Product\Compare\Sidebar" name="catalog.compare.sidebar" template="product/compare/sidebar.phtml"/> </referenceContainer> - <block class="Magento\Catalog\Block\Product\Price\Template" name="catalog_product_price_template"/> - <referenceBlock name="catalog_product_price_template"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">product/price_msrp.phtml</argument> - </action> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp_item</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">product/price_msrp_item.phtml</argument> - </action> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp_noform</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">product/price_msrp_noform.phtml</argument> - </action> - </referenceBlock> <referenceBlock name="head"> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-toolbar-form-js" after="magento-dataPost-js"> <arguments> <argument name="file" xsi:type="string">Magento_Catalog::js/product/list/toolbar.js</argument> </arguments> </block> + <block class="Magento\Framework\View\Element\Js\Components" name="head.components" as="components" template="Magento_Catalog::js/components.phtml"/> </referenceBlock> - <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> - <arguments> - <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> - <argument name="use_link_for_as_low_as" xsi:type="boolean">true</argument> - <!-- set "override" configuration settings here --> - </arguments> - </block> </layout> diff --git a/app/code/Magento/Catalog/view/frontend/product/compare/list.phtml b/app/code/Magento/Catalog/view/frontend/product/compare/list.phtml index 307c63787cb..6809b5f6108 100644 --- a/app/code/Magento/Catalog/view/frontend/product/compare/list.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/compare/list.phtml @@ -31,7 +31,13 @@ <?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); ?> <div class="comparison wrapper"> <div class="comparison container"> - <table class="data-table data table comparison" id="product-comparison"> + <table class="data-table data table comparison" id="product-comparison" + data-mage-init='{"compareList":{ + "windowPrintSelector":".action.print", + "productsInRow":"5", + "selectors":{ + "productAddToCartSelector":"button.action.tocart"} + }}'> <caption><?php echo __('Compare Products') ?></caption> <thead> <tr> @@ -143,18 +149,3 @@ <?php else: ?> <p class="empty"><?php echo __('You have no items to compare.') ?></p> <?php endif; ?> -<script type="text/javascript"> - (function($, window) { - <?php if ($_total): ?> - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/list.js')?>", function() { - $('#product-comparison').compareList({ - windowPrintSelector: '.action.print', - productsInRow: 5, - selectors: { - productAddToCartSelector: 'button.action.tocart' - } - }); - }); - <?php endif; ?> - })(jQuery, window); -</script> diff --git a/app/code/Magento/Catalog/view/frontend/product/compare/sidebar.phtml b/app/code/Magento/Catalog/view/frontend/product/compare/sidebar.phtml index cd7c44ba16b..d1288f0ef9e 100644 --- a/app/code/Magento/Catalog/view/frontend/product/compare/sidebar.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/compare/sidebar.phtml @@ -37,7 +37,13 @@ $count = $_helper->getItemCount(); </div> <div class="content"> <?php if($_helper->getItemCount() > 0): ?> - <ol id="compare-items" class="items compare"> + <ol id="compare-items" class="items compare" + data-mage-init='{"compareItems":{ + "removeConfirmMessage":"<?php echo __("Are you sure you would like to remove this item from the compare products?") ?>", + "removeSelector":"#compare-items a.action.delete", + "clearAllConfirmMessage":"<?php echo __("Are you sure you would like to remove all products from your comparison?") ?>", + "clearAllSelector":"#compare-clear-all" + }}'> <?php foreach($_items as $_index => $_item): ?> <li class="item"> <input type="hidden" class="compare-item-id" value="<?php echo $_item->getId() ?>"/> @@ -64,18 +70,6 @@ $count = $_helper->getItemCount(); </a> </div> </div> - <script type="text/javascript"> - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/compare.js') ?>", function () { - $('#compare-items').compareItems({ - removeConfirmMessage: '<?php echo __('Are you sure you would like to remove this item from the compare products?') ?>', - removeSelector: '#compare-items a.action.delete', - clearAllConfirmMessage: '<?php echo __('Are you sure you would like to remove all products from your comparison?') ?>', - clearAllSelector: '#compare-clear-all' - }); - }); - })(jQuery); - </script> <?php else: ?> <p class="empty"><?php echo __('You have no items to compare.') ?></p> <?php endif; ?> diff --git a/app/code/Magento/Catalog/view/frontend/product/gallery.phtml b/app/code/Magento/Catalog/view/frontend/product/gallery.phtml index 1a0794166ef..cbbb40e91b4 100644 --- a/app/code/Magento/Catalog/view/frontend/product/gallery.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/gallery.phtml @@ -40,7 +40,7 @@ <?php if($_imageTitle = $this->escapeHtml($this->getCurrentImage()->getLabel())): ?> <h1 class="image-label"><?php echo $_imageTitle ?></h1> <?php endif; ?> - <img src="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($this->getProduct(), 'image', $this->getImageFile()); ?>"<?php if($_width): ?> width="<?php echo $_width ?>"<?php endif; ?> alt="<?php echo $this->escapeHtml($this->getCurrentImage()->getLabel()) ?>" title="<?php echo $this->escapeHtml($this->getCurrentImage()->getLabel()) ?>" id="product-gallery-image" class="image" /> + <img src="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($this->getProduct(), 'image', $this->getImageFile()); ?>"<?php if($_width): ?> width="<?php echo $_width ?>"<?php endif; ?> alt="<?php echo $this->escapeHtml($this->getCurrentImage()->getLabel()) ?>" title="<?php echo $this->escapeHtml($this->getCurrentImage()->getLabel()) ?>" id="product-gallery-image" class="image" data-mage-init='{"catalogGallery":{}}'/> <div class="buttons-set"><a href="#" class="button" role="close-window"><span><?php echo __('Close Window') ?></span></a></div> <?php if($this->getPreviousImageUrl() || $this->getNextImageUrl()): ?> <div class="nav"> @@ -53,10 +53,3 @@ </div> <?php endif; ?> </div> -<script type="text/javascript"> - window.onload = function() { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/gallery.js');?>", function() { - jQuery('#product-gallery-image').gallery(); - }); - }; -</script> diff --git a/app/code/Magento/Catalog/view/frontend/product/list/items.phtml b/app/code/Magento/Catalog/view/frontend/product/list/items.phtml index 893741ed4f5..f57359ccd9e 100644 --- a/app/code/Magento/Catalog/view/frontend/product/list/items.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/list/items.phtml @@ -175,7 +175,11 @@ switch($type = $this->getType()) { <?php if ($exist):?> <?php if($type == 'related' || $type == 'upsell'): ?> - <div class="block <?php echo $class; ?>" data-limit="<?php echo $limit; ?>" data-shuffle="<?php echo $shuffle; ?>"> + <?php if($type == 'related'): ?> + <div class="block <?php echo $class; ?>" data-mage-init='{"relatedProducts":{"relatedCheckbox":".related.checkbox"}}' data-limit="<?php echo $limit; ?>" data-shuffle="<?php echo $shuffle; ?>"> + <?php else: ?> + <div class="block <?php echo $class; ?>" data-mage-init='{"upsellProducts":{}}' data-limit="<?php echo $limit; ?>" data-shuffle="<?php echo $shuffle; ?>"> + <?php endif; ?> <?php else: ?> <div class="block <?php echo $class; ?>"> <?php endif; ?> @@ -282,21 +286,5 @@ switch($type = $this->getType()) { </ol> </div> </div> - <?php if($type == 'related'): ?> - <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/related-products.js'); ?>", function() { - jQuery(".block.related").relatedProducts({ - relatedCheckbox: '.related.checkbox' - }); - }); - </script> - <?php endif; ?> - <?php if($type == 'upsell'): ?> - <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/upsell-products.js'); ?>", function() { - jQuery(".block.upsell").upsellProducts(); - }); - </script> - <?php endif; ?> </div> <?php endif;?> diff --git a/app/code/Magento/Catalog/view/frontend/product/price.phtml b/app/code/Magento/Catalog/view/frontend/product/price.phtml deleted file mode 100644 index bc560c05fbf..00000000000 --- a/app/code/Magento/Catalog/view/frontend/product/price.phtml +++ /dev/null @@ -1,387 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category design - * @package base_default - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -?> - -<?php -/** - * Template for displaying product price in different places (products grid, product view page etc) - * - * @see \Magento\Catalog\Block\Product\AbstractProduct - */ -?> -<?php - $_coreHelper = $this->helper('Magento\Core\Helper\Data'); - $weeeHelper = $this->helper('Magento\Weee\Helper\Data'); - $priceHelper = $this->helper('Magento\Catalog\Helper\Product\Price'); - /* @var $_coreHelper \Magento\Core\Helper\Data */ - /* @var $weeeHelper \Magento\Weee\Helper\Data */ - /* @var $priceHelper Magento\Catalog\Helper\Product\Price */ - - $_product = $this->getProduct(); - $_storeId = $_product->getStoreId(); - $_id = $_product->getId(); - $_weeeSeparator = ''; - $_simplePricesTax = ($priceHelper->displayPriceIncludingTax() || $priceHelper->displayBothPrices()); - $_minimalPriceValue = $_product->getMinimalPrice(); - $_minimalPrice = $priceHelper->getPrice($_product, $_minimalPriceValue, $_simplePricesTax); -?> -<?php $_weeeTaxAmount = $weeeHelper->getAmountForDisplay($_product); ?> -<?php if ($weeeHelper->typeOfDisplay(array(\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, 4))): ?> - <?php $_weeeTaxAmount = $weeeHelper->getAmount($_product); ?> - <?php $_weeeTaxAttributes = $weeeHelper->getProductWeeeAttributesForDisplay($_product); ?> -<?php endif; ?> -<?php $_weeeTaxAmountInclTaxes = $_weeeTaxAmount; ?> -<?php if ($weeeHelper->isTaxable() && !$priceHelper->priceIncludesTax($_storeId)): ?> - <?php $_attributes = $weeeHelper->getProductWeeeAttributesForRenderer($_product, null, null, null, true); ?> - <?php $_weeeTaxAmountInclTaxes = $weeeHelper->getAmountInclTaxes($_attributes); ?> -<?php endif; ?> - -<div class="price-box"> -<?php $_price = $priceHelper->getPrice($_product, $_product->getPrice()) ?> -<?php $_regularPrice = $priceHelper->getPrice($_product, $_product->getPrice(), $_simplePricesTax) ?> -<?php $_finalPrice = $priceHelper->getPrice($_product, $_product->getFinalPrice()) ?> -<?php $_finalPriceInclTax = $priceHelper->getPrice($_product, $_product->getFinalPrice(), true) ?> -<?php $_weeeDisplayType = $weeeHelper->getPriceDisplayType(); ?> -<?php if ($_finalPrice >= $_price): ?> - <?php if ($priceHelper->displayBothPrices()): ?> - <?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(0)): // including ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, false) ?> - </span> - </span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </span> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(1)): // incl. + weee ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, false) ?> - </span> - </span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - <span class="weee">( - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - )</span> - </span> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(4)): // incl. + weee ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, false) ?> - </span> - </span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - <span class="weee">( - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - )</span> - </span> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(2)): // excl. + weee + final ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price, true, false) ?> - </span> - </span> - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <span class="weee"> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?> - </span> - <?php endforeach; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </span> - <?php else: ?> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php if ($_finalPrice == $_price): ?> - <?php echo $_coreHelper->currency($_price, true, false) ?> - <?php else: ?> - <?php echo $_coreHelper->currency($_finalPrice, true, false) ?> - <?php endif; ?> - </span> - </span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax, true, false) ?> - </span> - </span> - <?php endif; ?> - <?php else: ?> - <?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(0)): // including ?> - <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?> - </span> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(1)): // incl. + weee ?> - <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?> - </span> - <span class="weee">( - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - )</span> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(4)): // incl. + weee ?> - <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?> - </span> - <span class="weee">( - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - )</span> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(2)): // excl. + weee + final ?> - <span class="regular-price"><?php echo $_coreHelper->currency($_price,true,true) ?></span><br /> - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <span class="weee"> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?> - </span> - <?php endforeach; ?> - <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?> - </span> - <?php else: ?> - <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php if ($_finalPrice == $_price): ?> - <?php echo $_coreHelper->currency($_price, true, true) ?> - <?php else: ?> - <?php echo $_coreHelper->currency($_finalPrice, true, true) ?> - <?php endif; ?> - </span> - <?php endif; ?> - <?php endif; ?> -<?php else: /* if ($_finalPrice == $_price): */ ?> - <?php $_originalWeeeTaxAmount = $weeeHelper->getOriginalAmount($_product); ?> - - <?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(0)): // including ?> - <p class="old-price"> - <span class="price-label"><?php echo __('Regular Price:') ?></span> - <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false) ?> - </span> - </p> - - <?php if ($priceHelper->displayBothPrices()): ?> - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false) ?> - </span> - </span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </span> - </p> - <?php else: ?> - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </p> - <?php endif; ?> - - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(1)): // incl. + weee ?> - <p class="old-price"> - <span class="price-label"><?php echo __('Regular Price:') ?></span> - <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false) ?> - </span> - </p> - - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false) ?> - </span> - </span> - <span class="weee">( - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - )</span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </span> - </p> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(4)): // incl. + weee ?> - <p class="old-price"> - <span class="price-label"><?php echo __('Regular Price:') ?></span> - <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false) ?> - </span> - </p> - - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false) ?> - </span> - </span> - <span class="weee">( - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <?php echo $_weeeSeparator; ?> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true); ?> - <?php $_weeeSeparator = ' + '; ?> - <?php endforeach; ?> - )</span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </span> - </p> - <?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(2)): // excl. + weee + final ?> - <p class="old-price"> - <span class="price-label"><?php echo __('Regular Price:') ?></span> - <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_regularPrice, true, false) ?> - </span> - </p> - - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice, true, false) ?> - </span> - </span> - <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?> - <span class="weee"> - <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?> - </span> - <?php endforeach; ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?> - </span> - </span> - </p> - <?php else: // excl. ?> - <p class="old-price"> - <span class="price-label"><?php echo __('Regular Price:') ?></span> - <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_regularPrice, true, false) ?> - </span> - </p> - - <?php if ($priceHelper->displayBothPrices()): ?> - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price-excluding-tax"> - <span class="label"><?php echo __('Excl. Tax:') ?></span> - <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice, true, false) ?> - </span> - </span> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPriceInclTax, true, false) ?> - </span> - </span> - </p> - <?php else: ?> - <p class="special-price"> - <span class="price-label"><?php echo __('Special Price:') ?></span> - <span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_finalPrice, true, false) ?> - </span> - </p> - <?php endif; ?> - <?php endif; ?> - -<?php endif; /* if ($_finalPrice == $_price): */ ?> -<?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()): ?> - - <?php $_minimalPriceDisplayValue = $_minimalPrice; ?> - <?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay(array(0, 1, 4))): ?> - <?php $_minimalPriceDisplayValue = $_minimalPrice + $_weeeTaxAmount; ?> - <?php endif; ?> - - <?php if ($this->getUseLinkForAsLowAs()):?> - <a href="<?php echo $_product->getProductUrl(); ?>" class="minimal-price-link"> - <?php else:?> - <span class="minimal-price-link"> - <?php endif?> - <span class="label"><?php echo __('As low as:') ?></span> - <span class="price" id="product-minimal-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>"> - <?php echo $_coreHelper->currency($_minimalPriceDisplayValue, true, false) ?> - </span> - <?php if ($this->getUseLinkForAsLowAs()):?> - </a> - <?php else:?> - </span> - <?php endif?> -<?php endif; /* if ($this->getDisplayMinimalPrice() && $_minimalPrice && $_minimalPrice < $_finalPrice): */ ?> -</div> diff --git a/app/code/Magento/Catalog/view/frontend/product/price_msrp.phtml b/app/code/Magento/Catalog/view/frontend/product/price_msrp.phtml index e193d2d65b6..3fa751ee849 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price_msrp.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/price_msrp.phtml @@ -44,31 +44,18 @@ <span class="old price" id="product-price-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>"><?php echo $_msrpPrice ?></span> <?php endif; ?> <?php $popupId = 'msrp-click-' . $_product->getId() . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($popupId);?>"><?php echo __('Click for price') ?></a> + <?php if ($this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product)): ?> + <a href="#" + id="<?php echo($popupId); ?>" + data-mage-init='{"addToCart":{"popupId": "#<?php echo($popupId); ?>", + "productName": "<?php echo $_product->getName() ?>", + "realPrice": <?php echo $this->getRealPriceJs($_product) ?>, + "msrpPrice": "<?php echo $_msrpPrice ?>", + "priceElementId":"<?php echo $priceElementId ?>", + "popupCartButtonId": "#map-popup-button", + "addToCartUrl": "<?php echo $this->getAddToCartUrl($_product) ?>"}}'><?php echo __('Click for price') ?> + </a> + <?php else: ?> + <a href="#" id="<?php echo($popupId);?>" data-mage-init='{"addToCart":{"popupId": "#<?php echo($popupId);?>", "submitUrl": "<?php echo $_product->getProductUrl() ?>"}}'><?php echo __('Click for price') ?></a> + <?php endif; ?> </div> - - <script type="text/javascript"> - //<![CDATA[ - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", function () { - <?php if ($this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product)): ?> - $('#<?php echo($popupId);?>').addToCart({ - popupId: "#<?php echo($popupId);?>", - productName: '<?php echo $_product->getName() ?>', - realPrice: '<?php echo $this->getRealPriceJs($_product) ?>', - msrpPrice: '<?php echo $_msrpPrice ?>', - priceElementId: '<?php echo $priceElementId ?>', - closeButtonId: '#map-popup-close', - popupCartButtonId: "#map-popup-button", - addToCartUrl: "<?php echo $this->getAddToCartUrl($_product) ?>" - }); - <?php else: ?> - $('#<?php echo($popupId);?>').addToCart({ - popupId: "#<?php echo($popupId);?>", - submitUrl: "<?php echo $_product->getProductUrl() ?>" - }); - <?php endif; ?> - }); - })(jQuery); - //]]> - </script> diff --git a/app/code/Magento/Catalog/view/frontend/product/price_msrp_item.phtml b/app/code/Magento/Catalog/view/frontend/product/price_msrp_item.phtml index 81201c6eb12..7772285a4e9 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price_msrp_item.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/price_msrp_item.phtml @@ -46,51 +46,30 @@ $priceElementIdPrefix = $this->getPriceElementIdPrefix() ? $this->getPriceElemen <div class="price-box map info"> <?php $_price = $this->helper('Magento\Tax\Helper\Data')->getPrice($_product, $_product->getMsrp()) ?> <?php if ($_product->getMsrp()): ?> - <?php $_msrpPrice = $_coreHelper->currency($_product->getMsrp(), true, true) ?> - <span class="old-price"><?php echo $_msrpPrice ?></span> + <?php $_msrpPrice = $_coreHelper->currency($_product->getMsrp(), true, true) ?> + <span class="old-price"><?php echo $_msrpPrice ?></span> <?php endif; ?> <?php if ($_catalogHelper->isShowPriceOnGesture($_product)): ?> - <?php $priceElementId = $priceElementIdPrefix . $_id . $this->getIdSuffix(); ?> - <span id="<?php echo $priceElementId ?>" style="display:none"></span> - <?php $popupId = 'msrp-popup-' . $_id . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($popupId);?>"><?php echo __('Click for price'); ?></a> - + <?php $priceElementId = $priceElementIdPrefix . $_id . $this->getIdSuffix(); ?> + <span id="<?php echo $priceElementId ?>" style="display:none"></span> + <?php $popupId = 'msrp-popup-' . $_id . $this->getRandomString(20); ?> + <a href="#" + id="<?php echo($popupId);?>" + data-mage-init='{"addToCart":{"popupId": "#<?php echo($popupId);?>", + "productName": "<?php echo $_product->getName() ?>", + "realPrice": <?php echo $this->getRealPriceJs($_product) ?>, + "msrpPrice": "<?php echo $_msrpPrice ?>", + "priceElementId":"<?php echo $priceElementId ?>", + "popupCartButtonId": "#map-popup-button", + "cartForm": "#product_addtocart_form"}}'><?php echo __('Click for price') ?> + </a> <?php else: ?> - <span class="msrp message"> + <span class="msrp message"> <?php echo $_catalogHelper->getMsrpPriceMessage($_product) ?> </span> <?php endif; ?> <?php $helpLinkId = 'msrp-help-' . $_id . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($helpLinkId);?>" class="action show map"><span><?php echo __("What's this?"); ?></span></a> + <a href="#" id="<?php echo($helpLinkId);?>" data-mage-init='{"addToCart":{"helpLinkId": "#<?php echo($helpLinkId);?>", "productName": "<?php echo $_product->getName() ?>"}}' class="action show map"><span><?php echo __("What's this?"); ?></span></a> </div> - -<script type="text/javascript"> - //<![CDATA[ - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", - function () { - <?php if ($this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product)): ?> - $('#<?php echo($popupId);?>').addToCart({ - cartForm: "#product_addtocart_form", - popupId: "#<?php echo($popupId);?>", - productName: '<?php echo $_product->getName() ?>', - realPrice: '<?php echo $this->getRealPriceJs($_product) ?>', - msrpPrice: '<?php echo $_msrpPrice ?>', - priceElementId: '<?php echo $priceElementId ?>', - closeButtonId: '#map-popup-close', - popupCartButtonId: "#map-popup-button" - }); - <?php endif; ?> - $("#<?php echo($helpLinkId);?>").addToCart({ - helpLinkId: "#<?php echo($helpLinkId);?>", - productName: '<?php echo $_product->getName() ?>', - closeButtonId: '#map-popup-close' - }); - }); - })(jQuery); - //]]> -</script> - - diff --git a/app/code/Magento/Catalog/view/frontend/product/price_msrp_noform.phtml b/app/code/Magento/Catalog/view/frontend/product/price_msrp_noform.phtml index 634d3e2b119..75c1a8be6e4 100644 --- a/app/code/Magento/Catalog/view/frontend/product/price_msrp_noform.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/price_msrp_noform.phtml @@ -45,31 +45,18 @@ <span class="old-price" id="product-price-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>"><?php echo $_msrpPrice ?></span> <?php endif; ?> <?php $popupId = 'msrp-click-' . $_product->getId() . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($popupId);?>"><?php echo __('Click for price') ?></a> + <?php if ($this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product)): ?> + <a href="#" + id="<?php echo($popupId); ?>" + data-mage-init='{"addToCart":{"popupId": "#<?php echo($popupId); ?>", + "productName": "<?php echo $_product->getName() ?>", + "realPrice": <?php echo $this->getRealPriceJs($_product) ?>, + "msrpPrice": "<?php echo $_msrpPrice ?>", + "priceElementId":"<?php echo $priceElementId ?>", + "popupCartButtonId": "#map-popup-button", + "addToCartUrl": "<?php echo $this->getAddToCartUrl($_product) ?>"}}'><?php echo __('Click for price') ?> + </a> + <?php else: ?> + <a href="#" id="<?php echo($popupId);?>" data-mage-init='{"addToCart":{"popupId": "#<?php echo($popupId);?>", "submitUrl": "<?php echo $_product->getProductUrl() ?>"}}'><?php echo __('Click for price') ?></a> + <?php endif; ?> </div> - - <script type="text/javascript"> - //<![CDATA[ - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", function () { - <?php if ($this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product)): ?> - $('#<?php echo($popupId);?>').addToCart({ - popupId: "#<?php echo($popupId);?>", - productName: '<?php echo $_product->getName() ?>', - realPrice: '<?php echo $this->getRealPriceJs($_product) ?>', - msrpPrice: '<?php echo $_msrpPrice ?>', - priceElementId: '<?php echo $priceElementId ?>', - closeButtonId: '#map-popup-close', - popupCartButtonId: "#map-popup-button", - addToCartUrl: "<?php echo $this->getAddToCartUrl($_product) ?>" - }); - <?php else: ?> - $('#<?php echo($popupId);?>').addToCart({ - popupId: "#<?php echo($popupId);?>", - submitUrl: "<?php echo $_product->getProductUrl() ?>" - }); - <?php endif; ?> - }); - })(jQuery); - //]]> - </script> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/addto.phtml b/app/code/Magento/Catalog/view/frontend/product/view/addto.phtml index 110b40ffa42..e761cd0b6f7 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/addto.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/addto.phtml @@ -43,9 +43,7 @@ $compareHelper = $this->helper('Magento\Catalog\Helper\Product\Compare'); class="action tocompare"><span><?php echo __('Add to Compare') ?></span></a> </div> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Wishlist::js/add-to-wishlist.js') ?>", function () { - jQuery('body').addToWishlist( - <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode(array('productType' => $_product->getTypeId()))?> - ); - }); + jQuery('body').mage('addToWishlist', + <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode(array('productType' => $_product->getTypeId()))?> + ); </script> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/addtocart.phtml b/app/code/Magento/Catalog/view/frontend/product/view/addtocart.phtml index 6779f656226..562c3ac406f 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/addtocart.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/addtocart.phtml @@ -60,13 +60,8 @@ <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function () { - $('#product_addtocart_form').validation({ - radioCheckboxClosest: '.nested' - }); - }); + $('#product_addtocart_form').mage('validation', { + radioCheckboxClosest: '.nested' + }); })(jQuery); </script> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/base-image.phtml b/app/code/Magento/Catalog/view/frontend/product/view/base-image.phtml index e475f2a462f..034bee63e17 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/base-image.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/base-image.phtml @@ -145,41 +145,33 @@ $thumbHeight = $this->getVar("product_page_more_views:height") ? : $thumbWidth; </script> <script type="text/javascript"> (function($) { - head.js("<?php echo $this->getViewFileUrl('mage/zoom.js')?>", - "<?php echo $this->getViewFileUrl('mage/gallery.js')?>", - "<?php echo $this->getViewFileUrl('mage/gallery-fullscreen.js')?>", - function() { - $('[data-role=media-gallery]') - .gallery({ - sizes: { - small: { - width: <?php echo $thumbWidth ?>, - height: <?php echo $thumbHeight ?> - }, - medium: { - width: <?php echo $_resizedWidth ?>, - height: <?php echo $_resizedHeight ?> - } - }, - controls: { - notice: { - text: '<?php echo $this->escapeJsQuote(__("Click on image to view it full sized")) ?>' - } - } - }) - .zoom({ - controls: { - display: { - left: 20, - top: 65 - }, - notice: { - text: '<?php echo $this->escapeJsQuote(__("Click on image to zoom")) ?>' - } - } - }) - .galleryFullScreen(); - }); + $('[data-role=media-gallery]').mage('gallery', { + 'sizes': { + 'small': { + 'width': <?php echo $thumbWidth ?>, + 'height': <?php echo $thumbHeight ?> + }, + 'medium': { + 'width': <?php echo $_resizedWidth ?>, + 'height': <?php echo $_resizedHeight ?> + } + }, + 'controls': { + 'notice': { + 'text': '<?php echo $this->escapeJsQuote(__("Click on image to view it full sized")) ?>' + } + } + }).mage('zoom', { + 'controls': { + 'display': { + 'left': 20, + 'top': 65 + }, + 'notice': { + 'text': '<?php echo $this->escapeJsQuote(__("Click on image to zoom")) ?>' + } + } + }).mage('galleryFullScreen', {}); })(jQuery); </script> <?php endif; ?> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/form.phtml b/app/code/Magento/Catalog/view/frontend/product/view/form.phtml index 8dd0b4574ee..d896dee7059 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/form.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/form.phtml @@ -33,8 +33,8 @@ <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/price-option.js') ?>", function () { - $('#product_addtocart_form').priceOption({"priceConfig":<?php echo $this->getJsonConfig() ?>}); + $(document).ready(function() { + $('#product_addtocart_form').mage('priceOption', {"priceConfig":<?php echo $this->getJsonConfig() ?>}); }); })(jQuery); </script> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/options.phtml b/app/code/Magento/Catalog/view/frontend/product/view/options.phtml index 44aae925471..97dc955cf46 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/options.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/options.phtml @@ -28,8 +28,8 @@ <?php if (count($_options)):?> <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/price-option.js') ?>", function () { - $('#product_addtocart_form').priceOption({ + $(document).ready(function() { + $('#product_addtocart_form').mage('priceOption', { 'optionConfig':<?php echo $this->getJsonConfig()?>, 'controlContainer': '.field' }).trigger('reloadPrice'); diff --git a/app/code/Magento/Catalog/view/frontend/product/view/options/type/date.phtml b/app/code/Magento/Catalog/view/frontend/product/view/options/type/date.phtml index 423fb423a02..b3093957e2f 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/options/type/date.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/options/type/date.phtml @@ -40,12 +40,10 @@ <script type="text/javascript"> //<![CDATA[ (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/date-option.js') ?>", function() { - $.mage.dateOption({ - datepickerFieldSelector: 'select.datetime-picker', - monthSelector: '#options_<?php echo $_optionId ?>_month', - yearSelector: '#options_<?php echo $_optionId ?>_year' - }); + $('#product_addtocart_form').mage('dateOption', { + 'datepickerFieldSelector': 'select.datetime-picker', + 'monthSelector': '#options_<?php echo $_optionId ?>_month', + 'yearSelector': '#options_<?php echo $_optionId ?>_year' }); })(jQuery); //]]> @@ -72,12 +70,12 @@ value="" data-validate="{'validate-optional-datetime':<?php echo $_optionId?>}"/> <?php endif; ?> - <script type="text/javascript"> //<![CDATA[ (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", function() { - $.validator.setDefaults({ignore: ':hidden:not(input[name^="validate_datetime_"])'}); + var addtocartForm = $('#product_addtocart_form'); + addtocartForm.mage('validation', { + ignore: ':hidden:not(input[name^="validate_datetime_"])' }); })(jQuery); //]]> diff --git a/app/code/Magento/Catalog/view/frontend/product/view/options/type/file.phtml b/app/code/Magento/Catalog/view/frontend/product/view/options/type/file.phtml index 7a2ef1d2bcd..b2160de3d7b 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/options/type/file.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/options/type/file.phtml @@ -31,22 +31,6 @@ <?php $_fileNamed = $_fileName . '_name'; ?> <?php $class = ($_option->getIsRequire()) ? ' required' : ''; ?> -<script type="text/javascript"> - //<![CDATA[ - (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/file-option.js')?>", function() { - $('#input-box-<?php echo $_fileName ?>').fileOption({ - fileName: '<?php echo $_fileName ?>', - fileNamed: '<?php echo $_fileNamed ?>', - fieldNameAction: '<?php echo $_fieldNameAction ?>', - changeFileSelector: '#change-<?php echo $_fileName ?>', - deleteFileSelector: '#delete-<?php echo $_fileName ?>' - }); - }); - })(jQuery); - //]]> -</script> - <div class="field file<?php echo $class; ?>"> <label class="label"> <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> @@ -64,7 +48,15 @@ <?php endif; ?> </div> <?php endif; ?> - <div class="control" id="input-box-<?php echo $_fileName ?>" <?php echo $_fileExists ? 'style="display:none"' : '' ?>> + <div class="control" id="input-box-<?php echo $_fileName ?>" + data-mage-init='{"fileOption":{ + "fileName":"<?php echo $_fileName ?>", + "fileNamed":"<?php echo $_fileNamed ?>", + "fieldNameAction":"<?php echo $_fieldNameAction ?>", + "changeFileSelector":"#change-<?php echo $_fileName ?>", + "deleteFileSelector":"#delete-<?php echo $_fileName ?>"} + }' + <?php echo $_fileExists ? 'style="display:none"' : '' ?>> <input type="file" name="<?php echo $_fileName; ?>" class="product-custom-option<?php echo $_option->getIsRequire() ? ' required' : '' ?>" diff --git a/app/code/Magento/Catalog/view/frontend/product/view/price_clone.phtml b/app/code/Magento/Catalog/view/frontend/product/view/price_clone.phtml index 26a7ead5d22..d3b68e51c68 100644 --- a/app/code/Magento/Catalog/view/frontend/product/view/price_clone.phtml +++ b/app/code/Magento/Catalog/view/frontend/product/view/price_clone.phtml @@ -26,7 +26,7 @@ <?php $_product = $this->getProduct() ?> <?php echo $this->getProductPriceHtml( $_product, - \Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW, [ 'price_id_suffix' => '_clone' diff --git a/app/code/Magento/Catalog/view/frontend/product/view/tierprices.phtml b/app/code/Magento/Catalog/view/frontend/product/view/tierprices.phtml deleted file mode 100644 index b77c6e618f4..00000000000 --- a/app/code/Magento/Catalog/view/frontend/product/view/tierprices.phtml +++ /dev/null @@ -1,228 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -?> - -<?php -/** - * @var $this \Magento\Catalog\Block\Product\View - */ -$_product = $this->getProduct(); -$_tierPrices = $this->getTierPrices(); -$_finalPriceInclTax = $this->helper('Magento\Tax\Helper\Data')->getPrice($_product, $_product->getFinalPrice(), true); - -/** @var $_catalogHelper \Magento\Catalog\Helper\Data */ -$_catalogHelper = $this->helper('Magento\Catalog\Helper\Data'); - -$_weeeTaxAmount = $this->helper('Magento\Weee\Helper\Data')->getAmountForDisplay($_product); -if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(array(1, 2, 4))) { - $_weeeTaxAttributes = $this->helper('Magento\Weee\Helper\Data')->getProductWeeeAttributesForDisplay($_product); -} - -?> -<?php if (count($_tierPrices) > 0): ?> - <ul class="<?php echo ($this->hasListClass() ? $this->getListClass() : 'prices tier items'); ?>"> - <?php $this->helper('Magento\Weee\Helper\Data')->processTierPrices($_product, $_tierPrices); ?> - <?php foreach ($_tierPrices as $_index => $_price): ?> - <li class="item"> - <?php if ($_catalogHelper->canApplyMsrp($_product)): ?> - <?php if ($this->getShowDetailedPrice() === false): ?> - <?php echo __('Buy %1 for', $_price['price_qty']) ?>: - <?php else: ?> - <?php echo __('Buy %1', $_price['price_qty']) ?> - <?php endif; ?> - <?php else: ?> - - <?php if ($this->helper('Magento\Tax\Helper\Data')->displayBothPrices()): ?> - <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(0)): ?> - <?php echo __('Buy %1 for %2 (%3 incl. tax) each', $_price['price_qty'], $_price['formated_price_incl_weee_only'], $_price['formated_price_incl_weee']) ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(1)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php echo __('%1 incl tax.', $_price['formated_price_incl_weee']); ?> - <?php $separator = ' + '; foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $separator; ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> - <?php endforeach; ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(4)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php echo __('%1 incl tax.', $_price['formated_price_incl_weee']); ?> - <?php $separator = ' + '; foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $separator; ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()+$_attribute->getTaxAmount()); ?> - <?php endforeach; ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(2)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> - <?php endforeach; ?> - <?php echo __('Total incl. Tax: %1', $_price['formated_price_incl_weee']); ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php else: ?> - <?php echo __('Buy %1 for %2 (%3 incl. tax) each', $_price['price_qty'], $_price['formated_price'], $_price['formated_price_incl_tax']) ?> - <?php endif; ?> - <?php else: ?> - <?php if ($this->helper('Magento\Tax\Helper\Data')->displayPriceIncludingTax()): ?> - <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(0)): ?> - <?php echo __('Buy %1 for %2 each', $_price['price_qty'], $_price['formated_price_incl_weee']) ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(1)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_weee']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $separator; ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> - <?php $separator = ' + '; endforeach; ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(4)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_weee']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $separator; ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()+$_attribute->getTaxAmount()); ?> - <?php $separator = ' + '; endforeach; ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(2)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_tax']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> - <?php endforeach; ?> - <?php echo __('Total incl. Tax: %1', $_price['formated_price_incl_weee']); ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php else: ?> - <?php echo __('Buy %1 for %2 each', $_price['price_qty'], $_price['formated_price_incl_tax']) ?> - <?php endif; ?> - <?php else: ?> - <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(0)): ?> - <?php echo __('Buy %1 for %2 each', $_price['price_qty'], $_price['formated_price_incl_weee_only']) ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(1)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $separator; ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> - <?php $separator = ' + '; endforeach; ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(4)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $separator; ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()+$_attribute->getTaxAmount()); ?> - <?php $separator = ' + '; endforeach; ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay(2)): ?> - <?php echo __('Buy %1 for %2', $_price['price_qty'], $_price['formated_price']); ?> - <?php if ($_weeeTaxAttributes): ?> - (<small> - <?php foreach ($_weeeTaxAttributes as $_attribute): ?> - <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> - <?php endforeach; ?> - <?php echo __('Total incl. Tax: %1', $_price['formated_price_incl_weee_only']); ?> - </small>) - <?php endif; ?> - <?php echo __('each') ?> - <?php else: ?> - <?php echo __('Buy %1 for %2 each', $_price['price_qty'], $_price['formated_price']) ?> - <?php endif; ?> - <?php endif; ?> - <?php endif; ?> - - <?php endif; // Can apply MSRP ?> - - <?php if ($this->getShowDetailedPrice() !== false): ?> - <?php if(($_product->getPrice() == $_product->getFinalPrice() && $_product->getPrice() > $_price['price']) - || ($_product->getPrice() != $_product->getFinalPrice() && $_product->getFinalPrice() > $_price['price'])): ?> - <?php echo __('and') ?> <strong class="benefit"><?php echo __('save')?> <span class="percent tier-<?php echo $_index;?>"><?php echo $_price['savePercent']?></span>% - <?php endif ?></strong> - <?php endif; ?> - - <?php if ($_catalogHelper->isShowPriceOnGesture($_product)):?> - <?php $popupId = 'msrp-popup-' . $_product->getId() . $this->getRandomString(20); ?> - <?php - $tierPriceData = [ - 'addToCartUrl' => $this->getProduct()->isSalable() - ? $this->getAddToCartUrl($_product, array('qty' => $_price['price_qty'])) - : '', - 'name' => $_product->getName(), - 'price' => $_price['real_price_html'], - 'msrp' => $this->helper('Magento\Core\Helper\Data')->currency($_product->getMsrp(), true, false), - ]; - if ($this->getCanDisplayQty() !== false) { - $tierPriceData['qty'] = $_price['price_qty']; - } - ?> - <a href="#" - id="<?php echo($popupId);?>" - data-tier-price="<?php $this->escapeHtml( - $this->helper('Magento\Core\Helper\Data')->jsonEncode($tierPriceData) - )?>" - ><?php echo __('Click for price'); ?></a> - <?php else: ?> - <span class="msrp-price-hide-message"> - <?php echo $_catalogHelper->getMsrpPriceMessage($_product) ?> - </span> - <?php endif; ?> - </li> - <?php endforeach ?> - </ul> - <?php if ($_catalogHelper->isShowPriceOnGesture($_product)):?> - <script type="text/javascript"> - (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/tier-price.js') ?>", function () { - $('#product_addtocart_form').tierPrice({ - inputQty: '#qty' - }); - }); - })(jQuery); - </script> - <?php endif;?> -<?php endif;?> diff --git a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php index c37c0e859af..d0a0d1f313e 100644 --- a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php +++ b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php @@ -185,7 +185,7 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select protected function _getJs($quantityFieldId, $inStockFieldId) { // @codingStandardsIgnoreStart - return "\n <script>\n jQuery(function(\$) {\n var qty = \$('#{$quantityFieldId}'),\n productType = \$('#product_type_id').val(),\n stockAvailabilityField = \$('#{$inStockFieldId}'),\n manageStockField = \$('#inventory_manage_stock'),\n useConfigManageStockField = \$('#inventory_use_config_manage_stock');\n\n var disabler = function(event) {\n var stockBeforeDisable = \$.Event('stockbeforedisable', {productType: productType});\n \$('#product_info_tabs_product-details_content').trigger(stockBeforeDisable);\n if (stockBeforeDisable.result !== false) {\n var manageStockValue = (qty.val() === '') ? 0 : 1;\n stockAvailabilityField.prop('disabled', !manageStockValue);\n if (manageStockField.val() != manageStockValue && !(event && event.type == 'keyup')) {\n if (useConfigManageStockField.val() == 1) {\n useConfigManageStockField.removeAttr('checked').val(0);\n }\n manageStockField.toggleClass('disabled', false).prop('disabled', false);\n manageStockField.val(manageStockValue);\n }\n }\n };\n\n //Associated fields\n var fieldsAssociations = {\n '{$quantityFieldId}' : 'inventory_qty',\n '{$inStockFieldId}' : 'inventory_stock_availability'\n };\n //Fill corresponding field\n var filler = function() {\n var id = \$(this).attr('id');\n if ('undefined' !== typeof fieldsAssociations[id]) {\n \$('#' + fieldsAssociations[id]).val(\$(this).val());\n } else {\n \$('#' + getKeyByValue(fieldsAssociations, id)).val(\$(this).val());\n }\n\n if (\$('#inventory_manage_stock').length) {\n fireEvent(\$('#inventory_manage_stock').get(0), 'change');\n }\n };\n //Get key by value from object\n var getKeyByValue = function(object, value) {\n var returnVal = false;\n \$.each(object, function(objKey, objValue){\n if (value === objValue) {\n returnVal = objKey;\n }\n });\n return returnVal;\n };\n \$.each(fieldsAssociations, function(generalTabField, advancedTabField) {\n \$('#' + generalTabField + ', #' + advancedTabField)\n .bind('focus blur change keyup click', filler)\n .bind('keyup change blur', disabler);\n filler.call(\$('#' + generalTabField));\n filler.call(\$('#' + advancedTabField));\n });\n disabler();\n });\n </script>\n "; + return "\n <script>\n jQuery(function(\$) {\n var qty = \$('#{$quantityFieldId}'),\n productType = \$('#product_type_id').val(),\n stockAvailabilityField = \$('#{$inStockFieldId}'),\n manageStockField = \$('#inventory_manage_stock'),\n useConfigManageStockField = \$('#inventory_use_config_manage_stock');\n\n var disabler = function(event) {\n var stockBeforeDisable = \$.Event('stockbeforedisable', {productType: productType});\n \$('[data-tab-panel=product-details]').trigger(stockBeforeDisable);\n if (stockBeforeDisable.result !== false) {\n var manageStockValue = (qty.val() === '') ? 0 : 1;\n stockAvailabilityField.prop('disabled', !manageStockValue);\n if (manageStockField.val() != manageStockValue && !(event && event.type == 'keyup')) {\n if (useConfigManageStockField.val() == 1) {\n useConfigManageStockField.removeAttr('checked').val(0);\n }\n manageStockField.toggleClass('disabled', false).prop('disabled', false);\n manageStockField.val(manageStockValue);\n }\n }\n };\n\n //Associated fields\n var fieldsAssociations = {\n '{$quantityFieldId}' : 'inventory_qty',\n '{$inStockFieldId}' : 'inventory_stock_availability'\n };\n //Fill corresponding field\n var filler = function() {\n var id = \$(this).attr('id');\n if ('undefined' !== typeof fieldsAssociations[id]) {\n \$('#' + fieldsAssociations[id]).val(\$(this).val());\n } else {\n \$('#' + getKeyByValue(fieldsAssociations, id)).val(\$(this).val());\n }\n\n if (\$('#inventory_manage_stock').length) {\n fireEvent(\$('#inventory_manage_stock').get(0), 'change');\n }\n };\n //Get key by value from object\n var getKeyByValue = function(object, value) {\n var returnVal = false;\n \$.each(object, function(objKey, objValue){\n if (value === objValue) {\n returnVal = objKey;\n }\n });\n return returnVal;\n };\n \$.each(fieldsAssociations, function(generalTabField, advancedTabField) {\n \$('#' + generalTabField + ', #' + advancedTabField)\n .bind('focus blur change keyup click', filler)\n .bind('keyup change blur', disabler);\n filler.call(\$('#' + generalTabField));\n filler.call(\$('#' + advancedTabField));\n });\n disabler();\n });\n </script>\n "; // @codingStandardsIgnoreEnd } } diff --git a/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php b/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php index 5402467cb76..c5962223476 100644 --- a/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php +++ b/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php @@ -26,9 +26,9 @@ namespace Magento\CatalogRule\Pricing\Price; -use Magento\Catalog\Pricing\Price\RegularPrice; +use Magento\Framework\Pricing\Price\AbstractPrice; use Magento\Framework\Pricing\Adjustment\Calculator; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Catalog\Model\Product; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; use Magento\Store\Model\StoreManager; use Magento\Customer\Model\Session; @@ -37,17 +37,12 @@ use Magento\CatalogRule\Model\Resource\RuleFactory; /** * Class CatalogRulePrice */ -class CatalogRulePrice extends RegularPrice +class CatalogRulePrice extends AbstractPrice { /** * Price type identifier string */ - const PRICE_TYPE = 'catalog_rule_price'; - - /** - * @var string - */ - protected $priceType = self::PRICE_TYPE; + const PRICE_CODE = 'catalog_rule_price'; /** * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface @@ -70,7 +65,7 @@ class CatalogRulePrice extends RegularPrice protected $resourceRuleFactory; /** - * @param SaleableInterface $salableItem + * @param Product $saleableItem * @param float $quantity * @param Calculator $calculator * @param TimezoneInterface $dateTime @@ -79,7 +74,7 @@ class CatalogRulePrice extends RegularPrice * @param RuleFactory $catalogRuleResourceFactory */ public function __construct( - SaleableInterface $salableItem, + Product $saleableItem, $quantity, Calculator $calculator, TimezoneInterface $dateTime, @@ -87,7 +82,7 @@ class CatalogRulePrice extends RegularPrice Session $customerSession, RuleFactory $catalogRuleResourceFactory ) { - parent::__construct($salableItem, $quantity, $calculator); + parent::__construct($saleableItem, $quantity, $calculator); $this->dateTime = $dateTime; $this->storeManager = $storeManager; $this->customerSession = $customerSession; @@ -107,7 +102,7 @@ class CatalogRulePrice extends RegularPrice $this->dateTime->scopeTimeStamp($this->storeManager->getStore()->getId()), $this->storeManager->getStore()->getWebsiteId(), $this->customerSession->getCustomerGroupId(), - $this->salableItem->getId() + $this->product->getId() ); $this->value = $this->value ? floatval($this->value) : false; } diff --git a/app/code/Magento/CatalogRule/etc/di.xml b/app/code/Magento/CatalogRule/etc/di.xml index 3f2ccf312d1..8f8e328c3f4 100644 --- a/app/code/Magento/CatalogRule/etc/di.xml +++ b/app/code/Magento/CatalogRule/etc/di.xml @@ -51,14 +51,13 @@ </argument> </arguments> </type> - <type name="Magento\Framework\Pricing\PriceComposite"> + + <virtualType name="Magento\Catalog\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> <arguments> - <argument name="metadata" xsi:type="array"> - <item name="catalog_rule_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\CatalogRule\Pricing\Price\CatalogRulePrice</item> - <item name="include_in_base_price" xsi:type="boolean">true</item> - </item> + <argument name="prices" xsi:type="array"> + <item name="catalog_rule_price" xsi:type="string">Magento\CatalogRule\Pricing\Price\CatalogRulePrice</item> </argument> </arguments> - </type> + </virtualType> + </config> diff --git a/app/code/Magento/CatalogSearch/view/frontend/advanced/form.phtml b/app/code/Magento/CatalogSearch/view/frontend/advanced/form.phtml index 723d68d43d7..7e9961976ea 100644 --- a/app/code/Magento/CatalogSearch/view/frontend/advanced/form.phtml +++ b/app/code/Magento/CatalogSearch/view/frontend/advanced/form.phtml @@ -149,27 +149,20 @@ <script type="text/javascript"> //<![CDATA[ (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#form-validate').validation({ - errorPlacement: function (error, element) { - var parent = element.parent(); - if (parent.hasClass('range')) { - parent.find(this.errorElement + '.' + this.errorClass).remove().end().append(error); - } else { - error.insertAfter(element); - } - }, - messages: { - 'price[to]': {'greater-than-equals-to': 'Please enter a valid price range.'}, - 'price[from]': {'less-than-equals-to': 'Please enter a valid price range.'} - } - }); - }); + $('#form-validate').mage('validation', { + errorPlacement: function (error, element) { + var parent = element.parent(); + if (parent.hasClass('range')) { + parent.find(this.errorElement + '.' + this.errorClass).remove().end().append(error); + } else { + error.insertAfter(element); + } + }, + messages: { + 'price[to]': {'greater-than-equals-to': 'Please enter a valid price range.'}, + 'price[from]': {'less-than-equals-to': 'Please enter a valid price range.'} + } + }); })(jQuery); //]]> </script> diff --git a/app/code/Magento/CatalogSearch/view/frontend/form.mini.phtml b/app/code/Magento/CatalogSearch/view/frontend/form.mini.phtml index 105c679460b..9079ef2bcdb 100644 --- a/app/code/Magento/CatalogSearch/view/frontend/form.mini.phtml +++ b/app/code/Magento/CatalogSearch/view/frontend/form.mini.phtml @@ -35,6 +35,11 @@ $helper = $this->helper('Magento\CatalogSearch\Helper\Data'); <label class="label" for="search"><span><?php echo __('Search'); ?></span></label> <div class="control"> <input id="search" + data-mage-init='{"catalogSearch":{ + "formSelector":"#search_mini_form", + "url":"<?php echo $helper->getSuggestUrl() ?>", + "destinationSelector":"#search_autocomplete"} + }' type="text" name="<?php echo $helper->getQueryParamName() ?>" value="<?php echo $helper->getEscapedQueryText() ?>" @@ -56,20 +61,6 @@ $helper = $this->helper('Magento\CatalogSearch\Helper\Data'); <span><?php echo __('Search'); ?></span> </button> </div> - <script type="text/javascript"> - //<![CDATA[ - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/handlebars/handlebars-v1.3.0.js')?>"); - head.js("<?php echo $this->getViewFileUrl('Magento_CatalogSearch::form-mini.js')?>", function() { - $('#search').catalogSearch({ - formSelector: '#search_mini_form', - url: '<?php echo $helper->getSuggestUrl() ?>', - destinationSelector: '#search_autocomplete' - }); - }); - })(jQuery); - //]]> - </script> </form> </div> </div> diff --git a/app/code/Magento/Checkout/Block/Cart/Crosssell.php b/app/code/Magento/Checkout/Block/Cart/Crosssell.php index 83d47f857f3..e5331dd89e1 100644 --- a/app/code/Magento/Checkout/Block/Cart/Crosssell.php +++ b/app/code/Magento/Checkout/Block/Cart/Crosssell.php @@ -74,7 +74,8 @@ class Crosssell extends \Magento\Catalog\Block\Product\AbstractProduct * @param \Magento\Catalog\Model\Product\LinkFactory $productLinkFactory * @param \Magento\Sales\Model\Quote\Item\RelatedProducts $itemRelationsList * @param array $data - * @param array $priceBlockTypes + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -83,8 +84,7 @@ class Crosssell extends \Magento\Catalog\Block\Product\AbstractProduct \Magento\CatalogInventory\Model\Stock $stock, \Magento\Catalog\Model\Product\LinkFactory $productLinkFactory, \Magento\Sales\Model\Quote\Item\RelatedProducts $itemRelationsList, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_checkoutSession = $checkoutSession; $this->_productVisibility = $productVisibility; @@ -93,8 +93,7 @@ class Crosssell extends \Magento\Catalog\Block\Product\AbstractProduct $this->_itemRelationsList = $itemRelationsList; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } diff --git a/app/code/Magento/Checkout/Block/Cart/Item/Renderer.php b/app/code/Magento/Checkout/Block/Cart/Item/Renderer.php index 176af19625f..b879de34b9e 100644 --- a/app/code/Magento/Checkout/Block/Cart/Item/Renderer.php +++ b/app/code/Magento/Checkout/Block/Cart/Item/Renderer.php @@ -26,6 +26,7 @@ namespace Magento\Checkout\Block\Cart\Item; use Magento\Sales\Model\Quote\Item; +use Magento\Catalog\Pricing\Price\ConfiguredPriceInterface; /** * Shopping cart item render block @@ -454,23 +455,6 @@ class Renderer extends \Magento\Framework\View\Element\Template implements \Mage return $this->getLayout()->getBlock('additional.product.info'); } - /** - * Get html for MAP product enabled - * - * @param Item $item - * @return string - */ - public function getMsrpHtml($item) - { - return $this->getLayout()->createBlock( - 'Magento\Catalog\Block\Product\Price' - )->setTemplate( - 'product/price_msrp_item.phtml' - )->setProduct( - $item->getProduct() - )->toHtml(); - } - /** * Set qty mode to be strict or not * @@ -507,4 +491,39 @@ class Renderer extends \Magento\Framework\View\Element\Template implements \Mage } return array(); } + + /** + * Get product price formatted with html (final price, special price, mrp price) + * + * @param \Magento\Catalog\Model\Product $product + * @return string + */ + public function getProductPriceHtml(\Magento\Catalog\Model\Product $product) + { + $priceRender = $this->getPriceRender(); + $priceRender->setItem($this->getItem()); + + $price = ''; + if ($priceRender) { + $price = $priceRender->render( + ConfiguredPriceInterface::CONFIGURED_PRICE_CODE, + $product, + [ + 'include_container' => true, + 'display_minimal_price' => true, + 'zone' => \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST + ] + ); + } + + return $price; + } + + /** + * @return \Magento\Framework\Pricing\Render + */ + protected function getPriceRender() + { + return $this->getLayout()->getBlock('product.price.render.default'); + } } diff --git a/app/code/Magento/Checkout/view/frontend/cart/coupon.phtml b/app/code/Magento/Checkout/view/frontend/cart/coupon.phtml index 624011ec06b..9142a9bd932 100644 --- a/app/code/Magento/Checkout/view/frontend/cart/coupon.phtml +++ b/app/code/Magento/Checkout/view/frontend/cart/coupon.phtml @@ -26,7 +26,13 @@ <div class="block discount"> <div class="title"><strong><?php echo __('Discount Codes') ?></strong></div> <div class="content"> - <form id="discount-coupon-form" action="<?php echo $this->getUrl('checkout/cart/couponPost') ?>" method="post"> + <form id="discount-coupon-form" + action="<?php echo $this->getUrl('checkout/cart/couponPost') ?>" + method="post" + data-mage-init='{"discountCode":{"couponCodeSelector": "#coupon_code", + "removeCouponSelector": "#remove-coupon", + "applyButton": "button.action.apply", + "cancelButton": "button.action.cancel"}}'> <fieldset class="fieldset coupon<?php strlen($this->getCouponCode()) ? ' applied' : ''?>"> <input type="hidden" name="remove" id="remove-coupon" value="0" /> <div class="field"> @@ -50,21 +56,5 @@ </div> </fieldset> </form> - <script type="text/javascript"> - //<![CDATA[ - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/discount-codes.js')?>", function() { - $('#discount-coupon-form').discountCode({ - couponCodeSelector: '#coupon_code', removeCouponSelector: '#remove-coupon', - applyButton: 'button.action.apply', cancelButton: 'button.action.cancel' - }); - }); - })(jQuery); - //]]> - </script> </div> </div> diff --git a/app/code/Magento/Checkout/view/frontend/cart/form.phtml b/app/code/Magento/Checkout/view/frontend/cart/form.phtml index 354ce634259..20615ea4ab8 100644 --- a/app/code/Magento/Checkout/view/frontend/cart/form.phtml +++ b/app/code/Magento/Checkout/view/frontend/cart/form.phtml @@ -27,9 +27,15 @@ <?php $mergedCells = ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices() ? 2 : 1); ?> <div class="cart table wrapper<?php echo $mergedCells == 2 ? ' detailed' : ''; ?>"> <?php echo $this->getChildHtml('form_before') ?> - <form action="<?php echo $this->getUrl('checkout/cart/updatePost') ?>" method="post" id="form-validate" > + <form action="<?php echo $this->getUrl('checkout/cart/updatePost') ?>" + method="post" + id="form-validate" + data-mage-init='{"validation":{}}'> <?php echo $this->getBlockHtml('formkey'); ?> - <table id="shopping-cart-table" class="cart items data"> + <table id="shopping-cart-table" + class="cart items data" + data-mage-init='{"shoppingCart":{"emptyCartButton": "action.clear", + "updateCartActionContainer": "#update_cart_action_container"}}'> <caption><?php echo __('Shopping Cart Items') ?></caption> <thead> <tr> @@ -66,37 +72,14 @@ <!--[if lt IE 8]> <input type="hidden" value="" id="update_cart_action_container" /> <![endif]--> - <script type="text/javascript"> - //<![CDATA[ - (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Checkout::js/shopping-cart.js')?>", - function() { - // Internet Explorer (lt 8) does not support value attribute in button elements - $('#shopping-cart-table').shoppingCart({ - emptyCartButton: 'action.clear', - updateCartActionContainer: '#update_cart_action_container' - }); - }); - })(jQuery); - //]]> - </script> </div> </form> <?php echo $this->getChildHtml('shopping.cart.table.after'); ?> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('mage/sticky.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#form-validate').validation(); - $('.cart.summary').sticky({ - container: '.cart.container' - }); - }); + $('.cart.summary').mage('sticky', { + container: '.cart.container' + }); })(jQuery) </script> </div> diff --git a/app/code/Magento/Checkout/view/frontend/cart/item/configure/updatecart.phtml b/app/code/Magento/Checkout/view/frontend/cart/item/configure/updatecart.phtml index 04d39084cbb..d52b6765340 100644 --- a/app/code/Magento/Checkout/view/frontend/cart/item/configure/updatecart.phtml +++ b/app/code/Magento/Checkout/view/frontend/cart/item/configure/updatecart.phtml @@ -45,16 +45,12 @@ <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", function () { - $('#product_addtocart_form').addToCart({ - cartButtonId: "#product-updatecart-button", - cartForm: "#product_addtocart_form" - }).validation(); - }); + var addtocartForm = $('#product_addtocart_form'); + addtocartForm.mage('validation'); + addtocartForm.mage('addToCart', { + cartButtonId: "#product-updatecart-button", + cartForm: "#product_addtocart_form" + }); })(jQuery); </script> <?php endif; ?> diff --git a/app/code/Magento/Checkout/view/frontend/cart/item/default.phtml b/app/code/Magento/Checkout/view/frontend/cart/item/default.phtml index 1139cd4e953..195c892d7a2 100644 --- a/app/code/Magento/Checkout/view/frontend/cart/item/default.phtml +++ b/app/code/Magento/Checkout/view/frontend/cart/item/default.phtml @@ -82,22 +82,16 @@ $canApplyMsrp = $this->helper('Magento\Catalog\Helper\Data')->canApplyMsrp($_ite <span class="pricing msrp"> <span class="msrp notice"><?php echo __('See price before order confirmation.'); ?></span> <?php $helpLinkId = 'cart-msrp-help-' . $_item->getId(); ?> - <a id="<?php echo $helpLinkId ?>" href="#" class="action help map"><span><?php echo __("What's this?"); ?></span></a> <?php $_product = $_item->getProduct(); ?> - <script type="text/javascript"> - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", function () { - $('#<?php echo $helpLinkId ?>').addToCart({ - popupId: "#<?php echo $helpLinkId ?>", - productName: '<?php echo $_product->getName() ?>', - realPrice: '<?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?>', - msrpPrice: '<?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getMsrp(),true,true) ?>', - closeButtonId: '#map-popup-close', - showAddToCart: false - }); - }); - })(jQuery); - </script> + <a href="#" + class="action help map" + id="<?php echo($helpLinkId);?>" + data-mage-init='{"addToCart":{"popupId": "#<?php echo($helpLinkId);?>", + "productName": "<?php echo $_product->getName() ?>", + "realPrice": "<?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?>", + "msrpPrice": "<?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getMsrp(),true,true) ?>", + "showAddToCart": false}}'><span><?php echo __("What's this?"); ?></span> + </a> </span> <?php $cols++; ?> </td> diff --git a/app/code/Magento/Checkout/view/frontend/cart/minicart.phtml b/app/code/Magento/Checkout/view/frontend/cart/minicart.phtml index 52c0f599e47..de73c20e6d4 100644 --- a/app/code/Magento/Checkout/view/frontend/cart/minicart.phtml +++ b/app/code/Magento/Checkout/view/frontend/cart/minicart.phtml @@ -113,14 +113,12 @@ <?php endif; ?> <script type="text/javascript"> (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Checkout::js/sidebar.js') ?>", function() { - $('[data-block="minicart"]').sidebar({ - checkoutUrl: '<?php echo $this->getCheckoutUrl();?>', - checkoutButton: '#top-cart-btn-checkout', - removeButton: '#mini-cart a.action.delete', - confirmMessage: '<?php echo __('Are you sure you would like to remove this item from the shopping cart?') ?>' - }); - }); + $('[data-block="minicart"]').mage('sidebar', { + checkoutUrl: '<?php echo $this->getCheckoutUrl();?>', + checkoutButton: '#top-cart-btn-checkout', + removeButton: '#mini-cart a.action.delete', + confirmMessage: '<?php echo __('Are you sure you would like to remove this item from the shopping cart?') ?>' + }); })(jQuery); </script> <?php if ($this->getInList()): ?> diff --git a/app/code/Magento/Checkout/view/frontend/cart/shipping.phtml b/app/code/Magento/Checkout/view/frontend/cart/shipping.phtml index c55aab2cde4..41d28883d1f 100644 --- a/app/code/Magento/Checkout/view/frontend/cart/shipping.phtml +++ b/app/code/Magento/Checkout/view/frontend/cart/shipping.phtml @@ -70,24 +70,18 @@ </form> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", - function() { - $('#country').regionUpdater({ - optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, - regionListId: '#region_id', - regionInputId: '#region', - postcodeId: '#postcode', - form: $('#shipping-zip-form').validation(), - regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - defaultRegion: "<?php echo $this->getEstimateRegionId() ?>", - countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> - }); - }); + var $form = $('#shipping-zip-form'); + $form.mage('validation'); + $('#country').mage('regionUpdater', { + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#postcode', + form: $form, + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getEstimateRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); })(jQuery); </script> <?php if (($_shippingRateGroups = $this->getEstimateRates())): ?> diff --git a/app/code/Magento/Checkout/view/frontend/js/components.phtml b/app/code/Magento/Checkout/view/frontend/js/components.phtml index 107b5ea7042..9ab2c068b32 100644 --- a/app/code/Magento/Checkout/view/frontend/js/components.phtml +++ b/app/code/Magento/Checkout/view/frontend/js/components.phtml @@ -36,8 +36,39 @@ ], dropdownDialog: [ '<?php echo $this->getViewFileUrl('mage/dropdown.js') ?>' + ], + addToCart: [ + '<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>' + ], + checkoutBalance: [ + '<?php echo $this->getViewFileUrl('Magento_Customer::js/checkout-balance.js')?>' + ], + shoppingCart: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/shopping-cart.js') ?>' + ], + regionUpdater: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>' + ], + creditCardType: [ + '<?php echo $this->getViewFileUrl('Magento_Payment::cc-type.js') ?>' + ], + opcheckout: [ + '<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>', + '<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>', + '<?php echo $this->getViewFileUrl('mage/validation.js')?>', + '<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>', + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/opcheckout.js') ?>' + ], + accordion: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/accordion.js') ?>' + ], + sidebar: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/sidebar.js') ?>' + ], + payment: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/payment.js') ?>' ] }); })(jQuery); </script> -<?php echo $this->getChildHtml() ?> \ No newline at end of file +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_configure.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_configure.xml index ad6af5571d9..c8c43a8b122 100644 --- a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_configure.xml +++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_configure.xml @@ -25,6 +25,9 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="catalog_product_view"/> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="checkout_cart_configure_head_components" template="Magento_Checkout::js/components.phtml"/> + </referenceBlock> <referenceBlock name="product.info"> <block class="Magento\Checkout\Block\Cart\Item\Configure" name="checkout.cart.item.configure.block"/> </referenceBlock> diff --git a/app/code/Magento/Checkout/view/frontend/onepage.phtml b/app/code/Magento/Checkout/view/frontend/onepage.phtml index de7cbe0c5d8..65218676f36 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage.phtml @@ -43,26 +43,15 @@ $_paymentBlock = $this->getLayout()->getBlock('checkout.onepage.payment'); </ol> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/opcheckout.js') ?>", - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/accordion.js') ?>", - function() { - $('#checkoutSteps') - .accordion({ - activeSelector: '#opc-<?php echo $this->getActiveStep() ?>' - }) - .opcheckout($.extend({ - checkoutAgreements: '#checkout-agreements', - checkoutProgressContainer: '#checkout-progress-wrapper', - methodDescription: '.items' - }, - <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode($_paymentBlock->getOptions()); ?> - )); - }); + $('#checkoutSteps').mage('accordion', { + 'activeSelector': '#opc-<?php echo $this->getActiveStep() ?>' + }).mage('opcheckout', $.extend({ + 'checkoutAgreements': '#checkout-agreements', + 'checkoutProgressContainer': '#checkout-progress-wrapper', + 'methodDescription': '.items' + }, + <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode($_paymentBlock->getOptions()); ?> + )); })(jQuery); </script> </div> diff --git a/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml b/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml index d50869f77e0..e644c024ac2 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml @@ -207,18 +207,14 @@ </form> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", - function() { - $('#billing\\:country_id').regionUpdater({ - optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, - regionListId: '#billing\\:region_id', - regionInputId: '#billing\\:region', - postcodeId: '#billing\\:postcode', - regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", - countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> - }); - }); + $('#billing\\:country_id').mage('regionUpdater', { + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#billing\\\:region_id', + regionInputId: '#billing\\\:region', + postcodeId: '#billing\\\:postcode', + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); })(jQuery); </script> diff --git a/app/code/Magento/Checkout/view/frontend/onepage/login.phtml b/app/code/Magento/Checkout/view/frontend/onepage/login.phtml index a1ff77c178d..5bc276ca4f4 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage/login.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage/login.phtml @@ -35,7 +35,11 @@ <div class="block customer login"> <div class="title"><strong><?php echo __('Login') ?></strong></div> <div class="content"> - <form class="form login" id="login-form" action="<?php echo $this->getPostAction() ?>" method="post"> + <form class="form login" + id="login-form" + action="<?php echo $this->getPostAction() ?>" + method="post" + data-mage-init='{"validation":{}}'> <?php echo $this->getBlockHtml('formkey'); ?> <fieldset class="fieldset login" data-hasrequired="<?php echo __('* Required Fields') ?>"> <p class="field note"><?php echo __('Already registered?') ?> <?php echo __('Please log in below:') ?></p> @@ -66,18 +70,6 @@ </fieldset> </form> </div> - <script type="text/javascript"> - (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#login-form').validation(); - }); - })(jQuery); - </script> </div> <?php if ( $this->isAllowedGuestCheckout() || $this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> <div class="block guest"> @@ -139,16 +131,3 @@ </div> <?php endif; ?> </div> -<script type="text/javascript"> - (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#login-form').validation(); - } - )} - )(jQuery); -</script> diff --git a/app/code/Magento/Checkout/view/frontend/onepage/shipping.phtml b/app/code/Magento/Checkout/view/frontend/onepage/shipping.phtml index 9c0fa6fd2be..a078a53ab9b 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage/shipping.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage/shipping.phtml @@ -129,18 +129,14 @@ </form> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", - function() { - $('#shipping\\:country_id').regionUpdater({ - optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, - regionListId: '#shipping\\:region_id', - regionInputId: '#shipping\\:region', - postcodeId: '#shipping\\:postcode', - regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", - countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> - }); - }); + $('#shipping\\:country_id').mage('regionUpdater', { + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#shipping\\\:region_id', + regionInputId: '#shipping\\\:region', + postcodeId: '#shipping\\\:postcode', + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); })(jQuery); </script> diff --git a/app/code/Magento/Cms/data/cms_setup/data-install-1.6.0.0.php b/app/code/Magento/Cms/data/cms_setup/data-install-1.6.0.0.php index 82b65aef513..539a5adc9d9 100644 --- a/app/code/Magento/Cms/data/cms_setup/data-install-1.6.0.0.php +++ b/app/code/Magento/Cms/data/cms_setup/data-install-1.6.0.0.php @@ -63,7 +63,7 @@ $cmsPages = array( 'root_template' => 'two_columns_right', 'identifier' => 'about-magento-demo-store', 'content_heading' => 'About Magento Store', - 'content' => "<div class=\"col3-set\">\r\n<div class=\"col-1\"><p><a href=\"http://www.magento.com/\"><img src=\"{{view url='Magento_Cms::images/about_us_img.jpg'}}\" title=\"Varien\" alt=\"Varien\" /></a></p><p style=\"line-height:1.2em;\"><small>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede.</small></p>\r\n<p style=\"color:#888; font:1.2em/1.4em georgia, serif;\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta.</p></div>\r\n<div class=\"col-2\">\r\n<p><strong style=\"color:#de036f;\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit.</strong></p>\r\n<p>Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper. Phasellus id massa. Pellentesque nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc augue. Aenean sed justo non leo vehicula laoreet. Praesent ipsum libero, auctor ac, tempus nec, tempor nec, justo. </p>\r\n<p>Maecenas ullamcorper, odio vel tempus egestas, dui orci faucibus orci, sit amet aliquet lectus dolor et quam. Pellentesque consequat luctus purus. Nunc et risus. Etiam a nibh. Phasellus dignissim metus eget nisi. Vestibulum sapien dolor, aliquet nec, porta ac, malesuada a, libero. Praesent feugiat purus eget est. Nulla facilisi. Vestibulum tincidunt sapien eu velit. Mauris purus. Maecenas eget mauris eu orci accumsan feugiat. Pellentesque eget velit. Nunc tincidunt.</p></div>\r\n<div class=\"col-3\">\r\n<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper </p>\r\n<p><strong style=\"color:#de036f;\">Maecenas ullamcorper, odio vel tempus egestas, dui orci faucibus orci, sit amet aliquet lectus dolor et quam. Pellentesque consequat luctus purus.</strong></p>\r\n<p>Nunc et risus. Etiam a nibh. Phasellus dignissim metus eget nisi.</p>\r\n<div class=\"divider\"></div>\r\n<p>To all of you, from all of us at Magento Store - Thank you and Happy eCommerce!</p>\r\n<p style=\"line-height:1.2em;\"><strong style=\"font:italic 2em Georgia, serif;\">John Doe</strong><br /><small>Some important guy</small></p></div>\r\n</div>", + 'content' => "<div class=\"col3-set\">\r\n<div class=\"col-1\"><p><a href=\"http://www.magento.com/\"><img src=\"{{view url='Magento_Cms::images/about_us_img.jpg' area=frontend}}\" title=\"Varien\" alt=\"Varien\" /></a></p><p style=\"line-height:1.2em;\"><small>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede.</small></p>\r\n<p style=\"color:#888; font:1.2em/1.4em georgia, serif;\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta.</p></div>\r\n<div class=\"col-2\">\r\n<p><strong style=\"color:#de036f;\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit.</strong></p>\r\n<p>Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper. Phasellus id massa. Pellentesque nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc augue. Aenean sed justo non leo vehicula laoreet. Praesent ipsum libero, auctor ac, tempus nec, tempor nec, justo. </p>\r\n<p>Maecenas ullamcorper, odio vel tempus egestas, dui orci faucibus orci, sit amet aliquet lectus dolor et quam. Pellentesque consequat luctus purus. Nunc et risus. Etiam a nibh. Phasellus dignissim metus eget nisi. Vestibulum sapien dolor, aliquet nec, porta ac, malesuada a, libero. Praesent feugiat purus eget est. Nulla facilisi. Vestibulum tincidunt sapien eu velit. Mauris purus. Maecenas eget mauris eu orci accumsan feugiat. Pellentesque eget velit. Nunc tincidunt.</p></div>\r\n<div class=\"col-3\">\r\n<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper </p>\r\n<p><strong style=\"color:#de036f;\">Maecenas ullamcorper, odio vel tempus egestas, dui orci faucibus orci, sit amet aliquet lectus dolor et quam. Pellentesque consequat luctus purus.</strong></p>\r\n<p>Nunc et risus. Etiam a nibh. Phasellus dignissim metus eget nisi.</p>\r\n<div class=\"divider\"></div>\r\n<p>To all of you, from all of us at Magento Store - Thank you and Happy eCommerce!</p>\r\n<p style=\"line-height:1.2em;\"><strong style=\"font:italic 2em Georgia, serif;\">John Doe</strong><br /><small>Some important guy</small></p></div>\r\n</div>", 'is_active' => 1, 'stores' => array(0), 'sort_order' => 0 @@ -83,7 +83,7 @@ $cmsPages = array( 'root_template' => 'one_column', 'identifier' => 'enable-cookies', 'content_heading' => 'What are Cookies?', - 'content' => "<div class=\"message notice\">\r\n <div>Please enable cookies in your web browser to continue.</div>\r\n </div>\r\n <p>Cookies are short pieces of data that are sent to your computer when you visit a website. On later visits, this data is then returned to that website. Cookies allow us to recognize you automatically whenever you visit our site so that we can personalize your experience and provide you with better service. We also use cookies (and similar browser data, such as Flash cookies) for fraud prevention and other purposes. If your web browser is set to refuse cookies from our website, you will not be able to complete a purchase or take advantage of certain features of our website, such as storing items in your Shopping Cart or receiving personalized recommendations. As a result, we strongly encourage you to configure your web browser to accept cookies from our website.</p>\r\n <h2 class=\"subtitle\">Enabling Cookies</h2>\r\n <ul class=\"disc\">\r\n <li><a href=\"#ie7\">Internet Explorer 7.x</a></li>\r\n <li><a href=\"#ie6\">Internet Explorer 6.x</a></li>\r\n <li><a href=\"#firefox\">Mozilla/Firefox</a></li>\r\n <li><a href=\"#opera\">Opera 7.x</a></li>\r\n </ul>\r\n <h3><a name=\"ie7\"></a>Internet Explorer 7.x</h3>\r\n <ol>\r\n <li>\r\n <p>Start Internet Explorer</p>\r\n </li>\r\n <li>\r\n <p>Under the <strong>Tools</strong> menu, click <strong>Internet Options</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-1.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click the <strong>Privacy</strong> tab</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-2.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click the <strong>Advanced</strong> button</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-3.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Put a check mark in the box for <strong>Override Automatic Cookie Handling</strong>, put another check mark in the <strong>Always accept session cookies </strong>box</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-4.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click <strong>OK</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-5.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click <strong>OK</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-6.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Restart Internet Explore</p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n <h3><a name=\"ie6\"></a>Internet Explorer 6.x</h3>\r\n <ol>\r\n <li>\r\n <p>Select <strong>Internet Options</strong> from the Tools menu</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie6-1.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Privacy</strong> tab</p>\r\n </li>\r\n <li>\r\n <p>Click the <strong>Default</strong> button (or manually slide the bar down to <strong>Medium</strong>) under <strong>Settings</strong>. Click <strong>OK</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie6-2.gif\"}}\" alt=\"\" /></p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n <h3><a name=\"firefox\"></a>Mozilla/Firefox</h3>\r\n <ol>\r\n <li>\r\n <p>Click on the <strong>Tools</strong>-menu in Mozilla</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Options...</strong> item in the menu - a new window open</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Privacy</strong> selection in the left part of the window. (See image below)</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/firefox.png\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Expand the <strong>Cookies</strong> section</p>\r\n </li>\r\n <li>\r\n <p>Check the <strong>Enable cookies</strong> and <strong>Accept cookies normally</strong> checkboxes</p>\r\n </li>\r\n <li>\r\n <p>Save changes by clicking <strong>Ok</strong>.</p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n <h3><a name=\"opera\"></a>Opera 7.x</h3>\r\n <ol>\r\n <li>\r\n <p>Click on the <strong>Tools</strong> menu in Opera</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Preferences...</strong> item in the menu - a new window open</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Privacy</strong> selection near the bottom left of the window. (See image below)</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/opera.png\"}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>The <strong>Enable cookies</strong> checkbox must be checked, and <strong>Accept all cookies</strong> should be selected in the "<strong>Normal cookies</strong>" drop-down</p>\r\n </li>\r\n <li>\r\n <p>Save changes by clicking <strong>Ok</strong></p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n", + 'content' => "<div class=\"message notice\">\r\n <div>Please enable cookies in your web browser to continue.</div>\r\n </div>\r\n <p>Cookies are short pieces of data that are sent to your computer when you visit a website. On later visits, this data is then returned to that website. Cookies allow us to recognize you automatically whenever you visit our site so that we can personalize your experience and provide you with better service. We also use cookies (and similar browser data, such as Flash cookies) for fraud prevention and other purposes. If your web browser is set to refuse cookies from our website, you will not be able to complete a purchase or take advantage of certain features of our website, such as storing items in your Shopping Cart or receiving personalized recommendations. As a result, we strongly encourage you to configure your web browser to accept cookies from our website.</p>\r\n <h2 class=\"subtitle\">Enabling Cookies</h2>\r\n <ul class=\"disc\">\r\n <li><a href=\"#ie7\">Internet Explorer 7.x</a></li>\r\n <li><a href=\"#ie6\">Internet Explorer 6.x</a></li>\r\n <li><a href=\"#firefox\">Mozilla/Firefox</a></li>\r\n <li><a href=\"#opera\">Opera 7.x</a></li>\r\n </ul>\r\n <h3><a name=\"ie7\"></a>Internet Explorer 7.x</h3>\r\n <ol>\r\n <li>\r\n <p>Start Internet Explorer</p>\r\n </li>\r\n <li>\r\n <p>Under the <strong>Tools</strong> menu, click <strong>Internet Options</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-1.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click the <strong>Privacy</strong> tab</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-2.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click the <strong>Advanced</strong> button</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-3.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Put a check mark in the box for <strong>Override Automatic Cookie Handling</strong>, put another check mark in the <strong>Always accept session cookies </strong>box</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-4.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click <strong>OK</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-5.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click <strong>OK</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie7-6.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Restart Internet Explore</p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n <h3><a name=\"ie6\"></a>Internet Explorer 6.x</h3>\r\n <ol>\r\n <li>\r\n <p>Select <strong>Internet Options</strong> from the Tools menu</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie6-1.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Privacy</strong> tab</p>\r\n </li>\r\n <li>\r\n <p>Click the <strong>Default</strong> button (or manually slide the bar down to <strong>Medium</strong>) under <strong>Settings</strong>. Click <strong>OK</strong></p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/ie6-2.gif\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n <h3><a name=\"firefox\"></a>Mozilla/Firefox</h3>\r\n <ol>\r\n <li>\r\n <p>Click on the <strong>Tools</strong>-menu in Mozilla</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Options...</strong> item in the menu - a new window open</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Privacy</strong> selection in the left part of the window. (See image below)</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/firefox.png\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>Expand the <strong>Cookies</strong> section</p>\r\n </li>\r\n <li>\r\n <p>Check the <strong>Enable cookies</strong> and <strong>Accept cookies normally</strong> checkboxes</p>\r\n </li>\r\n <li>\r\n <p>Save changes by clicking <strong>Ok</strong>.</p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n <h3><a name=\"opera\"></a>Opera 7.x</h3>\r\n <ol>\r\n <li>\r\n <p>Click on the <strong>Tools</strong> menu in Opera</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Preferences...</strong> item in the menu - a new window open</p>\r\n </li>\r\n <li>\r\n <p>Click on the <strong>Privacy</strong> selection near the bottom left of the window. (See image below)</p>\r\n <p><img src=\"{{view url=\"Magento_Cms::images/cookies/opera.png\" area=frontend}}\" alt=\"\" /></p>\r\n </li>\r\n <li>\r\n <p>The <strong>Enable cookies</strong> checkbox must be checked, and <strong>Accept all cookies</strong> should be selected in the "<strong>Normal cookies</strong>" drop-down</p>\r\n </li>\r\n <li>\r\n <p>Save changes by clicking <strong>Ok</strong></p>\r\n </li>\r\n </ol>\r\n <p class=\"a-top\"><a href=\"#top\">Back to Top</a></p>\r\n", 'is_active' => 1, 'stores' => array(0) ) diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php index 812d9aaf2fb..52e90949ac7 100644 --- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php @@ -25,90 +25,58 @@ */ namespace Magento\ConfigurableProduct\Block\Product\View\Type; -use Magento\Catalog\Model\Product\PriceModifierInterface; -use Magento\Customer\Controller\RegistryConstants; -use Magento\Customer\Service\V1\CustomerAccountServiceInterface as CustomerAccountService; - /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView { /** - * Prices + * Catalog product * - * @var array + * @var \Magento\Catalog\Helper\Product */ - protected $_prices = array(); + protected $catalogProduct = null; /** - * Prepared prices + * Prices * * @var array */ - protected $_resPrices = array(); - - /** - * Catalog product - * - * @var \Magento\Catalog\Helper\Product - */ - protected $_catalogProduct = null; + protected $_prices = array(); /** * @var \Magento\Framework\Json\EncoderInterface */ - protected $_jsonEncoder; - - /** - * @var \Magento\Catalog\Helper\Product\Price - */ - protected $priceHelper; + protected $jsonEncoder; /** - * @var CustomerAccountService + * @var \Magento\ConfigurableProduct\Helper\Data $imageHelper */ - protected $_customerAccountService; - - /** - * @var \Magento\Catalog\Model\Product\PriceModifierInterface - */ - protected $priceModifier; + protected $helper; /** * @param \Magento\Catalog\Block\Product\Context $context * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder + * @param \Magento\ConfigurableProduct\Helper\Data $helper * @param \Magento\Catalog\Helper\Product $catalogProduct - * @param \Magento\Catalog\Helper\Product\Price $priceHelper - * @param CustomerAccountService $customerAccountService - * @param \Magento\Catalog\Model\Product\PriceModifierInterface $priceModifier * @param array $data - * @param array $priceBlockTypes - * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Stdlib\ArrayUtils $arrayUtils, \Magento\Framework\Json\EncoderInterface $jsonEncoder, + \Magento\ConfigurableProduct\Helper\Data $helper, \Magento\Catalog\Helper\Product $catalogProduct, - \Magento\Catalog\Helper\Product\Price $priceHelper, - CustomerAccountService $customerAccountService, - PriceModifierInterface $priceModifier, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { - $this->_catalogProduct = $catalogProduct; - $this->_jsonEncoder = $jsonEncoder; - $this->priceHelper = $priceHelper; - $this->priceModifier = $priceModifier; - $this->_customerAccountService = $customerAccountService; + $this->helper = $helper; + $this->jsonEncoder = $jsonEncoder; + $this->catalogProduct = $catalogProduct; parent::__construct( $context, $arrayUtils, - $data, - $priceBlockTypes + $data ); } @@ -150,7 +118,7 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView { if (!$this->hasAllowProducts()) { $products = array(); - $skipSaleableCheck = $this->_catalogProduct->getSkipSaleableCheck(); + $skipSaleableCheck = $this->catalogProduct->getSkipSaleableCheck(); $allProducts = $this->getProduct()->getTypeInstance()->getUsedProducts($this->getProduct(), null); foreach ($allProducts as $product) { if ($product->isSaleable() || $skipSaleableCheck) { @@ -186,230 +154,39 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView * Composes configuration for js * * @return string - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @SuppressWarnings(PHPMD.NPathComplexity) - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getJsonConfig() { - $attributes = array(); - $options = array(); $store = $this->getCurrentStore(); - $taxHelper = $this->_taxData; $currentProduct = $this->getProduct(); - $baseImageUrl = (string)$this->_imageHelper->init($currentProduct, 'image'); - $preConfiguredValues = null; - - $preConfiguredFlag = $currentProduct->hasPreconfiguredValues(); - if ($preConfiguredFlag) { - $preConfiguredValues = $currentProduct->getPreconfiguredValues(); - $defaultValues = array(); - } - - foreach ($this->getAllowProducts() as $product) { - $productId = $product->getId(); - $this->_imageHelper->init($product, 'image'); - - foreach ($this->getAllowAttributes() as $attribute) { - $productAttribute = $attribute->getProductAttribute(); - $productAttributeId = $productAttribute->getId(); - $attributeValue = $product->getData($productAttribute->getAttributeCode()); - if (!isset($options[$productAttributeId])) { - $options[$productAttributeId] = array(); - } - - if (!isset($options[$productAttributeId][$attributeValue])) { - $options[$productAttributeId][$attributeValue] = array(); - } - $options[$productAttributeId][$attributeValue][] = $productId; - - if (!$product->getImage() || $product->getImage() === 'no_selection') { - $options['images'][$productAttributeId][$attributeValue][$productId] = $baseImageUrl; - } else { - $options['images'][$productAttributeId][$attributeValue][$productId] = (string)$this->_imageHelper; - } - } - } - - $this->_resPrices = array($this->_preparePrice($currentProduct->getFinalPrice())); - - foreach ($this->getAllowAttributes() as $attribute) { - $productAttribute = $attribute->getProductAttribute(); - $attributeId = $productAttribute->getId(); - $info = array( - 'id' => $productAttribute->getId(), - 'code' => $productAttribute->getAttributeCode(), - 'label' => $attribute->getLabel(), - 'options' => array() - ); - - $optionPrices = array(); - $prices = $attribute->getPrices(); - if (is_array($prices)) { - foreach ($prices as $value) { - if (!$this->_validateAttributeValue($attributeId, $value, $options)) { - continue; - } - $currentProduct->setConfigurablePrice( - $this->_preparePrice($value['pricing_value'], $value['is_percent']) - ); - $currentProduct->setParentId(true); - $currentProduct->setConfigurablePrice( - $this->priceModifier->modifyPrice($currentProduct->getConfigurablePrice(), $currentProduct) - ); - $configurablePrice = $currentProduct->getConfigurablePrice(); - - if (isset($options[$attributeId][$value['value_index']])) { - $productsIndex = $options[$attributeId][$value['value_index']]; - } else { - $productsIndex = array(); - } - - // @todo resolve issue with weee specifics - $info['options'][] = array( - 'id' => $value['value_index'], - 'label' => $value['label'], - 'price' => $configurablePrice, - 'oldPrice' => $this->_prepareOldPrice($value['pricing_value'], $value['is_percent']), - 'inclTaxPrice' => $currentProduct - ->getPriceInfo() - ->getPrice('final_price') - ->getCustomAmount($configurablePrice, 'weee') - ->getValue(), - 'exclTaxPrice' => $configurablePrice, - 'products' => $productsIndex - ); - $optionPrices[] = $configurablePrice; - } - } - - /** - * Prepare formatted values for options choose - */ - foreach ($optionPrices as $optionPrice) { - foreach ($optionPrices as $additional) { - $this->_preparePrice(abs($additional - $optionPrice)); - } - } - if ($this->_validateAttributeInfo($info)) { - $attributes[$attributeId] = $info; - } - - // Add attribute default value (if set) - if ($preConfiguredFlag) { - $configValue = $preConfiguredValues->getData('super_attribute/' . $attributeId); - if ($configValue) { - $defaultValues[$attributeId] = $configValue; - } - } - } - - - if (is_null($this->priceHelper->getCustomer()->getId()) - && $this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID) - ) { - $customerId = $this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID); - $this->priceHelper->setCustomer($this->_customerAccountService->getCustomer($customerId)); - } - - $_request = $this->priceHelper->getRateRequest(false, false, false); - $_request->setProductClassId($currentProduct->getTaxClassId()); - $defaultTax = $this->priceHelper->getRate($_request); - - $_request = $this->priceHelper->getRateRequest(); - $_request->setProductClassId($currentProduct->getTaxClassId()); - $currentTax = $this->priceHelper->getRate($_request); - $taxConfig = array( - 'includeTax' => $taxHelper->priceIncludesTax(), - 'showIncludeTax' => $taxHelper->displayPriceIncludingTax(), - 'showBothPrices' => $taxHelper->displayBothPrices(), - 'defaultTax' => $defaultTax, - 'currentTax' => $currentTax, - 'inclTaxTitle' => __('Incl. Tax') - ); + /** + * @var \Magento\ConfigurableProduct\Pricing\Price\AttributePrice $attributePrice + */ + $attributePrice = $currentProduct + ->getPriceInfo() + ->getPrice('attribute_price'); + $options = $this->helper->getOptions($currentProduct, $this->getAllowProducts()); + $attributes = $attributePrice->prepareAttributes($options); $config = array( - 'attributes' => $attributes, + 'attributes' => $attributes['priceOptions'], 'template' => str_replace('%s', '#{price}', $store->getCurrentCurrency()->getOutputFormat()), 'basePrice' => $this->_registerJsPrice($this->_convertPrice($currentProduct->getFinalPrice())), 'oldPrice' => $this->_registerJsPrice($this->_convertPrice($currentProduct->getPrice())), 'productId' => $currentProduct->getId(), 'chooseText' => __('Choose an Option...'), - 'taxConfig' => $taxConfig, + 'taxConfig' => $attributePrice->getTaxConfig(), 'images' => $options['images'] ); - if ($preConfiguredFlag && !empty($defaultValues)) { - $config['defaultValues'] = $defaultValues; + if ($currentProduct->hasPreconfiguredValues() && !empty($attributes['defaultValues'])) { + $config['defaultValues'] = $attributes['defaultValues']; } $config = array_merge($config, $this->_getAdditionalConfig()); - return $this->_jsonEncoder->encode($config); - } - - /** - * Validating of super product option value - * - * @param int $attributeId - * @param array $value - * @param array $options - * @return bool - */ - protected function _validateAttributeValue($attributeId, &$value, &$options) - { - if (isset($options[$attributeId][$value['value_index']])) { - return true; - } - - return false; - } - - /** - * Validation of super product option - * - * @param array $info - * @return bool - */ - protected function _validateAttributeInfo(&$info) - { - if (count($info['options']) > 0) { - return true; - } - return false; - } - - /** - * Calculation real price - * - * @param float $price - * @param bool $isPercent - * @return string - */ - protected function _preparePrice($price, $isPercent = false) - { - if ($isPercent && !empty($price)) { - $price = $this->getProduct()->getFinalPrice() * $price / 100; - } - - return $this->_registerJsPrice($this->_convertPrice($price, true)); - } - - /** - * Calculation price before special price - * - * @param float $price - * @param bool $isPercent - * @return string - */ - protected function _prepareOldPrice($price, $isPercent = false) - { - if ($isPercent && !empty($price)) { - $price = $this->getProduct()->getPrice() * $price / 100; - } - - return $this->_registerJsPrice($this->_convertPrice($price, true)); + return $this->jsonEncoder->encode($config); } /** diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php new file mode 100644 index 00000000000..27c228e0752 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php @@ -0,0 +1,91 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\ConfigurableProduct\Helper; + +use \Magento\Catalog\Model\Product; + +/** + * Class Data + * Helper class for getting options + * + * @package Magento\ConfigurableProduct\Helper + */ +class Data +{ + /** + * Catalog Image Helper + * + * @var \Magento\Catalog\Helper\Image + */ + protected $imageHelper; + + /** + * @param \Magento\Catalog\Helper\Image $imageHelper + */ + public function __construct(\Magento\Catalog\Helper\Image $imageHelper) + { + $this->imageHelper = $imageHelper; + } + + /** + * Get Options for Configurable Product Options + * + * @param \Magento\Catalog\Model\Product $currentProduct + * @param array $allowedProducts + * @return array + */ + public function getOptions($currentProduct, $allowedProducts) + { + $options = array(); + $baseImageUrl = (string)$this->imageHelper->init($currentProduct, 'image'); + + foreach ($allowedProducts as $product) { + $productId = $product->getId(); + $image = (string)$this->imageHelper->init($product, 'image'); + + foreach ($this->getAllowAttributes($currentProduct) as $attribute) { + $productAttribute = $attribute->getProductAttribute(); + $productAttributeId = $productAttribute->getId(); + $attributeValue = $product->getData($productAttribute->getAttributeCode()); + + $options[$productAttributeId][$attributeValue][] = $productId; + $options['images'][$productAttributeId][$attributeValue][$productId] = $image ? $image : $baseImageUrl; + } + } + + return $options; + } + + /** + * Get allowed attributes + * + * @param \Magento\Catalog\Model\Product $product + * @return array + */ + public function getAllowAttributes($product) + { + return $product->getTypeInstance()->getConfigurableAttributes($product); + } +} diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePrice.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePrice.php new file mode 100644 index 00000000000..aaae58d7684 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePrice.php @@ -0,0 +1,316 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\ConfigurableProduct\Pricing\Price; + +use Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute; +use Magento\Framework\Pricing\Price\AbstractPrice; +use Magento\ConfigurableProduct\Block\Product\View; +use Magento\Framework\Pricing\Adjustment\CalculatorInterface; +use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\Product\PriceModifierInterface; +use Magento\Framework\Pricing\Amount\AmountInterface; + +/** + * Class PriceOptions + * + * @package Magento\ConfigurableProduct\Block\Product\View\Type + */ +class AttributePrice extends AbstractPrice implements AttributePriceInterface +{ + /** + * Default price type + */ + const PRICE_CODE = 'attribute_price'; + + /** + * Store manager + * + * @var \Magento\Store\Model\StoreManagerInterface + */ + protected $storeManager; + + /** + * @param Product $saleableItem + * @param float $quantity + * @param CalculatorInterface $calculator + * @param PriceModifierInterface $modifier + * @param \Magento\Store\Model\StoreManagerInterface $storeManager + */ + public function __construct( + Product $saleableItem, + $quantity, + CalculatorInterface $calculator, + PriceModifierInterface $modifier, + \Magento\Store\Model\StoreManagerInterface $storeManager + ) { + $this->priceModifier = $modifier; + $this->storeManager = $storeManager; + parent::__construct($saleableItem, $quantity, $calculator); + } + + /** + * Prepare JsonAttributes with Options Prices + * + * @param array $options + * @return array + */ + public function prepareAttributes(array $options = []) + { + $defaultValues = []; + $attributes = []; + $configurableAttributes = $this->product->getTypeInstance()->getConfigurableAttributes($this->product); + foreach ($configurableAttributes as $attribute) { + $productAttribute = $attribute->getProductAttribute(); + $attributeId = $productAttribute->getId(); + $info = [ + 'id' => $attributeId, + 'code' => $productAttribute->getAttributeCode(), + 'label' => $attribute->getLabel(), + 'options' => $this->getPriceOptions($attributeId, $attribute, $options) + ]; + $defaultValues[$attributeId] = $this->getAttributeConfigValue($attributeId); + if ($this->validateAttributeInfo($info)) { + $attributes[$attributeId] = $info; + } + } + return [ + 'priceOptions' => $attributes, + 'defaultValues' => $defaultValues + ]; + } + + /** + * Returns prices for configurable product options + * + * @param int $attributeId + * @param Attribute $attribute + * @param array $options + * @return array + */ + public function getPriceOptions($attributeId, $attribute, array $options = []) + { + $prices = $attribute->getPrices(); + $optionPrices = []; + if (!is_array($prices)) { + return $optionPrices; + } + + foreach ($prices as $value) { + $optionValueModified = $this->getOptionValueModified($value); + $optionValueAmount = $this->getOptionValueAmount($value); + + $price = $this->convertPrice($optionValueAmount->getValue()); + $optionPrices[] = [ + 'id' => $value['value_index'], + 'label' => $value['label'], + 'price' => $this->convertDot($optionValueModified->getValue()), + 'oldPrice' => $this->convertDot($price), + 'inclTaxPrice' => $this->convertDot($optionValueModified->getValue()), + 'exclTaxPrice' => $this->convertDot($optionValueModified->getBaseAmount()), + 'products' => $this->getProductsIndex($attributeId, $options, $value) + ]; + } + + return $optionPrices; + } + + /** + * Get Option Value including price rule + * + * @param array $value + * @param string $exclude + * @return AmountInterface + */ + public function getOptionValueModified( + array $value = [], + $exclude = \Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE + ) { + $pricingValue = $this->getPricingValue($value); + $this->product->setParentId(true); + $amount = $this->priceModifier->modifyPrice($pricingValue, $this->product); + + return $this->calculator->getAmount(floatval($amount), $this->product, $exclude); + } + + /** + * Get Option Value Amount with no Catalog Rules + * + * @param array $value + * @param string $exclude + * @return AmountInterface + */ + public function getOptionValueAmount( + array $value = [], + $exclude = \Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE + ) { + $amount = $this->getPricingValue($value); + + return $this->calculator->getAmount(floatval($amount), $this->product, $exclude); + } + + /** + * Prepare percent price value + * + * @param array $value + * @return float + */ + protected function preparePrice(array $value = []) + { + return $this->product + ->getPriceInfo() + ->getPrice(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE) + ->getValue() * $value['pricing_value'] / 100; + } + + /** + * Get value from array + * + * @param array $value + * @return float + */ + protected function getPricingValue(array $value = []) + { + if ($value['is_percent'] && !empty($value['pricing_value'])) { + return $this->preparePrice($value); + } else { + return $value['pricing_value']; + } + } + + /** + * Get Products Index + * + * @param int $attributeId + * @param array $options + * @param array $value + * @return array + */ + protected function getProductsIndex($attributeId, array $options = [], array $value = []) + { + if (isset($options[$attributeId][$value['value_index']])) { + return $options[$attributeId][$value['value_index']]; + } else { + return []; + } + } + + /** + * @param int $attributeId + * @return mixed|null + */ + protected function getAttributeConfigValue($attributeId) + { + if ($this->product->hasPreconfiguredValues()) { + return $this->product->getPreconfiguredValues()->getData('super_attribute/' . $attributeId); + } + } + + /** + * Validation of super product option + * + * @param array $info + * @return bool + */ + protected function validateAttributeInfo($info) + { + if (count($info['options']) > 0) { + return true; + } + return false; + } + + /** + * Replace ',' on '.' for js + * + * @param float $price + * @return string + */ + protected function convertDot($price) + { + return str_replace(',', '.', $price); + } + + + /** + * Convert price from default currency to current currency + * + * @param float $price + * @param bool $round + * @return float + */ + protected function convertPrice($price, $round = false) + { + if (empty($price)) { + return 0; + } + + $price = $this->storeManager->getStore()->convertPrice($price); + if ($round) { + $price = $this->storeManager->getStore()->roundPrice($price); + } + + return $price; + } + + /** + * Returns tax config for Configurable options + * + * @return array + */ + public function getTaxConfig() + { + $config = $this->prepareAdjustmentConfig(); + unset($config['product']); + return $config; + } + + /** + * Default values for configurable options + * + * @return array + */ + public function prepareAdjustmentConfig() + { + return [ + 'includeTax' => false, + 'showIncludeTax' => false, + 'showBothPrices' => false, + 'defaultTax' => 0, + 'currentTax' => 0, + 'inclTaxTitle' => __('Incl. Tax'), + 'product' => $this->product + ]; + } + + /** + * Get price value + * + * @return float|bool + */ + public function getValue() + { + // TODO: Implement getValue() method. + } +} diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePriceInterface.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePriceInterface.php new file mode 100644 index 00000000000..8834cfe05d0 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/AttributePriceInterface.php @@ -0,0 +1,47 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\ConfigurableProduct\Pricing\Price; + +use Magento\Framework\Pricing\Amount\AmountInterface; + +/** + * Interface CustomOptionPriceInterface for Configurable Product + * + * @package Magento\ConfigurableProduct\Pricing\Price + */ +interface AttributePriceInterface +{ + /** + * @param array $value + * @return AmountInterface + */ + public function getOptionValueAmount(array $value = []); + + /** + * @param array $value + * @return AmountInterface + */ + public function getOptionValueModified(array $value = []); +} diff --git a/app/code/Magento/ConfigurableProduct/etc/di.xml b/app/code/Magento/ConfigurableProduct/etc/di.xml index 0caab03ce06..393226013be 100644 --- a/app/code/Magento/ConfigurableProduct/etc/di.xml +++ b/app/code/Magento/ConfigurableProduct/etc/di.xml @@ -85,4 +85,27 @@ <type name="Magento\Catalog\Model\Product\Type"> <plugin name="configurable_output" type="Magento\ConfigurableProduct\Model\Product\Type\Plugin" /> </type> + <virtualType name="Magento\ConfigurableProduct\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> + <arguments> + <argument name="prices" xsi:type="array"> + <item name="attribute_price" xsi:type="string">Magento\ConfigurableProduct\Pricing\Price\AttributePrice</item> + </argument> + <argument name="target" xsi:type="object">Magento\Catalog\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <virtualType name="Magento\ConfigurableProduct\Pricing\Price\Collection" type="Magento\Framework\Pricing\Price\Collection"> + <arguments> + <argument name="pool" xsi:type="object">Magento\ConfigurableProduct\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <type name="Magento\Framework\Pricing\PriceInfo\Factory"> + <arguments> + <argument name="types" xsi:type="array"> + <item name="configurable" xsi:type="array"> + <item name="infoClass" xsi:type="string">Magento\Framework\Pricing\PriceInfo\Base</item> + <item name="prices" xsi:type="string">Magento\ConfigurableProduct\Pricing\Price\Collection</item> + </item> + </argument> + </arguments> + </type> </config> diff --git a/app/code/Magento/ConfigurableProduct/etc/module.xml b/app/code/Magento/ConfigurableProduct/etc/module.xml index 51b4413c3aa..ae53a990015 100644 --- a/app/code/Magento/ConfigurableProduct/etc/module.xml +++ b/app/code/Magento/ConfigurableProduct/etc/module.xml @@ -47,6 +47,7 @@ <module name="Magento_Customer" /> <module name="Magento_CatalogRule" /> <module name="Magento_Directory" /> + <module name="Magento_Weee" /> </depends> </module> </config> diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/catalog/product/edit/super/matrix.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/catalog/product/edit/super/matrix.phtml index 08cf74a8938..c387a5bbf57 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/catalog/product/edit/super/matrix.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/catalog/product/edit/super/matrix.phtml @@ -270,7 +270,7 @@ jQuery(function ($) { matrix.find('[data-action=upload-image] [name=image]').each(function() { $(this).fileupload({ dataType: 'json', - dropZone: $(this), + dropZone: $(this).closest('[data-role=row]'), acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, done: function (event, data) { if (!data.result) { diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/js/configurable.js index 2c076cbf9b6..9ddd2af22cc 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/js/configurable.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/js/configurable.js @@ -204,26 +204,19 @@ Product.Config.prototype = { getOptionLabel: function(option, price){ var price = parseFloat(price); - if (this.taxConfig.includeTax) { - var tax = price / (100 + this.taxConfig.defaultTax) * this.taxConfig.defaultTax; - var excl = price - tax; - var incl = excl*(1+(this.taxConfig.currentTax/100)); - } else { - var tax = price * (this.taxConfig.currentTax / 100); - var excl = price; - var incl = excl + tax; - } + var includeTax = parseFloat(option.inclTaxPrice); + var excludeTax = parseFloat(option.exclTaxPrice); if (this.taxConfig.showIncludeTax || this.taxConfig.showBothPrices) { - price = incl; + price = includeTax; } else { - price = excl; + price = excludeTax; } var str = option.label; if(price){ if (this.taxConfig.showBothPrices) { - str+= ' ' + this.formatPrice(excl, true) + ' (' + this.formatPrice(price, true) + ' ' + this.taxConfig.inclTaxTitle + ')'; + str+= ' ' + this.formatPrice(excludeTax, true) + ' (' + this.formatPrice(price, true) + ' ' + this.taxConfig.inclTaxTitle + ')'; } else { str+= ' ' + this.formatPrice(price, true); } @@ -273,15 +266,26 @@ Product.Config.prototype = { } var price = 0; var oldPrice = 0; + var inclTaxPrice = 0; + var exclTaxPrice = 0; for(var i=this.settings.length-1;i>=0;i--){ var selected = this.settings[i].options[this.settings[i].selectedIndex]; if(selected.config){ - price += parseFloat(selected.config.price); + price += parseFloat(selected.config.price); oldPrice += parseFloat(selected.config.oldPrice); + inclTaxPrice += parseFloat(selected.config.inclTaxPrice); + exclTaxPrice += parseFloat(selected.config.exclTaxPrice); } } - optionsPrice.changePrice('config', {'price': price, 'oldPrice': oldPrice}); + optionsPrice.changePrice( + 'config', { + 'price': price, + 'oldPrice': oldPrice, + 'inclTaxPrice': inclTaxPrice, + 'exclTaxPrice': exclTaxPrice + } + ); optionsPrice.reload(); return price; diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/product/configurable/stock/disabler.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/product/configurable/stock/disabler.phtml index 57738a3cb06..e822663a39d 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/product/configurable/stock/disabler.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/product/configurable/stock/disabler.phtml @@ -24,7 +24,7 @@ ?> <script type="text/javascript"> (function($) { - $('#product_info_tabs_product-details_content').on('stockbeforedisable', function(e) { + $('[data-tab-panel=product-details]').on('stockbeforedisable', function(e) { if ($('[data-panel=product-variations]').is('.opened')) { return false; } diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/js/components.phtml b/app/code/Magento/ConfigurableProduct/view/frontend/js/components.phtml new file mode 100644 index 00000000000..1127ad43e3c --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/view/frontend/js/components.phtml @@ -0,0 +1,41 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + configurable: [ + '<?php echo $this->getViewFileUrl('jquery/jquery.parsequery.js') ?>', + '<?php echo $this->getViewFileUrl('Magento_ConfigurableProduct::js/configurable.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/js/configurable.js index 04bec6b59b1..9373c759a5a 100644 --- a/app/code/Magento/ConfigurableProduct/view/frontend/js/configurable.js +++ b/app/code/Magento/ConfigurableProduct/view/frontend/js/configurable.js @@ -238,7 +238,7 @@ }); }); - if (galleryElement.length && galleryElement.data('gallery')) { + if (galleryElement.length) { if (result.length === 1) { this.initialGalleryImages = this.initialGalleryImages || galleryElement.gallery('option', 'images'); galleryElement.gallery('option', 'images', result); @@ -345,21 +345,25 @@ */ _getOptionLabel: function(option, price) { price = parseFloat(price); - var tax, incl, excl; + //todo: use taxes from php config + /* if (this.options.taxConfig.includeTax) { tax = price / (100 + this.options.taxConfig.defaultTax) * this.options.taxConfig.defaultTax; - excl = price - tax; - incl = excl * (1 + (this.options.taxConfig.currentTax / 100)); + excludeTax = price - tax; + includeTax = excl * (1 + (this.options.taxConfig.currentTax / 100)); } else { tax = price * (this.options.taxConfig.currentTax / 100); - excl = price; - incl = excl + tax; + excludeTax = price; + includeTax = excl + tax; } - price = (this.options.taxConfig.showIncludeTax || this.options.taxConfig.showBothPrices) ? incl : excl; + */ + var includeTax = option.inclTaxPrice; + var excludeTax = option.exclTaxPrice; + price = (this.options.taxConfig.showIncludeTax || this.options.taxConfig.showBothPrices) ? includeTax : excludeTax; var str = option.label; if (price) { str = (this.options.taxConfig.showBothPrices) ? - str += ' ' + this._formatPrice(excl, true) + ' (' + this._formatPrice(price, true) + ' ' + this.options.taxConfig.inclTaxTitle + ')' : + str += ' ' + this._formatPrice(excludeTax, true) + ' (' + this._formatPrice(price, true) + ' ' + this.options.taxConfig.inclTaxTitle + ')' : str += ' ' + this._formatPrice(price, true); } return str; diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/layout/catalog_product_view_type_configurable.xml b/app/code/Magento/ConfigurableProduct/view/frontend/layout/catalog_product_view_type_configurable.xml index 992f181eef5..1e51e658aae 100644 --- a/app/code/Magento/ConfigurableProduct/view/frontend/layout/catalog_product_view_type_configurable.xml +++ b/app/code/Magento/ConfigurableProduct/view/frontend/layout/catalog_product_view_type_configurable.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="configurableproduct_product_view_head_components" template="Magento_ConfigurableProduct::js/components.phtml"/> + </referenceBlock> <referenceBlock name="root"> <action method="addBodyClass"> <argument name="value" xsi:type="string">type-configurable</argument> diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/product/view/type/options/configurable.phtml b/app/code/Magento/ConfigurableProduct/view/frontend/product/view/type/options/configurable.phtml index 4ac6e31202c..aef2e4f74c3 100644 --- a/app/code/Magento/ConfigurableProduct/view/frontend/product/view/type/options/configurable.phtml +++ b/app/code/Magento/ConfigurableProduct/view/frontend/product/view/type/options/configurable.phtml @@ -46,10 +46,9 @@ $_attributes = $this->decorateArray($this->getAllowAttributes()); <?php endforeach; ?> <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.parsequery.js') ?>", - "<?php echo $this->getViewFileUrl('Magento_ConfigurableProduct::js/configurable.js') ?>", function () { - $('#product_addtocart_form').configurable({"spConfig":<?php echo $this->getJsonConfig() ?>}); - }) + $('#product_addtocart_form').mage('configurable', { + "spConfig":<?php echo $this->getJsonConfig() ?> + }); })(jQuery); </script> <?php endif;?> diff --git a/app/code/Magento/Contact/view/frontend/form.phtml b/app/code/Magento/Contact/view/frontend/form.phtml index e9a8e7369a9..3e9dce45fd0 100644 --- a/app/code/Magento/Contact/view/frontend/form.phtml +++ b/app/code/Magento/Contact/view/frontend/form.phtml @@ -23,7 +23,12 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -<form class="form contact" action="<?php echo $this->getFormAction(); ?>" id="contact-form" method="post" data-hasrequired="<?php echo __('* Required Fields') ?>"> +<form class="form contact" + action="<?php echo $this->getFormAction(); ?>" + id="contact-form" + method="post" + data-hasrequired="<?php echo __('* Required Fields') ?>" + data-mage-init='{"validation":{}}'> <fieldset class="fieldset"> <legend class="legend"><span><?php echo __('Contact Information') ?></span></legend><br /> <div class="field name required"> @@ -61,13 +66,3 @@ </div> </div> </form> -<script type="text/javascript"> - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function() { - $('#contact-form').validation(); - }); - })(jQuery); -</script> diff --git a/app/code/Magento/Core/etc/di.xml b/app/code/Magento/Core/etc/di.xml index c733bf6781d..fe465164a60 100644 --- a/app/code/Magento/Core/etc/di.xml +++ b/app/code/Magento/Core/etc/di.xml @@ -61,7 +61,7 @@ <preference for="Magento\Framework\Url\RouteParamsResolverInterface" type="Magento\Core\Model\Url\RouteParamsResolver" /> <preference for="Magento\Framework\Url\QueryParamsResolverInterface" type="Magento\Framework\Url\QueryParamsResolver" /> <preference for="Magento\Framework\Url\ScopeResolverInterface" type="Magento\Core\Model\Url\ScopeResolver" /> - <preference for="Magento\Framework\Url\SecurityInfoInterface" type="Magento\Core\Model\Url\SecurityInfo" /> + <preference for="Magento\Framework\Url\SecurityInfoInterface" type="Magento\Core\Model\Url\SecurityInfo\Proxy" /> <preference for="Magento\Framework\Mview\ConfigInterface" type="Magento\Framework\Mview\Config" /> <preference for="Magento\Framework\Mview\ViewInterface" type="Magento\Framework\Mview\View" /> <preference for="Magento\Framework\Mview\ProcessorInterface" type="Magento\Framework\Mview\Processor" /> diff --git a/app/code/Magento/Core/view/frontend/require_cookie.phtml b/app/code/Magento/Core/view/frontend/require_cookie.phtml index 13c1fec3d8a..f6054ddb1bf 100644 --- a/app/code/Magento/Core/view/frontend/require_cookie.phtml +++ b/app/code/Magento/Core/view/frontend/require_cookie.phtml @@ -26,9 +26,7 @@ <script type="text/javascript"> //<![CDATA[ (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Core::js/require-cookie.js')?>", function () { - $('body').requireCookie(<?php echo $this->getScriptOptions(); ?>); - }); + $('body').mage('requireCookie', <?php echo $this->getScriptOptions(); ?>); })(jQuery); //]]> </script> \ No newline at end of file diff --git a/app/code/Magento/Cron/Model/Config/Converter/Db.php b/app/code/Magento/Cron/Model/Config/Converter/Db.php index e754e5b1381..744c5dfb5d3 100644 --- a/app/code/Magento/Cron/Model/Config/Converter/Db.php +++ b/app/code/Magento/Cron/Model/Config/Converter/Db.php @@ -38,7 +38,7 @@ class Db implements \Magento\Framework\Config\ConverterInterface */ public function convert($source) { - $jobs = isset($source['crontab']['jobs']) ? $source['crontab']['jobs'] : array(); + $jobs = isset($source['crontab']['default']['jobs']) ? $source['crontab']['default']['jobs'] : array(); if (empty($jobs)) { return $jobs; diff --git a/app/code/Magento/Cron/Model/Config/Converter/Xml.php b/app/code/Magento/Cron/Model/Config/Converter/Xml.php index b6e17982f70..d5f3431935c 100644 --- a/app/code/Magento/Cron/Model/Config/Converter/Xml.php +++ b/app/code/Magento/Cron/Model/Config/Converter/Xml.php @@ -65,6 +65,7 @@ class Xml implements \Magento\Framework\Config\ConverterInterface $config['name'] = $jobName; $config += $this->convertCronConfig($jobConfig); $config += $this->convertCronSchedule($jobConfig); + $config += $this->convertCronConfigPath($jobConfig); $output[$group->getAttribute('id')][$jobName] = $config; } @@ -116,4 +117,27 @@ class Xml implements \Magento\Framework\Config\ConverterInterface return $result; } + + /** + * Convert schedule cron configurations + * + * @param \DOMElement $jobConfig + * @return array + */ + protected function convertCronConfigPath(\DOMElement $jobConfig) + { + $result = array(); + /** @var \DOMText $schedules */ + foreach ($jobConfig->childNodes as $schedules) { + if ($schedules->nodeName == 'config_path') { + if (!empty($schedules->nodeValue)) { + $result['config_path'] = $schedules->nodeValue; + break; + } + } + continue; + } + + return $result; + } } diff --git a/app/code/Magento/Cron/Model/Observer.php b/app/code/Magento/Cron/Model/Observer.php index 8cf2f860fcd..dde3e3164a3 100644 --- a/app/code/Magento/Cron/Model/Observer.php +++ b/app/code/Magento/Cron/Model/Observer.php @@ -321,11 +321,9 @@ class Observer $jobConfig['config_path'], \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); - } elseif (empty($cronExpr) && isset($jobConfig['schedule'])) { + } elseif (isset($jobConfig['schedule'])) { $cronExpr = $jobConfig['schedule']; - } - - if (!$cronExpr) { + } else { continue; } diff --git a/app/code/Magento/Cron/Model/Schedule.php b/app/code/Magento/Cron/Model/Schedule.php index f2f5068fad4..c0cc44aa7dc 100644 --- a/app/code/Magento/Cron/Model/Schedule.php +++ b/app/code/Magento/Cron/Model/Schedule.php @@ -133,22 +133,11 @@ class Schedule extends \Magento\Framework\Model\AbstractModel $d = getdate($this->_date->timestamp($time)); - $match = $this->matchCronExpression( - $e[0], - $d['minutes'] - ) && $this->matchCronExpression( - $e[1], - $d['hours'] - ) && $this->matchCronExpression( - $e[2], - $d['mday'] - ) && $this->matchCronExpression( - $e[3], - $d['mon'] - ) && $this->matchCronExpression( - $e[4], - $d['wday'] - ); + $match = $this->matchCronExpression($e[0], $d['minutes']) + && $this->matchCronExpression($e[1], $d['hours']) + && $this->matchCronExpression($e[2], $d['mday']) + && $this->matchCronExpression($e[3], $d['mon']) + && $this->matchCronExpression($e[4], $d['wday']); if ($match) { $this->setCreatedAt(strftime('%Y-%m-%d %H:%M:%S', time())); diff --git a/app/code/Magento/Cron/etc/crontab.xsd b/app/code/Magento/Cron/etc/crontab.xsd index b940e9df809..3a5aad9f97d 100644 --- a/app/code/Magento/Cron/etc/crontab.xsd +++ b/app/code/Magento/Cron/etc/crontab.xsd @@ -66,6 +66,7 @@ </xs:annotation> <xs:sequence> <xs:element name="schedule" type="scheduleDeclaration" minOccurs="0" maxOccurs="1"/> + <xs:element name="config_path" type="xs:string" minOccurs="0" maxOccurs="1"/> </xs:sequence> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="instance" type="xs:string" use="required"/> diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index.php b/app/code/Magento/Customer/Controller/Adminhtml/Index.php index e3915e946fd..bb26232ad64 100644 --- a/app/code/Magento/Customer/Controller/Adminhtml/Index.php +++ b/app/code/Magento/Customer/Controller/Adminhtml/Index.php @@ -175,11 +175,11 @@ class Index extends \Magento\Backend\App\Action $customer = $this->_objectManager->create('Magento\Customer\Model\Customer'); if ($customerId) { $customer->load($customerId); + $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER_ID, $customerId); } // TODO: Investigate if any piece of code still relies on this; remove if not. $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER, $customer); - $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER_ID, $customerId); return $customerId; } diff --git a/app/code/Magento/Customer/Model/Resource/Group.php b/app/code/Magento/Customer/Model/Resource/Group.php index fa7c1c5085d..4a7ee208266 100644 --- a/app/code/Magento/Customer/Model/Resource/Group.php +++ b/app/code/Magento/Customer/Model/Resource/Group.php @@ -111,7 +111,8 @@ class Group extends \Magento\Framework\Model\Resource\Db\AbstractDb $group->getId() )->load(); foreach ($customerCollection as $customer) { - $customer->load(); + /** @var $customer \Magento\Customer\Model\Customer */ + $customer->load($customer->getId()); $defaultGroupId = $this->_customerData->getDefaultCustomerGroupId($customer->getStoreId()); $customer->setGroupId($defaultGroupId); $customer->save(); diff --git a/app/code/Magento/Customer/view/frontend/address/book.phtml b/app/code/Magento/Customer/view/frontend/address/book.phtml index ef4cf8335b6..c1b2c3f06a8 100644 --- a/app/code/Magento/Customer/view/frontend/address/book.phtml +++ b/app/code/Magento/Customer/view/frontend/address/book.phtml @@ -101,12 +101,10 @@ </div> </div> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Customer::address.js'); ?>", function() { - jQuery('.page.main').address({ - deleteAddress: "li.item a[role='delete-address']", - deleteUrlPrefix: '<?php echo $this->getDeleteUrl() ?>id/', - addAddress: "button[role='add-address']", - addAddressLocation: '<?php echo $this->getAddAddressUrl() ?>' - }); + jQuery('.page.main').mage('address', { + deleteAddress: "li.item a[role='delete-address']", + deleteUrlPrefix: '<?php echo $this->getDeleteUrl() ?>id/', + addAddress: "button[role='add-address']", + addAddressLocation: '<?php echo $this->getAddAddressUrl() ?>' }); </script> diff --git a/app/code/Magento/Customer/view/frontend/address/edit.phtml b/app/code/Magento/Customer/view/frontend/address/edit.phtml index 04fb8940ef1..86680464032 100644 --- a/app/code/Magento/Customer/view/frontend/address/edit.phtml +++ b/app/code/Magento/Customer/view/frontend/address/edit.phtml @@ -147,23 +147,17 @@ </form> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", - function() { - $('#country').regionUpdater({ - optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, - regionListId: '#region_id', - regionInputId: '#region', - postcodeId: '#zip', - form: $('#form-validate').validation(), - regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - defaultRegion: "<?php echo $this->getRegionId() ?>", - countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> - }); - }); + var $form = $('#form-validate'); + $form.mage('validation'); + $('#country').mage('regionUpdater', { + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#zip', + form: $form, + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); })(jQuery); </script> diff --git a/app/code/Magento/Customer/view/frontend/form/confirmation.phtml b/app/code/Magento/Customer/view/frontend/form/confirmation.phtml index 4e7668dc6b0..e384587d611 100644 --- a/app/code/Magento/Customer/view/frontend/form/confirmation.phtml +++ b/app/code/Magento/Customer/view/frontend/form/confirmation.phtml @@ -23,7 +23,7 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -<form action="" method="post" id="form-validate" class="form send confirmation"> +<form action="" method="post" id="form-validate" class="form send confirmation" data-mage-init='{"validation":{}}'> <fieldset class="fieldset" data-hasrequired="<?php echo __('* Required Fields') ?>"> <p class="field note"><?php echo __('Please enter your email below and we will send you the confirmation link for it.') ?></p> <div class="field email required"> @@ -42,15 +42,3 @@ </div> </div> </form> -<script type="text/javascript"> - (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#form-validate').validation(); - }); - })(jQuery); -</script> diff --git a/app/code/Magento/Customer/view/frontend/form/edit.phtml b/app/code/Magento/Customer/view/frontend/form/edit.phtml index fcb8d125af6..3340b7b59ca 100755 --- a/app/code/Magento/Customer/view/frontend/form/edit.phtml +++ b/app/code/Magento/Customer/view/frontend/form/edit.phtml @@ -86,46 +86,36 @@ </form> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - "<?php echo $this->getViewFileUrl('Magento_Customer::set-password.js') ?>", - <?php if ($_dob->isEnabled()): ?> - "<?php echo $this->getViewFileUrl('mage/validation/dob-rule.js') ?>", - <?php endif ?> - function() { - $('#change-password').setPassword({ - currentPasswordId: '#current-password', - passwordId: '#password', - confirmationId: '#confirmation', - passwordContainer: 'fieldset.fieldset.password', - showOnDefault: <?php echo $this->getChangePassword() ? 'true' : 'false' ?> - }); - var dataForm = $('#form-validate'), ignore; - <?php if ($_dob->isEnabled()): ?> - ignore = 'input[id$="full"]'; - <?php endif ?> - dataForm.validation({ - <?php if ($_dob->isEnabled()): ?> - errorPlacement: function(error, element) { - if (element.prop('id').search('full') !== -1) { - var dobElement = $(element).parents('.customer-dob'), - errorClass = error.prop('class'); - error.insertAfter(element.parent()); - dobElement.find('.validate-custom').addClass(errorClass) - .after('<div class="' + errorClass + '"></div>'); - } - else { - error.insertAfter(element); - } - }, - ignore: ':hidden:not(' + ignore + ')' - <?php else: ?> - ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' - <?php endif ?> - }); - }); + $('#change-password').mage('setPassword', { + 'currentPasswordId': '#current-password', + 'passwordId': '#password', + 'confirmationId': '#confirmation', + 'passwordContainer': 'fieldset.fieldset.password', + 'showOnDefault': <?php echo $this->getChangePassword() ? 'true' : 'false' ?> + }); + + var dataForm = $('#form-validate'), ignore; + <?php if ($_dob->isEnabled()): ?> + ignore = 'input[id$="full"]'; + <?php endif ?> + dataForm.mage('validation', { + <?php if ($_dob->isEnabled()): ?> + errorPlacement: function(error, element) { + if (element.prop('id').search('full') !== -1) { + var dobElement = $(element).parents('.customer-dob'), + errorClass = error.prop('class'); + error.insertAfter(element.parent()); + dobElement.find('.validate-custom').addClass(errorClass) + .after('<div class="' + errorClass + '"></div>'); + } + else { + error.insertAfter(element); + } + }, + ignore: ':hidden:not(' + ignore + ')' + <?php else: ?> + ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' + <?php endif ?> + }); })(jQuery); </script> diff --git a/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml b/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml index 81c847ef9d7..6f7af7d6694 100644 --- a/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml +++ b/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml @@ -23,7 +23,11 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -<form class="form password forget" action="<?php echo $this->getUrl('*/*/forgotpasswordpost') ?>" method="post" id="form-validate"> +<form class="form password forget" + action="<?php echo $this->getUrl('*/*/forgotpasswordpost') ?>" + method="post" + id="form-validate" + data-mage-init='{"validation":{}}'> <fieldset class="fieldset" data-hasrequired="<?php echo __('* Required Fields') ?>"> <p class="field note"><?php echo __('Please enter your email address below. You will receive a link to reset your password.'); ?></p> <div class="field email required"> @@ -43,15 +47,3 @@ </div> </div> </form> -<script type="text/javascript"> - (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#form-validate').validation(); - }); - })(jQuery); -</script> diff --git a/app/code/Magento/Customer/view/frontend/form/login.phtml b/app/code/Magento/Customer/view/frontend/form/login.phtml index 3034b236060..6b366317814 100644 --- a/app/code/Magento/Customer/view/frontend/form/login.phtml +++ b/app/code/Magento/Customer/view/frontend/form/login.phtml @@ -36,7 +36,11 @@ <div class="block customer login"> <div class="title"><strong><?php echo __('Registered Customers') ?></strong></div> <div class="content"> - <form class="form login" action="<?php echo $this->getPostActionUrl() ?>" method="post" id="login-form"> + <form class="form login" + action="<?php echo $this->getPostActionUrl() ?>" + method="post" + id="login-form" + data-mage-init='{"validation":{}}'> <?php echo $this->getBlockHtml('formkey'); ?> <fieldset class="fieldset login" data-hasrequired="<?php echo __('* Required Fields') ?>"> <p class="field note"><?php echo __('If you have an account with us, log in using your email address.') ?></p> @@ -60,16 +64,4 @@ </fieldset> </form> </div> - <script type="text/javascript"> - (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#login-form').validation(); - }); - })(jQuery); - </script> </div> diff --git a/app/code/Magento/Customer/view/frontend/form/register.phtml b/app/code/Magento/Customer/view/frontend/form/register.phtml index 1a3510f3447..baff908e24b 100644 --- a/app/code/Magento/Customer/view/frontend/form/register.phtml +++ b/app/code/Magento/Customer/view/frontend/form/register.phtml @@ -175,53 +175,40 @@ </form> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - <?php if ($this->getShowAddressFields()): ?> - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", - <?php endif ?> - <?php if ($_dob->isEnabled()): ?> - "<?php echo $this->getViewFileUrl('mage/validation/dob-rule.js') ?>", - <?php endif ?> - function() { - var dataForm = $('#form-validate'), ignore; - <?php if ($_dob->isEnabled()): ?> - ignore = 'input[id$="full"]'; - <?php endif ?> - dataForm.validation({ - <?php if ($_dob->isEnabled()): ?> - errorPlacement: function(error, element) { - if (element.prop('id').search('full') !== -1) { - var dobElement = $(element).parents('.customer.dob'), - errorClass = error.prop('class'); - error.insertAfter(element.parent()); - dobElement.find('.validate-custom').addClass(errorClass) - .after('<div class="' + errorClass + '"></div>'); - } - else { - error.insertAfter(element); - } - }, - ignore: ':hidden:not(' + ignore + ')' - <?php else: ?> - ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' - <?php endif ?> - }).find('input:text').attr('autocomplete', 'off'); - <?php if ($this->getShowAddressFields()): ?> - $('#country').regionUpdater({ - optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, - regionListId: '#region_id', - regionInputId: '#region', - postcodeId: '#zip', - form: dataForm, - regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - defaultRegion: "<?php echo $this->getFormData()->getRegionId() ?>", - countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> - }); - <?php endif; ?> - }); + var dataForm = $('#form-validate'), ignore; + <?php if ($_dob->isEnabled()): ?> + ignore = 'input[id$="full"]'; + <?php endif ?> + dataForm.mage('validation', { + <?php if ($_dob->isEnabled()): ?> + errorPlacement: function(error, element) { + if (element.prop('id').search('full') !== -1) { + var dobElement = $(element).parents('.customer-dob'), + errorClass = error.prop('class'); + error.insertAfter(element.parent()); + dobElement.find('.validate-custom').addClass(errorClass) + .after('<div class="' + errorClass + '"></div>'); + } + else { + error.insertAfter(element); + } + }, + ignore: ':hidden:not(' + ignore + ')' + <?php else: ?> + ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' + <?php endif ?> + }).find('input:text').attr('autocomplete', 'off'); + <?php if ($this->getShowAddressFields()): ?> + $('#country').mage('regionUpdater', { + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#zip', + form: dataForm, + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getFormData()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + <?php endif; ?> })(jQuery); </script> diff --git a/app/code/Magento/Customer/view/frontend/form/resetforgottenpassword.phtml b/app/code/Magento/Customer/view/frontend/form/resetforgottenpassword.phtml index 362f9b39be3..bfb1f4d9708 100644 --- a/app/code/Magento/Customer/view/frontend/form/resetforgottenpassword.phtml +++ b/app/code/Magento/Customer/view/frontend/form/resetforgottenpassword.phtml @@ -25,7 +25,11 @@ /** @var \Magento\Customer\Block\Account\Resetpassword $this */ ?> -<form action="<?php echo $this->getUrl('*/*/resetpasswordpost', array('_query' => array('id' => $this->getCustomerId(), 'token' => $this->getResetPasswordLinkToken()))); ?>" method="post" id="form-validate" class="form password reset"> +<form action="<?php echo $this->getUrl('*/*/resetpasswordpost', array('_query' => array('id' => $this->getCustomerId(), 'token' => $this->getResetPasswordLinkToken()))); ?>" + method="post" + id="form-validate" + class="form password reset" + data-mage-init='{"validation":{}}'> <fieldset class="fieldset" data-hasrequired="<?php echo __('* Required Fields'); ?>"> <div class="field password required"> <label class="label" for="password"><span><?php echo __('New Password'); ?></span></label> @@ -46,15 +50,3 @@ </div> </div> </form> -<script type="text/javascript"> - (function($) { - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function() { - $('#form-validate').validation(); - }); - })(jQuery); -</script> diff --git a/app/code/Magento/Customer/view/frontend/js/components.phtml b/app/code/Magento/Customer/view/frontend/js/components.phtml new file mode 100644 index 00000000000..8e541cf9582 --- /dev/null +++ b/app/code/Magento/Customer/view/frontend/js/components.phtml @@ -0,0 +1,56 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + validation: [ + '<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>', + '<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>', + '<?php echo $this->getViewFileUrl('mage/validation.js')?>', + '<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>', + '<?php echo $this->getViewFileUrl('mage/validation/dob-rule.js') ?>' + ], + regionUpdater: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>' + ], + requireCookie: [ + '<?php echo $this->getViewFileUrl('Magento_Core::js/require-cookie.js') ?>' + ], + address: [ + '<?php echo $this->getViewFileUrl('Magento_Customer::address.js') ?>' + ], + setPassword: [ + '<?php echo $this->getViewFileUrl('Magento_Customer::set-password.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Customer/view/frontend/layout/customer_account_create.xml b/app/code/Magento/Customer/view/frontend/layout/customer_account_create.xml index 4fc1e653055..ab02ec14615 100644 --- a/app/code/Magento/Customer/view/frontend/layout/customer_account_create.xml +++ b/app/code/Magento/Customer/view/frontend/layout/customer_account_create.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="customer_account_create_head_components" template="Magento_Customer::js/components.phtml"/> + </referenceBlock> <referenceBlock name="root"> <action method="setTemplate"> <argument name="template" xsi:type="string">1column.phtml</argument> diff --git a/app/code/Magento/Customer/view/frontend/layout/customer_account_edit.xml b/app/code/Magento/Customer/view/frontend/layout/customer_account_edit.xml index 03d42c7ed97..2b438cacc13 100644 --- a/app/code/Magento/Customer/view/frontend/layout/customer_account_edit.xml +++ b/app/code/Magento/Customer/view/frontend/layout/customer_account_edit.xml @@ -25,6 +25,9 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="customer_account"/> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="customer_account_edit_head_components" template="Magento_Customer::js/components.phtml"/> + </referenceBlock> <referenceBlock name="page.main.title"> <action method="setPageTitle"> <argument translate="true" name="title" xsi:type="string">Edit Account Information</argument> diff --git a/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml b/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml index 2bf65f6a457..376bf9e19ba 100644 --- a/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml +++ b/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml @@ -25,6 +25,9 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="customer_account"/> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="customer_page_head_components" template="Magento_Customer::js/components.phtml"/> + </referenceBlock> <referenceBlock name="customer-account-navigation-address-link"> <arguments> <argument name="is_highlighted" xsi:type="boolean">true</argument> diff --git a/app/code/Magento/Customer/view/frontend/layout/customer_address_index.xml b/app/code/Magento/Customer/view/frontend/layout/customer_address_index.xml index e64f69c8d13..8630b72b23f 100644 --- a/app/code/Magento/Customer/view/frontend/layout/customer_address_index.xml +++ b/app/code/Magento/Customer/view/frontend/layout/customer_address_index.xml @@ -25,6 +25,9 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="customer_account"/> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="customer_address_head_components" template="Magento_Customer::js/components.phtml"/> + </referenceBlock> <referenceBlock name="page.main.title"> <block class="Magento\Customer\Block\Address\Book" name="address.book.button" template="address/button.phtml" cacheable="false" /> </referenceBlock> diff --git a/app/code/Magento/Customer/view/frontend/set-password.js b/app/code/Magento/Customer/view/frontend/set-password.js index aebc51c5140..0605a0fd308 100644 --- a/app/code/Magento/Customer/view/frontend/set-password.js +++ b/app/code/Magento/Customer/view/frontend/set-password.js @@ -25,6 +25,9 @@ /*jshint browser:true jquery:true expr:true*/ (function ($) { $.widget('mage.setPassword', { + options: { + }, + _create: function() { this.element.on('change', $.proxy(function(event) { $(event.target).is(':checked') ? this._showPassword() : this._hidePassword(); diff --git a/app/code/Magento/Downloadable/Block/Catalog/Product/Links.php b/app/code/Magento/Downloadable/Block/Catalog/Product/Links.php index bc059bafa5d..0a970bef5e5 100644 --- a/app/code/Magento/Downloadable/Block/Catalog/Product/Links.php +++ b/app/code/Magento/Downloadable/Block/Catalog/Product/Links.php @@ -25,8 +25,10 @@ */ namespace Magento\Downloadable\Block\Catalog\Product; +use Magento\Catalog\Pricing\Price\FinalPrice; +use Magento\Catalog\Pricing\Price\RegularPrice; use Magento\Downloadable\Model\Link; -use Magento\Customer\Controller\RegistryConstants; +use Magento\Downloadable\Pricing\Price\LinkPrice; /** * Downloadable Product Links part block @@ -34,11 +36,6 @@ use Magento\Customer\Controller\RegistryConstants; */ class Links extends \Magento\Catalog\Block\Product\AbstractProduct { - /** - * @var \Magento\Tax\Model\Calculation - */ - protected $calculationModel; - /** * @var \Magento\Framework\Json\EncoderInterface */ @@ -56,30 +53,21 @@ class Links extends \Magento\Catalog\Block\Product\AbstractProduct /** * @param \Magento\Catalog\Block\Product\Context $context - * @param \Magento\Tax\Model\Calculation $calculationModel - * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Customer\Service\V1\CustomerAccountServiceInterface $accountService * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, - \Magento\Tax\Model\Calculation $calculationModel, - \Magento\Framework\Json\EncoderInterface $jsonEncoder, \Magento\Core\Helper\Data $coreData, \Magento\Customer\Service\V1\CustomerAccountServiceInterface $accountService, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { - $this->calculationModel = $calculationModel; - $this->jsonEncoder = $jsonEncoder; $this->coreData = $coreData; $this->accountService = $accountService; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } @@ -118,48 +106,6 @@ class Links extends \Magento\Catalog\Block\Product\AbstractProduct return $this->getProduct()->getTypeInstance()->getLinks($this->getProduct()); } - /** - * @param Link $link - * @return string - */ - public function getFormattedLinkPrice($link) - { - $price = $link->getPrice(); - $store = $this->getProduct()->getStore(); - - if (0 == $price) { - return ''; - } - - if (!$this->calculationModel->getCustomerData()->getId() - && $this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID) - ) { - $customer = $this->accountService - ->getCustomer($this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID)); - $this->calculationModel->setCustomerData($customer); - } - - $taxHelper = $this->_taxData; - $coreHelper = $this->coreData; - $_priceInclTax = $taxHelper->getPrice($link->getProduct(), $price, true); - $_priceExclTax = $taxHelper->getPrice($link->getProduct(), $price); - - $priceStr = '<span class="price-notice">+'; - if ($taxHelper->displayPriceIncludingTax()) { - $priceStr .= $coreHelper->currencyByStore($_priceInclTax, $store); - } elseif ($taxHelper->displayPriceExcludingTax()) { - $priceStr .= $coreHelper->currencyByStore($_priceExclTax, $store); - } elseif ($taxHelper->displayBothPrices()) { - $priceStr .= $coreHelper->currencyByStore($_priceExclTax, $store); - if ($_priceInclTax != $_priceExclTax) { - $priceStr .= ' (+' . $coreHelper->currencyByStore($_priceInclTax, $store) . ' ' . __('Incl. Tax') . ')'; - } - } - $priceStr .= '</span>'; - - return $priceStr; - } - /** * Returns price converted to current currency rate * @@ -177,14 +123,41 @@ class Links extends \Magento\Catalog\Block\Product\AbstractProduct */ public function getJsonConfig() { - $config = array(); + $priceInfo = $this->getProduct()->getPriceInfo(); + $finalPrice = $priceInfo->getPrice(FinalPrice::PRICE_CODE); + $regularPrice = $priceInfo->getPrice(RegularPrice::PRICE_CODE); + $config = [ + 'price' => $this->coreData->currency( + $finalPrice->getAmount()->getValue(), + false, + false + ), + 'oldPrice' => $this->coreData->currency( + $regularPrice->getValue(), + false, + false + ) + ]; + $config['links'] = $this->getLinksConfig(); - $priceModel = $this->getProduct()->getPriceInfo()->getPrice('final_price'); + return json_encode($config); + } + /** + * Get links price config + * + * @return array + */ + protected function getLinksConfig() + { + $finalPrice = $this->getProduct()->getPriceInfo()->getPrice(FinalPrice::PRICE_CODE); + $linksConfig = []; foreach ($this->getLinks() as $link) { - $amount = $priceModel->getCustomAmount($link->getPrice()); - $config[$link->getId()] = [ - 'price' => $this->coreData->currency($link->getPrice(), false, false), + $amount = $finalPrice->getCustomAmount($link->getPrice()); + $price = $this->coreData->currency($link->getPrice(), false, false); + $linksConfig[$link->getId()] = [ + 'price' => $price, + 'oldPrice' => $price, 'inclTaxPrice' => $this->coreData->currency( $amount->getValue(), false, @@ -197,15 +170,14 @@ class Links extends \Magento\Catalog\Block\Product\AbstractProduct ) ]; } - - return $this->jsonEncoder->encode($config); + return $linksConfig; } /** * @param Link $link * @return string */ - public function getLinkSamlpeUrl($link) + public function getLinkSampleUrl($link) { $store = $this->getProduct()->getStore(); return $store->getUrl('downloadable/download/linkSample', array('link_id' => $link->getId())); @@ -290,6 +262,6 @@ class Links extends \Magento\Catalog\Block\Product\AbstractProduct */ protected function getPriceType() { - return $this->getProduct()->getPriceInfo()->getPrice('link_price'); + return $this->getProduct()->getPriceInfo()->getPrice(LinkPrice::PRICE_CODE); } } diff --git a/app/code/Magento/Downloadable/Pricing/Price/LinkPrice.php b/app/code/Magento/Downloadable/Pricing/Price/LinkPrice.php index bc16691f5cf..1088146f415 100644 --- a/app/code/Magento/Downloadable/Pricing/Price/LinkPrice.php +++ b/app/code/Magento/Downloadable/Pricing/Price/LinkPrice.php @@ -35,9 +35,9 @@ use Magento\Downloadable\Model\Link; class LinkPrice extends RegularPrice implements LinkPriceInterface { /** - * @var string + * Default price type */ - protected $priceType = self::PRICE_TYPE; + const PRICE_CODE = 'link_price'; /** * @param Link $link diff --git a/app/code/Magento/Downloadable/Pricing/Price/LinkPriceInterface.php b/app/code/Magento/Downloadable/Pricing/Price/LinkPriceInterface.php index b86b4b84f39..64bed2d36d9 100644 --- a/app/code/Magento/Downloadable/Pricing/Price/LinkPriceInterface.php +++ b/app/code/Magento/Downloadable/Pricing/Price/LinkPriceInterface.php @@ -24,9 +24,7 @@ namespace Magento\Downloadable\Pricing\Price; -use Magento\Catalog\Pricing\Price\RegularPrice; use Magento\Downloadable\Model\Link; -use Magento\Framework\Pricing\Adjustment\Calculator; /** * Class LinkPrice Model @@ -34,11 +32,6 @@ use Magento\Framework\Pricing\Adjustment\Calculator; */ interface LinkPriceInterface { - /** - * Default price type - */ - const PRICE_TYPE = 'link_price'; - /** * @param Link $link * @return \Magento\Framework\Pricing\Amount\AmountInterface diff --git a/app/code/Magento/Downloadable/etc/di.xml b/app/code/Magento/Downloadable/etc/di.xml index dd90b38bdf4..f2a15bf24b2 100644 --- a/app/code/Magento/Downloadable/etc/di.xml +++ b/app/code/Magento/Downloadable/etc/di.xml @@ -52,12 +52,25 @@ </argument> </arguments> </type> - <type name="Magento\Framework\Pricing\PriceComposite"> + <virtualType name="Magento\Downloadable\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> <arguments> - <argument name="metadata" xsi:type="array"> - <item name="link_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\Downloadable\Pricing\Price\LinkPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> + <argument name="prices" xsi:type="array"> + <item name="link_price" xsi:type="string">Magento\Downloadable\Pricing\Price\LinkPrice</item> + </argument> + <argument name="target" xsi:type="object">Magento\Catalog\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <virtualType name="Magento\Downloadable\Pricing\Price\Collection" type="Magento\Framework\Pricing\Price\Collection"> + <arguments> + <argument name="pool" xsi:type="object">Magento\Downloadable\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <type name="Magento\Framework\Pricing\PriceInfo\Factory"> + <arguments> + <argument name="types" xsi:type="array"> + <item name="downloadable" xsi:type="array"> + <item name="infoClass" xsi:type="string">Magento\Framework\Pricing\PriceInfo\Base</item> + <item name="prices" xsi:type="string">Magento\Downloadable\Pricing\Price\Collection</item> </item> </argument> </arguments> diff --git a/app/code/Magento/Downloadable/view/adminhtml/product/composite/fieldset/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/product/composite/fieldset/downloadable.phtml index f7a0ebedf56..042792f40fd 100644 --- a/app/code/Magento/Downloadable/view/adminhtml/product/composite/fieldset/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/adminhtml/product/composite/fieldset/downloadable.phtml @@ -44,7 +44,7 @@ <label for="links_<?php echo $_link->getId() ?>" class="label"> <?php echo $this->escapeHtml($_link->getTitle()) ?> <?php if ($_link->getSampleFile() || $_link->getSampleUrl()): ?> - (<a href="<?php echo $this->getLinkSamlpeUrl($_link) ?>" <?php echo $this->getIsOpenInNewWindow()?'onclick="this.target=\'_blank\'"':''; ?>><?php echo __('sample') ?></a>) + (<a href="<?php echo $this->getLinkSampleUrl($_link) ?>" <?php echo $this->getIsOpenInNewWindow()?'onclick="this.target=\'_blank\'"':''; ?>><?php echo __('sample') ?></a>) <?php endif; ?> <?php if ($_linksPurchasedSeparately): ?> <?php echo $this->getFormattedLinkPrice($_link); ?> diff --git a/app/code/Magento/Downloadable/view/frontend/catalog/product/links.phtml b/app/code/Magento/Downloadable/view/frontend/catalog/product/links.phtml index 3876174beb5..f64a777e6e2 100644 --- a/app/code/Magento/Downloadable/view/frontend/catalog/product/links.phtml +++ b/app/code/Magento/Downloadable/view/frontend/catalog/product/links.phtml @@ -29,7 +29,12 @@ <?php $_isRequired = $this->getLinkSelectionRequired(); ?> <div class="field downloads<?php if ($_isRequired) echo ' required' ?>"> <label class="label"><span><?php echo $this->getLinksTitle() ?></span></label> - <div class="control" id="downloadable-links-list" data-container-for="downloadable-links"> + <div class="control" id="downloadable-links-list" + data-mage-init='{"downloadable":{ + "linkElement":"input:checkbox", + "config":<?php echo $this->getJsonConfig() ?>} + }' + data-container-for="downloadable-links"> <?php foreach ($_links as $_link): ?> <div class="field choice" data-role="link"> <?php if ($_linksPurchasedSeparately): ?> @@ -43,7 +48,7 @@ <span><?php echo $this->escapeHtml($_link->getTitle()); ?></span> <?php if ($_link->getSampleFile() || $_link->getSampleUrl()): ?> <a class="sample link" - href="<?php echo $this->getLinkSamlpeUrl($_link) ?>" <?php echo $this->getIsOpenInNewWindow() ? 'target="_blank"' : ''; ?>> + href="<?php echo $this->getLinkSampleUrl($_link) ?>" <?php echo $this->getIsOpenInNewWindow() ? 'target="_blank"' : ''; ?>> <?php echo __('sample') ?> </a> <?php endif; ?> @@ -58,16 +63,4 @@ <span id="links-advice-container"></span> <?php endif;?> </div> - <script type="text/javascript"> - //<![CDATA[ - (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Downloadable::downloadable.js') ?>", function () { - $('#downloadable-links-list').downloadable({ - linkElement: 'input:checkbox', - config: <?php echo $this->getJsonConfig() ?> - }); - }); - })(jQuery); - //]]> - </script> <?php endif; ?> diff --git a/app/code/Magento/Downloadable/view/frontend/downloadable.js b/app/code/Magento/Downloadable/view/frontend/downloadable.js index 9fc9a90e257..317a1af922e 100644 --- a/app/code/Magento/Downloadable/view/frontend/downloadable.js +++ b/app/code/Magento/Downloadable/view/frontend/downloadable.js @@ -34,16 +34,21 @@ * @private */ _reloadPrice: function() { - var price = 0, inclTaxPrice = 0, exclTaxPrice = 0; + var price = 0, + oldPrice = 0, + inclTaxPrice = 0, + exclTaxPrice = 0; this.element.find(this.options.linkElement + ':checked').each($.proxy(function(index, element) { - price += this.options.config[$(element).val()].price; - inclTaxPrice += this.options.config[$(element).val()].inclTaxPrice; - exclTaxPrice += this.options.config[$(element).val()].exclTaxPrice; + price += this.options.config.links[$(element).val()].price; + oldPrice += this.options.config.links[$(element).val()].oldPrice; + inclTaxPrice += this.options.config.links[$(element).val()].inclTaxPrice; + exclTaxPrice += this.options.config.links[$(element).val()].exclTaxPrice; }, this)); this.element.trigger('changePrice', { 'config': 'config', 'price': { 'price': price, + 'oldPrice': oldPrice, 'inclTaxPrice': inclTaxPrice, 'exclTaxPrice': exclTaxPrice } diff --git a/app/design/frontend/Magento/plushe/Magento_Catalog/layout/default.xml b/app/code/Magento/Downloadable/view/frontend/js/components.phtml similarity index 66% rename from app/design/frontend/Magento/plushe/Magento_Catalog/layout/default.xml rename to app/code/Magento/Downloadable/view/frontend/js/components.phtml index 77689376e96..33df3a2f181 100644 --- a/app/design/frontend/Magento/plushe/Magento_Catalog/layout/default.xml +++ b/app/code/Magento/Downloadable/view/frontend/js/components.phtml @@ -1,5 +1,4 @@ -<?xml version="1.0"?> -<!-- +<?php /** * Magento * @@ -19,12 +18,23 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category design + * @package base_default * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="header.links"> - <block class="Magento\Catalog\Block\Product\Compare\Link" name="catalog.compare.link" before="-" template="Magento_Catalog::product/compare/link.phtml"/> - </referenceBlock> -</layout> +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + downloadable: [ + '<?php echo $this->getViewFileUrl('Magento_Downloadable::downloadable.js')?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Downloadable/view/frontend/layout/catalog_product_view_type_downloadable.xml b/app/code/Magento/Downloadable/view/frontend/layout/catalog_product_view_type_downloadable.xml index 26e3ba19054..dd483a99be6 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/catalog_product_view_type_downloadable.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/catalog_product_view_type_downloadable.xml @@ -41,4 +41,7 @@ </block> </block> </referenceBlock> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="downloadable_page_head_components" template="Magento_Downloadable::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template.php index b2522ed0d17..93dacf05dd0 100644 --- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template.php +++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template.php @@ -240,6 +240,7 @@ class Template extends \Magento\Backend\App\Action */ public function defaultTemplateAction() { + $this->_view->loadLayout(); $template = $this->_initTemplate('id'); $templateCode = $this->getRequest()->getParam('code'); try { diff --git a/app/code/Magento/Email/Model/Template/Filter.php b/app/code/Magento/Email/Model/Template/Filter.php index 955f788053b..df2b2711b98 100644 --- a/app/code/Magento/Email/Model/Template/Filter.php +++ b/app/code/Magento/Email/Model/Template/Filter.php @@ -28,6 +28,7 @@ namespace Magento\Email\Model\Template; /** * Core Email Template Filter Model * + * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Filter extends \Magento\Framework\Filter\Template @@ -124,6 +125,11 @@ class Filter extends \Magento\Framework\Filter\Template */ protected $_appState; + /** + * @var \Magento\Backend\Model\UrlInterface + */ + protected $backendUrlBuilder; + /** * @param \Magento\Framework\Stdlib\String $string * @param \Magento\Framework\Logger $logger @@ -135,8 +141,9 @@ class Filter extends \Magento\Framework\Filter\Template * @param \Magento\Framework\View\LayoutInterface $layout * @param \Magento\Framework\View\LayoutFactory $layoutFactory * @param \Magento\Framework\App\State $appState + * @param \Magento\Backend\Model\UrlInterface $backendUrlBuilder * @param array $variables - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -150,6 +157,7 @@ class Filter extends \Magento\Framework\Filter\Template \Magento\Framework\View\LayoutInterface $layout, \Magento\Framework\View\LayoutFactory $layoutFactory, \Magento\Framework\App\State $appState, + \Magento\Backend\Model\UrlInterface $backendUrlBuilder, $variables = array() ) { $this->_escaper = $escaper; @@ -162,6 +170,7 @@ class Filter extends \Magento\Framework\Filter\Template $this->_layout = $layout; $this->_layoutFactory = $layoutFactory; $this->_appState = $appState; + $this->backendUrlBuilder = $backendUrlBuilder; parent::__construct($string, $variables); } @@ -411,7 +420,22 @@ class Filter extends \Magento\Framework\Filter\Template unset($params['url']); } - return $this->_storeManager->getStore($this->getStoreId())->getUrl($path, $params); + return $this->getUrl($path, $params); + } + + /** + * @param string $path + * @param array $params + * @return string + */ + protected function getUrl($path, $params) + { + $isBackendStore = \Magento\Store\Model\Store::DEFAULT_STORE_ID === $this->getStoreId() + || \Magento\Store\Model\Store::ADMIN_CODE === $this->getStoreId(); + + return $isBackendStore + ? $this->backendUrlBuilder->getUrl($path, $params) + : $this->_storeManager->getStore($this->getStoreId())->getUrl($path, $params); } /** diff --git a/app/code/Magento/GiftMessage/view/frontend/inline.phtml b/app/code/Magento/GiftMessage/view/frontend/inline.phtml index 6e591d818f6..e511f8c663f 100644 --- a/app/code/Magento/GiftMessage/view/frontend/inline.phtml +++ b/app/code/Magento/GiftMessage/view/frontend/inline.phtml @@ -26,9 +26,7 @@ <?php $_giftMessage = false; ?> <?php if(!$this->getDontDisplayContainer()): ?> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_GiftMessage::extra-options.js') ?>", function() { - jQuery('#checkoutSteps').extraOptions({additionalUrl: '<?php echo $this->getAdditionalUrl(); ?>'}); - }); + jQuery('#checkoutSteps').mage('extraOptions', {additionalUrl: '<?php echo $this->getAdditionalUrl(); ?>'}); </script> <?php endif ?> @@ -38,7 +36,7 @@ <legend class="legend"><span><?php echo __('Do you have any gift items in your order?'); ?></span></legend><br> <div class="field choice" id="add-gift-options-<?php echo $this->getEntity()->getId() ?>"> - <input type="checkbox" name="allow_gift_options" id="allow_gift_options" value="1" data-selector='{"id":"#allow-gift-options-container"}'<?php if($this->getItemsHasMesssages() || $this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <input type="checkbox" name="allow_gift_options" id="allow_gift_options" data-mage-init='{"giftOptions":{}}' value="1" data-selector='{"id":"#allow-gift-options-container"}'<?php if($this->getItemsHasMesssages() || $this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> <label for="allow_gift_options" class="label"><span><?php echo __('Add gift options') ?></span></label> </div> @@ -46,7 +44,7 @@ <dt id="add-gift-options-for-order-<?php echo $this->getEntity()->getId() ?>" class="order"> <div class="title"><span><?php echo __('Gift Options for the Entire Order'); ?></span></div> <div class="field choice"> - <input type="checkbox" name="allow_gift_messages_for_order" id="allow_gift_options_for_order" value="1" data-selector='{"id":"#allow-gift-options-for-order-container"}'<?php if($this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <input type="checkbox" name="allow_gift_messages_for_order" id="allow_gift_options_for_order" data-mage-init='{"giftOptions":{}}' value="1" data-selector='{"id":"#allow-gift-options-for-order-container"}'<?php if($this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> <label for="allow_gift_options_for_order" class="label"><span><?php echo __('Add gift options for the Entire Order') ?></span></label> </div> </dt> @@ -90,7 +88,7 @@ <dt id="add-gift-options-for-items-<?php echo $this->getEntity()->getId() ?>" class="individual"> <div class="title"><span><?php echo __('Gift Options for Individual Items'); ?></span></div> <div class="field choice"> - <input type="checkbox" name="allow_gift_options_for_items" id="allow_gift_options_for_items" value="1" data-selector='{"id":"#allow-gift-options-for-items-container"}'<?php if($this->getItemsHasMesssages()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <input type="checkbox" name="allow_gift_options_for_items" id="allow_gift_options_for_items" data-mage-init='{"giftOptions":{}}' value="1" data-selector='{"id":"#allow-gift-options-for-items-container"}'<?php if($this->getItemsHasMesssages()): ?> checked="checked"<?php endif; ?> class="checkbox" /> <label for="allow_gift_options_for_items" class="label"><span><?php echo __('Add gift options for Individual Items') ?></span></label> </div> </dt> @@ -154,13 +152,6 @@ <dt class="extra-options-container" id="extra-options-container-<?php echo $this->getEntity()->getId() ?>"></dt> </dl> </fieldset> - <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_GiftMessage::gift-options.js')?>", function() { - jQuery('#allow_gift_options') - .add('#allow_gift_options_for_order') - .add('#allow_gift_options_for_items').giftOptions(); - }); - </script> <?php break; ?> <?php case 'multishipping_address': ?> @@ -168,7 +159,7 @@ <legend class="legend"><span><?php echo __('Do you have any gift items in your order?'); ?></span></legend><br> <div class="field choice" id="add-gift-options-<?php echo $this->getEntity()->getId() ?>"> - <input type="checkbox" name="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" value="1" data-selector='{"id":"#allow-gift-options-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getItemsHasMesssages() || $this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <input type="checkbox" name="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" data-mage-init='{"giftOptions":{}}' value="1" data-selector='{"id":"#allow-gift-options-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getItemsHasMesssages() || $this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> <label for="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" class="label"><span><?php echo __('Add gift options') ?></span></label> </div> @@ -176,7 +167,7 @@ <dt id="add-gift-options-for-order-<?php echo $this->getEntity()->getId() ?>" class="order"> <div class="title"><span><?php echo __('Gift Options for this address.'); ?></span></div> <div class="field choice"> - <input type="checkbox" name="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" value="1" data-selector='{"id":"#allow-gift-options-for-order-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <input type="checkbox" name="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" data-mage-init='{"giftOptions":{}}' value="1" data-selector='{"id":"#allow-gift-options-for-order-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> <label for="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" class="label"><span><?php echo __('Add gift options for the Entire Order') ?></span></label> </div> </dt> @@ -218,7 +209,7 @@ <dt id="add-gift-options-for-items-<?php echo $this->getEntity()->getId() ?>" class="individual"> <div class="title"><span><?php echo __('Gift Options for Individual Items'); ?></span></div> <div class="field choice"> - <input type="checkbox" name="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" value="1" data-selector='{"id":"#allow-gift-options-for-items-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getItemsHasMesssages()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <input type="checkbox" name="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" data-mage-init='{"giftOptions":{}}' value="1" data-selector='{"id":"#allow-gift-options-for-items-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getItemsHasMesssages()): ?> checked="checked"<?php endif; ?> class="checkbox" /> <label for="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" class="label"><span><?php echo __('Add gift options for Individual Items') ?></span></label> </div> </dt> @@ -282,26 +273,10 @@ <dt class="extra-options-container" id="extra-options-container-<?php echo $this->getEntity()->getId() ?>"></dt> </dl> </fieldset> - <script type="text/javascript"> - (function($) { - $(function() { - head.js("<?php echo $this->getViewFileUrl('Magento_GiftMessage::gift-options.js')?>", function() { - $('#allow_gift_options_<?php echo $this->getEntity()->getId() ?>') - .add('#allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>') - .add('#allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>').giftOptions(); - }); - }); - })(jQuery); - </script> <?php break; ?> <?php endswitch ?> <?php if ($_giftMessage): ?> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function() { - jQuery("#shipping_method_form").validation(); - }); + jQuery('#shipping_method_form').mage('validation'); </script> <?php endif; ?> diff --git a/app/code/Magento/GroupedProduct/Block/Adminhtml/Product/Composite/Fieldset/Grouped.php b/app/code/Magento/GroupedProduct/Block/Adminhtml/Product/Composite/Fieldset/Grouped.php index 09db996c44e..7363505f28d 100644 --- a/app/code/Magento/GroupedProduct/Block/Adminhtml/Product/Composite/Fieldset/Grouped.php +++ b/app/code/Magento/GroupedProduct/Block/Adminhtml/Product/Composite/Fieldset/Grouped.php @@ -64,7 +64,6 @@ class Grouped extends \Magento\GroupedProduct\Block\Product\View\Type\Grouped * @param \Magento\Core\Helper\Data $coreHelper * @param CustomerAccountService $customerAccountService * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -72,8 +71,7 @@ class Grouped extends \Magento\GroupedProduct\Block\Product\View\Type\Grouped \Magento\Catalog\Helper\Product\Price $priceHelper, \Magento\Core\Helper\Data $coreHelper, CustomerAccountService $customerAccountService, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_customerAccountService = $customerAccountService; $this->_coreHelper = $coreHelper; @@ -81,8 +79,7 @@ class Grouped extends \Magento\GroupedProduct\Block\Product\View\Type\Grouped parent::__construct( $context, $arrayUtils, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/GroupedProduct/Block/Product/View/Type/Grouped.php b/app/code/Magento/GroupedProduct/Block/Product/View/Type/Grouped.php index 85ea6f8ac7c..a7e6ab19518 100644 --- a/app/code/Magento/GroupedProduct/Block/Product/View/Type/Grouped.php +++ b/app/code/Magento/GroupedProduct/Block/Product/View/Type/Grouped.php @@ -53,30 +53,4 @@ class Grouped extends \Magento\Catalog\Block\Product\View\AbstractView } return $this; } - - /** - * Returns product tier price block html - * - * @param \Magento\Catalog\Model\Product|null $product - * @return string - */ - public function getTierPriceHtml($product = null) - { - if (is_null($product)) { - $product = $this->getProduct(); - } - return $this->_getPriceBlock( - $product->getTypeId() - )->setTemplate( - $this->getTierPriceTemplate() - )->setProduct( - $product - )->setListClass( - 'tier prices grouped items' - )->setShowDetailedPrice( - false - )->setCanDisplayQty( - false - )->toHtml(); - } } diff --git a/app/code/Magento/GroupedProduct/Pricing/Price/FinalPrice.php b/app/code/Magento/GroupedProduct/Pricing/Price/FinalPrice.php index 3479a8470c3..2af33e4fc23 100644 --- a/app/code/Magento/GroupedProduct/Pricing/Price/FinalPrice.php +++ b/app/code/Magento/GroupedProduct/Pricing/Price/FinalPrice.php @@ -26,56 +26,25 @@ namespace Magento\GroupedProduct\Pricing\Price; -use Magento\Framework\Pricing\Adjustment\Calculator; -use Magento\Framework\Pricing\Amount\AmountInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; -use Magento\Catalog\Pricing\Price\FinalPriceInterface; -use Magento\Framework\Pricing\Price\PriceInterface; +use Magento\Framework\Pricing\Price\AbstractPrice; +use Magento\Catalog\Model\Product; use Magento\GroupedProduct\Model\Product\Type\Grouped; -use Magento\Catalog\Model\ProductFactory; /** * Final price model */ -class FinalPrice implements FinalPriceInterface, PriceInterface +class FinalPrice extends AbstractPrice { /** - * @var string + * Price type final */ - protected $priceType = self::PRICE_TYPE_FINAL; + const PRICE_CODE = 'final_price'; /** - * @var \Magento\Framework\Pricing\Object\SaleableInterface - */ - protected $salableItem; - - /** - * @var \Magento\Framework\Pricing\Adjustment\Calculator - */ - protected $calculator; - - /** - * @var SaleableInterface + * @var Product */ protected $minProduct; - /** - * @var AmountInterface - */ - protected $amount; - - /** - * @param SaleableInterface $salableItem - * @param Calculator $calculator - */ - public function __construct( - SaleableInterface $salableItem, - Calculator $calculator - ) { - $this->salableItem = $salableItem; - $this->calculator = $calculator; - } - /** * Return minimal product price * @@ -83,48 +52,24 @@ class FinalPrice implements FinalPriceInterface, PriceInterface */ public function getValue() { - return $this->getMinProduct()->getPriceInfo() - ->getPrice(\Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL)->getValue(); - } - - /** - * Get price type code - * - * @return string - */ - public function getPriceType() - { - return $this->priceType; - } - - /** - * Get Price Amount object - * - * @return AmountInterface - */ - public function getAmount() - { - if (!$this->amount) { - $this->amount = $this->calculator->getAmount($this->getValue(), $this->salableItem); - } - return $this->amount; + return $this->getMinProduct()->getPriceInfo()->getPrice(FinalPrice::PRICE_CODE)->getValue(); } /** * Returns product with minimal price * - * @return SaleableInterface + * @return Product */ public function getMinProduct() { if (null === $this->minProduct) { - $products = $this->salableItem->getTypeInstance()->getAssociatedProducts($this->salableItem); + $products = $this->product->getTypeInstance()->getAssociatedProducts($this->product); $minPrice = null; foreach ($products as $item) { $product = clone $item; $product->setQty(\Magento\Framework\Pricing\PriceInfoInterface::PRODUCT_QUANTITY_DEFAULT); $price = $product->getPriceInfo() - ->getPrice(FinalPriceInterface::PRICE_TYPE_FINAL) + ->getPrice(FinalPrice::PRICE_CODE) ->getValue(); if (($price !== false) && ($price <= (is_null($minPrice) ? $price : $minPrice))) { $this->minProduct = $product; @@ -134,17 +79,4 @@ class FinalPrice implements FinalPriceInterface, PriceInterface } return $this->minProduct; } - - /** - * @param float $amount - * @param null|string $exclude - * @return AmountInterface - */ - public function getCustomAmount($amount = null, $exclude = null) - { - if ($amount === null) { - $amount = $this->getValue(); - } - return $this->calculator->getAmount($amount, $this->salableItem, $exclude); - } } diff --git a/app/code/Magento/GroupedProduct/etc/di.xml b/app/code/Magento/GroupedProduct/etc/di.xml index 55da7c620a6..fc518ce0a0e 100644 --- a/app/code/Magento/GroupedProduct/etc/di.xml +++ b/app/code/Magento/GroupedProduct/etc/di.xml @@ -68,12 +68,25 @@ <type name="Magento\Catalog\Helper\Product\Configuration"> <plugin name="grouped_options" type="Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped"/> </type> - <type name="Magento\Framework\Pricing\PriceComposite"> + <virtualType name="Magento\GroupedProduct\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> <arguments> - <argument name="metadata" xsi:type="array"> - <item name="grouped_final_price" xsi:type="array"> - <item name="class" xsi:type="string">Magento\GroupedProduct\Pricing\Price\FinalPrice</item> - <item name="include_in_base_price" xsi:type="boolean">false</item> + <argument name="prices" xsi:type="array"> + <item name="final_price" xsi:type="string">Magento\GroupedProduct\Pricing\Price\FinalPrice</item> + </argument> + <argument name="target" xsi:type="object">Magento\Catalog\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <virtualType name="Magento\GroupedProduct\Pricing\Price\Collection" type="Magento\Framework\Pricing\Price\Collection"> + <arguments> + <argument name="pool" xsi:type="object">Magento\GroupedProduct\Pricing\Price\Pool</argument> + </arguments> + </virtualType> + <type name="Magento\Framework\Pricing\PriceInfo\Factory"> + <arguments> + <argument name="types" xsi:type="array"> + <item name="grouped" xsi:type="array"> + <item name="infoClass" xsi:type="string">Magento\Framework\Pricing\PriceInfo\Base</item> + <item name="prices" xsi:type="string">Magento\GroupedProduct\Pricing\Price\Collection</item> </item> </argument> </arguments> diff --git a/app/code/Magento/GroupedProduct/etc/frontend/di.xml b/app/code/Magento/GroupedProduct/etc/frontend/di.xml deleted file mode 100644 index 906dd09062f..00000000000 --- a/app/code/Magento/GroupedProduct/etc/frontend/di.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/Magento/Framework/ObjectManager/etc/config.xsd"> - <type name="Magento\Catalog\Block\Product\AbstractProduct"> - <arguments> - <argument name="priceBlockTypes" xsi:type="array"> - <item name="grouped" xsi:type="array"> - <item name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</item> - <item name="template" xsi:type="string">Magento_GroupedProduct::product/price.phtml</item> - </item> - </argument> - </arguments> - </type> - <type name="Magento\Catalog\Block\Product\Price\Template"> - <arguments> - <argument name="priceBlockTypes" xsi:type="array"> - <item name="grouped" xsi:type="array"> - <item name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</item> - <item name="template" xsi:type="string">Magento_GroupedProduct::product/price.phtml</item> - </item> - </argument> - </arguments> - </type> -</config> diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/layout/catalog_product_grouped.xml b/app/code/Magento/GroupedProduct/view/adminhtml/layout/catalog_product_grouped.xml index 3d6fd862df6..b28577b4446 100644 --- a/app/code/Magento/GroupedProduct/view/adminhtml/layout/catalog_product_grouped.xml +++ b/app/code/Magento/GroupedProduct/view/adminhtml/layout/catalog_product_grouped.xml @@ -31,6 +31,11 @@ <argument name="file" xsi:type="string">Magento_GroupedProduct::css/grouped-product.css</argument> </arguments> </block> + <block class="Magento\Theme\Block\Html\Head\Script" name="magento-grouped-product-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_GroupedProduct::js/grouped-product.js</argument> + </arguments> + </block> </referenceBlock> <referenceBlock name="product_tabs"> <block class="Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts" name="catalog.product.edit.grouped.container" template="product/grouped/container.phtml"> diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/product/grouped/grouped.phtml b/app/code/Magento/GroupedProduct/view/adminhtml/product/grouped/grouped.phtml index 8fecdc5018d..90ad3240b85 100644 --- a/app/code/Magento/GroupedProduct/view/adminhtml/product/grouped/grouped.phtml +++ b/app/code/Magento/GroupedProduct/view/adminhtml/product/grouped/grouped.phtml @@ -32,7 +32,7 @@ $_gridPopupBlock->setRowClickCallback('function(){}'); /** @var $_helper \Magento\Core\Helper\Data */ $_helper = $this->helper('Magento\Core\Helper\Data'); ?> -<div id="grouped-product-container"> +<div id="grouped-product-container" data-mage-init='{"groupedProduct":{"gridPopup":"window.<?php echo $_gridPopupBlock->getJsObjectName() ?>"}}'> <div class="no-products-message"> <?php echo __('There are no grouped products.')?> </div> @@ -41,13 +41,4 @@ $_helper = $this->helper('Magento\Core\Helper\Data'); <?php echo $this->getChildBlock('catalog.product.group.grid.popup.container')->getChildHtml('grid');?> </div> <button type="button" data-role="add-product">Add Products to Group</button> - <script type="text/javascript"> - jQuery(function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_GroupedProduct::js/grouped-product.js') ?>", function() { - $('#grouped-product-container').mage('groupedProduct', { - gridPopup: window.<?php echo $_gridPopupBlock->getJsObjectName() ?> - }); - }); - }); - </script> </div> diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/product/stock/disabler.phtml b/app/code/Magento/GroupedProduct/view/adminhtml/product/stock/disabler.phtml index 19728a542db..e321e94bfa3 100644 --- a/app/code/Magento/GroupedProduct/view/adminhtml/product/stock/disabler.phtml +++ b/app/code/Magento/GroupedProduct/view/adminhtml/product/stock/disabler.phtml @@ -24,7 +24,7 @@ ?> <script type="text/javascript"> (function($) { - $('#product_info_tabs_product-details_content').on('stockbeforedisable', function(e) { + $('[data-tab-panel=product-details]').on('stockbeforedisable', function(e) { if (e.productType === 'grouped') { return false; } diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/catalog_product_prices.xml b/app/code/Magento/GroupedProduct/view/base/layout/catalog_product_prices.xml similarity index 100% rename from app/code/Magento/GroupedProduct/view/frontend/layout/catalog_product_prices.xml rename to app/code/Magento/GroupedProduct/view/base/layout/catalog_product_prices.xml diff --git a/app/code/Magento/GroupedProduct/view/frontend/product/price/final_price.phtml b/app/code/Magento/GroupedProduct/view/base/product/price/final_price.phtml similarity index 95% rename from app/code/Magento/GroupedProduct/view/frontend/product/price/final_price.phtml rename to app/code/Magento/GroupedProduct/view/base/product/price/final_price.phtml index b176bb17678..a1f0c463602 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/product/price/final_price.phtml +++ b/app/code/Magento/GroupedProduct/view/base/product/price/final_price.phtml @@ -29,7 +29,7 @@ <?php $minProduct = $this->getSaleableItem() ->getPriceInfo() - ->getPrice('grouped_final_price') + ->getPrice(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE) ->getMinProduct(); $amountRender = $this->getRendererPool() ->createAmountRender( diff --git a/app/code/Magento/GroupedProduct/view/frontend/product/view/type/grouped.phtml b/app/code/Magento/GroupedProduct/view/frontend/product/view/type/grouped.phtml index a4dd31f7696..0f7147f6355 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/product/view/type/grouped.phtml +++ b/app/code/Magento/GroupedProduct/view/frontend/product/view/type/grouped.phtml @@ -68,7 +68,7 @@ <?php echo $this->getProductPrice($_item) ?> <?php echo $this->getProductPriceHtml( $_item, - \Magento\Catalog\Pricing\Price\TierPriceInterface::PRICE_TYPE_TIER + \Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE ) ?> <?php endif; ?> </td> diff --git a/app/code/Magento/Install/view/install/begin.phtml b/app/code/Magento/Install/view/install/begin.phtml index f095221c46a..384476dd0f9 100644 --- a/app/code/Magento/Install/view/install/begin.phtml +++ b/app/code/Magento/Install/view/install/begin.phtml @@ -53,9 +53,9 @@ <script type="text/javascript"> //<![CDATA[ (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", function() { + head.js("<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", head.ready(function () { $.mage.install.begin('#agree', '#submitButton'); - }); + })); })(jQuery); //]]> </script> diff --git a/app/code/Magento/Install/view/install/config.phtml b/app/code/Magento/Install/view/install/config.phtml index fdc41575654..064537ced8b 100644 --- a/app/code/Magento/Install/view/install/config.phtml +++ b/app/code/Magento/Install/view/install/config.phtml @@ -156,13 +156,15 @@ </form> <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", "<?php echo $this->getViewFileUrl('mage/validation.js')?>", "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", function() { + "<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", + head.ready(function () { $.mage.install.configureForm('#form-validate', '#use_secure', '#use_secure_options'); - }); + })); })(jQuery); </script> <?php else: ?> @@ -172,11 +174,11 @@ <span><?php echo __('Continue') ?></span></button> <script type="text/javascript"> (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Install::js/install.js')?>", function() { + head.js("<?php echo $this->getViewFileUrl('Magento_Install::js/install.js')?>", head.ready(function () { $.mage.install.configureContinue( '#btn-continue', '<?php echo $this->getUrl('*/*/*', array('_current' => true)) ?>' ); - }); + })); })(jQuery); </script> </div> diff --git a/app/code/Magento/Install/view/install/create_admin.phtml b/app/code/Magento/Install/view/install/create_admin.phtml index 9dd3e615abe..e2f4f14f564 100644 --- a/app/code/Magento/Install/view/install/create_admin.phtml +++ b/app/code/Magento/Install/view/install/create_admin.phtml @@ -115,12 +115,14 @@ </form> <script type="text/javascript"> (function ($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", "<?php echo $this->getViewFileUrl('mage/validation.js')?>", "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", function() { + "<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", + head.ready(function () { $.mage.install.createAdmin('#form-validate'); - }); + })); })(jQuery); </script> diff --git a/app/code/Magento/Install/view/install/locale.phtml b/app/code/Magento/Install/view/install/locale.phtml index cc34e2e3a52..dcfa4d06023 100644 --- a/app/code/Magento/Install/view/install/locale.phtml +++ b/app/code/Magento/Install/view/install/locale.phtml @@ -65,8 +65,8 @@ </form> <script type="text/javascript"> (function($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", function() { + head.js("<?php echo $this->getViewFileUrl('Magento_Install::js/install.js') ?>", head.ready(function () { $.mage.install.changeLocale('#locale', '<?php echo $this->getChangeUrl();?>'); - }); + })); })(jQuery); </script> diff --git a/app/code/Magento/Install/view/install/page.phtml b/app/code/Magento/Install/view/install/page.phtml index bd15bba5a3f..09c374cfea4 100644 --- a/app/code/Magento/Install/view/install/page.phtml +++ b/app/code/Magento/Install/view/install/page.phtml @@ -41,7 +41,7 @@ <script type="text/javascript" src="<?php echo $this->getViewFileUrl('jquery/jquery.js') ?>"></script> <script type="text/javascript" src="<?php echo $this->getViewFileUrl('jquery/jquery-migrate.js') ?>"></script> <script type="text/javascript" src="<?php echo $this->getViewFileUrl('jquery/jquery-ui.js') ?>"></script> - <script type="text/javascript" src="<?php echo $this->getViewFileUrl('headjs/head.load.min.js') ?>"></script> + <script type="text/javascript" src="<?php echo $this->getViewFileUrl('headjs/head.min.js') ?>"></script> <script type="text/javascript" src="<?php echo $this->getViewFileUrl('mage/mage.js') ?>"></script> <script type="text/javascript" src="<?php echo $this->getViewFileUrl('mage/translate.js') ?>"></script> diff --git a/app/code/Magento/Multishipping/view/frontend/checkout/address/select.phtml b/app/code/Magento/Multishipping/view/frontend/checkout/address/select.phtml index 83429561c33..99af6b47c47 100644 --- a/app/code/Magento/Multishipping/view/frontend/checkout/address/select.phtml +++ b/app/code/Magento/Multishipping/view/frontend/checkout/address/select.phtml @@ -50,10 +50,8 @@ </div> </div> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Customer::address.js'); ?>", function() { - jQuery('.actions').address({ - addAddress: "button[role='add-address']", - addAddressLocation: '<?php echo $this->getAddNewUrl() ?>' - }); + jQuery('.actions').mage('address', { + addAddress: "button[role='add-address']", + addAddressLocation: '<?php echo $this->getAddNewUrl() ?>' }); </script> diff --git a/app/code/Magento/Multishipping/view/frontend/checkout/addresses.phtml b/app/code/Magento/Multishipping/view/frontend/checkout/addresses.phtml index eb1d010e731..1906183f934 100644 --- a/app/code/Magento/Multishipping/view/frontend/checkout/addresses.phtml +++ b/app/code/Magento/Multishipping/view/frontend/checkout/addresses.phtml @@ -29,7 +29,7 @@ * @var $this \Magento\Multishipping\Block\Checkout\Addresses */ ?> -<form id="checkout_multishipping_form" action="<?php echo $this->getPostActionUrl() ?>" method="post" class="multicheckout address form"> +<form id="checkout_multishipping_form" data-mage-init='{"multiShipping":{}, "validation":{}}' action="<?php echo $this->getPostActionUrl() ?>" method="post" class="multicheckout address form"> <div class="title"> <strong><?php echo __('Please select a shipping address for applicable items.') ?></strong> <button type="button" title="<?php echo __('Enter a New Address') ?>" class="action add" data-role="add-new-address"><span><?php echo __('Enter a New Address') ?></span></button> @@ -80,16 +80,3 @@ <button type="submit" title="<?php echo __('Continue to Shipping Information') ?>" class="action continue<?php if ($this->isContinueDisabled()):?> disabled<?php endif; ?>" data-role="can-continue" data-flag="1"<?php if ($this->isContinueDisabled()):?> disabled="disabled"<?php endif; ?>><span><?php echo __('Continue to Shipping Information') ?></span></button> </div> </form> - -<script type="text/javascript"> - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - "<?php echo $this->getViewFileUrl('Magento_Multishipping::js/multi-shipping.js') ?>", - function () { - jQuery('#checkout_multishipping_form').multiShipping().validation(); - } - ); -</script> diff --git a/app/code/Magento/Multishipping/view/frontend/checkout/billing.phtml b/app/code/Magento/Multishipping/view/frontend/checkout/billing.phtml index a84c1ceade9..42d83d4dff6 100644 --- a/app/code/Magento/Multishipping/view/frontend/checkout/billing.phtml +++ b/app/code/Magento/Multishipping/view/frontend/checkout/billing.phtml @@ -74,24 +74,18 @@ </div> </form> <script type="text/javascript"> - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/payment.js') ?>", - function() { - jQuery('#multishipping-billing-form').payment({ - checkoutPrice: <?php echo (float)$this->getQuoteBaseGrandTotal(); ?> - }).validation({ - errorPlacement: function(error, element) { - if (element.attr('data-validate') && element.attr('data-validate').indexOf('validate-cc-ukss') >= 0) { - element.parents('form').find('[data-validation-msg="validate-cc-ukss"]').html(error); - } else { - element.after(error); - } - } - }); - }); + var addtocartForm = jQuery('#multishipping-billing-form'); + addtocartForm.mage('payment', { + checkoutPrice: <?php echo (float)$this->getQuoteBaseGrandTotal(); ?> + }); + addtocartForm.mage('validation', { + errorPlacement: function(error, element) { + if (element.attr('data-validate') && element.attr('data-validate').indexOf('validate-cc-ukss') >= 0) { + element.parents('form').find('[data-validation-msg="validate-cc-ukss"]').html(error); + } else { + element.after(error); + } + } + }); </script> diff --git a/app/code/Magento/Multishipping/view/frontend/checkout/overview.phtml b/app/code/Magento/Multishipping/view/frontend/checkout/overview.phtml index 9acb15c2fa0..acb1a130091 100644 --- a/app/code/Magento/Multishipping/view/frontend/checkout/overview.phtml +++ b/app/code/Magento/Multishipping/view/frontend/checkout/overview.phtml @@ -24,7 +24,7 @@ */ ?> <?php /** @var $this \Magento\Multishipping\Block\Checkout\Overview */ ?> -<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="review-order-form" class="form multicheckout overview"> +<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="review-order-form" data-mage-init='{"orderOverview": {}}' class="form multicheckout overview"> <div class="block billing"> <div class="title"><strong><?php echo __('Billing Information') ?></strong></div> <div class="box address"> @@ -178,8 +178,3 @@ </div> </div> </form> -<script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Checkout::js/overview.js')?>", function() { - jQuery('#review-order-form').orderOverview(); - }); -</script> diff --git a/app/code/Magento/Multishipping/view/frontend/js/components.phtml b/app/code/Magento/Multishipping/view/frontend/js/components.phtml new file mode 100644 index 00000000000..a9a5166f891 --- /dev/null +++ b/app/code/Magento/Multishipping/view/frontend/js/components.phtml @@ -0,0 +1,40 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + multiShipping: [ + '<?php echo $this->getViewFileUrl('Magento_Multishipping::js/multi-shipping.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_addresses.xml b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_addresses.xml index d5323e39011..2668fbd06c2 100644 --- a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_addresses.xml +++ b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_addresses.xml @@ -40,4 +40,7 @@ </block> </referenceContainer> <block class="Magento\Framework\View\Element\Template" name="additional.product.info" template="Magento_Core::template.phtml"/> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Template" name="multishipping_checkout_addresses_page_head_components" template="Magento_Multishipping::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_billing.xml b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_billing.xml index fdea8ae6ebc..39c04becb1d 100644 --- a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_billing.xml +++ b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_billing.xml @@ -36,4 +36,7 @@ <container name="payment_methods_after" label="Payment Methods After"/> </block> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="multishipping_checkout_billing_page_head_components" template="Magento_Checkout::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_product_view.xml b/app/code/Magento/Newsletter/view/frontend/js/components.phtml similarity index 64% rename from app/design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_product_view.xml rename to app/code/Magento/Newsletter/view/frontend/js/components.phtml index 964aa4638fa..2787de961cd 100644 --- a/app/design/frontend/Magento/plushe/Magento_Catalog/layout/catalog_product_view.xml +++ b/app/code/Magento/Newsletter/view/frontend/js/components.phtml @@ -1,5 +1,4 @@ -<?xml version="1.0"?> -<!-- +<?php /** * Magento * @@ -19,12 +18,23 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category design + * @package base_default * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <move element="product.info" destination="product.info.main" after="product.tierprices"/> - <move element="page.main.title" destination="product.info.main" before="-"/> - <move element="product.info.overview" destination="product.info.details" before="-" as="product_overview"/> -</layout> +?> + <script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + newsletter: [ + '<?php echo $this->getViewFileUrl('Magento_Newsletter::newsletter.js')?>' + ] + }); + })(jQuery); + </script> +<?php echo $this->getChildHtml() ?> \ No newline at end of file diff --git a/app/code/Magento/Newsletter/view/frontend/layout/default.xml b/app/code/Magento/Newsletter/view/frontend/layout/default.xml index ec94be2ae87..4fd3f76cafd 100644 --- a/app/code/Magento/Newsletter/view/frontend/layout/default.xml +++ b/app/code/Magento/Newsletter/view/frontend/layout/default.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="newsletter_head_components" template="Magento_Newsletter::js/components.phtml"/> + </referenceBlock> <referenceContainer name="footer"> <block class="Magento\Newsletter\Block\Subscribe" name="form.subscribe" as="subscribe" before="-" template="subscribe.phtml"/> </referenceContainer> diff --git a/app/code/Magento/Newsletter/view/frontend/subscribe.phtml b/app/code/Magento/Newsletter/view/frontend/subscribe.phtml index 72e17c09681..df99b50994a 100644 --- a/app/code/Magento/Newsletter/view/frontend/subscribe.phtml +++ b/app/code/Magento/Newsletter/view/frontend/subscribe.phtml @@ -32,6 +32,7 @@ <div class="control"> <input name="email" type="email" id="newsletter" placeholder="<?php echo __('Enter your email address') ?>" + data-mage-init='{"newsletter":{"formSelector": "#newsletter-validate-detail", "placeholder": "<?php echo __('Enter your email address') ?>"}}' data-validate="{required:true, 'validate-email':true}"/> </div> </div> @@ -44,20 +45,3 @@ </form> </div> </div> - -<script type="text/javascript"> - //<![CDATA[ - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Newsletter::newsletter.js')?>", function() { - $('#newsletter').newsletter({ - formSelector: '#newsletter-validate-detail', - placeholder: '<?php echo __('Enter your email address') ?>' - }); - }); - })(jQuery); - //]]> -</script> diff --git a/app/code/Magento/OfflinePayments/view/frontend/form/ccsave.phtml b/app/code/Magento/OfflinePayments/view/frontend/form/ccsave.phtml index 5f3abdadc9b..cf91b1d9310 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/form/ccsave.phtml +++ b/app/code/Magento/OfflinePayments/view/frontend/form/ccsave.phtml @@ -34,7 +34,9 @@ <div class="field type required"> <label for="<?php echo $_code ?>_cc_type" class="label"><span><?php echo __('Credit Card Type') ?></span></label> <div class="control"> - <select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" title="<?php echo __('Credit Card Type') ?>" data-validate='{required:true, "validate-cc-type-select":"#<?php echo $_code ?>_cc_number"}' class="select"> + <select id="<?php echo $_code ?>_cc_type" + data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php echo $_code ?>_cc_type_ss_div"}}' + name="payment[cc_type]" title="<?php echo __('Credit Card Type') ?>" data-validate='{required:true, "validate-cc-type-select":"#<?php echo $_code ?>_cc_number"}' class="select"> <option value=""><?php echo __('--Please Select--') ?></option> <?php $_ccType = $this->getInfoData('cc_type') ?> <?php foreach ($this->getCcAvailableTypes() as $_typeCode => $_typeName): ?> @@ -135,13 +137,6 @@ </div> <div class="adv container" data-validation-msg="validate-cc-ukss"> </div> </div> - <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Payment::cc-type.js')?>", function() { - jQuery('#<?php echo $_code ?>_cc_type').creditCardType({ - creditCardTypeContainer: '#<?php echo $_code ?>_cc_type_ss_div' - }); - }); - </script> </div> <?php endif; ?> <?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/PageCache/view/frontend/javascript.phtml b/app/code/Magento/PageCache/view/frontend/javascript.phtml index dac67a9a75b..5b7fb5be0fb 100644 --- a/app/code/Magento/PageCache/view/frontend/javascript.phtml +++ b/app/code/Magento/PageCache/view/frontend/javascript.phtml @@ -26,9 +26,7 @@ <script type="text/javascript"> //<![CDATA[ (function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_PageCache::js/page-cache.js')?>", function () { - $('body').pageCache(<?php echo $this->getScriptOptions(); ?>); - }); + $('body').mage('pageCache', <?php echo $this->getScriptOptions(); ?>); })(jQuery); //]]> </script> \ No newline at end of file diff --git a/app/code/Magento/Bundle/view/frontend/layout/catalog_category_view.xml b/app/code/Magento/PageCache/view/frontend/js/components.phtml similarity index 60% rename from app/code/Magento/Bundle/view/frontend/layout/catalog_category_view.xml rename to app/code/Magento/PageCache/view/frontend/js/components.phtml index 83782e0ab43..c4d3f46b193 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/catalog_category_view.xml +++ b/app/code/Magento/PageCache/view/frontend/js/components.phtml @@ -1,5 +1,4 @@ -<?xml version="1.0"?> -<!-- +<?php /** * Magento * @@ -19,16 +18,26 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category design + * @package base_default * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <referenceBlock name="product_list"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </referenceBlock> -</layout> +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + formKey: [ + '<?php echo $this->getViewFileUrl('Magento_PageCache::js/form-key.js') ?>' + ], + pageCache: [ + '<?php echo $this->getViewFileUrl('Magento_PageCache::js/page-cache.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/PageCache/view/frontend/layout/default.xml b/app/code/Magento/PageCache/view/frontend/layout/default.xml index f70f74c3636..d63532d151f 100644 --- a/app/code/Magento/PageCache/view/frontend/layout/default.xml +++ b/app/code/Magento/PageCache/view/frontend/layout/default.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="pagecache_page_head_components" template="Magento_PageCache::js/components.phtml"/> + </referenceBlock> <referenceBlock name="head"> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-pagecache-comments-js" after="jquery-jquery-js"> <arguments> diff --git a/app/code/Magento/Payment/Model/Checks/CanUseCheckout.php b/app/code/Magento/Payment/Model/Checks/CanUseCheckout.php index 3dede9b3bbe..890dfa4143f 100644 --- a/app/code/Magento/Payment/Model/Checks/CanUseCheckout.php +++ b/app/code/Magento/Payment/Model/Checks/CanUseCheckout.php @@ -26,18 +26,17 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class CanUseCheckout implements SpecificationInterface { /** * Check whether payment method is applicable to quote * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { return $paymentMethod->canUseCheckout(); } diff --git a/app/code/Magento/Payment/Model/Checks/CanUseForCountry.php b/app/code/Magento/Payment/Model/Checks/CanUseForCountry.php index 2ff38a2ad34..75242196b6a 100644 --- a/app/code/Magento/Payment/Model/Checks/CanUseForCountry.php +++ b/app/code/Magento/Payment/Model/Checks/CanUseForCountry.php @@ -26,17 +26,16 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class CanUseForCountry implements SpecificationInterface { /** * Check whether payment method is applicable to quote - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { return $paymentMethod->canUseForCountry($quote->getBillingAddress()->getCountry()); } diff --git a/app/code/Magento/Payment/Model/Checks/CanUseForCurrency.php b/app/code/Magento/Payment/Model/Checks/CanUseForCurrency.php index 4c3449699c0..90bdc8630b1 100644 --- a/app/code/Magento/Payment/Model/Checks/CanUseForCurrency.php +++ b/app/code/Magento/Payment/Model/Checks/CanUseForCurrency.php @@ -26,7 +26,6 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class CanUseForCurrency implements SpecificationInterface { @@ -34,11 +33,11 @@ class CanUseForCurrency implements SpecificationInterface * Check whether payment method is applicable to quote * Purposed to allow use in controllers some logic that was implemented in blocks only before * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { return $paymentMethod->canUseForCurrency($quote->getStore()->getBaseCurrencyCode()); } diff --git a/app/code/Magento/Payment/Model/Checks/CanUseInternal.php b/app/code/Magento/Payment/Model/Checks/CanUseInternal.php index 47f4fa966ed..ee149c89a51 100644 --- a/app/code/Magento/Payment/Model/Checks/CanUseInternal.php +++ b/app/code/Magento/Payment/Model/Checks/CanUseInternal.php @@ -26,7 +26,6 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class CanUseInternal implements SpecificationInterface { @@ -34,11 +33,11 @@ class CanUseInternal implements SpecificationInterface * Check whether payment method is applicable to quote * Purposed to allow use in controllers some logic that was implemented in blocks only before * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { return $paymentMethod->canUseInternal(); } diff --git a/app/code/Magento/Payment/Model/Checks/Composite.php b/app/code/Magento/Payment/Model/Checks/Composite.php index 1606a8fd7a6..be0f38ef5f8 100644 --- a/app/code/Magento/Payment/Model/Checks/Composite.php +++ b/app/code/Magento/Payment/Model/Checks/Composite.php @@ -26,7 +26,6 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class Composite implements SpecificationInterface { @@ -44,11 +43,11 @@ class Composite implements SpecificationInterface /** * Check whether payment method is applicable to quote * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { foreach ($this->list as $specification) { if (!$specification->isApplicable($paymentMethod, $quote)) { diff --git a/app/code/Magento/Payment/Model/Checks/PaymentMethodChecksInterface.php b/app/code/Magento/Payment/Model/Checks/PaymentMethodChecksInterface.php new file mode 100644 index 00000000000..4de32c4f16c --- /dev/null +++ b/app/code/Magento/Payment/Model/Checks/PaymentMethodChecksInterface.php @@ -0,0 +1,78 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Payment\Model\Checks; + +/** + * Payment method interface for specification checks + */ +interface PaymentMethodChecksInterface +{ + /** + * Retrieve payment method code + * + * @return string + */ + public function getCode(); + + /** + * Using internal pages for input payment data + * Can be used in admin + * + * @return bool + */ + public function canUseInternal(); + + /** + * Can be used in regular checkout + * + * @return bool + */ + public function canUseCheckout(); + + /** + * To check billing country is allowed for the payment method + * + * @param string $country + * @return bool + */ + public function canUseForCountry($country); + + /** + * Check method for processing with base currency + * + * @param string $currencyCode + * @return bool + */ + public function canUseForCurrency($currencyCode); + + /** + * Retrieve information from payment configuration + * + * @param string $field + * @param int|string|null|\Magento\Store\Model\Store $storeId + * + * @return mixed + */ + public function getConfigData($field, $storeId = null); +} diff --git a/app/code/Magento/Payment/Model/Checks/SpecificationInterface.php b/app/code/Magento/Payment/Model/Checks/SpecificationInterface.php index 6204d2f27be..4de95e48cd8 100644 --- a/app/code/Magento/Payment/Model/Checks/SpecificationInterface.php +++ b/app/code/Magento/Payment/Model/Checks/SpecificationInterface.php @@ -24,19 +24,18 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; /** - * Payment method abstract model + * Specification checks interface */ interface SpecificationInterface { /** * Check whether payment method is applicable to quote * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote); + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote); } diff --git a/app/code/Magento/Payment/Model/Checks/TotalMinMax.php b/app/code/Magento/Payment/Model/Checks/TotalMinMax.php index 275479f9f8e..ef21dee8cb8 100644 --- a/app/code/Magento/Payment/Model/Checks/TotalMinMax.php +++ b/app/code/Magento/Payment/Model/Checks/TotalMinMax.php @@ -26,18 +26,17 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class TotalMinMax implements SpecificationInterface { /** * Check whether payment method is applicable to quote * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { $total = $quote->getBaseGrandTotal(); $minTotal = $paymentMethod->getConfigData('min_order_total'); diff --git a/app/code/Magento/Payment/Model/Checks/ZeroTotal.php b/app/code/Magento/Payment/Model/Checks/ZeroTotal.php index 8b2143fa21b..b459dacd42a 100644 --- a/app/code/Magento/Payment/Model/Checks/ZeroTotal.php +++ b/app/code/Magento/Payment/Model/Checks/ZeroTotal.php @@ -26,7 +26,6 @@ namespace Magento\Payment\Model\Checks; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; class ZeroTotal implements SpecificationInterface { @@ -34,11 +33,11 @@ class ZeroTotal implements SpecificationInterface * Check whether payment method is applicable to quote * Purposed to allow use in controllers some logic that was implemented in blocks only before * - * @param \Magento\Payment\Model\Method\AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param \Magento\Sales\Model\Quote $quote * @return bool */ - public function isApplicable(AbstractMethod $paymentMethod, Quote $quote) + public function isApplicable(PaymentMethodChecksInterface $paymentMethod, Quote $quote) { $total = $quote->getBaseSubtotal() + $quote->getShippingAddress()->getBaseShippingAmount(); return !($total < 0.0001 && $paymentMethod->getCode() != 'free'); diff --git a/app/code/Magento/Payment/Model/Method/AbstractMethod.php b/app/code/Magento/Payment/Model/Method/AbstractMethod.php index 3faf6d595b2..e775c0846bb 100644 --- a/app/code/Magento/Payment/Model/Method/AbstractMethod.php +++ b/app/code/Magento/Payment/Model/Method/AbstractMethod.php @@ -25,11 +25,13 @@ namespace Magento\Payment\Model\Method; use Magento\Sales\Model\Order\Invoice; use Magento\Sales\Model\Order\Payment; +use Magento\Payment\Model\MethodInterface; +use Magento\Payment\Model\Checks\PaymentMethodChecksInterface; /** * Payment method abstract model */ -abstract class AbstractMethod extends \Magento\Framework\Object implements \Magento\Payment\Model\MethodInterface +abstract class AbstractMethod extends \Magento\Framework\Object implements MethodInterface, PaymentMethodChecksInterface { const ACTION_ORDER = 'order'; diff --git a/app/code/Magento/Payment/view/frontend/form/cc.phtml b/app/code/Magento/Payment/view/frontend/form/cc.phtml index f00b0f21cbe..879db992574 100644 --- a/app/code/Magento/Payment/view/frontend/form/cc.phtml +++ b/app/code/Magento/Payment/view/frontend/form/cc.phtml @@ -28,7 +28,9 @@ <div class="field type required"> <label for="<?php echo $_code ?>_cc_type" class="label"><span><?php echo __('Credit Card Type') ?></span></label> <div class="control"> - <select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php echo $_code ?>_cc_number"}' class="select"> + <select id="<?php echo $_code ?>_cc_type" + data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php echo $_code ?>_cc_type_ss_div"}}' + name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php echo $_code ?>_cc_number"}' class="select"> <option value=""><?php echo __('--Please Select--')?></option> <?php $_ccType = $this->getInfoData('cc_type') ?> <?php foreach ($this->getCcAvailableTypes() as $_typeCode => $_typeName): ?> @@ -127,13 +129,6 @@ </div> <div class="adv container" data-validation-msg="validate-cc-ukss"> </div> </div> - <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Payment::cc-type.js')?>", function() { - jQuery('#<?php echo $_code ?>_cc_type').creditCardType({ - creditCardTypeContainer: '#<?php echo $_code ?>_cc_type_ss_div' - }); - }); - </script> </div> <?php endif; ?> <?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php b/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php index 290f245582d..331e610c624 100644 --- a/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php +++ b/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php @@ -23,6 +23,8 @@ */ namespace Magento\Paypal\Block\Adminhtml\Customer\Edit\Tab; +use Magento\Customer\Controller\RegistryConstants; + /** * Adminhtml customer billing agreement tab */ @@ -97,8 +99,7 @@ class Agreement extends \Magento\Paypal\Block\Adminhtml\Billing\Agreement\Grid i */ public function canShowTab() { - $customer = $this->_coreRegistry->registry('current_customer'); - return !is_null($customer); + return !is_null($this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID)); } /** diff --git a/app/code/Magento/Paypal/view/frontend/express/review.phtml b/app/code/Magento/Paypal/view/frontend/express/review.phtml index c8ca7cd5f0a..d7b3c204b77 100644 --- a/app/code/Magento/Paypal/view/frontend/express/review.phtml +++ b/app/code/Magento/Paypal/view/frontend/express/review.phtml @@ -104,16 +104,9 @@ $shippingAddress = $this->getShippingAddress(); </form> </div> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Paypal::order-review.js') ?>", - function () { - jQuery('#order-review-form').validation().orderReview({ - shippingMethodUpdateUrl: '<?php echo $this->escapeHtml($this->getUpdateShippingMethodsUrl()) ?>', - updateOrderSubmitUrl: '<?php echo $this->escapeHtml($this->getUpdateOrderSubmitUrl()) ?>', - isAjax: <?php echo $this->getUseAjax() ? 'true' : 'false' ?> - }); - }); + jQuery('#order-review-form').mage('validation', {}).mage('orderReview', { + shippingMethodUpdateUrl: '<?php echo $this->escapeHtml($this->getUpdateShippingMethodsUrl()) ?>', + updateOrderSubmitUrl: '<?php echo $this->escapeHtml($this->getUpdateOrderSubmitUrl()) ?>', + isAjax: <?php echo $this->getUseAjax() ? 'true' : 'false' ?> + }); </script> diff --git a/app/code/Magento/Paypal/view/frontend/express/review/address.phtml b/app/code/Magento/Paypal/view/frontend/express/review/address.phtml index e9e7d78e1b7..082bd6a3eff 100644 --- a/app/code/Magento/Paypal/view/frontend/express/review/address.phtml +++ b/app/code/Magento/Paypal/view/frontend/express/review/address.phtml @@ -182,22 +182,14 @@ echo $nameWidget <script type="text/javascript"> (function ($) { - head.js( - "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", - function () { - $('#<?php echo $prefix ?>\\:country_id').regionUpdater({ - optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, - regionListId: '#<?php echo $prefix ?>\\:region_id', - regionInputId: '#<?php echo $prefix ?>\\:region', - postcodeId: '#<?php echo $prefix ?>\\:postcode', - regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", - countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> - }); - }); + $('#<?php echo $prefix ?>\\:country_id').mage('regionUpdater', { + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#<?php echo $prefix ?>\\\:region_id', + regionInputId: '#<?php echo $prefix ?>\\\:region', + postcodeId: '#<?php echo $prefix ?>\\\:postcode', + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); })(jQuery); </script> diff --git a/app/code/Magento/Paypal/view/frontend/express/shortcut.phtml b/app/code/Magento/Paypal/view/frontend/express/shortcut.phtml index 0ad486c4f4c..dc8f2026d26 100644 --- a/app/code/Magento/Paypal/view/frontend/express/shortcut.phtml +++ b/app/code/Magento/Paypal/view/frontend/express/shortcut.phtml @@ -53,17 +53,15 @@ if ($this->isOrPositionBefore()) { endif; ?> <script type="text/javascript"> (function ($) { - head.js( - "<?php echo $this->getViewFileUrl('Magento_Paypal::js/paypal-checkout.js') ?>", - function () { - $('.paypal-logo').paypalCheckout({ - confirmMessage: "<?php echo $this->escapeJsQuote($this->getConfirmationMessage())?>", - confirmUrl: "<?php echo !empty($confirmationUrl) ? $confirmationUrl : false ?>", - isCatalogProduct: "<?php echo !empty($isInCatalogProduct) ? $isInCatalogProduct : false ?>", - paypalCheckoutSelector: '#pp-checkout-url', - productAddToCartForm: '#product_addtocart_form' - }); + head.js("<?php echo $this->getViewFileUrl('Magento_Paypal::js/paypal-checkout.js') ?>", head.ready(function () { + $('.paypal-logo').paypalCheckout({ + confirmMessage: "<?php echo $this->escapeJsQuote($this->getConfirmationMessage())?>", + confirmUrl: "<?php echo !empty($confirmationUrl) ? $confirmationUrl : false ?>", + isCatalogProduct: "<?php echo !empty($isInCatalogProduct) ? $isInCatalogProduct : false ?>", + paypalCheckoutSelector: '#pp-checkout-url', + productAddToCartForm: '#product_addtocart_form' }); + })); })(jQuery); </script> </div> diff --git a/app/code/Magento/Paypal/view/frontend/js/components.phtml b/app/code/Magento/Paypal/view/frontend/js/components.phtml new file mode 100644 index 00000000000..a54db67f155 --- /dev/null +++ b/app/code/Magento/Paypal/view/frontend/js/components.phtml @@ -0,0 +1,46 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + accordion: [ + '<?php echo $this->getViewFileUrl('Magento_Checkout::js/accordion.js') ?>' + ], + opcheckoutPaypalIframe: [ + '<?php echo $this->getViewFileUrl('Magento_Paypal::js/opcheckout.js') ?>' + ], + orderReview: [ + '<?php echo $this->getViewFileUrl('Magento_Paypal::order-review.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Paypal/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Paypal/view/frontend/layout/checkout_onepage_index.xml index 19cd84f498b..f8ed5a58e7f 100644 --- a/app/code/Magento/Paypal/view/frontend/layout/checkout_onepage_index.xml +++ b/app/code/Magento/Paypal/view/frontend/layout/checkout_onepage_index.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="paypal_opcheckout_head_components" template="Magento_Paypal::js/components.phtml"/> + </referenceBlock> <referenceContainer name="content"> <block class="Magento\Framework\View\Element\Template" name="checkout.onepage.paypal.js" after="checkout.onepage" template="Magento_Paypal::onepage.phtml"/> </referenceContainer> diff --git a/app/code/Magento/Paypal/view/frontend/layout/paypal_express_review.xml b/app/code/Magento/Paypal/view/frontend/layout/paypal_express_review.xml index 6986d991ad7..4629e28332c 100644 --- a/app/code/Magento/Paypal/view/frontend/layout/paypal_express_review.xml +++ b/app/code/Magento/Paypal/view/frontend/layout/paypal_express_review.xml @@ -25,6 +25,10 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="checkout_onepage_review_item_renderers" /> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="paypal_express_review_checkout_head_components" template="Magento_Checkout::js/components.phtml"/> + <block class="Magento\Framework\View\Element\Js\Components" name="paypal_express_review_head_components" template="Magento_Paypal::js/components.phtml"/> + </referenceBlock> <referenceBlock name="root"> <action method="setTemplate"> <argument name="template" xsi:type="string">1column.phtml</argument> diff --git a/app/code/Magento/Paypal/view/frontend/layout/paypal_payflowexpress_review.xml b/app/code/Magento/Paypal/view/frontend/layout/paypal_payflowexpress_review.xml index d307d447492..c4e09be89b6 100644 --- a/app/code/Magento/Paypal/view/frontend/layout/paypal_payflowexpress_review.xml +++ b/app/code/Magento/Paypal/view/frontend/layout/paypal_payflowexpress_review.xml @@ -44,4 +44,7 @@ </block> </block> </referenceContainer> + <referenceBlock name="head"> + <block class="Magento\Framework\View\Element\Js\Components" name="head.components" as="components" template="Magento_Paypal::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Paypal/view/frontend/onepage.phtml b/app/code/Magento/Paypal/view/frontend/onepage.phtml index 937f731c16e..4e4e5a15be9 100644 --- a/app/code/Magento/Paypal/view/frontend/onepage.phtml +++ b/app/code/Magento/Paypal/view/frontend/onepage.phtml @@ -24,14 +24,8 @@ ?> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('Magento_Paypal::js/opcheckout.js')?>", - function() { - $('#checkoutSteps') - .accordion({ - activeSelector: '#opc-<?php echo $this->getActiveStep() ?>' - }).opcheckoutPaypalIframe(); - } - ); + $('#checkoutSteps').mage('accordion', { + 'activeSelector': '#opc-<?php echo $this->getActiveStep() ?>' + }).mage('opcheckoutPaypalIframe', {}); })(jQuery); </script> diff --git a/app/code/Magento/Paypal/view/frontend/payflowexpress/review.phtml b/app/code/Magento/Paypal/view/frontend/payflowexpress/review.phtml index af5ee6bdbd3..ddb21051118 100644 --- a/app/code/Magento/Paypal/view/frontend/payflowexpress/review.phtml +++ b/app/code/Magento/Paypal/view/frontend/payflowexpress/review.phtml @@ -149,18 +149,11 @@ </div> </div> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Paypal::order-review.js') ?>", - function () { - jQuery('#order-review-form').validation().orderReview({ - shippingSubmitFormSelector: '#shipping-method-form', - shippingSelector: '#shipping-method', - shippingMethodUpdateUrl: '<?php echo $this->escapeHtml($this->getUpdateShippingMethodsUrl()) ?>', - updateOrderSubmitUrl: '<?php echo $this->escapeHtml($this->getUpdateOrderSubmitUrl()) ?>', - isAjax: <?php echo $this->getUseAjax() ? 'true' : 'false' ?> - }); - }); + jQuery('#order-review-form').mage('validation', {}).mage('orderReview', { + shippingSubmitFormSelector: '#shipping-method-form', + shippingSelector: '#shipping-method', + shippingMethodUpdateUrl: '<?php echo $this->escapeHtml($this->getUpdateShippingMethodsUrl()) ?>', + updateOrderSubmitUrl: '<?php echo $this->escapeHtml($this->getUpdateOrderSubmitUrl()) ?>', + isAjax: <?php echo $this->getUseAjax() ? 'true' : 'false' ?> + }); </script> diff --git a/app/code/Magento/Persistent/view/frontend/js/components.phtml b/app/code/Magento/Persistent/view/frontend/js/components.phtml new file mode 100644 index 00000000000..7a6e9f66703 --- /dev/null +++ b/app/code/Magento/Persistent/view/frontend/js/components.phtml @@ -0,0 +1,40 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + rememberMePopup: [ + '<?php echo $this->getViewFileUrl('Magento_Persistent::remember-me-popup.js')?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_index.xml index f92cf75ab79..5835257bfd2 100644 --- a/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_index.xml +++ b/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_index.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="persistent_onepage_head_components" template="Magento_Persistent::js/components.phtml"/> + </referenceBlock> <referenceContainer name="form.login.additional.info"> <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me" template="remember_me.phtml" before="-"/> <block class="Magento\Framework\View\Element\Template" name="persistent.remember.me.tooltip" template="Magento_Persistent::remember_me_tooltip.phtml"/> diff --git a/app/code/Magento/Persistent/view/frontend/layout/customer_account_create.xml b/app/code/Magento/Persistent/view/frontend/layout/customer_account_create.xml index c1f545e5b13..1347bd0811b 100644 --- a/app/code/Magento/Persistent/view/frontend/layout/customer_account_create.xml +++ b/app/code/Magento/Persistent/view/frontend/layout/customer_account_create.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="persistent_customer_create_head_components" template="Magento_Persistent::js/components.phtml"/> + </referenceBlock> <referenceContainer name="form.additional.info"> <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me" template="remember_me.phtml" before="-"/> <block class="Magento\Framework\View\Element\Template" name="persistent.remember.me.tooltip" template="Magento_Persistent::remember_me_tooltip.phtml"/> diff --git a/app/code/Magento/Persistent/view/frontend/layout/customer_account_login.xml b/app/code/Magento/Persistent/view/frontend/layout/customer_account_login.xml index c1f545e5b13..389517c16ec 100644 --- a/app/code/Magento/Persistent/view/frontend/layout/customer_account_login.xml +++ b/app/code/Magento/Persistent/view/frontend/layout/customer_account_login.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="persistent_customer_login_head_components" template="Magento_Persistent::js/components.phtml"/> + </referenceBlock> <referenceContainer name="form.additional.info"> <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me" template="remember_me.phtml" before="-"/> <block class="Magento\Framework\View\Element\Template" name="persistent.remember.me.tooltip" template="Magento_Persistent::remember_me_tooltip.phtml"/> diff --git a/app/code/Magento/Persistent/view/frontend/remember_me_tooltip.phtml b/app/code/Magento/Persistent/view/frontend/remember_me_tooltip.phtml index e143906ac1f..83ff60451c3 100644 --- a/app/code/Magento/Persistent/view/frontend/remember_me_tooltip.phtml +++ b/app/code/Magento/Persistent/view/frontend/remember_me_tooltip.phtml @@ -33,14 +33,10 @@ ?> <script type="text/javascript"> (function($) { - head.js( - "<?php echo $this->getViewFileUrl('Magento_Persistent::remember-me-popup.js') ?>", - function() { - $('#remember-me-box').rememberMePopup({ - title: '<?php echo __('What is this?');?>', - close: '<?php echo __('Close');?>', - content: '<?php echo __('Check "Remember Me" to access your shopping cart on this computer when you are logged out')?>' - }); - }); + $('#remember-me-box').mage("rememberMePopup", { + title: '<?php echo __('What is this?');?>', + close: '<?php echo __('Close');?>', + content: '<?php echo __('Check "Remember Me" to access your shopping cart on this computer when you are logged out')?>' + }); })(jQuery); </script> diff --git a/app/code/Magento/ProductAlert/Block/Email/AbstractEmail.php b/app/code/Magento/ProductAlert/Block/Email/AbstractEmail.php index e5b06eb3555..5619649a8f1 100644 --- a/app/code/Magento/ProductAlert/Block/Email/AbstractEmail.php +++ b/app/code/Magento/ProductAlert/Block/Email/AbstractEmail.php @@ -134,4 +134,49 @@ abstract class AbstractEmail extends \Magento\Framework\View\Element\Template { return array('_scope' => $this->getStore(), '_scope_to_url' => true); } + + /** + * @return \Magento\Framework\Pricing\Render + */ + protected function getPriceRender() + { + return $this->_layout->createBlock( + 'Magento\Framework\Pricing\Render', + '', + ['data'=> ['price_render_handle' => 'catalog_product_prices']] + ); + } + + /** + * Return HTML block with tier price + * + * @param \Magento\Catalog\Model\Product $product + * @param string $priceType + * @param string $renderZone + * @param array $arguments + * @return string + */ + public function getProductPriceHtml( + \Magento\Catalog\Model\Product $product, + $priceType, + $renderZone = \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST, + array $arguments = [] + ) { + if (!isset($arguments['zone'])) { + $arguments['zone'] = $renderZone; + } + + /** @var \Magento\Framework\Pricing\Render $priceRender */ + $priceRender = $this->getPriceRender(); + $price = ''; + + if ($priceRender) { + $price = $priceRender->render( + $priceType, + $product, + $arguments + ); + } + return $price; + } } diff --git a/app/code/Magento/ProductAlert/Model/Email.php b/app/code/Magento/ProductAlert/Model/Email.php index 5182a57e706..963f863baf4 100644 --- a/app/code/Magento/ProductAlert/Model/Email.php +++ b/app/code/Magento/ProductAlert/Model/Email.php @@ -352,7 +352,7 @@ class Email extends \Magento\Framework\Model\AbstractModel $product->setCustomerGroupId($this->_customer->getGroupId()); $this->_getPriceBlock()->addProduct($product); } - $block = $this->_getPriceBlock()->toHtml(); + $block = $this->_getPriceBlock(); $templateId = $this->_scopeConfig->getValue( self::XML_PATH_EMAIL_PRICE_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, @@ -364,7 +364,7 @@ class Email extends \Magento\Framework\Model\AbstractModel $product->setCustomerGroupId($this->_customer->getGroupId()); $this->_getStockBlock()->addProduct($product); } - $block = $this->_getStockBlock()->toHtml(); + $block = $this->_getStockBlock(); $templateId = $this->_scopeConfig->getValue( self::XML_PATH_EMAIL_STOCK_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, @@ -372,6 +372,10 @@ class Email extends \Magento\Framework\Model\AbstractModel ); } + $alertGrid = $this->_appState->emulateAreaCode( + \Magento\Framework\App\Area::AREA_FRONTEND, + array($block, 'toHtml') + ); $this->_appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo); $transport = $this->_transportBuilder->setTemplateIdentifier( @@ -379,7 +383,10 @@ class Email extends \Magento\Framework\Model\AbstractModel )->setTemplateOptions( array('area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $storeId) )->setTemplateVars( - array('customerName' => $this->_customerHelper->getCustomerName($this->_customer), 'alertGrid' => $block) + array( + 'customerName' => $this->_customerHelper->getCustomerName($this->_customer), + 'alertGrid' => $alertGrid + ) )->setFrom( $this->_scopeConfig->getValue( self::XML_PATH_EMAIL_IDENTITY, diff --git a/app/code/Magento/ProductAlert/Model/Observer.php b/app/code/Magento/ProductAlert/Model/Observer.php index 77fea2809d7..b6da42c1d3a 100644 --- a/app/code/Magento/ProductAlert/Model/Observer.php +++ b/app/code/Magento/ProductAlert/Model/Observer.php @@ -241,6 +241,7 @@ class Observer $customer = $previousCustomer; } + /** @var \Magento\Catalog\Model\Product $product */ $product = $this->_productFactory->create()->setStoreId( $website->getDefaultStore()->getId() )->load( diff --git a/app/code/Magento/ProductAlert/etc/crontab.xml b/app/code/Magento/ProductAlert/etc/crontab.xml index cdb453b3845..89bb9b70d9f 100644 --- a/app/code/Magento/ProductAlert/etc/crontab.xml +++ b/app/code/Magento/ProductAlert/etc/crontab.xml @@ -25,6 +25,8 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Cron/etc/crontab.xsd"> <group id="default"> - <job name="catalog_product_alert" instance="Magento\ProductAlert\Model\Observer" method="process" /> + <job name="catalog_product_alert" instance="Magento\ProductAlert\Model\Observer" method="process"> + <config_path>crontab/default/jobs/catalog_product_alert/schedule/cron_expr</config_path> + </job> </group> </config> diff --git a/app/code/Magento/ProductAlert/view/frontend/email/price.phtml b/app/code/Magento/ProductAlert/view/frontend/email/price.phtml index 61494aed8a6..50b586a1dbf 100644 --- a/app/code/Magento/ProductAlert/view/frontend/email/price.phtml +++ b/app/code/Magento/ProductAlert/view/frontend/email/price.phtml @@ -22,10 +22,13 @@ * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ + +/** @var $this \Magento\ProductAlert\Block\Email\Price */ ?> <?php if ($_products = $this->getProducts()): ?> <p><?php echo __('You are receiving this notification because you subscribed to receive alerts when the prices for the following products changed:') ?></p> <table> +<?php /** @var $_product \Magento\Catalog\Model\Product */ ?> <?php foreach ($_products as $_product): ?> <tr> <td class="col photo"> @@ -40,14 +43,18 @@ </strong> </p> <?php if ($shortDescription = $this->escapeHtml($_product->getShortDescription())): ?> - <p><small><?php echo $shortDescription ?></small></p> + <p><small><?php echo $shortDescription ?></small></p> <?php endif; ?> - <p><?php if ($_product->getPrice() != $_product->getFinalPrice()): ?> - <?php echo __('Regular Price:') ?> <strong style="text-decoration:line-through;"><?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getPrice()) ?></strong><br /> - <strong><?php echo __('Special price:') ?> <span style="color:#FF0000;"><?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getFinalPrice()) ?></span></strong> - <?php else: ?> - <strong><?php echo __('Price:') ?></strong> <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getPrice()) ?> - <?php endif; ?></p> + <p><?php echo $this->getProductPriceHtml( + $_product, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, + \Magento\Framework\Pricing\Render::ZONE_EMAIL, + [ + 'display_label' => __('Price:') + ] + ); + ?> + </p> <p><small><a href="<?php echo $this->getProductUnsubscribeUrl($_product->getId()) ?>"><?php echo __('Click here not to receive alerts for this product.') ?></a></small></p> </td> </tr> diff --git a/app/code/Magento/ProductAlert/view/frontend/email/stock.phtml b/app/code/Magento/ProductAlert/view/frontend/email/stock.phtml index 85d4800a792..ce7238c2e04 100644 --- a/app/code/Magento/ProductAlert/view/frontend/email/stock.phtml +++ b/app/code/Magento/ProductAlert/view/frontend/email/stock.phtml @@ -22,6 +22,8 @@ * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ + +/** @var $this \Magento\ProductAlert\Block\Email\Stock */ ?> <?php if ($_products = $this->getProducts()): ?> <p><?php echo __('You are receiving this notification because you subscribed to receive alerts when the following products are back in stock:') ?></p> @@ -42,12 +44,16 @@ <?php if ($shortDescription = $this->escapeHtml($_product->getShortDescription())): ?> <p><small><?php echo $shortDescription ?></small></p> <?php endif; ?> - <p><?php if ($_product->getPrice() != $_product->getFinalPrice()): ?> - <?php echo __('Regular Price:') ?> <strong style="text-decoration:line-through;"><?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getPrice()) ?></strong><br /> - <strong><?php echo __('Special price:') ?> <span style="color:#FF0000;"><?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getFinalPrice()) ?></span></strong> - <?php else: ?> - <strong><?php echo __('Price:') ?></strong> <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getPrice()) ?> - <?php endif; ?></p> + <p><?php echo $this->getProductPriceHtml( + $_product, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, + \Magento\Framework\Pricing\Render::ZONE_EMAIL, + [ + 'display_label' => __('Price:') + ] + ); + ?> + </p> <p><small><a href="<?php echo $this->getProductUnsubscribeUrl($_product->getId()) ?>"><?php echo __('Click here not to receive alerts for this product.') ?></a></small></p> </td> </tr> diff --git a/app/code/Magento/RecurringPayment/Model/Plugin/ZeroTotal.php b/app/code/Magento/RecurringPayment/Model/Plugin/ZeroTotal.php index 999c58a2f39..053d3e7feef 100644 --- a/app/code/Magento/RecurringPayment/Model/Plugin/ZeroTotal.php +++ b/app/code/Magento/RecurringPayment/Model/Plugin/ZeroTotal.php @@ -24,7 +24,7 @@ namespace Magento\RecurringPayment\Model\Plugin; use Magento\Sales\Model\Quote; -use Magento\Payment\Model\Method\AbstractMethod; +use Magento\Payment\Model\Checks\PaymentMethodChecksInterface; use Magento\RecurringPayment\Model\Method\RecurringPaymentSpecification; /** @@ -54,7 +54,7 @@ class ZeroTotal /** * @param \Magento\Payment\Model\Checks\ZeroTotal $subject * @param callable $proceed - * @param AbstractMethod $paymentMethod + * @param PaymentMethodChecksInterface $paymentMethod * @param Quote $quote * @return bool * @@ -63,16 +63,11 @@ class ZeroTotal public function aroundIsApplicable( \Magento\Payment\Model\Checks\ZeroTotal $subject, \Closure $proceed, - AbstractMethod $paymentMethod, + PaymentMethodChecksInterface $paymentMethod, Quote $quote ) { - return $proceed( - $paymentMethod, - $quote - ) || $this->specification->isSatisfiedBy( - $paymentMethod->getCode() - ) && $this->filter->hasRecurringItems( - $quote - ); + return $proceed($paymentMethod, $quote) + || $this->specification->isSatisfiedBy($paymentMethod->getCode()) + && $this->filter->hasRecurringItems($quote); } } diff --git a/app/code/Magento/Reports/Block/Product/AbstractProduct.php b/app/code/Magento/Reports/Block/Product/AbstractProduct.php index 25455cfd54c..34e23f4c59f 100644 --- a/app/code/Magento/Reports/Block/Product/AbstractProduct.php +++ b/app/code/Magento/Reports/Block/Product/AbstractProduct.php @@ -61,19 +61,16 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr * @param \Magento\Catalog\Model\Product\Visibility $productVisibility * @param \Magento\Reports\Model\Product\Index\Factory $indexFactory * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Catalog\Model\Product\Visibility $productVisibility, \Magento\Reports\Model\Product\Index\Factory $indexFactory, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_productVisibility = $productVisibility; $this->_indexFactory = $indexFactory; diff --git a/app/code/Magento/Reports/Block/Product/Widget/Compared.php b/app/code/Magento/Reports/Block/Product/Widget/Compared.php index a8e436b459b..0a547149ce1 100644 --- a/app/code/Magento/Reports/Block/Product/Widget/Compared.php +++ b/app/code/Magento/Reports/Block/Product/Widget/Compared.php @@ -53,10 +53,5 @@ class Compared extends \Magento\Reports\Block\Product\Compared implements \Magen 'three_columns', 3 ); - $this->addPriceBlockType( - 'bundle', - 'Magento\Bundle\Block\Catalog\Product\Price', - 'catalog/product/price.phtml' - ); } } diff --git a/app/code/Magento/Reports/Block/Product/Widget/Viewed/Item.php b/app/code/Magento/Reports/Block/Product/Widget/Viewed/Item.php index e28c51eddc4..9aa322c02c9 100644 --- a/app/code/Magento/Reports/Block/Product/Widget/Viewed/Item.php +++ b/app/code/Magento/Reports/Block/Product/Widget/Viewed/Item.php @@ -38,19 +38,4 @@ class Item extends \Magento\Catalog\Block\Product\AbstractProduct implements \Ma * @var string */ protected $_indexType = \Magento\Reports\Model\Product\Index\Factory::TYPE_VIEWED; - - /** - * Internal constructor - * - * @return void - */ - protected function _construct() - { - parent::_construct(); - $this->addPriceBlockType( - 'bundle', - 'Magento\Bundle\Block\Catalog\Product\Price', - 'catalog/product/price.phtml' - ); - } } diff --git a/app/code/Magento/Reports/data/reports_setup/data-install-1.6.0.0.php b/app/code/Magento/Reports/data/reports_setup/data-install-1.6.0.0.php index 9ed4558817a..c1c85fb46de 100644 --- a/app/code/Magento/Reports/data/reports_setup/data-install-1.6.0.0.php +++ b/app/code/Magento/Reports/data/reports_setup/data-install-1.6.0.0.php @@ -66,29 +66,7 @@ $installer->endSetup(); /** @var $cms \Magento\Cms\Model\Page */ $cms = $installer->getPage()->load('home', 'identifier'); -$reportLayoutUpdate = '<!--<referenceContainer name="content"> - <block class="Magento\Catalog\Block\Product\NewProduct" name="home.catalog.product.new" alias="product_new" template="product/new.phtml" after="cms_page"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </block> - <block class="Magento\Reports\Block\Product\Viewed" name="home.reports.product.viewed" alias="product_viewed" template="home_product_viewed.phtml" after="product_new"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </block> - <block class="Magento\Reports\Block\Product\Compared" name="home.reports.product.compared" template="home_product_compared.phtml" after="product_viewed"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </block> - </referenceContainer> +$reportLayoutUpdate = '<!-- <referenceContainer name="right"> <action method="unsetChild"><argument name="alias" xsi:type="string">right.reports.product.viewed</argument></action> <action method="unsetChild"><argument name="alias" xsi:type="string">right.reports.product.compared</argument></action> diff --git a/app/code/Magento/Reports/etc/module.xml b/app/code/Magento/Reports/etc/module.xml index a65f3a6fdc7..07e86cebac6 100644 --- a/app/code/Magento/Reports/etc/module.xml +++ b/app/code/Magento/Reports/etc/module.xml @@ -41,7 +41,6 @@ <module name="Magento_Backend"/> <module name="Magento_Core"/> <module name="Magento_Widget"/> - <module name="Magento_Bundle"/> <module name="Magento_Log"/> <module name="Magento_Wishlist"/> <module name="Magento_Review"/> diff --git a/app/code/Magento/Reports/view/frontend/js/components.phtml b/app/code/Magento/Reports/view/frontend/js/components.phtml new file mode 100644 index 00000000000..f377ee72ac0 --- /dev/null +++ b/app/code/Magento/Reports/view/frontend/js/components.phtml @@ -0,0 +1,40 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + recentlyViewedProducts: [ + '<?php echo $this->getViewFileUrl('Magento_Reports::js/recently-viewed.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> \ No newline at end of file diff --git a/app/code/Magento/Reports/view/frontend/layout/default.xml b/app/code/Magento/Reports/view/frontend/layout/default.xml index 06e6c4526fb..a61e3c9a6b9 100644 --- a/app/code/Magento/Reports/view/frontend/layout/default.xml +++ b/app/code/Magento/Reports/view/frontend/layout/default.xml @@ -28,4 +28,7 @@ <block class="Magento\Reports\Block\Product\Viewed" name="right.reports.product.viewed" template="product_viewed.phtml"/> <block class="Magento\Reports\Block\Product\Compared" name="right.reports.product.compared" template="product_compared.phtml"/> </referenceContainer> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="reports_page_head_components" template="Magento_Reports::js/components.phtml"/> + </referenceBlock> </layout> diff --git a/app/code/Magento/Reports/view/frontend/product/widget/viewed.phtml b/app/code/Magento/Reports/view/frontend/product/widget/viewed.phtml index 499add8f347..37209d0dd39 100644 --- a/app/code/Magento/Reports/view/frontend/product/widget/viewed.phtml +++ b/app/code/Magento/Reports/view/frontend/product/widget/viewed.phtml @@ -30,7 +30,7 @@ $type = $this->getType() . '-' . $mode; $class = 'widget viewed' . ' ' . $mode; $title = __('Recently Viewed'); ?> -<div class="block <?php echo $class; ?>" id="recently_viewed_container" data-count="<?php echo $this->getCount(); ?>" style="display: none;"> +<div class="block <?php echo $class; ?>" id="recently_viewed_container" data-mage-init='{"recentlyViewedProducts":{}}' data-count="<?php echo $this->getCount(); ?>" style="display: none;"> <div class="title"> <strong><?php echo $title; ?></strong> </div> @@ -39,8 +39,3 @@ $title = __('Recently Viewed'); </ol> </div> </div> -<script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Reports::js/recently-viewed.js'); ?>", function() { - jQuery("#recently_viewed_container").recentlyViewedProducts(); - }); -</script> diff --git a/app/code/Magento/Review/Block/Customer/View.php b/app/code/Magento/Review/Block/Customer/View.php index eebf6f81743..9022f76f36f 100644 --- a/app/code/Magento/Review/Block/Customer/View.php +++ b/app/code/Magento/Review/Block/Customer/View.php @@ -86,7 +86,6 @@ class View extends \Magento\Catalog\Block\Product\AbstractProduct * @param \Magento\Review\Model\RatingFactory $ratingFactory * @param \Magento\Customer\Service\V1\CustomerCurrentService $currentCustomer * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -95,8 +94,7 @@ class View extends \Magento\Catalog\Block\Product\AbstractProduct \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory, \Magento\Review\Model\RatingFactory $ratingFactory, \Magento\Customer\Service\V1\CustomerCurrentService $currentCustomer, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_productFactory = $productFactory; $this->_reviewFactory = $reviewFactory; @@ -106,8 +104,7 @@ class View extends \Magento\Catalog\Block\Product\AbstractProduct parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } diff --git a/app/code/Magento/Review/Block/Product/View.php b/app/code/Magento/Review/Block/Product/View.php index 01a7779f6a3..ddad4780bd3 100644 --- a/app/code/Magento/Review/Block/Product/View.php +++ b/app/code/Magento/Review/Block/Product/View.php @@ -62,7 +62,6 @@ class View extends \Magento\Catalog\Block\Product\View * @param \Magento\Framework\Locale\FormatInterface $localeFormat * @param \Magento\Review\Model\Resource\Review\CollectionFactory $collectionFactory * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -75,8 +74,7 @@ class View extends \Magento\Catalog\Block\Product\View \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig, \Magento\Framework\Locale\FormatInterface $localeFormat, \Magento\Review\Model\Resource\Review\CollectionFactory $collectionFactory, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_reviewsColFactory = $collectionFactory; parent::__construct( @@ -89,8 +87,7 @@ class View extends \Magento\Catalog\Block\Product\View $productHelper, $productTypeConfig, $localeFormat, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Review/Block/View.php b/app/code/Magento/Review/Block/View.php index 40fed4f3ebe..d2074aa84a9 100644 --- a/app/code/Magento/Review/Block/View.php +++ b/app/code/Magento/Review/Block/View.php @@ -66,23 +66,20 @@ class View extends \Magento\Catalog\Block\Product\AbstractProduct * @param \Magento\Review\Model\RatingFactory $ratingFactory * @param \Magento\Review\Model\ReviewFactory $reviewFactory * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory, \Magento\Review\Model\RatingFactory $ratingFactory, \Magento\Review\Model\ReviewFactory $reviewFactory, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_voteFactory = $voteFactory; $this->_reviewFactory = $reviewFactory; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Review/sql/review_setup/install-1.6.0.0.php b/app/code/Magento/Review/sql/review_setup/install-1.6.0.0.php index 3f44908700a..d7c2f81b033 100644 --- a/app/code/Magento/Review/sql/review_setup/install-1.6.0.0.php +++ b/app/code/Magento/Review/sql/review_setup/install-1.6.0.0.php @@ -600,9 +600,9 @@ $table = $installer->getConnection()->newTable( \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE, \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE )->addForeignKey( - $installer->getFkName('rating_option_vote_aggregated', 'store_id', 'core_store', 'store_id'), + $installer->getFkName('rating_option_vote_aggregated', 'store_id', 'store', 'store_id'), 'store_id', - $installer->getTable('core_store'), + $installer->getTable('store'), 'store_id', \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE, \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE @@ -632,9 +632,9 @@ $table = $installer->getConnection()->newTable( $installer->getIdxName('rating_store', array('store_id')), array('store_id') )->addForeignKey( - $installer->getFkName('rating_store', 'store_id', 'core_store', 'store_id'), + $installer->getFkName('rating_store', 'store_id', 'store', 'store_id'), 'store_id', - $installer->getTable('core_store'), + $installer->getTable('store'), 'store_id', \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE, \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE @@ -684,9 +684,9 @@ $table = $installer->getConnection()->newTable( \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE, \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE )->addForeignKey( - $installer->getFkName('rating_title', 'store_id', 'core_store', 'store_id'), + $installer->getFkName('rating_title', 'store_id', 'store', 'store_id'), 'store_id', - $installer->getTable('core_store'), + $installer->getTable('store'), 'store_id', \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE, \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE diff --git a/app/code/Magento/Review/view/adminhtml/js/rating.js b/app/code/Magento/Review/view/adminhtml/js/rating.js index eca8fd2cdf1..fc517b3daea 100644 --- a/app/code/Magento/Review/view/adminhtml/js/rating.js +++ b/app/code/Magento/Review/view/adminhtml/js/rating.js @@ -40,8 +40,7 @@ _bind: function() { this._labels.on({ click: $.proxy(function(e) { - var elem = $(e.currentTarget); - $('#' + elem.attr('for')).attr('checked', 'checked'); + $('[id="' + $(e.currentTarget).attr('for') + '"]').prop('checked', true); this._updateRating(); }, this), diff --git a/app/code/Magento/Review/view/adminhtml/rating/detailed.phtml b/app/code/Magento/Review/view/adminhtml/rating/detailed.phtml index c67c169ef0e..e498ba040a9 100644 --- a/app/code/Magento/Review/view/adminhtml/rating/detailed.phtml +++ b/app/code/Magento/Review/view/adminhtml/rating/detailed.phtml @@ -43,12 +43,11 @@ <input type="hidden" name="validate_rating" class="validate-rating" value="" /> </div> <script type="text/javascript"> -//@TODO: Fix validation (function($) { "use strict"; $.mage.extend('validation', 'validation', '<?php echo $this->getViewFileUrl('Magento_Review::rating/validation-rules.js'); ?>'); - $('[data-widget="ratingControl"]').ratingControl(); + $('[data-widget=ratingControl]').ratingControl(); })(jQuery); </script> <?php else: ?> diff --git a/app/code/Magento/Review/view/adminhtml/rating/validation-rules.js b/app/code/Magento/Review/view/adminhtml/rating/validation-rules.js index 64390b7ce4b..9b25aebc7fa 100644 --- a/app/code/Magento/Review/view/adminhtml/rating/validation-rules.js +++ b/app/code/Magento/Review/view/adminhtml/rating/validation-rules.js @@ -25,26 +25,16 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ (function ($) { - $.validator.addMethod('validate-rating', function() { - var ratings = $('#detailed_rating').find('.field-rating'); - var inputs; - var error = 1; + $.validator.addMethod( + 'validate-rating', + function () { + var ratings = $('#detailed_rating').find('.field-rating'), + noError = true; - ratings.each(function(i, rating) { - if (i > 0) { - inputs = $(rating).find('input'); - - inputs.each(function(j, input) { - if ($(input).is(':checked')) { - error = 0; - } - }); - - if (error == 1) { - return false; - } - } - }); - return !error; - }, 'Please select one of each ratings above.'); + ratings.each(function (index, rating) { + noError = noError && $(rating).find('input:checked').length > 0; + }); + return noError; + }, + 'Please select one of each ratings above.'); })(jQuery); diff --git a/app/code/Magento/Review/view/frontend/form.phtml b/app/code/Magento/Review/view/frontend/form.phtml index 1ba33b81bfe..305655b956b 100644 --- a/app/code/Magento/Review/view/frontend/form.phtml +++ b/app/code/Magento/Review/view/frontend/form.phtml @@ -97,22 +97,16 @@ </form> <script> (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - function() { - $('#review-form').validation({ - errorPlacement: function (error, element) { - if (element.parents('#product-review-table').length) { - $('#product-review-table').siblings(this.errorElement + '.' + this.errorClass).remove(); - $('#product-review-table').after(error); - } else { - element.after(error); - } - } - }); - }); + $('#review-form').mage('validation', { + errorPlacement: function (error, element) { + if (element.parents('#product-review-table').length) { + $('#product-review-table').siblings(this.errorElement + '.' + this.errorClass).remove(); + $('#product-review-table').after(error); + } else { + element.after(error); + } + } + }); })(jQuery); </script> <?php else: ?> diff --git a/app/code/Magento/Rss/Block/Catalog/AbstractCatalog.php b/app/code/Magento/Rss/Block/Catalog/AbstractCatalog.php index 0558d830293..18a2538dd97 100644 --- a/app/code/Magento/Rss/Block/Catalog/AbstractCatalog.php +++ b/app/code/Magento/Rss/Block/Catalog/AbstractCatalog.php @@ -75,67 +75,6 @@ class AbstractCatalog extends \Magento\Rss\Block\AbstractBlock $this->_isScopePrivate = true; } - /** - * Return Price Block renderer for specified product type - * - * @param string $type Catalog Product type - * @return \Magento\Framework\View\Element\Template - * @throws \RuntimeException - * @deprecated - */ - protected function _getPriceBlock($type) - { - if (!isset($this->_priceBlock[$type])) { - /** @var \Magento\Framework\View\Element\RendererList $rendererList */ - $rendererList = $this->getRendererListName() ? $this->getLayout()->getBlock( - $this->getRendererListName() - ) : $this->getChildBlock( - 'renderer.list' - ); - if (!$rendererList) { - throw new \RuntimeException( - 'Renderer list for block "' . $this->getNameInLayout() . '" is not defined' - ); - } - $overriddenTemplates = $this->getOverriddenTemplates() ?: array(); - $template = isset( - $overriddenTemplates[$type] - ) ? $overriddenTemplates[$type] : $this->getRendererTemplate(); - $renderer = $rendererList->getRenderer($type, self::DEFAULT_TYPE, $template); - $this->_priceBlock[$type] = $renderer; - } - return $this->_priceBlock[$type]; - } - - /** - * Returns product price html for RSS feed - * - * @param \Magento\Catalog\Model\Product $product - * @param bool $displayMinimalPrice Display "As low as" etc. - * @param string $idSuffix Suffix for HTML containers - * @return string - * @deprecated see renderPriceHtml - */ - public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '') - { - $typeId = $product->getTypeId(); - if ($this->_catalogData->canApplyMsrp($product)) { - $typeId = $this->_mapRenderer; - } - - return $this->_getPriceBlock( - $typeId - )->setProduct( - $product - )->setDisplayMinimalPrice( - $displayMinimalPrice - )->setIdSuffix( - $idSuffix - )->setUseLinkForAsLowAs( - $this->_useLinkForAsLowAs - )->toHtml(); - } - /** * Get rendered price html * @@ -151,7 +90,7 @@ class AbstractCatalog extends \Magento\Rss\Block\AbstractBlock $price = ''; if ($priceRender) { $price = $priceRender->render( - \Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL, + \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, $product, [ 'display_minimal_price' => $displayMinimalPrice, diff --git a/app/code/Magento/Rss/Block/Catalog/Category.php b/app/code/Magento/Rss/Block/Catalog/Category.php index 88828ed3790..c2d48d754d9 100644 --- a/app/code/Magento/Rss/Block/Catalog/Category.php +++ b/app/code/Magento/Rss/Block/Catalog/Category.php @@ -223,8 +223,7 @@ class Category extends \Magento\Rss\Block\Catalog\AbstractCatalog $product->getDescription(); if ($product->getAllowedPriceInRss()) { - $description .= $this->getPriceHtml($product, true); - $description .= 'NEWPRICETEST: ' . $this->renderPriceHtml($product, true) . ' ENDNEWPRICETEST'; + $description .= $this->renderPriceHtml($product, true); } $description .= '</td></tr></table>'; diff --git a/app/code/Magento/Rss/Block/Catalog/NewCatalog.php b/app/code/Magento/Rss/Block/Catalog/NewCatalog.php index 20b457ec527..49a6e88e051 100644 --- a/app/code/Magento/Rss/Block/Catalog/NewCatalog.php +++ b/app/code/Magento/Rss/Block/Catalog/NewCatalog.php @@ -224,8 +224,7 @@ class NewCatalog extends \Magento\Rss\Block\Catalog\AbstractCatalog $product->getDescription(); if ($allowedPriceInRss) { - $description .= $this->getPriceHtml($product, true); - $description .= 'NEWPRICETEST: ' . $this->renderPriceHtml($product, true) . ' ENDNEWPRICETEST'; + $description .= $this->renderPriceHtml($product, true); } $description .= '</td>' . '</tr></table>'; diff --git a/app/code/Magento/Rss/Block/Catalog/Special.php b/app/code/Magento/Rss/Block/Catalog/Special.php index 5d929bf374d..9a0d9381644 100644 --- a/app/code/Magento/Rss/Block/Catalog/Special.php +++ b/app/code/Magento/Rss/Block/Catalog/Special.php @@ -53,9 +53,9 @@ class Special extends \Magento\Rss\Block\Catalog\AbstractCatalog protected $_resourceIterator; /** - * @var \Magento\Core\Helper\Data + * @var \Magento\Framework\Pricing\PriceCurrencyInterface */ - protected $_coreData; + protected $_priceCurrency; /** * @var \Magento\Catalog\Helper\Image @@ -71,7 +71,7 @@ class Special extends \Magento\Rss\Block\Catalog\AbstractCatalog * @param \Magento\Framework\View\Element\Template\Context $context * @param \Magento\Framework\App\Http\Context $httpContext * @param \Magento\Catalog\Helper\Data $catalogData - * @param \Magento\Core\Helper\Data $coreData + * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Rss\Model\RssFactory $rssFactory * @param \Magento\Framework\Model\Resource\Iterator $resourceIterator @@ -83,7 +83,7 @@ class Special extends \Magento\Rss\Block\Catalog\AbstractCatalog \Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\App\Http\Context $httpContext, \Magento\Catalog\Helper\Data $catalogData, - \Magento\Core\Helper\Data $coreData, + \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Rss\Model\RssFactory $rssFactory, \Magento\Framework\Model\Resource\Iterator $resourceIterator, @@ -93,7 +93,7 @@ class Special extends \Magento\Rss\Block\Catalog\AbstractCatalog ) { $this->_outputHelper = $outputHelper; $this->_imageHelper = $imageHelper; - $this->_coreData = $coreData; + $this->_priceCurrency = $priceCurrency; $this->_productFactory = $productFactory; $this->_rssFactory = $rssFactory; $this->_resourceIterator = $resourceIterator; @@ -183,9 +183,9 @@ class Special extends \Magento\Rss\Block\Catalog\AbstractCatalog // render a row for RSS feed $product->setData($result); $html = sprintf( - '<table><tr> - <td><a href="%s"><img src="%s" alt="" border="0" align="left" height="75" width="75" /></a></td> - <td style="text-decoration:none;">%s', + '<table><tr>' . + '<td><a href="%s"><img src="%s" alt="" border="0" align="left" height="75" width="75" /></a></td>' . + '<td style="text-decoration:none;">%s', $product->getProductUrl(), $this->_imageHelper->init($product, 'thumbnail')->resize(75, 75), $this->_outputHelper->productAttribute($product, $product->getDescription(), 'description') @@ -208,8 +208,8 @@ class Special extends \Magento\Rss\Block\Catalog\AbstractCatalog } $html .= sprintf( '<p>%s %s%s</p>', - __('Price: %1', $this->_coreData->currency($result['price'])), - __('Special Price: %1', $this->_coreData->currency($result['final_price'])), + __('Price: %1', $this->_priceCurrency->convertAndFormat($result['price'])), + __('Special Price: %1', $this->_priceCurrency->convertAndFormat($result['final_price'])), $special ); } diff --git a/app/code/Magento/Rss/Block/Wishlist.php b/app/code/Magento/Rss/Block/Wishlist.php index 68d28ed139a..0f782460319 100644 --- a/app/code/Magento/Rss/Block/Wishlist.php +++ b/app/code/Magento/Rss/Block/Wishlist.php @@ -70,7 +70,6 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock * @param \Magento\Rss\Model\RssFactory $rssFactory * @param \Magento\Catalog\Helper\Output $outputHelper * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -80,14 +79,18 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock \Magento\Wishlist\Model\WishlistFactory $wishlistFactory, \Magento\Rss\Model\RssFactory $rssFactory, \Magento\Catalog\Helper\Output $outputHelper, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_outputHelper = $outputHelper; $this->_coreData = $coreData; $this->_wishlistFactory = $wishlistFactory; $this->_rssFactory = $rssFactory; - parent::__construct($context, $httpContext, $productFactory, $data, $priceBlockTypes); + parent::__construct( + $context, + $httpContext, + $productFactory, + $data + ); } /** @@ -180,7 +183,7 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock ) . '<p>'; if ($product->getAllowedPriceInRss()) { - $description .= $this->getPriceHtml($product, true); + $description .= $this->getProductPrice($product); } $description .= '</p>'; @@ -228,19 +231,4 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock $additional['_rss'] = true; return parent::getProductUrl($product, $additional); } - - /** - * Adding customized price template for product type, used as action in layouts - * - * @param string $type Catalog Product Type - * @param string $block Block Type - * @param string $template Template - * @return void - */ - public function addPriceBlockType($type, $block = '', $template = '') - { - if ($type) { - $this->_priceBlockTypes[$type] = array('block' => $block, 'template' => $template); - } - } } diff --git a/app/code/Magento/Rss/view/frontend/layout/rss_catalog_new.xml b/app/code/Magento/Rss/view/frontend/layout/rss_catalog_new.xml index 63060f239f2..eb952b5fc58 100644 --- a/app/code/Magento/Rss/view/frontend/layout/rss_catalog_new.xml +++ b/app/code/Magento/Rss/view/frontend/layout/rss_catalog_new.xml @@ -26,12 +26,11 @@ <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <update handle="catalog_product_rss_feed_renderer_list" /> <block class="Magento\Rss\Block\Catalog\NewCatalog" output="1" name="rss.catalog.new" cacheable="false"> - <block class="Magento\Framework\View\Element\RendererList" name="catalog.product.rss.feed.renderer.list" as="renderer.list" /> - </block> - <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> - <arguments> - <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> - <!-- set "override" configuration settings here --> - </arguments> + <block class="Magento\Framework\Pricing\Render" name="product.price.render.default"> + <arguments> + <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> + <!-- set "override" configuration settings here --> + </arguments> + </block> </block> </layout> diff --git a/app/code/Magento/Rss/view/frontend/layout/rss_index_wishlist.xml b/app/code/Magento/Rss/view/frontend/layout/rss_index_wishlist.xml index ddf90c9901f..434dfb0c660 100644 --- a/app/code/Magento/Rss/view/frontend/layout/rss_index_wishlist.xml +++ b/app/code/Magento/Rss/view/frontend/layout/rss_index_wishlist.xml @@ -24,11 +24,5 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> - <block class="Magento\Rss\Block\Wishlist" name="rss.wishlist" output="1" cacheable="false"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">msrp_rss</argument> - <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> - <argument name="template" xsi:type="string">Magento_Wishlist::render/item/price_msrp_rss.phtml</argument> - </action> - </block> -</layout> + <block class="Magento\Rss\Block\Wishlist" name="rss.wishlist" output="1" cacheable="false" /> +</layout> \ No newline at end of file diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php index 98596e95a9e..9a5f6d40003 100644 --- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php +++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php @@ -336,13 +336,15 @@ class Grid extends \Magento\Sales\Block\Adminhtml\Order\Create\AbstractCreate */ public function getQtyTitle($item) { - $prices = $item->getProduct()->getTierPrice(); + $prices = $item->getProduct() + ->getPriceInfo() + ->getPrice(\Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE) + ->getTierPriceList(); if ($prices) { $info = array(); foreach ($prices as $data) { - $qty = $data['price_qty'] * 1; $price = $this->convertPrice($data['price']); - $info[] = __('Buy %1 for price %2', $qty, $price); + $info[] = __('Buy %1 for price %2', $data['price_qty'], $price); } return implode(', ', $info); } else { diff --git a/app/code/Magento/Sales/view/frontend/guest/form.phtml b/app/code/Magento/Sales/view/frontend/guest/form.phtml index 3a5cebba6e7..f8863c421d2 100644 --- a/app/code/Magento/Sales/view/frontend/guest/form.phtml +++ b/app/code/Magento/Sales/view/frontend/guest/form.phtml @@ -23,7 +23,7 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -<form class="form orders search" id="oar-widget-orders-and-returns-form" action="<?php echo $this->getActionUrl() ?>" +<form class="form orders search" id="oar-widget-orders-and-returns-form" data-mage-init='{"ordersReturns":{}, "validation":{}}' action="<?php echo $this->getActionUrl() ?>" method="post" name="guest_post"> <fieldset class="fieldset"> <legend class="legend"><span><?php echo __('Order Information') ?></span></legend> @@ -79,12 +79,3 @@ </div> </div> </form> -<script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Sales::orders-returns.js');?>", function () { - jQuery('#oar-widget-orders-and-returns-form').ordersReturns().validation(); - }); -</script> diff --git a/app/code/Magento/Sales/view/frontend/js/components.phtml b/app/code/Magento/Sales/view/frontend/js/components.phtml new file mode 100644 index 00000000000..97cace3b45b --- /dev/null +++ b/app/code/Magento/Sales/view/frontend/js/components.phtml @@ -0,0 +1,49 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + extraOptions: [ + '<?php echo $this->getViewFileUrl('Magento_GiftMessage::extra-options.js') ?>' + ], + giftMessage: [ + '<?php echo $this->getViewFileUrl('Magento_Sales::gift-message.js') ?>' + ], + giftOptions: [ + '<?php echo $this->getViewFileUrl('Magento_GiftMessage::gift-options.js') ?>' + ], + ordersReturns: [ + '<?php echo $this->getViewFileUrl('Magento_Sales::orders-returns.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Sales/view/frontend/layout/default.xml b/app/code/Magento/Sales/view/frontend/layout/default.xml index d86ed5d6cdf..e9fc0c2386c 100644 --- a/app/code/Magento/Sales/view/frontend/layout/default.xml +++ b/app/code/Magento/Sales/view/frontend/layout/default.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="sales_page_head_components" template="Magento_Sales::js/components.phtml"/> + </referenceBlock> <referenceContainer name="right"> <block class="Magento\Sales\Block\Reorder\Sidebar" name="sale.reorder.sidebar" as="reorder" template="reorder/sidebar.phtml"/> </referenceContainer> diff --git a/app/code/Magento/Sales/view/frontend/order/items.phtml b/app/code/Magento/Sales/view/frontend/order/items.phtml index 235b1055068..5bf0ff4fc20 100644 --- a/app/code/Magento/Sales/view/frontend/order/items.phtml +++ b/app/code/Magento/Sales/view/frontend/order/items.phtml @@ -75,8 +75,6 @@ </div> <?php if ($_giftMessage): ?> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Sales::gift-message.js')?>", function() { - jQuery('a.action.show').add('a.action.close').giftMessage(); - }); + jQuery('a.action.show').add('a.action.close').mage('giftMessage', {}); </script> <?php endif; ?> diff --git a/app/code/Magento/Sales/view/frontend/reorder/sidebar.phtml b/app/code/Magento/Sales/view/frontend/reorder/sidebar.phtml index 3cf9f608022..a1459256a19 100644 --- a/app/code/Magento/Sales/view/frontend/reorder/sidebar.phtml +++ b/app/code/Magento/Sales/view/frontend/reorder/sidebar.phtml @@ -71,19 +71,11 @@ </div> <?php echo $this->getPagerHtml(); ?> <script type="text/javascript"> - head.js( - "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - function() { - jQuery('#reorder-validate-detail').validation({ - errorPlacement: function(error, element) { - error.appendTo('#cart-sidebar-reorder-advice-container'); - } - }); + jQuery('#reorder-validate-detail').mage('validation', { + errorPlacement: function(error, element) { + error.appendTo('#cart-sidebar-reorder-advice-container'); } - ); + }); </script> </div> <?php endif ?> diff --git a/app/code/Magento/Sales/view/frontend/widget/guest/form.phtml b/app/code/Magento/Sales/view/frontend/widget/guest/form.phtml index 5fe6858e8c5..913f3254a29 100644 --- a/app/code/Magento/Sales/view/frontend/widget/guest/form.phtml +++ b/app/code/Magento/Sales/view/frontend/widget/guest/form.phtml @@ -31,7 +31,7 @@ <strong><?php echo __('Orders and Returns') ?></strong> </div> <div class="content"> - <form id="oar-widget-orders-and-returns-form" action="<?php echo $this->getActionUrl() ?>" method="post" + <form id="oar-widget-orders-and-returns-form" data-mage-init='{"ordersReturns":{},"validation":{}}' action="<?php echo $this->getActionUrl() ?>" method="post" class="form orders search" name="guest_post"> <div class="field find required"> <label class="label"><span><?php echo __('Find Order By:') ?></span></label> @@ -83,13 +83,4 @@ </form> </div> </div> - <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Sales::orders-returns.js');?>", function () { - jQuery('#oar-widget-orders-and-returns-form').ordersReturns().validation(); - }); - </script> <?php endif; ?> diff --git a/app/code/Magento/Sendfriend/view/frontend/send.phtml b/app/code/Magento/Sendfriend/view/frontend/send.phtml index 23a8fd40596..2dfbcd5e5f5 100644 --- a/app/code/Magento/Sendfriend/view/frontend/send.phtml +++ b/app/code/Magento/Sendfriend/view/frontend/send.phtml @@ -54,7 +54,19 @@ </fieldset> </script> -<form action="<?php echo $this->getSendUrl() ?>" method="post" id="product-sendtofriend-form" class="form send friend" data-hasRequired="<?php echo __('* Required Fields') ?>"> +<form action="<?php echo $this->getSendUrl() ?>" method="post" id="product-sendtofriend-form" + data-mage-init='{ + "rowBuilder":{ + "rowTemplate":"#add-recipient-tmpl", + "rowContainer":"#recipients-options", + "rowParentElem":"<div></div>", + "btnRemoveSelector":".action.delete", + "maxRows":"<?php echo $this->getMaxRecipients() ?>", + "maxRowsMsg":"#max-recipient-message", + "addRowBtn":"#add-recipient-button", + "additionalRowClass":"additional"}, + "validation":{}}' + class="form send friend" data-hasRequired="<?php echo __('* Required Fields') ?>"> <fieldset class="fieldset sender" id="sender_options"> <?php echo $this->getBlockHtml('formkey')?> <legend class="legend"><span><?php echo __('Sender:') ?></span></legend> @@ -117,24 +129,6 @@ </form> <script type="text/javascript"> //<![CDATA[ - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Theme::js/row-builder.js')?>", function() { - $('#product-sendtofriend-form').rowBuilder({ - rowTemplate: '#add-recipient-tmpl', - rowContainer: '#recipients-options', - rowParentElem: '<div></div>', - btnRemoveSelector: '.action.delete', - maxRows: '<?php echo $this->getMaxRecipients() ?>', - maxRowsMsg: '#max-recipient-message', - addRowBtn: '#add-recipient-button', - additionalRowClass: 'additional' - }).validation(); - $('a[role="back"]').on('click', function() { history.back(); return false; }); - }) - })(jQuery); + jQuery('a[role="back"]').on('click', function() { history.back(); return false; }); //]]> </script> diff --git a/app/code/Magento/Store/Model/Storage/Db.php b/app/code/Magento/Store/Model/Storage/Db.php index fad498b340c..1b4088b6fa3 100644 --- a/app/code/Magento/Store/Model/Storage/Db.php +++ b/app/code/Magento/Store/Model/Storage/Db.php @@ -214,7 +214,7 @@ class Db implements \Magento\Store\Model\StoreManagerInterface $websiteStores[$store->getWebsiteId()][$store->getId()] = $store; $groupStores[$store->getGroupId()][$store->getId()] = $store; - if (is_null($this->_store) && $store->getCode() === \Magento\Store\Model\Store::DEFAULT_CODE) { + if ($this->_hasSingleStore) { $this->_store = $store; } } diff --git a/app/code/Magento/Tax/Model/Calculation.php b/app/code/Magento/Tax/Model/Calculation.php index adfd71dcd5e..f9896b5168e 100644 --- a/app/code/Magento/Tax/Model/Calculation.php +++ b/app/code/Magento/Tax/Model/Calculation.php @@ -517,17 +517,11 @@ class Calculation extends \Magento\Framework\Model\AbstractModel } else { $regionId = $address->getRegionId(); } - $request->setCountryId( - $address->getCountryId() - )->setRegionId( - $regionId - )->setPostcode( - $address->getPostcode() - )->setStore( - $store - )->setCustomerClassId( - $customerTaxClass - ); + $request->setCountryId($address->getCountryId()) + ->setRegionId($regionId) + ->setPostcode($address->getPostcode()) + ->setStore($store) + ->setCustomerClassId($customerTaxClass); return $request; } diff --git a/app/code/Magento/Tax/Pricing/Adjustment.php b/app/code/Magento/Tax/Pricing/Adjustment.php index fb998a17bfc..517809c9187 100644 --- a/app/code/Magento/Tax/Pricing/Adjustment.php +++ b/app/code/Magento/Tax/Pricing/Adjustment.php @@ -38,7 +38,7 @@ class Adjustment implements AdjustmentInterface /** * Adjustment code tax */ - const CODE = 'tax'; + const ADJUSTMENT_CODE = 'tax'; /** * @var TaxHelper @@ -67,7 +67,7 @@ class Adjustment implements AdjustmentInterface */ public function getAdjustmentCode() { - return self::CODE; + return self::ADJUSTMENT_CODE; } /** @@ -118,8 +118,7 @@ class Adjustment implements AdjustmentInterface public function applyAdjustment($amount, SaleableInterface $saleableItem) { $includingTax = !$this->taxHelper->priceIncludesTax(); - $amount = $this->taxHelper->getPrice($saleableItem, $amount, $includingTax); - return $amount; + return $this->taxHelper->getPrice($saleableItem, $amount, $includingTax); } /** diff --git a/app/code/Magento/Tax/Pricing/Price/Plugin/AttributePrice.php b/app/code/Magento/Tax/Pricing/Price/Plugin/AttributePrice.php new file mode 100644 index 00000000000..65cbc057d69 --- /dev/null +++ b/app/code/Magento/Tax/Pricing/Price/Plugin/AttributePrice.php @@ -0,0 +1,100 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Tax + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Tax\Pricing\Price\Plugin; + +/** + * Class AttributePrice + * @package Magento\Tax\Pricing\Price\Plugin + */ +class AttributePrice +{ + /** + * @var \Magento\Tax\Helper\Data + */ + protected $taxHelper; + + /** + * @var \Magento\Tax\Model\Calculation + */ + protected $calculation; + + /** + * @param \Magento\Tax\Helper\Data $helper + * @param \Magento\Tax\Model\Calculation $calculation + */ + public function __construct( + \Magento\Tax\Helper\Data $helper, + \Magento\Tax\Model\Calculation $calculation + ) { + $this->taxHelper = $helper; + $this->calculation = $calculation; + } + + /** + * Get Tax Adjustments for configurable product + * + * @param \Magento\ConfigurableProduct\Pricing\Price\AttributePrice $attribute + * @param array $result + * @return array + */ + public function afterPrepareAdjustmentConfig( + \Magento\ConfigurableProduct\Pricing\Price\AttributePrice $attribute, + array $result + ) { + $product = $result['product']; + + $productClassId = $product->getTaxClassId(); + + $defaultValue = $this->applyRate($productClassId, false, false, false); + $result['defaultTax'] = $defaultValue + $result['defaultTax']; + + $currentTax = $this->applyRate($productClassId); + $result['currentTax'] = $currentTax + $result['currentTax']; + + $adjustment = $product->getPriceInfo()->getAdjustment(\Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE); + + $result['includeTax'] = $adjustment->isIncludedInBasePrice(); + $result['showIncludeTax'] = $this->taxHelper->displayPriceIncludingTax(); + $result['showBothPrices'] = $this->taxHelper->displayBothPrices(); + return $result; + } + + /** + * Apply Tax Rate + * + * @param int $classId + * @param null $shippingAddress + * @param null $billingAddress + * @param null $customerTaxClass + * @return float + */ + protected function applyRate($classId, $shippingAddress = null, $billingAddress = null, $customerTaxClass = null) + { + $rateRequest = $this->calculation->getRateRequest($shippingAddress, $billingAddress, $customerTaxClass); + $rateRequest->setProductClassId($classId); + return $this->calculation->getRate($rateRequest); + } +} diff --git a/app/code/Magento/Tax/Pricing/Render/Adjustment.php b/app/code/Magento/Tax/Pricing/Render/Adjustment.php index d4aca924dcb..faca5958b2f 100644 --- a/app/code/Magento/Tax/Pricing/Render/Adjustment.php +++ b/app/code/Magento/Tax/Pricing/Render/Adjustment.php @@ -56,15 +56,15 @@ class Adjustment extends AbstractAdjustment } /** - * @return null + * @return string */ protected function apply() { - $html = $this->toHtml(); if ($this->displayBothPrices()) { if ($this->getZone() !== \Magento\Framework\Pricing\Render::ZONE_ITEM_OPTION) { - $this->amountRender->setPriceDisplayLabel(__('Excl. Tax:')); + $this->amountRender->setPriceDisplayLabel(__('Excl. Tax')); } + $this->amountRender->setPriceWrapperCss('price-excluding-tax'); $this->amountRender->setPriceId( $this->buildIdWithPrefix('price-excluding-tax-') ); @@ -73,15 +73,12 @@ class Adjustment extends AbstractAdjustment $this->amountRender->getAmount()->getAdjustmentAmount($this->getAdjustmentCode()) ); } elseif ($this->displayPriceExcludingTax()) { - $this->amountRender->setDisplayValue( $this->amountRender->getDisplayValue() - $this->amountRender->getAmount()->getAdjustmentAmount($this->getAdjustmentCode()) ); } - if (trim($html)) { - $this->amountRender->addAdjustmentHtml($this->getAdjustmentCode(), $html); - } + return $this->toHtml(); } /** @@ -92,7 +89,7 @@ class Adjustment extends AbstractAdjustment public function getAdjustmentCode() { //@TODO We can build two model using DI, not code. What about passing it in constructor? - return \Magento\Tax\Pricing\Adjustment::CODE; + return \Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE; } /** diff --git a/app/code/Magento/Tax/etc/di.xml b/app/code/Magento/Tax/etc/di.xml index 7ca6b7990aa..f916d6a5490 100644 --- a/app/code/Magento/Tax/etc/di.xml +++ b/app/code/Magento/Tax/etc/di.xml @@ -51,4 +51,7 @@ </argument> </arguments> </type> + <type name="Magento\ConfigurableProduct\Pricing\Price\AttributePrice"> + <plugin name="prepareAdjustmentConfig" type="Magento\Tax\Pricing\Price\Plugin\AttributePrice" sortOrder="10"/> + </type> </config> diff --git a/app/code/Magento/Tax/etc/module.xml b/app/code/Magento/Tax/etc/module.xml index ca42eb58538..099b9fe5254 100644 --- a/app/code/Magento/Tax/etc/module.xml +++ b/app/code/Magento/Tax/etc/module.xml @@ -43,6 +43,7 @@ <module name="Magento_Sales"/> <module name="Magento_Reports"/> <module name="Magento_Theme"/> + <module name="Magento_ConfigurableProduct"/> </depends> </module> </config> diff --git a/app/code/Magento/Tax/view/frontend/layout/catalog_product_prices.xml b/app/code/Magento/Tax/view/base/layout/catalog_product_prices.xml similarity index 100% rename from app/code/Magento/Tax/view/frontend/layout/catalog_product_prices.xml rename to app/code/Magento/Tax/view/base/layout/catalog_product_prices.xml diff --git a/app/code/Magento/Tax/view/frontend/pricing/adjustment.phtml b/app/code/Magento/Tax/view/base/pricing/adjustment.phtml similarity index 79% rename from app/code/Magento/Tax/view/frontend/pricing/adjustment.phtml rename to app/code/Magento/Tax/view/base/pricing/adjustment.phtml index 13f3a05cf1a..d5341d98169 100644 --- a/app/code/Magento/Tax/view/frontend/pricing/adjustment.phtml +++ b/app/code/Magento/Tax/view/base/pricing/adjustment.phtml @@ -28,10 +28,9 @@ <?php /** @var \Magento\Tax\Pricing\Render\Adjustment $this */ ?> <?php if ($this->displayBothPrices()): ?> - <span class="price-including-tax"> - <span class="label"><?php echo __('Incl. Tax:') ?></span> - <span class="price" id="<?php echo $this->buildIdWithPrefix('price-including-tax-') ?>"> - <?php echo $this->getDisplayAmount(false) ?> - </span> - </span> +<span id="<?php echo $this->buildIdWithPrefix('price-including-tax-') ?>" + data-label="<?php echo __('Incl. Tax') ?>" + class="price-wrapper price-including-tax"> + <span class="price" ><?php echo $this->getDisplayAmount(false) ?></span> +</span> <?php endif; ?> diff --git a/app/code/Magento/Tax/view/frontend/pricing/adjustment/bundle.phtml b/app/code/Magento/Tax/view/base/pricing/adjustment/bundle.phtml similarity index 99% rename from app/code/Magento/Tax/view/frontend/pricing/adjustment/bundle.phtml rename to app/code/Magento/Tax/view/base/pricing/adjustment/bundle.phtml index d9da473cc9c..9461ca5ef48 100644 --- a/app/code/Magento/Tax/view/frontend/pricing/adjustment/bundle.phtml +++ b/app/code/Magento/Tax/view/base/pricing/adjustment/bundle.phtml @@ -1,4 +1,3 @@ - <?php /** * Magento diff --git a/app/code/Magento/Tax/view/frontend/pricing/adjustment/downloadable.phtml b/app/code/Magento/Tax/view/base/pricing/adjustment/downloadable.phtml similarity index 99% rename from app/code/Magento/Tax/view/frontend/pricing/adjustment/downloadable.phtml rename to app/code/Magento/Tax/view/base/pricing/adjustment/downloadable.phtml index 85ef59ded84..03ff1bf3aca 100644 --- a/app/code/Magento/Tax/view/frontend/pricing/adjustment/downloadable.phtml +++ b/app/code/Magento/Tax/view/base/pricing/adjustment/downloadable.phtml @@ -1,4 +1,3 @@ - <?php /** * Magento @@ -42,4 +41,4 @@ <?php endif; ?> </span> <?php endif; ?> -</span> \ No newline at end of file +</span> diff --git a/app/code/Magento/Theme/view/frontend/html/notices.phtml b/app/code/Magento/Theme/view/frontend/html/notices.phtml index 885edbd7fad..2d40167f370 100644 --- a/app/code/Magento/Theme/view/frontend/html/notices.phtml +++ b/app/code/Magento/Theme/view/frontend/html/notices.phtml @@ -87,16 +87,13 @@ <script type="text/javascript"> // <![CDATA[ (function($) { - head.js("<?php echo $this->getViewFileUrl('mage/cookies.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Theme::js/notices.js')?>", function() { - $('#notice-cookie-block').cookieBlock({ - cookieAllowButtonSelector: '#btn-cookie-allow', - cookieName: '<?php echo \Magento\Store\Helper\Cookie::IS_USER_ALLOWED_SAVE_COOKIE ?>', - cookieValue: '<?php echo $this->helper('Magento\Store\Helper\Cookie')->getAcceptedSaveCookiesWebsiteIds() ?>', - cookieLifetime: <?php echo $this->helper('Magento\Store\Helper\Cookie')->getCookieRestrictionLifetime()?>, - noCookiesUrl: '<?php echo $this->getUrl('cms/index/noCookies') ?>' - }); - }); + $('#notice-cookie-block').mage('cookieBlock', { + cookieAllowButtonSelector: '#btn-cookie-allow', + cookieName: '<?php echo \Magento\Store\Helper\Cookie::IS_USER_ALLOWED_SAVE_COOKIE ?>', + cookieValue: '<?php echo $this->helper('Magento\Store\Helper\Cookie')->getAcceptedSaveCookiesWebsiteIds() ?>', + cookieLifetime: <?php echo $this->helper('Magento\Store\Helper\Cookie')->getCookieRestrictionLifetime()?>, + noCookiesUrl: '<?php echo $this->getUrl('cms/index/noCookies') ?>' + }); })(jQuery); // ]]> </script> diff --git a/app/code/Magento/Theme/view/frontend/js/components.phtml b/app/code/Magento/Theme/view/frontend/js/components.phtml index cc3515be3fb..60ef4c182ee 100644 --- a/app/code/Magento/Theme/view/frontend/js/components.phtml +++ b/app/code/Magento/Theme/view/frontend/js/components.phtml @@ -51,6 +51,9 @@ ], redirectUrl: [ '<?php echo $this->getViewFileUrl('mage/redirect-url.js') ?>' + ], + cookieBlock: [ + '<?php echo $this->getViewFileUrl('Magento_Theme::js/notices.js') ?>' ] }); })(jQuery); diff --git a/app/code/Magento/Theme/view/frontend/js/cookie.phtml b/app/code/Magento/Theme/view/frontend/js/cookie.phtml index 4d12a89a3d2..ee5ef4ebe31 100644 --- a/app/code/Magento/Theme/view/frontend/js/cookie.phtml +++ b/app/code/Magento/Theme/view/frontend/js/cookie.phtml @@ -35,16 +35,13 @@ <script type="text/javascript"> //<![CDATA[ (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.cookie.js') ?>", - "<?php echo $this->getViewFileUrl('mage/cookies.js') ?>", function() { - $.extend($.mage.cookies.defaults, { - expires: null, - path: '<?php echo $this->getPath()?>', - domain: '<?php echo $this->getDomain()?>', - secure: false - }); - $.extend($.cookie.defaults, $.mage.cookies.defaults); + $.extend($.mage.cookies.defaults, { + expires: null, + path: '<?php echo $this->getPath()?>', + domain: '<?php echo $this->getDomain()?>', + secure: false }); + $.extend($.cookie.defaults, $.mage.cookies.defaults); })(jQuery); //]]> </script> diff --git a/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml b/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml index 358212b2ebc..94f1fe9cf0b 100644 --- a/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml +++ b/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Template" name="theme_page_head_components" template="Magento_Theme::js/components.phtml"/> + </referenceBlock> <referenceBlock name="head"> <block class="Magento\Theme\Block\Html\Head\Css" name="magento-calendar-css"> <arguments> @@ -48,9 +51,9 @@ <argument name="file" xsi:type="string">mage/jquery-no-conflict.js</argument> </arguments> </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="head-load-min-js"> + <block class="Magento\Theme\Block\Html\Head\Script" name="js-head-js"> <arguments> - <argument name="file" xsi:type="string">headjs/head.load.min.js</argument> + <argument name="file" xsi:type="string">headjs/head.min.js</argument> </arguments> </block> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-magento-js"> @@ -68,6 +71,11 @@ <argument name="file" xsi:type="string">mage/translate.js</argument> </arguments> </block> + <block class="Magento\Theme\Block\Html\Head\Script" name="jquery-jquery-cookie-js"> + <arguments> + <argument name="file" xsi:type="string">jquery/jquery.cookie.js</argument> + </arguments> + </block> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-cookies-js"> <arguments> <argument name="file" xsi:type="string">mage/cookies.js</argument> diff --git a/app/code/Magento/User/view/email/password_reset_confirmation.html b/app/code/Magento/User/view/email/password_reset_confirmation.html index 47a0751ce65..db52f230594 100644 --- a/app/code/Magento/User/view/email/password_reset_confirmation.html +++ b/app/code/Magento/User/view/email/password_reset_confirmation.html @@ -27,7 +27,7 @@ body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; <td valign="top"> <h1 style="font-size: 22px; font-weight: normal; line-height: 22px; margin: 0 0 11px 0;">Dear {{escapehtml var=$user.name}},</h1> <p style="font-size: 12px; line-height: 16px; margin: 0 0 8px 0;">There was recently a request to change the password for your account.</p> - <p style="font-size: 12px; line-height: 16px; margin: 0;">If you requested this password change, please click on the following link to reset your password: <a href="{{store url="adminhtml/auth/resetpassword/" _query_id=$user.id _query_token=$user.rp_token}}" style="color:#1E7EC8;">{{store url="adminhtml/auth/resetpassword/" _query_id=$user.id _query_token=$user.rp_token}}</a></p> + <p style="font-size: 12px; line-height: 16px; margin: 0;">If you requested this password change, please click on the following link to reset your password: <a href="{{store url="admin/auth/resetpassword/" _query_id=$user.id _query_token=$user.rp_token}}" style="color:#1E7EC8;">{{store url="admin/auth/resetpassword/" _query_id=$user.id _query_token=$user.rp_token}}</a></p> <p style="font-size: 12px; line-height: 16px; margin: 0;">If clicking the link does not work, please copy and paste the URL into your browser instead.</p> <br /> <p style="font-size:12px; line-height:16px; margin:0;">If you did not make this request, you can ignore this message and your password will remain the same.</p> diff --git a/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml b/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml index 0f05871cd6c..9aec659ae5f 100644 --- a/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml +++ b/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml @@ -40,9 +40,11 @@ <?php if (!$this->isTreeEmpty()): ?> <script type="text/javascript"> jQuery(function($) { - head.js('<?php echo $this->getViewFileUrl('jquery/jstree/jquery.hotkeys.js')?>', + head.js( + '<?php echo $this->getViewFileUrl('jquery/jstree/jquery.hotkeys.js')?>', '<?php echo $this->getViewFileUrl('jquery/jstree/jquery.jstree.js')?>', - '<?php echo $this->getViewFileUrl('Magento_User::js/roles-tree.js')?>', function() { + '<?php echo $this->getViewFileUrl('Magento_User::js/roles-tree.js')?>', + head.ready(function () { $.widget('mage.rolesTree', $.mage.rolesTree, { _checkNode: function(event) {}, _checkNodes: function() { @@ -55,7 +57,7 @@ 'treeInitData': <?php echo $this->getResourcesTreeJson() ?>, 'treeInitSelectedData': <?php echo $this->getSelectedResourcesJson() ?> }); - }); + })); }); </script> <?php endif ?> diff --git a/app/code/Magento/Weee/Helper/Data.php b/app/code/Magento/Weee/Helper/Data.php index 40f7de33210..960fc68cb43 100644 --- a/app/code/Magento/Weee/Helper/Data.php +++ b/app/code/Magento/Weee/Helper/Data.php @@ -406,33 +406,6 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper return 0; } - /** - * Adds HTML containers and formats tier prices accordingly to the currency used - * - * @param \Magento\Catalog\Model\Product $product - * @param array &$tierPrices - * @return $this - */ - public function processTierPrices($product, &$tierPrices) - { - $weeeAmount = $this->getAmountForDisplay($product); - $store = $this->_storeManager->getStore(); - foreach ($tierPrices as $index => &$tier) { - $html = $store->formatPrice( - $store->convertPrice($this->_taxData->getPrice($product, $tier['website_price'], true) + $weeeAmount), - false - ); - $tier['formated_price_incl_weee'] = '<span class="price tier-' . $index . '-incl-tax">' . $html . '</span>'; - $html = $store->formatPrice( - $store->convertPrice($this->_taxData->getPrice($product, $tier['website_price']) + $weeeAmount), - false - ); - $tier['formated_price_incl_weee_only'] = '<span class="price tier-' . $index . '">' . $html . '</span>'; - $tier['formated_weee'] = $store->formatPrice($store->convertPrice($weeeAmount)); - } - return $this; - } - /** * Check if fixed taxes are used in system * diff --git a/app/code/Magento/Weee/Pricing/Adjustment.php b/app/code/Magento/Weee/Pricing/Adjustment.php index d23c03acc1b..26f5520f712 100644 --- a/app/code/Magento/Weee/Pricing/Adjustment.php +++ b/app/code/Magento/Weee/Pricing/Adjustment.php @@ -29,6 +29,7 @@ namespace Magento\Weee\Pricing; use Magento\Framework\Pricing\Adjustment\AdjustmentInterface; use Magento\Framework\Pricing\Object\SaleableInterface; use Magento\Weee\Helper\Data as WeeeHelper; +use Magento\Tax\Pricing\Adjustment as TaxAdjustment; /** * Weee pricing adjustment @@ -38,7 +39,7 @@ class Adjustment implements AdjustmentInterface /** * Adjustment code weee */ - const CODE = 'weee'; + const ADJUSTMENT_CODE = 'weee'; /** * Weee helper @@ -73,7 +74,7 @@ class Adjustment implements AdjustmentInterface */ public function getAdjustmentCode() { - return self::CODE; + return self::ADJUSTMENT_CODE; } /** @@ -98,8 +99,7 @@ class Adjustment implements AdjustmentInterface [ \Magento\Weee\Model\Tax::DISPLAY_INCL, \Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, - \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, - 4 + \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL ] ); } @@ -136,7 +136,7 @@ class Adjustment implements AdjustmentInterface */ public function isExcludedWith($adjustmentCode) { - return ($adjustmentCode === self::CODE) || $adjustmentCode === \Magento\Tax\Pricing\Adjustment::CODE; + return (($adjustmentCode == self::ADJUSTMENT_CODE) || ($adjustmentCode == TaxAdjustment::ADJUSTMENT_CODE)); } /** diff --git a/app/code/Magento/Weee/Pricing/Render/Adjustment.php b/app/code/Magento/Weee/Pricing/Render/Adjustment.php index d190872dec8..3e491a8e931 100644 --- a/app/code/Magento/Weee/Pricing/Render/Adjustment.php +++ b/app/code/Magento/Weee/Pricing/Render/Adjustment.php @@ -69,23 +69,14 @@ class Adjustment extends AbstractAdjustment */ protected function apply() { - if ($this->typeOfDisplay( - [ - Tax::DISPLAY_EXCL, - Tax::DISPLAY_EXCL_DESCR_INCL - ] - ) - ) { + if ($this->typeOfDisplay([Tax::DISPLAY_EXCL, Tax::DISPLAY_EXCL_DESCR_INCL])) { $this->finalAmount = $this->amountRender->getDisplayValue(); $this->amountRender->setDisplayValue( $this->amountRender->getDisplayValue() - $this->amountRender->getAmount()->getAdjustmentAmount($this->getAdjustmentCode()) ); } - $html = $this->toHtml(); - if (trim($html)) { - $this->amountRender->addAdjustmentHtml($this->getAdjustmentCode(), $html); - } + return $this->toHtml(); } /** @@ -95,8 +86,7 @@ class Adjustment extends AbstractAdjustment */ public function getAdjustmentCode() { - //@TODO We can build two model using DI, not code. What about passing it in constructor? - return \Magento\Weee\Pricing\Adjustment::CODE; + return \Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE; } /** @@ -189,13 +179,7 @@ class Adjustment extends AbstractAdjustment */ protected function isDisplayFpt() { - $isDisplayFpt = $this->typeOfDisplay( - [ - Tax::DISPLAY_INCL_DESCR, - Tax::DISPLAY_EXCL_DESCR_INCL - ] - ); - + $isDisplayFpt = $this->typeOfDisplay([Tax::DISPLAY_INCL_DESCR, Tax::DISPLAY_EXCL_DESCR_INCL]); return $isDisplayFpt; } } diff --git a/app/code/Magento/Weee/view/adminhtml/renderer/tax.phtml b/app/code/Magento/Weee/view/adminhtml/renderer/tax.phtml index b6a7d873051..f7ba2fcec19 100644 --- a/app/code/Magento/Weee/view/adminhtml/renderer/tax.phtml +++ b/app/code/Magento/Weee/view/adminhtml/renderer/tax.phtml @@ -35,7 +35,7 @@ $data = ['fptAttribute' => [ ]]; ?> <div id="attribute-<?php echo $this->getElement()->getHtmlId(); ?>-container" class="field" - data-element-id="<?php echo $this->getElement()->getHtmlId(); ?>" + data-attribute-code="<?php echo $this->getElement()->getHtmlId(); ?>" data-mage-init="<?=$this->escapeHtml($this->helper('Magento\Core\Helper\Data')->jsonEncode($data))?>"> <label class="label"><span><?php echo $this->getElement()->getLabel() ?></span></label> diff --git a/app/code/Magento/Weee/view/frontend/layout/catalog_product_prices.xml b/app/code/Magento/Weee/view/base/layout/catalog_product_prices.xml similarity index 100% rename from app/code/Magento/Weee/view/frontend/layout/catalog_product_prices.xml rename to app/code/Magento/Weee/view/base/layout/catalog_product_prices.xml diff --git a/app/code/Magento/Weee/view/frontend/pricing/adjustment.phtml b/app/code/Magento/Weee/view/base/pricing/adjustment.phtml similarity index 93% rename from app/code/Magento/Weee/view/frontend/pricing/adjustment.phtml rename to app/code/Magento/Weee/view/base/pricing/adjustment.phtml index 2f67a786065..da2c8b77d2e 100644 --- a/app/code/Magento/Weee/view/frontend/pricing/adjustment.phtml +++ b/app/code/Magento/Weee/view/base/pricing/adjustment.phtml @@ -29,10 +29,8 @@ /** @var \Magento\Weee\Pricing\Render\Adjustment $this */ $weeeSeparator = $openBrace = $closeBrace = ''; -//if ($this->getZone() !== \Magento\Framework\Pricing\Render::ZONE_ITEM_OPTION) { - $openBrace = '('; - $closeBrace = ')'; -//} +$openBrace = '('; +$closeBrace = ')'; ?> <?php if ($this->showInclDescr()): // incl. + weee ?> diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget.php b/app/code/Magento/Widget/Block/Adminhtml/Widget.php index 8295f7dc7f5..05135caf5cc 100644 --- a/app/code/Magento/Widget/Block/Adminhtml/Widget.php +++ b/app/code/Magento/Widget/Block/Adminhtml/Widget.php @@ -53,6 +53,7 @@ class Widget extends \Magento\Backend\Block\Widget\Form\Container $this->_updateButton('save', 'class', 'add-widget'); $this->_updateButton('save', 'id', 'insert_button'); $this->_updateButton('save', 'onclick', 'wWidget.insertWidget()'); + $this->_updateButton('save', 'region', 'footer'); $this->_formScripts[] = 'wWidget = new WysiwygWidget.Widget(' . '"widget_options_form", "select_widget_type", "widget_options", "' . diff --git a/app/code/Magento/Widget/Model/Template/Filter.php b/app/code/Magento/Widget/Model/Template/Filter.php index 8fa4f630b71..02a25137fda 100644 --- a/app/code/Magento/Widget/Model/Template/Filter.php +++ b/app/code/Magento/Widget/Model/Template/Filter.php @@ -51,6 +51,7 @@ class Filter extends \Magento\Cms\Model\Template\Filter * @param \Magento\Framework\View\LayoutInterface $layout * @param \Magento\Framework\View\LayoutFactory $layoutFactory * @param \Magento\Framework\App\State $appState + * @param \Magento\Backend\Model\UrlInterface $backendUrlBuilder * @param \Magento\Widget\Model\Resource\Widget $widgetResource * @param \Magento\Widget\Model\Widget $widget */ @@ -65,6 +66,7 @@ class Filter extends \Magento\Cms\Model\Template\Filter \Magento\Framework\View\LayoutInterface $layout, \Magento\Framework\View\LayoutFactory $layoutFactory, \Magento\Framework\App\State $appState, + \Magento\Backend\Model\UrlInterface $backendUrlBuilder, \Magento\Widget\Model\Resource\Widget $widgetResource, \Magento\Widget\Model\Widget $widget ) { @@ -80,7 +82,8 @@ class Filter extends \Magento\Cms\Model\Template\Filter $storeManager, $layout, $layoutFactory, - $appState + $appState, + $backendUrlBuilder ); } diff --git a/app/code/Magento/Wishlist/Block/AbstractBlock.php b/app/code/Magento/Wishlist/Block/AbstractBlock.php index d2e3a422fc0..4dc3a810233 100644 --- a/app/code/Magento/Wishlist/Block/AbstractBlock.php +++ b/app/code/Magento/Wishlist/Block/AbstractBlock.php @@ -24,16 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Wishlist\Block; /** * Wishlist Product Items abstract Block - * - * @category Magento - * @package Magento_Wishlist - * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Wishlist\Block; - abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProduct { /** @@ -65,21 +60,18 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd * @param \Magento\Framework\App\Http\Context $httpContext * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\App\Http\Context $httpContext, \Magento\Catalog\Model\ProductFactory $productFactory, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->httpContext = $httpContext; $this->_productFactory = $productFactory; parent::__construct( $context, - $data, - $priceBlockTypes + $data ); $this->_isScopePrivate = true; } @@ -304,48 +296,6 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd return $this->getWishlistItemsCount() > 0; } - /** - * Returns product price block html - * Overwrites parent price html return to be ready to show configured, partially configured and - * non-configured products - * - * @param \Magento\Catalog\Model\Product $product - * @param bool $displayMinimalPrice - * @param string $idSuffix - * - * @return string - */ - public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '') - { - $type_id = $product->getTypeId(); - if ($this->_catalogData->canApplyMsrp($product)) { - $realPriceHtml = $this->_preparePriceRenderer( - $type_id - )->setProduct( - $product - )->setDisplayMinimalPrice( - $displayMinimalPrice - )->setIdSuffix( - $idSuffix - )->setIsEmulateMode( - true - )->toHtml(); - $product->setAddToCartUrl($this->getAddToCartUrl($product)); - $product->setRealPriceHtml($realPriceHtml); - $type_id = $this->_mapRenderer; - } - - return $this->_preparePriceRenderer( - $type_id - )->setProduct( - $product - )->setDisplayMinimalPrice( - $displayMinimalPrice - )->setIdSuffix( - $idSuffix - )->toHtml(); - } - /** * Retrieve URL to item Product * diff --git a/app/code/Magento/Wishlist/Block/Customer/Wishlist.php b/app/code/Magento/Wishlist/Block/Customer/Wishlist.php index 56ddead98b3..b7c8c30bc0a 100644 --- a/app/code/Magento/Wishlist/Block/Customer/Wishlist.php +++ b/app/code/Magento/Wishlist/Block/Customer/Wishlist.php @@ -60,7 +60,6 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock * @param \Magento\Catalog\Helper\Product\ConfigurationPool $helperPool * @param \Magento\Framework\Data\Form\FormKey $formKey * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, @@ -68,8 +67,7 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Catalog\Helper\Product\ConfigurationPool $helperPool, \Magento\Framework\Data\Form\FormKey $formKey, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_formKey = $formKey; $this->_helperPool = $helperPool; @@ -77,8 +75,7 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock $context, $httpContext, $productFactory, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column.php b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column.php index d96982ad9ca..f9422452e62 100644 --- a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column.php +++ b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column.php @@ -24,15 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Wishlist\Block\Customer\Wishlist\Item; + /** * Wishlist block customer item column - * - * @category Magento - * @package Magento_Wishlist - * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Wishlist\Block\Customer\Wishlist\Item; - class Column extends \Magento\Wishlist\Block\AbstractBlock { /** diff --git a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column/Cart.php b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column/Cart.php index c8da2ab2a3c..f4407b01235 100644 --- a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column/Cart.php +++ b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Column/Cart.php @@ -24,15 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Wishlist\Block\Customer\Wishlist\Item\Column; + /** * Wishlist block customer item cart column - * - * @category Magento - * @package Magento_Wishlist - * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Wishlist\Block\Customer\Wishlist\Item\Column; - class Cart extends \Magento\Wishlist\Block\Customer\Wishlist\Item\Column { /** diff --git a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Options.php b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Options.php index 389cbd7ab22..d1a91bddd72 100644 --- a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Options.php +++ b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Item/Options.php @@ -24,15 +24,13 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Wishlist\Block\Customer\Wishlist\Item; + /** * Wishlist block customer items * - * @category Magento - * @package Magento_Wishlist - * @author Magento Core Team <core@magentocommerce.com> + * @method \Magento\Wishlist\Model\Item getItem() */ -namespace Magento\Wishlist\Block\Customer\Wishlist\Item; - class Options extends \Magento\Wishlist\Block\AbstractBlock { /** @@ -58,23 +56,20 @@ class Options extends \Magento\Wishlist\Block\AbstractBlock * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Catalog\Helper\Product\ConfigurationPool $helperPool * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\App\Http\Context $httpContext, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Catalog\Helper\Product\ConfigurationPool $helperPool, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_helperPool = $helperPool; parent::__construct( $context, $httpContext, $productFactory, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Items.php b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Items.php index a59540b4f19..468e30f1c17 100644 --- a/app/code/Magento/Wishlist/Block/Customer/Wishlist/Items.php +++ b/app/code/Magento/Wishlist/Block/Customer/Wishlist/Items.php @@ -24,15 +24,11 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Wishlist\Block\Customer\Wishlist; + /** * Wishlist block customer items - * - * @category Magento - * @package Magento_Wishlist - * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Wishlist\Block\Customer\Wishlist; - class Items extends \Magento\Framework\View\Element\Template { /** @@ -48,13 +44,13 @@ class Items extends \Magento\Framework\View\Element\Template /** * Retrieve table column object list * - * @return array + * @return \Magento\Wishlist\Block\Customer\Wishlist\Item\Column[] */ public function getColumns() { $columns = array(); foreach ($this->getLayout()->getChildBlocks($this->getNameInLayout()) as $child) { - if ($child->isEnabled()) { + if ($child instanceof \Magento\Wishlist\Block\Customer\Wishlist\Item\Column && $child->isEnabled()) { $columns[] = $child; } } diff --git a/app/code/Magento/Wishlist/Block/Share/Wishlist.php b/app/code/Magento/Wishlist/Block/Share/Wishlist.php index 04061a83946..55cda9f9681 100644 --- a/app/code/Magento/Wishlist/Block/Share/Wishlist.php +++ b/app/code/Magento/Wishlist/Block/Share/Wishlist.php @@ -54,23 +54,20 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Customer\Service\V1\CustomerAccountServiceInterface $customerAccountService * @param array $data - * @param array $priceBlockTypes */ public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\App\Http\Context $httpContext, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Customer\Service\V1\CustomerAccountServiceInterface $customerAccountService, - array $data = array(), - array $priceBlockTypes = array() + array $data = array() ) { $this->_customerAccountService = $customerAccountService; parent::__construct( $context, $httpContext, $productFactory, - $data, - $priceBlockTypes + $data ); } diff --git a/app/code/Magento/Wishlist/Model/Item.php b/app/code/Magento/Wishlist/Model/Item.php index f6d94a7a4fc..4801283f299 100644 --- a/app/code/Magento/Wishlist/Model/Item.php +++ b/app/code/Magento/Wishlist/Model/Item.php @@ -23,6 +23,12 @@ */ namespace Magento\Wishlist\Model; +use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface; +use Magento\Framework\Model\AbstractModel; +use Magento\Wishlist\Model\Item\Option; +use Magento\Wishlist\Model\Item\OptionFactory; +use Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory; + /** * Wishlist item model * @@ -38,12 +44,7 @@ namespace Magento\Wishlist\Model; * @method string getDescription() * @method \Magento\Wishlist\Model\Item setDescription(string $value) */ -use Magento\Wishlist\Model\Item\Option; -use Magento\Wishlist\Model\Item\OptionFactory; -use Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory; - -class Item extends \Magento\Framework\Model\AbstractModel implements - \Magento\Catalog\Model\Product\Configuration\Item\ItemInterface +class Item extends AbstractModel implements ItemInterface { const EXCEPTION_CODE_NOT_SALABLE = 901; diff --git a/app/code/Magento/Wishlist/view/frontend/item/column/cart.phtml b/app/code/Magento/Wishlist/view/frontend/item/column/cart.phtml index c29c325fcf2..8ee432496fc 100644 --- a/app/code/Magento/Wishlist/view/frontend/item/column/cart.phtml +++ b/app/code/Magento/Wishlist/view/frontend/item/column/cart.phtml @@ -27,13 +27,12 @@ /* @var \Magento\Wishlist\Model\Item $item */ $item = $this->getItem(); $product = $item->getProduct(); -$options = $this->getChildBlock('customer.wishlist.item.options') - ->setItem($item) - ->getConfiguredOptions(); ?> -<?php echo $this->getPriceHtml($product, empty($options));?> +<?php foreach ($this->getChildNames() as $childName): ?> + <?php echo $this->getLayout()->renderElement($childName, false); ?> +<?php endforeach;?> <div class="box tocart"> - <?php if ($item->canHaveQty() && $item->getProduct()->isVisibleInSiteVisibility()): ?> + <?php if ($item->canHaveQty() && $product->isVisibleInSiteVisibility()): ?> <input type="number" class="input-text qty" data-validate="{required:true,'validate-greater-than-zero':true}" name="qty[<?php echo $item->getId() ?>]" value="<?php echo $this->getAddToCartQty($item) * 1 ?>"> <?php endif; ?> @@ -53,9 +52,7 @@ $options = $this->getChildBlock('customer.wishlist.item.options') <?php endif; ?> <?php endif; ?> </div> -<?php foreach ($this->getChildNames() as $childName): ?> - <?php echo $this->getLayout()->renderElement($childName, false); ?> -<?php endforeach;?> + <?php if ($product->isVisibleInSiteVisibility()): ?> <p> <a class="action edit" href="<?php echo $this->getItemConfigureUrl($item) ?>"> diff --git a/app/code/Magento/Wishlist/view/frontend/item/configure/addto.phtml b/app/code/Magento/Wishlist/view/frontend/item/configure/addto.phtml index df087aa314c..8fc200e9093 100644 --- a/app/code/Magento/Wishlist/view/frontend/item/configure/addto.phtml +++ b/app/code/Magento/Wishlist/view/frontend/item/configure/addto.phtml @@ -39,9 +39,7 @@ <?php endif; ?> </div> <script type="text/javascript"> - head.js("<?php echo $this->getViewFileUrl('Magento_Wishlist::js/add-to-wishlist.js') ?>", function () { - jQuery('body').addToWishlist( - <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode(array('productType' => $_product->getTypeId()))?> - ); - }); + jQuery('body').mage('addToWishlist', + <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode(array('productType' => $_product->getTypeId()))?> + ); </script> \ No newline at end of file diff --git a/app/code/Magento/Wishlist/view/frontend/item/list.phtml b/app/code/Magento/Wishlist/view/frontend/item/list.phtml index a74d809fd81..44b08b72332 100644 --- a/app/code/Magento/Wishlist/view/frontend/item/list.phtml +++ b/app/code/Magento/Wishlist/view/frontend/item/list.phtml @@ -24,6 +24,7 @@ */ ?> <?php +/** @var \Magento\Wishlist\Block\Customer\Wishlist\Items $this */ $columns = $this->getColumns(); ?> <div class="wishlist table wrapper"> diff --git a/app/code/Magento/Wishlist/view/frontend/js/components.phtml b/app/code/Magento/Wishlist/view/frontend/js/components.phtml new file mode 100644 index 00000000000..3059c2084b4 --- /dev/null +++ b/app/code/Magento/Wishlist/view/frontend/js/components.phtml @@ -0,0 +1,47 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License (AFL 3.0) + * that is bundled with this package in the file LICENSE_AFL.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/afl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category design + * @package base_default + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + */ +?> +<script type="text/javascript"> + (function($) { + "use strict"; + /** + * Declaration of resources needed for defined components + */ + $.mage.component({ + addToWishlist: [ + '<?php echo $this->getViewFileUrl('Magento_Wishlist::js/add-to-wishlist.js') ?>' + ], + wishlistSearch: [ + '<?php echo $this->getViewFileUrl('Magento_Wishlist::js/search.js') ?>' + ], + configurable: [ + '<?php echo $this->getViewFileUrl('jquery/jquery.parsequery.js') ?>', + '<?php echo $this->getViewFileUrl('Magento_ConfigurableProduct::js/configurable.js') ?>' + ] + }); + })(jQuery); +</script> +<?php echo $this->getChildHtml() ?> diff --git a/app/code/Magento/Wishlist/view/frontend/layout/default.xml b/app/code/Magento/Wishlist/view/frontend/layout/default.xml index 9655a6007e4..ad9772e7480 100644 --- a/app/code/Magento/Wishlist/view/frontend/layout/default.xml +++ b/app/code/Magento/Wishlist/view/frontend/layout/default.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="wishlist_page_head_components" template="Magento_Wishlist::js/components.phtml"/> + </referenceBlock> <referenceBlock name="top.links"> <block class="Magento\Wishlist\Block\Link" name="wish-list-link" after="my-account-link"/> </referenceBlock> diff --git a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_bundle.xml b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_bundle.xml index ad14d827fc4..a477b243567 100644 --- a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_bundle.xml +++ b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_bundle.xml @@ -25,11 +25,6 @@ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> <referenceBlock name="head"> - <block class="Magento\Theme\Block\Html\Head\Script" name="magento-bundle-bundle-js"> - <arguments> - <argument name="file" xsi:type="string">Magento_Bundle::bundle.js</argument> - </arguments> - </block> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-bundle-js-product-summary-js"> <arguments> <argument name="file" xsi:type="string">Magento_Bundle::js/product-summary.js</argument> @@ -42,11 +37,13 @@ </action> </referenceBlock> <referenceBlock name="product.info"> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.summary" as="form_top" template="catalog/product/view/summary.phtml"> - <block class="Magento\Bundle\Block\Catalog\Product\Price" name="bundle.prices" as="bundle_prices" template="catalog/product/view/price.phtml"> - <action method="setMAPTemplate"> - <argument name="tmpl" xsi:type="string">Magento_Catalog::product/price_msrp_item.phtml</argument> - </action> + <block class="Magento\Catalog\Block\Product\View" name="bundle.summary" as="form_top" template="Magento_Bundle::catalog/product/view/summary.phtml"> + <block class="Magento\Catalog\Pricing\Render" name="product.price.render.bundle.customization"> + <arguments> + <argument name="price_render" xsi:type="string">product.price.render.default</argument> + <argument name="price_type_code" xsi:type="string">configured_price</argument> + <argument name="zone" xsi:type="string">item_view</argument> + </arguments> </block> <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart.bundle" as="addtocart" template="product/view/addtocart.phtml"/> <block class="Magento\Catalog\Block\Product\View" name="product.info.addto.bundle" as="addto" template="product/view/addto.phtml"/> @@ -61,11 +58,10 @@ <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Checkbox" name="product.info.bundle.options.checkbox" as="checkbox"/> </block> </referenceBlock> + <move element="product.price.tier" destination="product.info.options.wrapper.bottom" before="-" /> <referenceBlock name="product.info.options.wrapper.bottom"> - <remove name="product.tierprices"/> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.tierprices" as="tierprices" before="-" template="Magento_Bundle::catalog/product/view/tierprices.phtml"/> <block class="Magento\CatalogInventory\Block\Qtyincrements" name="product.info.qtyincrements" before="-" template="qtyincrements.phtml"/> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.back.button" as="backButton" after="-" template="catalog/product/view/backbutton.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="bundle.back.button" as="backButton" after="-" template="Magento_Bundle::catalog/product/view/backbutton.phtml"/> <action method="unsetChild"> <argument name="block" xsi:type="string">product.info.addtocart</argument> </action> @@ -81,21 +77,8 @@ <move element="product.info" destination="bundle.options.container" before="-"/> </referenceContainer> <referenceContainer name="product.info.type"> - <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle" as="product_type_data" template="catalog/product/view/type/bundle.phtml"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> - </action> - </block> + <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle" as="product_type_data" template="catalog/product/view/type/bundle.phtml"/> <container name="product.info.bundle.extra" after="product.info.bundle" as="product_type_data_extra" label="Product Extra Info"/> - <block class="Magento\Bundle\Block\Catalog\Product\View" name="customize.button" as="customize_button" template="catalog/product/view/customize.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="customize.button" as="customize_button" template="Magento_Bundle::catalog/product/view/customize.phtml"/> </referenceContainer> - <referenceBlock name="product.clone_prices"> - <action method="addPriceBlockType"> - <argument name="type" xsi:type="string">bundle</argument> - <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> - <argument name="template" xsi:type="string">catalog/product/view/price.phtml</argument> - </action> - </referenceBlock> </layout> diff --git a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_configurable.xml b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_configurable.xml index 3c266d53bdf..4fcfe46d666 100644 --- a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_configurable.xml +++ b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_configure_type_configurable.xml @@ -24,6 +24,9 @@ */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Core/etc/layout_single.xsd"> + <referenceBlock name="head.components"> + <block class="Magento\Framework\View\Element\Js\Components" name="wishlist_product_view_head_components" template="Magento_Wishlist::js/components.phtml"/> + </referenceBlock> <referenceBlock name="root"> <action method="addBodyClass"> <argument name="value" xsi:type="string">type-configurable</argument> diff --git a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_index.xml b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_index.xml index 736ea4b4baf..1138642649f 100644 --- a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_index.xml +++ b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_index.xml @@ -44,14 +44,14 @@ <argument name="col_class" xsi:type="string">actions</argument> <argument name="title" translate="true" xsi:type="string">Add to Cart</argument> </arguments> - <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Options" name="customer.wishlist.item.options" cacheable="false"/> <block class="Magento\Catalog\Pricing\Render" name="product.price.render.wishlist"> <arguments> <argument name="price_render" xsi:type="string">product.price.render.default</argument> - <argument name="price_type_code" xsi:type="string">final_price</argument> + <argument name="price_type_code" xsi:type="string">configured_price</argument> <argument name="zone" xsi:type="string">item_list</argument> </arguments> </block> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Options" name="customer.wishlist.item.options" cacheable="false"/> </block> <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Remove" name="customer.wishlist.item.remove" template="item/column/remove.phtml" cacheable="false"> <arguments> diff --git a/app/code/Magento/Wishlist/view/frontend/render/item/price_msrp_item.phtml b/app/code/Magento/Wishlist/view/frontend/render/item/price_msrp_item.phtml index ba18d0229cb..694048dea84 100644 --- a/app/code/Magento/Wishlist/view/frontend/render/item/price_msrp_item.phtml +++ b/app/code/Magento/Wishlist/view/frontend/render/item/price_msrp_item.phtml @@ -53,36 +53,21 @@ <?php $priceElementId = 'product-price-' . $_id . $this->getIdSuffix(); ?> <span id="<?php echo $priceElementId ?>" style="display:none"></span> <?php $popupId = 'msrp-popup-' . $_id . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($popupId);?>"><?php echo __('Click for price'); ?></a> + <a href="#" + id="<?php echo($popupId);?>" + data-mage-init='{"addToCart":{"popupId": "#<?php echo($popupId);?>", + "productName": "<?php echo $_product->getName() ?>", + "realPrice": <?php echo $this->getRealPriceJs($_product) ?>, + "msrpPrice": "<?php echo $_msrpPrice ?>", + "priceElementId":"<?php echo $priceElementId ?>", + "popupCartButtonId": "#map-popup-button", + "cartForm": "#wishlist-view-form"}}'><?php echo __('Click for price') ?> + </a> <?php else: ?> <span class="msrp message"> <?php echo $_catalogHelper->getMsrpPriceMessage($_product) ?> </span> <?php endif; ?> <?php $helpLinkId = 'msrp-help-' . $_id . $this->getRandomString(20); ?> - <a href="#" id="<?php echo($helpLinkId);?>" class="link tip"><?php echo __("What's this?"); ?></a> + <a href="#" id="<?php echo($helpLinkId);?>" data-mage-init='{"addToCart":{"helpLinkId": "#<?php echo($helpLinkId);?>", "productName": "<?php echo $_product->getName() ?>"}}' class="link tip"><?php echo __("What's this?"); ?></a> </div> -<script type="text/javascript"> -(function ($) { - head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", - function () { - <?php if ($this->helper('Magento\Catalog\Helper\Data')->isShowPriceOnGesture($_product)): ?> - $('#<?php echo($popupId);?>').addToCart({ - cartForm: "#wishlist-view-form", - popupId: "#<?php echo($popupId);?>", - productName: '<?php echo $_product->getName() ?>', - realPrice: '<?php echo $this->getRealPriceJs($_product) ?>', - msrpPrice: '<?php echo $_msrpPrice ?>', - priceElementId: '<?php echo $priceElementId ?>', - closeButtonId: '#map-popup-close', - popupCartButtonId: "#map-popup-button" - }); - <?php endif; ?> - $("#<?php echo($helpLinkId);?>").addToCart({ - helpLinkId: "#<?php echo($helpLinkId);?>", - productName: '<?php echo $_product->getName() ?>' - }); - }); - })(jQuery); -</script> - diff --git a/app/code/Magento/Wishlist/view/frontend/shared.phtml b/app/code/Magento/Wishlist/view/frontend/shared.phtml index 20c8459fbd1..3d6ae0f7acd 100644 --- a/app/code/Magento/Wishlist/view/frontend/shared.phtml +++ b/app/code/Magento/Wishlist/view/frontend/shared.phtml @@ -53,7 +53,14 @@ $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Im <?php echo $this->escapeHtml($product->getName()) ?> </a> </strong> - <?php echo $this->getPriceHtml($product) ?> + <?php + echo $this->getProductPriceHtml( + $product, + \Magento\Catalog\Pricing\Price\ConfiguredPriceInterface::CONFIGURED_PRICE_CODE, + \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST, + ['item' => $item] + ); + ?> <?php echo $this->getDetailsHtml($item) ?> </td> <td class="col comment"><?php echo $this->getEscapedDescription($item) ?></td> diff --git a/app/code/Magento/Wishlist/view/frontend/sharing.phtml b/app/code/Magento/Wishlist/view/frontend/sharing.phtml index 4144f095d19..37e89a87d31 100644 --- a/app/code/Magento/Wishlist/view/frontend/sharing.phtml +++ b/app/code/Magento/Wishlist/view/frontend/sharing.phtml @@ -25,7 +25,12 @@ /** @var $this \Magento\Wishlist\Block\Customer\Sharing */ ?> -<form class="form wishlist share" action="<?php echo $this->getSendUrl() ?>" id="form-validate" method="post" data-hasrequired="<?php echo __('* Required Fields') ?>"> +<form class="form wishlist share" + action="<?php echo $this->getSendUrl() ?>" + id="form-validate" + method="post" + data-hasrequired="<?php echo __('* Required Fields') ?>" + data-mage-init='{"validation":{}}'> <fieldset class="fieldset"> <?php echo $this->getBlockHtml('formkey')?> <legend class="legend"><span><?php echo __('Sharing Information') ?></span></legend><br /> @@ -63,13 +68,3 @@ </div> </div> </form> -<script type="text/javascript"> - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function() { - $('#form-validate').validation(); - }) - })(jQuery); -</script> diff --git a/app/code/Magento/Wishlist/view/frontend/sidebar.phtml b/app/code/Magento/Wishlist/view/frontend/sidebar.phtml index eb514f6d8b4..60b7e0ac6c4 100644 --- a/app/code/Magento/Wishlist/view/frontend/sidebar.phtml +++ b/app/code/Magento/Wishlist/view/frontend/sidebar.phtml @@ -42,16 +42,23 @@ $wishlistHelper = $this->helper('Magento\Wishlist\Helper\Data'); <?php if ($this->hasWishlistItems()): ?> <ol class="items minilist products" id="wishlist-sidebar"> <?php $iterator = 1; ?> - <?php foreach ($this->getWishlistItems() as $_item): ?> - <?php $product = $_item->getProduct(); ?> - <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <?php foreach ($this->getWishlistItems() as $item): ?> + <?php $product = $item->getProduct(); ?> + <?php echo ($iterator++ == 1) ? '<li class="item product">' : '</li><li class="item product">' ?> <div class="product"> - <a class="product photo" href="<?php echo $this->getProductUrl($_item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>"> + <a class="product photo" href="<?php echo $this->getProductUrl($item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>"> <?php echo $imageBlock->init($product, 'wishlist_sidebar_block')->toHtml() ?> </a> <div class="product details"> - <strong class="product name"><a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></strong> - <?php echo $this->getPriceHtml($product, false, '-wishlist') ?> + <strong class="product name"><a href="<?php echo $this->getProductUrl($item) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></strong> + <?php + echo $this->getProductPriceHtml( + $product, + \Magento\Catalog\Pricing\Price\ConfiguredPriceInterface::CONFIGURED_PRICE_CODE, + \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST, + ['item' => $item] + ); + ?> <div class="product actions"> <?php if ($product->isSaleable() && $product->isVisibleInSiteVisibility()): ?> <?php if ($product->getTypeInstance()->hasRequiredOptions($product)): ?> @@ -65,14 +72,14 @@ $wishlistHelper = $this->helper('Magento\Wishlist\Helper\Data'); <?php endif; ?> <?php endif; ?> <div class="secondary"> - <a href="#" data-post='<?php echo $this->getItemRemoveParams($_item) ?>' title="<?php echo __('Remove This Item') ?>" class="btn-remove action delete"> + <a href="#" data-post='<?php echo $this->getItemRemoveParams($item) ?>' title="<?php echo __('Remove This Item') ?>" class="btn-remove action delete"> <span><?php echo __('Remove This Item') ?></span> </a> </div> </div> </div> </div> - <?php echo ($iterator==count($this->getWishlistItems())+1) ? '</li>' : '' ?> + <?php echo ($iterator == count($this->getWishlistItems()) + 1) ? '</li>' : '' ?> <?php endforeach; ?> </ol> <div class="actions"> diff --git a/app/code/Magento/Wishlist/view/frontend/view.phtml b/app/code/Magento/Wishlist/view/frontend/view.phtml index bb5ae1bf645..efc29812c00 100644 --- a/app/code/Magento/Wishlist/view/frontend/view.phtml +++ b/app/code/Magento/Wishlist/view/frontend/view.phtml @@ -31,7 +31,21 @@ <span><?php echo __('RSS Feed') ?></span> </a> <?php endif; ?> - <form class="form wishlist items" id="wishlist-view-form" action="<?php echo $this->getUrl('*/*/update', array('wishlist_id' => $this->getWishlistInstance()->getId())) ?>" method="post"> + <form class="form wishlist items" id="wishlist-view-form" + data-mage-init='{"wishlist":{ + "dataAttribute":"item-id", + "nameFormat":"qty[{0}]", + "btnRemoveSelector":".action.delete", + "qtySelector":".qty", + "addToCartSelector":".action.tocart", + "addAllToCartSelector":".primary > .action.tocart", + "commentInputType":"textarea", + "infoList":false, + "addToCartUrl":"<?php echo $this->getItemAddToCartUrl("%item%");?>", + "confirmRemoveMessage":"<?php echo __("Are you sure you want to remove this product from your wishlist?") ?>", + "addAllToCartUrl":"<?php echo $this->getAddAllToCartUrl(); ?>", + "commentString":""} + }' action="<?php echo $this->getUrl('*/*/update', array('wishlist_id' => $this->getWishlistInstance()->getId())) ?>" method="post"> <?php echo $this->getChildHtml('top'); ?> <?php if ($this->hasWishlistItems()): ?> <?php echo $this->getBlockHtml('formkey');?> @@ -61,28 +75,4 @@ {{if entity}}<input name="entity" value="${entity}">{{/if}} </form> </script> - <script> - (function($) { - head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", - "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation.js')?>", - "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", - "<?php echo $this->getViewFileUrl('Magento_Wishlist::wishlist.js')?>", function() { - $('#wishlist-view-form').wishlist({ - dataAttribute: 'item-id', - nameFormat: 'qty[{0}]', - btnRemoveSelector: '.action.delete', - qtySelector: '.qty', - addToCartSelector: '.action.tocart', - addAllToCartSelector: '.primary > .action.tocart', - commentInputType: 'textarea', - infoList: false, - addToCartUrl: '<?php echo $this->getItemAddToCartUrl('%item%');?>' , - confirmRemoveMessage: '<?php echo __('Are you sure you want to remove this product from your wishlist?') ?>', - addAllToCartUrl : '<?php echo $this->getAddAllToCartUrl(); ?>', - commentString : '' - }); - }); - })(jQuery); - </script> <?php endif ?> diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml index b88f1b0ab17..c4e81a31dc9 100644 --- a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml +++ b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml @@ -94,11 +94,6 @@ <argument name="file" xsi:type="string">modernizr/modernizr.js</argument> </arguments> </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-head-js"> - <arguments> - <argument name="file" xsi:type="string">headjs/head.min.js</argument> - </arguments> - </block> <block class="Magento\Theme\Block\Html\Head\Script" name="magento-dropdown-js"> <arguments> <argument name="file" xsi:type="string">mage/dropdown_old.js</argument> diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/all.less b/app/design/frontend/Magento/blank/css/source/price.less similarity index 55% rename from app/design/frontend/Magento/plushe/css/source/clearless/all.less rename to app/design/frontend/Magento/blank/css/source/price.less index 60679b51fdf..daa876ef5bd 100644 --- a/app/design/frontend/Magento/plushe/css/source/clearless/all.less +++ b/app/design/frontend/Magento/blank/css/source/price.less @@ -18,19 +18,44 @@ // * needs please refer to http://www.magentocommerce.com for more information. // * // * @category design -// * @package magento2_reference // * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) // * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) // */ -// ============================================== -// Handily import all ClearLess mixins -// ============================================== -@import "settings"; -@import "typography"; -@import "resets"; -@import "helpers"; -@import "sprites"; -@import "icons"; -@import "arrows"; -@import "grids"; \ No newline at end of file +.price-style-1() { + .price { + &-container {} + &-wrapper[data-label]:before { + content: attr(data-label)":"; + } + &-tier_price .price-excluding-tax, + &-tier_price .price-including-tax { + display: inline; + } + &-tier_price .price-adjustments { + font-size: .9em; + &:before { + content: "("; + } + &:after { + content: ")"; + } + } + } +} +.price-style-2() { + .price { + &-including-tax, + &-excluding-tax { + display: inline !important; + } + &-including-tax:before { + content:" / " + } + &-including-tax:after { + content: "("attr(data-label)")"; + } + } +} + +.price-style-1(); diff --git a/app/design/frontend/Magento/blank/css/styles.less b/app/design/frontend/Magento/blank/css/styles.less index 9c979ca902e..e2720a78fe4 100644 --- a/app/design/frontend/Magento/blank/css/styles.less +++ b/app/design/frontend/Magento/blank/css/styles.less @@ -50,6 +50,7 @@ @import "source/actions-toolbar.less"; // import theme actions-toolbar @import "source/breadcrumbs.less"; // import theme breadcrumbs @import "source/popups.less"; // import theme popups +@import "source/price.less"; // import theme popups // Magento Import instructions //@magento_import "source/module.less"; // import theme styles diff --git a/app/design/frontend/Magento/plushe/Magento_Checkout/layout/checkout_cart_index.xml b/app/design/frontend/Magento/plushe/Magento_Checkout/layout/checkout_cart_index.xml deleted file mode 100644 index d8cc2bdc93a..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Checkout/layout/checkout_cart_index.xml +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <update handle="page_one_column" /> - <referenceContainer name="checkout.cart.items"> - <container name="checkout.cart.container" label="invisible" htmlTag="div" htmlClass="cart container" before="-"> - <container name="cart.summary" label="Cart Summary Container" htmlTag="div" htmlClass="cart summary" after="-"> - <block class="Magento\Framework\View\Element\Template" name="checkout.cart.summary.title" before="-" template="Magento_Core::text.phtml"> - <arguments> - <argument translate="true" name="text" xsi:type="string">Summary</argument> - <argument name="tag" xsi:type="string">strong</argument> - <argument name="attributes" xsi:type="array"> - <item name="title" translate="true" xsi:type="string">Summary</item> - </argument> - <argument name="css_class" xsi:type="string">summary title</argument> - </arguments> - </block> - </container> - </container> - </referenceContainer> - <move element="checkout.cart.form" destination="checkout.cart.container"/> - <move element="checkout.cart.shipping" destination="cart.summary"/> - <move element="checkout.cart.coupon" destination="cart.summary" /> - <move element="checkout.cart.totals" destination="cart.summary"/> - <move element="checkout.cart.methods.bottom" destination="cart.summary"/> -</layout> diff --git a/app/design/frontend/Magento/plushe/Magento_Customer/layout/default.xml b/app/design/frontend/Magento/plushe/Magento_Customer/layout/default.xml deleted file mode 100644 index a6c4e24a9a3..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Customer/layout/default.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="header.links"> - <block class="Magento\Customer\Block\Account\Customer" name="customer" template="account/customer.phtml" before="-"/> - <block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link-login"/> - </referenceBlock> - <move element="register-link" destination="header.links"/> - <move element="top.links" destination="customer"/> - <move element="authorization-link" destination="top.links" after="-"/> -</layout> diff --git a/app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/image_sizing.xml b/app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/image_sizing.xml deleted file mode 100644 index ecb7b5efbfe..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/image_sizing.xml +++ /dev/null @@ -1,787 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_DesignEditor - * @subpackage integration_tests - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - --> -<controls xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/DesignEditor/etc/image_sizing.xsd"> - <control name="product_image_border" title="Product image white borders"> - <type>white-border</type> - <components> - <control name="product_image_border:white-border"> - <type>white-border</type> - <var>Magento_Catalog::product_image_white_borders</var> - </control> - </components> - </control> - - <control name="review_page_product_image" title="Review Page Product Image"> - <type>image-sizing</type> - <components> - <control name="review_page_product_image-type"> - <type>image-type</type> - <var>Magento_Catalog::review_page_product_image:type</var> - </control> - <control name="review_page_product_image-width"> - <type>image-width</type> - <var>Magento_Catalog::review_page_product_image:width</var> - </control> - <control name="review_page_product_image-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::review_page_product_image:ratio</var> - </control> - <control name="review_page_product_image-height"> - <type>image-height</type> - <var>Magento_Catalog::review_page_product_image:height</var> - </control> - </components> - </control> - - <control name="customer_account_product_review_page" title="Customer Account: Product Review Page"> - <type>image-sizing</type> - <components> - <control name="customer_account_product_review_page-type"> - <type>image-type</type> - <var>Magento_Catalog::customer_account_product_review_page:type</var> - </control> - <control name="customer_account_product_review_page-width"> - <type>image-width</type> - <var>Magento_Catalog::customer_account_product_review_page:width</var> - </control> - <control name="customer_account_product_review_page-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::customer_account_product_review_page:ratio</var> - </control> - <control name="customer_account_product_review_page-height"> - <type>image-height</type> - <var>Magento_Catalog::customer_account_product_review_page:height</var> - </control> - </components> - </control> - - <control name="category_page_list" title="Category Page - List View"> - <type>image-sizing</type> - <components> - <control name="category_page_list-type"> - <type>image-type</type> - <var>Magento_Catalog::category_page_list:type</var> - </control> - <control name="category_page_list-width"> - <type>image-width</type> - <var>Magento_Catalog::category_page_list:width</var> - </control> - <control name="category_page_list-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::category_page_list:ratio</var> - </control> - <control name="category_page_list-height"> - <type>image-height</type> - <var>Magento_Catalog::category_page_list:height</var> - </control> - </components> - </control> - - <control name="category_page_grid" title="Category Page - Grid View"> - <type>image-sizing</type> - <components> - <control name="category_page_grid-type"> - <type>image-type</type> - <var>Magento_Catalog::category_page_grid:type</var> - </control> - <control name="category_page_grid-width"> - <type>image-width</type> - <var>Magento_Catalog::category_page_grid:width</var> - </control> - <control name="category_page_grid-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::category_page_grid:ratio</var> - </control> - <control name="category_page_grid-height"> - <type>image-height</type> - <var>Magento_Catalog::category_page_grid:height</var> - </control> - </components> - </control> - - <control name="product_comparison_list" title="Product Comparison List"> - <type>image-sizing</type> - <components> - <control name="product_comparison_list-type"> - <type>image-type</type> - <var>Magento_Catalog::product_comparison_list:type</var> - </control> - <control name="product_comparison_list-width"> - <type>image-width</type> - <var>Magento_Catalog::product_comparison_list:width</var> - </control> - <control name="product_comparison_list-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::product_comparison_list:ratio</var> - </control> - <control name="product_comparison_list-height"> - <type>image-height</type> - <var>Magento_Catalog::product_comparison_list:height</var> - </control> - </components> - </control> - - <control name="related_products_list" title="Related Products List"> - <type>image-sizing</type> - <components> - <control name="related_products_list-type"> - <type>image-type</type> - <var>Magento_Catalog::related_products_list:type</var> - </control> - <control name="related_products_list-width"> - <type>image-width</type> - <var>Magento_Catalog::related_products_list:width</var> - </control> - <control name="related_products_list-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::related_products_list:ratio</var> - </control> - <control name="related_products_list-height"> - <type>image-height</type> - <var>Magento_Catalog::related_products_list:height</var> - </control> - </components> - </control> - - <control name="upsell_products_list" title="Up-sell Products List"> - <type>image-sizing</type> - <components> - <control name="upsell_products_list-type"> - <type>image-type</type> - <var>Magento_Catalog::upsell_products_list:type</var> - </control> - <control name="upsell_products_list-width"> - <type>image-width</type> - <var>Magento_Catalog::upsell_products_list:width</var> - </control> - <control name="upsell_products_list-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::upsell_products_list:ratio</var> - </control> - <control name="upsell_products_list-height"> - <type>image-height</type> - <var>Magento_Catalog::upsell_products_list:height</var> - </control> - </components> - </control> - - <control name="product_page_main_image" title="Product Page Main Image"> - <type>image-sizing</type> - <components> - <control name="product_page_main_image-type"> - <type>image-type</type> - <var>Magento_Catalog::product_page_main_image:type</var> - </control> - <control name="product_page_main_image-width"> - <type>image-width</type> - <var>Magento_Catalog::product_page_main_image:width</var> - </control> - <control name="product_page_main_image-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::product_page_main_image:ratio</var> - </control> - <control name="product_page_main_image-height"> - <type>image-height</type> - <var>Magento_Catalog::product_page_main_image:height</var> - </control> - </components> - </control> - - <control name="product_page_main_image_default" title="Product Page Main Image (Default)"> - <type>image-sizing</type> - <components> - <control name="product_page_main_image_default-type"> - <type>image-type</type> - <var>Magento_Catalog::product_page_main_image_default:type</var> - </control> - <control name="product_page_main_image_default-width"> - <type>image-width</type> - <var>Magento_Catalog::product_page_main_image_default:width</var> - </control> - <control name="product_page_main_image_default-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::product_page_main_image_default:ratio</var> - </control> - <control name="product_page_main_image_default-height"> - <type>image-height</type> - <var>Magento_Catalog::product_page_main_image_default:height</var> - </control> - </components> - </control> - - <control name="product_page_more_views" title="Product Page - More Views"> - <type>image-sizing</type> - <components> - <control name="product_page_more_views-type"> - <type>image-type</type> - <var>Magento_Catalog::product_page_more_views:type</var> - </control> - <control name="product_page_more_views-width"> - <type>image-width</type> - <var>Magento_Catalog::product_page_more_views:width</var> - </control> - <control name="product_page_more_views-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::product_page_more_views:ratio</var> - </control> - <control name="product_page_more_views-height"> - <type>image-height</type> - <var>Magento_Catalog::product_page_more_views:height</var> - </control> - </components> - </control> - - <control name="side_column_widget_product_thumbnail" title="Side Column Widget Product Thumbnail"> - <type>image-sizing</type> - <components> - <control name="side_column_widget_product_thumbnail-type"> - <type>image-type</type> - <var>Magento_Catalog::side_column_widget_product_thumbnail:type</var> - </control> - <control name="side_column_widget_product_thumbnail-width"> - <type>image-width</type> - <var>Magento_Catalog::side_column_widget_product_thumbnail:width</var> - </control> - <control name="side_column_widget_product_thumbnail-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::side_column_widget_product_thumbnail:ratio</var> - </control> - <control name="side_column_widget_product_thumbnail-height"> - <type>image-height</type> - <var>Magento_Catalog::side_column_widget_product_thumbnail:height</var> - </control> - </components> - </control> - - <control name="new_products_content_widget_list" title="New Products Content Widget - List View"> - <type>image-sizing</type> - <components> - <control name="new_products_content_widget_list-type"> - <type>image-type</type> - <var>Magento_Catalog::new_products_content_widget_list:type</var> - </control> - <control name="new_products_content_widget_list-width"> - <type>image-width</type> - <var>Magento_Catalog::new_products_content_widget_list:width</var> - </control> - <control name="new_products_content_widget_list-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::new_products_content_widget_list:ratio</var> - </control> - <control name="new_products_content_widget_list-height"> - <type>image-height</type> - <var>Magento_Catalog::new_products_content_widget_list:height</var> - </control> - </components> - </control> - - <control name="new_products_content_widget_grid" title="New Products Content Widget - Grid View"> - <type>image-sizing</type> - <components> - <control name="new_products_content_widget_grid-type"> - <type>image-type</type> - <var>Magento_Catalog::new_products_content_widget_grid:type</var> - </control> - <control name="new_products_content_widget_grid-width"> - <type>image-width</type> - <var>Magento_Catalog::new_products_content_widget_grid:width</var> - </control> - <control name="new_products_content_widget_grid-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::new_products_content_widget_grid:ratio</var> - </control> - <control name="new_products_content_widget_grid-height"> - <type>image-height</type> - <var>Magento_Catalog::new_products_content_widget_grid:height</var> - </control> - </components> - </control> - - <control name="recently_compared_products_images_names_widget" title="Recently Compared Products Images and Names Widget"> - <type>image-sizing</type> - <components> - <control name="recently_compared_products_images_names_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_compared_products_images_names_widget:type</var> - </control> - <control name="recently_compared_products_images_names_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_compared_products_images_names_widget:width</var> - </control> - <control name="recently_compared_products_images_names_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_compared_products_images_names_widget:ratio</var> - </control> - <control name="recently_compared_products_images_names_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_compared_products_images_names_widget:height</var> - </control> - </components> - </control> - - <control name="recently_viewed_products_images_names_widget" title="Recently Viewed Products Images and Names Widget"> - <type>image-sizing</type> - <components> - <control name="recently_viewed_products_images_names_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_viewed_products_images_names_widget:type</var> - </control> - <control name="recently_viewed_products_images_names_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_viewed_products_images_names_widget:width</var> - </control> - <control name="recently_viewed_products_images_names_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_viewed_products_images_names_widget:ratio</var> - </control> - <control name="recently_viewed_products_images_names_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_viewed_products_images_names_widget:height</var> - </control> - </components> - </control> - - <control name="recently_compared_products_images_only_widget" title="Recently Compared Products Images Only Widget"> - <type>image-sizing</type> - <components> - <control name="recently_compared_products_images_only_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_compared_products_images_only_widget:type</var> - </control> - <control name="recently_compared_products_images_only_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_compared_products_images_only_widget:width</var> - </control> - <control name="recently_compared_products_images_only_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_compared_products_images_only_widget:ratio</var> - </control> - <control name="recently_compared_products_images_only_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_compared_products_images_only_widget:height</var> - </control> - </components> - </control> - - <control name="recently_viewed_products_images_only_widget" title="Recently Viewed Products Images Only Widget"> - <type>image-sizing</type> - <components> - <control name="recently_viewed_products_images_only_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_viewed_products_images_only_widget:type</var> - </control> - <control name="recently_viewed_products_images_only_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_viewed_products_images_only_widget:width</var> - </control> - <control name="recently_viewed_products_images_only_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_viewed_products_images_only_widget:ratio</var> - </control> - <control name="recently_viewed_products_images_only_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_viewed_products_images_only_widget:height</var> - </control> - </components> - </control> - - <control name="bundled_product_customization_page" title="Bundle Product - Customization Page"> - <type>image-sizing</type> - <components> - <control name="bundled_product_customization_page-type"> - <type>image-type</type> - <var>Magento_Catalog::bundled_product_customization_page:type</var> - </control> - <control name="bundled_product_customization_page-width"> - <type>image-width</type> - <var>Magento_Catalog::bundled_product_customization_page:width</var> - </control> - <control name="bundled_product_customization_page-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::bundled_product_customization_page:ratio</var> - </control> - <control name="bundled_product_customization_page-height"> - <type>image-height</type> - <var>Magento_Catalog::bundled_product_customization_page:height</var> - </control> - </components> - </control> - - <control name="recently_compared_products_grid_content_widget" title="Recently Compared Products Grid View Content Widget"> - <type>image-sizing</type> - <components> - <control name="recently_compared_products_grid_content_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_compared_products_grid_content_widget:type</var> - </control> - <control name="recently_compared_products_grid_content_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_compared_products_grid_content_widget:width</var> - </control> - <control name="recently_compared_products_grid_content_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_compared_products_grid_content_widget:ratio</var> - </control> - <control name="recently_compared_products_grid_content_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_compared_products_grid_content_widget:height</var> - </control> - </components> - </control> - - <control name="recently_compared_products_list_content_widget" title="Recently Compared Products List View Content Widget"> - <type>image-sizing</type> - <components> - <control name="recently_compared_products_list_content_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_compared_products_list_content_widget:type</var> - </control> - <control name="recently_compared_products_list_content_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_compared_products_list_content_widget:width</var> - </control> - <control name="recently_compared_products_list_content_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_compared_products_list_content_widget:ratio</var> - </control> - <control name="recently_compared_products_list_content_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_compared_products_list_content_widget:height</var> - </control> - </components> - </control> - - <control name="recently_viewed_products_grid_content_widget" title="Recently Viewed Products Grid View Content Widget"> - <type>image-sizing</type> - <components> - <control name="recently_viewed_products_grid_content_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_viewed_products_grid_content_widget:type</var> - </control> - <control name="recently_viewed_products_grid_content_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_viewed_products_grid_content_widget:width</var> - </control> - <control name="recently_viewed_products_grid_content_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_viewed_products_grid_content_widget:ratio</var> - </control> - <control name="recently_viewed_products_grid_content_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_viewed_products_grid_content_widget:height</var> - </control> - </components> - </control> - - <control name="recently_viewed_products_list_content_widget" title="Recently Viewed Products List View Content Widget"> - <type>image-sizing</type> - <components> - <control name="recently_viewed_products_list_content_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::recently_viewed_products_list_content_widget:type</var> - </control> - <control name="recently_viewed_products_list_content_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::recently_viewed_products_list_content_widget:width</var> - </control> - <control name="recently_viewed_products_list_content_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::recently_viewed_products_list_content_widget:ratio</var> - </control> - <control name="recently_viewed_products_list_content_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::recently_viewed_products_list_content_widget:height</var> - </control> - </components> - </control> - - <control name="customer_shared_wishlist" title="Customer's Shared Wishlist"> - <type>image-sizing</type> - <components> - <control name="customer_shared_wishlist-type"> - <type>image-type</type> - <var>Magento_Catalog::customer_shared_wishlist:type</var> - </control> - <control name="customer_shared_wishlist-width"> - <type>image-width</type> - <var>Magento_Catalog::customer_shared_wishlist:width</var> - </control> - <control name="customer_shared_wishlist-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::customer_shared_wishlist:ratio</var> - </control> - <control name="customer_shared_wishlist-height"> - <type>image-height</type> - <var>Magento_Catalog::customer_shared_wishlist:height</var> - </control> - </components> - </control> - - <control name="wishlist_thumbnail" title="Wishlist Thumbnail"> - <type>image-sizing</type> - <components> - <control name="wishlist_thumbnail-type"> - <type>image-type</type> - <var>Magento_Catalog::wishlist_thumbnail:type</var> - </control> - <control name="wishlist_thumbnail-width"> - <type>image-width</type> - <var>Magento_Catalog::wishlist_thumbnail:width</var> - </control> - <control name="wishlist_thumbnail-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::wishlist_thumbnail:ratio</var> - </control> - <control name="wishlist_thumbnail-height"> - <type>image-height</type> - <var>Magento_Catalog::wishlist_thumbnail:height</var> - </control> - </components> - </control> - - <control name="wishlist_sidebar_block" title="Wishlist Sidebar Block"> - <type>image-sizing</type> - <components> - <control name="wishlist_sidebar_block-type"> - <type>image-type</type> - <var>Magento_Catalog::wishlist_sidebar_block:type</var> - </control> - <control name="wishlist_sidebar_block-width"> - <type>image-width</type> - <var>Magento_Catalog::wishlist_sidebar_block:width</var> - </control> - <control name="wishlist_sidebar_block-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::wishlist_sidebar_block:ratio</var> - </control> - <control name="wishlist_sidebar_block-height"> - <type>image-height</type> - <var>Magento_Catalog::wishlist_sidebar_block:height</var> - </control> - </components> - </control> - - <control name="shared_wishlist_email" title="Shared Wishlist Email"> - <type>image-sizing</type> - <components> - <control name="shared_wishlist_email-type"> - <type>image-type</type> - <var>Magento_Catalog::shared_wishlist_email:type</var> - </control> - <control name="shared_wishlist_email-width"> - <type>image-width</type> - <var>Magento_Catalog::shared_wishlist_email:width</var> - </control> - <control name="shared_wishlist_email-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::shared_wishlist_email:ratio</var> - </control> - <control name="shared_wishlist_email-height"> - <type>image-height</type> - <var>Magento_Catalog::shared_wishlist_email:height</var> - </control> - </components> - </control> - - <control name="customer_account_my_tags_tag_view" title="Customer Account: My Tags - Tag View"> - <type>image-sizing</type> - <components> - <control name="customer_account_my_tags_tag_view-type"> - <type>image-type</type> - <var>Magento_Catalog::customer_account_my_tags_tag_view:type</var> - </control> - <control name="customer_account_my_tags_tag_view-width"> - <type>image-width</type> - <var>Magento_Catalog::customer_account_my_tags_tag_view:width</var> - </control> - <control name="customer_account_my_tags_tag_view-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::customer_account_my_tags_tag_view:ratio</var> - </control> - <control name="customer_account_my_tags_tag_view-height"> - <type>image-height</type> - <var>Magento_Catalog::customer_account_my_tags_tag_view:height</var> - </control> - </components> - </control> - - <control name="cart_cross_sell_products" title="Cart Cross-sell Products"> - <type>image-sizing</type> - <components> - <control name="cart_cross_sell_products-type"> - <type>image-type</type> - <var>Magento_Catalog::cart_cross_sell_products:type</var> - </control> - <control name="cart_cross_sell_products-width"> - <type>image-width</type> - <var>Magento_Catalog::cart_cross_sell_products:width</var> - </control> - <control name="cart_cross_sell_products-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::cart_cross_sell_products:ratio</var> - </control> - <control name="cart_cross_sell_products-height"> - <type>image-height</type> - <var>Magento_Catalog::cart_cross_sell_products:height</var> - </control> - </components> - </control> - - <control name="gift_messages_checkout_thumbnail" title="Gift Messages on Checkout (Thumbnail)"> - <type>image-sizing</type> - <components> - <control name="gift_messages_checkout_thumbnail-type"> - <type>image-type</type> - <var>Magento_Catalog::gift_messages_checkout_thumbnail:type</var> - </control> - <control name="gift_messages_checkout_thumbnail-width"> - <type>image-width</type> - <var>Magento_Catalog::gift_messages_checkout_thumbnail:width</var> - </control> - <control name="gift_messages_checkout_thumbnail-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::gift_messages_checkout_thumbnail:ratio</var> - </control> - <control name="gift_messages_checkout_thumbnail-height"> - <type>image-height</type> - <var>Magento_Catalog::gift_messages_checkout_thumbnail:height</var> - </control> - </components> - </control> - - <control name="gift_messages_checkout_small_image" title="Gift Messages on Checkout (Small Image)"> - <type>image-sizing</type> - <components> - <control name="gift_messages_checkout_small_image-type"> - <type>image-type</type> - <var>Magento_Catalog::gift_messages_checkout_small_image:type</var> - </control> - <control name="gift_messages_checkout_small_image-width"> - <type>image-width</type> - <var>Magento_Catalog::gift_messages_checkout_small_image:width</var> - </control> - <control name="gift_messages_checkout_small_image-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::gift_messages_checkout_small_image:ratio</var> - </control> - <control name="gift_messages_checkout_small_image-height"> - <type>image-height</type> - <var>Magento_Catalog::gift_messages_checkout_small_image:height</var> - </control> - </components> - </control> - - <control name="mini_cart_product_thumbnail" title="Mini Cart Product Thumbnail"> - <type>image-sizing</type> - <components> - <control name="mini_cart_product_thumbnail-type"> - <type>image-type</type> - <var>Magento_Catalog::mini_cart_product_thumbnail:type</var> - </control> - <control name="mini_cart_product_thumbnail-width"> - <type>image-width</type> - <var>Magento_Catalog::mini_cart_product_thumbnail:width</var> - </control> - <control name="mini_cart_product_thumbnail-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::mini_cart_product_thumbnail:ratio</var> - </control> - <control name="mini_cart_product_thumbnail-height"> - <type>image-height</type> - <var>Magento_Catalog::mini_cart_product_thumbnail:height</var> - </control> - </components> - </control> - - <control name="new_products_images_only_widget" title="New Products Images Only Widget"> - <type>image-sizing</type> - <components> - <control name="new_products_images_only_widget-type"> - <type>image-type</type> - <var>Magento_Catalog::new_products_images_only_widget:type</var> - </control> - <control name="new_products_images_only_widget-width"> - <type>image-width</type> - <var>Magento_Catalog::new_products_images_only_widget:width</var> - </control> - <control name="new_products_images_only_widget-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::new_products_images_only_widget:ratio</var> - </control> - <control name="new_products_images_only_widget-height"> - <type>image-height</type> - <var>Magento_Catalog::new_products_images_only_widget:height</var> - </control> - </components> - </control> - - <control name="cart_page_product_thumbnail" title="Cart Page - Product Thumbnail"> - <type>image-sizing</type> - <components> - <control name="cart_page_product_thumbnail-type"> - <type>image-type</type> - <var>Magento_Catalog::cart_page_product_thumbnail:type</var> - </control> - <control name="cart_page_product_thumbnail-width"> - <type>image-width</type> - <var>Magento_Catalog::cart_page_product_thumbnail:width</var> - </control> - <control name="cart_page_product_thumbnail-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::cart_page_product_thumbnail:ratio</var> - </control> - <control name="cart_page_product_thumbnail-height"> - <type>image-height</type> - <var>Magento_Catalog::cart_page_product_thumbnail:height</var> - </control> - </components> - </control> - - <control name="product_stock_alert_email_product_image" title="Product Stock Alert Email Product Image"> - <type>image-sizing</type> - <components> - <control name="product_stock_alert_email_product_image-type"> - <type>image-type</type> - <var>Magento_Catalog::product_stock_alert_email_product_image:type</var> - </control> - <control name="product_stock_alert_email_product_image-width"> - <type>image-width</type> - <var>Magento_Catalog::product_stock_alert_email_product_image:width</var> - </control> - <control name="product_stock_alert_email_product_image-ratio"> - <type>image-ratio</type> - <var>Magento_Catalog::product_stock_alert_email_product_image:ratio</var> - </control> - <control name="product_stock_alert_email_product_image-height"> - <type>image-height</type> - <var>Magento_Catalog::product_stock_alert_email_product_image:height</var> - </control> - </components> - </control> -</controls> diff --git a/app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/quick_styles.xml b/app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/quick_styles.xml deleted file mode 100644 index 44b5f618b18..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_DesignEditor/controls/quick_styles.xml +++ /dev/null @@ -1,1116 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_DesignEditor - * @subpackage integration_tests - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - --> -<controls xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/DesignEditor/etc/quick_styles.xsd"> - <control name="store-name" title="Store Name" tab="header" column="left"> - <type>logo</type> - <components> - <control name="store-name:font"> - <type>font</type> - <components> - <control name="store-name:font-picker"> - <type>font-picker</type> - <selector><![CDATA[.logo]]></selector> - <attribute>font-family</attribute> - <options> - <option>"marvel"</option> - <option>Tahoma, Geneva, sans-serif</option> - <option>Georgia, serif</option> - <option>Impact, Charcoal, sans-serif</option> - <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> - <option>Century Gothic, sans-serif</option> - <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> - <option>‘Arial Black’, Gadget, sans-serif</option> - <option>‘Times New Roman’, Times, serif</option> - <option>‘Arial Narrow’, sans-serif</option> - <option>Verdana, Geneva, sans-serif</option> - <option>Copperplate / Copperplate Gothic Light, sans-serif</option> - <option>‘Lucida Console’, Monaco, monospace</option> - <option>‘Trebuchet MS’, Helvetica, sans-serif</option> - <option>‘Courier New’, Courier, monospace</option> - <option>Arial, Helvetica, sans-serif</option> - </options> - <var>Magento_DesignEditor::store-name:font-picker</var> - </control> - <control name="store-name:color-picker"> - <type>color-picker</type> - <selector><![CDATA[.logo span]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::store-name:color-picker</var> - </control> - </components> - </control> - <control name="store-name:logo-uploader"> - <type>logo-uploader</type> - <selector></selector> - <attribute></attribute> - <var>Magento_DesignEditor::store-name:logo-uploader</var> - </control> - </components> - </control> - <control name="header-background" title="Background" tab="header" column="left"> - <type>background</type> - <components> - <control name="header-background:color-picker"> - <type>color-picker</type> - <selector><![CDATA[.header]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::header-background:color-picker</var> - </control> - <control name="header-background:background-uploader"> - <type>background-uploader</type> - <components> - <control name="header-background:image-uploader"> - <type>image-uploader</type> - <selector><![CDATA[.header]]></selector> - <attribute>background-image</attribute> - <var>Magento_DesignEditor::header-background:image-uploader</var> - </control> - <control name="header-background:tile"> - <type>checkbox</type> - <selector><![CDATA[.header]]></selector> - <attribute>background-repeat</attribute> - <options> - <option>no-repeat</option> - <option>repeat</option> - <option>repeat-x</option> - <option>repeat-y</option> - <option>inherit</option> - </options> - <var>Magento_DesignEditor::header-background:tile</var> - </control> - </components> - </control> - </components> - </control> - - <control name="menu-background" title="Menu Background" tab="header" column="middle"> - <type>color-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > .submenu, - .navigation > ul > .level-top.more > .submenu > ul, - .level-top.more.hover:after, - .switcher .options > ul - ]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::menu-background</var> - </control> - <control name="menu-stroke" title="Menu Stroke" tab="header" column="middle"> - <type>color-picker</type> - <selector> - .navigation > ul > .level-top > .submenu, - .switcher .options > ul - </selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::menu-stroke</var> - </control> - <control name="menu-links" title="Menu Links" tab="header" column="middle"> - <type>color-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > .submenu a, - .navigation > ul > .level-top > .submenu a span - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::menu-links</var> - </control> - <control name="menu-links-hover" title="Menu Links Hover" tab="header" column="middle"> - <type>color-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > .submenu a:hover, - .navigation > ul > .level-top > .submenu a:hover span - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::menu-links-hover</var> - </control> - - <control name="header-links" title="Header Links" tab="header" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > a, - .navigation > ul > .level-top > a > span, - .action.showcart, - .header > .content .links a, - .switcher .options > ul a, - .action.switch - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::header-links</var> - </control> - <control name="header-links-hover" title="Header Links Hover" tab="header" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > a:hover, - .navigation > ul > .level-top > a:hover > span, - .navigation > ul > .level-top > a:active span, - .navigation > ul > .level-top > a:focus span, - .navigation > ul > .level-top.hover:hover > a span, - .navigation > ul > .level-top.hover.parent.hover > a span, - .navigation > ul > .level-top.hover.parent > a span, - .action.showcart:hover, - .action.showcart:active, - .action.showcart:focus, - .action.showcart.active, - .header > .content .links a:hover, - .switcher .options > ul a:hover, - .action.switch:focus, - .action.switch:hover, - .action.switch.active - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::header-links-hover</var> - </control> - <!-- - <control name="header-scroll-bar-background" title="Scroll Bar Background" tab="header" column="right"> - <type>color-picker</type> - <selector>.scroll</selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::header-scroll-bar-background</var> - </control> - <control name="header-scroll-bar-handle" title="Scroll Bar Handle" tab="header" column="right"> - <type>color-picker</type> - <selector>.scroll .handle</selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::header-scroll-bar-handle</var> - </control> ---> - <control name="search-field" title="Search Field" tab="header" column="right"> - <type>color-picker</type> - <selector> - .block.search input, - .block.search .action.search - </selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::search-field</var> - </control> - <control name="search-field-text" title="Search Field Text, Search Icon" tab="header" column="right"> - <type>color-picker</type> - <selector> - .block.search input, - .block.search .action.search span, - .block.search input[type="password"]::-webkit-input-placeholder, - .block.search input[type="text"]::-webkit-input-placeholder - </selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::search-field-text</var> - </control> - <control name="search-field-stroke" title="Search Field Stroke" tab="header" column="right"> - <type>color-picker</type> - <selector> - .block.search input, - .block.search .action.search - </selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::search-field-stroke</var> - </control> - - - <control name="page-background" title="Page Background" tab="backgrounds" column="left"> - <type>background</type> - <components> - <control name="page-background:color-picker"> - <type>color-picker</type> - <selector><![CDATA[ - .page.wrapper, - .product.data > .item.title:not(.disabled) > .switch:active, - .product.data > .item.title:not(.disabled) > .switch:focus, - .product.data > .item.title:not(.disabled) > .switch:hover, - .product.data > .item.title.active > .switch, - .footer - ]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::page-background:color-picker</var> - </control> - <control name="page-background:background-uploader"> - <type>background-uploader</type> - <components> - <control name="page-background:image-uploader"> - <type>image-uploader</type> - <selector><![CDATA[ - .page.wrapper, - .footer - ]]></selector> - <attribute>background-image</attribute> - <var>Magento_DesignEditor::page-background:image-uploader</var> - </control> - <control name="page-background:tile"> - <type>checkbox</type> - <selector><![CDATA[ - .page.wrapper, - .footer - ]]></selector> - <attribute>background-repeat</attribute> - <options> - <option>no-repeat</option> - <option>repeat</option> - <option>repeat-x</option> - <option>repeat-y</option> - <option>inherit</option> - </options> - <var>Magento_DesignEditor::page-background:tile</var> - </control> - </components> - </control> - </components> - </control> - - <control name="form-background" title="Form Background" tab="backgrounds" column="middle"> - <type>color-picker</type> - <selector><![CDATA[ - .login.container, - .block.add.review, - .opc.wrapper > .opc .section > .step, - .opc.wrapper > .opc .section.active > .step-title, - .items.data tbody:nth-child(even) tr, - .cart.summary, - .minicart.wrapper .block.minicart, - .prices.tier, - .form.send.friend .fieldset, - .form.address.edit .fieldset, - .form.edit.account .fieldset, - .form.search.advanced, - .form.orders.search, - .form.contact, - .form.password.forget .fieldset, - .form.create.account .fieldset, - .form.wishlist.share .fieldset, - .block.dashboard:not(.welcome):not(.orders) .content, - .block.reviews.list .item.review:nth-child(odd), - .fieldset.bundle.options > .field, - .block.bundle.summary, - .data.table.reviews tbody tr:nth-child(even) td, - .data.table.wishlist tbody tr:nth-child(even), - .data.table.tags tbody tr:nth-child(even) td, - .data.comparison tr:nth-child(odd) .cell.attribute - ]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::form-background</var> - </control> - <!-- - <control name="form-stroke" title="Form 1 Stroke" tab="backgrounds" column="middle"> - <type>color-picker</type> - <selector></selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::form-stroke</var> - </control> - <control name="form2-background" title="Form 2 Background" tab="backgrounds" column="middle"> - <type>color-picker</type> - <selector></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::form2-background</var> - </control> - <control name="form2-stroke" title="Form 2 Stroke" tab="backgrounds" column="middle"> - <type>color-picker</type> - <selector></selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::form2-stroke</var> - </control> - --> - <control name="form-field-stroke" title="Form Field Stroke" tab="backgrounds" column="middle"> - <type>color-picker</type> - <selector><![CDATA[input[type="password"], input[type="text"], select, textarea, .fieldset > .field .addon .addbefore, .fieldset > .field .addon .addafter, .product.main.info .product.options.wrapper .field .addon .addbefore, .product.main.info .product.options.wrapper .field .addon .addafter, .form.password.forget .fieldset > .field .addon .addbefore, .form.create.account .fieldset > .field .addon .addbefore, .form.password.forget .fieldset > .field .addon .addafter, .form.create.account .fieldset > .field .addon .addafter, .block.add.review .fieldset > .field:not(.ratings) .addon .addbefore, .block.add.review .fieldset > .field:not(.ratings) .addon .addafter]]></selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::form-field-stroke</var> - </control> - <control name="form-field-stroke-clicked" title="Form Field Stroke Clicked" tab="backgrounds" column="right"> - <type>color-picker</type> - <selector> - input[type="password"]:focus, - input[type="text"]:focus, - select:focus, - textarea:focus - </selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::form-field-stroke-clicked</var> - </control> - <control name="image-stroke-keylines" title="Image Stroke & Keylines" tab="backgrounds" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .opc.wrapper > .opc .section > .step:before, - .step.login.wrapper .block.guest:before, - .order.data.items tfoot tr:first-child td, - .items.data .item.actions td:before, - .cart.summary .summary.title, - .cart.summary .block, - .data-table td, - - .data.comparison .cell.product.info, - .data.comparison .addto.links, - .data.comparison .cell.label, - .data.comparison .cell.label.product, - .data.comparison .cell.label, - .data.comparison td:last-child, - - .block.widget.viewed, - .block.crosssell, - .block.upsell, - .block.related, - .block.widget.viewed .products.list .item.product .addto.links, - .block.crosssell .products.list .item.product .addto.links, - .block.upsell .products.list .item.product .addto.links, - .block.related .products.list .item.product .addto.links, - .product.info.detailed + .block.upsell, - .product.info.detailed + .block.related, - .toolbar.alternative .pages, - .toolbar.alternative .amount, - .toolbar.alternative .limiter, - .toolbar .options, - .product.info.main .page.title.product + .price-box, - .product.info.main .product.addto.links, - .block.bundle.summary > .title, - .block.bundle.summary .photo, - .block.bundle.summary .box.tocart, - .block.bundle.summary .subtitle, - .product.photo.thumbs .item.thumb .active img, - - .login.container .block.new:before, - .block.filter .filtered .item, - .block.add.review .fieldset > .legend, - .data.table.tags tbody td, - .data.table.reviews tbody td - ]]></selector> - <attribute>border-color</attribute> - <var>Magento_DesignEditor::image-stroke-keylines</var> - </control> - -<!-- <control name="scroll-bar-background" title="Scroll Bar Background" tab="backgrounds" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::scroll-bar-background</var> -</control> -<control name="scroll-bar-handle" title="Scroll Bar Handle" tab="backgrounds" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::scroll-bar-handle</var> -</control> --> - - <control name="radio-checkbox-icon" title="Radio Buttons/Checkboxes Icon" tab="buttons" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::radio-checkbox-icon</var> - </control> - <control name="radio-checkbox-background" title="Radio Buttons/Checkboxes Background" tab="buttons" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::radio-checkbox-background</var> - </control> - <control name="radio-checkbox-stroke" title="Radio Buttons/Checkboxes Stroke" tab="buttons" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::radio-checkbox-stroke</var> - </control> - - <control name="button-text" title="Buttons Text" tab="buttons" column="left"> - <type>color-picker</type> - <selector><![CDATA[ - .block.add.review .action.submit span, - .step.login.wrapper button.action:not(.reload) span, - .cart.summary .block .action span, - .action.checkout span, - .action.subscribe span, - .action.tocart span, - .action.primary.customize span, - .action.primary.tocart span, - .login.container .action.login span, - .login.container .action.create span, - - .form.send.friend .action.save span, - .form.address.edit .action.save span, - .form.edit.account .action.save span, - .form.search.advanced .action.save span, - .form.orders.search .action.save span, - .form.contact .action.save span, - .form.password.forget .action.save span, - .form.create.account .action.save span, - .form.wishlist.share .action.save span, - .form.password.reset .action.save span, - .form.add.tag .action.save span, - - .form.send.friend .action.submit span, - .form.address.edit .action.submit span, - .form.edit.account .action.submit span, - .form.search.advanced .action.submit span, - .form.orders.search .action.submit span, - .form.contact .action.submit span, - .form.password.forget .action.submit span, - .form.create.account .action.submit span, - .form.wishlist.share .action.submit span, - .form.password.reset .action.submit span, - .form.add.tag .action.submit span, - - .form.send.friend .action.add span, - .form.address.edit .action.add span, - .form.edit.account .action.add span, - .form.search.advanced .action.add span, - .form.orders.search .action.add span, - .form.contact .action.add span, - .form.password.forget .action.add span, - .form.create.account .action.add span, - .form.wishlist.share .action.add span, - .form.password.reset .action.add span, - .form.add.tag .action.add span, - - .form.newsletter.manage .action.save span, - - .form.search.advanced .action span, - .form.orders.search .action span, - .form.contact .action span, - - .banner.main .banner.action span, - .opc.wrapper .form:not(.login) .actions button.action span, - - .data.table.wishlist + .actions .primary .action.share span, - .data.table.wishlist + .actions .primary .action.update span - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::button-text</var> - </control> - <control name="button-background" title="Buttons" tab="buttons" column="left"> - <type>color-picker</type> - <selector><![CDATA[ - .block.add.review .action.submit, - .step.login.wrapper button.action:not(.reload), - .cart.summary .block .action, - .action.checkout, - .action.subscribe, - .action.tocart, - .action.primary.customize, - .action.primary.tocart, - .login.container .action.login, - .login.container .action.create, - - .form.send.friend .action.save, - .form.address.edit .action.save, - .form.edit.account .action.save, - .form.search.advanced .action.save, - .form.orders.search .action.save, - .form.contact .action.save, - .form.password.forget .action.save, - .form.create.account .action.save, - .form.wishlist.share .action.save, - .form.password.reset .action.save, - .form.add.tag .action.save, - - .form.send.friend .action.submit, - .form.address.edit .action.submit, - .form.edit.account .action.submit, - .form.search.advanced .action.submit, - .form.orders.search .action.submit, - .form.contact .action.submit, - .form.password.forget .action.submit, - .form.create.account .action.submit, - .form.wishlist.share .action.submit, - .form.password.reset .action.submit, - .form.add.tag .action.submit, - - .form.send.friend .action.add, - .form.address.edit .action.add, - .form.edit.account .action.add, - .form.search.advanced .action.add, - .form.orders.search .action.add, - .form.contact .action.add, - .form.password.forget .action.add, - .form.create.account .action.add, - .form.wishlist.share .action.add, - .form.password.reset .action.add, - .form.add.tag .action.add, - - .form.newsletter.manage .action.save, - - .form.search.advanced .action, - .form.orders.search .action, - .form.contact .action, - - .banner.main .banner.action, - .opc.wrapper .form:not(.login) .actions button.action, - - .data.table.wishlist + .actions .primary .action.share, - .data.table.wishlist + .actions .primary .action.update - ]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::button-background</var> - </control> - <control name="button-hover" title="Buttons Hover" tab="buttons" column="left"> - <type>color-picker</type> - <selector><![CDATA[ - .block.add.review .action.submit:hover, - .step.login.wrapper button.action:not(.reload):hover, - .cart.summary .block .action:hover, - .action.checkout:hover, - .action.subscribe:hover, - .action.tocart:hover, - .action.primary.customize:hover, - .action.primary.tocart:hover, - .login.container .action.login:hover, - .login.container .action.create:hover, - - .form.send.friend .action.save:hover, - .form.address.edit .action.save:hover, - .form.edit.account .action.save:hover, - .form.search.advanced .action.save:hover, - .form.orders.search .action.save:hover, - .form.contact .action.save:hover, - .form.password.forget .action.save:hover, - .form.create.account .action.save:hover, - .form.wishlist.share .action.save:hover, - .form.password.reset .action.save:hover, - .form.add.tag .action.save:hover, - - .form.send.friend .action.submit:hover, - .form.address.edit .action.submit:hover, - .form.edit.account .action.submit:hover, - .form.search.advanced .action.submit:hover, - .form.orders.search .action.submit:hover, - .form.contact .action.submit:hover, - .form.password.forget .action.submit:hover, - .form.create.account .action.submit:hover, - .form.wishlist.share .action.submit:hover, - .form.password.reset .action.submit:hover, - .form.add.tag .action.submit:hover, - - .form.send.friend .action.add:hover, - .form.address.edit .action.add:hover, - .form.edit.account .action.add:hover, - .form.search.advanced .action.add:hover, - .form.orders.search .action.add:hover, - .form.contact .action.add:hover, - .form.password.forget .action.add:hover, - .form.create.account .action.add:hover, - .form.wishlist.share .action.add:hover, - .form.password.reset .action.add:hover, - .form.add.tag .action.add:hover, - - .form.newsletter.manage .action.save:hover, - - .form.search.advanced .action:hover, - .form.orders.search .action:hover, - .form.contact .action:hover, - - .banner.main .banner.action:hover, - .opc.wrapper .form:not(.login) .actions button.action:hover, - - .data.table.wishlist + .actions .primary .action.share:hover, - .data.table.wishlist + .actions .primary .action.update:hover - ]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::button-hover</var> - </control> - <control name="icons" title="Icons" tab="buttons" column="middle"> - <type>color-picker</type> - <selector><![CDATA[ - .minicart.wrapper .action.previous span, - .minicart.wrapper .action.next span, - .action.delete span, - .toolbar .modes .mode span, - .toolbar .action.next span, - .toolbar .action.previous span, - .action.mailto span - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::icons</var> - </control> - <control name="icons-hover" title="Icons Hover" tab="buttons" column="middle"> - <type>color-picker</type> - <selector><![CDATA[ - .minicart.wrapper .action.previous:hover span, - .minicart.wrapper .action.next:hover span, - .action.delete:hover span, - .toolbar .modes .mode:hover span, - .toolbar .action.next:hover span, - .toolbar .action.previous:hover span, - .action.mailto:hover span - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::icons-hover</var> - </control> - <!-- - <control name="icons2" title="Icons 2" tab="buttons" column="middle"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::icons2</var> - </control> - - <control name="accents" title="Accent Color" tab="buttons" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::accents</var> - </control> - - <control name="size-swatches" title="Size Swatches" tab="buttons" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::size-swatches</var> - </control> - <control name="size-swatches-unavailable" title="Size Swatches (Unavailable Size)" tab="buttons" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::size-swatches-unavailable</var> - </control> - <control name="size-swatches-hover" title="Size Swatches Hover/Selected Stroke" tab="buttons" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::size-swatches-hover</var> - </control> - - - - <control name="tooltip-text" title="Tooltip 1 Text" tab="tips" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::tooltip-text</var> - </control> - <control name="tooltip-box" title="Tooltip 1 Box" tab="tips" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::tooltip-box</var> - </control> - <control name="tooltip-stroke" title="Tooltip 1 Stroke" tab="tips" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::tooltip-stroke</var> - </control> - <control name="tooltip2-text" title="Tooltip 2 Text" tab="tips" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::tooltip2-text</var> - </control> - <control name="tooltip2-box" title="Tooltip 2 Box" tab="tips" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::tooltip2-box</var> - </control> - <control name="tooltip2-stroke" title="Tooltip 2 Stroke" tab="tips" column="left"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::tooltip2-stroke</var> - </control> - --> - - <control name="error-icon" title="Error Icon" tab="tips" column="left"> - <type>color-picker</type> - <selector><![CDATA[.message.error > *:first-child:before]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::error-icon</var> - </control> - <control name="error-box" title="Error Box" tab="tips" column="left"> - <type>color-picker</type> - <selector><![CDATA[.message.error]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::error-box</var> - </control> - - <control name="success-icon" title="Success Icon" tab="tips" column="middle"> - <type>color-picker</type> - <selector><![CDATA[.message.success > *:first-child:before]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::success-icon</var> - </control> - <control name="success-box" title="Success Box" tab="tips" column="middle"> - <type>color-picker</type> - <selector><![CDATA[.message.success]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::success-box</var> - </control> - - <control name="notice-icon" title="Notice Icon" tab="tips" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .message.notice > *:first-child:before - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::notice-icon</var> - </control> - <control name="notice-box" title="Notice Box" tab="tips" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .message.notice - ]]></selector> - <attribute>background-color</attribute> - <var>Magento_DesignEditor::notice-box</var> - </control> - - <control name="banner-text" title="Banner Text" tab="fonts" column="left"> - <type>font</type> - <components> - <control name="banner-text:font-picker"> - <type>font-picker</type> - <selector><![CDATA[.home.banners .banner.text]]></selector> - <attribute>font-family</attribute> - <options> - <option>"marvel", Arial, sans-serif</option> - <option>Tahoma, Geneva, sans-serif</option> - <option>Georgia, serif</option> - <option>Impact, Charcoal, sans-serif</option> - <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> - <option>Century Gothic, sans-serif</option> - <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> - <option>‘Arial Black’, Gadget, sans-serif</option> - <option>‘Times New Roman’, Times, serif</option> - <option>‘Arial Narrow’, sans-serif</option> - <option>Verdana, Geneva, sans-serif</option> - <option>Copperplate / Copperplate Gothic Light, sans-serif</option> - <option>‘Lucida Console’, Monaco, monospace</option> - <option>‘Trebuchet MS’, Helvetica, sans-serif</option> - <option>‘Courier New’, Courier, monospace</option> - <option>Arial, Helvetica, sans-serif</option> - </options> - <var>Magento_DesignEditor::banner-text:font-picker</var> - </control> - <control name="banner-text:color-picker"> - <type>color-picker</type> - <selector><![CDATA[.home.banners .banner.text]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::banner-text:color-picker</var> - </control> - </components> - </control> - - <control name="menu" title="Menu & Header Links" tab="fonts" column="left"> - <type>font</type> - <components> - <control name="menu:font-picker"> - <type>font-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > a, - .action.showcart .qty, - .switcher strong, - .product.name, - .toolbar .limiter select, - .toolbar .sorter select, - .navigation > ul > .level-top > .submenu > ul .level1 > a - ]]></selector> - <attribute>font-family</attribute> - <options> - <option>"sourcesanspro", Arial, sans-serif</option> - <option>Tahoma, Geneva, sans-serif</option> - <option>Georgia, serif</option> - <option>Impact, Charcoal, sans-serif</option> - <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> - <option>Century Gothic, sans-serif</option> - <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> - <option>‘Arial Black’, Gadget, sans-serif</option> - <option>‘Times New Roman’, Times, serif</option> - <option>‘Arial Narrow’, sans-serif</option> - <option>Verdana, Geneva, sans-serif</option> - <option>Copperplate / Copperplate Gothic Light, sans-serif</option> - <option>‘Lucida Console’, Monaco, monospace</option> - <option>‘Trebuchet MS’, Helvetica, sans-serif</option> - <option>‘Courier New’, Courier, monospace</option> - <option>Arial, Helvetica, sans-serif</option> - </options> - <var>Magento_DesignEditor::menu:font-picker</var> - </control> - <control name="menu:color-picker"> - <type>color-picker</type> - <selector><![CDATA[ - .navigation > ul > .level-top > a, - .action.showcart .qty, - .switcher strong, - .product.name, - .toolbar .limiter select, - .toolbar .sorter select - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::menu:color-picker</var> - </control> - </components> - </control> - <control name="page-headings" title="Page Headings" tab="fonts" column="left"> - <type>font</type> - <components> - <control name="page-headings:font-picker"> - <type>font-picker</type> - <selector><![CDATA[ - .page.title .title, - .opc.wrapper > .opc .section > .step-title h2, - .column.main .block > .title - ]]></selector> - <attribute>font-family</attribute> - <options> - <option>"sourcesanspro", Arial, sans-serif</option> - <option>Tahoma, Geneva, sans-serif</option> - <option>Georgia, serif</option> - <option>Impact, Charcoal, sans-serif</option> - <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> - <option>Century Gothic, sans-serif</option> - <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> - <option>‘Arial Black’, Gadget, sans-serif</option> - <option>‘Times New Roman’, Times, serif</option> - <option>‘Arial Narrow’, sans-serif</option> - <option>Verdana, Geneva, sans-serif</option> - <option>Copperplate / Copperplate Gothic Light, sans-serif</option> - <option>‘Lucida Console’, Monaco, monospace</option> - <option>‘Trebuchet MS’, Helvetica, sans-serif</option> - <option>‘Courier New’, Courier, monospace</option> - <option>Arial, Helvetica, sans-serif</option> - </options> - <var>Magento_DesignEditor::page-headings:font-picker</var> - </control> - <control name="page-headings:color-picker"> - <type>color-picker</type> - <selector><![CDATA[ - .page.title .title, - .opc.wrapper > .opc .section > .step-title h2, - .column.main .block > .title - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::page-headings:color-picker</var> - </control> - </components> - </control> - - <control name="body-text" title="Body Text" tab="fonts" column="middle"> - <type>font</type> - <components> - <control name="body-text:font-picker"> - <type>font-picker</type> - <selector><![CDATA[ - body, - .footer .links a, - .toolbar .limiter .label, - .toolbar .sorter .label, - .products.wrapper .products.list .item .price-box, - .reviews.summary .reviews.actions, - .block.add.review .fieldset > .legend, - .column.main .block > .title - ]]></selector> - <attribute>font-family</attribute> - <options> - <option>"sourcesanspro", Arial, sans-serif</option> - <option>Tahoma, Geneva, sans-serif</option> - <option>Georgia, serif</option> - <option>Impact, Charcoal, sans-serif</option> - <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> - <option>Century Gothic, sans-serif</option> - <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> - <option>‘Arial Black’, Gadget, sans-serif</option> - <option>‘Times New Roman’, Times, serif</option> - <option>‘Arial Narrow’, sans-serif</option> - <option>Verdana, Geneva, sans-serif</option> - <option>Copperplate / Copperplate Gothic Light, sans-serif</option> - <option>‘Lucida Console’, Monaco, monospace</option> - <option>‘Trebuchet MS’, Helvetica, sans-serif</option> - <option>‘Courier New’, Courier, monospace</option> - <option>Arial, Helvetica, sans-serif</option> - </options> - <var>Magento_DesignEditor::body-text:font-picker</var> - </control> - <control name="body-text:color-picker"> - <type>color-picker</type> - <selector><![CDATA[ - body, - .footer .links a, - .toolbar .limiter .label, - .toolbar .sorter .label, - .products.wrapper .products.list .item .price-box, - .reviews.summary .reviews.actions, - .block.add.review .fieldset > .legend, - .column.main .block > .title - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::body-text:color-picker</var> - </control> - </components> - </control> - - <control name="buttons" title="Button Text" tab="fonts" column="middle"> - <type>font</type> - <components> - <control name="buttons:font-picker"> - <type>font-picker</type> - <selector><![CDATA[ - .block.add.review .action.submit span, - .step.login.wrapper button.action:not(.reload) span, - .cart.summary .block .action span, - .action.checkout span, - .action.subscribe span, - .action.tocart span, - .action.primary.customize span, - .action.primary.tocart span, - .login.container .action.login span, - .login.container .action.create span, - - .form.send.friend .action.save span, - .form.address.edit .action.save span, - .form.edit.account .action.save span, - .form.search.advanced .action.save span, - .form.orders.search .action.save span, - .form.contact .action.save span, - .form.password.forget .action.save span, - .form.create.account .action.save span, - .form.wishlist.share .action.save span, - .form.password.reset .action.save span, - .form.add.tag .action.save span, - - .form.send.friend .action.submit span, - .form.address.edit .action.submit span, - .form.edit.account .action.submit span, - .form.search.advanced .action.submit span, - .form.orders.search .action.submit span, - .form.contact .action.submit span, - .form.password.forget .action.submit span, - .form.create.account .action.submit span, - .form.wishlist.share .action.submit span, - .form.password.reset .action.submit span, - .form.add.tag .action.submit span, - - .form.send.friend .action.add span, - .form.address.edit .action.add span, - .form.edit.account .action.add span, - .form.search.advanced .action.add span, - .form.orders.search .action.add span, - .form.contact .action.add span, - .form.password.forget .action.add span, - .form.create.account .action.add span, - .form.wishlist.share .action.add span, - .form.password.reset .action.add span, - .form.add.tag .action.add span, - - .form.newsletter.manage .action.save span, - - .form.search.advanced .action span, - .form.orders.search .action span, - .form.contact .action span, - - .banner.main .banner.action span, - .opc.wrapper .form:not(.login) .actions button.action span, - - .data.table.wishlist + .actions .primary .action.share span, - .data.table.wishlist + .actions .primary .action.update span - ]]></selector> - <attribute>font-family</attribute> - <options> - <option>"marvel", Arial, sans-serif</option> - <option>Tahoma, Geneva, sans-serif</option> - <option>Georgia, serif</option> - <option>Impact, Charcoal, sans-serif</option> - <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> - <option>Century Gothic, sans-serif</option> - <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> - <option>‘Arial Black’, Gadget, sans-serif</option> - <option>‘Times New Roman’, Times, serif</option> - <option>‘Arial Narrow’, sans-serif</option> - <option>Verdana, Geneva, sans-serif</option> - <option>Copperplate / Copperplate Gothic Light, sans-serif</option> - <option>‘Lucida Console’, Monaco, monospace</option> - <option>‘Trebuchet MS’, Helvetica, sans-serif</option> - <option>‘Courier New’, Courier, monospace</option> - <option>Arial, Helvetica, sans-serif</option> - </options> - <var>Magento_DesignEditor::buttons:font-picker</var> - </control> - <control name="buttons:color-picker"> - <type>color-picker</type> - <selector><![CDATA[ - .block.add.review .action.submit span, - .step.login.wrapper button.action span, - .cart.summary .block .action span, - .action.checkout span, - .action.subscribe span, - .action.tocart span, - .action.primary.customize span, - .action.primary.tocart span, - .login.container .action.login span, - .login.container .action.create span, - .form.password.forget .action.submit span, - .form.create.account .action.submit span, - .banner.main .banner.action span, - .opc.wrapper .form:not(.login) .actions button.action span - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::buttons:color-picker</var> - </control> - </components> - </control> - - <control name="text-links" title="Links" tab="fonts" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .product.info.main .product.addto.links .action > span, - .products.wrapper.grid .products.list .secondary .action > span, - .filter a - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::text-links</var> - </control> - <control name="text-links-hover" title="Links Hover" tab="fonts" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .product.info.main .product.addto.links .action:hover > span, - .products.wrapper.grid .products.list .secondary .action:hover > span, - .filter a:hover - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::text-links-hover</var> - </control> - <!-- - <control name="text-links-active" title="Text Links Active" tab="fonts" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::text-links-active</var> - </control> - <control name="text-links-product" title="Text Links Product Name" tab="fonts" column="right"> - <type>color-picker</type> - <selector>.menu a:hover</selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::text-links-product</var> - </control> - --> - <control name="small-links" title="Small Links" tab="fonts" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .minicart .product.options.wrapper .more - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::small-links</var> - </control> - <control name="small-links-hover" title="Small Links Hover" tab="fonts" column="right"> - <type>color-picker</type> - <selector><![CDATA[ - .minicart .product.options.wrapper .more:hover - ]]></selector> - <attribute>color</attribute> - <var>Magento_DesignEditor::small-links-hover</var> - </control> -</controls> diff --git a/app/design/frontend/Magento/plushe/Magento_Reports/layout/catalog_product_view.xml b/app/design/frontend/Magento/plushe/Magento_Reports/layout/catalog_product_view.xml deleted file mode 100644 index 455dc6c5b61..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Reports/layout/catalog_product_view.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceContainer name="content"> - <block class="Magento\Reports\Block\Product\Widget\Viewed\Item" name="product.widget.viewed.item" template="Magento_Reports::product/widget/viewed/item.phtml"> - <arguments> - <argument name="type" xsi:type="string">widget-viewed</argument> - <argument name="view_mode" xsi:type="string">grid</argument> - <argument name="image_type" xsi:type="string">recently_viewed_products_grid_content_widget</argument> - </arguments> - </block> - </referenceContainer> - <referenceContainer name="content.bottom"> - <block class="Magento\Reports\Block\Product\Widget\Viewed" name="product.viewed.products" template="Magento_Reports::product/widget/viewed.phtml"> - <arguments> - <argument name="type" xsi:type="string">widget-viewed</argument> - <argument name="view_mode" xsi:type="string">grid</argument> - </arguments> - </block> - </referenceContainer> -</layout> diff --git a/app/design/frontend/Magento/plushe/Magento_Review/layout/catalog_product_view.xml b/app/design/frontend/Magento/plushe/Magento_Review/layout/catalog_product_view.xml deleted file mode 100644 index d49f0001bb6..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Review/layout/catalog_product_view.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="product.info.details"> - <block class="Magento\Catalog\Block\Product\View\Additional" name="product.info.reviews.tab" as="product_reviews" group="detailed_info"> - <arguments> - <argument name="title" translate="true" xsi:type="string">Reviews</argument> - </arguments> - <block class="Magento\Review\Block\Form" name="product.review.form" as="review_form"> - <container name="product.review.form.fields.before" as="form_fields_before" label="Review Form Fields Before" htmlTag="div" htmlClass="rewards"/> - </block> - <block class="Magento\Review\Block\Product\View\ListView" name="product.info.product_additional_data" as="product_additional_data" template="product/view/list.phtml"/> - </block> - </referenceBlock> -</layout> diff --git a/app/design/frontend/Magento/plushe/Magento_Review/layout/review_product_list.xml b/app/design/frontend/Magento/plushe/Magento_Review/layout/review_product_list.xml deleted file mode 100644 index 5148d484f3f..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Review/layout/review_product_list.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="root"> - <action method="setTemplate"> - <argument name="template" xsi:type="string">blank.phtml</argument> - </action> - <block class="Magento\Review\Block\Product\View" as="content" name="product.redirect" template="redirect.phtml"/> - </referenceBlock> -</layout> diff --git a/app/design/frontend/Magento/plushe/Magento_Theme/layout/default.xml b/app/design/frontend/Magento/plushe/Magento_Theme/layout/default.xml deleted file mode 100644 index 12e7156251c..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Theme/layout/default.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="logo"> - <arguments> - <argument name="theme_name" xsi:type="string">plushe</argument> - </arguments> - </referenceBlock> - <referenceContainer name="header-wrapper"> - <block class="Magento\Framework\View\Element\Html\Links" name="header.links" after="minicart"> - <arguments> - <argument name="css_class" xsi:type="string">links</argument> - </arguments> - </block> - </referenceContainer> - <referenceBlock name="footer_links"> - <arguments> - <argument name="css_class" xsi:type="string">links</argument> - </arguments> - </referenceBlock> - <referenceBlock name="catalog.topnav"> - <arguments> - <argument name="columns_limit" xsi:type="string">1</argument> - </arguments> - </referenceBlock> - <move element="header" destination="header.links" before="-"/> -</layout> diff --git a/app/design/frontend/Magento/plushe/Magento_Theme/layout/default_head_blocks.xml b/app/design/frontend/Magento/plushe/Magento_Theme/layout/default_head_blocks.xml deleted file mode 100644 index 1765210c643..00000000000 --- a/app/design/frontend/Magento/plushe/Magento_Theme/layout/default_head_blocks.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../app/code/Magento/Core/etc/layout_single.xsd"> - <referenceBlock name="head"> - <block class="Magento\Theme\Block\Html\Head\Css" name="css-styles-css"> - <arguments> - <argument name="file" xsi:type="string">css/styles.css</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-matchmedia-js"> - <arguments> - <argument name="file" xsi:type="string">matchMedia.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-responsive-js" after="mage-zoom-js"> - <arguments> - <argument name="file" xsi:type="string">js/responsive.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-head-js"> - <arguments> - <argument name="file" xsi:type="string">headjs/head.min.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-jquery-dropdowns-js"> - <arguments> - <argument name="file" xsi:type="string">js/jquery.dropdowns.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-tabs-js"> - <arguments> - <argument name="file" xsi:type="string">js/tabs.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-navigation-menu-js"> - <arguments> - <argument name="file" xsi:type="string">js/navigation-menu.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-theme-js"> - <arguments> - <argument name="file" xsi:type="string">js/theme.js</argument> - </arguments> - </block> - <block class="Magento\Theme\Block\Html\Head\Script" name="js-selectivizr-js"> - <arguments> - <argument name="file" xsi:type="string">selectivizr.js</argument> - <argument name="properties" xsi:type="array"> - <item name="ie_condition" xsi:type="string">lt IE 9</item> - </argument> - </arguments> - </block> - </referenceBlock> -</layout> diff --git a/app/design/frontend/Magento/plushe/css/print.css b/app/design/frontend/Magento/plushe/css/print.css deleted file mode 100644 index 486b06c3e45..00000000000 --- a/app/design/frontend/Magento/plushe/css/print.css +++ /dev/null @@ -1,157 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -* { background:none !important; text-align:left !important; } -body { background:#fff !important; font-size:9pt !important; margin:15px !important; } - -.header-container, -.footer-before-container, -.footer-container, -.widget, -.pager, -.toolbar, -.actions, -.buttons-set { display:none !important; } - -.page-print .data-table .cart-tax-total { background-position:100% -54px; } -.page-print .data-table .cart-tax-info { display:block !important; } - - - - -/* - * My Account -> My Orders - * ------------------------------------------------------------------------------ */ -.order-date { - margin-bottom: 15px; -} - -.order.details .title, -.order.details .caption { - clear: both; - margin-bottom: 15px; -} - -.order.details .title strong, -.order.details .caption strong { - line-height: 1.2; - font-weight: 200; - font-size: 20px; -} - -/* blocks */ -.order.details .block.order { - float: left; - width: 48%; - margin-bottom: 30px; - padding-right: 2%; -} -.order.details .block.order .title { - margin-bottom: 15px; -} -.order.details .block.order .title strong { - line-height: 1.2; - font-weight: 200; - font-size: 20px; -} -.order.details .block.order .content address { - font-style: normal; -} -.data.table.order.tracking { - margin: 10px 0; -} - -/* tables */ -.data.table.order { - margin-bottom: 45px; - width: 100%; -} -.data.table.order thead th { - padding: 0 10px; -} -.data.table.order thead tr:last-child th { - padding-bottom: 10px; - border-bottom: 3px solid #e5e5e5; -} -.data.table.order td.col.qty { - width: 90px; - text-align: left; -} -.data.table.order td.col.price, -.data.table.order td.col.subtotal { - text-align: left; -} -.data.table.order td { - padding: 16px 10px 10px; - vertical-align: top; -} -.data.table.order th { - text-align: left; - font-weight: 400; - font-size: 14px; - vertical-align: top; -} -.data.table.order tr:first-child th { - font-weight: 400; - font-size: 16px; -} - -/* h4 */ -.data.table.order td h4 { - margin: 0; -} - -/* .item.options */ -.data.table.order .item.options, -.data.table.order .item-options { - margin: 5px 0; -} -.data.table.order .item.options dt, -.data.table.order .item-options dt { - font-weight: 400; - display: inline; - margin-right: 10px; - float: left; - clear: left; -} -.data.table.order .item.options dt:after, -.data.table.order .item-options dt:after { - content: ': '; -} -.data.table.order .item.options dd, -.data.table.order .item-options dd { - font-weight: 200; - margin: 0 0 10px 10px; - padding: 0; -} - -/* tfoot */ -.data.table.order tfoot tr:first-child td { - border-top: 3px solid #e5e5e5; - padding-top: 15px; -} -.data.table.order.tracking th, -.data.table.order.tracking td { - padding: 0; -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/arrows.less b/app/design/frontend/Magento/plushe/css/source/clearless/arrows.less deleted file mode 100644 index 7a67f21bab2..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/arrows.less +++ /dev/null @@ -1,172 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -.arrow(@pos, @size, @bg-color) { - width: 0; - height: 0; - border: @size solid transparent; - ._abbor_el( @pos, @bg-color ); -} - -.arrowbox(@pos, @size, @bg-color, @offset:50%) { - - @after-margin: @size * -1px; - - position: relative; - background: @bg-color; - - &:after, - &:before { - ._abpos(@pos); - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - - &:after { - border-color: transparent; - ._abbor_el(@pos, @bg-color); - border-width: @size; - ._abpos_el(@pos, @size, @offset); - ._abmar_el(@pos, @after-margin); - } - -} - -.arrowbox(@pos, @size, @bg-color, @border-width, @border-color, @offset:50%) { - - @before-margin: (@size + round(@border-width * 1.41421356)) * -1px; - - .arrowbox(@pos, @size, @bg-color, @offset); - - border: @border-width solid @border-color; - - &:before { - border-color: transparent; - ._abbor_el(@pos, @border-color); - border-width: @before-margin * -1; - ._abpos_el(@pos, @size, @offset); - ._abmar_el(@pos, @before-margin); - } - -} - -._abpos( @pos ) when ( @pos = left ) { - right: 100%; -} - -._abpos( @pos ) when ( @pos = right ) { - left: 100%; -} - -._abpos( @pos ) when ( @pos = up ) { - bottom: 100%; -} - -._abpos( @pos ) when ( @pos = down ) { - top: 100%; -} - -._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = left ) { - top: @size; -} - -._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = right ) { - top: @size; -} - -._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = up ) { - left: @size; -} - -._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = down ) { - left: @size; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = left ) { - top: @offset; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = right ) { - top: @offset; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = up ) { - left: @offset; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = down ) { - left: @offset; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = left ) { - top: @offset + @size; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = right ) { - top: @offset + @size; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = up ) { - left: @offset + @size; -} - -._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = down ) { - left: @offset + @size; -} - -._abbor_el( @pos, @color ) when ( @pos = left ) { - border-right-color: @color; -} - -._abbor_el( @pos, @color ) when ( @pos = right ) { - border-left-color: @color; -} - -._abbor_el( @pos, @color ) when ( @pos = up ) { - border-bottom-color: @color; -} - -._abbor_el( @pos, @color ) when ( @pos = down ) { - border-top-color: @color; -} - -._abmar_el( @pos, @margin ) when ( @pos = left ) { - margin-top: @margin; -} - -._abmar_el( @pos, @margin ) when ( @pos = right ) { - margin-top: @margin; -} - -._abmar_el( @pos, @margin ) when ( @pos = up ) { - margin-left: @margin; -} - -._abmar_el( @pos, @margin ) when ( @pos = down ) { - margin-left: @margin; -} diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/grids.less b/app/design/frontend/Magento/plushe/css/source/clearless/grids.less deleted file mode 100644 index bdef0f683b7..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/grids.less +++ /dev/null @@ -1,186 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -// ============================================== -// Grid mixins -// ============================================== - -// You shouldn't need to touch this! Internal use only. -@column-width: 1; -@total-columns: 1; -@gutter-width: 1; -@grid-width: (@column-width*@total-columns) + (@gutter-width*(@total-columns - 1)); - -.column-wrapper() { - width: 100%; -} - -.inline-column-wrapper() when not (@using-ieclasses) { - letter-spacing: -0.31em; - *letter-spacing: normal; - word-spacing: -0.43em; -} - -.inline-column-wrapper() when (@using-ieclasses) { - letter-spacing: -0.31em; - word-spacing: -0.43em; - .ie7 & { - letter-spacing: normal; - } -} - -.column() { - float: left; - .column-gutter(); -} - -.column( @span ) when (@span = false) { - float: left; -} - -.column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (isnumber(@total-columns)) and not (isnumber(@end-column)) { - @showgutter: false; - .column(@showgutter); - .span( @span, @total-columns ); -} - -.column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (isnumber(@total-columns)) and (@end-column = true) { - @showgutter: false; - .column(@showgutter); - .span( @span, @total-columns ); - .end-column(); -} - -.column( @span, @end-column ) when (isnumber(@span)) and not (isnumber(@end-column)) { - @showgutter: false; - .column(@showgutter); - .span( @span ); -} - -.column( @span, @end-column ) when (isnumber(@span)) and ( @end-column = true ) { - @showgutter: false; - .column(@showgutter); - .span( @span ); - .end-column(); -} - -.inline-column() { - .inline-block(); - vertical-align: top; - letter-spacing: normal; - word-spacing: normal; - .column-gutter(); -} - -.inline-column( @span ) when (@span = false) { - .inline-block(); - vertical-align: top; - letter-spacing: normal; - word-spacing: normal; -} - -.inline-column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (isnumber(@total-columns)) { - @showgutter: false; - .inline-column(@showgutter); - .span( @span, @total-columns ); -} - -.inline-column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (@end-column = true) { - @showgutter: false; - .inline-column(@showgutter); - .span( @span, @total-columns ); - .inline-end-column(); -} - -.inline-column( @span, @end-column ) when not (isnumber(@end-column)) { - @showgutter: false; - .inline-column(@showgutter); - .span( @span ); -} - -.inline-column( @span, @end-column ) when (@end-column = true) { - @showgutter: false; - .inline-column(@showgutter); - .span( @span ); - .inline-end-column(); -} - -.end-column() { - margin-right: 0; - float: right; -} - -.inline-end-column() { - margin-right: 0; -} - -.span( @span ) { - .column-width(@span, @total-columns); -} - -.span( @span, @total-columns ) when (isnumber(@total-columns)) { - .column-width(@span, @total-columns); - .column-gutter(@total-columns); -} - -.pre-pad( @span, @total-columns:@total-columns ) { - @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); - padding-left: @calc-column-width; -} - -.post-pad( @span, @total-columns:@total-columns ) { - @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); - padding-right: @calc-column-width; -} - -.pre-push( @span, @total-columns:@total-columns ) { - @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); - margin-left: @calc-column-width; -} - -.post-push( @span, @total-columns:@total-columns ) { - @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)+@gutter-width) / @grid-width); - margin-right: @calc-column-width; -} - -.post-push-end( @span, @total-columns:@total-columns ) { - @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); - margin-right: @calc-column-width; -} - -.column-width(@span, @total-columns:@total-columns) { - @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)-@gutter-width) / @grid-width); - width: @calc-column-width; -} - -.column-gutter(@total-columns:@total-columns, @end-column:false) when (@end-column) { - margin-right: 0; -} - -.column-gutter(@total-columns:@total-columns, @end-column:false) when not (@end-column) { - @calc-gutter-width: 100%*(@gutter-width/@grid-width); - margin-right: @calc-gutter-width; -} - - diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/helpers.less b/app/design/frontend/Magento/plushe/css/source/clearless/helpers.less deleted file mode 100644 index 8014159a672..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/helpers.less +++ /dev/null @@ -1,248 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -// ============================================== -// Misc helpers and shortcuts -// ============================================== - -// Shortcuts -------------------------------- - -.border-radius(@radius:5px) { - -webkit-border-radius: @arguments; - -moz-border-radius: @arguments; - border-radius: @arguments; -} - -.box-sizing(@type: border-box) { - -moz-box-sizing: @type; - -webkit-box-sizing: @type; - -ms-box-sizing: @type; - box-sizing: @type; -} - -.box-shadow(@shadow: 1px 1px 2px rgba(0,0,0,0.25)) { - -webkit-box-shadow: @shadow; - -moz-box-shadow: @shadow; - box-shadow: @shadow; -} - -.filter(@filter: grayscale(100%)) { - -webkit-filter: @filter; - -moz-filter: @filter; - -ms-filter: @filter; - -o-filter: @filter; - filter: @filter; -} - -.transition(@transition) { - -webkit-transition: @transition; - -moz-transition: @transition; - transition: @transition; -} - -.rotate(@rotation) { - -webkit-transform: rotate(@rotation); - -moz-transform: rotate(@rotation); - -o-transform: rotate(@rotation); - transform: rotate(@rotation); -} - -.placeholder(@color: #DDD) { - :-moz-placeholder { - color: @color; - } - ::-webkit-input-placeholder { - color: @color; - } -} - -#gradient { - .horizontal (@start-color, @end-color) when not (@disable-filters) { - background-color: @end-color; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, right top, from(@start-color), to(@end-color)); /* Konqueror */ - background-image: -moz-linear-gradient(left, @start-color, @end-color); /* FF 3.6+ */ - background-image: -ms-linear-gradient(left, @start-color, @end-color); /* IE10 */ - background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ - background-image: -webkit-linear-gradient(left, @start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ - background-image: -o-linear-gradient(left, @start-color, @end-color); /* Opera 11.10 */ - background-image: -ms-linear-gradient(left, @start-color 0%, @end-color 100%); /* IE10+ */ - background-image: linear-gradient(left, @start-color, @end-color); /* the standard */ - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@start-color,@end-color)); /* IE6 & IE7 */ - -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@start-color,@end-color); /* IE8+ */ - } - .horizontal (@start-color, @end-color) when (@disable-filters) { - background-color: @end-color; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, right top, from(@start-color), to(@end-color)); /* Konqueror */ - background-image: -moz-linear-gradient(left, @start-color, @end-color); /* FF 3.6+ */ - background-image: -ms-linear-gradient(left, @start-color, @end-color); /* IE10 */ - background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ - background-image: -webkit-linear-gradient(left, @start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ - background-image: -o-linear-gradient(left, @start-color, @end-color); /* Opera 11.10 */ - background-image: -ms-linear-gradient(left, @start-color 0%, @end-color 100%); /* IE10+ */ - background-image: linear-gradient(left, @start-color, @end-color); /* the standard */ - } - .vertical (@start-color, @end-color) when (@disable-filters) { - background-color: @end-color; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(@start-color), to(@end-color)); /* Konqueror */ - background-image: -moz-linear-gradient(@start-color, @end-color); /* FF 3.6+ */ - background-image: -ms-linear-gradient(@start-color, @end-color); /* IE10 */ - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ - background-image: -webkit-linear-gradient(@start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ - background-image: -o-linear-gradient(@start-color, @end-color); /* Opera 11.10 */ - background-image: -ms-linear-gradient(top, @start-color 0%, @end-color 100%); /* IE10+ */ - background-image: linear-gradient(@start-color, @end-color); /* the standard */ - } - .vertical (@start-color, @end-color) when not (@disable-filters) { - background-color: @end-color; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(@start-color), to(@end-color)); /* Konqueror */ - background-image: -moz-linear-gradient(@start-color, @end-color); /* FF 3.6+ */ - background-image: -ms-linear-gradient(@start-color, @end-color); /* IE10 */ - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ - background-image: -webkit-linear-gradient(@start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ - background-image: -o-linear-gradient(@start-color, @end-color); /* Opera 11.10 */ - background-image: -ms-linear-gradient(top, @start-color 0%, @end-color 100%); /* IE10+ */ - background-image: linear-gradient(@start-color, @end-color); /* the standard */ - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@start-color,@end-color)); /* IE6 & IE7 */ - -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@start-color,@end-color); /* IE8+ */ - } -} - -// Helpers -------------------------------- - -.clearfix() when not (@using-ieclasses) { - &:before, - &:after { - content: ""; - display: table; - } - &:after { - clear: both; - } - *zoom: 1; -} - -.clearfix() when (@using-ieclasses) { - &:before, - &:after { - content: ""; - display: table; - } - &:after { - clear: both; - } - .ie6 &, .ie7 & { - zoom: 1; - } -} - -.inline-block() when (@using-ieclasses) { - display: inline-block; - .ie7 & { - display: inline; - zoom: 1; - } -} - -.inline-block() when not (@using-ieclasses) { - display: inline-block; - *display: inline; - *zoom: 1; -} - -.ir() { - border: 0; - font: 0/0 a; - text-shadow: none; - color: transparent; - background-color: transparent; -} - -.hidden() { - display: none !important; - visibility: hidden; -} - -.visually-hidden() { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - &.focusable:active, - &.focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; - } -} - -.size(@thesize) { - width: @thesize; - height: @thesize; -} - -.size(@width, @height) { - width: @width; - height: @height; -} - -// System -------------------------------- - -.nudge-l( @pos ) when ( @pos = 0 ) { -} - -.nudge-l( @pos ) when not ( @pos = 0 ) { - left: @pos; -} - -.nudge-r( @pos ) when ( @pos = 0 ) { -} - -.nudge-r( @pos ) when not ( @pos = 0 ) { - right: @pos; -} - -.nudge-t( @pos ) when ( @pos = 0 ) { -} - -.nudge-t( @pos ) when not ( @pos = 0 ) { - top: @pos; -} - -.nudge-b( @pos ) when ( @pos = 0 ) { -} - -.nudge-b( @pos ) when not ( @pos = 0 ) { - bottom: @pos; -} diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/icons.less b/app/design/frontend/Magento/plushe/css/source/clearless/icons.less deleted file mode 100644 index 8752eec300f..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/icons.less +++ /dev/null @@ -1,327 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -// ============================================== -// Generated content icon helpers -// ---------------------------------------------- -// These can only be used on block or inline-block elements. -// ============================================== - -// Non-sprited icons -------------------------------- - -.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px ) when (@using-modernizr) { - .generatedcontent & { - position: relative; - padding-left: @width + @pad; - } - .generatedcontent &:before { - ._generated-icon( @width, @height, @icon-image ); - top: @nudge-top; - left: @nudge-left; - } -} - -.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px ) when not (@using-modernizr) { - position: relative; - padding-left: @width + @pad; - &:before { - ._generated-icon( @width, @height, @icon-image ); - top: @nudge-top; - left: @nudge-left; - } -} - -.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px ) when (@using-modernizr) { - .generatedcontent & { - position: relative; - padding-right: @width + @pad; - } - .generatedcontent &:after { - ._generated-icon( @width, @height, @icon-image ); - top: @nudge-top; - right: @nudge-right; - } -} - -.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px ) when not (@using-modernizr) { - position: relative; - padding-right: @width + @pad; - .generatedcontent &:after { - ._generated-icon( @width, @height, @icon-image ); - top: @nudge-top; - right: @nudge-right; - } -} - -// Sprited icons -------------------------------- - -.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) { - .generatedcontent & { - position: relative; - padding-left: @width + @pad; - } - .generatedcontent &:before { - ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); - top: @nudge-top; - left: @nudge-left; - } -} - -.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) { - position: relative; - padding-left: @width + @pad; - &:before { - ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); - top: @nudge-top; - left: @nudge-left; - } -} - -.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) { - .generatedcontent & { - padding-right: @width + @pad; - position: relative; - } - .generatedcontent &:after { - ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); - top: @nudge-top; - right: @nudge-right; - } -} - -.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) { - position: relative; - padding-right: @width + @pad; - &:after { - ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); - top: @nudge-top; - right: @nudge-right; - } -} - -.prepend-sprite-icon-pos(@x, @y, @nudge-left:0, @nudge-top:0, @sprite-grid:@sprite-grid) when (@using-modernizr) { - .generatedcontent &:before { - .sprite-pos(@x, @y, @sprite-grid); - .nudge-l(@nudge-left); - .nudge-t(@nudge-top); - } -} - -.prepend-sprite-icon-pos(@x, @y, @nudge-left:0, @nudge-top:0, @sprite-grid:@sprite-grid) when not (@using-modernizr) { - &:before { - .sprite-pos(@x, @y, @sprite-grid); - .nudge-l(@nudge-left); - .nudge-t(@nudge-top); - } -} - -.append-sprite-icon-pos(@x, @y, @nudge-right:0, @nudge-top:0, @sprite-grid:@sprite-grid) when (@using-modernizr) { - .generatedcontent &:after { - .sprite-pos(@x, @y, @sprite-grid); - .nudge-r(@nudge-right); - .nudge-t(@nudge-top); - } -} - -.append-sprite-icon-pos(@x, @y, @nudge-right:0, @nudge-top:0, @sprite-grid:@sprite-grid) when not (@using-modernizr) { - &:after { - .sprite-pos(@x, @y, @sprite-grid); - .nudge-r(@nudge-right); - .nudge-t(@nudge-top); - } -} - -// ---- Partials ----------------------- - -.prepend-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { - .generatedcontent & { - position: relative; - ._pad-left(@width, @pad); - } - .generatedcontent &:before { - position: absolute; - display: block; - content: ' '; - top: 0; - left: 0; - ._size(@width, @height); - } -} - -.prepend-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { - position: relative; - ._pad-left(@width, @pad); - &:before { - position: absolute; - display: block; - content: ' '; - top: 0; - left: 0; - ._size(@width, @height); - } -} - -.append-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { - .generatedcontent & { - position: relative; - ._pad-right(@width, @pad); - } - .generatedcontent &:after { - position: absolute; - display: block; - content: ' '; - top: 0; - right: 0; - ._size(@width, @height); - } -} - -.append-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { - position: relative; - ._pad-right(@width, @pad); - &:after { - position: absolute; - display: block; - content: ' '; - top: 0; - right: 0; - ._size(@width, @height); - } -} - -.prepend-icon-image(@icon-image, @width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { - ._gc-pad-left(@width, @pad); - .generatedcontent &:before { - background: url(@icon-image) no-repeat 0 0; - ._size(@width, @height); - .nudge-l(@nudge-left); - .nudge-t(@nudge-top); - } -} - -.prepend-icon-image(@icon-image, @width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { - ._pad-left(@width, @pad); - &:before { - background: url(@icon-image) no-repeat 0 0; - ._size(@width, @height); - .nudge-l(@nudge-left); - .nudge-t(@nudge-top); - } -} - -.append-icon-image(@icon-image, @width:0, @height:0, @nudge-right:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { - ._gc-pad-right(@width, @pad); - .generatedcontent &:after { - background: url(@icon-image) no-repeat 0 0; - ._size(@width, @height); - .nudge-r(@nudge-right); - .nudge-t(@nudge-top); - } -} - -.append-icon-image(@icon-image, @width:0, @height:0, @nudge-right:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { - ._pad-right(@width, @pad); - &:after { - background: url(@icon-image) no-repeat 0 0; - ._size(@width, @height); - .nudge-r(@nudge-right); - .nudge-t(@nudge-top); - } -} - -// ---- internal use mixins ----------------------- - -._generated-icon(@width, @height, @icon-image) { - position: absolute; - display: block; - content: ' '; - background: url(@icon-image) no-repeat 0 0; - .size(@width, @height); -} - -._generated-sprite-icon(@x, @y, @width, @height, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) { - position: absolute; - display: block; - content: ' '; - .sprite-sized(@x, @y, @width, @height, @sprite-image, @sprite-grid); -} - -._pad-left(@width, @pad) when (@width = 0) { -} - -._pad-left(@width, @pad) when not (@width = 0) { - padding-left: @width + @pad; -} - -._pad-right(@width, @pad) when (@width = 0) { -} - -._pad-right(@width, @pad) when not (@width = 0) { - padding-right: @width + @pad; -} - -._gc-pad-left(@width, @pad) when (@width = 0) { -} - -._gc-pad-right(@width, @pad) when (@width = 0) { -} - -._gc-pad-left(@width, @pad) when not (@width = 0) and (@using-modernizr) { - .generatedcontent & { - ._pad-left(@width, @pad); - } -} - -._gc-pad-left(@width, @pad) when not (@width = 0) and not (@using-modernizr) { - ._pad-left(@width, @pad); -} - -._gc-pad-right(@width, @pad) when not (@width = 0) { - .generatedcontent & { - ._pad-right(@width, @pad); - } -} - -._gc-pad-right(@width, @pad) when not (@width = 0) and not (@using-modernizr) { - ._pad-right(@width, @pad); -} - -._size(@width, @height) when (@width = 0) and (@height = 0) { -} - -._size(@width, @height) when (@width = 0) and not (@height = 0) { - height: @height; -} - -._size(@width, @height) when not (@width = 0) and (@height = 0) { - width: @width; -} - -._size(@width, @height) when not (@width = 0) and not (@height = 0) { - width: @width; - height: @height; -} - - - diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/resets.less b/app/design/frontend/Magento/plushe/css/source/clearless/resets.less deleted file mode 100644 index f48ac3b70fc..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/resets.less +++ /dev/null @@ -1,307 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -.normalize() { - - /* normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */ - - article, - aside, - details, - figcaption, - figure, - footer, - header, - hgroup, - 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%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - } - html, - button, - input, - select, - textarea { - font-family: sans-serif; - } - body { - margin: 0; - } - a:focus { - outline: thin dotted; - } - a:hover, - a:active { - outline: 0; - } - h1 { - font-size: 2em; - margin: 0.67em 0; - } - h2 { - font-size: 1.5em; - margin: 0.83em 0; - } - h3 { - font-size: 1.17em; - margin: 1em 0; - } - h4 { - font-size: 1em; - margin: 1.33em 0; - } - h5 { - font-size: 0.83em; - margin: 1.67em 0; - } - h6 { - font-size: 0.75em; - margin: 2.33em 0; - } - abbr[title] { - border-bottom: 1px dotted; - } - b, - strong { - font-weight: bold; - } - blockquote { - margin: 1em 40px; - } - dfn { - font-style: italic; - } - mark { - background: #ff0; - color: #000; - } - p, - pre { - margin: 1em 0; - } - pre, - code, - kbd, - 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: 75%; - } - sub, - sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - sup { - top: -0.5em; - } - sub { - bottom: -0.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 #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.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, - input[type="button"], - input[type="reset"], - input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; - *overflow: visible; - } - button[disabled], - 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-decoration, - input[type="search"]::-webkit-search-cancel-button { - -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; - } -} - -.reset() { - - /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ - - html, body, div, span, applet, object, iframe, - h1, h2, h3, h4, h5, h6, p, blockquote, pre, - a, abbr, acronym, address, big, cite, code, - del, dfn, em, img, ins, kbd, q, s, samp, - small, strike, strong, sub, sup, tt, var, - b, u, i, center, - dl, dt, dd, ol, ul, li, - fieldset, form, label, legend, - table, caption, tbody, tfoot, thead, tr, th, td, - article, aside, canvas, details, embed, - figure, figcaption, footer, header, hgroup, - menu, nav, output, ruby, section, summary, - time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; - } - article, aside, details, figcaption, figure, - footer, header, hgroup, menu, nav, section { - display: block; - } - body { - line-height: 1; - } - ol, ul { - list-style: none; - } - blockquote, q { - quotes: none; - } - blockquote:before, blockquote:after, - q:before, q:after { - content: ''; - content: none; - } - table { - border-collapse: collapse; - border-spacing: 0; - } - -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/settings.less b/app/design/frontend/Magento/plushe/css/source/clearless/settings.less deleted file mode 100644 index 992b3e18fca..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/settings.less +++ /dev/null @@ -1,50 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -// ============================================== -// ClearLess default settings -// ---------------------------------------------- -// Override on a per-project basis as required. -// ============================================== - -// General -------------------------------- - -@using-ieclasses: true; // whether or not the markup has html5-boilerplate style IE classes in it or not -@using-modernizr: false; // whether or not modernizer feature-detection classes are being used -@disable-filters: true; // whether or not to disable MS-specific 'filter' properties (can make IE slow!) - -// Typography -------------------------------- - -@base-font-size: 16; // base pixel font size. Used as a default for px -> (r)em conversions - -// Sprites -------------------------------- - -@sprite-image: '/example.png'; -@sprite-grid: 50px; - -// Grid -------------------------------- - -@total-columns: 12; -@column-width: 60px; -@gutter-width: 20px; diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/sprites.less b/app/design/frontend/Magento/plushe/css/source/clearless/sprites.less deleted file mode 100644 index ad52dd959c5..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/sprites.less +++ /dev/null @@ -1,75 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -// ============================================== -// Sprite helpers -// ============================================== - -.sprite(@x, @y, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) { - .sprite-image(@sprite-image); - .sprite-pos(@x, @y, @sprite-grid); -} - -.sprite-sized(@x, @y, @size, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (isnumber(@sprite-image)) { - .sprite(@x, @y, @sprite-image, @sprite-grid); - .size(@size); -} - -.sprite-sized(@x, @y, @width, @height, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (isnumber(@height)) { - .sprite(@x, @y, @sprite-image, @sprite-grid); - .size(@width,@height); -} - -.sprite-ir(@x, @y, @size, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (isnumber(@sprite-image)) { - .ir(); - .sprite(@x, @y, @sprite-image, @sprite-grid); - .size(@size); -} - -.sprite-ir(@x, @y, @width, @height, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (isnumber(@height)) { - .ir(); - .sprite(@x, @y, @sprite-image, @sprite-grid); - .size(@width,@height); -} - -.sprite-image(@sprite-image:@sprite-image) { - background-image: url(@sprite-image); - background-repeat: no-repeat; -} - -.sprite-pos(@x, @y, @sprite-grid:@sprite-grid) { - background-position: -(@x*@sprite-grid*1px) -(@y*@sprite-grid*1px); -} - -.sprite-pos-sized(@x, @y, @size, @sprite-grid:@sprite-grid) when not (isnumber(@sprite-image)) { - .sprite-pos(@x, @y, @sprite-grid); - .size(@size); -} - -.sprite-pos-sized(@x, @y, @width, @height, @sprite-grid:@sprite-grid) when (isnumber(@height)) { - .sprite-pos(@x, @y, @sprite-grid); - .size(@width,@height); -} - - diff --git a/app/design/frontend/Magento/plushe/css/source/clearless/typography.less b/app/design/frontend/Magento/plushe/css/source/clearless/typography.less deleted file mode 100644 index 261ae790072..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/clearless/typography.less +++ /dev/null @@ -1,66 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ -// ============================================== -// Typography related mixins -// ============================================== - -.font-size-rems(@px-size) { - @rem-size: @px-size / @base-font-size; - font-size: ~"@{px-size}px"; - font-size: ~"@{rem-size}rem"; -} - -.font-size-ems(@target-px-size, @context-px-size:@base-font-size) { - font-size: (@target-px-size / @context-px-size) * 1em; -} - -.font-face( @family-name, @font-path, @font-weight:normal, @font-style:normal, @include-svg:false ) when not (@include-svg) { - @font-face { - font-family: @family-name; - src: url('@{font-path}.eot'); - src: url('@{font-path}.eot?#iefix') format('embedded-opentype'), url('@{font-path}.woff') format('woff'), url('@{font-path}.ttf') format('truetype'); - font-weight: @font-weight; - font-style: @font-style; - } -} - -.font-face( @family-name, @font-path, @font-weight:normal, @font-style:normal, @include-svg:false ) when (@include-svg) { - @font-face { - font-family: @family-name; - src: url('@{font-path}.eot'); - src: url('@{font-path}.eot?#iefix') format('embedded-opentype'), url('@{font-path}.woff') format('woff'), url('@{font-path}.ttf') format('truetype'), url('@{font-path}.svg#@{family-name}') format('svg'); - font-weight: @font-weight; - font-style: @font-style; - } -} - -.wrap-words() { - -ms-word-break: break-all; - word-break: break-all; - word-break: break-word; - -webkit-hyphens: auto; - -moz-hyphens: auto; - hyphens: auto; -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/lib/buttons.less b/app/design/frontend/Magento/plushe/css/source/lib/buttons.less deleted file mode 100644 index 488d3a1cecc..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/buttons.less +++ /dev/null @@ -1,136 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// # Primary buttons -// -// Buttons that performs primary action ([read design and usability article](http://linktousabilityarticle.com/)) -// -// ```html -// <p>Some text here</p> -// <button class="action myPrimary" type="button"><span>Primary action</span></button> -// <button class="action myPrimary :hover" type="button"><span>Primary hover</span></button> -// <button class="action myPrimary :active" type="button"><span>Primary active</span></button> -// ``` -// - -.action.myPrimary { - &:extend(.primary.action all); -} - -.primary.action { - &:extend(.button.action all); - background-color: @primaryActionBg; - color: @primaryActionColor; - &:focus, - &:active, - &:hover { - background-color: @primaryActionBgH; - } -} - -// # Secondary buttons -// -// Buttons that performs secondary action ([read design and usability article](http://linktousabilityarticle.com/)) -// -// ```html -// <button class="action mySecondary" type="button"><span>Secondary action</span></button> -// <button class="action mySecondary :hover" type="button"><span>Secondary hover</span></button> -// <button class="action mySecondary :active" type="button"><span>Secondary active</span></button> -// ``` -// - -.action.mySecondary { - &:extend(.secondary.action all); -} - -.secondary.action { - &:extend(.button.action all); - background-color: @secondaryActionBg; - color: @secondaryActionColor; - &:focus, - &:active, - &:hover { - background-color: @secondaryActionBgH; - } -} - -// # Buttons displayed as links -// Buttons that are displayed as links -// -// ```html -// <button class="action myLink" type="button"><span>Button as a link</span></button> -// <button class="action myLink :hover" type="button"><span>Button as a link hover</span></button> -// <button class="action myLink :active" type="button"><span>Button as a link active</span></button> -// ``` -// - -.action.myLink { - &:extend(.button.link all); -} - -.button.link { - background: none; - border: 0; - display: inline; - color: @link; - margin: 0; - padding: 0; - text-decoration: underline; - &:focus, - &:active, - &:hover { - color: @linkHover; - text-decoration: none; - } -} - -// # Initial styling for button - -.button.action { - border: none; - border-radius: 0; - font: @actionFont; - text-transform: uppercase; - margin: 0; - padding: 9px 11px 9px; - box-shadow: none; - text-shadow: none; - outline: none; - text-decoration: none; -} - -// Buttons Initial Variables - -//@primaryActionBg:; -//@primaryActionBgH:; -//@primaryActionColor:; -//@secondaryActionBg:; -//@secondaryActionBgH:; -//@secondaryActionColor:; -//@actionFont:; - -.action + .action { - margin-left: 5px; -} diff --git a/app/design/frontend/Magento/plushe/css/source/lib/forms.less b/app/design/frontend/Magento/plushe/css/source/lib/forms.less deleted file mode 100644 index 9a5e8e71fd2..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/forms.less +++ /dev/null @@ -1,817 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -.hasRequired { - &:after { - content: attr(data-hasrequired); - display: block; - font-size: @baseFontSize; - margin: 10px 0 0; - color: @requiredField; - letter-spacing: normal; - word-spacing: normal; - } -} - -.load.indicator { - display: inline-block; - margin: 20px auto; - padding: 8px; - vertical-align: middle; - span { - display: block; - line-height: 16px; - &:before { - content: ''; - margin-right: 5px; - display: inline-block; - width: 16px; - height: 16px; - background: url("@{baseDir}/images/loader.gif") no-repeat 0 0; - background-color: @secondary1; - vertical-align: top; - } - } -} - -// #Forms -// -// ```html -// <form class="form"> -// <fieldset class="fieldset"> -// <legend class="legend"><span>Legend</span></legend> -// <br> -// <div class="field text"> -// <label for="text" class="label"><span>Text field</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text"> -// </div> -// </div> -// -// <div class="field search"> -// <label for="search" class="label"><span>Search field</span></label> -// <div class="control"> -// <input type="search" class="input-text" value="" name="search"> -// </div> -// </div> -// -// <div class="field tel"> -// <label for="tel" class="label"><span>Tel field</span></label> -// <div class="control"> -// <input type="tel" class="input-text" value="" name="tel"> -// </div> -// </div> -// -// <div class="field url"> -// <label for="url" class="label"><span>Url field</span></label> -// <div class="control"> -// <input type="url" class="input-text" value="" name="url"> -// </div> -// </div> -// -// <div class="field email"> -// <label for="email" class="label"><span>Email field</span></label> -// <div class="control"> -// <input type="email" class="input-text" value="" name="email"> -// </div> -// </div> -// -// <div class="field datetime"> -// <label for="datetime" class="label"><span>Datetime field</span></label> -// <div class="control"> -// <input type="datetime" class="input-text" value="" name="datetime"> -// </div> -// </div> -// -// <div class="field password"> -// <label for="password" class="label"><span>Password field</span></label> -// <div class="control"> -// <input type="password" class="input-text" value="" name="password"> -// </div> -// </div> -// -// <div class="field text2"> -// <label for="name" class="label"><span>Text field with additional field</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text2"> -// </div> -// <div class="nested"> -// <div class="field additional"> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text2_1" > -// </div> -// </div> -// </div> -// </div> -// -// <div class="field text2"> -// <label for="name" class="label"><span>Text field with note</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text2"> -// <div class="note">This is a note to a text field</div> -// </div> -// </div> -// -// <div class="field range"> -// <label for="range" class="label"><span>Range field with an addon after input</span></label> -// <div class="control"> -// <div class="range price fields group group-2"> -// <div class="field no-label"> -// <div class="control"> -// <input type="text" class="input-text" value="" name="range[from]"> -// </div> -// </div> -// <div class="field with-addon no-label"> -// <div class="control"> -// <div class="addon"> -// <input type="text" class="input-text" value="" name="range[to]"> -// <label for="price_to" class="addafter">USD</label> -// </div> -// </div> -// </div> -// </div> -// </div> -// </div> -// -// <div class="field date"> -// <label for="date" class="label"><span>Date range field with calendar</span></label> -// <div class="control"> -// <div class="dates fields"> -// <div class="field date no-label"> -// <div class="control"> -// <input type="text" class="input-text" value="" name="date[from]" id="date_from"> -// </div> -// </div> -// <div class="field date no-label"> -// <div class="control"> -// <input type="text" class="input-text" value="" name="date[to]" id="date_to"> -// </div> -// </div> -// </div> -// </div> -// </div> -// -// <div class="field file"> -// <label for="file" class="label"><span>File field</span></label> -// <div class="control"> -// <input type="file" class="input-text" value="" name="file"> -// </div> -// </div> -// -// <div class="field choice"> -// <input type="radio" class="radio" checked="" value="1" name="inputRadio"> -// <label for="inputRadio" class="label"><span>Radiobutton choice</span></label> -// </div> -// -// <div class="field choice"> -// <input type="checkbox" class="checkbox" value="1" name="inputCheckbox"> -// <label for="inputCheckbox" class="label"><span>Checkbox choice</span></label> -// </div> -// -// <div class="field region"> -// <label for="select" class="label"><span>Select</span></label> -// <div class="control"> -// <select name="select"> -// <option value="">Please select</option> -// <option value="5">5</option> -// <option value="10">10</option> -// <option value="15">15</option> -// <option value="20">20</option> -// </select> -// </div> -// </div> -// -// <div class="field multiselect"> -// <label for="select" class="label"><span>Multiple select</span></label> -// <div class="control"> -// <select name="select" class="multiple" multiple="multiple"> -// <option value="Option 1">Option 1</option> -// <option value="Option 2">Option 2</option> -// <option value="Option 3">Option 3</option> -// <option value="Option 4">Option 4</option> -// <option value="Option 5">Option 5</option> -// <option value="Option 6">Option 6</option> -// <option value="Option 7">Option 7</option> -// </select> -// </div> -// </div> -// -// <div class="field textarea"> -// <label for="textarea" class="label"><span>Textarea</span></label> -// <div class="control"> -// <textarea rows="3" cols="5" class="input-text" name="textarea"></textarea> -// </div> -// </div> -// </fieldset> -// -// <div class="actions"> -// <input type="submit" class="action submit" value="Input type='Submit'" name="action_submit"> -// <input type="button" class="action button" value="Input type='button'" name="action_button"> -// <input type="reset" class="action reset" value="Input type='reset'" name="action_reset"> -// </div> -// <span class="please-wait load indicator" id="billing-please-wait"> -// <span>Loading indicator...</span> -// </span> -// </form> -// ``` -// - -.form { - .actions { - margin-right: 10px; - text-align: right; - } -} - -.fieldset { - .formFieldset(); - > .field { - .formField(); - } - .fields.range { - .field { - display: inline-block; - letter-spacing: normal; - margin: 0; - vertical-align: top; - word-spacing: normal; - &:first-child { - .control { - .box-sizing(); - padding-right: 30px; - &:after { - content: '\2014'; - display: inline-block; - margin-right: -30px; - text-align: center; - width: 29px; - } - } - input { - width: 98%; - } - } - } - } - .fields.dates { - .field { - display: inline-block; - letter-spacing: normal; - margin: 0 25px 0 0; - padding: 0 34px 0 0; - position: relative; - vertical-align: top; - &:first-child { - margin: 0 30px 0 0; - .control { - .box-sizing(); - &:after { - content: '\2014'; - display: inline-block; - position: absolute; - right: -39px; - top: 7px; - width: 29px; - } - } - } - .ui-datepicker-trigger { - text-decoration: none; - position: absolute; - right: 0; - top: 9px; - &:extend(.button.link all); - } - } - } -} - -input[type="text"], -input[type="search"], -input[type="tel"], -input[type="url"], -input[type="email"], -input[type="datetime"], -input[type="password"], -input[type="number"] { - .inputText(); -} - -input[type="submit"], -input[type="button"] { - &:extend(.primary.action all); -} - -input[type="reset"] { - &:extend(.secondary.action all); -} - -input[type=number]::-webkit-inner-spin-button, -input[type=number]::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -select { - .controlStyling(); - padding: 5px 10px 4px; - &.multiselect { - height: auto; - } -} - -textarea { - .controlStyling(); - height: auto; - line-height: 1.2; - min-height: 4.8em; - padding: 10px; - resize: vertical; -} - -// #Form validation -// Required field marked with '*' symbol -// -// Validation passed hilighting -// -// Validation error hilight and validation error message -// -// '* Required fields' text -// -// ```html -// <form class="form validation" data-hasrequired="* Required Fields"> -// <fieldset class="fieldset"> -// <div class="field text2 required"> -// <label for="text2" class="label"><span>Required text field</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text2"> -// </div> -// </div> -// -// <div class="field text3 required"> -// <label for="text3" class="label"><span>Required text field, validation is passed</span></label> -// <div class="control valid"> -// <input type="text" class="input-text valid" value="" name="text3"> -// </div> -// </div> -// -// <div class="field text4 required"> -// <label for="text4" class="label"><span>Required text field, validation is not passed</span></label> -// <div class="control mage-error"> -// <input type="text" class="input-text mage-error" value="" name="text4"> -// <div for="name" generated="true" class="mage-error">This is a required field.</div> -// </div> -// </div> -// </fieldset> -// </form> -// ``` -// - -.fieldset { - // Validation passed - textarea.valid, - select.valid, - input[type="text"].valid, - input[type="search"].valid, - input[type="tel"].valid, - input[type="url"].valid, - input[type="email"].valid, - input[type="datetime"].valid, - input[type="password"].valid, - input[type="number"].valid { - border-color: @validHilight !important; - } - // Validation error - textarea.mage-error, - select.mage-error, - input[type="text"].mage-error, - input[type="search"].mage-error, - input[type="tel"].mage-error, - input[type="url"].mage-error, - input[type="email"].mage-error, - input[type="datetime"].mage-error, - input[type="password"].mage-error, - input[type="number"].mage-error { - border-color: @nonValidHilight !important; - } - div.mage-error[generated] { - color: @nonValidHilight !important; - font-size: @baseFontSizeMiddle; - padding-top: 4px; - } -} - -.form.validation { - .fieldset { - margin: 20px 0; - } - &:extend(.hasRequired all); -} - -// #Form fields arranged to columns -// -// ```html -// <form class="form settings"> -// <fieldset class="fieldset"> -// <legend class="legend"><span>Some Settings</span></legend> -// <br> -// -// <div class="field text1"> -// <label for="text1" class="label"><span>Text field 1</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text1"> -// </div> -// </div> -// -// <div class="field text2"> -// <label for="text2" class="label"><span>Text field 2</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text2"> -// </div> -// </div> -// -// <div class="field text3"> -// <label for="text3" class="label"><span>Text field 3</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text3"> -// </div> -// </div> -// -// <div class="field text4"> -// <label for="text4" class="label"><span>Text field 4</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text4"> -// </div> -// </div> -// -// <div class="field text5"> -// <label for="text5" class="label"><span>Text field 5</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text5"> -// </div> -// <div class="nested"> -// <div class="field additional"> -// <div class="control"> -// <input type="text" class="input-text" value="" name="text5_1"> -// </div> -// </div> -// </div> -// </div> -// -// <div class="field select"> -// <label for="select" class="label"><span>Select</span></label> -// <div class="control"> -// <select title="Tax Class" class="multiselect" name="select"> -// <option value="">All</option> -// <option value="5">5</option> -// <option value="10">10</option> -// <option value="15">15</option> -// </select> -// </div> -// </div> -// -// <div class="field textarea"> -// <label for="textarea" class="label"><span>Textarea</span></label> -// <div class="control"> -// <textarea rows="3" cols="5" class="input-text" name="textarea"></textarea> -// <div class="note">Please enter your message here</div> -// </div> -// </div> -// -// <div class="field multiselect"> -// <label for="multiselect" class="label"><span>Multiple select</span></label> -// <div class="control"> -// <select multiple="multiple" class="multiselect" name="multiselect"> -// <option value="Option 1">Option 1</option> -// <option value="Option 2">Option 2</option> -// <option value="Option 3">Option 3</option> -// <option value="Option 4">Option 4</option> -// <option value="Option 5">Option 5</option> -// <option value="Option 6">Option 6</option> -// <option value="Option 7">Option 7</option> -// </select> -// </div> -// </div> -// </fieldset> -// <div class="actions"> -// <button class="action submit" type="submit"><span>Submit</span></button> -// </div> -// </form> -// ``` -// - -.form.settings { - .formCols(); - .action.submit { - &:extend(.primary.action all); - } -} - -// #Datepicker custom styles -@datepickerArrows: @secondary1; -@datepickerArrowsHover: darken(@datepickerArrows, 10%); -@datepickerTextColor: #000; -@datepickerBg: #efefef; -@datepickerBorder: #fff; -@datepickerShadow: rgba(0, 0, 0, 0.35); -@datepickerCalendarBg: #fff; -@datepickerCalendarBorder: #cfcfcf; -@datepickerCalendarHover: #f9eae7; -@datepickerCalendarToday: #f3d7d2; -@datepickerCalendarActive: lighten(@secondary1, 20%); -@datepickerDisabledBg: #f9f9f9; -@datepickerDisable: #959595; - -.ui-datepicker { - background: @datepickerBg; - border: 4px solid @datepickerBorder; - box-shadow: 5px 5px 10px 0 @datepickerShadow; - .box-sizing(); - display: none; - padding: 15px; - width: auto; - z-index: 999999 !important; - .ui-datepicker-header { - position: relative; - padding: .2em 0; - } - .ui-datepicker-prev, - .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; - cursor: pointer; - span { - border: solid; - display: block; - font-size: 0; - margin-top: -5px; - position: absolute; - left: 50%; - top: 50%; - width: 0; - height: 0; - } - } - .ui-datepicker-prev { - left: 2px; - span { - margin-left: -8px; - border-width: 5px 8px 5px 0; - border-color: transparent @datepickerArrows transparent transparent; - } - &.ui-datepicker-prev-hover span { - border-color: transparent @datepickerArrowsHover transparent transparent; - } - } - .ui-datepicker-next { - right: 2px; - span { - margin-left: 0; - border-width: 5px 0 5px 8px; - border-color: transparent transparent transparent @datepickerArrows; - } - &.ui-datepicker-next-hover span { - border-color: transparent transparent transparent @datepickerArrowsHover; - } - } - .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; - select { - margin: 1px 0; - padding: 0; - } - .ui-datepicker-month, - .ui-datepicker-year { - width: 47%; - } - .ui-datepicker-month { - margin-right: 6%; - } - .ui-datepicker-month-year { - width: 100%; - } - } - table { - width: 100%; - font-size: @baseFontSizeMiddle; - } - th { - font-size: @baseFontSizeMiddle; - } - td { - padding: 0; - } - td span, - td a { - color: @datepickerTextColor; - display: block; - line-height: 14px; - padding: 4px; - text-align: right; - text-decoration: none; - } - .ui-datepicker-buttonpane { - overflow: hidden; - padding-top: 10px; - button { - float: right; - &.ui-datepicker-current { - float: left; - } - } - } - .ui-datepicker-calendar { - background: @datepickerCalendarBg; - border: 1px solid @datepickerCalendarBorder; - th { - background: @datepickerBg; - border: 1px solid @datepickerCalendarBorder; - padding: 4px; - text-transform: uppercase; - } - td { - border: 1px solid @datepickerCalendarBorder; - } - td a { - padding: 4px; - display: block; - } - td .ui-state-hover:hover { - background: @datepickerCalendarHover; - } - .ui-datepicker-week-col { - text-align: center; - border: 1px solid @datepickerCalendarBorder; - } - .ui-datepicker-today { - background: @datepickerCalendarToday; - } - .ui-state-active { - background: @datepickerCalendarActive; - } - .ui-state-disabled { - background: @datepickerDisabledBg; - span { - color: @datepickerDisable; - } - } - } -} - -.ui-datepicker-rtl { - direction: rtl; - .ui-datepicker-prev { - right: 2px; - left: auto; - &:hover { - right: 1px; - left: auto; - } - } - .ui-datepicker-next { - left: 2px; - right: auto; - &:hover { - left: 1px; - right: auto; - } - } - .ui-datepicker-buttonpane { - clear: right; - button { - float: left; - &.ui-datepicker-current { - float: right; - } - } - } - .ui-datepicker-group { - float: right; - } - .ui-datepicker-group-last .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; - } - .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; - } -} - -.ui-timepicker-div { - padding: 10px 0 5px 0; - .ui-widget-header { - margin-bottom: 8px; - } - dl { - text-align: left; - dt { - height: 25px; - margin-bottom: -22px; - } - dd { - margin: 0 10px 10px 65px; - } - .ui_tpicker_time_label { - margin-bottom: -25px; - } - } - td { - font-size: 90%; - } -} - -.ui-tpicker-grid-label { - background: none; - border: none; - margin: 0; - padding: 0; -} - -.ui-slider { - position: relative; - text-align: left; - .ui-slider-handle { - position: absolute; - z-index: 2; - cursor: default; - } -} - -.ui-slider-horizontal { - border-radius: 10px; - border: none; - background: @datepickerBg; - height: 10px; - .ui-slider-handle { - margin-left: -5px; - height: 10px; - width: 10px; - border-radius: 10px; - background: @datepickerArrows; - display: block; - position: absolute; - } -} - -/* Field with multiple fields */ - -.fields.group { - letter-spacing: -0.31em; /* webkit */ - *letter-spacing: normal; /* reset IE < 8 */ - word-spacing: -0.43em; /* IE < 8 && gecko */ - margin-right: -20px; - & > * { - letter-spacing: normal; - word-spacing: normal; - } - .field { - .box-sizing(); - vertical-align:top; - margin:0!important; - .label { width:auto; float:none; text-align: left; padding-right:0; } - .control { float:none; width:auto; } - } - &.group-2 .field { - width:50%!important; - display:inline-block; - } - &.group-3 .field { - width:33.3%!important; - display:inline-block; - } - &.group-4 .field { - width:25%!important; - display:inline-block; - } - &.group-5 .field { - width:20%!important; - display:inline-block; - } -} diff --git a/app/design/frontend/Magento/plushe/css/source/lib/grids.less b/app/design/frontend/Magento/plushe/css/source/lib/grids.less deleted file mode 100644 index c65a03b7797..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/grids.less +++ /dev/null @@ -1,384 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// # 1. Grid using floated columns -// Full documentation about grid usage: https://github.com/clearleft/clearless#grids -// -// # 1.1 One column -// -// ```html -// <div class="clearlessgrid1 gridwrapper"> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.clearlessgrid1 { - .column-wrapper(); - > .grid-1 { - .column(); - .span(12); - .end-column(); - } -} - -// # 1.2 One main column and one right sidebar -// -// ```html -// <div class="clearlessgrid2 gridwrapper"> -// <div class="main">column</div> -// <div class="sidebar">column</div> -// </div> -// ``` -// - -.clearlessgrid2 { - .column-wrapper(); - .main { - .column(); - .span(9); - } - .sidebar { - .column(); - .span(3); - .end-column(); - } -} - -// # 1.3 One main column and one left sidebar -// -// ```html -// <div class="clearlessgrid3 gridwrapper"> -// <div class="sidebar">column</div> -// <div class="main">column</div> -// </div> -// ``` -// - -.clearlessgrid3 { - .column-wrapper(); - .main { - .column(); - .span(9); - .end-column(); - } - .sidebar { - .column(); - .span(3); - } -} - -// # 1.4 One main column and two sidebars -// -// ```html -// <div class="clearlessgrid4 gridwrapper"> -// <div class="sidebar1">column</div> -// <div class="main">column</div> -// <div class="sidebar2">column</div> -// </div> -// ``` -// - -.clearlessgrid4 { - .column-wrapper(); - .main { - .column(); - .span(6); - } - .sidebar1, - .sidebar2 { - .column(); - .span(3); - } - .sidebar2 { - .end-column(); - } -} - -// # 1.5 Four columns -// -// ```html -// <div class="clearlessgrid5 gridwrapper"> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.clearlessgrid5 { - .column-wrapper(); - > .grid-1 { - .column(); - .span(3); - &:last-child { - .end-column(); - } - } -} - -// # 1.6 Six columns -// -// ```html -// <div class="clearlessgrid6 gridwrapper"> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.clearlessgrid6 { - .column-wrapper(); - > .grid-1 { - .column(); - .span(2); - &:last-child { - .end-column(); - } - } -} - -// # 1.7 Twelve columns -// -// ```html -// <div class="clearlessgrid12 gridwrapper"> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.clearlessgrid12 { - .column-wrapper(); - > .grid-1 { - .column(); - .span(1); - &:last-child { - .end-column(); - } - } -} - -// # 2. Grid columns using display: inline-block -// -// # 2.1 One column -// -// ```html -// <div class="inlinegrid1 inlinegridwrapper"> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.inlinegrid1 { - .inline-column-wrapper(); - > .grid-1 { - .inline-column(); - .span(12); - .inline-end-column(); - } -} - -// # 2.2 One main column and two right sidebar -// -// ```html -// <div class="inlinegrid2 inlinegridwrapper"> -// <div class="main">column</div> -// <div class="sidebar">column</div> -// </div> -// ``` -// - -.inlinegrid2 { - .inline-column-wrapper(); - .main { - .inline-column(); - .span(9); - } - .sidebar { - .inline-column(); - .span(3); - .inline-end-column(); - } -} - -// # 2.3 One main column and one left sidebar -// -// ```html -// <div class="inlinegrid3 inlinegridwrapper"> -// <div class="sidebar">column</div> -// <div class="main">column</div> -// </div> -// ``` -// - -.inlinegrid3 { - .inline-column-wrapper(); - .main { - .inline-column(); - .span(9); - .inline-end-column(); - } - .sidebar { - .inline-column(); - .span(3); - } -} - -// # 2.4 One main column and two sidebars -// -// ```html -// <div class="inlinegrid4 inlinegridwrapper"> -// <div class="sidebar1">column</div> -// <div class="main">column</div> -// <div class="sidebar2">column</div> -// </div> -// ``` -// - -.inlinegrid4 { - .inline-column-wrapper(); - .main { - .inline-column(); - .span(6); - } - .sidebar1, - .sidebar2 { - .inline-column(); - .span(3); - } - .sidebar2 { - .inline-end-column(); - } -} - -// # 2.5 Four columns -// -// ```html -// <div class="inlinegrid5 inlinegridwrapper"> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.inlinegrid5 { - .inline-column-wrapper(); - > .grid-1 { - .inline-column(); - .span(3); - &:last-child { - .inline-end-column(); - } - } -} - -// # 2.6 Six columns -// -// ```html -// <div class="inlinegrid6 inlinegridwrapper"> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.inlinegrid6 { - .inline-column-wrapper(); - > .grid-1 { - .inline-column(); - .span(2); - &:last-child { - .inline-end-column(); - } - } -} - -// # 2.7 Twelve columns -// -// ```html -// <div class="inlinegrid12 inlinegridwrapper"> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// <div class="grid-1">column</div> -// </div> -// ``` -// - -.inlinegrid12 { - .inline-column-wrapper(); - > .grid-1 { - .inline-column(); - .span(1); - &:last-child { - .inline-end-column(); - } - } -} - -// #Common settings - -@total-columns: 12; -@column-width: 60px; -@gutter-width: 20px; - -.gridwrapper > div, -.inlinegridwrapper > div { - background: #e5e5e5; - border: 1px solid #999; - padding: 5px 0; - text-align: center; - .box-sizing(); -} diff --git a/app/design/frontend/Magento/plushe/css/source/lib/icons.less b/app/design/frontend/Magento/plushe/css/source/lib/icons.less deleted file mode 100644 index b641292097d..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/icons.less +++ /dev/null @@ -1,73 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -.example.icon { - display: inline-block; - margin: 0 0 16px; - width: 20%; - text-align: center; - .iconBefore("", 32px, 0 0 10px 0, 'icons'); - &:before { - content: attr(data-icon); - display: block; - } - &:hover { - color: @secondary2; - } -} - -// #iconBefore -//Add an icon *before* the specified element -// -//**.iconBefore(["content"], [height], [margin], ["font"]);** -// ``` -// <a class="action primary showcart1" href="#"><span>My Cart</span></a> -// ``` -.action.showcart1 { - .iconBefore(@icon-cart, 16px, 0 5px 0 0, "icons"); -} - -// #iconAfter -//Add an icon *after* the specified element -// -//**.iconAfter(["content"], [height], [margin], ["font"]);** -// ``` -// <a class="action showcart2" href="#"><span>My Cart</span></a> -// ``` -.action.showcart2 { - .iconAfter(@icon-cart, 16px, 0 0 0 10px, "icons"); -} - -// #iconHideText -//Hide the text to the specified element (not hide the icon) -// -//**.iconHideText([limitWidth]);** -// ``` -// <a class="action showcart3" href="#"><span>My Cart</span></a> -// ``` -.action.showcart3 { - .iconAfter(@icon-cart, 16px, 10px,"icons"); - .iconHideText(16px); -} diff --git a/app/design/frontend/Magento/plushe/css/source/lib/messages.less b/app/design/frontend/Magento/plushe/css/source/lib/messages.less deleted file mode 100644 index 6bd368e0201..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/messages.less +++ /dev/null @@ -1,565 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// Simple messages - -.message( -@_message-type: info, -@_message-color: @message-info-color, -@_message-background: @message-info-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-info-link-color, -@_message-link-color-hover: @message-info-link-color-hover, -@_message-border: @message-border -) when (@_message-type = info) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message( -@_message-type: info, -@_message-color: @message-warning-color, -@_message-background: @message-warning-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-warning-link-color, -@_message-link-color-hover: @message-warning-link-color-hover, -@_message-border: @message-border -) when (@_message-type = warning) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message( -@_message-type: info, -@_message-color: @message-error-color, -@_message-background: @message-error-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-error-link-color, -@_message-link-color-hover: @message-error-link-color-hover, -@_message-border: @message-border -) when (@_message-type = error) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message( -@_message-type: info, -@_message-color: @message-success-color, -@_message-background: @message-success-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-success-link-color, -@_message-link-color-hover: @message-success-link-color-hover, -@_message-border: @message-border -) when (@_message-type = success) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message( -@_message-type: info, -@_message-color: @message-notice-color, -@_message-background: @message-notice-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-notice-link-color, -@_message-link-color-hover: @message-notice-link-color-hover, -@_message-border: @message-border -) when (@_message-type = notice) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -._message( -@_message-color: @message-info-color, -@_message-background: @message-info-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-info-link-color, -@_message-link-color-hover: @message-info-link-color-hover, -@_message-border: @message-border -) { - display: block; - color: @_message-color; - background: @_message-background; - padding: @_message-padding; - margin: @message-margin; - border-radius: @_message-border-radius; - ._message-border(@_message-border); - font-size: @message-font-size; - line-height: @message-line-height; - - a { - color: @_message-link-color; - - &:hover { - color: @_message-link-color-hover; - } - } -} - -._message-border(@_message-border) when not (@_message-border = none) { - border: @_message-border; -} - -// Simple messages aliases - -.message-info( -@_message-color: @message-info-color, -@_message-background: @message-info-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-info-link-color, -@_message-link-color-hover: @message-info-link-color-hover, -@_message-border: @message-border -) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message-warning( -@_message-color: @message-warning-color, -@_message-background: @message-warning-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-warning-link-color, -@_message-link-color-hover: @message-warning-link-color-hover, -@_message-border: @message-border -) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message-error( -@_message-color: @message-error-color, -@_message-background: @message-error-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-error-link-color, -@_message-link-color-hover: @message-error-link-color-hover, -@_message-border: @message-border -) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message-success( -@_message-color: @message-success-color, -@_message-background: @message-success-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-success-link-color, -@_message-link-color-hover: @message-success-link-color-hover, -@_message-border: @message-border -) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -.message-notice( -@_message-color: @message-notice-color, -@_message-background: @message-notice-background, -@_message-padding: @message-padding, -@_message-margin: @message-margin, -@_message-border-radius: @message-border-radius, -@_message-link-color: @message-notice-link-color, -@_message-link-color-hover: @message-notice-link-color-hover, -@_message-border: @message-border -) { - ._message( - @_message-color: @_message-color, - @_message-background: @_message-background, - @_message-padding: @_message-padding, - @_message-margin: @_message-margin, - @_message-border-radius: @_message-border-radius, - @_message-link-color: @_message-link-color, - @_message-link-color-hover: @_message-link-color-hover, - @_message-border: @_message-border - ); -} - -// Messages with lateral icon - -.message-info-icon-lateral( -@_message-icon-position: right, -@_message-icon: @message-info-icon, -@_message-icon-color: @message-info-icon-color, -@_message-icon-background: @message-info-icon-background -) { - ._message-icon-lateral( - @_message-icon-position, - @_message-icon, - @_message-icon-color, - @_message-icon-background - ); -} - -.message-warning-icon-lateral( -@_message-icon-position: right, -@_message-icon: @message-warning-icon, -@_message-icon-color: @message-warning-icon-color, -@_message-icon-background: @message-warning-icon-background -) { - ._message-icon-lateral( - @_message-icon-position, - @_message-icon, - @_message-icon-color, - @_message-icon-background - ); -} - -.message-error-icon-lateral( -@_message-icon-position: right, -@_message-icon: @message-error-icon, -@_message-icon-color: @message-error-icon-color, -@_message-icon-background: @message-error-icon-background -) { - ._message-icon-lateral( - @_message-icon-position, - @_message-icon, - @_message-icon-color, - @_message-icon-background - ); -} - -.message-success-icon-lateral( -@_message-icon-position: right, -@_message-icon: @message-success-icon, -@_message-icon-color: @message-success-icon-color, -@_message-icon-background: @message-success-icon-background -) { - ._message-icon-lateral( - @_message-icon-position, - @_message-icon, - @_message-icon-color, - @_message-icon-background - ); -} - -.message-notice-icon-lateral( -@_message-icon-position: right, -@_message-icon: @message-notice-icon, -@_message-icon-color: @message-notice-icon-color, -@_message-icon-background: @message-notice-icon-background -) { - ._message-icon-lateral( - @_message-icon-position, - @_message-icon, - @_message-icon-color, - @_message-icon-background - ); -} - -// Messages with inner icon - -.message-info-icon-inner( -@_message-icon: @message-info-icon, -@_message-icon-color: @message-info-icon-color, -@_message-icon-background: @message-info-icon-background, -@_message-padding-left: @message-icon-inner-padding-left -) { - ._message-icon-inner( - @_message-icon, - @_message-icon-color, - @_message-icon-background, - @_message-padding-left - ); -} - -.message-warning-icon-inner( -@_message-icon: @message-warning-icon, -@_message-icon-color: @message-warning-icon-color, -@_message-icon-background: @message-warning-icon-background, -@_message-padding-left: @message-icon-inner-padding-left -) { - ._message-icon-inner( - @_message-icon, - @_message-icon-color, - @_message-icon-background, - @_message-padding-left - ); -} - -.message-error-icon-inner( -@_message-icon: @message-error-icon, -@_message-icon-color: @message-error-icon-color, -@_message-icon-background: @message-error-icon-background, -@_message-padding-left: @message-icon-inner-padding-left -) { - ._message-icon-inner( - @_message-icon, - @_message-icon-color, - @_message-icon-background, - @_message-padding-left - ); -} - -.message-success-icon-inner( -@_message-icon: @message-success-icon, -@_message-icon-color: @message-success-icon-color, -@_message-icon-background: @message-success-icon-background, -@_message-padding-left: @message-icon-inner-padding-left -) { - ._message-icon-inner( - @_message-icon, - @_message-icon-color, - @_message-icon-background, - @_message-padding-left - ); -} - -.message-notice-icon-inner( -@_message-icon: @message-notice-icon, -@_message-icon-color: @message-notice-icon-color, -@_message-icon-background: @message-notice-icon-background, -@_message-padding-left: @message-icon-inner-padding-left -) { - ._message-icon-inner( - @_message-icon, - @_message-icon-color, - @_message-icon-background, - @_message-padding-left - ); -} - -// Private mixins - -._message-icon-lateral( -@_message-icon-position, -@_message-icon, -@_message-icon-color, -@_message-icon-background -) { - position: relative; - - &:before { - content: ''; - position: absolute; - width: @message-icon-lateral-width; - text-align: center; - top: 0; - height: 100%; - display: block; - padding: 0; - border-radius: @message-border-radius; - background: @_message-icon-background; - } - - > *:first-child:before { - content: ''; - position: absolute; - overflow: hidden; - top: 50%; - margin-top: -3px; - } - - > *:first-child:after { - content: @_message-icon; - font-family: "icons"; - color: #fff; - font-size: @message-icon-font-size; - position: absolute; - top: 50%; - margin-top: ceil(-@message-icon-font-size / 3 - 2); - width: @message-icon-lateral-width; - text-align: center; - display: block; - } - - ._message-icon-lateral-position( - @_message-icon-position, - @_message-icon-background - ); -} - -._message-icon-lateral-position( -@_message-icon-position, -@_message-icon-background -) when (@_message-icon-position = right) { - padding-right: 60px; - - &:before { - right: 0; - } - > *:first-child:before { - .arrow(left, 5px, @_message-icon-background); - right: @message-icon-lateral-width; - } - > *:first-child:after { - right: 0; - } -} - -._message-icon-lateral-position( -@_message-icon-position, -@_message-icon-background -) when (@_message-icon-position = left) { - padding-left: 60px; - - &:before { - left: 0; - } - > *:first-child:before { - .arrow(right, 5px, @_message-icon-background); - left: @message-icon-lateral-width; - } - > *:first-child:after { - left: 0; - } -} - -._message-icon-inner( -@_message-icon, -@_message-icon-color, -@_message-icon-background, -@_message-padding-left -) { - position: relative; - padding-left: @_message-padding-left; - - > *:first-child:before { - content: @_message-icon; - font-family: "icons"; - color: @_message-icon-color; - position: absolute; - left: 0; - width: @_message-padding-left; - text-align: center; - font-size: @message-icon-font-size; - } -} - - - - -.message.info { - .message-info(); - .message-info-icon-lateral(); -} - -.message.error { - .message-error(); - .message-error-icon-lateral(); -} - -.message.warning { - .message-warning(); - .message-warning-icon-lateral(); -} - -.message.notice { - .message-notice(); - .message-notice-icon-lateral(); -} - -.message.success { - .message-success(); - .message-success-icon-lateral(); -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/lib/navigation.less b/app/design/frontend/Magento/plushe/css/source/lib/navigation.less deleted file mode 100644 index bc2166cd2c7..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/navigation.less +++ /dev/null @@ -1,817 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// # Navigation -// -// -// ```html -//<div class="header"></div> -//<nav class="navigation" data-role="navigation" data-mage-init="{ navigationMenu: { submenuContiniumEffect: false } }"> -// <ul> -// <li class="level0 nav-1 first level-top parent"><a href="http://m2.loc/index.php/ewr.html" class="level-top"><span> First level 1 </span></a> -// <div class="submenu"> -// <ul class="level0"> -// <li class="column"> -// <ul> -// <li class="level1 nav-1-1 first parent"><a href="http://m2.loc/index.php/ewr/subcategory-1.html"><span> Subcategory 1 </span></a> -// <div class="submenu"> -// <ul class="level1"> -// <li class="level2 nav-1-1-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-1.html"><span> Third level 1 </span></a></li> -// <li class="level2 nav-1-1-2 parent"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2.html"><span> Third level 2 </span></a> -// <div class="submenu"> -// <ul class="level2"> -// <li class="level3 nav-1-1-2-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-1.html"><span> Fourth level 1 </span></a></li> -// <li class="level3 nav-1-1-2-2"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-2.html"><span> Fourth level 2 </span></a></li> -// <li class="level3 nav-1-1-2-3"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-3.html"><span> Fourth level 3 </span></a></li> -// <li class="level3 nav-1-1-2-4 last"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-4.html"><span> Fourth level 4 </span></a></li> -// </ul> -// </div> -// </li> -// <li class="level2 nav-1-1-3 parent"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-3.html"><span> Third level 3 </span></a> -// <div class="submenu"> -// <ul class="level2"> -// <li class="level3 nav-1-1-3-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-3/fourth-level-1.html"><span> Fourth level 1 </span></a></li> -// <li class="level3 nav-1-1-3-2 last"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-3/fourth-level-2.html"><span> Fourth level 2 </span></a></li> -// </ul> -// </div> -// </li> -// <li class="level2 nav-1-1-4"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-4.html"><span> Third level 4 </span></a></li> -// <li class="level2 nav-1-1-5"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-5.html"><span> Third level 5 </span></a></li> -// <li class="level2 nav-1-1-6"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-6.html"><span> Third level 6 </span></a></li> -// <li class="level2 nav-1-1-7"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-7.html"><span> Third level 7 </span></a></li> -// <li class="level2 nav-1-1-8"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-8.html"><span> Third level 8 </span></a></li> -// <li class="level2 nav-1-1-9"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-9.html"><span> Third level 9 </span></a></li> -// <li class="level2 nav-1-1-10"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-10.html"><span> Third level 10 </span></a></li> -// <li class="level2 nav-1-1-11 last"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-11.html"><span> Third level 11 </span></a></li> -// </ul> -// </div> -// </li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-1-2 parent"><a href="http://m2.loc/index.php/ewr/subcategory-2.html"><span> Subcategory 2 </span></a> -// <div class="submenu"> -// <ul class="level1"> -// <li class="level2 nav-1-2-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-1.html"><span> Third level 1 </span></a></li> -// <li class="level2 nav-1-2-2"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-2.html"><span> Third level 2 </span></a></li> -// <li class="level2 nav-1-2-3"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-3.html"><span> Third level 3 </span></a></li> -// <li class="level2 nav-1-2-4"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-4.html"><span> Third level 4 </span></a></li> -// <li class="level2 nav-1-2-5 last"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-5.html"><span> Third level 5 </span></a></li> -// </ul> -// </div> -// </li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-1-3"><a href="http://m2.loc/index.php/ewr/subcategory-3.html"><span> Subcategory 3 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-1-4"><a href="http://m2.loc/index.php/ewr/subcategory-4.html"><span> Subcategory 4 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-1-5"><a href="http://m2.loc/index.php/ewr/subcategory-5.html"><span> Subcategory 5 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-1-6 last parent"><a href="http://m2.loc/index.php/ewr/subcategory-6.html"><span> Subcategory 6 </span></a> -// <div class="submenu"> -// <ul class="level1"> -// <li class="level2 nav-1-6-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-1.html"><span> Third level 1 </span></a></li> -// <li class="level2 nav-1-6-2"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-2.html"><span> Third level 2 </span></a></li> -// <li class="level2 nav-1-6-3"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-3.html"><span> Third level 3 </span></a></li> -// <li class="level2 nav-1-6-4"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-4.html"><span> Third level 4 </span></a></li> -// <li class="level2 nav-1-6-5"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-5.html"><span> Third level 5 </span></a></li> -// <li class="level2 nav-1-6-6"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-6.html"><span> Third level 6 </span></a></li> -// <li class="level2 nav-1-6-7 last"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-7.html"><span> Third level 7 </span></a></li> -// </ul> -// </div> -// </li> -// </ul> -// </li> -// </ul> -// </div> -// </li> -// <li class="level0 nav-2 level-top parent"><a href="http://m2.loc/index.php/123456.html" class="level-top"><span> First level 2 </span></a> -// <div class="submenu"> -// <ul class="level0"> -// <li class="column"> -// <ul> -// <li class="level1 nav-2-1 first"><a href="http://m2.loc/index.php/123456/subcategory-1.html"><span> Subcategory 1 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-2-2"><a href="http://m2.loc/index.php/123456/subcategory-2.html"><span> Subcategory 2 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-2-3 last"><a href="http://m2.loc/index.php/123456/subcategory-3.html"><span> Subcategory 3 </span></a></li> -// </ul> -// </li> -// </ul> -// </div> -// </li> -// <li class="level0 nav-3 level-top parent"><a href="http://m2.loc/index.php/first-level-3.html" class="level-top"><span> First level 3 </span></a> -// <div class="submenu"> -// <ul class="level0"> -// <li class="column"> -// <ul> -// <li class="level1 nav-3-1 first"><a href="http://m2.loc/index.php/first-level-3/subcategory-1.html"><span> Subcategory 1 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-3-2"><a href="http://m2.loc/index.php/first-level-3/subcategory-2.html"><span> Subcategory 2 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-3-3"><a href="http://m2.loc/index.php/first-level-3/subcategory-3.html"><span> Subcategory 3 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-3-4"><a href="http://m2.loc/index.php/first-level-3/subcategory-4.html"><span> Subcategory 4 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-3-5 last"><a href="http://m2.loc/index.php/first-level-3/subcategory-5.html"><span> Subcategory 5 </span></a></li> -// </ul> -// </li> -// </ul> -// </div> -// </li> -// <li class="level0 nav-4 level-top"><a href="http://m2.loc/index.php/first-level-4.html" class="level-top"><span> First level 4 </span></a></li> -// <li class="level0 nav-5 level-top"><a href="http://m2.loc/index.php/first-level-5.html" class="level-top"><span> First level 5 </span></a></li> -// <li class="level0 nav-6 level-top"><a href="http://m2.loc/index.php/first-level-6.html" class="level-top"><span> First level 6 </span></a></li> -// <li class="level0 nav-7 level-top"><a href="http://m2.loc/index.php/first-level-7.html" class="level-top"><span> First level 7 </span></a></li> -// <li class="level0 nav-8 level-top"><a href="http://m2.loc/index.php/first-level-8.html" class="level-top"><span> First level 8 </span></a></li> -// <li class="level0 nav-9 level-top parent"><a href="http://m2.loc/index.php/first-level-4-1.html" class="level-top"><span> First level 9 </span></a> -// <div class="submenu"> -// <ul class="level0"> -// <li class="column"> -// <ul> -// <li class="level1 nav-9-1 first parent"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1.html"><span> Subcategory 1 </span></a> -// <div class="submenu"> -// <ul class="level1"> -// <li class="level2 nav-9-1-1 first"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-1.html"><span> Third level 1 </span></a></li> -// <li class="level2 nav-9-1-2 parent"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-2.html"><span> Third level 2 </span></a> -// <div class="submenu"> -// <ul class="level2"> -// <li class="level3 nav-9-1-2-1 first"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-2/fourth-level-1.html"><span> Fourth level 1 </span></a></li> -// <li class="level3 nav-9-1-2-2 last"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-2/fourth-level-2.html"><span> Fourth level 2 </span></a></li> -// </ul> -// </div> -// </li> -// <li class="level2 nav-9-1-3 last"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-3.html"><span> Third level 3 </span></a></li> -// </ul> -// </div> -// </li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-9-2"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-2.html"><span> Subcategory 2 </span></a></li> -// </ul> -// </li> -// <li class="column"> -// <ul> -// <li class="level1 nav-9-3 last"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-3.html"><span> Subcategory 3 </span></a></li> -// </ul> -// </li> -// </ul> -// </div> -// </li> -// <li class="level0 nav-10 level-top"><a href="http://m2.loc/index.php/first-level-10.html" class="level-top"><span> First level 10 </span></a></li> -// <li class="level0 nav-11 level-top"><a href="http://m2.loc/index.php/first-level-11.html" class="level-top"><span> First level 11 </span></a></li> -// <li class="level0 nav-12 level-top"><a href="http://m2.loc/index.php/first-level-12.html" class="level-top"><span> First level 12 </span></a></li> -// <li class="level0 nav-13 level-top"><a href="http://m2.loc/index.php/first-level-13.html" class="level-top"><span> First level 13 </span></a></li> -// <li class="level0 nav-14 level-top"><a href="http://m2.loc/index.php/first-level-14.html" class="level-top"><span> First level 14 </span></a></li> -// <li class="level0 nav-15 level-top"><a href="http://m2.loc/index.php/first-level-15.html" class="level-top"><span> First level 15 </span></a></li> -// <li class="level0 nav-16 level-top"><a href="http://m2.loc/index.php/first-level-16.html" class="level-top"><span> First level 16 </span></a></li> -// <li class="level0 nav-17 level-top"><a href="http://m2.loc/index.php/first-level-17.html" class="level-top"><span> First level 17 </span></a></li> -// </ul> -//</nav> -// ``` -// - -@subNavHeight: auto; -@subNavPadding: 45px; - -@navBg : @headerBg; -@navBgImage : @headerBgImage; - -.navigation { - background-color: @navBg; - background-image: @navBgImage; - background-repeat: repeat; - background-position: 0 0; - border-top: 1px solid; - .borderColorI(@navBg); - position: relative; - z-index: 2; - .clearfix(); - - &:empty { - display: none; - } - - > ul > .level-top { - display: inline-block; - line-height: 1.2; - vertical-align: top; - padding-right: 40px; - - &:last-child { - padding-right: 0; - } - - &.active { - > a:after { - opacity: 1; - border-bottom-color: @primary7; - } - } - - &.hover { - > a:after { - border-bottom-color: @primary1; - } - > .submenu { - border-bottom: 1px solid @primary3; - } - } - - &.hover, - &:hover { - > .submenu { - z-index: 2; - } - &:hover > a span, - &.parent.hover > a span, - &.parent > a span { - color: @primary6; - } - &:hover > a:after, - &.hover > a:after, - &.parent > a:after { - opacity: 1; - } - } - - &.more { - &:after { - cursor: pointer; - content: "\e010"; - font-family: "icons"; - font-size: 16px; - display: inline-block; - padding: .6em .7em 1em; - margin-top: 0.4em; - border-radius: 4px 4px 0 0; - position: relative; - z-index: 1; - } - - &.hover:after { - background: @primary1; - } - - li.level-top { - width: 200px; - margin: 0 0 0 -10px !important; - padding: 7px 10px 7px 30px; - > a { - font-size: 16px; - } - &.hover, - &:hover { - background: @primary1; - > a span { - color: @primary6; - } - &.parent { - .iconBefore(@content: @icon-arrow-right-thick, @margin: 0 8px 0 0, @font: "icons"); - &:before { - float: right; - color: @secondary1; - } - } - .submenu { - display: block !important; - } - } - > a span { - color: @primary5; - } - .submenu { - display: none; - } - > .submenu { - position: absolute; - right: 0; - padding: 0; - left: 0; - top: 0; - margin-left: 230px; - min-height: 100%; - background: @primary1; - .box-sizing(); - .box-shadow(0 10px 8px rgba(0,0,0,0.3)); - .no-boxshadow & { - border: 2px solid @primary3; - border-width: 0 2px 2px; - } - > ul { - background: @primary1; - position: relative; - z-index: 1; - padding: 10px; - } - } - } - > .submenu { - background: none; - border-width: 0; - > ul { - position: relative; - } - } - } - - > a { - position: relative; - display: inline-block; - vertical-align: top; - padding: 1em 0; - font-size: 16px; - text-align: center; - color: @primary5; - &:after { - opacity: 0; - content: ''; - overflow: hidden; - display: block; - position: absolute; - bottom: 0; - left: 50%; - zoom: 1; - z-index: 2; - color: @primary6; - .arrow(top, 10px, @primary1); - } - > span { - color: @primary5; - } - &:active span, - &:focus span { - color: @primary6; - } - &:active:after, - &:focus:after { - opacity: 1; - } - } - - > .submenu { - display: none; - position: absolute; - left: 0; - top: 100%; - background: @primary1; - width: 100%; - z-index: 1; - > ul { - height: @subNavHeight; - padding-top: @subNavPadding; - padding-bottom: @subNavPadding; - li.column { - .box-sizing( border-box ); - width: 25%; - display: inline-block; - padding-right: 30px; - vertical-align: top; - } - .level1 > a { - text-transform: uppercase; - } - .parent ul { - padding-left: 10px; - } - li { - margin: 8px 0; - &:fist-child { - margin-top: 0; - } - } - } - } - } -} - -@media only screen and (max-width: 640px) { - html.opened { - overflow: hidden; - } - - body { - width: 100%; - height: 100%; - &.opened { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - position: relative; - height: 100%; - width: 100%; - overflow: hidden; - - .navigation { - left: 0; - -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); - .transition(left .3s ease-out 0); - } - .page.wrapper { - margin-right: -86%; - cursor: pointer; - } - } - } - - .page.wrapper { - position: relative; - width: 100%; - float: right; - margin: 0; - .transition(margin .3s ease-out 0); - } - - .navigationLink() { - & > a { - display: block; - padding: 10px 20px; - text-transform: none; - font-size: 20px; - font-weight: 600; - border-bottom: 1px solid @primary2; - color: @primary6; - text-align: left; - &:hover, - &:visited { - color: @primary6; - } - &:active { - background: #dbdcd7; - } - &:after { - border: 0; - } - } - } - - .navigationSubmenu() { - position: absolute; - display: block; - left: 100%; - top: 0; - width: 100%; - overflow-x: hidden; - background: @primary7; - .transition(left .3s ease-out 0); - &.opened { - left: 0; - z-index: 3; - } - > ul { - padding-top: 0; - padding-bottom: 0; - li { - margin: 0; - .navigationLink(); - } - li.column { - width: 100%; - display: block; - padding-right: 0; - } - .parent ul { - padding-left: 0; - } - } - } - - .navigation { - display: block; - position: absolute; - width: 86%; - left: -86%; - height: 100%; - background: @primary7; - overflow: auto; - border-right: #b6b8af 1px solid; - .box-sizing(); - .transition(left .3s ease-out 0); - - ul { - margin: 0; - padding: 0; - li.hidden { - display: none; - } - } - - .nav { - .transition(left .3s linear 0); - position: relative; - overflow: hidden; - > .level-top { - display: block; - padding: 0; - background: @primary7; - .navigationLink(); - > a span { - color: @primary6; - } - &.parent { - &:after { - display: none; - } - > a { - position: relative; - .iconAfter(@content: @icon-arrow-right-thick, @size: 14px, @font: 'icons'); - text-transform: none !important; - &:after { - position: absolute; - width: 18px; - top: 15px; - right: 17px; - left: auto; - opacity: 1; - z-index: auto; - } - } - > .submenu { - .navigationSubmenu(); - } - } - - } - - .action.back { - a { - background: @primary6; - position: relative; - color: @primary7 !important; - border-bottom-color: transparent !important; - cursor: pointer; - .iconBefore(@icon-arrow-left-thick, 14px, 0, "icons"); - &:hover, - &:active, - &:visited { - color: @primary7 !important; - background: @primary6 !important; - } - &:before { - position: absolute; - top: 15px; - left: 3px; - } - span:before { - content: ""; - } - } - &.fixed { - position: fixed; - top: 0; - left: 0; - width: 86%; - z-index: 1; - -webkit-box-shadow: 0 1px 5px rgba(0,0,0,0.6); - box-shadow: 0 1px 5px rgba(0,0,0,0.6); - } - } - - .parent { - &:after { - display: none; - } - > a { - position: relative; - .iconAfter(@icon-arrow-right-thick, 14px, 0, "icons"); - &:after { - position: absolute; - top: 15px; - right: 17px; - } - } - .submenu { - .navigationSubmenu(); - } - } - } - - .account.links { - .resetList(); - > li > a { - background: @primary1; - padding: 10px 20px; - font-weight: 600; - } - a { - text-transform: capitalize; - position: relative; - display: block; - padding: 10px; - cursor: pointer; - font-size: 18px; - border-bottom: 1px solid @primary2; - font-weight: 400; - color: @primary6; - &:hover, - &:visited { - color: @primary6 !important; - } - &:active { - background: #dbdcd7 ; - } - } - .link.compare { - display: none; - } - .customer.welcome { - display: block !important; - background: @primary1; - padding: 0 10px; - border-bottom: 1px solid @primary2; - .customer.name { - position: relative; - display: block; - padding: 10px; - cursor: pointer; - font-size: 18px; - font-weight: 600; - .iconAfter(@icon-expand, 16px, 0, "icons"); - &:after { - position: absolute; - top: 10px; - right: 7px; - } - &.active:after { - content: "\e011"; - } - } - .menu { - margin: 0; - padding: 0; - display: none; - > ul { - margin: 0; - padding: 0; - position: relative; - float: none; - border: none; - background: @primary7; - li { - margin: 0; - } - } - } - &.active { - border-bottom-color: transparent; - .menu { - display: block; - } - } - } - } - - .settings.panel { - border-bottom: 1px solid @primary2; - background: @primary1; - > .title { - font-weight: 600; - position: relative; - padding: 10px 20px; - cursor: pointer; - font-size: 18px; - .iconAfter(@icon-expand, 16px, 0, "icons"); - &:after { - position: absolute; - top: 10px; - right: 17px; - } - } - > .content { - display: none; - margin: 0 10px 10px; - background: @primary7; - border-bottom: 1px solid @primary2; - - .switcher { - padding: 10px 10px 15px; - display: block; - - &:first-child { - padding-bottom: 0; - } - .label { - font-weight: 400; - color: @primary6; - font-size: 16px; - display: block; - padding-bottom: 5px; - } - .options { - display: block; - - strong { - color: @primary6; - display: block; - position: relative; - padding: 10px 40px 10px 20px; - cursor: pointer; - font-size: 16px; - .iconAfter(@icon-expand, 16px, 0, "icons"); - &:after { - position: absolute; - top: 10px; - right: 17px; - } - } - button { - display: none; - } - ul { - display: none; - position: static; - margin: 0 10px 10px; - padding: 0; - border: 0; - min-width: 0; - float: none; - background: none; - color: @primary6; - font-size: 16px; - - li { - margin: 0; - padding: 10px 20px; - border-bottom: 1px solid @primary2; - - a { - color: @primary6; - } - } - } - &.active { - ul { - display: block; - } - strong:after { - content: "\e011"; - } - } - } - } - } - &.active { - > .content { - display: block; - } - > .title:after { - content: "\e011"; - } - } - } - } -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/lib/sections.less b/app/design/frontend/Magento/plushe/css/source/lib/sections.less deleted file mode 100644 index cd0788a1ef5..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/sections.less +++ /dev/null @@ -1,203 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -.data-tabs() { - .clearfix(); - position: relative; - z-index: 1; - > .item.title { - float: left; - > .switch { - display: block; - position: relative; - top: 1px; - z-index: 2; - } - } - > .item.content { - width: 100%; - float: right; - margin-left: -100%; - display: none; - .box-sizing(); - &.active { - display: block; - } - } - - .tabs > .term-content.active { - border: 1px solid #BFBFBF; - color: hsl(0, 0%, 50%); - display: block; - } -} - -.data-tabs-styling() { - > .item.title { - margin-right: 1px; - min-height: 35px; - > .switch { - font-size: 14px; - line-height: 1; - font-weight: 600; - text-decoration: none; - padding: 11px 11px 8px; - border: 2px solid #e5e5e5; - background: rgba(0, 0, 0, 0.03); - border-bottom: none; - text-transform: uppercase; - border-radius: 4px 4px 0 0; - } - &:not(.disabled) > .switch:active, - &:not(.disabled) > .switch:focus, - &:not(.disabled) > .switch:hover, - &.active > .switch { - background: #fff; - border-width: 3px; - padding: 10px 10px 8px; - outline: none; - } - &.active > .switch { - padding: 10px 20px 11px !important; - } - } - > .item.content { - .clearfix; - margin-top: 36px; - padding: 20px; - &:before { - content: ''; - border-top: 3px solid #e5e5e5; - width: 100%; - display: block; - position: absolute; - left: 0; - .box-sizing(); - margin: -20px 0 20px; - } - } -} - -.data-accordion() { - > .item.title { - .box-sizing(); - width: 100%; - > .item.switch { - display: block; - } - } - > .item.content { - .clearfix(); - .box-sizing(); - display: none; - &.active { - display: block; - } - } -} - -.data-accordion-styling() { - margin: 0; - padding: 0; - > .item.title { - margin: 3px 0 0; - > .switch { - display: block; - font-size: 14px; - line-height: 1; - font-weight: 600; - text-decoration: none; - padding: 11px; - border: 2px solid #e5e5e5; - background: #f8f8f8; - text-transform: uppercase; - border-radius: 4px; - } - &:not(.disabled) > .switch:active, - &:not(.disabled) > .switch:focus, - &:not(.disabled) > .switch:hover, - &.active > .switch { - background: #fff; - border-width: 3px; - padding: 10px; - outline: none; - } - &.active > .switch { - border-radius: 4px 4px 0 0; - } - } - > .item.content { - margin: 0; - padding: 20px; - background: #fff; - } -} - -// # Sections -// -// ```html -// <dl class="product data items" data-sections="tabs"> -// <dt class="data item title active" data-section="title"> -// <a class="data switch" data-toggle="switch" href="#product.info.description">Details</a> -// </dt> -// <dd class="data item content active" id="product.info.description" data-section="content"> -// <p>Fit to be tied. Get the perfect level of lift in our Tie-front Tankini. Featuring removable padding and cup-specific sizes for support and shaping. From our Forever Sexy Swim collection of push-up tops and bottoms in sun-loving colors and prints.</p> -// <p>- Removable push-up padding<br>- Lined hidden underwire cups<br>- Front tie<br>- Adjustable straps can be worn classic or cross-back<br>- Available in two lengths: 17 3/4" and 18 3/4"<br>- Imported Italian nylon/Lycra® spandex</p> -// </dd> -// -// <dt class="data item title" data-section="title"> -// <a class="data switch" data-toggle="switch" href="#product_tags">Tags</a> -// </dt> -// <dd class="data item content" id="product_tags" data-section="content"> -// <p>A playful little push-up. Bring the lightweight lift and custom comfort of the Fabulous by Victoria’s Secret bra to the beach. This triangle top is finished with pretty ruching and a sweet center bow. From our fun, flirty Beach Sexy Swim Collection.</p> -// <p>- Ruched cups with center bow<br>- Push-up padding for extreme lift<br>- Underwire<br>- Ties at neck; looped back tie for adjustability and extra support<br>- Imported nylon/spandex</p> -// </dd> -// -// <dt class="data item title" data-section="title"> -// <a class="data switch" data-toggle="switch" href="#product_reviews">Reviews</a> -// </dt> -// <dd class="data item content" id="product_reviews" data-section="content"> -// <p>Relaxed elegance. The flowy fit of this halter tankini makes beach style a breeze. The built in bra top provides just the right amount of support. Look slimmer in seconds® in this figure-loving top designed exclusively for Victoria’s Secret.</p> -// <p>- Built-in bra with molded foam padding<br>- Halter straps tie at neck<br>- Imported nylon/spandex</p> -// </dd> -// </dl> -// ``` -// - -@media only screen -and (max-width : 99999px) { - .product.data { - .data-tabs(); - .data-tabs-styling(); - } -} - -@media only screen -and (max-width : 768px) { - .product.data { - .data-accordion(); - .data-accordion-styling(); - } -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/lib/snippets.less b/app/design/frontend/Magento/plushe/css/source/lib/snippets.less deleted file mode 100644 index fde287b1a24..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/lib/snippets.less +++ /dev/null @@ -1,552 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -.resetList(@margin: 0, @padding: 0) { - padding: @padding; - margin: @margin; - list-style-type: none; - list-style-image: none; -} - -.borderColor (@color) when (lightness(@color) > 50%) { - border-color: darken(@color, 13%); -} - -.borderColor (@color) when (lightness(@color) =< 50%) { - border-color: lighten(@color, 13%); -} - -.borderColorI (@color) when (lightness(@color) > 50%) { - border-color: lighten(@color, 13%); -} - -.borderColorI (@color) when (lightness(@color) =< 50%) { - border-color: darken(@color, 13%); -} - -.pageWidth(@maxWidth: @LayoutMaxWidth, @minWidth: @LayoutMinWidth, @padding: 10px) { - padding-left: @padding; - padding-right: @padding; - margin: 0 auto; - min-width: (@minWidth - (2 * @padding)); - max-width: (@maxWidth - (2 * @padding)); -} - -.transitionDelay(@delay) { - -webkit-transition-delay: @delay; - -moz-transition-delay: @delay; - -ms-transition-delay: @delay; - -o-transition-delay: @delay; - transition-delay: @delay; -} - -.resetAction() { - border: none; - border-radius: 0; - background: none; - margin: 0; - padding: 0; - box-shadow: none; - text-shadow: none; - outline: none; -} - -.actionLink() { - display: inline; - color: @link; - text-decoration: none; - &:focus, - &:active, - &:hover { - color: @linkHover; - } -} - -.colorA(@c1, @c2) { - color: @c1; - > span { - color: @c1; - } - &:hover, - &:hover > span { - color: @c2; - } -} - -.fieldStyle() { - margin: 0 0 10px; - &:last-child { - margin-bottom: 0; - } - .nested { - .field { - margin: 5px 0; - } - padding: 0; - } -} - -.labelStyle() { - text-transform: uppercase; - font-weight: 600; - padding: 0 0 5px; -} - -.formInline(@labelWidth: 50%) { - > .field { - .clearfix(); - } - > .field > .control, - > .field > .label { - margin: 0; - float: left; - width: @labelWidth; - .box-sizing(); - } - > .field > .control { - width: 100% - @labelWidth; - } - > .field.no-label { - .control { - margin-left: @labelWidth; - } - } -} - -.profileBlockWithBg { - .box-sizing(); - background: @primary1; - padding: 30px; -} - -.visuallyHidden { - .visually-hidden() -} - - -// #Forms mixins -// -// Mixins for all form elements - -.controlStyling() { - .box-sizing(); - background: @fieldBg; - border: 1px solid @primary3; - border-radius: 3px; - font: @baseFontWeight @baseFontSize @baseFont; - // Prevent background color leak outs - background-clip: padding-box; - outline: none; - &:focus { - border-color: @primary4; - } - .control & { - width: 100%; - } - &:disabled { - opacity: 0.5; - } -} - -.inputText() { - .controlStyling(); - height: 32px; - line-height: 1; - padding: 0 10px; - &::-webkit-input-placeholder { - line-height: 1.333; - } - &:-ms-input-placeholder { - line-height: 1.333; - } - .eq-ie8 & { - padding-top: 8px; - } -} - -// * -// Forms -// -------------------------------------- */ -.formFieldset() { - border: 0; - margin: 30px 10px 30px 30px; - padding: 0; - letter-spacing: -0.31em; - word-spacing: -0.43em; - > * { - letter-spacing: normal; - word-spacing: normal; - } - > .legend { - float: left; - font: @baseFontWeight @legendFontSize/1.2 @baseFont; - margin: -30px 30px 50px -30px; - width: 100%; - & + br { - display: block; - .clearfix(); - } - } -} - -.formField() { - .box-sizing(); - margin: 0 0 20px; - > .label { - display: block; - padding-bottom: 5px; - } - .nested .field { - margin: 5px 0; - } - &.choice { - > .control { - width: auto; - } - > .label { - display: inline; - } - > input { - vertical-align: top; - margin-top: 2px; - margin-right: 5px; - } - } - &.required > .label > span:first-child:after { - content: '*'; - color: @requiredField; - } - .addon { - display: table; - padding: 0; - width: 100%; - textarea, - select, - input { - box-shadow: none; - display: table-cell; - margin: 0; - width: 100%; - } - .addbefore, - .addafter { - height: 0; - white-space: nowrap; - display: inline-block; - display: table-cell; - vertical-align: middle; - width: 1px; - .inputText(); - } - } - .note { - font-size: @baseFontSizeMiddle; - margin-top: 3px; - padding-left: 15px; - &:before { - border-bottom: 5px solid @baseColor; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - content: ''; - display: inline-block; - font-size: 0; - line-height: 0; - margin: 4px 0 0 -14px; - position: absolute; - vertical-align: top; - width: 0; - } - } -} - -.formCols(@fieldWidth : 50%) { - > .field { - display: inline-block; - padding-right: 20px; - vertical-align: top; - width: @fieldWidth; - } - .nested .field { - width: 100%; - } - .actions { - margin-right: 30px; - } -} - -.formCommon() { - .fieldset { - .box-sizing(); - .formCols(); - .formFieldset(); - width: 690px; - background: @primary1; - padding: 30px 10px 30px 30px; - border: 0; - margin: 0 0 40px; - position: relative; - z-index: 1; - .legend { - float: left; - line-height: 1.2; - font-size: 20px; - font-weight: @baseFontWeight; - padding-bottom: 20px; - width: 100%; - padding: 0 40px 20px 0; - background: #fff; - margin: -30px -10px 30px -30px; - & + br { - display: block; - clear: both; - } - } - > .field { - .formField(); - .fieldStyle(); - > .label { - display: block; - padding: 0 0 5px; - } - margin-bottom: 20px; - } - > .field.note, - .field.street, - .field.choice.newsletter { - width: 100%; - } - .field.fullname { - width: 100%; - .fields.group-5 .field { - width: 20%; - } - } - .field.dob { - .fields.group .field { - .box-sizing(); - width: 33%; - position: relative; - z-index: 1; - .label { - position: absolute; - top: 10px; - font-size: @baseFontSizeMiddle; - line-height: 16px; - } - .control { - margin-left: 27px; - } - &:last-child { - padding-right: 0; - width: 34%; - } - } - } - } - .action.save, - .action.submit, - .action.add { - &:extend(.primary.action all); - } - .actions { - .clearfix(); - .primary { - float: right; - } - .secondary { - float: left; - } - width: 690px; - } - .fieldset.create.account { - &:after { - content: attr(data-hasrequired); - display: block; - position: absolute; - top: 100%; - left: 0; - padding: 10px 0 0; - letter-spacing: normal; - word-spacing: normal; - color: @secondary1; - } - } -} - -// * -// Icons -// -------------------------------------- */ - -.iconBefore(@content: '', @size: 16px, @margin: 0, @font: 'icons') { - &:before { - font-family: "@{font}"; - font-size: @size; - line-height: @size; - height: @size; - margin: @margin; - overflow: hidden; - content: @content; - font-style: normal; - speak: none; - font-weight: normal; - -webkit-font-smoothing: antialiased; - display: inline-block; - vertical-align: middle; - text-align: center; - } -} - -.iconAfter(@content: '', @size: 16px, @margin: 0, @font: 'icons') { - &:after { - font-family: "@{font}"; - font-size: @size; - line-height: @size; - height: @size; - margin: @margin; - overflow: hidden; - content: @content; - font-style: normal; - speak: none; - font-weight: normal; - -webkit-font-smoothing: antialiased; - display: inline-block; - vertical-align: middle; - text-align: center; - } -} - -.iconHideText(@limitWidth: 16px) { - width: @limitWidth; - display: block; - line-height: 0; - white-space: nowrap; - vertical-align: middle; - text-align: center; - text-indent: -999em; - &:active { - outline: 0; - } - &:after { - text-indent: 0; - display: block; - margin: 0; - } -} - -.iconShowText() { - text-indent: 0; - line-height:inherit; - height:inherit; -} - -.iconRemove(@position: 'after') when (@position = 'after') { - &:after { - display: none; - } -} - -.iconRemove(@position: 'after') when (@position = 'before') { - &:before { - display: none; - } -} - -/* - Responsive --------------------------------------- */ - -.mobileAction { - .box-sizing(); - display: block; - margin: 0 auto 15px; - padding: 10px; - width: 100%; - max-width: 100%; - line-height: 1; - float: none; - text-align: center; - text-decoration: none; - text-transform: uppercase; - border: none; - span { - font-size: 18px; - } -} - -.mobilePrimaryAction { - .mobileAction(); - background-color: @primaryActionBg; - color: @primaryActionColor; -} - -.mobileSecondaryAction { - .mobileAction(); - background-color: @secondaryActionBg; - color: @secondaryActionColor; -} - -.formResponsive() { - .fieldset { - width: 100%; - padding: 20px; - margin: 0 -20px; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - .legend { - margin: 0; - padding: 0 0 10px 0; - background: transparent; - } - > .field { - width: 100%; - display: block; - padding-right: 0; - } - } - .action.save, - .action.submit, - .action.add { - .mobilePrimaryAction(); - } - .actions { - width: 100%; - margin-top: 15px; - .primary { - float: none; - } - .secondary { - margin: 15px 0 0; - float: none; - text-align: center; - } - } - .fieldset.create.account { - &:after { - content: attr(data-hasrequired); - position: relative; - } - } -} \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/css/source/responsive/responsive.less b/app/design/frontend/Magento/plushe/css/source/responsive/responsive.less deleted file mode 100644 index 14e6642f56e..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/responsive/responsive.less +++ /dev/null @@ -1,2378 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -///* Smartphones (portrait and landscape) ----------- */ -//@media only screen -//and (min-device-width : 320px) -//and (max-device-width : 480px) { -///* Styles */ -//} -// -///* Smartphones (landscape) ----------- */ -//@media only screen -//and (min-width : 321px) { -///* Styles */ -//} -// -///* Smartphones (portrait) ----------- */ -//@media only screen -//and (max-width : 320px) { -///* Styles */ -//} -// -///* iPads (portrait and landscape) ----------- */ -//@media only screen -//and (min-device-width : 768px) -//and (max-device-width : 1024px) { -///* Styles */ -//} -// -///* iPads (landscape) ----------- */ -//@media only screen -//and (min-device-width : 768px) -//and (max-device-width : 1024px) -//and (orientation : landscape) { -///* Styles */ -//} -// -///* iPads (portrait) ----------- */ -//@media only screen -//and (min-device-width : 768px) -//and (max-device-width : 1024px) -//and (orientation : portrait) { -///* Styles */ -//} -// -///* Desktops and laptops ----------- */ -//@media only screen -//and (min-width : 1224px) { -///* Styles */ -//} -// -///* Large screens ----------- */ -//@media only screen -//and (min-width : 1824px) { -///* Styles */ -//} -// -///* iPhone 4 ----------- */ -//@media -//only screen and (-webkit-min-device-pixel-ratio : 1.5), -//only screen and (min-device-pixel-ratio : 1.5) { -///* Styles */ -//} - -/* Smartphones (portrait) ----------- */ -@media only screen -and (max-width : @breakPoint1) { - .scrollTable { - .wrapper.table { - overflow-x: auto; - } - } - - html { - height: 100%; - } - - body { - padding-top: 0 !important; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - } - - html, - .columns, - .footer > .content, - .page.main > .page.title, - .page.messages { - min-width: 0; - } - - .columns, - .page.main > .page.title, - .page.messages { - padding-left: 20px; - padding-right: 20px; - } - - .column.main { - min-height: 0; - } - - .column.left { - padding-right: 0; - } - - .column.right { - padding-left: 0; - } - - .layout-1 .column.main { - float: none; - display: block; - } - - .layout-2-left { - .column.main { - float: none !important; - width: 100%; - display: block; - } - .column.left { - float: none; - width: 100%; - display: block; - } - } - - .layout-2-right { - .column.main { - float: none; - width: 100%; - display: block; - } - .column.right { - float: none; - width: 100%; - display: block; - } - } - - .layout-3 { - .column.main { - width: 100%; - float: none !important; - display: block !important; - } - .column.left { - float: none; - width: 100%; - display: block; - } - .column.right { - float: none !important; - display: block !important; - width: 100%; - } - } - - .column.main .block, - .sidebar .block { - > .title { - strong { - font-weight: 400; - font-size: 20px; - } - } - } - - .notice.global.site { - position: static; - } - - .outer.wrapper { - overflow: hidden; - position: relative; - } - - .active-nav { - height: 100%; - .outer.wrapper { - height: 100%; - width: 100%; - } - } - - .products.wrapper .products.list { - .item { - .product.actions { - opacity: 1; - visibility: visible; - .action.tocart, - .secondary { - visibility: visible; - width: 100%; - } - .action.tocart { - padding: 10px 11px - } - .primary { - margin: 12px 0; - } - } - .secondary { - margin-left: 0; - border: none; - .box-sizing(); - position: static; - .action { - width: 100%; - padding: 10px 0; - display: block; - } - } - &:hover { - border: 1px solid transparent; - background: transparent; - } - } - } - - .search.results, - .category.view { - .toolbar { - .pager { - display: none; - .pages { - > ol { - line-height: 33px; - a, - strong { - padding: 0 5px; - } - } - } - } - .sorter, - .limiter { - select { - padding: 5px 10px 4px; - } - } - .modes { - float: right; - margin-right: 0; - margin-left: 0; - .mode { - span { - width: 18px; - &:after { - font-size: 18px; - width: 18px; - height: 18px; - line-height: 18px; - } - } - &.grid { - .iconAfter(@icon-grid, 18px, 0, "icons"); - .iconHideText(18px); - display: inline-block; - } - &.list { - .iconAfter(@icon-list, 18px, 0, "icons"); - .iconHideText(18px); - display: inline-block; - } - } - } - } - .toolbar.bottom .toolbar { - .pager { - display: block; - } - .settings { - display: none; - } - } - .products.wrapper.grid .products.list .item.product { - width: 50%; - .box-sizing(); - .secondary { - background: transparent; - } - } - .products.wrapper.list .products.list .item.product { - .product.photo { - float: none; - } - .product.details { - display: block; - padding: 15px 0 0; - text-align: center; - .product.name { - font-size: 18px; - } - .price-box { - font-size: 16px; - } - } - } - .product.photo { - .img.photo.container { - position: static !important; - width: auto !important; - height: auto !important; - img { - position: static !important; - width: auto !important; - height: auto !important; - } - } - } - } - - img { - max-width: 100%; - } - - .page.wrapper { - width: 100%; - float: right; - position: relative; - @tparams: margin .3s ease-out 0; - .transition(@tparams); - .active-nav & { - margin-right: -86%; - } - .navigation + .widget.static.block, - .breadcrumbs + .widget.static.block { - margin: 50px 0 0; - } - & + .widget.static.block { - display: none; - } - } - - // Header - .page.header { - padding: 0; - position: relative; - margin-bottom: 35px; - .switcher, - .links, - .panel { - display: none; - } - .content { - position: relative; - min-width: 0; - max-width: 100%; - padding: 0; - } - .logo { - float: none; - width: 100%; - text-align: center; - padding: 10px 0; - } - .block.search { - display: block; - height: 35px; - padding: 0; - margin: 15px -15px 0 0; - float: none; - text-align: left; - position: relative; - z-index: 13; - position: absolute; - top: 100%; - left: 0; - right: 65px; - .content { - padding-left: 65px; - } - .field { - float: none; - } - .label { - display: inline-block; - width: 32px; - height: 32px; - position: absolute; - top: 0; - left: 60px; - text-indent: -9999px; - z-index: 1; - } - .control { - width: auto; - float: none; - .input-text { - width: 0; - margin-right: 0; - height: 35px; - padding: 0; - margin-right: 32px; - border: 1px solid transparent; - box-sizing: content-box; - text-indent: 10px; - @tparams: all .3s linear 0; - .transition(@tparams); - &:focus { - margin-right: 0; - width: 100%; - padding: 0 38px 0 0; - border-color: @primary3; - } - } - } - .actions { - margin-left: -105px; - position: relative; - left: 65px; - .action.search { - background: none; - border: none; - span { - .iconAfter(@icon-magnifying-glass, 22px, 0, "icons"); - color: @primary6; - .iconHideText(22px); - &:after { - height: 24px; - line-height: 24px; - } - } - } - } - .search.autocomplete { - top: 35px !important; - width: 100% !important; - border: none; - } - } - .minicart.wrapper { - position: absolute; - top: 100%; - right: 20px; - margin: 15px 0 0; - .action.showcart { - z-index: 1; - margin: 0; - color: @primary5; - } - .block.minicart { - display: none; - } - } - .widget.static.block { - display: none; - } - } - - // Toggle Nav - .action.toggle.nav { - display: block; - margin-top: 19px; - position: absolute; - top: 100%; - left: 20px; - font-size: 0; - z-index: 14; - .iconAfter(@icon-menu, 32px, 0, "icons"); - .iconHideText(32px); - cursor: pointer; - &:before { - position: absolute; - width: 100%; - height: 100%; - left: -100%; - top: -20px; - padding: 20px 0; - content: ""; - } - .active-nav &:before { - position: fixed; - padding: 0; - left: 86%; - right: 0; - top: 0; - bottom: 0; - } - } - - // Breadcrumbs - .breadcrumbs { - display: none; - } - - // Footer - .footer { - padding: 30px 0; - > .content { - padding: 0 20px; - } - .block.newsletter { - width: 100%; - float: none; - margin-bottom: 30px; - } - .links { - width: 45%; - margin: 0 5% 0 0; - float: left; - - & ul > li { - margin-bottom: 12px; - } - li { - display: block; - margin-bottom: 12px; - &:after { - content: ''; - } - a { - font-size: 16px; - } - } - & + .links li:first-child:before { - content: ''; - } - } - .copyright { - padding-top: 20px; - clear: both; - font-size: 12px; - color: @primary3; - } - } - - // * - // * Mage_Checkout - // * - // * Shopping Cart - // ----------------------------------------------------------------------------- */ - .checkout-cart-index { - .page.main > .page.title { - margin: 0 0 15px; - padding: 0; - h1 { - border-top: 2px solid @primary2; - display: block; - margin: 0 10px; - padding: 17px 0 0; - span { - font-size: 36px; - } - } - .checkout.methods.items { - display: block; - padding: 12px 10px; - } - } - .checkout.methods.items { - background: @primary1; - margin: 15px 0 0; - padding: 0; - text-align: center; - > .item { - background: @commonBg; - margin: 0; - padding: 0 10px 20px; - &:first-child { - padding-top: 20px; - } - } - .action { - float: none; - } - .checkout.paypal.after:after { - line-height: 1; - } - } - - // PayPal retina button - .paypal.checkout.paypal-logo { - background: @paypalRetinaButton no-repeat 50% 50%; - background-size: 100%; - max-width: 255px; - width: 100%; - input { - opacity: 0; - width: 100%; - } - } - - .action.checkout { - .mobilePrimaryAction(); - } - - // Cross-sell block - .block.crosssell { - border: 0; - padding: 0; - .content { - overflow-x: scroll; - } - .products.list.items.crosssell { - margin: 0; - white-space: nowrap; - .item.product { - display: inline-block; - float: none; - margin: 0 0 10px; - width: 43%; - .product { - white-space: normal; - .actions { - display: none; - } - } - .img.photo.container { - max-width: 100%; - } - } - } - } - } - - .cart { - // Main actions - &.main.actions { - text-align: center; - .clearfix(); - .action { - &.update { - .mobileSecondaryAction(); - margin-top: 15px; - } - &.continue { - position: relative; - top: 0; - } - &.clear { - display: none; - } - } - } - - &.table.wrapper, - &.summary { - float: none; - width: auto; - } - - // Summary block - &.summary { - position: static; - display: block; - margin-left: -10px; - margin-right: -10px; - padding: 14px 10px; - .summary.title { - font-size: 22px; - padding-left: 12px; - } - .block { - font-size: 16px; - > .title { - padding: 10px 12px; - strong { - font-size: 18px; - &:after { - font-size: 26px; - } - } - } - .items.methods { - dd { - margin-bottom: 10px; - } - } - .fieldset { - font-size: 14px; - } - input, - select, - .action span { - font-size: 16px; - } - } - } - - &.table.wrapper.detailed + .cart.summary { - margin-top: 0; - } - - &.totals { - padding: 38px 10px 10px; - td, - th { - padding: 8px 0 8px 5px; - } - .mark { - padding-left: 9px; - } - .amount { - padding-right: 3px; - } - .mark, - .amount, - td:first-child strong { - font-size: 18px; - line-height: 30px; - vertical-align: bottom; - } - td:not(:first-child) strong { - font-size: 30px; - vertical-align: bottom; - } - } - - // Cart products table - &.table.wrapper { - thead { - display: none; - } - .product.photo { - max-width: 60px; - position: absolute; - left: 0; - top: 25px; - span, - img { - max-width: 60px; - max-height: 60px; - } - } - - .col { - &.item { - display: block; - padding: 25px 80px 10px 70px; - position: relative; - min-height: 60px; - .product.name { - font-size: 18px; - margin: 0 0 10px; - } - dl { - margin: 0; - padding-bottom: 12px; - clear: both; - dt, - dd { - line-height: 1.1; - } - dd { - margin-bottom: 12px; - margin-left: 0; - } - } - - } - &.price, - &.subtotal { - display: block; - padding: 0 20px 5px 70px; - text-align: left; - &:before { - content: attr(data-label); - display: inline-block; - margin-right: 7px; - min-width: 65px; - } - span:before { - content: attr(data-label); - display: inline-block; - font-size: 12px; - margin-right: 7px; - } - } - &.price { - margin-top: -30px; - } - &.price.excl.tax + .col.price.incl.tax { - &:before { - visibility: hidden; - } - } - - &.subtotal.excl.tax + .col.subtotal.incl.tax { - &:before { - visibility: hidden; - } - } - - &.qty { - display: block; - position: absolute; - top: 15px; - right: 5px; - &:before { - content: attr(data-label); - display: inline-block; - font-size: 14px; - margin-bottom: 7px; - text-transform: uppercase; - } - + .col.subtotal { - padding-top: 8px; - padding-left: 70px; - } - input { - font-size: 16px; - } - } - } - - .item.info { - .clearfix(); - display: block; - position: relative; - font-size: 16px; - } - - .item.actions { - border-bottom: 1px solid @primary2; - td { - padding-bottom: 20px; - padding-top: 12px; - &:before { - display: none; - } - .action { - margin-left: 25px; - } - } - div.actions { - padding: 0; - } - .action.delete span:after { - margin-top: -2px; - } - } - - .items.data { - tbody:nth-child(2n) tr { - background: @commonBg; - } - } - } - } - - // * - // * Mage_Checkout - // * - // * One page Checkout - // ----------------------------------------------------------------------------- */ - - // Checkout progress block - .opc.wrapper { - float: none; - margin: 0 -18px; - width: auto; - - // Step title - > .opc .section { - > .step-title { - padding: 20px; - h2 { - font-size: 22px; - } - } - - &.allow > .step-title h2:after { - display: none; - } - } - - // Forms - .form:not(.login) { - font-size: 16px; - &:after { - display: none; - } - - .fieldset > .field { - display: block; - padding: 0; - width: 100%; - } - - input, - select, - textarea { - font-size: 16px; - } - - .field { - &.fullname + .field.company, - &.name-lastname + .field.company, - &.country, - &.taxvat { - margin: 0 0 10px; - } - .nested { - padding: 0; - .field { - margin-bottom: 0; - } - } - } - - .actions { - margin: 40px 0 10px; - position: relative; - text-align: center; - .action { - &.continue { - float: none; - padding: 18px 0 16px; - width: 90%; - span { - font-size: 24px; - line-height: 26px; - } - } - &.back span:before { - display: none; - } - } - .secondary { - clear: none; - float: none; - padding-top: 27px; - text-align: center; - } - } - - .choice input { - margin-top: 3px; - } - } - - // Gift messages - .gift.message { - dd { - margin-left: 0; - &.options.individual .product { - float: none; - } - } - } - - .gift-messages { - h3 { - font-size: 16px; - } - &-form { - ol, - ul { - list-style: none; - margin: 0; - padding: 0; - } - .item { - margin: 0 0 30px; - position: relative; - .details input, - .details textarea { - width: 100%; - } - .field:last-child { - margin-bottom: 10px; - } - } - .product-img-box { - position: absolute; - width: 60px; - left: 0; - top: 0; - p { - margin: 0 0 10px; - } - img { - max-height: 60px; - max-width: 60px; - } - } - .product-name { - font-size: 18px; - font-weight: 600; - margin: 0 0 10px; - } - .details { - padding-left: 70px; - } - } - } - - // Payment methods - .items.methods.payment { - dt { - font-weight: normal; - margin: 0 0 10px; - } - dd { - margin: 0; - padding: 0; - > ul { - list-style: none; - margin: 0; - padding: 5px 10px 15px 20px; - > li { - margin: 5px 0 0; - } - label { - display: block; - em { - display: none; - } - &.required:after { - color: @secondary1; - content: "*"; - } - } - .input-box > input, - .input-box > select { - width: 100%; - } - .v-fix { - display: inline-block; - } - } - } - } - - // Order review table - .order-review { - font-size: 16px; - .review.table.wrapper { - margin-bottom: 10px; - } - .order.review.data { - th, - td { - padding-left: 0; - padding-right: 5px; - text-align: left; - &.qty { - text-align: center; - } - } - } - th.col.item, - th.col.price, - th.col.subtotal { - white-space: nowrap; - } - th.excl.tax span, - th.col.incl.tax span { - font-size: 12px; - } - } - - .grand.total { - display: block; - .clearfix(); - .mark { - font-size: 16px; - white-space: nowrap; - } - .amount { - padding: 0; - } - } - - .checkout.submit.order .actions .primary { - float: none; - } - - .order-review .actions { - text-align: center; - .secondary { - float: none; - margin: 30px 0 0; - } - .action.checkout { - float: none; - padding: 18px 0 16px; - width: 90%; - span { - font-size: 24px; - line-height: 26px; - } - } - &.back span:before { - display: none; - } - } - - // Load indicator -// .load.indicator { -///* left: 0; -// position: absolute; -// top: 10px; -// width: 100%;*/ -// } - } - - // Your Checkout Progress block - .block.progress.onepage { - background: @primary1; - border-top: 1px solid @primary2; - border-bottom: 1px solid @primary2; - float: none; - margin: 35px -18px 0; - width: auto; - > .title { - margin: 0; - padding: 11px 22px; - position: relative; - cursor: pointer; - strong { - font-size: 18px; - font-weight: 600; - } - &:before { - content: @icon-expand-mobile; - font-family: Arial, sans-serif; - font-weight: 400; - font-size: 30px; - position: absolute; - right: 20px; - top: 2px; - } - &.active:before { - top: 1px; - content: @icon-collapse-mobile; - } - } - > .content { - background: @commonBg; - display: none; - margin: 0 10px 10px; - padding: 10px; - } - dl { - margin: 0; - } - dt { - font-size: 20px; - font-weight: 200; - > a { - font-weight: 400; - font-size: 14px; - margin-left: 20px; - text-decoration: underline; - } - } - dd, - .complete .payment .title { - font-size: 16px; - line-height: 1.4; - font-weight: 400; - &:last-child { - margin: 0; - } - } - .separator { - display: none; - } - } - - // Header checkout progress button - .action.toggle.checkout.progress { - background: none; - cursor: pointer; - display: block; - float: right; - height: auto; - margin: -52px 18px 0 0; - padding: 0; - overflow: hidden; - width: auto; - } - - // Checkout login - .step.login.wrapper { - padding: 0 0 20px; - .block { - float: none; - font-size: 16px; - width: 100%; - &.guest { - margin: 0; - padding: 0; - &:before { - display: none; - } - .actions { - margin-left: 0; - } - } - } - .actions { - padding: 20px 0 0; - position: relative; - text-align: center; - width: 100%; - .secondary { - font-size: 14px; - margin: 15px 0 0; - } - .action { - &.login, - &.continue { - width: 100%; - span { - font-size: 18px; - } - } - } - } - } - - /* - Magento_Checkout - Multishipping - -------------------------------------- */ - - .multicheckout { - &.progress { - width: 100%; - float: none; - li { - display: block; - padding: 10px 20px; - text-decoration: none; - font-size: 20px; - font-weight: 600; - border-bottom: 1px solid @primary2; - color: @primary6; - &.active { - color: @secondary1; - } - } - + .form.address.edit { - float: none; - width: 100%; - } - } - &.form.address, - &.form.billing, - &.form.shipping, - &.form.overview, - &.success, - &.change.billing { - float: none; - width: 100%; - } - &.form.address { - .col.address select { - max-width: 100%; - } - .items.data { - display: block; - width: 100%; - thead { - display: none; - } - tbody { - display: block; - width: 100%; - } - tr, - td { - display: block; - width: 100%; - .box-sizing(); - } - .col.product { - .product.name { - font-size: 18px; - } - } - .col.delete { - border-bottom: 1px solid @primary2; - padding-bottom: 10px; - margin-bottom: 20px; - } - .col.qty { - text-align: left; - padding-top: 0; - } - } - } - .actions { - .action { - width: 100%; - display: block; - float: none; - text-align: center; - margin-bottom: 10px; - } - } - .title, - .subtitle { - .action { - .mobilePrimaryAction(); - } - } - > .block.shipping, - &.overview > .block.billing { - .box { - &.address { - float: none; - width: 100%; - } - &.method { - float: none; - width: 100%; - } - &.items { - overflow-x: scroll; - } - } - } - } - - // Login page - - .customer-account-login { - .page.title { - display: none; - } - } - - .login.container { - padding: 20px; - margin: 0 -20px; - .block { - float: none; - width: 100%; - > .title { - margin-bottom: 15px; - } - .actions { - position: static; - text-align: center; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - .secondary { - float: none; - margin: 15px 0 0; - } - } - &.login { - padding: 0; - .actions { - margin: 20px 0 0; - } - } - &.new { - padding: 0; - .actions { - margin: 20px 0 0; - } - } - } - .action.login, - .action.create { - .mobilePrimaryAction(); - } - } - - .form.login { - .fieldset.login { - .field { - .label { - padding: 0 0 5px 0; - display: block; - width: 100%; - float: none; - font-size: 16px; - text-align: left; - } - .control { - width: 100%; - } - } - } - } - - /* - Forms - -------------------------------------- */ - .form.send.friend, - .form.address.edit, - .form.edit.account, - .form.search.advanced, - .form.orders.search, - .form.contact, - .form.password.forget, - .form.create.account, - .form.wishlist.share, - .form.password.reset, - .form.add.tag, - .form.paypal.review { - .formResponsive(); - } - - .form.search.advanced, - .form.orders.search, - .form.contact { - padding: 20px; - margin: 0 -20px; - .actions { - padding-right: 0; - margin-top: 20px; - text-align: center; - } - .action { - .mobilePrimaryAction(); - } - .fields.range { - display: table; - width: 100%; - > .field { - display: table-cell; - width: 50%; - } - } - } - - .form.contact { - .fieldset { - .field { - &.comment { - width: 100%; - margin-left: 0; - } - } - } - } - - .form.send.friend { - .fieldset.recipients { - .actions .primary { - float: none; - } - } - } - - /* - Mage_Customer - Account - ----------------------------------------------------------------------------- */ - .layout-2-left.account { - .column.main { - display: block; - width: 100%; - float: none; - } - .column.left { - border-top: 4px solid @primary2; - display: block; - width: 100%; - float: none; - margin-top: 20px; - padding-top: 20px; - } - } - - .sales-order-history, - .review-customer-index, - .sales-order-view, - .sales-order-invoice, - .adminhtml-order-shipment, - .sales-order-creditmemo, - .checkout-onepage-index .order-review, - .downloadable-customer-products, - .form.wishlist.items, - .block.dashboard.orders, - .block.billing.agreements { - &:extend(.scrollTable all); - } - - .accountActions { - .primary, - .secondary { - float: none; - } - .primary { - .action { - .mobilePrimaryAction(); - } - } - .secondary { - margin-bottom: 15px; - .action.back { - display: block; - float: none; - text-align: center; - } - } - } - - .account { - .column.main { - .my-account, - .block, - .form { - .actions { - &:extend(.accountActions all); - } - } - > .actions { - &:extend(.accountActions all); - } - } - > .block, - .my-account > .block { - margin-bottom: 20px; - } - } - - .billing-agreements > .actions, - .recurring-payments .buttons-set { - text-align: center; - margin-bottom: 20px; - } - - // Account navigation - .block.account.nav { - .content { - margin: 0 -20px; - .items { - > li { - margin-bottom: 0; - a, - strong { - display: block; - padding: 10px 20px; - text-decoration: none; - font-size: 20px; - font-weight: 600; - border-bottom: 1px solid @primary2; - color: @primary6; - } - &.current strong { - color: @secondary1; - } - } - } - } - } - - // Toggle account navigation - .page.title { - .toggle.accountnav { - padding-top: 12px; - font-size: 16px; - background: transparent; - cursor: pointer; - } - > .action { - .mobilePrimaryAction(); - } - } - - .block.dashboard { - .box { - float: none; - width: 100%; - margin-bottom: 15px; - } - .recent.orders { - .col.shipping { - display: none; - } - } - } - - .block.dashboard:not(.welcome):not(.orders) { - .content { - padding: 20px; - margin: 0 -20px; - } - .subtitle { - margin-bottom: 10px; - } - } - - .data.table.orders { - margin: 0 -8px; - td, - th { - padding: 10px 8px; - &.col.actions { - .action { - display: block; - &:last-child { - margin-right: 0; - } - } - } - } - .col.shipping { - display: none; - } - } - - /* - Address book - -------------------------------------- */ - - .block.addresses:not(.dashboard) { - margin-bottom: 20px; - .content { - padding: 20px; - margin: 0 -20px; - } - &.default { - float: none; - width: 100%; - } - &.list { - float: none; - width: 100%; - } - } - - .form.newsletter { - .action.save { - .mobilePrimaryAction(); - } - } - - .account { - .column.main { - .tags.items.cloud { - .item { - font-size: 18px; - } - } - } - } - - /* - My Account -> Billing agreements - -------------------------------------- */ - .billing.agreements { - .form.new.agreement { - .formCols(100%); - .action.create { - width: 100%; - padding-top: 7px; - padding-bottom: 6px; - } - } - } - - - /* - My Account -> Wishlist - -------------------------------------- */ - .account { - .form.wishlist.items { - .data.table.wishlist { - margin-bottom: 0; - thead { - display: none; - } - textarea { - width: 15em; - } - } - } - } - - /* - My Account -> My orders - ----------------------------------------------------------------------------- */ - - .order.details { - .order.toolbar { - clear: both; - float: none; - .action { - margin: 0 0 10px; - display: block; - font-size: 18px; - } - } - .block.order { - float: none; - width: 100%; - padding: 0; - .content { - padding: 20px; - margin: 0 -20px; - } - } - .order.info { - > dt { - margin-bottom: 15px; - } - > dd { - padding: 0; - background: @primary7; - margin: 0 -20px; - .items { - .item { - float: none; - margin-right: 0; - a, strong { - display: block; - padding: 10px 20px; - text-decoration: none; - font-size: 20px; - font-weight: 600; - border-bottom: 1px solid @primary2; - color: @primary6; - } - strong { - color: @secondary1; - } - } - } - } - } - .subtitle.caption { - margin-bottom: 20px; - } - .additional.details { - .order.comments { - padding: 20px; - margin: 0 -20px 20px; - } - } - > .actions { - margin-bottom: 20px; - } - .wrapper.table { - margin-bottom: 45px; - .data.table.order { - margin-bottom: 0; - } - } - } - - // Widgets - .widget.static.block { - margin-bottom: 15px; - } - - /* Product Page */ - .layout-1 { - .columns { - padding-left: 18px; - padding-right: 18px; - } - .column.main { - float: none; - } - } - - .product.info.main, - .product.photo.main, - .product.media, - .product.data, - .box.tocart .field, - .box.tocart .actions, - .product.photo.thumbs { - float: none; - width: auto; - max-width: 100%; - } - - .product.photo.thumbs { - padding: 0; - overflow-x: auto; - white-space: nowrap; - -webkit-overflow-scrolling: touch; - .item.thumb { - display: inline-block; - margin-right: 5px; - position: relative; - vertical-align: bottom; - white-space: normal; - span { - height: auto !important; - width: 100% !important; - max-width: 100%; - img { - border: 2px solid transparent; - position: static; - height: auto !important; - width: 100% !important; - max-width: 100%; - } - } - .active { - img { - border: 2px solid #ff9600; - } - } - } - } - - .box.tocart .actions { - text-align: center; - } - - .product.data { - display: block; - > .item.content { - &:before { - display: none; - } - } - } - - .product.photo .notice { - display: none; - } - - .product.info.additional { - .page.title.product { - margin-bottom: 10px; - } - .stock { - margin: 15px 0; - } - } - - .product.info.main { - &.responsive { - .page.title, - .stock:not(.alert) { - display: none; - } - } - .price-box { - border: none !important; - margin: 0; - } - .prices.tier { - clear: both; - } - .product.alert { - margin: 10px 0; - } - .product.attibute.sku { - margin-bottom: 10px; - } - .product.add.form { - clear: both; - .actions { - margin-right: 0; - .action.primary.customize, - .action.primary.tocart { - max-width: 400px; - padding: 18px 10px 14px; - width: 100%; - } - } - } - .type-configurable & { - select { - width: 99.5% !important; - } - } - .product.social.links { - border-top: 1px solid @primary2; - padding: 10px 0; - float: none; - text-align: right; - .action.mailto { - display: inline-block; - span { - .iconAfter(@icon-envelope, 24px, 0, "icons"); - .iconHideText(24px); - color: @primary3; - } - } - } - .actions.bundle { - clear: both; - text-align: center; - .action.primary.customize { - margin: 24px 0; - max-width: 400px; - padding: 18px 10px 14px; - width: 100%; - } - } - .price-box { - .price-excluding-tax, - .price-including-tax { - display: block; - } - } - .product.addto.links { - display: inline-block; - font-size: 18px; - border: none; - margin: 0; - padding: 10px; - position: absolute; - vertical-align: top; - .action.towishlist { - font-size: 16px; - } - .action.tocompare { - display: none; - } - } - - .table.data.grouped { - width: 100%; - clear: both; - } - } - - .catalog-product-view .column.main { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - .product.info.additional, - .product.media { - -webkit-order: -1; - -ms-flex-order: -1; - order: -1; - } - } - - .product.media { - .img.photo.container { - height: auto !important; - width: auto !important; - > img { - position: static !important; - height: auto !important; - width: auto !important; - max-width: 100%; - } - } - &:before { - content: attr(data-title); - color: @primary5; - display: block; - font-size: 30px; - font-weight: 200; - line-height: 1.2; - margin-bottom: 30px; - } - } - - .product.info.detailed { - background: @primary1; - border-bottom: 1px solid @primary2; - margin: 0 -18px; - .product.data > .item.title { - float: none; - margin: 0; - position: relative; - .switch { - background: @primary1; - border: none; - border-top: 1px solid @primary2; - font-size: 18px; - color: @primary6; - border-radius: 0; - padding: 11px 18px; - position: static; - text-transform: none; - } - &:before { - content: @icon-expand; - display: block; - font-family: "icons"; - font-size: 15px; - position: absolute; - top: 11px; - right: 18px; - } - &.active { - .switch { - padding: 11px 18px !important; - } - &:before { - content: @icon-collapse; - } - } - } - .product.data > .item.content { - color: @primary6; - font-size: 18px; - float: none; - margin: 0 10px 10px; - padding: 10px 18px; - width: auto; - &.active { - background: #fff; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .1); - box-shadow: 0 1px 1px rgba(0, 0, 0, .1); - &+.item.title { - .switch { - border-top: none; - } - } - } - &:last-child { - border-bottom: 1px solid @primary2; - } - .product.attributes th { - font-size: 18px; - padding: 26px 10px 10px; - } - } - .block.add.review { - background: none; - .fieldset > .legend { - border: none; - margin: 0; - strong { - display: block; - font-size: 18px; - line-height: 1.2; - margin: 0; - } - } - .actions, - .field:not(.ratings) { - width: 100%; - } - .action.submit { - .mobilePrimaryAction(); - margin-bottom: 10px; - } - } - .block.reviews.list { - margin-left: 0; - } - } - - .block.add.review { - margin: 0; - padding: 0; - } - - .block.product.tags { - margin-bottom: 0; - .title { - display: none; - } - .field { - .note { - font-size: 12px; - padding-left: 0; - &:before { - display: none; - } - } - } - } - - .column.main .block.widget.viewed, - .column.main .block.crosssell, - .column.main .block.upsell, - .column.main .block.related, - .column.main .block.widget.new, - .column.main .block.widget.compared { - border: none; - padding: 0; - .item.product { - .product.photo { - span { - height: auto !important; - width: auto !important; - img { - position: static !important; - height: auto; - width: auto; - max-width: 100%; - } - } - } - .actions { - display: none; - } - &:hover { - .actions { - visibility: hidden; - } - } - } - .content { - overflow-x: auto; - margin: 0 -18px; - white-space: nowrap; - -webkit-overflow-scrolling: touch; - } - .products.list { - margin: 0; - .item.product { - white-space: normal; - .product.photo { - display: block; - float: none; - margin: 0 0 10px; - } - width: 40% !important; - } - } - } - - .block.related { - .actions { - display: none; - } - } - - .box.tocart { - .checkout.paypal { - display: block; - &.after { - &:before { - display: block; - } - } - &.before { - &:before { - display: block; - } - } - } - } - - .product.info.detailed + .block.upsell, - .product.info.detailed + .block.related { - margin-top: 30px; - clear: none; - float: none; - width: auto; - border-top: 0; - padding-top: 0; - padding-left: 0; - border-left: 0; - .products.list { - margin: 0; - .item.product { - display: inline-block; - width: 40%; - padding: 20px; - .product.photo { - float: none; - display: block; - margin: 0 0 10px; - } - } - } - } - - input[type="password"], - input[type="text"], - input[type="number"] { - font-size: 18px; - } - - .fieldset > .field > .label { - font-size: 18px; - font-weight: normal; - text-transform: none; - } - - .fieldset > .field .note { - padding-left: 0 !important; - margin: 5px; - &:before { - display: none; - } - } - - .bundle.options.container { - margin: 0; - padding: 0; - &:before { - display: none; - } - .product.add.form { - margin: 0 -18px; - padding: 20px 18px 280px; - } - .product.options.wrapper, - .product.options.bottom { - float: none; - width: auto; - > .fieldset { - margin-left: 0; - margin-right: 0; - } - } - .product.options.bottom { - .price-box { - display: none; - } - .action.back.customization { - color: @primary3; - .iconAfter(@icon-close-thick, 22px, 0, "icons"); - .iconHideText(22px); - top: 26px; - right: 18px; - } - } - p.required { - display: none; - } - } - - .block.bundle.summary { - background: @primary1; - margin: 0; - padding: 0 20px; - float: none; - position: absolute; - margin: -280px 0 0; - top: 100% !important; - width: 90%; - .box-sizing(); - .content { - padding: 0; - } - .bundle.summary, - .photo, - .title, - .product.name, - .available, - .addto { - display: none !important; - } - .price-box { - float: left; - width: 80%; - .price-label { - display: block; - float: none; - margin-bottom: 5px; - } - .price-excluding-tax { - margin-right: 10px; - } - .full-product-price { - float: none; - } - } - .box.tocart { - padding-bottom: 0; - border: none; - .control { - width: auto; - } - .field.qty { - .box-sizing(); - width: 18%; - float: right; - padding-right: 0; - } - input.qty { - height: 49px; - } - .actions { - clear: both; - margin-right: 0; - .action.primary.tocart { - padding: 18px 10px 14px; - width: 100%; - } - } - } - } - - .fieldset.bundle.options { - .legend { - margin-left: 0; - } - > .field { - margin: 0 0 20px; - .label { - display: inline-block; - font-size: 16px; - width: 90%; - } - input[type="checkbox"], - input[type="radio"] { - margin-top: 3px; - vertical-align: top; - } - > .label { - font-size: 22px; - } - } - } - - // * - // * Widgets - // * - // ----------------------------------------------------------------------------- */ - - // Recently Viewed - - .block.widget.viewed .content, - .block.crosssell .content, - .block.upsell .content, - .block.related .content, - .block.widget.new .content, - .block.widget.compared .content { - margin: 0; - } - - .block.widget.viewed, - .block.widget.new { - .minilist.products.items .item.product { - .product.details { - overflow: hidden; - padding: 0; - } - &:hover { - .product.actions { - visibility: hidden; - } - } - - } - } - - /* - Overlay popup - -------------------------------------- */ - .popup { - left: 0; - top: 5%; - margin: 0 auto; - width: 90%; - .actions { - .action.submit { - .mobilePrimaryAction(); - } - .action.cancel { - .mobileSecondaryAction(); - } - } - } - - /* - Magento_Catalog Compare - -------------------------------------- */ - .catalog-product-compare-index { - .action.print { - margin: -20px 0 20px; - } - } -} diff --git a/app/design/frontend/Magento/plushe/css/source/styles/base.less b/app/design/frontend/Magento/plushe/css/source/styles/base.less deleted file mode 100644 index 9e193368c96..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/styles/base.less +++ /dev/null @@ -1,427 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// #General reset -// For resetting default browser styles of standard html elements ClearLess library provides normalize or reset solution. Here we use **normalize**. It sets default parameters to certain values. -// -// **If the property of an element is not set directly in this document, it is inherited from normalize** (http://github.com/necolas/normalize.css) -// -// #General settings -// -// Applying custom font -// -// Setting font for html, body, button, input, select, textarea -// -// Reseting elements styles: nav ul, nav ol -// - -.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-200-normal-webfont", 200, normal, true ); -.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-200-normal-webfont", 200, normal, true ); -.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-400-normal-webfont", 400, normal, true ); -.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-600-normal-webfont", 600, normal, true ); -.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-700-normal-webfont", 700, normal, true ); -.font-face( "marvel", "@{baseDir}/fonts/marvel/marvel-400-normal-webfont", 400, normal, true ); - -.font-face( "icons", "@{baseDir}/fonts/icons/icons", 400, normal, true ); - -html, body, button, input, select, textarea { - font: @baseFontWeight @baseFontSize/@baseLineHeight @baseFont; - color: @baseColor; -} - -nav ul, nav ol { - .resetList(); -} - -// # Headings -// -// ```html -// <h1>Heading 1</h1> -// -// <h2>Heading 2</h2> -// -// <h3>Heading 3</h3> -// -// <h4>Heading 4</h4> -// -// <h5>Heading 5</h5> -// -// <h6>Heading 6</h6> -// ``` -// - -h1 { - color: @h1color; - font: @h1font; -} - -h2 { - color: @h2color; - font: @h2font; -} - -h3 { - color: @h3color; - font: @h3font; -} - -h4 { - color: @h4color; - font: @h4font; -} - -h5 { - color: @h5color; - font: @h5font; -} - -h6 { - color: @h6color; - font: @h6font; -} - -// #Links -// -// ```html -// <a href="#">Link</a> -// <a class=":visited" href="#">Visited link</a> -// <a class=":hover" href="#">Hovered link</a> -// <a class=":active" href="#">Active link</a> -// ``` -// - -a { - color: @link; - text-decoration: none; - &:visited { - color: @link; - } - &:hover, - &:active { - color: @linkHover; - } -} - -// #Inline markup -// -// #abbr -// -// ```html -// The <abbr>abbr element</abbr> and <abbr title="Title text">abbr element with title</abbr> examples -// ``` - - -// #b -// -// ```html -// The <b>b element</b> example -// ``` - -// #strong -// -// ```html -// The <strong>strong element</strong> example -// ``` - -// #em -// -// ```html -// The <em>em element</em> example -// ``` -// - -// #i -// -// ```html -// The <i>i element</i> example -// ``` -// - -// #cite -// -// ```html -// The <cite>cite element</cite> example -// ``` -// - -// #code -// -// ```html -// The <code>code element</code> example -// ``` -// - -// #del -// -// ```html -// The <del>del element</del> example -// ``` -// - -// #s -// -// ```html -// The <s>s element</s> example -// ``` -// - -// #img -// -// ```html -// The img element <img src="http://lorempixel.com/16/16/abstract" alt="example"> example -// ``` -// - -// #mark -// -// ```html -// The <mark>mark element</mark> example -// ``` -// - -// #q -// -// ```html -// The <q>q element <q>inside</q> a q element</q> example -// ``` -// - -q { - &:before { - content: "\201c"; - } - &:after { - content: "\201d"; - } - q { - &:before { - content: "\2018"; - } - &:after { - content: "\2019"; - } - } -} - -// #small -// -// ```html -// The <small>small element</small> example -// ``` -// - -// #sub -// -// ```html -// The <sub>subscript element</sub> example -// ``` -// - -// #sup -// -// ```html -// The <sup>superscript element</sup> example -// ``` -// - -// #u -// -// ```html -// The <u>u element</u> example -// ``` -// - -// #Paragraph -// -// ```html -// <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede.</p> -// <p>Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui.</p> -// ``` -// - -// #Ordered list -// -// ```html -// <ol> -// <li>Item 1</li> -// <li>Item 2</li> -// <li>Item 3 -// <ol> -// <li>Item 1</li> -// <li>Item 2</li> -// <li>Item 3</li> -// </ol> -// </li> -// <li>Item 4</li> -// </ol> -// ``` -// - -// #Unordered list -// -// ```html -// <ul> -// <li>Item 1</li> -// <li>Item 2</li> -// <li>Item 3 -// <ol> -// <li>Item 1</li> -// <li>Item 2</li> -// <li>Item 3</li> -// </ol> -// </li> -// <li>Item 4</li> -// </ul> -// ``` -// - -// #Descriptions -// -// ```html -// <dl> -// <dt>Title 1</dt> -// <dd>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper. Phasellus id massa. Pellentesque nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc augue. Aenean sed justo non leo vehicula laoreet. Praesent ipsum libero, auctor ac, tempus nec, tempor nec, justo.</dd> -// <dt>Title 2</dt> -// <dd>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper. Phasellus id massa. Pellentesque nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc augue. Aenean sed justo non leo vehicula laoreet. Praesent ipsum libero, auctor ac, tempus nec, tempor nec, justo.</dd> -// </dl> -// ``` -// - -// #Table -// -// ```html -// <table> -// <thead> -// <tr> -// <th>#</th> -// <th>Column 1</th> -// <th>Column 2</th> -// <th>Column 3</th> -// </tr> -// </thead> -// <tbody> -// <tr> -// <td>1</td> -// <td>Cell 4</td> -// <td>Cell 5</td> -// <td>Cell 6</td> -// </tr> -// <tr> -// <td>2</td> -// <td>Cell 7</td> -// <td>Cell 8</td> -// <td>Cell 9</td> -// </tr> -// <tr> -// <td>3</td> -// <td>Cell 10</td> -// <td>Cell 11</td> -// <td>Cell 12</td> -// </tr> -// <tr> -// <td>4</td> -// <td>Cell 13</td> -// <td>Cell 14</td> -// <td>Cell 15</td> -// </tr> -// <tr> -// <td>5</td> -// <td>Cell 16</td> -// <td>Cell 17</td> -// <td>Cell 18</td> -// </tr> -// </tbody> -// </table> -// ``` -// - -table { - th { - border-right: 1px solid @primary2; - font-size: @baseFontSizeBigger; - padding: 7px 10px; - &:last-child { - border-right: 0; - } - } - td { - border-right: 1px solid @primary2; - padding: 7px 10px; - vertical-align: top; - &:last-child { - border-right: 0; - } - } - tbody tr:nth-child(odd) td { - background: @primary1; - } -} - -// #Blockquote -// -// ```html -// <blockquote> -// <p>The cite element represents the title of a work (e.g. a book, a paper, an essay, a poem, a score, a song, a script, a film, a TV show, a game, a sculpture, a painting, a theatre production, a play, an opera, a musical, an exhibition, a legal case report, etc). This can be a work that is being quoted or referenced in detail (i.e. a citation), or it can just be a work that is mentioned in passing.</p> -// <p>A person's name is not the title of a work — even if people call that person a piece of work — and the element must therefore not be used to mark up people's names. (In some cases, the b element might be appropriate for names; e.g. in a gossip article where the names of famous people are keywords rendered with a different style to draw attention to them. In other cases, if an element is really needed, the span element can be used.)</p> -// <cite>http://www.w3.org/html/wg/drafts/html/master/text-level-semantics.html</cite> -// </blockquote> -// ``` -// - -blockquote { - margin: 10px 20px 10px 40px; - &:before { - color: @primary4; - content: "\201C"; - display: block; - font-family: Georgia, serif; - font-size: 60px; - font-style: italic; - position: absolute; - left: 15px; - top: 10px; - } - cite { - color: @primary4; - font-style: italic; - font-size: @baseFontSizeMiddle; - margin: 1em 0; - } -} - -// #HR -// -// ```html -// <hr> -// ``` -// - -hr { - background: @primary3; - border: 0; - color: @primary3; - height: 1px; - margin: 1em 0; -} diff --git a/app/design/frontend/Magento/plushe/css/source/styles/magento.less b/app/design/frontend/Magento/plushe/css/source/styles/magento.less deleted file mode 100644 index 976718629d9..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/styles/magento.less +++ /dev/null @@ -1,1549 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// #Mixins -// -// Common mixins used for styling magento elements -// - -.pagerLabel() { - font-weight: @baseFontWeight; - line-height: 25px; - margin-right: 5px; -} - -// #Search form -// -// ```html -// <div class="block search"> -// <div class="title"><strong>Search</strong></div> -// <div class="content search"> -// <form class="form minisearch"> -// <div class="field search"> -// <label for="search" class="label">Search</label> -// <div class="control"> -// <input type="text" class="input-text" placeholder="Search entire store here..." value="" name="q"> -// <a href="#" class="action advanced">Advanced Search</a> -// </div> -// </div> -// <div class="actions"> -// <button class="action search" type="submit"><span>Search</span></button> -// </div> -// </form> -// </div> -// </div> -// ``` -// - -.block.search { - input { - border-radius: 3px 0 0 3px; - border-right: 0; - float: left; - width: 100%; - &:focus + { - border-color: @primary3; - } - } - .field .control { - width: 260px; - } - .label, - > .title, - .action.advanced { - display: none; - } - .action.search { - background: @primary7; - border: 1px solid @primary3; - border-radius: 0 3px 3px 0; - color: @primary3; - float: left; - padding: 7px; - &:hover { - color: @primary6; - } - span { - .iconAfter(@icon-magnifying-glass, 16px, 0, 'icons'); - .iconHideText(16px); - } - .search.autocomplete { - display: none !important; - } - } - ::-webkit-input-placeholder { - color: @primary4; - } - :-moz-placeholder { - color: @primary4; - } - ::-moz-placeholder { - color: @primary4; - } - :-ms-input-placeholder { - color: @primary4; - } -} - -// #Newsletter sign up form -// -// ```html -// <div class="block newsletter"> -// <div class="title"><strong>Newsletter</strong></div> -// <div class="content"> -// <form> -// <div class="field newsletter"> -// <label for="newsletter" class="label">Sign Up for Our Newsletter:</label> -// <div class="control"> -// <input type="text" placeholder="Enter your email address" name="email"> -// </div> -// <div class="actions"> -// <button type="submit" title="Subscribe" class="action subscribe"> -// <span>Subscribe</span> -// </button> -// </div> -// </div> -// </form> -// </div> -// </div> -// ``` -// - -.block.newsletter { - > .title { - display: none; - } - .label { - display: block; - font-size: @baseFontSizeBigger; - line-height: 1.2; - margin-bottom: 10px; - } - .control { - .box-sizing(); - float: left; - padding-right: 45px; - width: 100%; - } - input[type="text"] { - width: 100%; - } - .actions { - float: right; - margin-left: -45px; - padding-left: 10px; - } - .action.subscribe { - .box-sizing(); - background: @primaryActionBg; - border-radius: 3px; - border: 1px solid @primaryActionBg; - padding: 7px; - vertical-align: top; - &:hover { - background: @primaryActionBgH; - } - span { - .iconAfter(@icon-envelope, 16px, 0, "icons"); - .iconHideText(16px); - color: @primary7; - } - } -} - -// #Mage Catalog -// -// #Breadcrumbs -// -// ```html -// <div class="breadcrumbs"> -// <ul class="items"> -// <li class="item"> -// <a href="#">Home</a> -// </li> -// <li class="item"> -// <a href="#">Level 1</a> -// </li> -// <li class="item"> -// <strong>Level 2</strong> -// </li> -// </ul> -// </div> -// ``` -// - -.breadcrumbs { - font-size: @baseFontSizeMiddle; - .items { - margin: 0; - padding: 0; - } - .item { - display: inline; - font-weight: @baseFontWeightLighter; - &:before { - content: " / "; - } - &:first-child:before { - content: ""; - } - } - strong { - font-weight: @baseFontWeight; - } -} - -// #Pager -// -// ```html -// <div class="pages"> -// <strong class="label">Page</strong> -// <ol class="items"> -// <li class="item"><a href="#" class="action previous"><span>Previous</span></a></li> -// <li class="item"><a href="#"><span>1</span></a></li> -// <li class="item current"><strong><span>2</span></strong></li> -// <li class="item"><a href="#"><span>3</span></a></li> -// <li class="item"><a title="Next" href="#" class="action next"><span>Next</span></a></li> -// </ol> -// </div> -// ``` -// - -.pages { - ol { - .resetList(); - } - .item { - display: inline-block; - } - a { - padding: 0 3px; - } - strong { - color: @secondary1; - font-weight: normal; - padding: 0 3px; - } - > .label { - display: none; - } - .action { - &.previous { - .iconAfter(@icon-arrow-left-thick, 16px, 0, "icons"); - .iconHideText(16px); - display: inline-block; - } - &.next { - .iconAfter(@icon-arrow-right-thick, 16px, 0, "icons"); - .iconHideText(16px); - display: inline-block; - } - color: @primary3; - &:hover { - color: darken(@primary3, 20%); - } - } -} - -// #View switcher -// -// ```html -// <div class="modes"> -// <strong class="label">View as</strong> -// <strong class="mode active grid"> -// <span>Grid</span> -// </strong> -// <a href="#" class="mode list"> -// <span>List</span> -// </a> -// <strong class="label">View as</strong> -// <a href="#" class="mode grid"> -// <span>Grid</span> -// </a> -// <strong class="mode active list"> -// <span>List</span> -// </strong> -// </div> -// ``` -// - -.modes { - .label { - display: none; - } - .mode { - border: 1px solid @primary3; - color: @primary3; - display: inline-block; - margin: 0 3px; - overflow: hidden; - padding: 4px; - &.active { - background: @primary3; - border-color: @primary3; - cursor: default; - color: @primary7; - span { - color: @primary7; - } - &:hover { - background: @primary3; - border-color: @primary3; - color: @primary7; - span { - color: @primary7; - } - } - } - &:hover { - background: @primary4; - border-color: @primary4; - color: @primary7; - span { - color: @primary7; - } - } - &.grid { - .iconAfter(@icon-grid, 13px, 0, "icons"); - .iconHideText(13px); - display: inline-block; - } - &.list { - .iconAfter(@icon-list, 13px, 0, "icons"); - .iconHideText(13px); - display: inline-block; - } - } -} - -// #"Sort by" switcher -// -// ```html -// <div class="sorter"> -// <label for="sorter" class="label">Sort By</label> -// <select data-mage-redirect="{'event':'change'}" id="sorter"> -// <option selected="selected" value="">Position</option> -// <option value="">Name</option> -// <option value="">Price</option> -// </select> -// <a class="action sort desc" title="Set Ascending Direction" href="#"> -// <span>Set Ascending Direction</span> -// </a> -// <a class="action sort asc" title="Set Descending Direction" href="#"> -// <span>Set Descending Direction</span> -// </a> -// </div> -// ``` -// - -.sorter { - .label { - .pagerLabel(); - } - select { - padding: 0; - } - .action.sort { - &.desc { - .iconAfter(@icon-arrow-down-thick, 13px, 0, "icons"); - .iconHideText(13px); - display: inline-block; - } - &.asc { - .iconAfter(@icon-arrow-up-thick, 13px, 0, "icons"); - .iconHideText(13px); - display: inline-block; - } - } -} - -// #Pager limiter -// -// ```html -// <div class="limiter"> -// <strong class="label">Show</strong> -// <select data-mage-redirect="{'event':'change'}" id="limiter"> -// <option selected="selected" value="">5</option> -// <option value="">10</option> -// <option value="">15</option> -// <option value="">All</option> -// </select> -// <span class="text">per page</span> -// </div> -// ``` -// - -.limiter { - .label { - .pagerLabel(); - } - select { - padding: 0; - } - .text { - display: none; - } -} - -// #Tags -// -// ```html -// <ul class="tags items cloud"> -// <li class="tag item"> -// <a class="tag text" href="#" style="font-size:75%;">widget</a> -// <span class="amount">34</span> -// </li> -// <li class="tag item"> -// <a class="tag text" href="#" style="font-size:75%;">plugin</a> -// <span class="amount">6</span> -// </li> -// <li class="tag item"> -// <a class="tag text" href="#" style="font-size:145%;">admin</a> -// <span class="amount">2</span> -// </li> -// <li class="tag item"> -// <a class="tag text" href="#" style="font-size:75%;">sidebar</a> -// <span class="amount">4</span> -// </li> -// <li class="tag item"> -// <a class="tag text" href="#" style="font-size:110%;">comments</a> -// <span class="amount">1</span> -// </li> -// </ul> -// ``` -// - -.tags.items.cloud { - .resetList(); - margin: 0 0 20px; - .item { - .resetList(); - display: inline-block; - margin: 0 0 5px 5px; - &:first-child { - margin-left: 0; - } - } - .amount { - margin-left: 3px; - &:before { - content: '('; - } - &:after { - content: ')'; - } - } -} - -// #Ratings -// -// ```html -// <div class="field ratings"> -// <label class="label"><span>How do you rate this product?</span></label> -// <div class="control"> -// <div class="nested"> -// <div class="field rating"> -// <label class="label"><span>Price</span></label> -// <div class="control"> -// <input type="radio" name="ratings[3]" id="Price_1" value="11"> -// <label class="rating-1" for="Price_1" title="1 star"> -// <span>1 star</span> -// </label> -// <input type="radio" name="ratings[3]" id="Price_2" value="12"> -// <label class="rating-2" for="Price_2" title="2 stars"> -// <span>2 stars</span> -// </label> -// <input type="radio" name="ratings[3]" id="Price_3" value="13"> -// <label class="rating-3" for="Price_3" title="3 stars"> -// <span>3 stars</span> -// </label> -// <input type="radio" name="ratings[3]" id="Price_4" value="14"> -// <label class="rating-4" for="Price_4" title="4 stars"> -// <span>4 stars</span> -// </label> -// <input type="radio" name="ratings[3]" id="Price_5" value="15"> -// <label class="rating-5" for="Price_5" title="5 stars"> -// <span>5 stars</span> -// </label> -// </div> -// </div> -// <div class="field rating"> -// <label class="label"><span>Value</span></label> -// <div class="control"> -// <input type="radio" name="ratings[2]" id="Value_1" value="6"> -// <label class="rating-1" for="Value_1" title="1 star"> -// <span>1 star</span> -// </label> -// <input type="radio" name="ratings[2]" id="Value_2" value="7"> -// <label class="rating-2" for="Value_2" title="2 stars"> -// <span>2 stars</span> -// </label> -// <input type="radio" name="ratings[2]" id="Value_3" value="8"> -// <label class="rating-3" for="Value_3" title="3 stars"> -// <span>3 stars</span> -// </label> -// <input type="radio" name="ratings[2]" id="Value_4" value="9"> -// <label class="rating-4" for="Value_4" title="4 stars"> -// <span>4 stars</span> -// </label> -// <input type="radio" name="ratings[2]" id="Value_5" value="10"> -// <label class="rating-5" for="Value_5" title="5 stars"> -// <span>5 stars</span> -// </label> -// </div> -// </div> -// <div class="field rating"> -// <label class="label"><span>Quality</span></label> -// <div class="control"> -// <input type="radio" name="ratings[1]" id="Quality_1" value="1"> -// <label class="rating-1" for="Quality_1" title="1 star"> -// <span>1 star</span> -// </label> -// <input type="radio" name="ratings[1]" id="Quality_2" value="2"> -// <label class="rating-2" for="Quality_2" title="2 stars"> -// <span>2 stars</span> -// </label> -// <input type="radio" name="ratings[1]" id="Quality_3" value="3"> -// <label class="rating-3" for="Quality_3" title="3 stars"> -// <span>3 stars</span> -// </label> -// <input type="radio" name="ratings[1]" id="Quality_4" value="4"> -// <label class="rating-4" for="Quality_4" title="4 stars"> -// <span>4 stars</span> -// </label> -// <input type="radio" name="ratings[1]" id="Quality_5" value="5"> -// <label class="rating-5" for="Quality_5" title="5 stars"> -// <span>5 stars</span> -// </label> -// </div> -// </div> -// </div> -// </div> -// </div> -// ``` -// - -.field.ratings { - @starSize: 16px; - border-bottom: 1px solid; - .borderColor(@primary1); - padding-bottom: 15px; - margin-bottom: 30px; - overflow: hidden; - position: relative; - z-index: 1; - .nested { - display: table; - } - .field.rating { - display: table-row; - > .label { - display: table-cell; - vertical-align: top; - padding: 6px 0; - } - .control { - padding: 5px 10px; - display: table-cell; - z-index: 1; - &:before { - letter-spacing: 0.2em; - position: absolute; - z-index: 1; - display: block; - float: left; - font-family: "icons"; - content: "\e009\e009\e009\e009\e009"; - font-style: normal; - font-size: @starSize; - color: fade(@secondary1, 30%); - speak: none; - font-weight: normal; - -webkit-font-smoothing: antialiased; - } - input:focus + label:before, - input:checked + label:before { - color: @secondary1; - opacity: 1; - } - input[type="radio"] { - position: absolute; - margin-left: -999em; - } - label { - position: absolute; - display: block; - span { - display: none; - } - &:before { - letter-spacing: 0.2em; - font-family: "icons"; - font-style: normal; - font-size: @starSize; - speak: none; - font-weight: normal; - -webkit-font-smoothing: antialiased; - opacity: 0; - } - &:hover { - &:before { - color: @secondary1; - opacity: 1; - } - & ~ label:before { - opacity: 0 !important; - } - } - cursor: pointer; - } - .rating-1 { - z-index: 6; - &:before { - content: "\e009"; - } - } - .rating-2 { - z-index: 5; - &:before { - content: "\e009\e009"; - } - } - .rating-3 { - z-index: 4; - &:before { - content: "\e009\e009\e009"; - } - } - .rating-4 { - z-index: 3; - &:before { - content: "\e009\e009\e009\e009"; - } - } - .rating-5 { - z-index: 2; - &:before { - content: "\e009\e009\e009\e009\e009"; - } - } - } - } -} - -// #Login form -// The login form's design differs from default form layout: labels are in the same line as inputs (in default form layout labels and corresponding inputs are in different lines) The code is the same, it differs only with styles. -// -// ```html -// <fieldset class="fieldset login"> -// <div class="field email required"> -// <label for="email" class="label"><span>Email Address</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="login[username]"> -// </div> -// </div> -// <div class="field password required"> -// <label class="label" for="pass"><span>Password</span></label> -// <div class="control"> -// <input type="password" class="input-text" name="login[password]"> -// </div> -// </div> -// <div class="actions"> -// <div class="primary"> -// <button id="send2" name="send" class="action login" type="submit"><span>Login</span></button> -// </div> -// <div class="secondary"><a href="#" class="action remind"><span>Forgot Your Password?</span></a></div> -// </div> -// </fieldset> -// ``` -// - -.fieldset { - &.login { - margin: 0; - padding: 0; - > .field { - .clearfix(); - > .label { - .box-sizing(); - float: left; - margin: 0; - padding-right: 10px; - padding-top: 7px; - text-align: right; - width: 40%; - } - > .control { - float: left; - margin: 0; - width: 60%; - } - } - .actions { - text-align: right; - .action.login { - &:extend(.primary.action all); - } - .secondary { - margin-top: 0.8em; - } - } - } -} - -// #Loader -// -// ```html -// <div class="loader"></div> -// ``` -// - -.loader { - background: url("@{baseDir}/images/loader.gif") no-repeat 50% 50%; - .size(20px); -} - -// #Button with loader -// -// ```html -// <button class="action mySecondaryButton loading">Loading</button> -// ``` -// - -.action.mySecondaryButton { - &:extend(.secondary.action all); - &.loading { - padding-right: 30px; - position: relative; - &:after { - background: url("@{baseDir}/images/loader.gif") no-repeat 50% 50%; - .size(16px); - content: ""; - margin: -8px 0 0; - position: absolute; - right: 7px; - top: 50%; - } - } -} - -// #Text block under loader -// -// ```html -// <div class="textUnderLoader loading"> -// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> -// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> -// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> -// </div> -// ``` -// - -.textUnderLoader { - background: @primary1; - border: 1px solid @primary3; - padding: 10px 20px; - &.loading { - position: relative; - &:before { - background: @primary7; - opacity: 0.7; - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - } - &:after { - background: url("@{baseDir}/images/loader.gif") no-repeat 50% 50%; - .size(16px); - content: ""; - margin: -8px 0 0 -8px; - position: absolute; - left: 50%; - top: 50%; - } - } -} - -// #Mage Checkout -// -// #Checkout address form -// The checkout address form has specific logical fields grouping. Here styles are provided to separate the logical groups. The code is the same, it differs only with styles. -// -// ```html -// <div class="opc wrapper"> -// <form data-hasrequired="* Required Fields" class="form billing"> -// <div class="field addresses"> -// <label for="billing-address-select" class="label"><span>Select a billing address from your address book or enter a new address.</span></label> -// <div class="control"> -// <select class="address-select" name="billing_address_id"> -// <option value="">New Address</option> -// </select> -// </div> -// </div> -// <fieldset class="fieldset address"> -// <div class="field name-firstname required"> -// <label for="billing:firstname" class="label"><span>First Name</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[firstname]"> -// </div> -// </div> -// <div class="field name-lastname required"> -// <label for="billing:lastname" class="label"><span>Last Name</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[lastname]"> -// </div> -// </div> -// <div class="field company"> -// <label for="billing:company" class="label"><span>Company</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[company]"> -// </div> -// </div> -// <div class="field street required"> -// <label for="billing:street1" class="label"><span>Address</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[street][]"> -// <div class="nested"> -// <div class="field additional no-label"> -// <div class="control"> -// <input type="text" class="input-text " value="" name="billing[street][]"> -// </div> -// </div> -// </div> -// </div> -// </div> -// <div class="field city required"> -// <label for="billing:city" class="label"><span>City</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[city]"> -// </div> -// </div> -// <div class="field region required"> -// <label for="billing:region_id" class="label"><span>State/Province</span></label> -// <div class="control"> -// <select name="billing[region_id]" defaultvalue="43"> -// <option value="">Please select region, state or province</option> -// <option title="Alabama" value="1">Alabama</option> -// <option title="Alaska" value="2">Alaska</option> -// <option title="Arizona" value="4">Arizona</option> -// </select> -// </div> -// </div> -// <div class="field zip required"> -// <label for="billing:postcode" class="label"><span>Zip/Postal Code</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[postcode]"> -// </div> -// </div> -// <div class="field country required"> -// <label for="billing:country_id" class="label"><span>Country</span></label> -// <div class="control"> -// <select class="validate-select" name="billing[country_id]"> -// <option value=""></option> -// <option value="GB">United Kingdom</option> -// <option value="US">United States</option> -// </select> -// </div> -// </div> -// <div class="field telephone required"> -// <label for="billing:telephone" class="label"><span>Telephone</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[telephone]"> -// </div> -// </div> -// <div class="field fax"> -// <label for="billing:fax" class="label"><span>Fax</span></label> -// <div class="control"> -// <input type="text" class="input-text" value="" name="billing[fax]"> -// </div> -// </div> -// <div class="field save choice"> -// <input type="checkbox" class="checkbox" value="1" name="billing[save_in_address_book]"> -// <label for="billing:save_in_address_book" class="label"><span>Save in address book</span></label> -// </div> -// </fieldset> -// <div class="field choice"> -// <input type="radio" class="radio" checked="checked" value="1" name="billing[use_for_shipping]"> -// <label for="billing:use_for_shipping_yes" class="label"><span>Ship to this address</span></label> -// </div> -// <div class="field choice"> -// <input type="radio" class="radio" value="0" name="billing[use_for_shipping]"> -// <label for="billing:use_for_shipping_no" class="label"><span>Ship to different address</span></label> -// </div> -// <div id="billing-buttons-container" class="actions buttons-set form-buttons btn-only"> -// <div class="primary"> -// <button class="button action continue" type="button"><span>Continue</span></button> -// </div> -// </div> -// </form> -// </div> -// ``` -// - -.opc { - .fieldset { - margin: 20px 0; - .formCols(); - } - .field { - margin-bottom: 10px; - } - .field.fullname + .field.company, - .field.name-lastname + .field.company, - .field.country, - .field.taxvat { - margin: 0 40% 30px 0; - } - .actions .primary .action { - &:extend(.primary.action all); - } - .form { - &:extend(.hasRequired all); - } -} - -// #Payment method credit card form -// This form differs from the standard layout by its code and by design. Here labels are in the same line as inputs. It is necessary to replace the code by the new one. -// -// ```html -// <ul class="form-list"> -// <li> -// <label for="ccsave_cc_type" class="required"><em>*</em>Credit Card Type</label> -// <div class="input-box"> -// <select id="ccsave_cc_type" name="payment[cc_type]"> -// <option value="">--Please Select--</option> -// <option value="AE">American Express</option> -// <option value="VI">Visa</option> -// <option value="MC">MasterCard</option> -// <option value="DI">Discover</option> -// </select> -// </div> -// </li> -// <li> -// <label for="ccsave_cc_number" class="required"><em>*</em>Credit Card Number</label> -// <div class="input-box"> -// <input type="text" name="payment[cc_number]" class="input-text" value=""> -// </div> -// </li> -// <li> -// <label for="ccsave_expiration" class="required"><em>*</em>Expiration Date</label> -// <div class="input-box"> -// <div class="v-fix"> -// <select name="month" class="month"> -// <option value="" selected="selected">Month</option> -// <option value="1">01 - January</option> -// <option value="2">02 - February</option> -// <option value="3">03 - March</option> -// <option value="4">04 - April</option> -// <option value="5">05 - May</option> -// <option value="6">06 - June</option> -// <option value="7">07 - July</option> -// <option value="8">08 - August</option> -// <option value="9">09 - September</option> -// <option value="10">10 - October</option> -// <option value="11">11 - November</option> -// <option value="12">12 - December</option> -// </select> -// </div> -// <div class="v-fix"> -// <select name="year" class="year"> -// <option value="" selected="selected">Year</option> -// <option value="2013">2013</option> -// <option value="2014">2014</option> -// <option value="2015">2015</option> -// <option value="2016">2016</option> -// <option value="2017">2017</option> -// <option value="2018">2018</option> -// <option value="2019">2019</option> -// <option value="2020">2020</option> -// <option value="2021">2021</option> -// <option value="2022">2022</option> -// <option value="2023">2023</option> -// </select> -// </div> -// </div> -// </li> -// </ul> -// ``` -// - -.form-list { - .resetList(); - .required { - em { - display: none; - } - &:first-child:after { - color: @requiredField; - content: '*'; - } - } - > li { - .clearfix(); - margin: 0 0 10px; - .field { - .clearfix(); - margin: 10px 0 0; - &:first-child { - margin: 0; - } - } - > label, - .field > label { - .box-sizing(); - clear: left; - float: left; - padding: 7px 10px 0 0; - text-align: right; - width: 30%; - } - .input-box { - float: left; - width: 70%; - > input, - > select, - > textarea { - width: 100%; - } - > .v-fix { - float: left; - margin: 0 10px 0 0; - } - } - } -} - -// #Shopping Cart -// #Shopping cart estimation settings -// The shopping card estimation settings design differs from standard form layout by the code and by the design. Here the code and the styles are provided. -// -// ```html -// <div class="cart summary"> -// -// <div class="block shipping active"> -// <div class="title active"><strong>Estimate Shipping and Tax</strong></div> -// <div class="content"> -// <form> -// <fieldset class="fieldset estimate"> -// <p class="field note">Enter your destination to get a shipping estimate.</p> -// <div class="field country"> -// <label for="country" class="label"><span>Country</span></label> -// <div class="control"> -// <select name="country_id" id="country" class="validate-select" title="Country"> -// <option value=""></option> -// <option value="GB">United Kingdom</option> -// <option value="US">United States</option> -// </select> -// </div> -// </div> -// <div class="field region"> -// <label for="region_id" class="label"><span>State/Province</span></label> -// <div class="control"> -// <select name="region_id" title="State/Province" class="required-entry" defaultvalue="43"> -// <option value=""></option> -// <option value="1" title="Alabama">Alabama</option> -// <option value="2" title="Alaska">Alaska</option> -// <option value="4" title="Arizona">Arizona</option> -// </select> -// </div> -// </div> -// <div class="field city"> -// <label for="city" class="label"><span>City</span></label> -// <div class="control"> -// <input class="input-text" type="text" name="estimate_city" value=""> -// </div> -// </div> -// <div class="field postcode"> -// <label for="postcode" class="label"><span>Zip/Postal Code</span></label> -// <div class="control"> -// <input class="input-text validate-postcode required-entry" type="text" name="estimate_postcode" value=""> -// </div> -// </div> -// <div class="actions"> -// <button type="submit" class="action quote"><span>Get a Quote</span></button> -// </div> -// </fieldset> -// </form> -// <form> -// <fieldset class="fieldset rates"> -// <dl class="items methods"> -// <dt class="item title"><span>Flat Rate</span></dt> -// <dd class="item options"> -// <div class="field choice item"> -// <input type="radio" class="radio" value="flatrate_flatrate" name="estimate_method"> -// <label for="s_method_flatrate_flatrate" class="label"> -// <span>Fixed</span> -// <span class="price">$15.00</span> -// </label> -// </div> -// </dd> -// </dl> -// <div class="actions"> -// <button value="Update Total" name="do" class="action update" type="submit"><span>Update Total</span></button> -// </div> -// </fieldset> -// </form> -// </div> -// -// <div class="block discount active"> -// <div class="title active"><strong>Discount Codes</strong></div> -// <div class="content"> -// <form> -// <fieldset class="fieldset coupon"> -// <div class="field"> -// <label class="label" for="coupon_code"><span>Enter your coupon code if you have one.</span></label> -// -// <div class="control"> -// <input type="text" value="" name="coupon_code" class="input-text"> -// </div> -// </div> -// <div class="actions"> -// <div class="primary"> -// <button value="Apply Coupon" type="button" class="action apply"> -// <span>Apply Coupon</span> -// </button> -// </div> -// </div> -// </fieldset> -// </form> -// </div> -// </div> -// </div> -// -// -// </div> -// ``` -// - -.cart.summary { - .fieldset { - border: 0; - font-size: @baseFontSizeMiddle; - padding: 0; - margin: 0; - .field { - margin: 0 0 10px; - &:not(.choice) { - .label { - padding: 0 0 5px; - display: block; - } - } - } - .action:not(.check) { - &:extend(.primary.action all); - padding: 6px 11px 5px; - span { - font-size: @baseFontSizeMiddle; - line-height: @baseFontSizeMiddle; - } - } - &.coupon, - &.estimate { - .actions { - display: table-cell; - width: 1%; - white-space: nowrap; - vertical-align: bottom; - } - } - &.coupon .field, - .field.postcode { - display: table-cell; - padding-right: 10px; - vertical-align: bottom; - width: 99%; - div.mage-error { - position: absolute; - } - } - &.rates { - padding-top: 25px; - .actions { - text-align: right; - } - } - } - .title { - cursor: pointer; - line-height: @baseFontSizeBigger; - margin: 0; - padding: 10px 5px; - } - .content { - padding: 15px 15px 20px; - } - input[type="text"] { - padding: 0 5px; - font-size: 12px; - height: 30px; - } - select { - padding: 5px 5px 4px; - font-size: 12px; - } - .items.methods { - dt { - font-weight: @baseFontWeightBolder; - } - dd { - margin: 10px 10px 25px; - } - } -} - -// #Popup -// ```html -// <div class="popup"> -// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> -// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> -// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> -// <span data-dismiss="popup" class="close"></span> -// </div> -// <br> -// <br> -// <div class="popup system"> -// <header class="header"> -// Popup header -// </header> -// <div class="content"> -// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> -// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> -// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> -// </div> -// <footer class="footer"> -// <div class="actions"> -// <button type="button" class="action submit">OK</button> -// <button type="button" class="action cancel">Cancel</button> -// </div> -// </footer> -// <span data-dismiss="popup" class="close"></span> -// </div> -// </div> -// -// <div class="wrapper"> -// <div class="fade"> -// <div class="popup"> -// <header class="header"> -// Popup header -// </header> -// <div class="content"> -// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> -// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> -// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> -// </div> -// <footer class="footer"> -// Some footer text -// <div class="actions"> -// <button type="button" class="action submit">OK</button> -// <button type="button" class="action cancel">Cancel</button> -// </div> -// </footer> -// <span class="close" data-dismiss="popup"></span> -// </div> -// </div> -// </div> -// ``` -// - -.popup { - background: @primary2; - border: 1px solid @primary3; - display: inline-block; - padding: 20px; - position: relative; - > .close { - color: @primary4; - cursor: pointer; - position: absolute; - right: 5px; - top: 3px; - .iconBefore(@icon-close-thick, 12px, 0, "icons"); - &:hover { - color: @primary6; - } - } - .fade & { - background: @pageMainBg; - box-shadow: 0 0 10px 0 @primary4; - } - > .header, - > .content { - margin: 0 0 5px; - } - > .header { - font-size: @baseFontSizeBigger; - font-weight: @baseFontWeightBolder; - } - .actions { - margin: 15px 0 0; - .action.submit { - &:extend(.primary.action all); - margin-right: 10px; - } - .action.cancel { - &:extend(.secondary.action all); - } - } - &.system { - background: @pageMainBg; - padding: 0; - > .header { - background: @primary2; - border-bottom: 1px solid @primary3; - border-radius: 5px 5px 0 0; - cursor: move; - padding: 10px 20px; - } - > .content { - padding: 20px; - } - > .footer { - border-top: 1px solid @primary3; - padding: 10px 20px; - } - .actions { - margin: 0; - } - .close { - right: 8px; - top: 8px; - } - } -} - -.fade { - background-color: @primeBlackOpacity; - position: relative; - left: 0; - top: 0; - right: 0; - bottom: 0; - padding: 10%; -} - - -// #CSS tooltip -// -// ####Accepted parameters -// **.tooltipSimple(*[background]*, *[color]*, *[fontSize]*, *[margin]*, *[padding]*, *[maxWidth]*, *[cursor]*);** -// -// Tooltip can be added to any element -// ```html -// Projects in Sublime Text capture the full contents of the workspace, -// <span class="tooltip"> -// <strong>Your content</strong> -// <div class="tooltip-content">Tooltip content</div> -// </span> -// including modified and unsaved files. -// You can switch between projects in a manner similar to Goto Anything, -// and the switch is instant, with no save prompts - all your modifications will be restored next time the project is opened. -// ``` -// - -// #Radiobutton tooltip -// -// ```html -// <div class="field choice tooltip"> -// <input type="radio" class="radio" checked="" value="1" name="inputRadio"> -// <label for="inputRadio" class="label"><span>Radiobutton choice</span></label> -// <div class="tooltip-content">Tooltip content</div> -// </div> -// ``` - -.tooltip { - .tooltipCSS(rgba(0,0,0,.5), #fff, 16px, 10px 0 0, 8px, 500px, help); -} - -// #JS tooltip: -// -// ####Accepted parameters -// **.tooltipJS(*[background]*, *[color]*, *[fontSize]*, *[padding]*, *[maxWidth]*);** -// -// ####Add attributes to the tag: -// -// **tooltip**="text tooltip" -// -// **tooltip-position**="n, nw, ne, w, e, s, sw, se" -// -// ```html -// <div class="example-tooltips"> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='nw'</strong>" tooltip-position="nw"> -// <span>↖</span> -// </button> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='n'</strong>" tooltip-position="n"> -// <span>↑</span> -// </button> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='ne'</strong>" tooltip-position="ne"> -// <span>↗</span> -// </button> -// <div class="separator"></div> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='w'</strong>" tooltip-position="w"> -// <span>←</span> -// </button> -// <button tooltip="Default tooltip content from <strong class='example-tooltip-elem'>'tooltip'</strong> attribute"> -// <span>Default</span> -// </button> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='e'</strong>" tooltip-position="e"> -// <span>→</span> -// </button> -// <div class="separator"></div> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='sw'</strong>" tooltip-position="sw"> -// <span>↙</span> -// </button> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='s'</strong>" tooltip-position="s"> -// <span>↓</span> -// </button> -// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='se'</strong>" tooltip-position="se"> -// <span>↘</span> -// </button> -// <div> -// ``` - -.tipsy { - .tooltipJS(rgba(0,0,0,.9), #fff); -} - -// #Tooltip mixins: -.tooltipCSS(@background: @primeBlackOpacity, @color: @primary7, @fontSize: 16px, @margin: 10px 0 0, @padding: 4px 8px, @maxWidth: 200px, @cursor: help) { - display: inline-block; - vertical-align: middle; - line-height: 1.1; - cursor: @cursor; - .tooltip-content { - display: none; - position: absolute; - max-width: @maxWidth; - margin: @margin; - padding: @padding; - background: @background; - color: @color; - border-radius: 3px; - z-index: 20; - &:before { - content: ''; - position: absolute; - width: 0; - height: 0; - top: -5px; - left: 20px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid @background; - } - } - &:hover > .tooltip-content { - display: block; - } -} - -.tooltipJS(@background: @primeBlackOpacity, @color: @primary7, @fontSize: 16px, @padding: 5px, @maxWidth: 200px) { - position: absolute; - left: 0; - top: 0; - display: none; - padding: @padding; - font-size: @fontSize; - z-index: 9999; - .tipsy-inner { - padding: 5px 8px 4px; - background-color: @background; - color: @color; - max-width: @maxWidth; - border-radius: 3px; - } - .tipsy-arrow { - position: absolute; - width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid @background; - } - &.tipsy-s .tipsy-arrow { - top: 0; - left: 50%; - margin-left: -4px; - } - &.tipsy-se .tipsy-arrow { - top: 0; - left: 10px; - } - &.tipsy-sw .tipsy-arrow { - top: 0; - right: 10px; - } - &.tipsy-n .tipsy-arrow, - &.tipsy-ne .tipsy-arrow, - &.tipsy-nw .tipsy-arrow { - bottom: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid @background; - border-bottom: none; - } - &.tipsy-n .tipsy-arrow { - left: 50%; - margin-left: -4px; - } - &.tipsy-ne .tipsy-arrow { - left: 10px; - } - &.tipsy-nw .tipsy-arrow { - right: 10px; - } - &.tipsy-w .tipsy-arrow, - &.tipsy-e .tipsy-arrow { - top: 50%; - margin-top: -4px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - } - &.tipsy-w .tipsy-arrow { - right: 0; - border-right: none; - border-left: 5px solid @background; - } - &.tipsy-e .tipsy-arrow { - left: 0; - border-right: 5px solid @background; - border-left: none; - } -} - - -.example-tooltips {/*presentation styles*/ - padding: 70px; - text-align: center; -} - -.example-tooltips button {/*presentation styles*/ - width: 70px; - height: 70px; - font-size: 18px; - margin: 10px 5px; -} diff --git a/app/design/frontend/Magento/plushe/css/source/vars.less b/app/design/frontend/Magento/plushe/css/source/vars.less deleted file mode 100644 index 92730eb39d7..00000000000 --- a/app/design/frontend/Magento/plushe/css/source/vars.less +++ /dev/null @@ -1,283 +0,0 @@ -// /** -// // * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. -// * -// * @category design -// * @package magento2_reference -// * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) -// * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -// */ - -// Primary colors -@primary1: #f8f8f8; -@primary2: #e5e5e5; -@primary3: #c2c2c2; -@primary4: #999; -@primary5: #837d75; -@primary6: #675f55; -@primary7: #fff; -@primeBlack: #7f7f7f; -@primeBlackOpacity: rgba(0, 0, 0, 0.5); -@commonBg: #fff; - -// Secondary colors -@secondary1: #da370a; -@secondary2: #55c2e6; - -// Buttons -@primaryActionBg: @secondary1; -@primaryActionBgH: darken(@secondary1, 10%); -@primaryActionColor: #fff; - -@secondaryActionBg: @primary3; -@secondaryActionBgH: darken(@primary3, 10%); -@secondaryActionColor: #fff; - -@actionFont: 600 14px/16px; - -// Tooltip -@optionsBg: rgba(0, 0, 0, .8); -@optionsColor: #fff; - -// Layout -@LayoutMaxWidth: 1025px; -@LayoutMinWidth: 1025px; - -// Links -@link: #332e29; -@linkHover: @secondary1; - -// Base font -@baseFont: "sourcesanspro"; -@baseFontSizeBigger: 16px; -@base-font-size: 14px; // re-declarate base font size for clearLess -@baseFontSize: 14px; -@baseFontSizeMiddle: 12px; -@baseFontSizeSmall: 10px; -@baseFontWeight: 400; -@baseFontWeightLighter: 200; -@baseFontWeightBolder: 700; -@baseLineHeight: 1.33; -@baseColor: @primary6; - -@pageMainBg: #fff; -@headerBg: #d6d7d2; -@headerBgImage: url("@{baseDir}/images/header-bg.jpg"); -@pageBottomBg: @pageMainBg; -@footerBg: @pageMainBg; -@textColor: @primary6; -@linksColor: @primary6; -@gutter-width: 0; -@using-ieclasses: false; - -// Headings: -// H1 -@h1font: 200 30px/1.2 @baseFont; -@h1color: @primary6; - -// H2 -@h2font: 400 20px/1.2 @baseFont; -@h2color: @primary6; - -// H3 -@h3font: 600 18px/1.2 @baseFont; -@h3color: @primary6; - -// H4 -@h4font: 600 16px/1.2 @baseFont; -@h4color: @primary6; - -// H5 -@h5font: 600 14px/1.2 @baseFont; -@h5color: @primary6; - -// H6 -@h6font: 600 12px/1.2 @baseFont; -@h6color: @primary6; - -// Forms -@legendFontSize: 20px; -@fieldBg: #fff; - -// Required fields and validation -@requiredField: #da370a; -@nonValidHilight: #da370a; -@validHilight: #42b649; - -// Messages colors -@messageIconColor: #fff; -// Success message -@messageSuccessColor: #1b6720; -@messageSuccessBg: #d3edd5; -@messageSuccessIconBg: #42b649; -// Error message -@messageErrorColor: #911c00; -@messageErrorBg: #ffd9d0; -@messageErrorIconBg: #ff3200; -// Notice message, Info message -@messageNoticeColor: #926e00; -@messageNoticeBg: #ffedb8; -@messageNoticeIconBg: #ffc000; - -@baseDir: ~".."; //default -@paypalRetinaButton: url("@{baseDir}/images/express-checkout-retina.png"); - -// # Icons -// ``` -// <span class="icon example" data-icon="">@icon-pencil</span> -// <span class="icon example" data-icon="">@icon-menu</span> -// <span class="icon example" data-icon="">@icon-location</span> -// <span class="icon example" data-icon="">@icon-info</span> -// <span class="icon example" data-icon="">@icon-flag</span> -// <span class="icon example" data-icon="">@icon-expand</span> -// <span class="icon example" data-icon="">@icon-exclamation</span> -// <span class="icon example" data-icon="">@icon-dropdown</span> -// <span class="icon example" data-icon="">@icon-collapse</span> -// <span class="icon example" data-icon="">@icon-close-thick</span> -// <span class="icon example" data-icon="">@icon-checkmark</span> -// <span class="icon example" data-icon="">@icon-cart</span> -// <span class="icon example" data-icon="">@icon-arrow-up-thin</span> -// <span class="icon example" data-icon="">@icon-arrow-right-thin</span> -// <span class="icon example" data-icon="">@icon-arrow-left-thin</span> -// <span class="icon example" data-icon="">@icon-arrow-down-thin</span> -// <span class="icon example" data-icon="">@icon-arrow-up-thick</span> -// <span class="icon example" data-icon="">@icon-arrow-right-thick</span> -// <span class="icon example" data-icon="">@icon-arrow-left-thick</span> -// <span class="icon example" data-icon="">@icon-arrow-down-thick</span> -// <span class="icon example" data-icon="">@icon-wishlist</span> -// <span class="icon example" data-icon="">@icon-comment</span> -// <span class="icon example" data-icon="">@icon-comment-reflected</span> -// <span class="icon example" data-icon="">@icon-list</span> -// <span class="icon example" data-icon="">@icon-grid</span> -// <span class="icon example" data-icon="">@icon-close-thin</span> -// <span class="icon example" data-icon="">@icon-trash</span> -// <span class="icon example" data-icon="">@icon-envelope</span> -// <span class="icon example" data-icon="">@icon-magnifying-glass</span> -// <span class="icon example" data-icon="">@icon-arrow-right-filled</span> -// <span class="icon example" data-icon="">@icon-arrow-bottom-filled</span> -// <span class="icon example" data-icon="">@icon-arrow-left-filled</span> -// <span class="icon example" data-icon="">@icon-arrow-up-filled</span> -// <span class="icon example" data-icon="">@icon-star</span> -// <span class="icon example" data-icon="">@icon-calendar</span> -// ``` - -@icon-pencil: "\e006"; -@icon-menu: "\e007"; -@icon-location: "\e008"; -@icon-info: "\e00a"; -@icon-flag: "\e00c"; -@icon-expand: "\e00d"; -@icon-exclamation: "\e00e"; -@icon-dropdown: "\e010"; -@icon-collapse: "\e011"; -@icon-close-thick: "\e012"; -@icon-checkmark: "\e013"; -@icon-cart: "\e014"; -@icon-arrow-up-thin: "\e015"; -@icon-arrow-right-thin: "\e016"; -@icon-arrow-left-thin: "\e017"; -@icon-arrow-down-thin: "\e018"; -@icon-arrow-up-thick: "\e019"; -@icon-arrow-right-thick: "\e01a"; -@icon-arrow-left-thick: "\e01b"; -@icon-arrow-down-thick: "\e01c"; -@icon-wishlist: "\e01d"; -@icon-comment: "\e01e"; -@icon-comment-reflected: "\e01f"; -@icon-list: "\e002"; -@icon-grid: "\e003"; -@icon-close-thin: "\e004"; -@icon-trash: "\e000"; -@icon-envelope: "\e001"; -@icon-magnifying-glass: "\e005"; -@icon-arrow-right-filled: "\e02b"; -@icon-arrow-bottom-filled: "\e02c"; -@icon-arrow-left-filled: "\e02a"; -@icon-arrow-up-filled: "\e029"; -@icon-star: "\e009"; -@icon-calendar: "\e00b"; - -// Responsive -@breakPoint1: 640px; -@icon-expand-mobile: "+"; -@icon-collapse-mobile: "–"; - - - - -// Messages variables - -@message-border: none; -@message-border-radius: 3px; -@message-padding: 13px 20px 12px; -@message-margin: 3px 0; -@message-font-size: 14px; -@message-line-height: 16px; -@message-icon-font-size: 20px; -@message-icon-inner-padding-left: 40px; -@message-icon-lateral-width: 30px; - -// Info -@message-info-color: @messageNoticeColor; -@message-info-background: @messageNoticeBg; -@message-info-link-color: @link; -@message-info-link-color-hover: @linkHover; -@message-info-icon: @icon-info; -@message-info-icon-color: #c07600; -@message-info-icon-background: @messageNoticeIconBg; -@message-info-border: @message-border; - -// Warning -@message-warning-color: @messageNoticeColor; -@message-warning-background: @messageNoticeBg; -@message-warning-link-color: @link; -@message-warning-link-color-hover: @linkHover; -@message-warning-icon: @icon-info; -@message-warning-icon-color: #c07600; -@message-warning-icon-background: @messageNoticeIconBg; -@message-warning-border: @message-border; - -// Error -@message-error-color: @messageErrorColor; -@message-error-background: @messageErrorBg; -@message-error-link-color: @link; -@message-error-link-color-hover: @linkHover; -@message-error-icon: @icon-info; -@message-error-icon-color: #b30000; -@message-error-icon-background: @messageErrorIconBg; -@message-error-border: @message-border; - -// Success -@message-success-color: @messageSuccessColor; -@message-success-background: @messageSuccessBg; -@message-success-link-color: @link; -@message-success-link-color-hover: @linkHover; -@message-success-icon: @icon-checkmark; -@message-success-icon-color: #006400; -@message-success-icon-background: @messageSuccessIconBg; -@message-success-border: @message-border; - -// Notice -@message-notice-color: @messageNoticeColor; -@message-notice-background: @messageNoticeBg; -@message-notice-link-color: @link; -@message-notice-link-color-hover: @linkHover; -@message-notice-icon: @icon-info; -@message-notice-icon-color: #c07600; -@message-notice-icon-background: @messageNoticeIconBg; -@message-notice-border: @message-border; diff --git a/app/design/frontend/Magento/plushe/css/styles.less b/app/design/frontend/Magento/plushe/css/styles.less deleted file mode 100644 index 2507f5de4d9..00000000000 --- a/app/design/frontend/Magento/plushe/css/styles.less +++ /dev/null @@ -1,5713 +0,0 @@ -/** -// * Magento -// * -// * NOTICE OF LICENSE -// * -// * This source file is subject to the Academic Free License (AFL 3.0) -// * that is bundled with this package in the file LICENSE_AFL.txt. -// * It is also available through the world-wide-web at this URL: -// * http://opensource.org/licenses/afl-3.0.php -// * If you did not receive a copy of the license and are unable to -// * obtain it through the world-wide-web, please send an email -// * to license@magentocommerce.com so we can send you a copy immediately. -// * -// * DISCLAIMER -// * -// * Do not edit or add to this file if you wish to upgrade Magento to newer -// * versions in the future. If you wish to customize Magento for your -// * needs please refer to http://www.magentocommerce.com for more information. - * - * @category design - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -.normalize(); - -@import "source/clearless/all"; // import ClearLess -@import "source/styles/base"; -@import "source/lib/snippets"; -@import "source/lib/buttons"; -@import "source/lib/forms"; -@import "source/lib/grids"; -@import "source/lib/icons"; -@import "source/lib/messages"; -@import "source/lib/navigation"; -@import "source/lib/sections"; -@import "source/vars"; -@import "source/styles/magento"; - -strong { - font-weight: 700; -} - -.items { - .resetList(); -} - -.hidden, -.no-display { - .hidden(); -} - -/* - Forms --------------------------------------- */ -.field.required > .label > span:first-child:after { - content: '*'; - color: @requiredField; -} -.fields .field { - padding-right: 20px; -} - -/* - Magento_Theme --------------------------------------- */ -html, body, button, input, select, textarea { - color: @textColor; - font: 400 14px/1.33 "sourcesanspro"; -} - -html { - background: @footerBg; -} - -body { - position: relative; -} - -.page.wrapper { - background: @pageMainBg; -} - -.action.skip { - .visually-hidden(); -} - -/* - Page Layout --------------------------------------- */ -.columns { - .pageWidth(); -} - -.page.main { - .clearfix(); - clear: both; - padding: 30px 0; -} - -.page.title { - .clearfix(); - margin-bottom: 30px; - .title { - display: inline; - margin: 0; - line-height: 1.2; - font-weight: @baseFontWeightLighter; - font-size: 30px; - color: @primary5; - } - .action { - float: right; - &:extend(.primary.action all); - } -} - -.page.main > .page.title { - .pageWidth(); - margin-bottom: 30px; -} - -.column.main { - min-height: 500px; -} - -.column.left, -.column.right { - .box-sizing(); - min-height: 1px; -} - -.layout-1 { - .column.main { - .column(12); - } -} - -.layout-2-left { - .column.main { - float: right !important; - .column(10); - } - .column.left { - .column(2); - padding-right: 12px; - } -} - -.layout-2-right { - .column.main { - .column(10); - } - .column.right { - .column(2); - padding-left: 12px; - } -} - -.layout-3 { - .column.main { - .clearfix(); - .column(8); - float: none !important; - display: inline-block !important; - vertical-align: top; - } - .column.left { - .column(2); - float: left; - padding-right: 12px; - } - .column.right { - .column(2); - float: none !important; - display: inline-block !important; - padding-left: 12px; - } -} - -/* - Header --------------------------------------- */ -.page.header { - background-color: @headerBg; - background-image: @headerBgImage; - background-repeat: repeat; - background-position: 0; - border-bottom: 1px solid; - .borderColor(@headerBg); - padding: 15px 0; - > .content { - .pageWidth(); - .clearfix(); - border: 0; - padding-top: 0; - padding-bottom: 0; - .links { - .resetList(); - margin-bottom: 5px; - li { - margin-left: 20px; - display: inline; - text-transform: capitalize; - } - a { - .colorA(@primary5, @secondary1); - } - } - text-align: right; - } - - .panel { - .pageWidth(); - .clearfix(); - margin-bottom: 15px; - text-align: right; - } -} - -.logo { - font-family: "marvel"; - font-style: normal; - font-weight: @baseFontWeight; - font-size: 55px; - display: block; - float: left; - line-height: 1; - text-align: center; - img { - display: inline-block; - vertical-align: middle; - margin: 0 auto; - } - span { - display: inline-block; - vertical-align: middle; - margin-left: 15px; - color: @primary5; - margin-top: -8px; - } - &:active { - outline: 0; - } -} - -/* - Header Banner --------------------------------------- */ -.page.header .panel .widget { - display: inline-block; - text-align: left; -} - -.banner-header:visited, -.banner-header:hover, -.banner-header { - font-size: @baseFontSizeBigger; - text-transform: uppercase; - color: @secondary1; -} - -/* - Search --------------------------------------- */ -.block.search { - float: right; - > .content { - white-space: nowrap; - } - .field, - .actions, - .field .control { - float: left; - } - .actions { - margin-right: 0; - } - .search.autocomplete { - background: @primary7; - border: 1px solid @primary3; - border-width: 0 1px 1px; - border-radius: 0 0 5px 5px; - overflow: hidden; - z-index: 5; - display: none; - ul { - .resetList(); - li { - border-top: 1px solid @primary2; - cursor: pointer; - padding: 5px 40px 5px 10px; - position: relative; - text-align: left; - white-space: normal; - &:first-child { - border-top: none; - } - &:hover { - background: @primary1; - } - .amount { - color: @primary4; - font-weight: 600; - position: absolute; - right: 7px; - top: 6px; - } - } - } - } -} - -/* - Navigation --------------------------------------- */ -.navigation { - z-index: 4; - > ul > .level-top { - &.hover, - &:hover { - > .submenu { - z-index: 3; - } - } - &.more { - > .submenu { - background: @primary1; - > ul { - .pageWidth(); - position: relative; - } - } - &.hover { - > .submenu { - border-bottom: 1px solid @primary3; - overflow: visible !important; - } - } - } - } -} - -.navigation > ul, -.navigation > ul > .level0 > .submenu > ul.level0 { - .pageWidth(); - padding-left: 0; - padding-right: 0; -} - -@media only screen and (max-width: 640px) { - .navigation > ul, - .navigation > ul > .level0 > .submenu > ul.level0 { - min-width: 100%; - max-width: 100%; - } -} - -/* - General block --------------------------------------- */ -.column.main .block, -.sidebar .block { - margin-bottom: 45px; - > .title { - margin-bottom: 15px; - strong { - line-height: 1.2; - font-weight: @baseFontWeightLighter; - font-size: 20px; - } - .qty.counter { - font-size: 16px; - } - } - &.filter { - .item { - margin-bottom: 10px; - } - } -} - -.qty.counter { - &:before { - content: "("; - } - &:after { - content: ")"; - } -} - -.sidebar .block > .title strong { - font-size: 18px; -} - -/* - Sidebar Paypal logo --------------------------------------- */ -.sidebar .paypal.acceptance { - margin-bottom: 45px; -} - -/* - Breadcrumbs --------------------------------------- */ -.breadcrumbs { - .pageWidth(); - margin-top: 30px; -} - -/* - Footer --------------------------------------- */ -.footer { - background: @footerBg; - border-top: 1px solid; - .borderColor(@footerBg); - padding: 30px 0 80px; - > .content { - .pageWidth(); - text-align: left; - border: 0; - padding-top: 0; - padding-bottom: 0; - } - .links { - ul { - .resetList(); - } - display: inline-block; - padding: 0; - margin: 1px 3px 19px 0; - li { - list-style: none; - list-style-image: none; - margin: 0; - padding: 0; - display: inline; - &:after { - content: ' | '; - } - &:last-child:after { - content: ''; - } - } - + .links li:first-child:before { - content: ' | '; - } - a { - .colorA(@primary5, @secondary1); - } - } - .copyright { - font-size: @base-font-size; - display: block; - padding-top: 10px; - } - .bugs { - margin-top: 25px; - font-size: 12px; - span { - &:after { - content: '\00a0\2014\00a0'; - display: inline-block; - } - } - a { - font-weight: bold; - } - } - .switcher-store { - margin-bottom: 30px; - } -} - -/* - Switchers --------------------------------------- */ -.switcher { - display: inline-block; - text-align: left; - .page.header .panel & { - margin-right: 25px; - &:last-child { - margin-right: 0; - } - } - font-size: 11px; - vertical-align: middle; - .label { - display: none; - } - strong { - color: @primary5; - font-weight: 600; - } - .options { - display: inline-block; - position: relative; - z-index: 1; - > ul { - .resetList(); - margin: 0; - padding: 5px 10px; - position: absolute; - top: 100%; - right: 0; - margin-left: -11px; - min-width: 100%; - float: left; - background: @primary1; - border: 1px solid darken(@headerBg, 5%); - visibility: hidden; - opacity: 0; - .transition(visibility 0s linear 2s); - li { - margin: 5px 0; - white-space: nowrap; - } - } - &.active { - z-index: 999; - > ul { - visibility: visible; - opacity: 1; - .transitionDelay(0s); - } - } - &.active strong, - &:hover strong { - color: @primary6; - } - } -} - -.action.switch { - .resetAction(); - vertical-align: top; - color: @primary5; - span { - .iconAfter(@content: '\e02c', @font: "icons"); - .iconHideText(); - &:after { - line-height: 12px; - } - } - &:focus, - &:hover, - &.active { - color: @primary6; - } - &.active span:after { - content: "\e029"; - } - .no-js &:focus + ul { - visibility: visible; - opacity: 1; - .transitionDelay(0s); - } -} - -/* - Global Notices --------------------------------------- */ -.notice.global.site { - .box-sizing(); - position: absolute; - width: 100%; - padding: 8px; - background: #4d5d64; - color: #fff; - top: 0; - left: 0; - text-align: center; - p { - margin: 0; - } -} - -/* - Additional Information --------------------------------------- */ -.data.table.additional.attributes { - width: 100%; - th, - td { - .box-sizing(); - padding: 7px 10px; - text-align: left; - } - th { - width: 40%; - } - td { - width: 60%; - } - tr:nth-child(2n+1) th, - tr:nth-child(2n+1) td { - background: @primary1; - } -} - -/* - Reviews --------------------------------------- */ -@starSize : 16px; -.reviews.summary { - line-height: @starSize; - .action { - font-size: @baseFontSizeMiddle; - } - .reviews.actions { - font-size: @baseFontSizeMiddle; - display: inline; - } - .action.view { - span:before { - content: ' '; - } - } - .action.view + .action.add { - &:before { - content: '\00A0|\00A0\00A0'; - display: inline-block; - color: @link; - } - } - &.short:not(.no-rating) { - .action.view { - span { - display: none; - } - &:before { - content: '('; - display: inline-block; - } - &:after { - content: ')'; - display: inline-block; - } - } - } -} - -.block.reviews.dashboard .rating, -.reviews.summary .rating { - width: 5 * @starSize; - margin-right: 3px; - line-height: 1; - color: fade(@secondary1, 30%); - display: inline-block; - vertical-align: top; - margin-top: -1px; - > span { - display: block; - overflow: hidden; - color: @secondary1; - height: 0; - padding-top: @starSize; - line-height: 1; - margin-top: -@starSize; - &:before { - margin-top: -@starSize; - } - } - &:before, - > span:before { - display: block; - top: 0; - left: 0; - width: 100%; - font-family: "icons"; - content: @icon-star@icon-star@icon-star@icon-star@icon-star; - font-style: normal; - font-size: @starSize; - speak: none; - font-weight: normal; - -webkit-font-smoothing: antialiased; - } -} - -/* - Customer Reviews --------------------------------------- */ -.block.reviews.list { - margin: 0 0 30px -20px; - padding: 0; - > .title { - display: none; - } - .item.review { - padding: 15px; - .review.title { - font-weight: 600; - display: block; - margin: 15px 0; - } - &:nth-child(odd) { - background: @primary1; - } - } - .review.details { - .author { - strong { - text-transform: uppercase; - font-weight: 600; - } - } - .review.date { - font-size: 12px; - } - p { - margin: 5px 0; - span { - display: none; - } - } - } -} - -.block.add.review { - margin: 0 0 30px -20px; - padding: 20px; - background: @primary1; - .title { - display: none; - } - .fieldset { - .formFieldset(); - border: 0; - padding: 0; - margin: 0; - > .legend { - .box-sizing(); - float: left; - width: 100%; - margin: 0 0 20px; - padding: 10px 0 30px; - border-bottom: 1px solid; - .borderColor(@primary1); - & + br { - clear: both; - display: block !important; - } - span { - line-height: 1.2; - font-weight: @baseFontWeightLighter; - font-size: 20px; - } - strong { - margin-left: 20px; - font-size: @baseFontSize; - font-weight: 600; - } - } - > .field:not(.ratings) { - .formField(); - .fieldStyle(); - > .label { - padding: 0 0 5px; - } - } - } - .action.submit { - &:extend(.primary.action all); - } - .action.cancel { - .resetAction(); - .actionLink(); - position: absolute; - left: 100%; - text-decoration: underline; - text-transform: uppercase; - margin-left: 20px; - margin-top: 10px; - } - .actions, - .field:not(.ratings) { - width: 60%; - } - .actions { - padding-top: 20px; - text-align: right; - position: relative; - z-index: 1; - } -} - -/* - Review details --------------------------------------- */ -.review.view { - .product.name { - display: inline-block; - margin: 0; - } - .product.details { - float: left; - margin-right: 30px; - } - .product.photo { - display: block; - margin-bottom: 30px; - } - .review.details { - margin: 30px 0; - display: table; - - .ratings.summary { - margin-bottom: 30px; - strong { - font-weight: 600; - display: block; - margin: 0 0 15px; - } - .item { - display: table-row; - } - .label { - padding: 0 0 10px; - padding-right: 10px; - display: table-cell; - &:after { - content: ': '; - } - } - } - .review.date { - font-size: @baseFontSizeMiddle; - } - .review.title { - font-weight: 600; - font-size: @baseFontSizeBigger; - margin: 0 0 15px; - } - } -} - -.customer.review.view + .actions { - clear: both; -} - -/* - Messages --------------------------------------- */ -.page.messages { - .pageWidth(); - margin: 15px auto; -} - -/* - Magento_Checkout - One page --------------------------------------- */ -.block.progress.onepage { - .content > dt { - font-size: @baseFontSizeBigger; - font-weight: @baseFontWeight; - margin: 0 0 10px 0; - a { - font-size: @baseFontSize; - } - } - dd.complete { - padding: 0; - margin: 0 0 30px; - .cards.items { - dd { - margin-left: 0; - .card.item { - font-size: 12px; - margin: 5px 0 10px; - dt { - font-weight: bold; - } - dd { - margin-bottom: 5px; - } - } - } - } - } - address { - font-style: normal; - } -} - -// Payment methods - for OPC and Order pages -.payment.method { - .block.progress.onepage &, - .order.details .block.order & { - margin: 0; - .content { - margin: 5px 0; - padding: 0; - } - &.purchase.order, - &.checkmemo { - .content strong:after { - content: ": "; - } - .content .number { - white-space: nowrap; - } - } - .data.table { - th { - font-size: 14px; - padding: 5px 0; - text-align: left; - width: 50%; - } - td { - padding: 5px; - } - } - } -} - - -.opc.wrapper { - > .opc { - .resetList(); - .section { - margin-bottom: 4px; - > .step.title { - padding: 15px 20px; - line-height: 1; - background: @secondary1; - font-size: 22px; - h2 { - font-weight: @baseFontWeight; - font-size: 18px; - margin: 0; - padding: 0; - color: #fff; - } - .number { - display: none; - } - } - &.active { - > .step.title { - background: @primary1; - margin-bottom: 0; - h2 { - color: @primary6; - } - } - } - &.allow > .step.title { - cursor: pointer; - h2:after { - display: block; - } - } - > .step.content { - padding: 0 20px 20px; - background: @primary1; - &:before { - content: ''; - border-top: 3px solid @primary2; - display: block; - margin-bottom: 20px; - } - } - } - } - .form:not(.login) { - .fieldset { - .formCols(); - padding: 0; - margin: 20px 0; - border: 0; - position: relative; - } - .field { - .fieldStyle(); - &:not(.choice) { - .label { - display: block; - padding-bottom: 5px; - } - } - } - .field.fullname + .field.company, - .field.name-lastname + .field.company, - .field.country, - .field.taxvat { - margin: 0 40% 30px 0; - } - .field.confirm, - .field.password { - margin-top: 20px; - margin-bottom: 20px; - } - .field.choice { - width: 100%; - display: block; - } - .field.persistent, - .field.save { - margin: 20px 0 0; - } - .field.addresses { - margin-bottom: 20px; - } - &:after { - content: attr(data-hasrequired); - display: block; - letter-spacing: normal; - word-spacing: normal; - color: @secondary1; - } - } - .actions { - .clearfix(); - text-align: right; - button.action { - float: right; - &:extend(.primary.action all); - } - .secondary { - padding-top: 10px; - clear: right; - float: right; - } - } - .check.payable { - margin: 0 0 0 20px; - .title { - display: inline-block; - padding: 5px 0; - width: 30%; - } - .content { - display: inline-block; - margin: 0; - padding: 5px 0; - width: 68%; - } - } - .methods.payment { - margin:15px 0; - .item.content { - padding:0; - & > * { - padding:15px 0; - } - } - .items, - .fieldset.items { - margin: 0 0 0 6px; - } - .paypal.field.items { - padding: 0; - width: 100%; - } - .paypal.icon { - display: inline-block; - margin-right: 5px; - vertical-align: middle; - } - } -} - -.action.toggle.checkout.progress { - display: none; -} - -.opc.loading .active { - position: relative; - z-index: 1; - &:before { - content: ''; - display: block; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(255, 255, 255, 0.1); - } - .actions .secondary, - .actions .primary { - visibility: hidden; - overflow: hidden; - height:0px; - } - .actions .load.indicator { - margin-top:0; - } -} - -.fieldset.ccard { - > .legend { - margin:15px 0; - } - .formCols(); - padding: 20px 0; - margin: 20px 0; - border: 0; - position: relative; -} -.fieldset.ccard .field { - &.logos { - img { - display: inline-block; - vertical-align: middle; - } - } - .fieldStyle(); - &:not(.choice) { - .label { - display: block; - padding-bottom: 5px; - } - } - &.cvv { - input.cvv { width:80px; } - .tooltip { - .box-shadow(0 0 3px rgba(0,0,0,0.25)); - background: @primary7; - border: 1px solid @primary3; - z-index: 99; - width:500px; - height:250px; - position: fixed; - float:left; - top:50%; - left:50%; - padding:25px; - text-align: center; - margin:-125px 0 0 -250px; - background-color:@pageMainBg; - border:1px solid @primary2; - &:before { - content:''; - position: fixed; - z-index: -1; - display: block; - top:0; left: 0; right:0; bottom: 0; - background-color:fade(@pageMainBg, 15%); - } - } - } -} - -/* - Load Indicator --------------------------------------- */ -.load.indicator { - display: inline-block; - padding: 8px; - vertical-align: middle; - span { - display: block; - line-height: 16px; - &:before { - content: ''; - margin-right: 5px; - display: inline-block; - width: 16px; - height: 16px; - background: url(../images/loader.gif) no-repeat 0 0; - background-color: @secondary1; - vertical-align: top; - } - } -} - -/* - Step Login --------------------------------------- */ -.step.login.wrapper { - .clearfix(); - position: relative; - z-index: 1; - padding-bottom: 70px; - .block { - .column(6); - .box-sizing(); - .fieldset { - border: 0; - margin: 0; - padding: 0; - .field { - width: 100%; - } - } - &.guest { - padding-left: 50px; - &:before { - content: ''; - border-left: 1px solid @primary2; - position: absolute; - top: 0; - margin-left: -25px; - bottom: 20px; - } - } - } - button.action:not(.reload) { - &:extend(.primary.action all); - } - .actions { - position: absolute; - bottom: 0; - padding: 20px 0; - text-align: right; - margin: 0; - width: 50%; - .secondary { - font-size: @baseFontSizeMiddle; - margin-top: .5em; - line-height: 1.4em; - margin-bottom: -1.9em; - } - } - .guest .actions { - margin-left: -50px; - } -} - -.fieldset.guest { - > .field { - .fieldStyle(); - } -} - -/* - Step Review --------------------------------------- */ -.checkout.submit.order { - .actions { - margin-top: 20px; - .clearfix(); - .primary { - float: right; - } - .secondary { - clear:none; - float: left; - line-height: 32px; - } - } -} - -.order.data.items { - tfoot tr:first-child td { - border-top: 3px solid @primary2; - padding-top: 15px; - } - tr.total td { - padding-top: 5px; - padding-bottom: 5px; - text-align: right; - } - tr.total:last-child td { - padding-bottom: 20px; - } - tr.grand.total td { - vertical-align: middle; - } - tr.grand.total .amount { - font-size: 24px; - color: @secondary1; - } - tr.tax.totals.details { - display: none; - &.shown { - display: table-row; - } - } - tr.tax.totals.summary { - .detailed { - cursor: pointer; - .iconBefore(@content: @icon-expand, @size: 18px, @font: "icons"); - &:before { - vertical-align: top; - font-size: 12px; - margin-right: 5px; - } - } - &.expanded .detailed:before { - content: @icon-collapse; - } - } - tfoot { - .amount { - text-align: right; - } - } -} - -.order.review.data { - th.col.price, - th.col.subtotal { - text-align: right; - padding-right: 10px; - } - th.col.item { - text-align: left; - padding-left: 20px; - } -} - -.checkout.agreements { - margin: 10px 0; - .item { - margin: 0 0 10px; - &:last-child { - margin: 0; - } - } - .agreement { - background-color: @primary1; - border: 1px solid @primary2; - font-size: 11px; - overflow: auto; - margin: 0 0 10px; - padding: 15px; - } -} - -/* - Magento_Checkout - Multishipping --------------------------------------- */ -.multicheckout { - &.progress { - .resetList(); - li { - font-size: 16px; - font-weight: 400; - margin: 0 0 10px 0; - &.active { - font-weight: bold; - } - } - } - .title { - .clearfix(); - margin: 0 0 30px; - > strong { - font-size: 20px; - font-weight: 400; - margin: 4px 0 0; - } - } - .subtitle { - display: block; - .clearfix(); - margin: 0 0 20px; - > span { - font-size: 18px; - font-weight: normal; - margin: 4px 0 0; - } - } - .title, - .subtitle { - .action { - font-weight: 400; - font-size: 14px; - margin-left: 20px; - text-decoration: underline; - display: inline-block; - text-transform: lowercase; - &:hover { - text-decoration: none; - } - } - } - .content { - .clearfix(); - > .block { - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - } - } - address { - font-style: normal; - } -// Shipping metods - > .block.shipping .box, - > .block.billing .box { - &:extend(.profileBlockWithBg all); - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - } - > .block.shipping, - &.overview > .block.billing { - .box { - &.address { - float: left; - width: 49%; - } - &.method { - float: right; - width: 49%; - } - &.items { - clear: both; - } - } - } -// Overview - &.overview { - > .block.billing { - .clearfix(); - .box.method { - p { - margin: 0 0 10px; - } - th, - td { - font-size: 14px; - padding: 0; - } - } - } - > .block.shipping { - .content { - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - } - } - > .checkout.review { - .grand.total { - margin: 15px 0; - text-align: right; - .label { - font-size: 18px; - font-weight: 400; - } - .price { - color: @secondary1; - font-size: 24px; - font-weight: 700; - } - } - } - .box.method { - .payment.method { - margin: 0; - } - .title { - margin: 0 0 5px; - } - .content { - margin: 0 0 0 10px; - } - } - } - -// Oher goods (can't be shipped: virtual, downloadable) - .block.other .content { - &:extend(.profileBlockWithBg all); - } - -// Change billing - &.change.billing { - .box { - .box-sizing(); - background: @primary1; - float: left; - margin-bottom: 20px; - margin-left: 2%; - padding: 30px; - width: 49%; - &.odd { - clear: left; - margin-left: 0; - } - .actions { - margin: 15px 0 0; - } - } - .actions { - clear: left; - } - } - -// Actions - .actions { - .clearfix(); - margin: 20px 0; - } - &.change.billing .actions { - margin-top: 0; - } - .action { - &.update { - &:extend(.secondary.action all); - } - &.back { - float: left; - margin: 9px 0 0; - span:before { - content: "\00AB\00A0"; - } - } - &.continue, - &.submit { - &:extend(.primary.action all); - &.disabled { - opacity: 0.3; - &:hover { - background: @primaryActionBg; - } - } - } - &.add { - &:extend(.primary.action all); - float: right; - text-decoration: none; - text-transform: uppercase; - } - } - &.success .action.continue { - &:extend(.button.link all); - text-decoration: none; - text-transform: none; - } - -// Tables - .product.name { - margin-bottom: 0; - } - .items.data { - .col { - &.item { - padding-left: 0; - text-align: left; - } - } - th.col { - &.item, - &.qty { - padding-bottom: 5px; - } - } - .mark, - .amount { - text-align: right; - } - tfoot tr { - &.total { - &:first-child td { - border-top: 3px solid #e5e5e5; - padding-top: 15px; - } - &:last-child td { - border-bottom: 0; - } - td { - padding-top: 5px; - padding-bottom: 5px; - text-align: right; - - } - &.grand { - td { - vertical-align: middle; - } - .amount { - color: @secondary1; - font-size: 24px; - } - } - } - } - .applicable { - padding-top: 7px; - } - } - .block .items.data { - tr td { - &:first-child { - padding-left: 0; - } - &:last-child { - padding-right: 0; - } - } - } - .shipping .items.data tr:last-child td { - border-bottom: 1px solid @primary2; - } - .sp-methods, - .items.methods { - margin: 0; - dt { - margin: 0; - } - dd { - margin: 0; - padding: 0; - ul { - margin: 0 0 15px; - padding: 10px; - } - } - } - - &.form.address { - .control.address { - margin-top: -6px; - select { - max-width: 450px; - } - } - } -} - -.block.gift.message { - margin: 30px 0 0; - .title { - font-size: 16px; - font-weight: 400; - margin-bottom: 15px; - } -} - -/* - Magento_Checkout - Gift Message --------------------------------------- */ -.gift.message { - > .legend { - font-size: 16px; - margin: 0 0 20px; - } - .block.items { - .box-sizing(); - background: @primary2; - margin:0 -20px; - //height: 310px; - //overflow: auto; - padding: 20px; - } - dt { - margin: 30px 0 0; - &:first-child { - margin: 0; - } - .title { - font-size: 16px; - margin: 0 0 15px; - } - > .price { - margin: 0 0 10px; - } - } - dd { - margin: 20px 0 0 20px; - } - .field.choice input { - margin-right: 5px; - margin-top: 2px; - vertical-align: top; - } - .activate.message { - display: inline-block; - margin: 10px 0 0; - + div { - .fieldset { - margin-top: 0; - } - } - } - .options.order { - .field.text { - width: 100%; - } - } - .options.individual { - ol { - .resetList(); - } - li { - .clearfix(); - border-bottom: 1px solid @primary2; - margin: 0 0 15px; - padding: 0 0 15px; - overflow: hidden; - } - .number { - border-bottom: 1px solid @primary2; - color: @primary4; - margin: 0 0 15px; - padding: 0 0 5px; - } - .product { - float: left; - margin-right: 20px; - text-align: center; - > .product { - float: none; - margin: 0; - } - .img { - margin-bottom: 5px; - } - } - .options-items-container { - width: 100%; - .field { - .box-sizing(); - width: 100%; - } - } - .field.text { - width: 100%; - } - .item.options { - overflow: hidden; - } - } - .extra-options-container { - margin: 10px 0 0; - .field.choice { - margin: 0 0 10px; - } - } - .multicheckout & { - margin: 20px 0; - .fieldset { - margin: 20px 0; - } - .block.message { - margin: 0; - .fieldset { - margin: 0; - } - } - .field { - display: inline-block; - padding-right: 20px; - vertical-align: top; - width: 50%; - } - } -} - -/* - Magento_Checkout - Shopping Cart --------------------------------------- */ -.cart.container { - .clearfix(); - position: relative; - z-index: 1; -} - -.cart.actions { - padding: 20px 0; - .action.continue { - position: absolute; - text-decoration: underline; - right: 0; - top: 3px; - } - .action.update, - .action.clear { - &:extend(.secondary.action all); - } -} - -.items.data { - width: 100%; - thead tr:last-child th { - padding-bottom: 10px; - } - th > span { - white-space: nowrap - } - th.col.item > span { - display: none; - } - td.col.qty { - width: 40px; - text-align: center; - .control { - margin-top: -6px; - } - } - th.col.qty { - text-transform: uppercase; - } - input.qty { - width: 50px; - text-align: center - } - td.col.price, - td.col.subtotal { - text-align: right; - } - .img.photo.container, - .product.photo { - padding-right: 20px; - display: table-cell; - width: 1%; - vertical-align: top; - } - .product.photo { - .img.photo.container { - display: block; - padding:0; - width:auto; - } - } - .product.details { - display: table-cell; - width: 99%; - vertical-align: top; - } - .item.actions { - text-align: right; - div.actions { - padding-bottom: 30px; - } - } - td { - border-left:0; - border-right:0; - padding: 26px 10px 10px; - vertical-align: top; - background: transparent; - } - td:first-child { - padding-left: 20px; - } - td:last-child { - padding-right: 20px; - } - tbody:nth-child(even) tr { - background: @primary1; - } - th { - border-left:0; - border-right:0; - text-align: center; - font-weight: @baseFontWeight; - font-size: @baseFontSize; - vertical-align: top; - } - tr:first-child th { - font-weight: @baseFontWeight; - font-size: @baseFontSizeBigger; - } - .item.actions td { - padding: 0 20px 10px; - line-height: 16px; - .action { - margin-left: 20px; - } - .action.towishlist { - font-size: @baseFontSize; - } - .action.delete { - vertical-align: top; - margin-top: 0; - } - &:before { - content: ''; - border-top: 1px solid @primary2; - display: block; - height: 0; - overflow: hidden; - margin: 0 0 10px; - } - } - .item.options { - dt { - font-weight: @baseFontWeight; - display: inline; - margin-right: 10px; - float: left; - clear: left; - &:after { - content: ': '; - } - } - dd { - font-weight: @baseFontWeightLighter; - margin: 0 0 10px 10px; - padding: 0; - em:after { - content:':'; - } - } - - } -} - -.cart.table.wrapper { - float: left; - width: 665px; -} - -.cart.summary { - position: relative; - z-index: 1; - margin-top: 33px; - background: @primary1; - display: inline-block; - width: 290px; - padding: 20px; - margin-left: 10px; - .summary.title { - font-size: 20px; - font-weight: 200; - display: block; - border-bottom: 3px solid @primary2; - padding-bottom: 15px; - } - .block { - margin-bottom: 0; - border-bottom: 1px solid @primary2; - > .title { - cursor: pointer; - padding: 10px 5px; - margin: 0; - line-height: 16px; - strong { - font-size: @baseFontSizeMiddle; - font-weight: 600; - &:after { - content: @icon-expand; - font-family: "icons"; - float: right; - font-weight: @baseFontWeight; - font-size: @baseFontSizeBigger; - line-height: 16px; - } - } - &.active strong:after { - content: @icon-collapse; - } - - } - > .content { - display: none; - padding: 15px 15px 20px; - } - &.active { - > .content { - display: block; - } - } - .fieldset { - padding: 0; - margin: 0; - border: 0; - .field { - margin: 0 0 10px; - } - } - font-size: @baseFontSizeMiddle; - input[type="text"] { - padding: 0 5px; - font-size: @baseFontSizeMiddle; - height: 30px; - } - .field:not(.choice) { - .label { - padding: 0 0 5px; - display: block; - } - } - select { - padding: 5px 5px 4px; - font-size: @baseFontSizeMiddle; - } - .action { - &:extend(.primary.action all) - ; - padding: 6px 11px 5px; - span { - font-size: @baseFontSizeMiddle; - line-height: 12px; - } - &.check span { - .actionLink(); - } - } - } -} - -.cart.container { - & > .summary.sticky { - position: fixed; - display: inline-block !important; - } - & > .summary.bottom { - position: absolute; - vertical-align: bottom; - bottom: 0; - } -} - -.cart &>.summary.fixed, -.cart.container &>.summary &>.container.fixed { - position: fixed; - top: 0; -} - -.cart.table.wrapper.detailed + .cart.summary { - margin-top: 54px; -} - - - -.sp-methods, -.items.methods { - dt, - .item.title { - font-weight: bold; - } - dd, - .item.options { - margin: 0 0 15px; - padding: 10px; - } -} -.field.choice.payment { - > .label { - font-weight: bold; - } -} - -.data-table { - width: 100%; - border: 0; - td { - border-right: 1px solid @primary2; - padding: 5px; - vertical-align: top; - } - td:last-child { - border: 0; - } -} - -.cart.totals { - .table.totals { - width: 100%; - } - padding: 20px 0; - td, - th { - text-align: right; - padding: 4px 0 4px 5px; - } - td:not(:first-child) { - strong { - font-size: 24px; - color: @secondary1; - } - } - td:first-child { - text-align: left; - padding-left: 0; - strong { - font-size: @baseFontSize; - } - } -} - -.checkout.methods.items { - background: #fff; - padding: 20px; - .item { - margin: 15px auto; - text-align: center; - } - .action.multicheckout { - text-decoration: underline; - } - .page.title & { - display: none; - } -} - -/* - Magento_Checkout - Mini cart --------------------------------------- */ -.minicart.wrapper { - float: right; - margin-right: 40px; - z-index: 11; - .block.minicart { - .clearfix(); - left: -100%; - margin-top: 15px; - position: absolute; - z-index: 2; - background: @primary1; - border: 2px solid darken(@primary1, 13%); - border-radius: 3px; - text-align: center; - padding: 58px 345px 25px 15px; - &:before { - content: ''; - border-left: 10px solid transparent; - border-right: 10px solid transparent; - border-bottom: 10px solid @primary1; - height: 0; - width: 0; - overflow: hidden; - display: block; - position: absolute; - top: 0; - margin-top: -10px; - margin-right: 25px; - right: 0; - zoom: 1; - z-index: 2; - } - > .content { - margin-top: -33px; - .subtotal { - .clearfix(); - .mark { - display: inline-block; - font-weight: 600; - font-size: 18px; - float: left; - line-height: 24px; - } - > .amount { - text-align: right; - float: right; - display: inline-block; - font-weight: @baseFontWeightBolder; - font-size: 24px; - line-height: 24px; - color: @secondary1; - } - .amount.incl.tax { - display: block; - font-size: @baseFontSize; - &:after { - content: ')'; - } - .price:after { - content: ' ('; - } - } - } - .disclaimer { - font-size: @baseFontSizeMiddle; - } - .actions { - .secondary { - margin-top: 15px; - margin-bottom: -15px; - text-align: right; - a { - color: @secondary1; - } - } - } - .subtitle { - display: block; - text-align: left; - padding: 0 50px; - margin: 0 0 15px 0; - font-weight: @baseFontWeight; - &.empty { - margin: 10px -320px 0 0; - padding: 0; - float: right; - width: 310px; - clear: right; - } - } - } - .minicart.empty.text, - > .title, - > .content .subtotal, - > .content .disclaimer, - > .content > .actions { - margin: 0 -330px 15px 0; - text-align: left; - float: right; - width: 310px; - clear: right; - } - > .title { - .text { - display: none; - } - .qty:before { - content: attr(title) ": "; - } - } - .minicart.empty.text { - margin-top: 15px; - } - > .title strong { - font-weight: 400; - } - } - &.active { - &:before { - content: ''; - position: fixed; - z-index: 1; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: #000; - opacity: 0.01; - } - position: relative; - z-index: 11; - .block.minicart { - left: auto; - right: -20px; - } - } - .action.previous, - .action.next { - .resetAction(); - width: 25px; - overflow: hidden; - span { - .iconAfter(@content: @icon-arrow-right-thick, @size: 42px, @font: "icons"); - .iconHideText(42px); - color: @primary3; - margin-left: -10px; - overflow: hidden; - } - &[disabled] { - opacity: 0.3; - } - position: absolute; - right: 10px; - top: 50%; - margin-top: -22px; - } - .action.previous { - right: auto; - left: 0; - span:after { - content: @icon-arrow-left-thick; - } - } - .action.close { - position: absolute; - top: 10px; - right: 15px; - } - p { - clear: both; - } -} - -.block.minicart.empty > .title, -.eq-ie8 .minicart.wrapper.active:before { - display: none; -} - -/* - Product options --------------------------------------- */ -.minicart { - @textColor: @primary6; - .product.options.wrapper { - position: relative; - display: inline; - z-index: 1; - margin: 7px 0; - .more { - color: @textColor; - font-size: @baseFontSizeMiddle; - line-height: 1; - padding: 0; - border-bottom: 1px dotted @textColor; - cursor: help; - } - &:hover { - z-index: 99; - .product.options.details { - display: block; - } - &:before { - content: ''; - border-left: 10px solid @optionsBg; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - height: 0; - width: 0; - overflow: hidden; - display: block; - position: absolute; - top: 0; - margin-top: 0; - left: -10px; - zoom: 1; - z-index: 2; - } - } - - } - .product.options.details { - display: none; - position: absolute; - background: @optionsBg; - border-radius: 6px; - padding: 10px; - right: 100%; - top: 50%; - margin-top: -20px; - margin-right: 10px; - float: left; - max-width: 200px; - min-width: 100px; - .title { - font-weight: 600; - } - color: @optionsColor; - } - .product.options.list { - padding-left: 10px; - dt { - font-size: @baseFontSizeMiddle; - display: inline; - margin: 0; - padding: 0; - font-weight: 600; - &:after { - content: ': '; - } - &:before { - content: ''; - display: block; - } - } - dd { - font-size: @baseFontSizeMiddle; - display: inline-block; - padding: 0; - margin: 0; - } - } - .item:not(.shown) + .shown, - :first-child { - .product.options.details { - right: auto; - left: 100%; - margin-left: 10px; - } - .product.options.wrapper:before { - border-right: 10px solid @optionsBg; - border-left: 0; - left: auto; - right: -10px; - } - } -} - -.minicart.wrapper .block.minicart > .content > .actions .primary { - .clearfix(); - text-align: center; - .checkout.paypal { - display: inline; - input[type="image"] { - margin-top: 5px; - float: left; - } - &:after { - float: none; - } - } - .action.checkout { - float: right; - } -} - -.block.minicart { - .products.minilist { - @itemWidth : 187px; - float: left; - padding: 0; - border-right: 1px solid darken(@primary1, 13%); - max-width: @itemWidth*3; - padding: 0 30px; - position: relative; - z-index: 1; - .minilist.items { - position: relative; - white-space: nowrap; - } - &.animation { - .items-wrapper { - overflow: hidden; - } - position: relative; - .item { - visibility: visible; - } - } - .item { - padding: 0 20px; - .box-sizing(); - vertical-align: top; - text-align: left; - &:before { - content: ''; - width: 0; - display: block; - border-left: 1px solid darken(@primary1, 13%); - height: 100%; - margin-left: -20px; - position: absolute; - } - &.item:not(.shown) + .shown:before, - &:first-child:before { - display: none; - } - white-space: normal; - display: none; - display: inline-block; - width: @itemWidth; - visibility: hidden; - .box-sizing(); - margin-left: 0; - - .wrapper.active &.shown { - visibility: visible; - } - &.hidden { - margin-left: -@itemWidth !important; - } - - .product.photo { - display: block; - margin-bottom: 10px; - .photo.container { - overflow: visible !important; - margin: 0 auto; - } - .photo.image { - border: 1px solid darken(@primary1, 11%); - display: block; - margin: 0 auto; - } - } - .pricing { - margin-top: 10px; - &:not(.complex) { - .label.display { - display: none; - } - } - .label:after { - content: ': '; - } - } - .actions { - float: right; - } - .action.edit { - font-size: @baseFontSizeMiddle; - } - .product.options.wrapper + .action.edit { - margin-right:16px; - &:before { - content: '|'; - display: inline-block; - text-decoration: none; - padding: 0 3px; - } - &:hover:before { - color: @primary6; - } - } - .action.delete { - position: absolute; - margin-left: -5px; - margin-top: -1.35em; - bottom: 0; - } - } - } -} - -.eq-ie8 .block.minicart { - .products.minilist { - .action.delete, - .action.edit { - visibility: hidden; - } - .shown { - .action.delete, - .action.edit { - visibility: visible; - } - } - .item { - &:before { - border-left: 0; - } - } - } -} - -.action.delete { - display: inline-block; - span { - color: @primary3; - .iconAfter(@content: @icon-trash, @font: 'icons'); - .iconHideText(); - } - &:focus, - &:active, - &:hover { - outline: none; - span { - color: @primary4; - } - } -} - -.action.checkout { - &:extend(.primary.action all); -} - -.action.checkout.shadow { - span { - text-shadow: 0px 1px 2px #000; - } -} - -.action.close { - .resetAction; - span { - .iconAfter(@content: @icon-close-thick, @size: 11px, @font: 'icons'); - .iconHideText(11px); - } -} - -.action.showcart { - .iconAfter(@content: @icon-cart, @size: 32px, @font: 'icons'); - .iconHideText(32px); - margin-top: 20px; - margin-left: 20px; - color: @primary5; - position: relative; - &:hover, - &:active, - &:focus, - &.active { - color: @primary4; - outline: none; - } - - .qty { - position: absolute; - left: 70%; - top: 0; - margin-top: -30%; - text-indent: 0; - background: @secondary1; - display: inline-block; - border: 1px solid @secondary1; - border-radius: 50px; - font-size: @baseFontSize; - font-weight: 600; - color: #fff; - @height: 1.7em; - line-height: @height; - vertical-align: middle; - .box-sizing(); - min-width: 1.1 * @height; - min-height: @height; - text-align: center; - padding: 0 4px; - &:before, - &:after { - content: ""; - } - } - .qty.empty { - display: none; - } -} - -/* - Paypal button --------------------------------------- */ -.checkout.paypal { - display: none; - input[type="image"] { - display: inline-block; - vertical-align: top; - } - display: inline-block; - vertical-align: top; - &.before:before { - content: "- " attr(data-label) " -"; - text-transform: uppercase; - display: inline-block; - line-height: 32px; - font-size: @baseFontSize; - vertical-align: middle; - margin: 0 5px; - } - &.after:after { - content: "- " attr(data-label) " -"; - text-transform: uppercase; - display: inline-block; - line-height: 32px; - font-size: 14px; - vertical-align: middle; - margin: 0 5px; - } - .box.tocart & { - margin-top: 10px; - } -} - -.box.tocart .checkout.paypal { - &.after:after { - display: none; - } - &.after:before { - content: "- " attr(data-label) " -"; - text-transform: uppercase; - display: inline-block; - line-height: 32px; - font-size: @baseFontSize; - vertical-align: middle; - margin: 0 5px; - } -} - -.checkout.methods .checkout.paypal { - &.after:after { - display: block; - text-align: center; - } -} - -/* - Magento_Sales --------------------------------------- */ -.block.reorder { - padding-right: 30px; - .item { - padding-left: 20px; - input { - float: left; - margin-top: 2px; - margin-left: -20px; - } - } - .subtitle { - display: block; - margin: 0 0 15px; - font-weight: 600; - } - .actions { - margin: 15px 0 0; - text-align: left; - .primary, - .secondary { - margin: 0 10px 10px 0; - display: inline-block; - vertical-align: middle; - } - } -} - -/* - Magento_Newsletter --------------------------------------- */ -.block.newsletter { - @fit: 45px; - text-align: left; - .fieldset { - margin: 0; - } - .title { - display: none; - } - .field { - .clearfix(); - } - .label { - display: block; - font-size: 16px; - margin-bottom: 10px; - line-height: 1.2; - } - .control { - float: left; - width: 100%; - .box-sizing(); - padding-right: @fit; - } - .actions { - padding-left: 10px; - float: right; - margin-left: -@fit; - } - input[type="text"] { - width: 100%; - } - .footer & { - width: 310px; - float: right; - } -} - -.action.subscribe { - .resetAction(); - background: @secondary1; - border-radius: 3px; - padding: 7px; - border: 1px solid @secondary1; - vertical-align: top; - span { - .iconAfter(@content: @icon-envelope, @font: 'icons'); - .iconHideText(); - color: #fff; - } -} - -.form.newsletter.manage { - .fieldset { - margin: 0 0 20px; - padding: 0; - border: 0; - .legend { - float: left; - margin: 0 0 20px; - font-weight: 200; - } - .legend + br { - display: block; - clear: both; - } - } - .action.save { - &:extend(.primary.action all); - } - .actions .primary { - margin-bottom: 15px; - } -} - -/* - Widgets --------------------------------------- */ -.widget ul { - .resetList(); -} - -.widget.static.block { - .clearfix(); - .page.header &, - .footer & { - display: inline-block; - } -} - -.widget.link, -.widget.static.block { - .product.info.main + &, - .product.info.detailed + &, - .block.search + & { - clear: both; - } -} - -span.widget.link, -.widget.static.block { - .footer .links & { - margin-left: 3px; - white-space: normal; - &:before { - content: ' | '; - display: inline-block; - margin-right: 3px; - } - } -} - -.widget.link, -.widget.static.block { - .minicart.wrapper .block.minicart > .content & { - clear: right; - float: right; - margin: 0 -330px 15px 0; - text-align: left; - width: 310px; - } - .minicart.wrapper .block.minicart > .content .actions & { - margin-right: 0; - } -} - -.widget.link + .product.info.detailed { - margin-top: 20px; -} - -span.widget.link { - display: inline-block; -} - -.widget.mini.products.images { - .item { - display: inline-block; - margin: 0 3px; - } -} - -/* - Magento_Catalog - Compare --------------------------------------- */ -.block.compare { - > .title .qty { - font-size: 16px; - margin-right: -5px; - &:before { - content: '('; - } - &:after { - content: ')'; - } - } - .item { - padding-right: 20px; - overflow: hidden; - } - .product.name { - float: left; - } - .action.delete { - margin-right: -20px; - float: right; - } - .action.compare { - &:extend(.secondary.action all); - float: right; - } - .action.clear { - float: left; - margin-top: 10px; - } - .actions { - .clearfix(); - margin-top: 15px; - } -} - -.catalog-product-compare-index { - .action.print { - float: right; - margin-top: -50px; - } -} - -.comparison.wrapper { - clear: both; - position: relative; - z-index: 1; - &:after { - content: ''; - position: absolute; - z-index: 2; - right: 0; - top: 0; - height: 100%; - width: 15px; - } - margin-bottom: 50px; -} - -.comparison.container { - overflow-y: hidden; - overflow-x: auto; -} - -.data.comparison { - table-layout: fixed; - - .cell.label { - width: 130px; - padding-left: 10px; - font-weight: 600; - text-align: left; - border-right: 1px solid @primary2; - .attribute.label { - display: block; - width: 100%; - word-break: break-all; - } - &.product { - border-bottom: 1px solid @primary2; - } - } - .cell { - padding: 15px; - vertical-align: top; - p:first-child { - margin-top: 0; - } - .attibute.value { - width: 100%; - overflow: hidden; - } - } - .cell.product { - width: 140px; - &.info { - border-bottom: 1px solid @primary2; - } - } - .cell.attribute { - font-size: @baseFontSizeMiddle; - img { - max-width: 100%; - height: auto; - } - } - td:last-child { - border-right: 1px solid @primary2; - } - tbody:first-child .cell.attribute { - background-color: @primary1; - } - tr:nth-child(odd) .cell.attribute { - background-color: @primary7; - } - tr:nth-child(even) .cell.attribute { - background-color: @primary1; - } - .product.photo { - .img.photo.container { - display: inline-block !important; - } - text-align: center; - display: block; - margin: 0 auto 15px; - } - .actions, - .price-box, - .product.rating, - .product.name { - margin: 15px 0; - } - .addto.links { - margin-top: 15px; - padding-top: 15px; - border-top: 1px solid @primary2; - font-size: @baseFontSizeMiddle; - } - .cell.remove { - padding-top: 0; - padding-bottom: 0; - text-align: right; - .action.delete { - &:extend(.secondary.action all); - float: right; - padding: 4px; - span { - overflow: hidden; - line-height: 0; - &:after { - content: @icon-close-thick; - font-size: @baseFontSizeMiddle; - color: #fff; - } - } - margin-right: -15px; - } - } -} - -.comparison.headings { - position: absolute; - z-index: 2; - top: 0; - left: 0; - width: auto; - background-color: @pageMainBg; - th { - background-color: @pageMainBg; - } -} - -/* - Magento_Catalog - Compare --------------------------------------- */ -.item.link.compare { - .qty { - &:before { - content: '('; - } - &:after { - content: ')'; - } - } -} - -/* - Magento_Catalog - Product lists --------------------------------------- */ -.productItems() { - @spacing: 0 0 10px; - .item.product { - .column(4); - .box-sizing(); - .layout-3 & { - width: 50%; - } - display: inline-block; - vertical-align: top; - margin: 0; - padding: 20px; - float: none; - .product.photo { - float: left; - margin-right: 20px; - } - .product.details { - overflow: hidden; - } - .product.name, - .price-box { - margin: @spacing; - } - .addto.links { - .action:after { - content: ''; - display: block; - } - } - .actions { - visibility: hidden; - .primary { - margin: 0 0 10px; - } - } - &:hover { - .actions { - visibility: visible; - } - } - } -} - -.blocklist() { - clear: both; - margin: 30px 0; - padding-top: 25px; - border-top: 1px solid @primary2; - .products.list { - clear: both; - margin: 0 -20px; - .productItems(); - } -} - -.block.related { - .action.select { - .resetAction(); - .actionLink(); - } - .field.choice.related { - margin: 0 0 10px; - } -} - -.block.widget.viewed, -.block.crosssell, -.block.upsell, -.block.related, -.block.widget.new, -.block.widget.compared { - .blocklist(); -} - -.block.crosssell { - .products.list.items.crosssell { - .clearfix(); - margin: 0 -13px; - .item.product { - .column(2); - padding: 13px; - .product.photo { - float: none; - display: block; - margin: 0 0 10px; - } - margin-bottom: 90px; - .actions { - position: absolute; - } - } - } -} - -.block.widget.viewed { - .products.list.items.widget-viewed-grid { - .item.product { - .column(2); - float: none; - display: inline-block; - .layout-2-left &, - .layout-2-right & { - width: 19.99%; - } - .layout-3 & { - width: 25%; - } - .product.photo { - float: none; - display: block; - margin: 0 0 10px; - } - } - } - .products.list.items.widget-viewed-list { - .item.product { - .column(12); - float: none; - display: inline-block; - } - } -} - -.block.widget.compared { - .products.list.items.widget-compared-grid { - .item.product { - .column(2); - float: none; - display: inline-block; - .layout-2-left &, - .layout-2-right & { - width: 19.99%; - } - .layout-3 & { - width: 25%; - } - .product.photo { - float: none; - display: block; - margin: 0 0 10px; - } - } - } - .products.list.items.widget-compared-list { - .item.product { - .column(12); - float: none; - display: inline-block; - } - } -} - -.block.widget.new { - .products.list.items.widget-new-grid, - .products.list.items.new.grid { - .item.product { - width: 20%; - float: none; - display: inline-block; - .layout-2-left &, - .layout-2-right & { - .column(3); - float: none; - display: inline-block; - } - .layout-3 & { - .column(4); - float: none; - display: inline-block; - } - .product.photo { - float: none; - display: block; - margin: 0 0 10px; - } - } - } - .products.list.items.widget-new-list { - .item.product { - .column(12); - float: none; - display: inline-block; - } - } -} - -// Sidebar widgets -.sidebar .block.widget.viewed, -.sidebar .block.crosssell, -.sidebar .block.upsell, -.sidebar .block.related, -.sidebar .block.widget.new, -.sidebar .block.widget.compared { - border: 0; - padding-top: 0; -} - -// Images and names template -.sidebar .minilist.products.items { - margin: 0; - .item.product { - margin: 0 0 20px; - padding: 0; - position: relative; - width: 100%; - .product.actions { - visibility: hidden; - .transition( visibility .01s ease-in-out 0.1s ); - } - &:hover { - .product.actions { - visibility: visible; - } - } - position: relative; - z-index: 1; - } - .product.details { - overflow: hidden; - padding-bottom: 40px; - } - .product.photo { - float: left; - margin: 0 10px 10px 0; - } - .product.name { - overflow: hidden; - } - .actions { -/* */ - } - .primary { - bottom: -10px; - left: 0; - position: absolute; - } - .action.tocart { - &:extend(.secondary.action all); - padding: 5px 11px; - display: inline-block; - } - .secondary { - position: absolute; - left:100%; - margin-left: -5px; - top:0; - } -} - -// Images only template -.block.widget.photos { - margin: 0 0 30px; - .items { - list-style: none; - .clearfix(); - margin: 0; - padding: 0; - } - .item { - float: left; - margin: 0 3px 3px 0; - padding: 0; - } - .product.photo { - margin-right: 0; - } -} - -.product.info.detailed + .block.upsell, -.product.info.detailed + .block.related { - margin-top: 70px; - clear: none; - float: right; - width: 140px; - border-top: 0; - padding-top: 0; - padding-left: 25px; - border-left: 1px solid @primary2; - .products.list { - margin: 0; - .item.product { - display: block; - width: auto; - padding: 13px 0; - .product.photo { - float: none; - display: block; - margin: 0 0 10px; - } - } - } -} - -.block.widget { - @optionsHeigth: 23px; - .pager { - float: right; - .amount { - float: left; - line-height: @optionsHeigth + 2px; - margin: 2px 15px 0 0; - display: none; - } - .text { - display: none; - } - } - .pages { - margin-left: 15px; - float: left; - .label { - line-height: @optionsHeigth + 2px; - display: inline-block; - } - strong.label { - font-weight: 400; - float: left; - line-height: @optionsHeigth + 2px; - margin-top: 2px; - margin-right: 5px; - display: none; - } - input { - width: 30px; - margin: 0 5px; - text-align: center; - padding: 0 5px; - height: @optionsHeigth + 2px; - line-height: @optionsHeigth + 2px; - } - > ol { - .resetList; - display: inline-block; - vertical-align: top; - margin-top: 2px; - line-height: @optionsHeigth + 2px; - vertical-align: middle; - li { - display: inline; - } - strong, - a { - padding: 0 3px; - } - strong { - font-weight: 400; - color: @secondary1; - } - } - } - .action.next, - .action.previous { - overflow: hidden; - display: inline-block; - vertical-align: middle; - span { - color: @primary3; - .iconAfter(@content: '', @font: "icons"); - .iconHideText(); - } - } - .action.next span:after { - content: @icon-arrow-right-thin; - } - .action.previous span:after { - content: @icon-arrow-left-thin; - } -} - -// Orders and returns -.find.orders { - .label { - display: block; - margin: 0 0 3px; - } - .control { - margin: 0 0 10px; - } - .action.submit { - &:extend(.secondary.action all); - padding: 5px 11px; - } -} - -/* - Magento_Catalog - Layered Navigation --------------------------------------- */ -.block.filter { - .subtitle { - display: none; - } - > .content { - padding: 0; - } - .filtered { - .item { - border-top: 1px solid @primary3; - padding: 2px 0 5px; - margin: 0 0 5px; - position: relative; - z-index: 1; - } - .label { - font-weight: 600; - text-transform: uppercase; - display: block; - } - } - .action.remove { - overflow: hidden; - display: inline-block; - padding: 4px; - position: absolute; - top: -1px; - right: 0; - background: @primary3; - span { - color: #fff; - .iconAfter(@content: @icon-close-thick, @size: 13px, @font: "icons"); - .iconHideText(13px); - } - } - .actions { - margin-bottom: 30px; - } - .action.reset { - font-size: 12px; - text-transform: lowercase; - text-decoration: underline; - } - dt { - text-transform: uppercase; - } - dd { - margin: 0; - padding: 15px 0 25px; - } - .count { - font-size: 12px; - &:before { - content: ' ('; - } - &:after { - content: ')'; - } - } -} - -/* - Magento_Catalog - Product Listing --------------------------------------- */ -.toolbar { - @optionsHeigth: 23px; - clear: both; - margin: 17px 0; - &:first-child { - margin-top: 0; - } - &.alternative { - direction: rtl; - .pager { - direction: ltr; - } - .settings { - display: inline; - direction: ltr; - } - .pages, - .amount, - .limiter { - border-left: 1px solid @primary2; - padding: 2px 0 2px 15px; - } - } - .amount { - display: none; - } - .clearfix(); - .settings { - display: inline; - } - .modes { - margin-left: 30px; - display: inline-block; - margin-top: 3px; - margin-right: 14px; - vertical-align: top; - .label { - display: none; - } - } - .limiter, - .sorter { - .clearfix(); - padding: 2px 0; - float: left; - display: inline-block; - select { - margin-top: 1px; - margin-right: 5px; - } - } - .options { - float: left; - border: 1px solid @primary2; - white-space: nowrap; - height: @optionsHeigth; - line-height: @optionsHeigth; - overflow: visible; - display: block; - padding: 0 7px; - .current { - font-weight: 400; - float: left; - padding-right: 7px; - } - ul { - .resetList(); - height: 0; - overflow: hidden; - clear: both; - padding: 0 30px 0 7px; - margin: 0 -8px; - border: 1px solid @primary3; - visibility: hidden; - top: -(@optionsHeigth + 1px); - background: #fff; - position: relative; - z-index: 2; - } - .action.switch { - float: right; - margin-top: 4px; - } - .selected { - color: @secondary1; - } - &.active { - ul { - height: auto; - visibility: visible; - } - } - } - .pager { - float: right; - .amount { - float: left; - line-height: @optionsHeigth + 2px; - margin: 2px 15px 0 0; - } - .text { - display: none; - } - } - .pages { - margin-left: 15px; - float: left; - .label { - line-height: @optionsHeigth + 2px; - display: inline-block; - } - strong.label { - font-weight: 400; - float: left; - line-height: @optionsHeigth + 2px; - margin-top: 2px; - margin-right: 5px; - display: none; - } - input { - width: 30px; - margin: 0 5px; - text-align: center; - padding: 0 5px; - height: @optionsHeigth + 2px; - line-height: @optionsHeigth + 2px; - } - > ul { - .resetList(); - display: inline-block; - vertical-align: top; - margin-top: 2px; - line-height: @optionsHeigth + 2px; - vertical-align: middle; - li { - display: inline; - .label { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0,0,0,0); - border: 0; - } - } - strong, - a { - padding: 0 3px; - } - strong { - font-weight: 400; - color: @secondary1; - } - } - } -} - -/* - Magento_Catalog - Product List --------------------------------------- */ -@imageHeight: 180px; -@imageWidth: 180px; - -.category.image { - img { - max-width: 100%; - } -} - -.products.wrapper .products.list { - .item { - .product.photo { - display: block; - margin-bottom: 10px; - text-align: center; - > .photo { - display: block; - margin: 0 auto; - } - } - z-index: 1; - position: relative; - border: 1px solid transparent; - background: transparent; - &:hover { - border: 1px solid @primary3; - background: @primary1; - .product.actions { - opacity: 1; - visibility: hidden; - .action.tocart, - .secondary { - visibility: visible; - } - } - z-index: 99; - } - .product.actions { - opacity: 0.8; - visibility: hidden; - .action.tocart, - .secondary { - visibility: hidden; - } - } - .price-box, - .product.reviews { - display: block; - margin-bottom: 7px; - } - .secondary { - border: solid @primary3; - .box-sizing(); - white-space: nowrap; - position: absolute; - .action { - padding: 10px; - white-space: normal; - vertical-align: top; - display: inline-block; - line-height: 1; - } - } - } -} - -.products.wrapper.grid { - margin-bottom: 20px; -} - -.products.wrapper.grid .products.list { - .item.product { - .box-sizing(); - @total-columns: 10; - .column(2); - display: inline-block; - float: none; - .layout-2-left &, - .layout-2-right & { - @total-columns: 12; - .column(3); - display: inline-block; - float: none; - margin-bottom: 30px; - } - .layout-3 & { - @total-columns: 12; - .column(4); - display: inline-block; - float: none; - margin-bottom: 30px; - } - padding: 9px 9px 9px; - vertical-align: top; - } - .secondary { - border-width: 1px; - background: @primary1; - top: 100%; - .box-sizing(); - left: -1px; - right: -1px; - .action { - padding: 10px 0; - text-align: center; - width: 49%; - } - } -} - -.products.wrapper.list .products.list { - margin-bottom: 20px; - .item.product { - .clearfix(); - display: block; - border-bottom: 1px solid @primary3; - padding: 9px 9px 9px 9px; - .product.details { - padding-bottom: 40px; - } - margin-bottom: -1px; - } - .product.details { - display: table; - } - .product.photo { - float: left; - margin-right: 9px; - margin-bottom: 0; - } - .secondary { - bottom: 0; - top: auto !important; - margin-left: 18px; - border-width: 1px 0 0; - right: 20px; - } - .product.description { - margin: 9px 0; - } -} - -/* - General product item styling --------------------------------------- */ -.product.name { - color: @primary6; - font-weight: 600; - line-height: 1.2; - display: block; - margin-bottom: 10px; -} - -.price-box p, -.pricing p { - margin: 5px 0; - &:first-child { - margin-top: 0; - } - &:last-child { - margin-bottom: 0; - } -} - -.product.details .price-box .price-excluding-tax, -.product.details .price-box .price-including-tax { - display: block; -} - -.old-price, -.old.price { - text-decoration: line-through; -} - -.special-price, -.special.price { - color: @secondary1; -} - -.stock[title] { - line-height: 16px; - span:before { - content: ''; - line-height: 16px; - background: #42b649; - display: inline-block; - border-radius: 5px; - width: 10px; - height: 10px; - margin-right: 5px; - vertical-align: middle; - } - &.unavailable { - color: @primary3; - span:before { - background: @primary3; - } - } -} - -.product.item .product.description { - font-size: @baseFontSizeMiddle; -} - -.action.tocart { - &:extend(.primary.action all); - padding: 5px 11px; - - .block .product.actions & { - display: inline-block; - margin: 10px 0; - } -} - -.action.tocompare, -.action.towishlist { - font-size: 12px; - span:before { - content: "\002B\00A0"; - } - .item.product & { - margin-left: 0; - } -} - -/* - Magento_Catalog - Product View --------------------------------------- */ -.fieldset { - .formFieldset(); - > .field { - .formField(); - } -} - -.product.info.main { - float: right; - width: 430px; - padding-bottom: 30px; - - .layout-2-left &, - .layout-2-right & { - width: 370px; - } - .layout-3 & { - float: none; - width: 100%; - } -} - -.product.info.main { - .price-box { - font-size: 20px; - padding-bottom: 10px; - margin: 15px 0; - line-height: 1.2; - font-weight: @baseFontWeightLighter; - } - .page.title.product + .price-box { - border-bottom: 1px solid @primary2; - } - .col.price .price-box { - margin: 0; - } - p { - margin: 5px 0; - } - .old-price { - font-size: @baseFontSizeBigger; - .price-label { - //display: none; - } - .price { - text-decoration: line-through; - } - } - .stock { - margin: 15px 0; - } - .product.options.bottom { - .price-box { - display: none; - } - } - .product.addto.links { - margin: 15px 0 0; - padding-top: 10px; - border-top: 1px solid @primary2; - .action { - float: left; - margin-right: 15px; - } - } - .product.alert { - font-size: 12px; - margin: 5px 0; - } -} - -.product.main.info { - .product.options.wrapper { - .field { - .fieldStyle(); - .formField(); - &:not(.choice) > .label { - .labelStyle(); - } - } - .type-configurable & { - select { - min-width: 40%; - width: auto; - padding: 2px; - } - } - } - .product.options.wrapper .fieldset { - margin: 0; - .field.required .control .field.choice .label span:after { - content: ""; - } - .field.date { - input[type="text"] { - width: auto; - } - } - .datetime-picker + .ui-datepicker-trigger { - margin: 0 15px 0 7px; - } - .payment.product.options, - .payment.product.schedule { - .content { - margin: 5px 0 0; - } - } - } -} - -.action.primary.customize, -.action.primary.tocart { - &:extend(.primary.action all); - line-height: 16px; - padding: 9px 15px; - span { - font-weight: 400; - font-size: @baseFontSizeBigger; - } -} - -.product.media { - float: left; - width: 540px; - padding-bottom: 30px; - - .layout-2-left &, - .layout-2-right & { - width: 400px; - } - .layout-3 & { - float: none; - width: 100%; - } -} - -.box.tocart { - .clearfix(); - margin: 15px 0; - .field { - float: left; - padding-right: 10px; - } - .label { - display: block; - text-align: left; - font-weight: 600; - text-transform: uppercase; - line-height: 25px; - } - .control { - width: 60px; - text-align: center; - } - .actions { - float: left; - padding-top: 24px; - } - .qty { - text-align: center; - } -} - -.prices.tier { - padding: 20px; - margin: 15px 0; - background: @primary1; - strong { - font-weight: @baseFontWeight; - } -} - -.product.social.links { - float: right; - text-align: right; -} - -.action.mailto { - span { - .iconAfter(@content: @icon-envelope, @font: "icons"); - .iconHideText(); - color: @primary3; - } -} - -.product.photo.thumbs { - float: left; - padding-left: 15px; - .title { - display: none; - } - .item.thumb { - margin-bottom: 8px; - img { - border: 1px solid transparent; - } - .active img { - border: 1px solid @primary5; - } - } -} - -.product.photo.main { - float: left; - text-align: center; - .notice { - font-size: 11px; - } -} - -.magento-zoom > .img > img { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - max-height: 100%; - max-width: 100%; -} - -.product.attibute.sku { - font-size: @baseFontSizeMiddle; - .value { - display: inline - } - .type:after { - content: '#'; - } -} - -.product.attibute.description { - img { - max-width: 100%; - height: auto; - } -} - -@media only screen -and (max-width : 99999px) { - .product.data { - .column(10); - .data-tabs(); - .data-tabs-styling(); - } - - .temp-upsell-placeholder { - .column(2); - background: red; - height: 200px; - margin-top: 50px; - } -} - -@media only screen -and (max-width : 768px) { - .product.data { - .column(12); - .data-accordion(); - .data-accordion-styling(); - } - - .temp-upsell-placeholder { - .column(12); - background: red; - height: 200px; - margin-top: 20px; - } -} - -// Catalog Inventory -.availability.only { - &.detailed { - display: none; - &.active { - display: block; - } - } - .data.table { - width: 100%; - } -} - -/* - Magento_Bundle - Product View --------------------------------------- */ -body.type-bundle { - overflow-x: hidden; -} - -@media only screen -and (max-width : 768px) { - body.type-bundle { - overflow: auto; - .customize { - &:before { - left: -10px; - right: -10px; - - } - } - } -} - -.product.info.main { - .action.primary.customize { - margin: 40px 0; - } -} - -.bundle.options.container { - margin: 45px 0; - clear: both; - position: relative; - z-index: 1; - &:before { - position: relative; - z-index: 1; - content: ''; - display: block; - position: absolute; - left: -999em; - right: -999em; - z-index: -1; - background: @primary1; - top: 0; - bottom: 0; - } - - .product.add.form { - .clearfix(); - position: relative; - z-index: 1; - display: none; - padding: 45px 0; - } - .product.options.wrapper { - float: left; - width: 500px; - - .layout-2-left &, - .layout-2-right & { - width: 450px; - } - .layout-3 & { - width: 360px; - } - } - .product.options.bottom { - .box-sizing(); - float: left; - padding: 0 10px 20px 30px; - width: 500px; - clear: left; - } - - .prices.tier { - background: @primary2; - + .price-box { - font-size: @baseFontSizeBigger; - .price { - color: @secondary1; - } - } - } -} - -.fieldset.bundle.options { - border: 0; - padding: 0; - margin: 0; - .legend { - font-size: 26px; - font-weight: 200; - float: left; - margin-bottom: 20px; - } - .legend + br { - display: block; - clear: both; - } - .bundle-slide-back { - float: right; - } - > .field { - > .label { - font-size: 20px; - font-weight: 200; - display: block; - margin-bottom: 20px; - } - margin: 0 0 50px; - padding: 20px; - background: @primary7; - &:last-child { - margin-bottom: 0; - } - } - .nested { - .field { - margin: 10px 0; - } - .field.qty { - margin-top: 20px; - .label { - display: inline-block; - vertical-align: middle; - span:after { - content: ':'; - } - } - .control { - width: 60px; - display: inline-block; - vertical-align: middle; - } - input { - text-align: center; - } - } - } -} - -.product.options.wrapper { - .nested.mage-error-group { - position: relative; - z-index: 1; - .field { - z-index: 2; - position: relative; - } - &:before { - z-index: 1; - border:1px solid @nonValidHilight !important; - background: fadeout(@nonValidHilight,96%); - content: ''; - left:-8px; - right:-8px; - top:-5px; - bottom:-5px; - display: block; - position: absolute; - } - } -} - -.block.bundle.summary { - background: @primary7; - margin-top: 54px; - float: right; - position: relative; - width: 380px; - - .layout-2-left &, - .layout-2-right & { - width: 320px; - } - .layout-3 & { - width: 230px; - } - > .title { - font-weight: 400; - border-bottom: 3px solid @primary2; - line-height: 1; - padding: 20px 20px 10px; - margin-bottom: 0; - } - .photo { - float: left; - border: 1px solid @primary2; - margin-right: 20px; - .photo { - float: none; - border: none; - margin-right: 0; - } - } - > .content { - padding: 20px; - } - .price-box { - .clearfix(); - padding: 20px 0 0; - clear: both; - line-height: 24px; - .price-label { - float: left; - font-size: 18px; - font-weight: 600; - } - .full-product-price { - float: right; - .price { - color: @secondary1; - font-weight: 700; - font-size: 24px; - } - } - } - .box.tocart { - padding: 10px 0 20px; - border-top: 1px solid @primary2; - border-bottom: 1px solid @primary2; - } - .addto.links { - .action { - font-size: 14px; - margin-right: 20px; - &:last-child { - margin-right: 0; - } - } - } - .subtitle { - display: block; - margin: 20px -20px 0; - font-weight: @baseFontWeightLighter; - font-size: 20px; - border-bottom: 3px solid @primary2; - line-height: 1; - padding: 20px 20px 10px; - margin-bottom: 0; - } - .bundle.summary { - div > ul { - list-style: none; - margin: 10px 0 0; - padding: 0; - > li { - margin: 0 0 10px; - > div > div { - margin: 0 0 5px; - } - } - } - } -} - -.action.back.customization { - .resetAction(); - .actionLink(); - position: absolute; - top: 57px; - right: 0; -} - -/* - CMS --------------------------------------- */ -img[align="left"] { - margin: 0 22px 22px 0; -} - -img[align="right"] { - margin: 0 0 22px 22px; -} - -.home.main.slider { - img { - width: 100%; - display: block; - } -} - -/* - Magento_Customer --------------------------------------- */ -.customer.welcome { - display: inline-block !important; - position: relative; - z-index: 1; - cursor: pointer; - .menu { - padding:0; - margin: 0; - } - .menu > ul { - font-weight: 600; - font-size: @baseFontSizeMiddle; - margin: 0; - position: absolute; - top: 100%; - margin-left: -11px; - float: left; - right: 0; - text-align: left; - background: @primary1; - border: 1px solid darken(@headerBg, 5%); - visibility: hidden; - opacity: 0; - .transition(visibility 0s linear .2s); - li { - margin: 15px; - display: block; - white-space: nowrap; - } - } - &.active { - z-index: 9999; - .menu > ul { - visibility: visible; - opacity: 1; - .transitionDelay(0s); - } - } - .page.header .content & .customer.name { - font-weight: 400; - span { - color: @primary5; - .iconAfter(@content: @icon-arrow-bottom-filled, @font: "icons"); - &:after { - line-height: @base-font-size; - } - } - &:focus span, - &:hover span, - &.active span { - color: @primary6; - outline: 0; - } - &.active span:after { - content: @icon-arrow-up-filled; - } - } - & + li { - display: none; - } -} - -.customer.welcome + li, -.customer.welcome + .greet.welcome + li { - display: none !important; -} - -.login.container { - .clearfix(); - background: @primary1; - padding: 40px; - position: relative; - z-index: 1; - padding-bottom: 150px; - .block { - .box-sizing(); - float: left; - width: 50%; - > .title { - margin-bottom: 25px; - } - .actions { - .box-sizing(); - text-align: right; - position: absolute; - bottom: 140px; - width: 50%; - padding: 0 40px; - .secondary { - margin-bottom: -2em; - margin-top: 0.8em; - line-height: 1.2em; - float: right; - } - } - &.login { - padding-right: 90px; - .actions { - margin-left: -90px; - } - } - &.new { - padding-left: 40px; - .actions { - margin-left: -40px; - } - &:before { - content: ''; - border-left: 1px solid; - .borderColor(@primary1); - position: absolute; - top: 40px; - margin-left: -40px; - bottom: 60px; - } - } - } - .action.login, - .action.create { - &:extend(.primary.action all); - } -} - -.form.login { - .fieldset.login { - .formFieldset(); - .formInline(40%); - margin: 0; - padding: 0; - border: 0; - .field { - .fieldStyle(); - .label { - padding-top: 7px; - padding-right: 10px; - text-align: right; - } - } - } -} - -.form.login, -.step.login { - .field.persistent { - .link.tip { - display: inline-block; - padding-top: 7px; - } - .checkbox { - margin-top: 10px; - } - } -} - -.action.reload { - .resetAction(); - position: absolute; - background: #fff; - padding: 2px; - span { - // TODO: add 'reload' icon to mui - .iconAfter(@content: @icon-info, @size: 22px, @font: "icons"); - .iconHideText(22px); - color: @secondary1; - text-shadow: 0px 1px rgba(0, 0, 0, 0.4); - } -} - -/* - Registration --------------------------------------- */ -.form.send.friend, -.form.address.edit, -.form.edit.account, -.form.search.advanced, -.form.orders.search, -.form.contact, -.form.password.forget, -.form.create.account, -.form.wishlist.share, -.form.password.reset, -.form.paypal.review, -.form.send.confirmation { - .formCommon(); -} - -.form.send.friend { - .fieldset.recipients { - .fields { - .clearfix(); - margin-bottom: 30px; - position: relative; - z-index: 1; - .field { - .box-sizing(); - width: 50%; - padding-right: 20px; - float: left; - } - } - .action.delete { - position: absolute; - right: 0; - top: 50%; - } - .actions { - width: 100%; - margin: 0; - .action.add { - &:extend(.secondary.action all); - } - .primary { - float: left; - } - } - } -} - -.form.address.edit .field.company, -.form.edit.account .field.password.current, -.form.edit.account .field.choice { - margin-right: 30%; -} - -.form.address.edit .field.note.default, -.form.address.edit .field.choice.set, -.form.wishlist.share .field.emails, -.form.wishlist.share .field.text, -.form.wishlist.share .field.choice { - width: 100%; -} - -// Move to other place -.form.search.advanced, -.form.orders.search, -.form.contact { - .box-sizing(); - background: @primary1; - padding: 40px; - .fieldset { - width: auto; - background: none; - margin-bottom: 0; - .legend { - background: none; - } - } - .actions { - width: auto; - padding-right: 30px; - text-align: right; - .action { - &:extend(.primary.action all); - } - } - .fields.range { - .field:first-child { - .control { - padding-right: 30px; - position: relative; - &:after { - content: '\2014'; - display: inline-block; - margin-right: 0; - position: absolute; - right: 6px; - top: 5px; - text-align: center; - width: 25px; - } - } - } - } -} - -.form.contact { - .fieldset { - .field { - float: left; - width: 40%; - margin-right: 60%; - &.comment { - width: 55%; - margin-left: -55%; - margin-right: 0; - float: none; - textarea { - min-height: 13.2em; - } - } - } - } -} - -/* - Review paypal express checkout order --------------------------------------- */ -.paypal.review.view { - .paypal.subtitle.caption { - margin-bottom: 25px; - .action { - margin-left: 10px; - } - strong { - font-size: 20px; - font-weight: 200; - line-height: 1.2; - } - } - .form.paypal.review { - .fieldset { - width: 100%; - &.shipping.address { - float: right; - width: 49%; - } - &.billing.address { - float: left; - width: 49%; - } - &.shipping.method { - clear: both; - } - .nested { - margin-top: 10px; - } - } - } - .actions { - margin-top: 35px; - .action.update { - &:extend(.secondary.action all); - margin-left: 10px; - } - } - .paypal.review.items { - clear: left; - } - .data.table.paypal.review.items { - width: 100%; - td, - th { - padding: 10px 20px; - text-align: left; - &.col.total { - text-align: right; - } - } - th { - font-size: 16px; - font-weight: 400; - } - tbody tr:nth-child(odd) td { - background: @primary1; - } - tfoot tr:first-child td { - border-top: 3px solid @primary2; - padding-top: 15px; - } - } - - .block.shipping.information, - .block.billing.information { - margin-bottom: 45px; - > .content { - .clearfix(); - } - .box { - float: left; - padding-right: 2%; - width: 48%; - > .content { - background: @primary1; - padding: 30px; - .select { - width: 100%; - } - .actions { - margin: 25px 0 0; - } - } - } - address { - font-style: normal; - } - .subtitle { - display: block; - font-size: 18px; - font-weight: 200; - margin-bottom: 20px; - .action { - display: inline-block; - font-size: 14px; - font-weight: 400; - margin-left: 20px; - text-decoration: underline; - text-transform: lowercase; - } - } - } -} - -.paypal.iframe { - display: none; -} - -/* - MISC --------------------------------------- */ -.action.back { - span:before { - content: '\00AB\00A0'; - } -} - -/* - Magento_Customer - Account --------------------------------------- */ -.layout-2-left.account { - .column.main { - .column(9); - } - .column.left { - .column(3); - } -} - -.block.account.nav { - .title { - font-size: 18px; - } - .item { - margin-bottom: 10px; - &.current { - color: @secondary1; - a { - color: @secondary1; - } - } - } - .item strong { - font-weight: 400; - } -} - -.account { - .pager { - .amount, - .limiter { - display: inline-block; - } - } - .form { - .fieldset > .legend { - margin: 0 0 30px; - } - } - .column.main { - > .actions, - .form > .actions, - .block > .actions { - .clearfix(); - margin: 30px 0 0; - > .primary { - float: right; - } - > .secondary { - float: left; - } - } - } - .data.table { - width: 100%; - td, - th { - padding: 10px 20px; - text-align: left; - &.col.actions { - white-space: nowrap; - .action:last-child { - margin-left: 20px; - } - .action:first-child, - .action.details { - margin-left: 0; - } - } - em { - font-style: normal; - } - } - th { - font-size: 16px; - font-weight: @baseFontWeight; - } - tr:nth-child(odd) td { - background: @primary1; - } - } -} - -.block.dashboard { - .title .action, - .subtitle .action { - font-weight: @baseFontWeight; - font-size: @baseFontSize; - margin-left: 20px; - text-decoration: underline; - display: inline-block; - text-transform: lowercase; - span { - } - &:first-letter { - text-transform: uppercase; - } - } - .box { - .box-sizing(); - float: left; - width: 50%; - line-height: 1.666; - address { - font-style: normal; - } - } - .content { - .clearfix(); - } -} - -.block.dashboard:not(.welcome):not(.orders) { - .content { - background: @primary1; - padding: 30px; - } - .subtitle { - font-size: 18px; - font-weight: @baseFontWeightLighter; - display: block; - margin-bottom: 20px; - } -} - -.data.table.orders { - td, - th { - &.col.total { - text-align: right; - } - } -} - -/* - Address book --------------------------------------- */ -.block.addresses:not(.dashboard) { - .box-sizing(); - float: left; - .title .action, - .subtitle .action { - font-weight: @baseFontWeight; - font-size: @baseFontSize; - margin-left: 20px; - text-decoration: underline; - display: inline-block; - text-transform: lowercase; - &:first-letter { - text-transform: uppercase; - } - } - .content { - background: @primary1; - padding: 30px; - } - .subtitle { - font-size: 18px; - font-weight: @baseFontWeightLighter; - display: block; - margin-bottom: 20px; - } - .box { - &:first-child { - margin-bottom: 30px; - } - } - address { - line-height: 1.666; - font-style: normal; - } - &.default { - float: left; - width: 60%; - } - &.list { - float: right; - width: 35%; - .item { - margin-bottom: 30px; - } - .item.actions { - margin-top: 15px; - } - .action { - margin-right: 10px; - } - } -} - -.customer-address-index .column.main .actions { - clear: left; -} - -/* - My Account -> My Product Reviews --------------------------------------- */ -.data.table.reviews { - .product.name { - margin: 0; - } -} - -/* - Wishlist sidebar --------------------------------------- */ -.block.wishlist { - .subtitle { - display: block; - font-weight: 600; - margin: 0 0 15px; - } -} - -/* - My Account -> My Wishlist --------------------------------------- */ -.wrapper.table { - .data.table.wishlist { - @optionsBg: rgba(0, 0, 0, .8); - @optionsColor: #fff; - - margin-bottom: 15px; - - thead th { - padding-top: 0; - padding-bottom: 10px; - text-align: left; - font-weight: @baseFontWeight; - font-size: @baseFontSizeBigger; - } - - td, - th { - padding: 16px 10px 10px; - vertical-align: top; - } - - td:first-child, - th:first-child { - padding-left: 20px; - } - - td:last-child, - th:last-child { - padding-right: 20px; - } - - tbody tr:nth-child(even) { - background: @primary1; - } - - textarea { - width: 100%; - } - - .box.tocart .qty { - width: 50px; - } - - .col.photo { - width: 100px; - } - .col.actions { - width: 200px; - .price-excluding-tax, - .price-including-tax { - display: block; - } - } - } - & + .actions { - .primary { - margin-bottom: 15px; - .action.share, - .action.update { - &:extend(.primary.action all); - padding: 5px 11px; - } - .action.update { - margin-left: 5px; - } - } - } -} -/* - Page -> Advanced Search --------------------------------------- */ -.form.search.advanced { - .range.price.fields.group { - .field { - .box-sizing(); - .column(6); - padding-right: 0; - } - .field:first-child input { - width: 96%; - } - } - .range.dates.fields.group { - .field { - .box-sizing(); - .column(6); - padding-right: 0; - .control { - padding-right: 20px; - } - } - .field:first-child .control { - padding-right: 50px; - .ui-datepicker-trigger { - right: 32px; - } - } - } - .group.price { - .addon { - .addafter { - color: @textColor; - border: none; - background: none; - padding: 0 20px 0 5px; - } - } - } -} - -/* - Popular Search Terms --------------------------------------- */ -.search.terms { - .resetList(); - .item { - display: inline-block; - margin-right: 3px; - } -} - -/* - My Account -> My orders --------------------------------------- */ -.order.details { - .clearfix(); - - .status { - margin: 0 0 .5em; - line-height: 1.2; - font-weight: 400; - font-size: 30px; - float: left; - } - - .subtitle.caption, - .title { - strong { - line-height: 1.2; - font-weight: 200; - font-size: 20px; - } - .action { - margin-left: 10px; - } - } - - .subtitle.caption { - margin-bottom: 45px; - } - - .order.toolbar { - clear: none; - float: right; - - .action { - margin-left: 10px; - } - } - - .block.order { - float: left; - width: 48%; - padding-right: 2%; - - &.billing.address { - clear: left; - } - .content { - background: @primary1; - padding: 30px; - } - p { - margin-top: 0; - &:last-child { - margin-bottom: 0; - } - } - } - - .order.info { - clear: both; - - > dt { - line-height: 1.2; - font-weight: 200; - font-size: 20px; - } - - > dd { - margin: 0; - .items { - .clearfix(); - background: @primary1; - margin: 10px 0 0 0; - padding: 30px; - .item { - float: left; - margin-right: 15px; - } - } - } - } - - .additional.details { - margin-bottom: 45px; - .order.comments { - background: @primary1; - padding: 30px; - } - .subtitle.caption { - font-size: 20px; - font-weight: 200; - line-height: 1.2; - margin-bottom: 15px; - } - &.gift { - .gift.message { - background: @primary1; - padding: 30px; - dt { - margin: 0; - } - dd { - margin: 0 0 0 40px; - } - } - } - } -} - -.order.details.items { - .order.toolbar { - margin: 5px 0 0 0; - } - .order.title { - margin-bottom: 10px; - } - h3.product-name { - margin: 0; - } - .action.show { - text-decoration: none; - .iconAfter(@content: @icon-arrow-bottom-filled, @size: 12px, @font: "icons"); - &.expanded:after { - content: @icon-arrow-up-filled; - } - } - .gift.message.details { - position: relative; - } - .gift.message { - margin: 0; - } - .action.close { - position: absolute; - right: 0; - top: 0; - span { - .iconAfter(@content: @icon-close-thick, @size: 12px, @font: "icons"); - } - } - + .order.details.view { - margin-top: 45px; - } -} - -.shipping-tracking-popup { - .action.close { - &:extend(.secondary.action all); - text-indent: 0; - - span { - width: auto; - text-indent: 0; - &:after { - content: ""; - display: none; - } - } - } -} - -.data.table { - th, td { - border-right-width:0; - } -} -.data.table.order { - margin-bottom: 45px; - width: 100%; - - thead th { - padding: 0 10px; - } - - thead tr:last-child th { - padding-bottom: 10px; - } - - td.col.qty { - width: 90px; - text-align: left; - } - - td.col.price, - td.col.subtotal { - text-align: left; - } - td { - padding: 16px 10px 10px; - vertical-align: top; - - h4 { - margin: 0; - } - } - td:first-child, - th:first-child { - padding-left: 20px; - } - td:last-child, - th:last-child { - padding-right: 20px; - } - tbody:nth-child(even) tr { - background: @primary1; - } - th { - text-align: left; - font-weight: 400; - font-size: 14px; - vertical-align: top; - } - tr:first-child th { - font-weight: 400; - font-size: 16px; - } - .item-options { - margin: 5px 0; - - dt { - font-weight: 400; - display: inline; - margin-right: 10px; - float: left; - clear: left; - - &:after { - content: ': '; - } - } - dd { - font-weight: 200; - margin: 0 0 5px 10px; - padding: 0; - } - } - - tfoot tr:first-child td { - border-top: 3px solid @primary2; - padding-top: 15px; - } - - &.tracking { - th, td { - padding: 0; - } - .label { - width: 40%; - } - } - .qty.summary { - .resetList(); - .label { - &:after { - content: ": "; - } - } - } -} - -/* - My Account -> Billing agreements --------------------------------------- */ -.billing.agreements { - .data.table { - margin-bottom: 40px; - } - .form.new.agreement { - .formCols(30%); - - .fieldset { - margin: 0; - > .legend { - margin: 0 0 20px; - } - } - - .action.create { - padding-top: 7px; - padding-bottom: 6px; - } - } -} - -/* - My Account -> Recurring payments --------------------------------------- */ -.recurring.order.details { - .block.view.info { - .clearfix(); - .box { - float: left; - padding-right: 2%; - width: 48%; - .subtitle { - font-size: 20px; - font-weight: 200; - line-height: 1.2; - display: inline-block; - margin-bottom: 15px; - } - .content { - background: @primary1; - padding: 30px; - .clearfix(); - } - .data.table { - th, - td { - padding: 4px 7px; - } - } - } - } - > .actions { - .primary { - text-align: right; - .action { - &:extend(.primary.action all); - } - } - } -} - -/* - My Account -> Send confirmation link --------------------------------------- */ -.form.send.confirmation { - .action.send { - &:extend(.primary.action all); - } -} - -/* - Overlay popup --------------------------------------- */ -.window.overlay { - background: @primeBlackOpacity; - display: none; - min-height: 100%; - position: absolute; - top: 0; - left: 0; - width: 100%; - z-index: 990; - &.active { - display: block; - } -} - -.popup { - background: @primary7; - left: 50%; - top: 40%; - position: absolute; - margin: -85px 0 0 -250px; - width: 500px; - z-index: 1000; - position: fixed; - display: none; - &.active { - display: block; - } - > .action.close span { - .iconHideText(); - &:after { - content: ""; - } - } - .title { - font-size: 18px; - margin: 0 0 30px; - strong { - font-weight: 400; - } - } - .fieldset { - .action.close span { - line-height: inherit; - text-indent: 0; - width: auto; - &:after { - content: ""; - display: none; - } - } - } -} - -.truncated { - position: relative; - .truncated.full.value { - background: @optionsBg; - color: @optionsColor; - display: none; - position: absolute; - border-radius: 5px; - padding: 10px; - right: 100%; - top: 50%; - margin-top: -20px; - margin-right: 15px; - max-width: 200px; - min-width: 100px; - &.show { - display: block; - &:before { - content: ''; - border-left: 10px solid @optionsBg; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - height: 0; - width: 0; - overflow: hidden; - display: block; - position: absolute; - top: 12px; - margin-top: 0; - right: -10px; - z-index: 2; - } - } - > p { - margin-top: 0; - } - dl { - margin: 0; - dt { - display: inline; - font-weight: 600; - &:after { - content: ':'; - } - } - dd { - margin: 0; - white-space: normal; - } - } - } - .action.details { - font-size: @baseFontSizeMiddle; - border-bottom: 1px dotted @link; - cursor: help; - } -} - -/* - Minimum Advertising Price --------------------------------------- */ -.map.popup { - background: @commonBg; - border: 1px solid @primary3; - margin: 18px 0 0; - position: absolute; - padding: 20px; - width: 300px; - z-index: 10; - &:before { - border-color: transparent transparent @primary7 transparent; - border-style: solid; - border-width: 0 15px 15px; - content: ""; - height: 0; - left: 50%; - margin: 0 0 0 -7px; - position: absolute; - top: -15px; - width: 0; - z-index: 2; - } - &:after { - border-color: transparent transparent @primary3 transparent; - border-style: solid; - border-width: 0 16px 16px; - content: ""; - height: 0; - left: 50%; - margin: 0 0 0 -8px; - position: absolute; - top: -16px; - width: 0; - z-index: 1; - } - .title { - margin-bottom: 20px; - } - .map.msrp .old.price { - text-decoration: line-through; - } - .form.map.checkout { - float: right; - } - .content { - margin: 15px 0 0; - .map.msrp, - .map.price { - > .label:after { - content: ": "; - } - } - .map.price > .label { - font-weight: 700; - } - } - .price-excluding-tax, - .price-including-tax { - display: block; - } - + .category.view { - position: relative; - z-index: 1; - } -} - -@import "source/responsive/responsive.less"; diff --git a/app/design/frontend/Magento/plushe/fonts/.htaccess b/app/design/frontend/Magento/plushe/fonts/.htaccess deleted file mode 100644 index d7ef2e0846f..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/.htaccess +++ /dev/null @@ -1,13 +0,0 @@ -# deny *everything* -<FilesMatch ".*"> - Order Allow,Deny - Deny from all -</FilesMatch> - -# but now allow just *certain* necessary files: -<FilesMatch ".*\.(js|JS|css|CSS|jpg|JPG|gif|GIF|png|PNG|swf|SWF|xsl|XSL|svg|eot|ttf|woff)$"> - Order Allow,Deny - Allow from all -</FilesMatch> - -IndexIgnore */* \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/icons/icons.dev.svg b/app/design/frontend/Magento/plushe/fonts/icons/icons.dev.svg deleted file mode 100644 index 661704d2967..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/icons/icons.dev.svg +++ /dev/null @@ -1,99 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata> -This is a custom SVG font generated by IcoMoon. -<iconset grid="16"></iconset> -</metadata> -<defs> -<font id="icons" horiz-adv-x="512" > -<font-face units-per-em="512" ascent="480" descent="-32" /> -<missing-glyph horiz-adv-x="512" /> -<glyph class="hidden" unicode="" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" /> -<glyph unicode="" d="M 323.52,366.72L 169.984,366.72L 93.216,268.192L 400.288,268.192 zM 246.752,480L 182.88,383.872L 310.656,383.872 zM 393.728,251.808L 99.808,251.808 c-13.088,0-23.712-10.624-23.712-23.776l0-236.256 C 76.096-21.344, 86.72-32, 99.808-32l 293.92,0 - c 13.056,0, 23.68,10.656, 23.68,23.776L 417.408,228.032 C 417.408,241.184, 406.784,251.808, 393.728,251.808z" data-tags="pencil" /> -<glyph unicode="" d="M0,243.648L 512,243.648L 512,204.32L0,204.32zM0,381.536L 512,381.536L 512,342.144L0,342.144zM0,105.824L 512,105.824L 512,66.496L0,66.496z" data-tags="menu" /> -<glyph unicode="" d="M 425.12,310.88C 425.12,404.256, 349.344,480, 256,480C 162.56,480, 86.88,404.256, 86.88,310.88c0-73.632, 47.040-136.256, 112.672-159.488l 15.232-49.504 - L 256-32l 41.216,133.888l 15.232,49.504C 378.112,174.624, 425.12,237.248, 425.12,310.88z M 349.6,256.832L 256,202.816L 162.368,256.832L 162.368,364.896 L 256,418.944 - l 93.6-54.016L 349.6,256.832 z" data-tags="location" /> -<glyph unicode="" d="M 149.824-32L 262.304-32L 332.672,319.616L 220.128,319.616 zM 357.248,450.432c-3.264,6.56-7.712,12-13.344,16.192c-5.664,4.256-11.936,7.488-19.008,9.856C 317.888,478.816, 310.592,480, 303.136,480 - C 293.728,480, 284.928,478.24, 276.736,474.72s-15.36-8.096-21.44-13.728C 249.184,455.36, 244.384,448.704, 240.864,440.928 - c-3.52-7.68-5.248-15.808-5.248-24.256c0-8.864, 1.632-16.64, 4.896-23.2c 3.264-6.56, 7.712-11.936, 13.344-16.192 - c 5.632-4.192, 11.968-7.36, 19.008-9.504c 7.040-2.080, 14.304-3.168, 21.792-3.168c 19.264,0, 35.328,5.984, 48.192,17.984 - c 12.928,11.936, 19.328,27.072, 19.328,45.344C 362.176,436.416, 360.544,443.904, 357.248,450.432z" data-tags="info" /> -<glyph unicode="" d="M 368.032,304L 512,447.968L 96,447.968L 96,480L 32,480L 32,447.968L0,447.968L0,160L 32,160L 32-32L 96-32L 96,160L 512,160 - z" data-tags="flag" /> -<glyph unicode="" d="M 512,275.2L 307.2,275.2L 307.2,480L 204.8,480L 204.8,275.2L0,275.2L0,172.8L 204.8,172.8L 204.8-32L 307.2-32L 307.2,172.8L 512,172.8 z" data-tags="expand" /> -<glyph unicode="" d="M 200.064,26.528c0,17.024, 5.376,31.040, 16.128,42.048c 10.752,10.976, 24.16,16.544, 40.192,16.544s 29.312-5.568, 39.744-16.544 - c 10.56-11.040, 15.808-25.024, 15.808-42.048s-5.248-31.072-15.808-42.016C 285.696-26.528, 272.416-32, 256.384-32s-29.44,5.472-40.192,16.512 - C 205.44-4.544, 200.064,9.504, 200.064,26.528z M 215.104,394.4L 212.8,480l 87.136,0 L 296.928,394.4l-12.064-256L 227.104,138.4 L 215.104,394.4z" data-tags="exclamation" /> -<glyph unicode="" d="M 256,46.624L0,401.376l 512,0 L 256,46.624z" data-tags="dropdown" /> -<glyph unicode="" d="M 512,275.2L 512,172.8 L0,172.8 L0,275.2 L 512,275.2 z" data-tags="collapse" /> -<glyph unicode="" d="M 512-3.296L 284.576,224.48L 511.168,451.328L 482.56,480L 255.936,253.12L 29.504,479.84L 0.864,451.168L 227.328,224.448L0-3.136L 28.64-31.84L 255.936,195.744L 483.392-32 z" data-tags="close-thick" /> -<glyph unicode="" d="M 44.384,252.768L 182.72,89.568L 459.552,480L 505.696,427.488L 183.904-32L 6.304,197.152 z" data-tags="checkmark" /> -<glyph unicode="" d="M 480,320L 96,384C 90.784,384, 86.048,382.464, 81.728,380.256L 79.36,388.384C 78.624,391.008, 77.248,393.376, 75.328,395.328l-32,32 - c-6.24,6.24-16.384,6.24-22.624,0s-6.24-16.384,0-22.624l 29.056-29.056L 110.912,161.6l-29.216-58.432 - c-2.496-4.96-2.208-10.848, 0.672-15.552C 85.312,82.88, 90.432,80, 96,80l 48,0 l0-20.896 C 134.624,53.536, 128,43.712, 128,32 - c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.624,21.536-16,27.104L 176,80 l 192,0 l0-20.896 C 358.592,53.536, 352,43.712, 352,32 - c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.592,21.536-16,27.104L 400,80 L 448,80 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 121.888,112 - l 20.448,40.832c 1.792,3.584, 2.176,7.68, 1.056,11.552l-0.32,1.12C 148.064,162.336, 153.632,160, 160,160l 288,0 c 17.696,0, 32,14.304, 32,32l 32,96 - C 512,305.696, 497.696,320, 480,320z" data-tags="cart" /> -<glyph unicode="" d="M 512,132.864L 267.552,315.072L 267.616,315.136L 255.968,323.776L0,132.96L 11.616,124.288L 255.936,306.432L 500.352,124.224 z" data-tags="arrow-up-thin" /> -<glyph unicode="" d="M 164.864-32L 347.072,212.448L 347.136,212.384L 355.776,224.032L 164.96,480L 156.288,468.384L 338.432,224.064L 156.224-20.352 z" data-tags="arrow-right-thin" /> -<glyph unicode="" d="M 347.136,480L 164.928,235.552L 164.864,235.616L 156.224,223.968L 347.040-32L 355.712-20.384L 173.568,223.936L 355.776,468.352 z" data-tags="arrow-left-thin" /> -<glyph unicode="" d="M0,315.136L 244.448,132.928L 244.384,132.864L 256.032,124.224L 512,315.040L 500.384,323.712L 256.064,141.568L 11.648,323.776 z" data-tags="arrow-down-thin" /> -<glyph unicode="" d="M 256,382.944L 255.968,382.976L0,127.008L 62.048,64.96L 256.032,258.912L 449.984,65.024L 512,127.072L 256.064,383.040 z" data-tags="arrow-up-thick" /> -<glyph unicode="" d="M 414.944,224L 414.976,224.032L 159.008,480L 96.96,417.952L 290.912,223.968L 97.024,30.016L 159.072-32L 415.040,223.936 z" data-tags="arrow-right-thick" /> -<glyph unicode="" d="M 97.056,224L 97.024,223.968L 352.992-32L 415.040,30.048L 221.088,224.032L 414.976,417.984L 352.928,480L 96.96,224.064 z" data-tags="arrow-left-thick" /> -<glyph unicode="" d="M 256,65.056L 256.032,65.024L 512,320.992L 449.952,383.040L 255.968,189.088L 62.016,382.976L0,320.928L 255.936,64.96 z" data-tags="arrow-down-thick" /> -<glyph unicode="" d="M 48,384L 240,384L 240,206.784L 48,206.784zM 48,177.216L 240,177.216L 240,0L 48,0zM 272,384L 464,384L 464,206.784L 272,206.784zM 272,177.216L 464,177.216L 464,0L 272,0zM 283.84,353.184l 156.992,42.784l-8.448,30.88L 381.44,412.928c 8.384,7.2, 15.040,14.88, 18.944,22.944 - c 5.12,10.56, 5.728,21.536, 1.728,31.744l-3.52,5.76L 394.592,476.16l-6.208,2.592c-57.024,10.56-109.024-48.96-132.416-80.992 - c-23.36,32-75.36,91.52-132.416,80.992L 111.616,472.16L 109.888,467.616C 105.888,457.376, 106.464,446.4, 111.552,435.872 - c 3.936-8.064, 10.56-15.712, 18.88-22.88l-50.88,13.856L 71.168,395.968l 156.96-42.784L 222.24,343.2l 20.16,6.112l 8.544-2.304l 8.032-0.576 - l 10.592,2.88l 20.192-6.112L 283.84,353.184z M 370.528,447.936C 361.856,433.696, 332.64,417.28, 301.76,404 - C 321.12,425.472, 346.080,446.016, 370.528,447.936z M 210.24,404C 179.36,417.248, 150.112,433.632, 141.44,447.936C 165.888,446.016, 190.88,425.44, 210.24,404 - z" data-tags="wishlist" /> -<glyph unicode="" d="M 61.135-4.221l 14.485,68.604l-9.772,0 c-36.307,0-65.846,29.536-65.846,65.841L 0.002,382.309 - c0,36.306, 29.539,65.843, 65.846,65.843l 380.303,0 c 36.309,0, 65.845-29.538, 65.845-65.843l0-252.084 - c0-36.305-29.536-65.841-65.845-65.841L 169.429,64.384 L 61.135-4.221z" data-tags="comment" /> -<glyph unicode="" d="M 342.569,64.384L 65.847,64.384 c-36.309,0-65.845,29.536-65.845,65.841L 0.002,382.309 - c0,36.306, 29.536,65.843, 65.845,65.843L 446.15,448.152 c 36.307,0, 65.846-29.538, 65.846-65.843l0-252.084 - c0-36.305-29.539-65.841-65.846-65.841l-9.773,0 l 14.486-68.604L 342.569,64.384z" data-tags="comment-reflected" /> -<glyph unicode="" d="M0,480l 128.002,0 l0-128.002 L0,351.998 L0,480 zM 192.219,415.999l 319.777,0 l0-63.331 L 192.219,352.668 L 192.219,415.999 zM0,288.001l 128.002,0 l0-128.003 L0,159.998 L0,288.001 zM 192.219,224l 319.777,0 l0-63.33 L 192.219,160.67 L 192.219,224 zM 0.002,96.003l 128.002,0 L 128.004-32 L 0.002-32 L 0.002,96.003 zM 192.221,32.002l 319.775,0 l0-63.33 L 192.221-31.328 L 192.221,32.002 z" data-tags="list" /> -<glyph unicode="" d="M 0.002,480l 192,0 l0-192.002 l-192,0 L 0.002,480 zM0,160.002l 192,0 L 192-32 L0-32 L0,160.002 zM 319.996,160.002l 192,0 L 511.996-32 l-192,0 L 319.996,160.002 zM 320,480l 192,0 l0-192.002 L 320,287.998 L 320,480 z" data-tags="grid" /> -<glyph unicode="" d="M 30.832,438.23l 10.065,10.052l 439.399-439.4l-10.066-10.051 - L 30.832,438.23zM 40.898-1.169l-10.066,10.051l 439.398,439.4l 10.066-10.052 - L 40.898-1.169z" data-tags="close-thin" /> -<glyph unicode="" d="M 313.472,448.193c 0.342,1.637, 0.576,3.314, 0.576,5.122l0,3.258 - C 314.048,469.465, 303.515,480, 290.622,480l-52.776,0 c-12.867,0-23.453-10.535-23.453-23.427l0-3.258 c0-1.808, 0.262-3.485, 0.629-5.122 - L 313.472,448.193 zM 412.972,415.662L 99.222,415.662 c-21.512-0.315-36.948-13.18-37.053-33.096l0-14.046 l 387.856,0 L 450.025,382.566 - C 449.894,402.482, 434.433,415.347, 412.972,415.662zM 117.265,12.796C 120.147-11.811, 142.762-32, 167.591-32l 177.011,0 - c 24.844,0, 47.459,20.189, 50.315,44.796l 36.895,307.077L 80.421,319.873 L 117.265,12.796z M 286.363,63.045l 21.814,188.044 - c 1.312,11.241, 11.491,19.286, 22.721,18.002c 11.241-1.311, 19.299-11.478, 18.003-22.719l-21.816-188.045 - c-1.219-10.443-10.075-18.134-20.334-18.134c-0.787,0-1.586,0.040-2.386,0.131C 293.123,41.635, 285.066,51.803, 286.363,63.045z - M 180.693,269.091c 11.228,1.271, 21.409-6.761, 22.719-18.002l 21.814-188.044c 1.299-11.242-6.76-21.41-18.001-22.721 - c-0.799-0.091-1.599-0.131-2.384-0.131c-10.26,0-19.117,7.69-20.334,18.134L 162.69,246.372 - C 161.393,257.614, 169.451,267.781, 180.693,269.091z" data-tags="trash" /> -<glyph unicode="" d="M 256.542,192.229L 1.083,362.836L 1.083,64.5L 512,64.5L 512,362.805 zM 256.542,277.081L 1.083,447.687L 512,447.687 z" data-tags="envelope" /> -<glyph unicode="" d="M 508.064,23.328l-153.92,153.92c 21.12,31.040, 33.504,68.576, 33.504,108.928C 387.648,393.216, 300.864,480, 193.824,480C 86.784,480,0,393.216,0,286.176 - c0-107.072, 86.784-193.856, 193.824-193.856c 40.384,0, 77.92,12.384, 108.928,33.504l 153.92-153.92c 5.248-5.248, 13.792-5.248, 19.040,0l 32.384,32.384 - C 513.312,9.568, 513.312,18.080, 508.064,23.328z M 193.824,165.024c-66.88,0-121.12,54.24-121.12,121.152c0,66.88, 54.24,121.12, 121.12,121.12 - c 66.912,0, 121.152-54.24, 121.152-121.12C 314.976,219.296, 260.704,165.024, 193.824,165.024z" data-tags="magnifying-glass" /> -<glyph unicode="" d="M 119.995,223.983L 351.988,386.982L 351.996,61.018 z" data-tags="arrow-right-filled" /> -<glyph unicode="" d="M 255.982,87.996L 418.982,319.99L 93.018,319.998 z" data-tags="arrow-bottom-filled" /> -<glyph unicode="" d="M 392.004,223.983L 160.010,386.982L 160.002,61.018 z" data-tags="arrow-left-filled" /> -<glyph unicode="" d="M 255.982,360.004L 418.982,128.010L 93.018,128.002 z" data-tags="arrow-up-filled" /> -<glyph unicode="" d="M 172.063,193.823L 217.844,193.823L 217.844,148.066L 172.063,148.066zM 236.52,132.598L 282.242,132.598L 282.242,86.848L 236.52,86.848zM 172.063,132.598L 217.844,132.598L 217.844,86.848L 172.063,86.848zM 172.063,255.050L 217.844,255.050L 217.844,209.319L 172.063,209.319zM 368.475,344.174c 10.469,0, 18.949,8.495, 18.949,18.977L 387.424,428.535 - c-0.001,10.481-8.481,18.964-18.949,18.964c-10.494,0-18.979-8.483-18.979-18.964l0-65.385 - C 349.5,352.669, 357.981,344.174, 368.475,344.174zM 144.372,344.174c 10.467,0, 18.946,8.495, 18.946,18.977L 163.318,428.535 - c0,10.481-8.479,18.964-18.946,18.964c-10.495,0-18.979-8.483-18.979-18.964l0-65.385 - C 125.395,352.669, 133.877,344.174, 144.372,344.174zM 107.603,193.823L 153.36,193.823L 153.36,148.066L 107.603,148.066zM 107.603,132.598L 153.36,132.598L 153.36,86.848L 107.603,86.848zM 236.52,193.823L 282.242,193.823L 282.242,148.066L 236.52,148.066zM 365.4,193.823L 411.155,193.823L 411.155,148.066L 365.4,148.066zM 365.4,255.050L 411.155,255.050L 411.155,209.319L 365.4,209.319zM 393.676,415.993l0-21.091 c 7.886-6.972, 12.886-17.154, 12.886-28.519 - c0-21.040-17.044-38.116-38.088-38.116c-21.069,0-38.114,17.076-38.114,38.116c0,11.365, 5.001,21.547, 12.885,28.519 - L 343.245,415.993 L 169.575,415.993 l0-21.091 c 7.885-6.972, 12.885-17.154, 12.885-28.519c0-21.040-17.044-38.116-38.087-38.116 - c-21.070,0-38.114,17.076-38.114,38.116c0,11.365, 5,21.547, 12.884,28.519L 119.143,415.993 L 32.91,415.993 l0-416.021 l 447.103,0 L 480.013,415.993 L 393.676,415.993 z - M 75.331,42.393L 75.331,307.647 l 363.134,0 l 0.001-265.254L 75.331,42.393 zM 236.52,255.050L 282.242,255.050L 282.242,209.319L 236.52,209.319zM 300.972,255.050L 346.727,255.050L 346.727,209.319L 300.972,209.319zM 300.972,132.598L 346.727,132.598L 346.727,86.848L 300.972,86.848zM 300.972,193.823L 346.727,193.823L 346.727,148.066L 300.972,148.066z" data-tags="calendar" /> -<glyph unicode="" d="M 512,281.475l-176.89,25.704L 256,467.47l-79.108-160.291L0,281.475l 128-124.769L 97.784-19.47L 256,63.709l 158.216-83.179 - l-30.217,176.176L 512,281.475z M 256,103.251l-111.731-58.74l 21.338,124.415l-90.393,88.111l 124.92,18.152L 256,388.387l 55.868-113.198 - l 124.918-18.152l-90.394-88.111l 21.339-124.415L 256,103.251z" data-tags="star, rate, favorite, bookmark" /> -<glyph unicode=" " horiz-adv-x="256" /> -</font></defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/icons/icons.eot b/app/design/frontend/Magento/plushe/fonts/icons/icons.eot deleted file mode 100644 index b84de058ea76322b80cd42136a032e484cecaa94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4344 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 QM(n@w&}>mKEPq@78?P4w1poj5 diff --git a/app/design/frontend/Magento/plushe/fonts/icons/icons.svg b/app/design/frontend/Magento/plushe/fonts/icons/icons.svg deleted file mode 100644 index 560b55877c2..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/icons/icons.svg +++ /dev/null @@ -1,99 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata> -This is a custom SVG font generated by IcoMoon. -<iconset grid="16"></iconset> -</metadata> -<defs> -<font id="icons" horiz-adv-x="512" > -<font-face units-per-em="512" ascent="480" descent="-32" /> -<missing-glyph horiz-adv-x="512" /> -<glyph class="hidden" unicode="" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" /> -<glyph unicode="" d="M 323.52,366.72L 169.984,366.72L 93.216,268.192L 400.288,268.192 zM 246.752,480L 182.88,383.872L 310.656,383.872 zM 393.728,251.808L 99.808,251.808 c-13.088,0-23.712-10.624-23.712-23.776l0-236.256 C 76.096-21.344, 86.72-32, 99.808-32l 293.92,0 - c 13.056,0, 23.68,10.656, 23.68,23.776L 417.408,228.032 C 417.408,241.184, 406.784,251.808, 393.728,251.808z" /> -<glyph unicode="" d="M0,243.648L 512,243.648L 512,204.32L0,204.32zM0,381.536L 512,381.536L 512,342.144L0,342.144zM0,105.824L 512,105.824L 512,66.496L0,66.496z" /> -<glyph unicode="" d="M 425.12,310.88C 425.12,404.256, 349.344,480, 256,480C 162.56,480, 86.88,404.256, 86.88,310.88c0-73.632, 47.040-136.256, 112.672-159.488l 15.232-49.504 - L 256-32l 41.216,133.888l 15.232,49.504C 378.112,174.624, 425.12,237.248, 425.12,310.88z M 349.6,256.832L 256,202.816L 162.368,256.832L 162.368,364.896 L 256,418.944 - l 93.6-54.016L 349.6,256.832 z" /> -<glyph unicode="" d="M 149.824-32L 262.304-32L 332.672,319.616L 220.128,319.616 zM 357.248,450.432c-3.264,6.56-7.712,12-13.344,16.192c-5.664,4.256-11.936,7.488-19.008,9.856C 317.888,478.816, 310.592,480, 303.136,480 - C 293.728,480, 284.928,478.24, 276.736,474.72s-15.36-8.096-21.44-13.728C 249.184,455.36, 244.384,448.704, 240.864,440.928 - c-3.52-7.68-5.248-15.808-5.248-24.256c0-8.864, 1.632-16.64, 4.896-23.2c 3.264-6.56, 7.712-11.936, 13.344-16.192 - c 5.632-4.192, 11.968-7.36, 19.008-9.504c 7.040-2.080, 14.304-3.168, 21.792-3.168c 19.264,0, 35.328,5.984, 48.192,17.984 - c 12.928,11.936, 19.328,27.072, 19.328,45.344C 362.176,436.416, 360.544,443.904, 357.248,450.432z" /> -<glyph unicode="" d="M 368.032,304L 512,447.968L 96,447.968L 96,480L 32,480L 32,447.968L0,447.968L0,160L 32,160L 32-32L 96-32L 96,160L 512,160 - z" /> -<glyph unicode="" d="M 512,275.2L 307.2,275.2L 307.2,480L 204.8,480L 204.8,275.2L0,275.2L0,172.8L 204.8,172.8L 204.8-32L 307.2-32L 307.2,172.8L 512,172.8 z" /> -<glyph unicode="" d="M 200.064,26.528c0,17.024, 5.376,31.040, 16.128,42.048c 10.752,10.976, 24.16,16.544, 40.192,16.544s 29.312-5.568, 39.744-16.544 - c 10.56-11.040, 15.808-25.024, 15.808-42.048s-5.248-31.072-15.808-42.016C 285.696-26.528, 272.416-32, 256.384-32s-29.44,5.472-40.192,16.512 - C 205.44-4.544, 200.064,9.504, 200.064,26.528z M 215.104,394.4L 212.8,480l 87.136,0 L 296.928,394.4l-12.064-256L 227.104,138.4 L 215.104,394.4z" /> -<glyph unicode="" d="M 256,46.624L0,401.376l 512,0 L 256,46.624z" /> -<glyph unicode="" d="M 512,275.2L 512,172.8 L0,172.8 L0,275.2 L 512,275.2 z" /> -<glyph unicode="" d="M 512-3.296L 284.576,224.48L 511.168,451.328L 482.56,480L 255.936,253.12L 29.504,479.84L 0.864,451.168L 227.328,224.448L0-3.136L 28.64-31.84L 255.936,195.744L 483.392-32 z" /> -<glyph unicode="" d="M 44.384,252.768L 182.72,89.568L 459.552,480L 505.696,427.488L 183.904-32L 6.304,197.152 z" /> -<glyph unicode="" d="M 480,320L 96,384C 90.784,384, 86.048,382.464, 81.728,380.256L 79.36,388.384C 78.624,391.008, 77.248,393.376, 75.328,395.328l-32,32 - c-6.24,6.24-16.384,6.24-22.624,0s-6.24-16.384,0-22.624l 29.056-29.056L 110.912,161.6l-29.216-58.432 - c-2.496-4.96-2.208-10.848, 0.672-15.552C 85.312,82.88, 90.432,80, 96,80l 48,0 l0-20.896 C 134.624,53.536, 128,43.712, 128,32 - c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.624,21.536-16,27.104L 176,80 l 192,0 l0-20.896 C 358.592,53.536, 352,43.712, 352,32 - c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.592,21.536-16,27.104L 400,80 L 448,80 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 121.888,112 - l 20.448,40.832c 1.792,3.584, 2.176,7.68, 1.056,11.552l-0.32,1.12C 148.064,162.336, 153.632,160, 160,160l 288,0 c 17.696,0, 32,14.304, 32,32l 32,96 - C 512,305.696, 497.696,320, 480,320z" /> -<glyph unicode="" d="M 512,132.864L 267.552,315.072L 267.616,315.136L 255.968,323.776L0,132.96L 11.616,124.288L 255.936,306.432L 500.352,124.224 z" /> -<glyph unicode="" d="M 164.864-32L 347.072,212.448L 347.136,212.384L 355.776,224.032L 164.96,480L 156.288,468.384L 338.432,224.064L 156.224-20.352 z" /> -<glyph unicode="" d="M 347.136,480L 164.928,235.552L 164.864,235.616L 156.224,223.968L 347.040-32L 355.712-20.384L 173.568,223.936L 355.776,468.352 z" /> -<glyph unicode="" d="M0,315.136L 244.448,132.928L 244.384,132.864L 256.032,124.224L 512,315.040L 500.384,323.712L 256.064,141.568L 11.648,323.776 z" /> -<glyph unicode="" d="M 256,382.944L 255.968,382.976L0,127.008L 62.048,64.96L 256.032,258.912L 449.984,65.024L 512,127.072L 256.064,383.040 z" /> -<glyph unicode="" d="M 414.944,224L 414.976,224.032L 159.008,480L 96.96,417.952L 290.912,223.968L 97.024,30.016L 159.072-32L 415.040,223.936 z" /> -<glyph unicode="" d="M 97.056,224L 97.024,223.968L 352.992-32L 415.040,30.048L 221.088,224.032L 414.976,417.984L 352.928,480L 96.96,224.064 z" /> -<glyph unicode="" d="M 256,65.056L 256.032,65.024L 512,320.992L 449.952,383.040L 255.968,189.088L 62.016,382.976L0,320.928L 255.936,64.96 z" /> -<glyph unicode="" d="M 48,384L 240,384L 240,206.784L 48,206.784zM 48,177.216L 240,177.216L 240,0L 48,0zM 272,384L 464,384L 464,206.784L 272,206.784zM 272,177.216L 464,177.216L 464,0L 272,0zM 283.84,353.184l 156.992,42.784l-8.448,30.88L 381.44,412.928c 8.384,7.2, 15.040,14.88, 18.944,22.944 - c 5.12,10.56, 5.728,21.536, 1.728,31.744l-3.52,5.76L 394.592,476.16l-6.208,2.592c-57.024,10.56-109.024-48.96-132.416-80.992 - c-23.36,32-75.36,91.52-132.416,80.992L 111.616,472.16L 109.888,467.616C 105.888,457.376, 106.464,446.4, 111.552,435.872 - c 3.936-8.064, 10.56-15.712, 18.88-22.88l-50.88,13.856L 71.168,395.968l 156.96-42.784L 222.24,343.2l 20.16,6.112l 8.544-2.304l 8.032-0.576 - l 10.592,2.88l 20.192-6.112L 283.84,353.184z M 370.528,447.936C 361.856,433.696, 332.64,417.28, 301.76,404 - C 321.12,425.472, 346.080,446.016, 370.528,447.936z M 210.24,404C 179.36,417.248, 150.112,433.632, 141.44,447.936C 165.888,446.016, 190.88,425.44, 210.24,404 - z" /> -<glyph unicode="" d="M 61.135-4.221l 14.485,68.604l-9.772,0 c-36.307,0-65.846,29.536-65.846,65.841L 0.002,382.309 - c0,36.306, 29.539,65.843, 65.846,65.843l 380.303,0 c 36.309,0, 65.845-29.538, 65.845-65.843l0-252.084 - c0-36.305-29.536-65.841-65.845-65.841L 169.429,64.384 L 61.135-4.221z" /> -<glyph unicode="" d="M 342.569,64.384L 65.847,64.384 c-36.309,0-65.845,29.536-65.845,65.841L 0.002,382.309 - c0,36.306, 29.536,65.843, 65.845,65.843L 446.15,448.152 c 36.307,0, 65.846-29.538, 65.846-65.843l0-252.084 - c0-36.305-29.539-65.841-65.846-65.841l-9.773,0 l 14.486-68.604L 342.569,64.384z" /> -<glyph unicode="" d="M0,480l 128.002,0 l0-128.002 L0,351.998 L0,480 zM 192.219,415.999l 319.777,0 l0-63.331 L 192.219,352.668 L 192.219,415.999 zM0,288.001l 128.002,0 l0-128.003 L0,159.998 L0,288.001 zM 192.219,224l 319.777,0 l0-63.33 L 192.219,160.67 L 192.219,224 zM 0.002,96.003l 128.002,0 L 128.004-32 L 0.002-32 L 0.002,96.003 zM 192.221,32.002l 319.775,0 l0-63.33 L 192.221-31.328 L 192.221,32.002 z" /> -<glyph unicode="" d="M 0.002,480l 192,0 l0-192.002 l-192,0 L 0.002,480 zM0,160.002l 192,0 L 192-32 L0-32 L0,160.002 zM 319.996,160.002l 192,0 L 511.996-32 l-192,0 L 319.996,160.002 zM 320,480l 192,0 l0-192.002 L 320,287.998 L 320,480 z" /> -<glyph unicode="" d="M 30.832,438.23l 10.065,10.052l 439.399-439.4l-10.066-10.051 - L 30.832,438.23zM 40.898-1.169l-10.066,10.051l 439.398,439.4l 10.066-10.052 - L 40.898-1.169z" /> -<glyph unicode="" d="M 313.472,448.193c 0.342,1.637, 0.576,3.314, 0.576,5.122l0,3.258 - C 314.048,469.465, 303.515,480, 290.622,480l-52.776,0 c-12.867,0-23.453-10.535-23.453-23.427l0-3.258 c0-1.808, 0.262-3.485, 0.629-5.122 - L 313.472,448.193 zM 412.972,415.662L 99.222,415.662 c-21.512-0.315-36.948-13.18-37.053-33.096l0-14.046 l 387.856,0 L 450.025,382.566 - C 449.894,402.482, 434.433,415.347, 412.972,415.662zM 117.265,12.796C 120.147-11.811, 142.762-32, 167.591-32l 177.011,0 - c 24.844,0, 47.459,20.189, 50.315,44.796l 36.895,307.077L 80.421,319.873 L 117.265,12.796z M 286.363,63.045l 21.814,188.044 - c 1.312,11.241, 11.491,19.286, 22.721,18.002c 11.241-1.311, 19.299-11.478, 18.003-22.719l-21.816-188.045 - c-1.219-10.443-10.075-18.134-20.334-18.134c-0.787,0-1.586,0.040-2.386,0.131C 293.123,41.635, 285.066,51.803, 286.363,63.045z - M 180.693,269.091c 11.228,1.271, 21.409-6.761, 22.719-18.002l 21.814-188.044c 1.299-11.242-6.76-21.41-18.001-22.721 - c-0.799-0.091-1.599-0.131-2.384-0.131c-10.26,0-19.117,7.69-20.334,18.134L 162.69,246.372 - C 161.393,257.614, 169.451,267.781, 180.693,269.091z" /> -<glyph unicode="" d="M 256.542,192.229L 1.083,362.836L 1.083,64.5L 512,64.5L 512,362.805 zM 256.542,277.081L 1.083,447.687L 512,447.687 z" /> -<glyph unicode="" d="M 508.064,23.328l-153.92,153.92c 21.12,31.040, 33.504,68.576, 33.504,108.928C 387.648,393.216, 300.864,480, 193.824,480C 86.784,480,0,393.216,0,286.176 - c0-107.072, 86.784-193.856, 193.824-193.856c 40.384,0, 77.92,12.384, 108.928,33.504l 153.92-153.92c 5.248-5.248, 13.792-5.248, 19.040,0l 32.384,32.384 - C 513.312,9.568, 513.312,18.080, 508.064,23.328z M 193.824,165.024c-66.88,0-121.12,54.24-121.12,121.152c0,66.88, 54.24,121.12, 121.12,121.12 - c 66.912,0, 121.152-54.24, 121.152-121.12C 314.976,219.296, 260.704,165.024, 193.824,165.024z" /> -<glyph unicode="" d="M 119.995,223.983L 351.988,386.982L 351.996,61.018 z" /> -<glyph unicode="" d="M 255.982,87.996L 418.982,319.99L 93.018,319.998 z" /> -<glyph unicode="" d="M 392.004,223.983L 160.010,386.982L 160.002,61.018 z" /> -<glyph unicode="" d="M 255.982,360.004L 418.982,128.010L 93.018,128.002 z" /> -<glyph unicode="" d="M 172.063,193.823L 217.844,193.823L 217.844,148.066L 172.063,148.066zM 236.52,132.598L 282.242,132.598L 282.242,86.848L 236.52,86.848zM 172.063,132.598L 217.844,132.598L 217.844,86.848L 172.063,86.848zM 172.063,255.050L 217.844,255.050L 217.844,209.319L 172.063,209.319zM 368.475,344.174c 10.469,0, 18.949,8.495, 18.949,18.977L 387.424,428.535 - c-0.001,10.481-8.481,18.964-18.949,18.964c-10.494,0-18.979-8.483-18.979-18.964l0-65.385 - C 349.5,352.669, 357.981,344.174, 368.475,344.174zM 144.372,344.174c 10.467,0, 18.946,8.495, 18.946,18.977L 163.318,428.535 - c0,10.481-8.479,18.964-18.946,18.964c-10.495,0-18.979-8.483-18.979-18.964l0-65.385 - C 125.395,352.669, 133.877,344.174, 144.372,344.174zM 107.603,193.823L 153.36,193.823L 153.36,148.066L 107.603,148.066zM 107.603,132.598L 153.36,132.598L 153.36,86.848L 107.603,86.848zM 236.52,193.823L 282.242,193.823L 282.242,148.066L 236.52,148.066zM 365.4,193.823L 411.155,193.823L 411.155,148.066L 365.4,148.066zM 365.4,255.050L 411.155,255.050L 411.155,209.319L 365.4,209.319zM 393.676,415.993l0-21.091 c 7.886-6.972, 12.886-17.154, 12.886-28.519 - c0-21.040-17.044-38.116-38.088-38.116c-21.069,0-38.114,17.076-38.114,38.116c0,11.365, 5.001,21.547, 12.885,28.519 - L 343.245,415.993 L 169.575,415.993 l0-21.091 c 7.885-6.972, 12.885-17.154, 12.885-28.519c0-21.040-17.044-38.116-38.087-38.116 - c-21.070,0-38.114,17.076-38.114,38.116c0,11.365, 5,21.547, 12.884,28.519L 119.143,415.993 L 32.91,415.993 l0-416.021 l 447.103,0 L 480.013,415.993 L 393.676,415.993 z - M 75.331,42.393L 75.331,307.647 l 363.134,0 l 0.001-265.254L 75.331,42.393 zM 236.52,255.050L 282.242,255.050L 282.242,209.319L 236.52,209.319zM 300.972,255.050L 346.727,255.050L 346.727,209.319L 300.972,209.319zM 300.972,132.598L 346.727,132.598L 346.727,86.848L 300.972,86.848zM 300.972,193.823L 346.727,193.823L 346.727,148.066L 300.972,148.066z" /> -<glyph unicode="" d="M 512,281.475l-176.89,25.704L 256,467.47l-79.108-160.291L0,281.475l 128-124.769L 97.784-19.47L 256,63.709l 158.216-83.179 - l-30.217,176.176L 512,281.475z M 256,103.251l-111.731-58.74l 21.338,124.415l-90.393,88.111l 124.92,18.152L 256,388.387l 55.868-113.198 - l 124.918-18.152l-90.394-88.111l 21.339-124.415L 256,103.251z" /> -<glyph unicode=" " horiz-adv-x="256" /> -</font></defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/icons/icons.ttf b/app/design/frontend/Magento/plushe/fonts/icons/icons.ttf deleted file mode 100644 index 04a1a990a5d25257d63f15ec14c1ff9dfe6c3f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4188 zcmd^C>u+4u5udqt_ujqxesAK}-rddaCJkQiBfIN7y$O!3icr!9IguiYUB^i*C${5+ z@=z!XO=;)@MM%&R0dbomQJ_`AhajP}Y(s@YC7>TdRkcXn#<ZdWRS1QCC~&vGbNAX# zsMLR;$3ACf&Y3eaXJ*dav&2N?p*qR5b7<)HTPNPwwTH-G!)({^;PxT9ofObIX#KWb zeZ{_4-i;G6cxYt&@Yw8cS3mYMBFTZdlLy9*&bC^RME(_6cN{o$@BV;(%QTVPB+@n= zoEY2p`JJm4u=Xx`<sc?({?^~IHw=2!!NbSyQJ<9`2Yn9oo<lR^W2-J@Axl05dgtM> zduHiAn!$QMXnlI@@We}_tN(!mbYX64cIN1@KmYE&y+q!VpihxF8~WIh(#?1JHhn@a z2@^zb#Xk-$!&XxwZi04Dd)eH>%~q3gV!{y9LellkZq8)s5CzO>!N}%Z&0=FnJw<kM z@DAROxnT=_LM!P6JVti-X|eei5x|}Mx9_7`lRkn~!Uou;*Ox3<G?AWfZvnjn*a*RE zXqU~A5HsP?r|>7*D2-vvo46QyXp3p<-E;@dqwD61ut)SRbB*XBP~zNOWFv6`x9K4p zQPbOuH*flg5Not1HT}&si&XqmM8CbyiN#fd1N!3B2|3-+WP?u>%8*KF$kWIPo)jf0 zi6bgY$0WE<IO)bFtoeUwUaHVn=otN&&e7}i9(|1T>foFBA%23N<BR+jH~C}9CPk%L z=~3yI(jTR3vRj^(Psr!wi}GdpihR}fP1`dff>wsZn*mNpNN8>vrW<A2(Q5Kfkzq1o z5{36uY9gzaVu_^E&EaS%QLJp{br~K!eJhuqtkriJe{y=gPR=+z9-bM$GJ3-6{7}qb zfJBi!+mQF)0;ZCSsGNu-L>GTT@nXNW`lZz$t_C>*{m(<cSL7=+C6!1x8kYum3uo1A zxf<i2kN;qNpy*q(##bD;<?Co%9U31Ws_qUJ9)7qG+|8BBp-M&M%HxnVWu7HM6f1>N zm7J7HdZkFXM=BL7<tJu`k38!1M_t~PL8lgoy1FwukKP;ds4o8sw>RWbQlgA3`O6KW znkc6tsX!@GDkpgMlrdV<^%~D}{*<m8%|_#Tew>$6f;}SGOA@`g|4saJNQ`d^hf8!B zHul3t2Tn|tb(LZ?tSU)4TT<oJWj(L^eT9IuTXt{YQX*0E2l)As5%ZRrHxc!SAA=N1 zbAqV_tdG9|x#C{Dh_$eY0K?^GkVE_Tx7V!r!#;bq3b(2;HCByDv~aa+;cEBQh3<s~ zc|nZg|GoEwJOy_C8+O`>5Q7+JZ~8t*a>lP;`ur?ETsF#o0}mnwoiEZRY)B{7Y^IMh zN?cNv=tho+IKt=avgOkCc(JlBlS))8*|M2j<tmb^Y1CC!W?6T|+})eIZJL(%hdM(3 zhB@X{O;e3m!m^|}SoehV5Z7uphfUVqF<18=HadI}E$9h_JV7n8jA>qNja`wHkZ05r zGW~NLwhki8Dc#3*^Z3`?EplJG_MHpbtJ;MNa25ET!nyb1+~A81unbQ<+g{eMxmj@E z$iqGkRkKyz+h*dXC9~~!TGAPaa~h7fWbj5yrHES%c0C~ctTC*rim-0EbZHAe(1y@A z3Y*TfW07VNJ3iB1YqH5I>>dNpe4D4ruqZp$UTa!X1P{?x=&B1{X>q$$@xc<hwl2z1 z#W#X~&wsJ*ua9z6L>;0~$;|515=0tRs+B%DqvqHrDY0lwWK}iJID(>9)J!&-Z=m6d zG#c)wwUXEFP-L508|>Jgc1w!G?kQ?dD`Cyy3V+qTKK<Z&x6bwRJ?GoQ*xI<)<@WpS zvh2PiRaRA--|u#L<7=IY#IiCOUa@A)im)g*;#{pyajxG`5HYK!k{ML23My9=6--Gb zHv62N*=#2t7o+ikZ7|#USyv|0^;u{3#=Yspja%0u?ROg=EN^!DYRh{Eg>Gbtb+_8} z&PO4Np~}KrRa89n3$R{qaLs5mz5uyduMKRqI=+uzlxfOCO-ZHEg>2zdu9;)AQ3sT$ zfveclGWf6XgRq4{RYoc2Slr1kJB?jp<O@#Y%T9p_+wHUkIrAEF#sixZi2MMYX_ou7 zY?l8xC%oLvi8AhJ4{zjRr5Z|vs#`$#*vqM8DkoK<agHi#5^gVNGrXR?TG{F4*NxZx z5k3(yE=xV3^T8e|ZOp$FWlzAxQFf~=Ib25q9^g)m+2M{dH)P4CdA*uVl64Mx(SpWw zsG}pqC8Kpwb4niVqUvJrJCako=<u>jy{O^LY~G&+yoNLPav%{<(+TDlaSN{#ZZ%#o z-r=<)FNjh_tp)xZ=MCTmM(Hey6FxWi$Q7%x=m1w%B{OC{=Fd(i=jP|;c5W)1)||T2 z_~*Xi;eErg(}hht=dh4G?ZoVlFg3gneq_3vHuETdTWA>Iz&-Cb&l<0Y`8#MgpXHjE zPghZ|F}>$~%+G`Wkv4xi8{m`e4T8T8{z<{lu{J*+d|$*WKzgf%*fy5#WhZ56E%i}} zs<e@I(_Xrh#_0e}p<W|HV(3|P6yH>({S7xms$7SQ>=aog_(d1I)kriFRuIc|ReZ>< z!{J!rTp?5NihY9r#awP{Z|~L|+OK>rm(P9090R>*5BB!f#X`3y7LR#;;f`V);a80* zo_eFVw<eZyxl1`8#^-Y1bvd@FE|<E^;ab9eg0(5EPUYT?xPrb|%olV;mN8?L=Z){N z)A-jrVA=sTGsYhxDX!pMi5EWiAyHA4Vp$(*;sD1{JtaDS+imCTJ<mMTQ=g6Qy}!Tz z{=HFN*)c!gas1q_UFRwrj_(N`ITGA+TsR(Y-X{<-(HJ+zZQ&BKEotF0>G&1U<`Hk( zCoSBL_s`1~u3-Lc#ExwmX2kVt;}Tv0K?|3uMqjdU8+d+b;dZ>s&RDpD`PXO?k)EMx zI!ZJ-J~IvQHJU)|?}8m;GzW6xz+H#NfDD;@$4oc}jtSUWL`}~FZa`m_)TRs6Oa16Y za1@YRG&D1PY-ncgz=U4R<@F7^sSmKw+uvKv7r?PBV$qlpsF{OtlcsVVf`mdEnV35| zIWw&nav=VDmx$f}Y+0-_NsRi>Hny|EDmz$XC%f3q9uy=W`#Hct4sn<xs4X#G!7K4* z?&L0%u^xn9$FnKPDPF~C^{(m3p?p3s;P!mJV!^5f`z^TDf;U@m(1P3Buwd;k6fC-E z!IA~nS+HzDOHaYlQ?T?D)?4eAzQQ((w)7S(y@f@+L+$mvr7v&k%Uk-E&Slw^xAYe+ zxkXEE(b8A6^yjVh{CeSSR8Uc2@pBp-zrxW3E#uc4i|>>bGr>V`JTg-d@cQ4@{{czN B^Opbs diff --git a/app/design/frontend/Magento/plushe/fonts/icons/icons.woff b/app/design/frontend/Magento/plushe/fonts/icons/icons.woff deleted file mode 100644 index 02d652643c34809751145ece996f0b780809ef9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5220 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 diff --git a/app/design/frontend/Magento/plushe/fonts/marvel/OFL.txt b/app/design/frontend/Magento/plushe/fonts/marvel/OFL.txt deleted file mode 100644 index 077aee25e6b..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/marvel/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2011, Carolina Trebol <ca@fromzero.org>, -with Reserved Font Name "Marvel". -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.eot b/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.eot deleted file mode 100644 index 59d0da2feff215219a5cec8bc37c7b2cb3ab8321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19062 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 Wt3sj5!iJbQTFSV0ZaU~PzH|T^@$I|- diff --git a/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.svg b/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.svg deleted file mode 100644 index 864d374918c..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.svg +++ /dev/null @@ -1,213 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="marvelregular" horiz-adv-x="856" > -<font-face units-per-em="2048" ascent="1638" descent="-410" /> -<missing-glyph horiz-adv-x="430" /> -<glyph horiz-adv-x="2048" /> -<glyph horiz-adv-x="2048" /> -<glyph unicode="
" horiz-adv-x="1024" /> -<glyph unicode=" " horiz-adv-x="430" /> -<glyph unicode="	" horiz-adv-x="430" /> -<glyph unicode=" " horiz-adv-x="430" /> -<glyph unicode="!" horiz-adv-x="391" d="M141 2v184h109v-184h-109zM143 289v1145h107v-1145h-107z" /> -<glyph unicode=""" horiz-adv-x="638" d="M76 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47.5 -184.5t-124.5 -102.5zM344 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47 -184.5t-125 -102.5z" /> -<glyph unicode="$" horiz-adv-x="964" d="M96 133l41 113q104 -47 167 -73t98.5 -38t54 -15t39.5 -3q57 0 106 21.5t86 58t57.5 88t20.5 112.5q0 63 -24.5 110.5t-63.5 79t-88 47t-98 15.5q-82 0 -154 28t-126 78t-85 118.5t-31 150.5q0 76 24.5 143.5t67.5 120.5t102.5 89t127.5 48v140h112v-142q23 -4 45.5 -11 t38.5 -13l174 -72l-38 -115q-23 10 -58 26.5t-73.5 33t-76.5 28t-69 11.5q-55 0 -102 -22.5t-81 -61.5t-53.5 -90.5t-19.5 -106.5q0 -63 23.5 -111.5t61.5 -80t87 -47t103 -15.5q82 0 153.5 -27.5t124.5 -76.5t84 -119t31 -152q0 -80 -27 -150.5t-75 -123.5t-112.5 -87 t-140.5 -40v-150h-112v156q-49 16 -99.5 34.5t-93.5 36t-76.5 33t-52.5 23.5z" /> -<glyph unicode="&" horiz-adv-x="1226" d="M63 391q0 111 52.5 188.5t146.5 133.5l115 67l-107 119q-53 59 -76.5 114.5t-23.5 125.5q0 68 25.5 127t70.5 102t108.5 68.5t137.5 25.5q72 0 135.5 -22.5t110.5 -64.5t74.5 -102.5t27.5 -133.5q0 -104 -47 -173t-131 -118l-152 -90l385 -416q45 80 60.5 177t15.5 216 h99q0 -57 -5.5 -120.5t-16.5 -126t-31.5 -121t-51.5 -103.5l225 -264h-131l-149 182q-78 -92 -188.5 -146t-247.5 -54q-90 0 -168 28.5t-136.5 81.5t-92.5 129t-34 170zM176 393q0 -68 25.5 -124t68.5 -95t100.5 -60.5t123.5 -21.5q123 0 209 46t149 126l-408 436l-112 -65 q-72 -43 -114 -101.5t-42 -140.5zM279 1139q0 -27 8 -51.5t28.5 -58.5t57.5 -80t94 -115l162 100q59 37 93 88t34 117q0 104 -70 164.5t-174 60.5q-47 0 -90 -16.5t-75 -45t-50 -70.5t-18 -93zM930 182l149 -182z" /> -<glyph unicode="'" horiz-adv-x="370" d="M76 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47.5 -184.5t-124.5 -102.5z" /> -<glyph unicode="(" horiz-adv-x="473" d="M125 168v1100q0 72 18.5 123t51 82.5t76.5 47t96 15.5h36v-111h-26q-59 0 -101.5 -31.5t-42.5 -115.5v-1120q0 -84 42 -116t102 -32h26v-110h-36q-51 0 -95.5 15t-77 47t-51 83t-18.5 123z" /> -<glyph unicode=")" horiz-adv-x="473" d="M68 8h26q57 0 100.5 32t43.5 116l2 1122q0 84 -43 115.5t-101 31.5h-26v111h36q51 0 95.5 -15.5t77 -47t51 -83t18.5 -122.5l-2 -1102q0 -72 -18.5 -123t-51 -83t-76.5 -47t-96 -15h-36v110z" /> -<glyph unicode="*" horiz-adv-x="815" d="M104 537l226 122l-226 123l46 76l219 -131l-7 258h91l-9 -258l224 131l43 -76l-226 -123l226 -122l-43 -78l-224 133l9 -258h-91l7 258l-219 -133z" /> -<glyph unicode="+" horiz-adv-x="878" d="M92 481v133h281v281h133v-281h280v-133h-280v-280h-133v280h-281z" /> -<glyph unicode="," horiz-adv-x="350" d="M31 -66q35 16 61.5 54.5t26.5 111.5v105h119v-107q0 -115 -47.5 -184.5t-124.5 -101.5z" /> -<glyph unicode="-" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> -<glyph unicode="." horiz-adv-x="370" d="M115 10v180h141v-180h-141z" /> -<glyph unicode="/" horiz-adv-x="528" d="M100 2l207 1430h123l-207 -1430h-123z" /> -<glyph unicode="0" horiz-adv-x="892" d="M141 262v799q0 59 21.5 110.5t58.5 89t86 59t107 21.5h67q55 0 104.5 -21.5t86.5 -59t58.5 -89t21.5 -110.5v-799q0 -59 -21.5 -110.5t-58.5 -89t-86 -59t-107 -21.5h-67q-57 0 -106.5 21.5t-86.5 59t-57.5 89t-20.5 110.5zM246 268q0 -74 48 -126t120 -52h65 q70 0 119 52.5t49 125.5v793q0 82 -57.5 126t-132.5 44q-43 0 -81 -8.5t-66.5 -28.5t-46 -52t-17.5 -81v-793z" /> -<glyph unicode="1" horiz-adv-x="430" d="M160 2v1274l108 55v-1329h-108z" /> -<glyph unicode="2" horiz-adv-x="813" d="M70 1249l155 64q31 12 73 20t73 10q72 0 133 -30.5t105 -82.5t70 -121t26 -148q0 -72 -13.5 -131.5t-62.5 -124.5q-55 -96 -122 -201t-124 -191q-68 -102 -135 -198h452v-115h-569v133l401 617q35 47 47.5 96t14.5 108q-2 55 -19.5 105.5t-46 88.5t-69.5 60.5t-92 22.5 q-10 0 -23.5 -3t-40.5 -12.5t-72 -27t-114 -45.5z" /> -<glyph unicode="3" horiz-adv-x="845" d="M94 1249l146 60q31 14 80 24t77 10q74 -2 133.5 -30.5t101.5 -77.5t64.5 -116.5t22.5 -147.5q0 -84 -28.5 -148.5t-106.5 -134.5q47 -35 73.5 -75t40 -82t16.5 -86t3 -85q0 -80 -25.5 -148.5t-69.5 -119.5t-105.5 -81.5t-133.5 -30.5q-31 2 -72 10t-73 20l-142 56l29 110 l168 -72q20 -8 42.5 -14t43.5 -6q51 0 93 23.5t72.5 63.5t49 91t20.5 107q0 55 -13 104t-39.5 87t-69.5 60.5t-103 22.5h-117v100h119q121 0 171 69t52 177q-2 55 -23.5 100.5t-53 77t-70.5 49t-76 17.5q-20 0 -51 -5t-51 -16l-150 -67z" /> -<glyph unicode="4" horiz-adv-x="804" d="M66 399v121l309 811h112l-303 -821h400v233h108v-743h-108v399h-518z" /> -<glyph unicode="5" horiz-adv-x="872" d="M125 63l37 117q51 -23 102 -39q43 -14 92.5 -25.5t89.5 -11.5q57 0 97.5 24t67 64.5t39 94t12.5 112.5v60q0 59 -12.5 112.5t-39 93.5t-67.5 63.5t-99 23.5h-315v579h533v-106h-412v-363h196q82 0 143.5 -30.5t102.5 -85t62.5 -128t21.5 -159.5v-60q0 -86 -20.5 -160.5 t-61.5 -132t-102.5 -90t-140.5 -32.5q-41 0 -97.5 12t-107.5 26.5t-86 27.5z" /> -<glyph unicode="6" horiz-adv-x="858" d="M141 266v766q0 68 24.5 125t67.5 99t101.5 64.5t124.5 22.5q10 0 40.5 -6t65.5 -14q39 -8 86 -20l-28 -97q-39 10 -74 19q-29 6 -55.5 12t-34.5 6q-88 0 -152.5 -57.5t-64.5 -153.5v-244q25 20 59.5 31.5t69.5 18t63.5 7.5t44.5 1q57 0 106.5 -22.5t86.5 -62.5 t58.5 -92.5t21.5 -111.5v-291q0 -59 -21.5 -110.5t-58.5 -89t-86.5 -59t-106.5 -21.5h-67q-55 0 -104.5 21.5t-86.5 59t-58.5 89t-21.5 110.5zM246 258q0 -88 60.5 -130t142.5 -42q39 0 74.5 9t63 30.5t44 53.5t16.5 79v305q0 74 -49 126t-119 52h-65q-70 0 -119 -52 t-49 -126v-305z" /> -<glyph unicode="7" horiz-adv-x="737" d="M70 1227v104h598v-133l-379 -1198h-117l383 1227h-485z" /> -<glyph unicode="8" horiz-adv-x="886" d="M137 256v174q0 78 38 139.5t99 92.5q-61 35 -99 99t-38 142v176q0 74 26.5 124t71 81t102.5 44t122 13q57 0 110.5 -18t93 -52t63.5 -82t24 -110v-176q0 -80 -39 -144.5t-103 -99.5q63 -33 102.5 -91t39.5 -138v-174q0 -55 -19.5 -105.5t-54.5 -88t-82 -59t-100 -21.5 h-99q-53 0 -100 21.5t-82 59t-55.5 88t-20.5 105.5zM242 262q0 -76 49 -129t121 -53h65q72 0 121 53t49 129v156q0 43 -17.5 75.5t-46 54t-65.5 32t-78 10.5q-80 0 -139 -41t-59 -131v-156zM242 909q0 -76 49 -129t121 -53h65q72 0 121 53.5t49 128.5v160q0 82 -57.5 127 t-134.5 45q-43 0 -81 -9t-68 -28.5t-47 -52.5t-17 -82v-160z" /> -<glyph unicode="9" horiz-adv-x="872" d="M121 797v266q0 59 21.5 110.5t58.5 89t86 59t106 21.5h68q55 0 104 -21.5t86 -59t58.5 -89t21.5 -110.5v-774q0 -68 -25.5 -125.5t-68.5 -99t-100.5 -64.5t-122.5 -23q-10 0 -56.5 10.5t-99.5 22.5q-61 14 -135 33l29 96q68 -18 122 -30q47 -12 89.5 -21.5t50.5 -9.5 q88 0 152.5 57.5t64.5 153.5v276q-20 -18 -53 -29.5t-68 -17.5t-66.5 -8t-50.5 -2q-57 0 -106 22.5t-86 62.5t-58.5 92t-21.5 112zM225 791q0 -74 48 -126.5t120 -52.5h66q70 0 119 52.5t49 126.5v280q0 82 -57.5 126t-133.5 44q-43 0 -81 -8t-66.5 -28.5t-46 -52.5 t-17.5 -81v-280z" /> -<glyph unicode=":" horiz-adv-x="393" d="M125 2v180h141v-180h-141zM127 657v185h141v-185h-141z" /> -<glyph unicode=";" horiz-adv-x="442" d="M63 -74q35 16 66 56.5t31 113.5v105h141v-107q0 -115 -47 -184.5t-125 -102.5zM160 657v185h141v-185h-141z" /> -<glyph unicode="<" horiz-adv-x="1005" d="M109 532v175l749 174v-113l-340 -74q-31 -8 -77 -17t-89 -20q-51 -10 -104 -22v-41l32 -7q31 -7 74 -15.5t89 -18.5t77 -16l338 -76v-111z" /> -<glyph unicode="=" horiz-adv-x="985" d="M141 358v131h703v-131h-703zM141 758v131h703v-131h-703z" /> -<glyph unicode=">" horiz-adv-x="1003" d="M147 360v111l338 76q31 6 77 16t89 18.5t75 15.5l32 7v41q-53 12 -105 23q-43 10 -89 19t-77 18l-340 73v113l750 -174v-174z" /> -<glyph unicode="?" horiz-adv-x="870" d="M72 1346l172 71q35 14 84 25.5t82 11.5q74 0 143.5 -25.5t121.5 -71.5t84 -110.5t32 -142.5q0 -66 -19.5 -113t-42.5 -82l-293 -440q-20 -29 -34.5 -60.5t-14.5 -78.5v-43h-119v41q0 72 17.5 119t42.5 81l278 418q23 35 45.5 76t22.5 80q0 53 -26.5 96t-66.5 72.5t-86 46 t-83 16.5q-25 0 -50.5 -6t-50.5 -16l-200 -76zM260 0h141v184h-141v-184z" /> -<glyph unicode="@" horiz-adv-x="1767" d="M92 668q0 188 59.5 344.5t169 269.5t264 175.5t345.5 62.5q158 0 295 -47.5t239.5 -137.5t162 -220t59.5 -294q0 -96 -24 -194.5t-71 -178t-121.5 -131t-175.5 -51.5q-70 0 -121 45t-63 117q-18 -35 -48 -64.5t-64.5 -50t-74.5 -32t-79 -11.5q-78 0 -138.5 30t-100.5 79 t-60.5 114.5t-20.5 137.5q0 84 25.5 163.5t74 143t119 101.5t162.5 38q72 0 134.5 -33.5t90.5 -101.5l27 117h76l-41 -541v-18q0 -66 28.5 -106t84.5 -40q70 0 124 40t88.5 106.5t53 150.5t18.5 170q0 143 -51 256t-140 191t-210 117.5t-258 39.5q-170 0 -306.5 -56 t-231.5 -156.5t-147 -239.5t-52 -305q0 -147 49 -278.5t139 -227.5t216 -152.5t277 -56.5q135 0 264.5 23.5t254.5 76.5v-96q-133 -57 -257 -77.5t-268 -20.5q-174 0 -317 62.5t-244.5 172t-158 257t-56.5 317.5zM623 631q0 -57 14 -107.5t42 -87.5t70 -58.5t99 -21.5 q72 0 122 35t81.5 87t46 116t14.5 123q0 53 -11 102t-38 87t-69 60.5t-103 22.5q-66 0 -116 -32.5t-84 -84t-51 -115t-17 -126.5z" /> -<glyph unicode="A" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM289 522h364l-168 778h-26z" /> -<glyph unicode="B" horiz-adv-x="968" d="M160 0v1374q78 31 136 47.5t83 20.5q60 12 113 12q74 0 108.5 -18.5t44.5 -24.5q47 -29 88 -79t65.5 -119.5t24.5 -145.5q0 -92 -22.5 -180t-108.5 -160q55 -37 89 -77t52.5 -81t25.5 -86t7 -94q0 -80 -20.5 -150.5t-46 -103.5t-35.5 -45q-37 -37 -91.5 -63.5 t-140.5 -26.5h-372zM274 119h258q61 0 102.5 21.5t66 58.5t34.5 86t10 104q0 57 -10 108.5t-34.5 89.5t-65.5 60.5t-103 22.5h-258v-551zM274 788h211q61 0 102.5 21.5t66 58.5t34.5 86.5t10 104.5q-2 55 -18 105t-39 81t-45 49q-4 4 -10 6q-2 0 -2 3q-2 0 -4 2 q-10 6 -32 18t-73 12q-20 0 -67.5 -8t-133.5 -45v-494z" /> -<glyph unicode="C" horiz-adv-x="894" d="M137 375v20v641q0 86 30 161t66 114q37 41 59.5 60.5t47.5 33.5q20 10 61 29.5t121 19.5q29 0 70 -10t74 -21l159 -63l-37 -107l-178 70q-20 8 -42.5 14t-43.5 6q-55 0 -104 -25.5t-87 -68.5t-59.5 -98t-21.5 -115l-4 -651q0 -66 22.5 -119t59.5 -90t86 -58.5t102 -23.5 q16 0 33.5 3t45.5 13.5t72 28t115 45.5l45 -116l-165 -60q-35 -12 -76 -20t-70 -8q-78 0 -146.5 27.5t-120.5 78.5t-83 124t-31 165z" /> -<glyph unicode="D" horiz-adv-x="976" d="M150 55v1319q123 51 205.5 65.5t111.5 14.5q80 0 148.5 -34t117.5 -90t78 -132t29 -160v-659q0 -86 -33 -159t-87 -127t-126 -83.5t-150 -29.5q-16 0 -37.5 2t-56.5 9t-84 22.5t-116 41.5zM264 150q45 -20 78 -30.5t55.5 -15t38 -4.5h25.5q51 0 98 25t83 65.5t57.5 94 t21.5 112.5l-4 641q0 92 -42 161t-93 101q-63 35 -115 35q-47 0 -102.5 -20.5t-100.5 -38.5v-1126z" /> -<glyph unicode="E" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581z" /> -<glyph unicode="F" horiz-adv-x="790" d="M160 0v1434h577v-117h-461v-539h361v-116h-361v-662h-116z" /> -<glyph unicode="G" horiz-adv-x="915" d="M137 391v651q8 193 110.5 302.5t268.5 109.5q29 -2 70 -10t73 -21l129 -49l-40 -117l-144 56q-51 20 -88 20q-53 0 -101 -23.5t-84 -63.5t-56.5 -93.5t-20.5 -110.5v-680q0 -57 21.5 -106t58.5 -86t85 -58.5t99 -21.5q20 0 58 8t116 49v388h115v-461 q-117 -61 -191.5 -77.5t-103.5 -16.5q-82 0 -150.5 32.5t-118.5 89t-78 131t-28 158.5z" /> -<glyph unicode="H" horiz-adv-x="1054" d="M162 2v1432h114v-650h500v650h117v-1432h-117v662h-500v-662h-114z" /> -<glyph unicode="I" horiz-adv-x="425" d="M160 0v1434h106v-1434h-106z" /> -<glyph unicode="J" horiz-adv-x="626" d="M31 -2l22 121q8 -2 34 -5t52.5 -5.5t49 -4.5t26.5 -2q27 0 51.5 5.5t43 22.5t29.5 49t11 85v1170h115v-1155q0 -86 -9.5 -143.5t-36 -92.5t-74.5 -49t-124 -14q-8 0 -33.5 1t-56.5 4t-58.5 6t-41.5 7z" /> -<glyph unicode="K" horiz-adv-x="798" d="M160 0v1434h114v-658h56l295 654h127l-314 -717l310 -713h-127l-289 653h-58v-653h-114z" /> -<glyph unicode="L" horiz-adv-x="770" d="M160 0v1434h116v-1319h455v-115h-571z" /> -<glyph unicode="M" horiz-adv-x="1245" d="M160 0v1434h178l266 -891h33l270 891h178v-1434h-110v1192h-27l-239 -770h-179l-237 770h-25v-1192h-108z" /> -<glyph unicode="N" horiz-adv-x="1134" d="M160 0v1434h147l535 -1293h26v1293h107v-1434h-199l-487 1192h-25v-1192h-104z" /> -<glyph unicode="O" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719z" /> -<glyph unicode="P" horiz-adv-x="1009" d="M160 0v1374q53 20 112 39q51 16 113.5 28.5t128.5 12.5q84 0 162 -29.5t137 -85t94 -134.5t35 -175q0 -98 -32.5 -180t-90 -140.5t-136.5 -91t-171 -32.5h-244v-586h-108zM270 705h228q147 0 237 81.5t90 243.5q0 160 -91 232.5t-236 72.5q-37 0 -76 -9t-74 -19 q-39 -12 -78 -27v-575z" /> -<glyph unicode="Q" horiz-adv-x="1064" d="M139 352v715q0 45 17.5 110.5t62.5 127t121 104.5t192 43q115 0 191 -43t121 -104.5t63.5 -127t18.5 -110.5v-717q0 -41 -14.5 -96t-48.5 -108.5t-91 -96.5t-145 -59q20 -49 69 -72l-34 -125q-59 25 -102.5 71t-61.5 118q-104 6 -173 48t-111 99t-58.5 118.5t-16.5 104.5 zM254 350q0 -82 31.5 -130t76 -73.5t91.5 -33t79 -7.5q33 0 80 7.5t91.5 33t75 73.5t30.5 130v717q0 82 -30.5 133t-75 81t-91.5 41t-80 11t-79.5 -11t-91 -40t-76 -80t-31.5 -133v-719z" /> -<glyph unicode="R" horiz-adv-x="1030" d="M160 0v1374q55 20 114 39q51 16 114 28.5t126 12.5q84 0 162 -27.5t137 -80t94 -128t35 -174.5q0 -70 -16.5 -136t-47 -121.5t-74.5 -97t-97 -64.5l254 -625h-115l-254 594q-37 -6 -80 -6h-244v-588h-108zM270 707h228q147 0 237 88t90 249q0 80 -24.5 135.5t-67.5 90.5 t-103 50t-132 15q-37 0 -76 -8t-74 -18q-39 -12 -78 -27v-575z" /> -<glyph unicode="S" horiz-adv-x="956" d="M88 135l41 113q70 -37 137 -64q59 -23 125 -42t119 -19q57 0 107.5 22.5t87 62.5t57 93t20.5 115q0 63 -28.5 105t-72.5 69.5t-97.5 43t-104.5 23.5q-76 12 -142.5 43t-116.5 80t-78.5 115t-28.5 147q0 84 29.5 159t81.5 131.5t122 89t148 32.5q49 0 101 -11t97 -24 q51 -16 101 -35l-39 -114q-45 18 -92 33q-41 12 -86.5 22t-86.5 10q-55 0 -103 -23.5t-83 -63.5t-55.5 -92t-20.5 -107q0 -63 26 -111.5t65.5 -81.5t89 -52.5t94.5 -27.5q84 -14 156.5 -40.5t127 -68.5t85 -103.5t30.5 -143.5q0 -86 -29.5 -162t-82 -132t-124 -90 t-153.5 -34q-80 0 -155.5 20.5t-135.5 45.5q-70 29 -133 67z" /> -<glyph unicode="T" d="M39 1323v111h778v-111h-328v-1323h-110v1323h-340z" /> -<glyph unicode="U" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5z" /> -<glyph unicode="V" horiz-adv-x="933" d="M55 1434h113l285 -1299h26q23 94 45 203q20 92 46 208t55 238q63 285 143 650h115l-332 -1434h-174z" /> -<glyph unicode="W" horiz-adv-x="1247" d="M70 1434h106l189 -1301h16l166 741h155l164 -741h17l188 1301h107l-209 -1432h-176l-160 741h-17l-161 -741h-176z" /> -<glyph unicode="X" horiz-adv-x="925" d="M51 0l299 711l-299 723h115l280 -660h35l281 660h115l-299 -723l296 -711h-116l-271 651h-49l-272 -651h-115z" /> -<glyph unicode="Y" horiz-adv-x="886" d="M31 1434h114l281 -660h35l280 660h115l-324 -783h-28v-651h-123v651h-25z" /> -<glyph unicode="Z" horiz-adv-x="927" d="M68 0v135l612 1149v29h-565v121h716v-119l-612 -1161v-33h645v-121h-796z" /> -<glyph unicode="[" horiz-adv-x="485" d="M137 -172v1763h285v-100h-182v-1563h182v-100h-285z" /> -<glyph unicode="\" horiz-adv-x="784" d="M61 1573h111l551 -1690h-109z" /> -<glyph unicode="]" horiz-adv-x="485" d="M63 -74h183v1563h-183v100h285v-1763h-285v100z" /> -<glyph unicode="_" horiz-adv-x="430" /> -<glyph unicode="`" horiz-adv-x="745" d="M205 1507h125l198 -301h-106z" /> -<glyph unicode="a" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336q0 2 -18.5 13t-50 24.5t-74.5 24.5 t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> -<glyph unicode="b" d="M92 66l39 40v1328h102v-447q82 43 141.5 50t94.5 7q57 0 106.5 -22.5t86 -62t58 -92t21.5 -111.5v-484q0 -59 -21.5 -112.5t-58 -92t-86 -61t-106.5 -22.5q-45 0 -113.5 13t-136.5 50l-55 -53zM236 162q6 -18 36.5 -31.5t68.5 -23t75 -14.5t55 -5q35 0 65.5 14.5t53 38 t36 55t13.5 68.5v498q0 74 -49 126t-121 52q-18 0 -48 -4t-62.5 -13.5t-65.5 -22.5t-57 -32v-706z" /> -<glyph unicode="c" horiz-adv-x="706" d="M113 303v428q0 70 25.5 128.5t68.5 99t101.5 64.5t125.5 24q33 0 69 -8.5t66 -18.5q37 -10 72 -25l-25 -88q-31 10 -63 19q-29 8 -59.5 14t-59.5 6q-90 0 -154.5 -58.5t-64.5 -156.5v-428q0 -49 17.5 -89t48 -68.5t70.5 -44t85 -15.5q20 0 51 5t60 11q35 8 71 19l33 -94 q-41 -14 -78 -23q-33 -8 -70.5 -14t-66.5 -6q-68 0 -126 23.5t-102 66.5t-69.5 101t-25.5 128z" /> -<glyph unicode="d" horiz-adv-x="858" d="M115 270v484q0 59 21.5 111.5t58 92t86 62t106.5 22.5q35 0 94.5 -7t141.5 -50v447h102v-1334l45 -45l-74 -71l-61 61q-66 -37 -135.5 -49t-112.5 -12q-57 0 -106.5 22.5t-86 61t-58 92t-21.5 112.5zM217 262q0 -37 13.5 -68.5t36 -55t53 -38t65.5 -14.5q18 0 55 5 t75 14.5t69 23t37 31.5v706q-72 47 -135.5 59.5t-98.5 12.5q-72 0 -121 -52t-49 -126v-498z" /> -<glyph unicode="e" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55t-16.5 -73.5v-268z" /> -<glyph unicode="f" horiz-adv-x="583" d="M51 924v100h182v160q0 72 18.5 123t50.5 82.5t76 47t95 15.5h37v-111h-27q-57 0 -101 -30.5t-44 -112.5v-174h197v-100h-195v-924h-109v924h-180z" /> -<glyph unicode="g" horiz-adv-x="858" d="M115 270v486q0 59 21.5 112.5t58 92t86 61t106.5 22.5q47 0 109.5 -13t138.5 -48l61 61l74 -73l-45 -43v-1168q0 -76 -25.5 -131t-68.5 -90t-101.5 -52t-123.5 -17q-31 0 -80.5 10t-96.5 22q-55 14 -114 33l28 96q55 -18 109 -32q43 -12 87 -21.5t67 -9.5q88 0 152.5 47 t64.5 143v275q-72 -37 -125.5 -44t-87.5 -7h-23q-57 0 -106.5 22.5t-86 62t-58 92t-21.5 111.5zM217 264q0 -74 49 -126t121 -52q18 0 50 5t68 14.5t67.5 22.5t48.5 30v708q-6 18 -37 31.5t-69 23t-75 14.5t-55 5q-35 0 -65.5 -14.5t-53 -38t-36 -55t-13.5 -68.5v-500z" /> -<glyph unicode="h" horiz-adv-x="868" d="M131 0v1434h102v-447q82 43 141.5 50t94.5 7q57 0 106.5 -22.5t86 -62t58 -92t21.5 -111.5v-756h-102v762q0 74 -49 126t-121 52q-18 0 -45 -3t-59.5 -11t-65.5 -22.5t-63 -35.5v-868h-105z" /> -<glyph unicode="i" horiz-adv-x="370" d="M131 0v1024h109v-1024h-109zM131 1274v160h109v-160h-109z" /> -<glyph unicode="j" horiz-adv-x="372" d="M-37 -389h27q29 0 55.5 7t46 24.5t31.5 45t12 70.5l-6 1268h113v-1257q0 -72 -18.5 -123.5t-51.5 -83t-77 -47t-95 -15.5h-37v111zM129 1280v152h113v-152h-113z" /> -<glyph unicode="k" horiz-adv-x="684" d="M131 0v1434h105v-820h65l219 408h117l-252 -473l254 -549h-117l-219 489h-67v-489h-105z" /> -<glyph unicode="l" horiz-adv-x="434" d="M143 270v1164h107v-1174q0 -84 42 -115.5t101 -31.5h27v-111h-37q-51 0 -95 15.5t-76 47t-50.5 83t-18.5 122.5z" /> -<glyph unicode="m" horiz-adv-x="1411" d="M88 971l74 71l61 -63q53 29 107.5 47t105.5 18q92 0 170 -38.5t109 -120.5q29 49 65.5 79.5t76.5 48t80 24.5t77 7q74 0 126 -26.5t84.5 -68.5t47 -92t14.5 -99v-758h-106v743q0 39 -9.5 74t-29 61.5t-53 43t-82.5 16.5q-129 0 -186.5 -72.5t-57.5 -203.5v-662h-107v770 q0 37 -17 67.5t-47 53t-67 36t-73 13.5q-18 0 -48 -6t-61 -16.5t-58.5 -22.5t-45.5 -27v-868h-105v926z" /> -<glyph unicode="n" horiz-adv-x="884" d="M88 967l74 73l61 -61q113 63 213 63q92 0 172 -38t121 -130q25 -51 29 -103t4 -107v-664h-109v727q0 104 -55 159.5t-125 55.5q-39 0 -99.5 -12t-135.5 -62v-868h-105v924z" /> -<glyph unicode="o" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5 t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> -<glyph unicode="p" horiz-adv-x="858" d="M88 971l72 73l63 -61q70 35 135.5 48t112.5 13q57 0 106.5 -22.5t86 -61t58 -92t21.5 -112.5v-488q0 -59 -21.5 -111.5t-58 -92t-86 -62t-106.5 -22.5q-35 0 -94 7t-141 50v-549h-103v1440zM238 156q25 -16 57.5 -28.5t65 -23t62.5 -15.5t48 -5q72 0 121 52t49 126v502 q0 37 -13.5 68.5t-36 55t-53 38t-65.5 14.5q-18 0 -47 -3t-60.5 -12.5t-64.5 -23.5t-63 -35v-710z" /> -<glyph unicode="q" horiz-adv-x="858" d="M115 268v486q0 59 21.5 112.5t58 92t86 61t106.5 22.5q45 0 111.5 -13t136.5 -48l63 61l72 -73l-45 -43v-1438h-102v545l-39 -19q-59 -29 -107.5 -30.5t-83.5 -3.5q-57 0 -107 22.5t-88 62t-60.5 92t-22.5 111.5zM217 262q0 -74 49 -125t121 -51q18 0 47 4t61.5 12.5 t66.5 21.5t59 34v706q-78 51 -137.5 62.5t-98.5 11.5q-35 0 -65.5 -14.5t-53 -38t-36 -55t-13.5 -68.5v-500z" /> -<glyph unicode="r" horiz-adv-x="675" d="M84 961l72 73l71 -69q59 53 113.5 66t93.5 13q41 0 90.5 -16t137.5 -65l-58 -86q-35 20 -57.5 31.5t-42 17.5t-36.5 7t-38 1q-31 0 -84 -17.5t-106 -66.5v-848h-103v905z" /> -<glyph unicode="s" horiz-adv-x="739" d="M92 741q0 150 81 226.5t200 76.5q35 0 72.5 -9t78.5 -23l68 -25l-39 -88q-49 18 -79 27.5t-47 13.5t-26.5 5t-19.5 1h-10q-72 0 -126.5 -56t-54.5 -159q0 -43 18.5 -75.5t47.5 -56.5t60.5 -35t60.5 -11q63 0 120.5 -11.5t99.5 -41t66.5 -82.5t24.5 -135 q0 -152 -75.5 -227.5t-194.5 -75.5q-37 0 -76 6t-78 22l-170 68l41 90l168 -68q31 -12 60.5 -17t56.5 -5q72 0 121 55t49 160q0 43 -17.5 73.5t-43 50t-57.5 29t-58 9.5q-74 0 -133.5 13t-101.5 47t-64.5 89t-22.5 139z" /> -<glyph unicode="t" horiz-adv-x="546" d="M39 924v102h174v408h109v-408h188v-102h-188v-668q0 -84 42 -115.5t101 -31.5h45v-111h-55q-51 0 -95.5 15.5t-77 47t-51 82.5t-18.5 123v658h-174z" /> -<glyph unicode="u" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107z" /> -<glyph unicode="v" horiz-adv-x="743" d="M47 1024h103l153 -614q8 -31 17.5 -77t17.5 -89t14 -74l6 -31h41q12 55 23 107q10 43 18.5 89t16.5 77l135 612h104l-231 -1024h-174z" /> -<glyph unicode="w" horiz-adv-x="1089" d="M59 1024h103l123 -889h18l152 887h178l149 -889h17l129 891h102l-164 -1024h-151l-160 893h-23l-159 -893h-150z" /> -<glyph unicode="x" horiz-adv-x="745" d="M51 0l217 510l-217 514h105l200 -451h33l191 451h108l-209 -514l215 -508h-108l-195 449h-43l-192 -451h-105z" /> -<glyph unicode="y" horiz-adv-x="768" d="M45 1024h105q53 -225 95 -382t70 -257q33 -117 56 -192h24q18 76 49 192q27 100 69 257t105 382h105l-274 -1024h-13l-84 -512h-104l84 512h-15z" /> -<glyph unicode="z" horiz-adv-x="831" d="M72 0v106l518 771v38h-500v105h645v-107l-518 -772v-37h553v-104h-698z" /> -<glyph unicode="{" horiz-adv-x="477" d="M133 80v1274q0 72 12.5 110.5t40.5 67.5q27 27 69 40t112 13h47v-100h-37q-47 0 -71.5 -3t-41.5 -20q-18 -18 -23 -51t-5 -82v-1233q0 -49 5 -78.5t23 -46.5q16 -16 41 -19t72 -3h37v-101h-47q-70 0 -112 13.5t-69 40.5q-29 29 -41 67.5t-12 110.5z" /> -<glyph unicode="|" horiz-adv-x="380" d="M139 -20v1454h103v-1454h-103z" /> -<glyph unicode="}" horiz-adv-x="487" d="M66 -47h43h26q35 0 54.5 3t33.5 17q16 16 22.5 46t6.5 79v1243q0 49 -6 79t-23 46q-16 16 -41.5 19.5t-72.5 3.5h-43v100h53q70 0 111.5 -13t70.5 -40q29 -29 41 -67.5t12 -110.5v-1274q0 -72 -12 -111t-41 -67q-29 -27 -71 -40t-111 -13h-53v100z" /> -<glyph unicode="~" horiz-adv-x="942" d="M94 539q37 37 64.5 59.5t53.5 34.5t50.5 17t52.5 5q43 0 82 -15t78 -33.5t77 -34t81 -15.5q37 0 66.5 13.5t80.5 64.5l70 -55q-37 -37 -65.5 -59.5t-53 -35t-49.5 -17.5t-53 -5q-39 0 -79 15.5t-80 33.5t-80 33.5t-81 15.5q-37 0 -66.5 -13t-80.5 -65z" /> -<glyph unicode="¡" horiz-adv-x="389" d="M139 1249v185h109v-185h-109zM141 2v1145h107v-1145h-107z" /> -<glyph unicode="¢" horiz-adv-x="727" d="M106 305v428q0 121 70 202.5t176 104.5v265h103v-258q31 -4 62.5 -12.5t57.5 -16.5q31 -10 60 -21l-25 -88q-31 10 -63 19q-29 8 -59.5 14t-59.5 6q-90 0 -154.5 -58.5t-64.5 -156.5v-428q0 -49 17.5 -89t48 -68.5t70.5 -44t85 -15.5q20 0 51 5t60 11q35 8 71 19l33 -94 q-33 -10 -65 -19q-29 -8 -63 -14t-62 -8v-256h-103v262q-106 25 -176 108.5t-70 202.5z" /> -<glyph unicode="£" horiz-adv-x="1032" d="M98 662v120h80v295q0 82 25.5 150.5t75 119t118 78t154.5 27.5q84 0 154.5 -27.5t121 -78t79 -119t28.5 -150.5h-113q0 84 -28.5 136.5t-69.5 81t-89 37.5t-85 9q-41 0 -86 -10t-84 -39.5t-63.5 -80t-24.5 -130.5v-299h452v-120h-452v-551h641v-111h-754v662h-80z" /> -<glyph unicode="¥" horiz-adv-x="985" d="M80 1436h115l280 -660h35l281 660h114l-225 -545h164v-131h-219l-43 -107h-29v-161h291v-132h-291v-358h-123v358h-289v132h289v161h-24l-46 107h-219v131h166z" /> -<glyph unicode="¦" horiz-adv-x="389" d="M141 0v639h107v-639h-107zM141 795v639h107v-639h-107z" /> -<glyph unicode="¨" horiz-adv-x="923" d="M213 1229v157h119v-157h-119zM618 1229v157h119v-157h-119z" /> -<glyph unicode="©" horiz-adv-x="1636" d="M84 715q0 152 57.5 286t157.5 233t234.5 157.5t285.5 58.5q152 0 286 -58.5t233.5 -157.5t156.5 -233t57 -286t-57 -286t-156.5 -234.5t-233.5 -157.5t-286 -57t-286 57t-234 157.5t-157.5 234.5t-57.5 286zM186 715q0 -133 50.5 -248t136.5 -201t200.5 -135t245.5 -49 t246 49t201 135t135 201t49 248q0 131 -49 246.5t-135 201.5t-201 135.5t-246 49.5t-245.5 -49.5t-200.5 -135.5t-136.5 -201.5t-50.5 -246.5zM586 555v346q0 55 19.5 100.5t54 78t80.5 51t100 18.5q25 0 53.5 -6t52.5 -15q29 -8 55 -20l-18 -70q-25 6 -49 15 q-23 6 -47.5 11t-46.5 5q-72 0 -123 -46t-51 -122v-346q0 -78 52 -125t124 -47q16 0 39.5 4t46.5 10q27 6 57 15l25 -74q-31 -10 -62 -19q-27 -6 -55.5 -11t-50.5 -5q-53 0 -99.5 18.5t-81 52.5t-55 80t-20.5 101z" /> -<glyph unicode="­" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> -<glyph unicode="®" horiz-adv-x="1636" d="M84 723q0 152 57.5 286t157.5 233t234.5 157.5t285.5 58.5q152 0 286 -58.5t233.5 -157.5t156.5 -233t57 -286t-57 -286t-156.5 -234.5t-233.5 -157.5t-286 -57t-286 57t-234 157.5t-157.5 234.5t-57.5 286zM186 723q0 -133 50.5 -248t136.5 -201t200.5 -135t245.5 -49 t246 49t201 135t135 201t49 248q0 131 -49 246.5t-135 201.5t-201 135.5t-246 49.5t-245.5 -49.5t-200.5 -135.5t-136.5 -201.5t-50.5 -246.5zM606 301v815q31 12 68 23q31 10 67.5 17t75.5 7q49 0 95 -16.5t82 -47t56.5 -76.5t20.5 -103q0 -82 -39 -152.5t-100 -95.5 l149 -371h-69l-150 352q-10 -4 -22.5 -4h-24.5h-145v-348h-64zM670 721h137q86 0 139 51t53 148q0 96 -53 134t-139 38q-23 0 -46.5 -5.5t-43.5 -11.5q-23 -8 -47 -14v-340z" /> -<glyph unicode="°" horiz-adv-x="675" d="M82 1200q0 53 20.5 99.5t54 81t80 55t99.5 20.5t100 -19.5t82 -54t55.5 -82t20.5 -100.5t-20.5 -99t-55.5 -81t-82 -55.5t-100 -20.5t-99.5 20.5t-80 55.5t-54 81t-20.5 99zM174 1200q0 -66 48 -113t114 -47q68 0 116 47t48 113q0 68 -48.5 115t-115.5 47q-66 0 -114 -47 t-48 -115z" /> -<glyph unicode="´" horiz-adv-x="948" d="M420 1208l198 301h125l-217 -301h-106z" /> -<glyph unicode="¸" horiz-adv-x="806" d="M305 -381q35 16 55.5 62.5t20.5 119.5v105h98v-107q0 -115 -30.5 -172t-83.5 -82z" /> -<glyph unicode="¿" d="M74 -156q0 66 19.5 113t41.5 82l293 440q20 29 34.5 60.5t14.5 78.5v44h119v-41q0 -72 -17.5 -119t-41.5 -82l-279 -418q-23 -35 -45.5 -76t-22.5 -80q0 -53 27 -96t67 -72.5t86 -46t83 -16.5q25 0 50 6t50 17l201 75l39 -110l-172 -72q-35 -14 -84.5 -25.5t-81.5 -11.5 q-74 0 -143.5 25.5t-122 72t-84 110.5t-31.5 142zM463 764v184h141v-184h-141z" /> -<glyph unicode="À" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM182 1917h125l198 -301h-106zM289 522h364l-168 778h-26z" /> -<glyph unicode="Á" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM289 522h364l-168 778h-26zM420 1618l198 301h125l-217 -301h-106z" /> -<glyph unicode="Â" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM209 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM289 522h364l-168 778h-26z" /> -<glyph unicode="Ã" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM168 1751h561l47 -102h-557zM289 522h364l-168 778h-26z" /> -<glyph unicode="Ä" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM213 1639v157h119v-157h-119zM289 522h364l-168 778h-26zM618 1639v157h119v-157h-119z" /> -<glyph unicode="Æ" horiz-adv-x="1501" d="M29 2l655 1432h725v-117h-465v-537h365v-118h-365v-541h469v-119h-579v399h-512l-183 -399h-110zM381 522l453 -2l2 778l-107 2z" /> -<glyph unicode="Ç" horiz-adv-x="894" d="M137 375v20v641q0 86 30 161t66 114q37 41 59.5 60.5t47.5 33.5q20 10 61 29.5t121 19.5q29 0 70 -10t74 -21l159 -63l-37 -107l-178 70q-20 8 -42.5 14t-43.5 6q-55 0 -104 -25.5t-87 -68.5t-59.5 -98t-21.5 -115l-4 -651q0 -66 22.5 -119t59.5 -90t86 -58.5t102 -23.5 q16 0 33.5 3t45.5 13.5t72 28t115 45.5l45 -116l-165 -60q-35 -12 -76 -20t-70 -8q-78 0 -146.5 27.5t-120.5 78.5t-83 124t-31 165zM387 -381q35 16 55.5 62.5t20.5 119.5v105h98v-107q0 -115 -30.5 -172t-83.5 -82z" /> -<glyph unicode="È" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581zM170 1917h125l198 -301h-106z" /> -<glyph unicode="É" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581zM367 1605l198 301h125l-217 -301h-106z" /> -<glyph unicode="Ê" horiz-adv-x="831" d="M141 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581z" /> -<glyph unicode="Ë" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581zM182 1639v157h119v-157h-119zM587 1639v157h119v-157h-119z" /> -<glyph unicode="Ì" horiz-adv-x="425" d="M-57 1917h125l198 -301h-106zM160 0v1434h106v-1434h-106z" /> -<glyph unicode="Í" horiz-adv-x="425" d="M160 0v1434h106v-1434h-106zM180 1618l198 301h125l-217 -301h-106z" /> -<glyph unicode="Î" horiz-adv-x="425" d="M-45 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM160 0v1434h106v-1434h-106z" /> -<glyph unicode="Ï" horiz-adv-x="425" d="M-47 1639v157h119v-157h-119zM160 0v1434h106v-1434h-106zM358 1639v157h119v-157h-119z" /> -<glyph unicode="Ñ" horiz-adv-x="1134" d="M160 0v1434h147l535 -1293h26v1293h107v-1434h-199l-487 1192h-25v-1192h-104zM262 1751h561l47 -102h-557z" /> -<glyph unicode="Ò" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM273 1917h125l198 -301h-106z" /> -<glyph unicode="Ó" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM492 1618l198 301h125l-217 -301h-106z" /> -<glyph unicode="Ô" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM270 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103z" /> -<glyph unicode="Õ" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM230 1751h561l47 -102h-557zM250 350 q0 -82 31.5 -130t76.5 -73.5t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719z" /> -<glyph unicode="Ö" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM276 1639v157h119v-157h-119zM681 1639v157h119v-157h-119z" /> -<glyph unicode="×" horiz-adv-x="925" d="M113 274l278 279l-278 278l71 72l279 -278l278 278l72 -72l-278 -278l278 -279l-72 -71l-278 278l-279 -278z" /> -<glyph unicode="Ø" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM346 -135l250 1704h123l-250 -1704h-123z" /> -<glyph unicode="Ù" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM289 1917h125l198 -301h-106z" /> -<glyph unicode="Ú" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM483 1618l198 301h125l-217 -301 h-106z" /> -<glyph unicode="Û" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM284 1692l205 256h113l205 -256 h-101l-159 166l-160 -166h-103z" /> -<glyph unicode="Ü" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM281 1639v157h119v-157h-119z M686 1639v157h119v-157h-119z" /> -<glyph unicode="Ý" horiz-adv-x="886" d="M31 1434h114l281 -660h35l280 660h115l-324 -783h-28v-651h-123v651h-25zM377 1618l198 301h125l-217 -301h-106z" /> -<glyph unicode="Þ" horiz-adv-x="878" d="M160 -510v1944h2h100h2v-447q82 43 141.5 50t94.5 7q57 0 106 -22.5t86 -62t58.5 -92t21.5 -111.5v-484q0 -59 -21.5 -111t-58.5 -91t-86 -61.5t-106 -22.5q-43 0 -107.5 10t-130.5 43v-549h-102zM266 145q59 -31 114.5 -45t121.5 -14q35 0 65.5 14.5t53 39t36 56 t13.5 68.5v498q0 74 -49.5 126t-120.5 52q-49 0 -118 -17.5t-116 -54.5v-723z" /> -<glyph unicode="ß" horiz-adv-x="1036" d="M131 0v1081q0 45 15.5 109.5t56.5 123t115.5 100.5t195.5 42q117 0 190.5 -42t114.5 -101.5t55.5 -125t14.5 -110.5q0 -86 -38 -166t-120 -108q70 -25 111 -67t63.5 -89t29.5 -93t7 -79v-94q0 -47 -14.5 -112.5t-55.5 -125t-114.5 -101.5t-190.5 -42h-106v111h102 q37 0 83 9t87 38.5t68.5 83t27.5 139.5v88q0 88 -25.5 141.5t-62 82t-80 37.5t-79.5 9h-47v111h45h8q94 0 141 60.5t47 164.5q0 88 -27.5 141.5t-67.5 82t-86 38t-81 9.5q-37 0 -83 -9.5t-88 -38t-70.5 -82t-28.5 -141.5v-1075h-113z" /> -<glyph unicode="à" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM158 1507h125l198 -301h-106zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336 q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> -<glyph unicode="á" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336q0 2 -18.5 13t-50 24.5t-74.5 24.5 t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129zM359 1208l198 301h125l-217 -301h-106z" /> -<glyph unicode="â" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM159 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5 t76.5 25.5q43 16 88 37v336q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> -<glyph unicode="ã" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM115 1341h561l47 -102h-557zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336 q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> -<glyph unicode="ä" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM147 1229v157h119v-157h-119zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336 q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129zM552 1229v157h119v-157h-119z" /> -<glyph unicode="æ" horiz-adv-x="1320" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 41.5 -2t61.5 -8.5t68.5 -16.5t59.5 -29v97q-6 43 -24.5 85t-46 73.5t-63.5 51t-77 19.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q76 0 140.5 -39.5 t107.5 -103.5q35 66 99.5 104.5t142.5 38.5h69q57 0 108.5 -22.5t90.5 -61t60.5 -92t21.5 -114.5v-68q0 -86 -31 -144.5t-84 -95t-123.5 -52t-150.5 -15.5q-33 0 -66 2t-67 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52 9t93 20q57 12 127 28l25 -108q-76 -16 -138 -27 q-53 -10 -101 -18t-58 -8q-37 0 -76 9t-73 24.5t-61.5 35t-41.5 39.5q-8 -4 -17 -12q-8 -6 -18.5 -13.5t-24.5 -15.5q-66 -41 -135 -55t-110 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5 t76.5 25.5q43 16 88 37v98q-2 10 -2 20.5v20.5v199q-6 4 -25.5 15t-50 23.5t-70.5 22.5t-85 10q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129zM707 496h241q37 -2 69 12t55.5 39.5t36.5 59.5t13 71v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -74.5 -12.5 t-62.5 -35t-43 -55t-16 -73.5v-268z" /> -<glyph unicode="ç" horiz-adv-x="706" d="M113 303v428q0 70 25.5 128.5t68.5 99t101.5 64.5t125.5 24q33 0 69 -8.5t66 -18.5q37 -10 72 -25l-25 -88q-31 10 -63 19q-29 8 -59.5 14t-59.5 6q-90 0 -154.5 -58.5t-64.5 -156.5v-428q0 -49 17.5 -89t48 -68.5t70.5 -44t85 -15.5q20 0 51 5t60 11q35 8 71 19l33 -94 q-41 -14 -78 -23q-33 -8 -70.5 -14t-66.5 -6q-68 0 -126 23.5t-102 66.5t-69.5 101t-25.5 128zM305 -381q35 16 55.5 62.5t20.5 119.5v105h98v-107q0 -115 -30.5 -172t-83.5 -82z" /> -<glyph unicode="è" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM166 1507h125l198 -301h-106zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55 t-16.5 -73.5v-268z" /> -<glyph unicode="é" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55t-16.5 -73.5v-268zM375 1208l198 301 h125l-217 -301h-106z" /> -<glyph unicode="ê" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM155 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9 q-39 0 -75 -12.5t-62.5 -35t-43 -55t-16.5 -73.5v-268z" /> -<glyph unicode="ë" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM172 1229v157h119v-157h-119zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55 t-16.5 -73.5v-268zM577 1229v157h119v-157h-119z" /> -<glyph unicode="ì" horiz-adv-x="370" d="M-92 1507h125l198 -301h-106zM131 0v1024h109v-1024h-109z" /> -<glyph unicode="í" horiz-adv-x="370" d="M131 0v1024h109v-1024h-109zM133 1208l199 301h125l-217 -301h-107z" /> -<glyph unicode="î" horiz-adv-x="370" d="M-74 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM131 0v1024h109v-1024h-109zM131 1274v160h109v-160h-109z" /> -<glyph unicode="ï" horiz-adv-x="370" d="M-76 1229v157h119v-157h-119zM131 0v1024h109v-1024h-109zM330 1229v157h119v-157h-119z" /> -<glyph unicode="ñ" horiz-adv-x="884" d="M88 967l74 73l61 -61q113 63 213 63q92 0 172 -38t121 -130q25 -51 29 -103t4 -107v-664h-109v727q0 104 -55 159.5t-125 55.5q-39 0 -99.5 -12t-135.5 -62v-868h-105v924zM129 1341h561l47 -102h-557z" /> -<glyph unicode="ò" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM160 1507h125l198 -301h-106zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5 t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> -<glyph unicode="ó" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5 t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM365 1208l198 301h125l-217 -301h-106z" /> -<glyph unicode="ô" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM166 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM207 295 q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> -<glyph unicode="õ" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM127 1341h561l47 -102h-557zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5 t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> -<glyph unicode="ö" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM166 1229v157h119v-157h-119zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5 t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM571 1229v157h119v-157h-119z" /> -<glyph unicode="÷" horiz-adv-x="931" d="M116 369v131h703v-131h-703zM404 2v180h141v-180h-141zM406 657v185h141v-185h-141z" /> -<glyph unicode="ø" horiz-adv-x="858" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5 t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM262 -180l207 1430h123l-207 -1430h-123z" /> -<glyph unicode="ù" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM166 1507h125l198 -301h-106z" /> -<glyph unicode="ú" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM367 1208l198 301h125l-217 -301h-106z" /> -<glyph unicode="û" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM176 1282l205 256h113l205 -256h-101l-159 166l-160 -166 h-103z" /> -<glyph unicode="ü" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM182 1229v157h119v-157h-119zM587 1229v157h119v-157 h-119z" /> -<glyph unicode="ý" horiz-adv-x="768" d="M45 1024h105q53 -225 95 -382t70 -257q33 -117 56 -192h24q18 76 49 192q27 100 69 257t105 382h105l-274 -1024h-13l-84 -512h-104l84 512h-15zM316 1208l198 301h125l-217 -301h-106z" /> -<glyph unicode="þ" horiz-adv-x="858" d="M131 -512v1944h2h100h3v-447q82 43 141 50t94 7q57 0 106.5 -22.5t86 -62t58 -92t21.5 -111.5v-484q0 -59 -21.5 -111.5t-58 -91t-86 -61t-106.5 -22.5q-43 0 -107.5 10t-130.5 43v-549h-102zM238 143q59 -31 114.5 -45t120.5 -14q35 0 65.5 14.5t53 39t36 56t13.5 68.5 v498q0 74 -49 126t-121 52q-49 0 -117.5 -17.5t-115.5 -54.5v-723z" /> -<glyph unicode="ÿ" horiz-adv-x="768" d="M45 1024h105q53 -225 95 -382t70 -257q33 -117 56 -192h24q18 76 49 192q27 100 69 257t105 382h105l-274 -1024h-13l-84 -512h-104l84 512h-15zM125 1229v157h119v-157h-119zM530 1229v157h119v-157h-119z" /> -<glyph unicode="Œ" horiz-adv-x="1480" d="M139 373v717q0 45 17.5 110.5t62.5 125.5t121 103.5t192 43.5q96 0 164 -31t115 -78v90h578v-117h-461v-536h360v-119h-360v-541h465v-118h-582v79q-47 -43 -114.5 -71.5t-166.5 -28.5q-115 0 -190.5 41t-119.5 99.5t-62.5 122t-18.5 108.5zM250 371q0 -82 31.5 -130 t76.5 -74t93.5 -33t80.5 -7q31 0 75 7t87 28.5t76 62.5t41 111v792q-8 70 -41 113t-76 66.5t-87 32t-75 8.5q-33 0 -81 -10.5t-93 -38t-76.5 -78t-31.5 -131.5v-719z" /> -<glyph unicode="œ" horiz-adv-x="1368" d="M115 276v474q0 94 34.5 151t84 88t102.5 41t92 10t92 -10t102.5 -41t84 -88t34.5 -151v-474q0 -94 -34.5 -151t-84 -89t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 151zM207 291q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5t58.5 62.5 t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM647 301v453q0 61 21.5 114.5t59.5 92t88 61t110 22.5h69q57 0 108.5 -22.5t90.5 -61t60.5 -92t21.5 -114.5v-68q0 -86 -31 -144.5t-84 -95t-123.5 -52 t-150.5 -15.5q-33 0 -66 2t-67 6v-123q14 -82 76.5 -130t142.5 -48q20 0 65 8t92 19q53 12 115 28l25 -106q-66 -16 -123 -27q-49 -10 -98.5 -18t-75.5 -8q-66 0 -125.5 23.5t-104.5 66.5t-70.5 101t-25.5 128zM754 496l241 -2h4q37 0 68 15t53.5 40.5t35.5 58.5t13 70v86 q0 49 -18 83t-48 54.5t-70 29.5t-83 9q-39 0 -74.5 -12.5t-62.5 -35t-43 -55t-16 -73.5v-268z" /> -<glyph unicode="Ÿ" horiz-adv-x="886" d="M31 1434h114l281 -660h35l280 660h115l-324 -783h-28v-651h-123v651h-25zM188 1639v157h119v-157h-119zM593 1639v157h119v-157h-119z" /> -<glyph unicode="ˆ" horiz-adv-x="811" d="M143 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103z" /> -<glyph unicode="˜" horiz-adv-x="1017" d="M205 1341h561l47 -102h-557z" /> -<glyph unicode=" " horiz-adv-x="974" /> -<glyph unicode=" " horiz-adv-x="1948" /> -<glyph unicode=" " horiz-adv-x="974" /> -<glyph unicode=" " horiz-adv-x="1948" /> -<glyph unicode=" " horiz-adv-x="649" /> -<glyph unicode=" " horiz-adv-x="487" /> -<glyph unicode=" " horiz-adv-x="324" /> -<glyph unicode=" " horiz-adv-x="324" /> -<glyph unicode=" " horiz-adv-x="243" /> -<glyph unicode=" " horiz-adv-x="389" /> -<glyph unicode=" " horiz-adv-x="108" /> -<glyph unicode="‐" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> -<glyph unicode="‑" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> -<glyph unicode="‒" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> -<glyph unicode="–" horiz-adv-x="948" d="M121 428v111h702v-111h-702z" /> -<glyph unicode="—" horiz-adv-x="1503" d="M121 428v111h1257v-111h-1257z" /> -<glyph unicode="‚" horiz-adv-x="382" d="M84 756q35 16 61.5 54t26.5 112v104h119v-106q0 -115 -47 -184.5t-125 -102.5z" /> -<glyph unicode="“" horiz-adv-x="647" d="M100 1044v107q0 115 47.5 184.5t124.5 102.5l35 -123q-35 -16 -61.5 -54t-26.5 -112v-105h-119zM369 1044v107q0 115 47 184.5t125 102.5l34 -123q-35 -16 -61.5 -54t-26.5 -112v-105h-118z" /> -<glyph unicode="”" horiz-adv-x="638" d="M76 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47.5 -184.5t-124.5 -102.5zM344 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47 -184.5t-125 -102.5z" /> -<glyph unicode="•" horiz-adv-x="606" d="M92 506q0 43 16.5 82t45 68.5t67.5 46t82 16.5t82 -16.5t68.5 -46t46 -68.5t16.5 -82t-16.5 -82t-46 -68.5t-68.5 -46t-82 -16.5t-82 16.5t-67.5 46t-45 68.5t-16.5 82z" /> -<glyph unicode="…" horiz-adv-x="1030" d="M115 10v180h141v-180h-141zM444 10v180h142v-180h-142zM774 10v180h141v-180h-141z" /> -<glyph unicode=" " horiz-adv-x="389" /> -<glyph unicode=" " horiz-adv-x="487" /> -<glyph unicode="€" horiz-adv-x="952" d="M86 512v90h147v156h-147v90h147v231q0 59 21.5 110.5t58.5 89.5t86.5 59.5t106.5 21.5h67q55 0 104.5 -21.5t86.5 -59.5t58.5 -89t21.5 -111v-47h-105v47q0 82 -57 126t-133 44q-43 0 -81 -8t-66.5 -28.5t-46 -52.5t-17.5 -81v-231h313v-90h-313v-156h313v-90h-313v-225 q0 -74 48 -126t120 -52h65q70 0 119 52t49 126v47h105v-53q0 -59 -21.5 -110.5t-58.5 -89.5t-86 -59.5t-107 -21.5h-67q-57 0 -106.5 21.5t-86.5 59.5t-57.5 89t-20.5 111v231h-147z" /> -<glyph unicode="™" horiz-adv-x="1138" d="M117 1384v50h348v-50h-148v-591h-49v591h-151zM575 793v641h80l119 -400h14l121 400h80v-641h-49v532h-12l-107 -344h-80l-106 344h-12v-532h-48z" /> -<glyph unicode="" horiz-adv-x="1024" d="M0 0v1024h1024v-1024h-1024z" /> -<glyph unicode="fi" horiz-adv-x="948" d="M51 924v100h182v160q0 72 18.5 123t50.5 82.5t76 47t95 15.5h37v-111h-27q-57 0 -101 -30.5t-44 -112.5v-174h479v-1024h-108v924h-369v-924h-109v924h-180zM709 1274v160h108v-160h-108z" /> -<glyph unicode="fl" horiz-adv-x="999" d="M51 924v100h182v160q0 72 18.5 123t50.5 82.5t76 47t95 15.5h37v-111h-27q-57 0 -101 -30.5t-44 -112.5v-174h371v410h106v-1174q0 -84 42 -115.5t101 -31.5h27v-111h-37q-51 0 -95 15.5t-76 47t-50 82.5t-18 123v654h-369v-924h-109v924h-180z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.ttf b/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.ttf deleted file mode 100644 index d5a74aa443599e53c460081f4b2324fab92944f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42136 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 diff --git a/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.woff b/app/design/frontend/Magento/plushe/fonts/marvel/marvel-400-normal-webfont.woff deleted file mode 100644 index ed785d30386afa962bc77e1d6a080d98e0ffc5ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21960 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 diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot deleted file mode 100644 index e22984c8074248543b6c0886af2e8037ca751861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24029 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 diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg deleted file mode 100644 index 6cdfecda080..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg +++ /dev/null @@ -1,245 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="source_sans_prolight" horiz-adv-x="980" > -<font-face units-per-em="2048" ascent="1536" descent="-512" /> -<missing-glyph horiz-adv-x="407" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="682" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="0" /> -<glyph unicode="
" horiz-adv-x="407" /> -<glyph unicode=" " horiz-adv-x="407" /> -<glyph unicode="	" horiz-adv-x="407" /> -<glyph unicode=" " horiz-adv-x="407" /> -<glyph unicode="!" horiz-adv-x="530" d="M178 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM219 1227v145h94l-2 -145l-12 -860h-68z" /> -<glyph unicode=""" horiz-adv-x="737" d="M170 1419h104v-141l-18 -301h-68l-16 301zM459 1419h104v-141l-18 -301h-68l-16 301z" /> -<glyph unicode="#" d="M74 438v74h178l43 348h-180v74h188l51 397h72l-51 -397h305l53 397h70l-51 -397h168v-74h-175l-43 -348h177v-74h-187l-51 -438h-72l52 438h-306l-53 -438h-72l54 438h-170zM324 512h307l43 348h-307z" /> -<glyph unicode="$" d="M121 135l49 64q59 -53 141 -98.5t189 -45.5q129 0 197.5 70t68.5 182q0 100 -44 162.5t-109.5 107t-142.5 79t-142.5 79.5t-109.5 109.5t-44 169.5q0 63 21.5 118.5t59.5 97.5t91 68.5t117 32.5v203h80v-203q100 -6 163.5 -47t116.5 -96l-53 -58q-29 29 -56.5 51.5 t-58 39t-67.5 24.5t-84 8q-106 0 -172 -66.5t-66 -168.5q0 -90 44 -144.5t109.5 -94.5t142.5 -73.5t142.5 -82t109.5 -121t44 -189.5q0 -147 -89 -235t-226 -101v-202h-80v202q-106 8 -194.5 54.5t-147.5 103.5z" /> -<glyph unicode="%" horiz-adv-x="1648" d="M82 952q0 205 77 313.5t212 108.5t211.5 -108.5t76.5 -313.5q0 -207 -76.5 -316.5t-211.5 -109.5t-212 110t-77 316zM162 952q0 -172 56.5 -265t152.5 -93t152.5 93t56.5 265t-56.5 263.5t-152.5 91.5t-152.5 -91.5t-56.5 -263.5zM405 -25l754 1399h78l-752 -1399h-80z M989 401q0 205 77 313.5t212 108.5t211.5 -108.5t76.5 -313.5q0 -207 -76.5 -316.5t-211.5 -109.5t-212 110t-77 316zM1069 401q0 -172 56.5 -265t152.5 -93t152.5 93t56.5 265t-56.5 263.5t-152.5 91.5t-152.5 -91.5t-56.5 -263.5z" /> -<glyph unicode="&" horiz-adv-x="1177" d="M74 342q0 68 23.5 123t61.5 103t88 90t103 81q-41 86 -65.5 171t-24.5 163q0 66 20.5 121t57.5 95t88 62.5t113 22.5q111 0 168 -69.5t57 -176.5q0 -66 -26.5 -121t-70.5 -103t-100.5 -92t-113.5 -87q72 -129 171 -250t203 -213q72 92 125.5 204t87.5 241h88 q-41 -139 -99 -265.5t-140 -230.5q72 -57 137.5 -95t124.5 -61l-31 -80q-133 47 -289 170q-74 -76 -163.5 -123t-204.5 -47q-80 0 -151.5 26t-124 74t-83 115.5t-30.5 151.5zM166 348q0 -68 24.5 -122t65.5 -92t97.5 -59.5t117.5 -21.5q84 0 160 40t139 106 q-109 98 -210 221t-173 254q-45 -35 -85 -72t-70.5 -77t-48 -84t-17.5 -93zM344 1077q0 -68 20.5 -140.5t55.5 -145.5q51 37 98 73.5t84 77.5t58.5 85t21.5 97q0 33 -8 65t-25.5 56.5t-45.5 39.5t-68 15q-90 0 -140.5 -65.5t-50.5 -157.5z" /> -<glyph unicode="'" horiz-adv-x="448" d="M170 1419h104v-141l-18 -301h-68l-16 301z" /> -<glyph unicode="(" horiz-adv-x="571" d="M180 569q0 270 72 496.5t199 431.5l55 -33q-123 -195 -184.5 -423t-61.5 -472t61.5 -472t184.5 -423l-55 -32q-127 205 -199 431t-72 496z" /> -<glyph unicode=")" horiz-adv-x="571" d="M66 -326q123 195 184 423.5t61 471.5q0 244 -61.5 472.5t-183.5 422.5l55 33q125 -205 197.5 -431t72.5 -497q0 -270 -72.5 -496.5t-197.5 -430.5z" /> -<glyph unicode="*" horiz-adv-x="808" d="M143 1241l19 62l194 -54l15 209h65l15 -207l194 52l21 -62l-185 -74l111 -180l-55 -41l-131 170l-136 -170l-55 41l113 180z" /> -<glyph unicode="+" d="M70 637v78h379v411h83v-411h379v-78h-379v-412h-83v412h-379z" /> -<glyph unicode="," horiz-adv-x="448" d="M98 -256q70 37 113 99.5t45 148.5q-8 -2 -25 -2q-35 0 -60.5 22.5t-25.5 63.5t27 63.5t61 22.5q47 0 76 -39t29 -107q0 -113 -59.5 -198.5t-151.5 -134.5z" /> -<glyph unicode="-" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> -<glyph unicode="." horiz-adv-x="448" d="M137 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> -<glyph unicode="/" horiz-adv-x="731" d="M18 -328l625 1782h78l-623 -1782h-80z" /> -<glyph unicode="0" d="M98 659q0 328 101.5 501t289.5 173t290 -173t102 -501q0 -330 -102 -507t-290 -177t-289.5 177.5t-101.5 506.5zM190 659q0 -301 82 -453.5t217 -152.5q137 0 218 152.5t81 453.5t-80.5 448.5t-218.5 147.5q-135 0 -217 -147t-82 -449z" /> -<glyph unicode="1" d="M172 0v80h307v1085h-233v62q80 14 142.5 34.5t109.5 47.5h73v-1229h285v-80h-684z" /> -<glyph unicode="2" d="M80 1141q74 82 163 137t210 55q176 0 272 -100t96 -266q0 -98 -43 -195.5t-120.5 -205t-189.5 -229.5t-247 -265q53 4 109.5 7t109.5 3h447v-82h-803v57q162 164 282.5 294t201.5 237.5t121 199t40 177.5q0 123 -68.5 206.5t-216.5 83.5q-90 0 -167.5 -49t-137.5 -123z " /> -<glyph unicode="3" d="M59 160l54 63q29 -33 63.5 -62.5t78.5 -53t98.5 -38t121.5 -14.5q66 0 122 20.5t97 58.5t63.5 91.5t22.5 118.5q0 68 -25.5 123t-81 95t-141.5 62.5t-208 22.5v80q113 0 191.5 22.5t126.5 60.5t69.5 90t21.5 112q0 111 -71.5 177t-192.5 66q-92 0 -168 -42t-133 -101 l-53 62q68 66 153.5 112.5t200.5 46.5q76 0 141.5 -21.5t113.5 -61.5t75.5 -98t27.5 -134q0 -129 -70.5 -208t-178.5 -116v-8q61 -12 114 -42t94 -73t64.5 -99t23.5 -126q0 -86 -30.5 -154.5t-84.5 -116.5t-127 -74t-157 -26q-78 0 -141.5 16.5t-113.5 43t-90 59.5t-71 66z " /> -<glyph unicode="4" d="M33 391v53l608 865h82v-840h195v-78h-195v-391h-88v391h-602zM143 469h492v479q0 45 2 112.5t6 113.5h-8q-25 -41 -51.5 -80t-55.5 -84z" /> -<glyph unicode="5" d="M53 152l51 63q29 -31 64 -59.5t78 -51t96 -36t121 -13.5q66 0 125 25.5t103 72t70.5 111t26.5 144.5q0 160 -86 248.5t-233 88.5q-76 0 -130 -23.5t-114 -64.5l-63 39l47 613h604v-80h-522l-41 -473q51 31 106.5 50t126.5 19q82 0 156 -24.5t127 -74.5t85 -129t32 -185 q0 -104 -36 -185.5t-94.5 -137.5t-133 -85t-154.5 -29q-78 0 -140.5 15.5t-112.5 41t-89 57.5t-70 63z" /> -<glyph unicode="6" d="M106 594q0 205 40 346t106.5 229t154 126t181.5 38q92 0 158.5 -34.5t117.5 -92.5l-55 -61q-43 53 -100.5 80.5t-120.5 27.5q-78 0 -147.5 -32.5t-123 -108.5t-85 -200t-33.5 -304q68 84 152.5 133.5t176.5 49.5q174 0 269.5 -103.5t95.5 -302.5q0 -90 -28.5 -165 t-78 -129t-114 -85t-137.5 -31q-199 0 -314 160t-115 459zM201 516q6 -104 29.5 -189t64.5 -145.5t101.5 -94.5t140.5 -34q57 0 105 25.5t83 71t55.5 105.5t20.5 130t-16.5 130t-50.5 104.5t-88 69t-128 24.5q-70 0 -153.5 -44t-163.5 -153z" /> -<glyph unicode="7" d="M90 1229v80h805v-54q-117 -156 -193.5 -299t-123 -291.5t-66.5 -310t-29 -354.5h-98q8 199 33.5 363.5t73 311t119 281t169.5 273.5h-690z" /> -<glyph unicode="8" d="M82 336q0 66 23.5 123t61.5 103t84 82t93 61v8q-37 25 -70.5 54.5t-59.5 67t-42 82t-16 97.5q0 70 26.5 129t72.5 101t108.5 65.5t134.5 23.5q84 0 149.5 -25.5t111.5 -71.5t69.5 -108.5t23.5 -136.5q0 -53 -18.5 -103t-46 -93t-60.5 -78t-61 -58v-8q43 -27 84 -57.5 t72.5 -69.5t52 -90t20.5 -117q0 -72 -28.5 -134t-81 -108t-126 -73t-161.5 -27q-90 0 -166 28t-131.5 76t-87 113.5t-31.5 143.5zM172 340q0 -61 24.5 -113.5t67.5 -91.5t102.5 -61.5t131.5 -22.5q70 0 126 20.5t96 57.5t61.5 86t21.5 104q0 76 -34 128.5t-90 92.5 t-128 69.5t-148 60.5q-100 -59 -165.5 -140t-65.5 -190zM246 1014q0 -70 29.5 -120t78.5 -88t111.5 -66.5t128.5 -53.5q84 68 128 142.5t44 160.5q0 55 -18.5 103.5t-52 85t-84 58t-113.5 21.5q-55 0 -101.5 -18t-80 -50t-52 -77t-18.5 -98z" /> -<glyph unicode="9" d="M88 926q0 88 28.5 163.5t78 129t114 84t137.5 30.5q197 0 311.5 -158.5t114.5 -457.5q0 -207 -39.5 -348.5t-105 -228.5t-154 -126t-182.5 -39q-92 0 -159.5 35t-116.5 92l55 62q43 -53 100.5 -81t122.5 -28q78 0 147.5 33t123 108.5t85 199.5t33.5 304 q-68 -82 -153.5 -131t-177.5 -49q-172 0 -267.5 103.5t-95.5 302.5zM178 926q0 -72 16.5 -132.5t51.5 -104.5t88 -68.5t129 -24.5q70 0 153.5 46t163.5 153q-6 104 -29.5 189t-65.5 145.5t-102.5 93t-140.5 32.5q-55 0 -104 -25.5t-84 -69.5t-55.5 -104.5t-20.5 -129.5z" /> -<glyph unicode=":" horiz-adv-x="448" d="M137 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM137 850q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> -<glyph unicode=";" horiz-adv-x="448" d="M98 -256q70 37 113 99.5t45 148.5q-8 -2 -25 -2q-35 0 -60.5 22.5t-25.5 63.5t27 63.5t61 22.5q47 0 76 -39t29 -107q0 -113 -59.5 -198.5t-151.5 -134.5zM137 850q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> -<glyph unicode="<" d="M70 635v90l841 336v-88l-475 -185l-272 -104v-8l272 -105l475 -184v-88z" /> -<glyph unicode="=" d="M70 430v78h841v-78h-841zM70 846v78h841v-78h-841z" /> -<glyph unicode=">" d="M70 299v88l475 184l272 105v8l-272 104l-475 185v88l841 -336v-90z" /> -<glyph unicode="?" horiz-adv-x="823" d="M76 1237q59 68 139 114t186 46q76 0 135.5 -23.5t100.5 -65.5t62.5 -99.5t21.5 -125.5q0 -70 -25.5 -128t-62.5 -111t-79 -105.5t-76 -109t-53 -121t-9 -141.5h-82q-12 84 5 152.5t50 127t74 109.5t78 101t61.5 103.5t24.5 116.5q0 47 -13.5 91t-42 77t-72.5 52.5 t-104 19.5q-76 0 -144.5 -34t-119.5 -97zM295 68q0 45 25.5 69.5t60.5 24.5t61.5 -24.5t26.5 -69.5q0 -43 -26.5 -68t-61.5 -25t-60.5 25t-25.5 68z" /> -<glyph unicode="@" horiz-adv-x="1667" d="M106 414q0 201 67 363.5t178.5 278t259 178t309.5 62.5q147 0 267 -47t203 -132t128 -204.5t45 -265.5q0 -131 -35 -230.5t-90.5 -167t-122 -101t-129.5 -33.5q-82 0 -136.5 37.5t-62.5 117.5h-4q-53 -59 -115.5 -101t-134.5 -42q-47 0 -90 17.5t-74.5 52t-50 87 t-18.5 122.5q0 74 25.5 155.5t74.5 149t120 111.5t161 44q109 0 170 -98h4l18 82h70l-74 -387q-70 -276 123 -277q49 0 101.5 31t94.5 89.5t69.5 142t27.5 192.5q0 131 -40 239.5t-114 184.5t-179 118t-239 42q-141 0 -272 -57.5t-232.5 -163t-163 -254t-61.5 -330.5 q0 -150 45 -269.5t126 -202.5t195 -128t251 -45q102 0 186 26.5t158 71.5l33 -61q-176 -111 -383 -111q-147 0 -273.5 48t-218.5 139.5t-144.5 223.5t-52.5 302zM582 412q0 -117 47 -164t116 -47q102 0 222 137l63 354q-37 57 -70.5 79t-80.5 22q-70 0 -125.5 -36t-93 -91.5 t-58 -123t-20.5 -130.5z" /> -<glyph unicode="A" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231z" /> -<glyph unicode="B" horiz-adv-x="1169" d="M193 0v1350h364q203 0 323.5 -80t120.5 -248q0 -106 -59 -185t-180 -110v-8q150 -23 236.5 -103.5t86.5 -222.5q0 -98 -35.5 -172t-101 -123t-158 -73.5t-206.5 -24.5h-391zM287 78h272q203 0 317.5 75.5t114.5 239.5q0 145 -112.5 216t-319.5 71h-272v-602zM287 756h231 q209 0 299 67.5t90 200.5q0 131 -95 189.5t-282 58.5h-243v-516z" /> -<glyph unicode="C" horiz-adv-x="1140" d="M104 678q0 160 42 289t118 220t182.5 139t235.5 48q119 0 208 -49t142 -113l-55 -61q-55 61 -129 99t-166 38q-111 0 -200 -43t-150.5 -122t-95 -191.5t-33.5 -253.5t32.5 -255t94 -193.5t148.5 -124t196 -44.5q104 0 186 41t156 125l55 -59q-78 -90 -173 -141.5 t-228 -51.5q-125 0 -228.5 49.5t-178.5 140.5t-117 221t-42 292z" /> -<glyph unicode="D" horiz-adv-x="1226" d="M193 0v1350h311q156 0 271.5 -47.5t191 -135.5t113.5 -210.5t38 -276.5t-38 -280t-113.5 -215t-190 -137t-270.5 -48h-313zM287 80h207q137 0 236 44t163.5 124t95.5 189.5t31 242.5q0 131 -31 239.5t-95.5 186.5t-163.5 121t-236 43h-207v-1190z" /> -<glyph unicode="E" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757z" /> -<glyph unicode="F" horiz-adv-x="960" d="M193 0v1350h735v-82h-641v-537h540v-82h-540v-649h-94z" /> -<glyph unicode="G" horiz-adv-x="1222" d="M104 678q0 160 43 289t122 220t189.5 139t243.5 48q68 0 124.5 -14t101.5 -38t79.5 -52.5t61.5 -57.5l-55 -61q-53 57 -127 97t-185 40q-117 0 -209 -43t-156.5 -122t-99 -191.5t-34.5 -253.5t32.5 -255t96 -193.5t155 -124t205.5 -44.5q92 0 172 27t129 76v420h-321v80 h411v-535q-63 -68 -164.5 -111t-234.5 -43q-129 0 -236.5 49.5t-183.5 140.5t-118 221t-42 292z" /> -<glyph unicode="H" horiz-adv-x="1294" d="M193 0v1350h94v-592h721v592h94v-1350h-94v676h-721v-676h-94z" /> -<glyph unicode="I" horiz-adv-x="477" d="M193 0v1350h94v-1350h-94z" /> -<glyph unicode="J" horiz-adv-x="931" d="M76 174l71 47q51 -86 113 -123t148 -37q123 0 183 75t60 241v973h94v-983q0 -82 -18 -153t-58 -124t-103.5 -84t-155.5 -31q-115 0 -198 51.5t-136 147.5z" /> -<glyph unicode="K" horiz-adv-x="1128" d="M193 0v1350h94v-750h4l653 750h111l-430 -500l489 -850h-108l-445 778l-274 -313v-465h-94z" /> -<glyph unicode="L" horiz-adv-x="942" d="M193 0v1350h94v-1268h620v-82h-714z" /> -<glyph unicode="M" horiz-adv-x="1431" d="M193 0v1350h131l282 -793l107 -299h8l104 299l281 793h133v-1350h-92v887q0 84 4 181t8 183h-8l-104 -297l-291 -807h-82l-291 807l-107 297h-8q4 -86 7.5 -183t3.5 -181v-887h-86z" /> -<glyph unicode="N" horiz-adv-x="1288" d="M193 0v1350h98l567 -953l154 -268h8q-4 98 -8 196.5t-4 196.5v828h88v-1350h-99l-567 952l-154 269h-8q4 -98 8.5 -191.5t4.5 -191.5v-838h-88z" /> -<glyph unicode="O" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5z" /> -<glyph unicode="P" horiz-adv-x="1128" d="M193 0v1350h368q113 0 202 -19.5t150.5 -64.5t94 -117t32.5 -176q0 -199 -127 -296t-352 -97h-274v-580h-94zM287 659h250q209 0 308 74t99 240q0 86 -25.5 142t-75.5 91t-127 49.5t-179 14.5h-250v-611z" /> -<glyph unicode="Q" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t222.5 48q123 0 225.5 -48t176.5 -139t115 -219t41 -288q0 -152 -37 -276.5t-103.5 -216t-160 -145.5t-205.5 -65q47 -102 136 -155t216 -53q47 0 79 5t58 13l21 -82q-27 -8 -71 -15t-95 -7q-170 0 -284 83.5t-165 210.5 q-111 10 -203 64.5t-158.5 146t-103.5 216t-37 276.5zM203 680q0 -141 32.5 -255t92 -194.5t144.5 -125t187 -44.5t186.5 44.5t145 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-187 43q-102 0 -187 -43t-144.5 -122t-92 -191.5t-32.5 -251.5z" /> -<glyph unicode="R" horiz-adv-x="1132" d="M193 0v1350h385q100 0 182 -19.5t140 -62.5t90 -110.5t32 -164.5q0 -162 -93 -253t-253 -113l371 -627h-109l-365 621h-286v-621h-94zM287 698h266q180 0 275.5 73t95.5 222q0 152 -95.5 214.5t-275.5 62.5h-266v-572z" /> -<glyph unicode="S" horiz-adv-x="1052" d="M88 178l59 66q74 -84 176.5 -133.5t221.5 -49.5q154 0 245 75t91 196q0 63 -19.5 106t-52.5 75t-78 55.5t-94 45.5l-205 93q-43 18 -91 44.5t-88 66.5t-66.5 94.5t-26.5 129.5q0 74 29.5 134.5t82 104.5t124 68.5t155.5 24.5q123 0 219 -48t158 -114l-56 -63 q-59 63 -139 101t-182 38q-135 0 -216 -65.5t-81 -175.5q0 -59 22.5 -100.5t57.5 -71t76 -51t77 -38.5l205 -90q55 -25 106.5 -55.5t90.5 -71.5t62.5 -97t23.5 -134t-31 -144.5t-87 -114.5t-136 -76t-178 -28q-147 0 -261 56.5t-194 146.5z" /> -<glyph unicode="T" horiz-adv-x="1058" d="M53 1268v82h953v-82h-428v-1268h-95v1268h-430z" /> -<glyph unicode="U" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262z" /> -<glyph unicode="V" horiz-adv-x="991" d="M2 1350h100l250 -789q18 -61 36 -116.5t34 -109.5t33.5 -109.5t38.5 -116.5h8q41 123 72.5 226t70.5 226l250 789h94l-440 -1350h-103z" /> -<glyph unicode="W" horiz-adv-x="1562" d="M49 1350h101l167 -795q25 -111 48.5 -220.5t46.5 -219.5h8q23 111 49.5 220t52.5 220l213 795h94l213 -795q27 -111 53.5 -220.5t53.5 -219.5h8q23 111 45.5 220t44.5 220l168 795h94l-303 -1350h-104l-246 926q-18 80 -35.5 152.5t-36.5 152.5h-8q-16 -80 -35.5 -152.5 t-38.5 -152.5l-241 -926h-105z" /> -<glyph unicode="X" horiz-adv-x="972" d="M29 0l403 698l-377 652h103l223 -398q27 -47 50.5 -88t57.5 -96h9q29 55 51 96t49 88l221 398h96l-376 -656l405 -694h-102l-236 414q-29 51 -58.5 102t-64.5 113h-8q-33 -61 -60.5 -112.5t-56.5 -102.5l-233 -414h-96z" /> -<glyph unicode="Y" horiz-adv-x="901" d="M-2 1350h100l205 -422q35 -74 70 -145.5t73 -145.5h9q39 74 75.5 145.5t71.5 145.5l205 422h96l-405 -803v-547h-95v547z" /> -<glyph unicode="Z" horiz-adv-x="1087" d="M94 0v55l778 1213h-708v82h825v-56l-776 -1212h784v-82h-903z" /> -<glyph unicode="[" horiz-adv-x="571" d="M201 -311v1761h327v-64h-256v-1638h256v-59h-327z" /> -<glyph unicode="\" horiz-adv-x="731" d="M10 1454h78l627 -1782h-82z" /> -<glyph unicode="]" horiz-adv-x="571" d="M43 -252h256v1638h-256v64h328v-1761h-328v59z" /> -<glyph unicode="^" d="M135 594l307 778h95l309 -778h-88l-158 416l-106 272h-9l-104 -272l-158 -416h-88z" /> -<glyph unicode="_" horiz-adv-x="1024" d="M25 -162h974v-78h-974v78z" /> -<glyph unicode="`" horiz-adv-x="1095" d="M367 1450h106l189 -279h-78z" /> -<glyph unicode="a" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122v20q0 46 -7 92q-9 56 -35 100t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104z" /> -<glyph unicode="b" horiz-adv-x="1114" d="M188 0v1473h91v-426l-5 -193q76 63 162 108.5t178 45.5q197 0 295.5 -136.5t98.5 -365.5q0 -125 -35 -223.5t-95.5 -167t-139.5 -104.5t-165 -36q-72 0 -148.5 32t-145.5 85h-5l-10 -92h-76zM279 182q82 -70 157.5 -98.5t132.5 -28.5q74 0 137.5 33t108.5 92.5 t70.5 142.5t25.5 183q0 90 -17 168t-54 134t-96.5 88t-143.5 32q-74 0 -153.5 -42t-167.5 -120v-584z" /> -<glyph unicode="c" horiz-adv-x="919" d="M106 489q0 123 37 220.5t98.5 163t142.5 100.5t171 35q102 0 171 -37t118 -84l-53 -64q-47 45 -104.5 75t-129.5 30q-76 0 -140.5 -32t-112.5 -90t-75.5 -138t-27.5 -179q0 -96 25.5 -176t71.5 -137t112.5 -89t146.5 -32q78 0 144.5 33t117.5 80l47 -62q-63 -57 -141 -94 t-172 -37q-96 0 -177 35t-141.5 100.5t-94.5 160.5t-34 218z" /> -<glyph unicode="d" horiz-adv-x="1114" d="M106 489q0 119 35 215.5t95.5 164t139.5 103.5t167 36q90 0 156.5 -32t140.5 -89l-4 180v406h90v-1473h-78l-8 127h-6q-59 -59 -140.5 -105.5t-179.5 -46.5q-186 0 -297 132t-111 382zM203 489q0 -98 21.5 -178t62.5 -136t101.5 -88t137.5 -32q82 0 157 42t153 120v584 q-78 70 -146.5 98.5t-140.5 28.5q-74 0 -137.5 -34t-109.5 -92.5t-72.5 -139.5t-26.5 -173z" /> -<glyph unicode="e" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5z" /> -<glyph unicode="f" horiz-adv-x="538" d="M68 905v70l135 8v219q0 147 63.5 221t179.5 74q72 0 144 -33l-25 -73q-31 16 -60.5 22t-58.5 6q-78 0 -115.5 -58t-37.5 -165v-213h227v-78h-227v-905h-90v905h-135z" /> -<glyph unicode="g" horiz-adv-x="997" d="M106 -201q0 66 39 127.5t107 110.5v8q-37 23 -61.5 61.5t-24.5 96.5q0 66 37 111.5t69 68.5v8q-47 41 -84.5 110.5t-37.5 160.5q0 76 26.5 139t73.5 109t110.5 72t135.5 26q41 0 73.5 -7.5t55.5 -17.5h333v-76h-229q47 -41 78 -105.5t31 -142.5q0 -76 -27 -139t-73 -109 t-108.5 -72t-133.5 -26q-41 0 -85 10.5t-79 30.5q-33 -27 -56.5 -59.5t-23.5 -81.5q0 -53 39 -91t149 -38h211q166 0 245 -54.5t79 -170.5q0 -63 -33 -124t-93.5 -107t-146.5 -73.5t-192 -27.5q-186 0 -295 73.5t-109 198.5zM193 -193q0 -92 84.5 -149t242.5 -57 q82 0 149.5 21.5t114.5 56t73 78.5t26 91q0 82 -58.5 116t-169.5 34h-211q-16 0 -50 3t-72 13q-68 -47 -98.5 -100.5t-30.5 -106.5zM240 662q0 -61 20.5 -112.5t56 -88.5t82 -56.5t97.5 -19.5t97 19.5t81 56.5t55.5 88t20.5 113q0 61 -20.5 112t-54.5 86t-81 54.5t-98 19.5 q-53 0 -99.5 -19.5t-81 -54.5t-55 -85t-20.5 -113z" /> -<glyph unicode="h" horiz-adv-x="1081" d="M188 0v1473h91v-426v-218q78 78 157.5 128.5t181.5 50.5q154 0 225.5 -92.5t71.5 -284.5v-631h-90v618q0 158 -52 233t-173 75q-88 0 -159.5 -46t-161.5 -139v-741h-91z" /> -<glyph unicode="i" horiz-adv-x="468" d="M154 1300q0 39 23.5 60.5t58.5 21.5t58 -21.5t23 -60.5q0 -35 -23 -57t-58 -22t-58.5 22.5t-23.5 56.5zM188 0v983h91v-983h-91z" /> -<glyph unicode="j" horiz-adv-x="468" d="M-68 -444l23 73q18 -6 46 -13t56 -7q82 0 106.5 60.5t24.5 154.5v1159h93v-1165q0 -145 -53.5 -216t-168.5 -71q-35 0 -69.5 7t-57.5 18zM154 1300q0 39 24.5 60.5t57.5 21.5q35 0 59 -21.5t24 -60.5q0 -35 -24 -57t-59 -22q-33 0 -57.5 22.5t-24.5 56.5z" /> -<glyph unicode="k" horiz-adv-x="950" d="M188 0v1473h91v-1086h4l485 596h104l-319 -389l373 -594h-101l-325 526l-221 -258v-268h-91z" /> -<glyph unicode="l" horiz-adv-x="485" d="M188 131v1342h91v-1354q0 -33 12 -48.5t31 -15.5h13t23 4l17 -73q-14 -4 -28.5 -7.5t-37.5 -3.5q-121 0 -121 156z" /> -<glyph unicode="m" horiz-adv-x="1662" d="M188 0v983h78l8 -152h7q66 76 146.5 126.5t162.5 50.5q119 0 182.5 -54.5t89.5 -146.5q86 92 167 146.5t167 54.5q295 0 295 -377v-631h-92v618q0 158 -53.5 233t-165.5 75q-133 0 -295 -185v-741h-90v618q0 158 -53.5 233t-168.5 75q-133 0 -294 -185v-741h-91z" /> -<glyph unicode="n" horiz-adv-x="1089" d="M188 0v983h78l8 -152h7q76 76 155.5 126.5t181.5 50.5q154 0 225.5 -92.5t71.5 -284.5v-631h-90v618q0 158 -52 233t-173 75q-88 0 -159.5 -46t-161.5 -139v-741h-91z" /> -<glyph unicode="o" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5z" /> -<glyph unicode="p" horiz-adv-x="1114" d="M188 -444v1427h78l8 -123h7q72 57 156.5 102.5t176.5 45.5q197 0 295.5 -136.5t98.5 -365.5q0 -125 -35 -223.5t-95.5 -167t-139.5 -104.5t-165 -36q-70 0 -143.5 32t-150.5 89v-182v-358h-91zM279 182q86 -70 159.5 -98.5t130.5 -28.5q74 0 137.5 33t108.5 92.5 t70.5 142.5t25.5 183q0 90 -17 168t-54 134t-96.5 88t-143.5 32q-74 0 -152.5 -42t-168.5 -120v-584z" /> -<glyph unicode="q" horiz-adv-x="1099" d="M106 489q0 119 35 215.5t95.5 164t139.5 103.5t167 36q90 0 156.5 -31t136.5 -84h4l10 90h76v-1427h-90v378l4 191q-66 -59 -147 -104.5t-179 -45.5q-186 0 -297 132t-111 382zM203 489q0 -98 21.5 -178t62.5 -136t101.5 -88t137.5 -32q82 0 157 42t153 120v584 q-78 70 -146.5 98.5t-140.5 28.5q-74 0 -137.5 -34t-109.5 -92.5t-72.5 -139.5t-26.5 -173z" /> -<glyph unicode="r" horiz-adv-x="649" d="M188 0v983h78l8 -182h7q49 92 119.5 149.5t158.5 57.5q29 0 51.5 -5t46.5 -16l-20 -82q-25 10 -43.5 13.5t-46.5 3.5q-66 0 -138.5 -56.5t-129.5 -195.5v-670h-91z" /> -<glyph unicode="s" horiz-adv-x="829" d="M66 111l53 67q63 -53 135 -89t178 -36q117 0 175.5 58.5t58.5 136.5q0 45 -21.5 79.5t-56.5 59.5t-77 43.5t-85 34.5q-55 20 -111.5 42.5t-101.5 54.5t-72.5 76t-27.5 107q0 53 20.5 101.5t61.5 84.5t99 56.5t136 20.5t152.5 -29t128.5 -74l-49 -63q-49 37 -104.5 62.5 t-131.5 25.5q-57 0 -98 -15.5t-69 -40t-41 -57.5t-13 -65q0 -41 19.5 -71t52 -53.5t74.5 -41t85 -33.5q57 -23 114.5 -45.5t103.5 -55t75 -80.5t29 -120q0 -55 -21.5 -105.5t-64.5 -88.5t-104.5 -60.5t-141.5 -22.5q-111 0 -203 40t-157 96z" /> -<glyph unicode="t" horiz-adv-x="638" d="M57 905v70l156 8l12 285h78v-285h285v-78h-285v-641q0 -47 7 -85t25.5 -65.5t50.5 -43t83 -15.5q29 0 62.5 9.5t60.5 21.5l24 -74q-43 -16 -86 -26.5t-73 -10.5q-72 0 -119 21.5t-76 60.5t-40 94.5t-11 120.5v633h-154z" /> -<glyph unicode="u" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5z" /> -<glyph unicode="v" horiz-adv-x="888" d="M25 983h98l221 -616q23 -72 49.5 -143.5t48.5 -139.5h9q25 68 50 139.5t50 143.5l221 616h92l-364 -983h-107z" /> -<glyph unicode="w" horiz-adv-x="1402" d="M49 983h98l177 -637q18 -68 34.5 -132t32.5 -130h8q16 66 35 130.5t37 131.5l178 637h109l178 -637q18 -68 36.5 -132t37.5 -130h8q16 66 34.5 130.5t34.5 131.5l175 637h92l-283 -983h-119l-172 610q-23 72 -38 140.5t-37 140.5h-9q-16 -72 -35.5 -142.5t-42.5 -142.5 l-169 -606h-109z" /> -<glyph unicode="x" horiz-adv-x="833" d="M29 0l333 514l-307 469h101l159 -250q25 -41 50.5 -81t54.5 -81h8q27 41 50.5 81t49.5 81l154 250h94l-305 -477l334 -506h-100l-175 268q-29 47 -57.5 92.5t-58.5 88.5h-8q-29 -43 -56.5 -88.5t-56.5 -92.5l-168 -268h-96z" /> -<glyph unicode="y" horiz-adv-x="892" d="M25 983h98l237 -618q23 -61 50.5 -135t56.5 -140h8q23 66 46.5 139.5t43.5 135.5l211 618h92l-389 -1106q-20 -61 -50 -119.5t-70 -104.5t-92 -74t-117 -28q-55 0 -101 21l21 80q16 -6 36.5 -11.5t43.5 -5.5q92 0 153.5 74t97.5 187l27 86z" /> -<glyph unicode="z" horiz-adv-x="827" d="M55 0v49l582 856h-518v78h635v-47l-580 -856h600v-80h-719z" /> -<glyph unicode="{" horiz-adv-x="571" d="M72 537v65q53 0 88 14.5t54 37t26.5 51t7.5 59.5q0 98 -8.5 208.5t-8.5 215.5q0 152 56.5 207t167.5 55h73v-64h-67q-92 0 -123 -49t-31 -157q0 -94 6 -194.5t6 -199.5q0 -92 -21.5 -143t-82.5 -70v-8q61 -18 82.5 -71.5t21.5 -141.5q0 -111 -6 -202t-6 -191 q0 -109 31 -160t123 -51h67v-59h-73q-55 0 -97.5 12t-70 42t-42 80t-14.5 128q0 115 8.5 214t8.5 206q0 31 -7.5 61.5t-26.5 53t-54 37t-88 14.5z" /> -<glyph unicode="|" horiz-adv-x="462" d="M195 -512v2048h73v-2048h-73z" /> -<glyph unicode="}" horiz-adv-x="571" d="M43 -252h63q94 0 126 51t32 160q0 100 -6 191.5t-6 201.5q0 88 22.5 141.5t81.5 71.5v8q-59 18 -81.5 69.5t-22.5 143.5q0 98 6 198.5t6 195.5q0 109 -31.5 157.5t-126.5 48.5h-63v64h70q113 0 170 -55.5t57 -206.5q0 -104 -8 -215t-8 -209q0 -31 7 -59.5t26.5 -51 t54 -37t88.5 -14.5v-65q-53 0 -88 -14.5t-54.5 -37t-26.5 -53.5t-7 -61q0 -106 8 -205.5t8 -214.5q0 -78 -14.5 -128t-43 -80t-70.5 -42t-99 -12h-70v59z" /> -<glyph unicode="~" d="M82 637q45 86 105.5 128t119.5 42t107.5 -28.5t92.5 -63.5t85 -63.5t86 -28.5q47 0 86 28.5t76 100.5l57 -41q-43 -84 -103.5 -125t-119.5 -41t-107.5 28.5t-92.5 63.5t-85 63.5t-86 28.5q-47 0 -86 -28.5t-76 -100.5z" /> -<glyph unicode="¡" horiz-adv-x="530" d="M178 918q0 41 26.5 65.5t61.5 24.5t60.5 -24.5t25.5 -65.5q0 -47 -25.5 -72t-60.5 -25t-61.5 24.5t-26.5 72.5zM219 -244l12 860h68l12 -860l2 -145h-94v145z" /> -<glyph unicode="¢" d="M127 637q0 106 30.5 189t85 143.5t126 95.5t153.5 43v227h70v-223q98 -4 163.5 -40t112.5 -83l-49 -57q-47 41 -102 68.5t-125 31.5v-788q76 4 139.5 34.5t112.5 75.5l47 -59q-59 -55 -134 -91t-165 -40v-221h-70v223q-86 8 -158.5 43t-125 95.5t-82 144t-29.5 188.5z M219 637q0 -160 81 -264.5t222 -124.5v780q-66 -10 -122 -43t-96 -83t-62.5 -117.5t-22.5 -147.5z" /> -<glyph unicode="£" d="M111 600v68l135 6h49q-23 78 -44.5 154.5t-21.5 156.5q0 162 93.5 255t255.5 93q106 0 176.5 -43t117.5 -102l-59 -55q-43 51 -98.5 85.5t-136.5 34.5q-63 0 -111.5 -20.5t-80.5 -57t-48 -86t-16 -104.5q0 -82 21.5 -156.5t43.5 -154.5h338v-74h-322q8 -35 12.5 -70.5 t4.5 -76.5q0 -127 -39 -211t-109 -152v-8h605v-82h-760v55q115 66 166 172.5t51 225.5q0 39 -5 75.5t-14 71.5h-204z" /> -<glyph unicode="¤" d="M61 291l136 137q-37 49 -57.5 110.5t-20.5 133.5q0 74 20.5 137t57.5 113l-136 139l56 57l135 -141q47 43 109.5 66.5t127.5 23.5q66 0 128.5 -23.5t109.5 -66.5l137 141l54 -57l-136 -139q37 -49 57.5 -113t20.5 -137q0 -72 -20.5 -133.5t-55.5 -110.5l134 -137l-54 -58 l-137 140q-47 -45 -109.5 -68.5t-128.5 -23.5q-135 0 -237 92l-135 -140zM209 672q0 -70 22.5 -128.5t60.5 -99.5t89 -64.5t108 -23.5t108.5 23.5t89.5 64.5t60.5 99.5t22.5 128.5t-22.5 129t-60.5 101t-89 65.5t-109 23.5q-57 0 -108 -23.5t-89 -65.5t-60.5 -101 t-22.5 -129z" /> -<glyph unicode="¥" d="M61 1309h99l192 -396l66 -136t69 -144h9q39 76 70.5 144.5t66.5 135.5l192 396h95l-357 -688h316v-68h-344v-145h344v-70h-344v-338h-93v338h-340v70h340v145h-340v68h312z" /> -<glyph unicode="¦" horiz-adv-x="462" d="M195 451h73v-963h-73v963zM195 571v965h73v-965h-73z" /> -<glyph unicode="§" d="M102 721q0 98 52.5 162.5t130.5 105.5q-31 31 -49.5 72t-18.5 94q0 43 16.5 86t51 77t86 55.5t123.5 21.5q86 0 157.5 -31t128.5 -78l-49 -63q-49 41 -103.5 67.5t-131.5 26.5q-51 0 -88 -13.5t-59.5 -35t-34 -50t-11.5 -57.5q0 -68 43 -109.5t106.5 -75.5t138.5 -63.5 t138.5 -71.5t106.5 -103.5t43 -155.5q0 -102 -50.5 -161t-128.5 -102q33 -33 51.5 -74.5t18.5 -97.5q0 -55 -23.5 -102t-63.5 -81t-93 -52t-113 -18q-106 0 -188 35.5t-142 93.5l62 57q53 -49 113.5 -80t154.5 -31t149.5 51.5t55.5 122.5q0 70 -43 114t-107.5 77 t-139.5 62.5t-139.5 70.5t-107.5 100.5t-43 153.5zM188 727q0 -80 46.5 -130t115 -86t146 -66.5t143.5 -73.5q74 35 114 78t40 126q0 82 -46.5 134.5t-115 89.5t-146 68.5t-141.5 72.5q-70 -41 -113 -88t-43 -125z" /> -<glyph unicode="¨" horiz-adv-x="1095" d="M311 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM633 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="©" horiz-adv-x="1517" d="M104 659q0 154 52.5 279t142.5 213t209 136t252 48q131 0 249.5 -48t209 -136t142.5 -213t52 -279q0 -156 -52 -281.5t-142.5 -214.5t-209 -138.5t-249.5 -49.5q-133 0 -252 49.5t-209 138.5t-142.5 214.5t-52.5 281.5zM176 659q0 -139 47 -253.5t127 -195.5t185.5 -126 t224.5 -45q117 0 222 45t185 126t127 195.5t47 253.5q0 137 -47 251t-127 195t-185 125t-222 44q-119 0 -224.5 -44t-185.5 -125t-127 -195t-47 -251zM412 659q0 88 30.5 160t80.5 121t117 75.5t140 26.5q82 0 139.5 -31.5t106.5 -80.5l-47 -53q-47 45 -93 67.5t-108 22.5 q-123 0 -200.5 -84t-77.5 -224q0 -154 74.5 -241.5t199.5 -87.5q74 0 131.5 29.5t104.5 72.5l41 -57q-55 -49 -119 -85t-162 -36q-74 0 -138.5 27.5t-113.5 80t-77.5 127t-28.5 170.5z" /> -<glyph unicode="ª" horiz-adv-x="690" d="M86 702q0 109 100.5 165.5t321.5 76.5q0 39 -7 74t-23.5 60.5t-43 40t-69.5 14.5q-61 0 -123 -26t-97 -50l-30 55q41 29 109.5 58.5t148.5 29.5q119 0 165 -70.5t46 -187.5v-410h-62l-12 80h-8q-43 -37 -97 -66.5t-120 -29.5q-88 0 -143.5 49t-55.5 137zM166 709 q0 -66 37 -96.5t100 -30.5q96 0 205 100v209q-190 -20 -266 -66.5t-76 -115.5z" /> -<glyph unicode="«" horiz-adv-x="819" d="M88 477v78l281 330l51 -43l-252 -326l252 -330l-51 -39zM377 477v78l281 330l51 -43l-252 -326l252 -330l-51 -39z" /> -<glyph unicode="¬" d="M70 637v78h841v-490h-84v412h-757z" /> -<glyph unicode="­" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> -<glyph unicode="®" horiz-adv-x="821" d="M37 1059q0 90 29.5 163.5t81 126t119 81t143.5 28.5t144.5 -28.5t118.5 -81t79.5 -126t29.5 -163.5t-29.5 -163t-79.5 -124t-118.5 -79.5t-144.5 -28.5t-143.5 28.5t-119 79.5t-81 124t-29.5 163zM100 1059q0 -74 25 -135.5t65.5 -105.5t97 -69.5t122.5 -25.5 q63 0 120.5 25.5t98.5 69.5t65.5 105.5t24.5 135.5t-24.5 136t-65.5 108.5t-98.5 72t-120.5 25.5q-66 0 -122.5 -25.5t-97 -72t-65.5 -108.5t-25 -136zM270 856v422h142q31 0 58.5 -6t50 -21.5t35.5 -40t13 -63.5t-23.5 -72t-58.5 -43l101 -176h-76l-80 156h-96v-156h-66z M336 1067h59q47 0 76 17.5t29 58.5q0 35 -21.5 56.5t-77.5 21.5h-65v-154z" /> -<glyph unicode="¯" horiz-adv-x="1095" d="M316 1241v74h462v-74h-462z" /> -<glyph unicode="°" horiz-adv-x="636" d="M86 1157q0 57 19.5 102.5t52 77t74.5 48t87 16.5t87.5 -16.5t75 -48t52 -77t19.5 -102.5t-19.5 -102t-52 -76t-75 -47.5t-87.5 -16.5t-87 16.5t-74.5 47.5t-52 76t-19.5 102zM156 1157q0 -76 45.5 -126t117.5 -50t118 50t46 126q0 78 -46 129t-118 51t-117.5 -51 t-45.5 -129z" /> -<glyph unicode="±" d="M70 0v76h841v-76h-841zM70 635v76h379v415h83v-415h379v-76h-379v-412h-83v412h-379z" /> -<glyph unicode="²" horiz-adv-x="741" d="M96 1575q37 61 103.5 105t142.5 44q111 0 179.5 -62.5t68.5 -189.5q0 -63 -25.5 -120.5t-70.5 -117t-110 -124t-140 -139.5h393v-70h-522v51q102 94 177 168t123 133.5t71.5 109.5t23.5 101q0 88 -48 139.5t-128 51.5q-55 0 -103.5 -37t-83.5 -90z" /> -<glyph unicode="³" horiz-adv-x="741" d="M82 1030l59 45q37 -59 95.5 -95t128.5 -36q76 0 131 44t55 126q0 78 -76 121t-207 43v57q121 0 185.5 51.5t64.5 120.5q0 66 -46 108t-124 42q-47 0 -95 -30t-87 -77l-51 45q43 55 103.5 92t137.5 37q100 0 171 -55t71 -156q0 -76 -44 -126t-110 -76q37 -6 70 -22.5 t59.5 -41t42 -58.5t15.5 -77q0 -55 -20.5 -99t-57.5 -74t-86 -46.5t-105 -16.5q-94 0 -166.5 46.5t-113.5 107.5z" /> -<glyph unicode="´" horiz-adv-x="1095" d="M432 1171l189 279h106l-217 -279h-78z" /> -<glyph unicode="µ" horiz-adv-x="1099" d="M188 -410v1393h91v-618q0 -158 53 -233t172 -75q88 0 158.5 48.5t158.5 152.5v725h90v-983h-77l-9 164h-6q-70 -86 -146.5 -136.5t-174.5 -50.5q-76 0 -129.5 23t-94.5 90l5 -184v-316h-91z" /> -<glyph unicode="¶" horiz-adv-x="1054" d="M86 924q0 115 35 195.5t98.5 132t151.5 75t192 23.5h90v-850h-57q-113 0 -207 23.5t-161.5 73.5t-104.5 131t-37 196zM764 -164v1514h94v-1514h-94z" /> -<glyph unicode="·" horiz-adv-x="448" d="M137 660q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> -<glyph unicode="¸" horiz-adv-x="1095" d="M413 -365q86 12 138.5 37t52.5 68q0 47 -39 69.5t-98 38.5l82 156h71l-59 -115q49 -16 86 -47.5t37 -93.5q0 -41 -21.5 -70.5t-57.5 -50t-82 -34t-95 -19.5z" /> -<glyph unicode="¹" horiz-adv-x="741" d="M193 1565v55q59 12 101 31.5t77 48.5h67v-799h-78v664h-167z" /> -<glyph unicode="º" horiz-adv-x="737" d="M68 858q0 82 23.5 145.5t63.5 107.5t95 66.5t117 22.5q61 0 116.5 -22.5t95 -66.5t63.5 -107.5t24 -145.5q0 -80 -24 -143.5t-63.5 -107.5t-95 -67.5t-116.5 -23.5t-116.5 23.5t-95.5 67.5t-63.5 107.5t-23.5 143.5zM147 858q0 -123 61 -198.5t159 -75.5t158.5 75.5 t60.5 198.5t-60.5 199t-158.5 76t-159 -76t-61 -199z" /> -<glyph unicode="»" horiz-adv-x="819" d="M111 186l249 330l-249 326l49 43l282 -330v-78l-282 -330zM400 186l249 330l-249 326l49 43l282 -330v-78l-282 -330z" /> -<glyph unicode="¼" horiz-adv-x="1564" d="M152 1215v55q59 12 101 31.5t77 48.5h67v-799h-78v664h-167zM362 -25l754 1399h78l-752 -1399h-80zM917 233v43l363 523h73v-500h119v-66h-119v-233h-73v233h-363zM1016 299h264v178l8 213h-8l-115 -170z" /> -<glyph unicode="½" horiz-adv-x="1609" d="M152 1215v55q59 12 101 31.5t77 48.5h67v-799h-78v664h-167zM315 -25l754 1399h78l-752 -1399h-80zM964 674q37 61 103.5 105t142.5 44q111 0 179.5 -62.5t68.5 -189.5q0 -63 -25.5 -120.5t-70.5 -117t-110 -124t-140 -139.5h393v-70h-522v51q102 94 177 168t123 133.5 t71.5 109.5t23.5 101q0 88 -48 139.5t-128 51.5q-55 0 -103.5 -37t-83.5 -90z" /> -<glyph unicode="¾" horiz-adv-x="1603" d="M82 680l59 45q37 -59 95.5 -95t128.5 -36q76 0 131 44t55 126q0 78 -76 121t-207 43v57q121 0 185.5 51.5t64.5 120.5q0 66 -46 108t-124 42q-47 0 -95 -30t-87 -77l-51 45q43 55 103.5 92t137.5 37q100 0 171 -55t71 -156q0 -76 -44 -126t-110 -76q37 -6 70 -22.5 t59.5 -41t42 -58.5t15.5 -77q0 -55 -20.5 -99t-57.5 -74t-86 -46.5t-105 -16.5q-94 0 -166.5 46.5t-113.5 107.5zM459 -25l754 1399h78l-752 -1399h-80zM956 233v43l363 523h73v-500h119v-66h-119v-233h-73v233h-363zM1055 299h264v178l8 213h-8l-115 -170z" /> -<glyph unicode="¿" horiz-adv-x="823" d="M104 -100q0 70 26 128t62.5 112.5t78.5 105.5t76 107.5t52.5 121t8.5 141.5h84q10 -84 -7.5 -152.5t-50.5 -126.5t-74 -109.5t-77.5 -101.5t-61 -103.5t-24.5 -116.5q0 -47 13 -90t42 -77t73 -53.5t105 -19.5q74 0 142.5 35t119.5 96l58 -51q-59 -66 -140.5 -113 t-185.5 -47q-76 0 -135.5 23.5t-100.5 65.5t-62.5 99.5t-21.5 125.5zM356 918q0 41 26 65.5t60 24.5q35 0 60.5 -24.5t25.5 -65.5q0 -47 -25.5 -72t-60.5 -25t-60.5 24.5t-25.5 72.5z" /> -<glyph unicode="À" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM299 1669h118l189 -217h-82z" /> -<glyph unicode="Á" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM454 1452l189 217h118l-225 -217h-82z" /> -<glyph unicode="Â" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM290 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231z" /> -<glyph unicode="Ã" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM264 1466q2 35 12 69t28.5 60.5t44 43t60.5 16.5q41 0 72 -18.5t58.5 -40t55 -39t58.5 -17.5q33 0 55.5 31t28.5 84h59q-2 -35 -12 -68t-28.5 -60.5t-44 -44t-60.5 -16.5q-41 0 -73 18.5t-59.5 40t-54 40 t-57.5 18.5q-33 0 -55.5 -31.5t-28.5 -85.5h-59zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231z" /> -<glyph unicode="Ä" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM294 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5z M616 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> -<glyph unicode="Å" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM362 1602q0 76 48 121.5t120 45.5q70 0 119 -46t49 -121q0 -78 -49 -123t-119 -45q-72 0 -120 45t-48 123z M424 1602q0 -57 30.5 -86t75.5 -29q41 0 72.5 28.5t31.5 86.5q0 53 -31.5 83.5t-72.5 30.5q-45 0 -75.5 -30.5t-30.5 -83.5z" /> -<glyph unicode="Æ" horiz-adv-x="1642" d="M37 0l745 1350h752v-82h-606v-510h502v-82h-502v-594h626v-82h-720v444h-459l-244 -444h-94zM418 522h416v746h-9q-61 -115 -126.5 -232.5t-131.5 -240.5z" /> -<glyph unicode="Ç" horiz-adv-x="1140" d="M104 678q0 160 42 289t118 220t182.5 139t235.5 48q119 0 208 -49t142 -113l-55 -61q-55 61 -129 99t-166 38q-111 0 -200 -43t-150.5 -122t-95 -191.5t-33.5 -253.5t32.5 -255t94 -193.5t148.5 -124t196 -44.5q104 0 186 41t156 125l55 -59q-78 -90 -173 -141.5 t-228 -51.5q-125 0 -228.5 49.5t-178.5 140.5t-117 221t-42 292zM534 -365q86 12 138.5 37t52.5 68q0 47 -39 69.5t-98 38.5l82 156h71l-59 -115q49 -16 86 -47.5t37 -93.5q0 -41 -21.5 -70.5t-57.5 -50t-82 -34t-95 -19.5z" /> -<glyph unicode="È" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM338 1669h118l189 -217h-82z" /> -<glyph unicode="É" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM493 1452l189 217h118l-225 -217h-82z" /> -<glyph unicode="Ê" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM329 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82z" /> -<glyph unicode="Ë" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM333 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM655 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5 t-54.5 19.5t-21.5 54.5z" /> -<glyph unicode="Ì" horiz-adv-x="477" d="M7 1669h118l189 -217h-82zM193 0v1350h94v-1350h-94z" /> -<glyph unicode="Í" horiz-adv-x="477" d="M162 1452l189 217h118l-225 -217h-82zM193 0v1350h94v-1350h-94z" /> -<glyph unicode="Î" horiz-adv-x="477" d="M-2 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82zM193 0v1350h94v-1350h-94z" /> -<glyph unicode="Ï" horiz-adv-x="477" d="M2 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM193 0v1350h94v-1350h-94zM324 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> -<glyph unicode="Ð" horiz-adv-x="1261" d="M68 680v63l159 5v602h312q156 0 271.5 -47.5t191 -135.5t113.5 -210.5t38 -276.5t-38 -280t-113.5 -215t-190.5 -137t-270 -48h-314v680h-159zM322 80h206q137 0 236.5 44t164 124t95.5 189.5t31 242.5q0 131 -31 239.5t-95.5 186.5t-163.5 121t-237 43h-206v-522h340 v-68h-340v-600z" /> -<glyph unicode="Ñ" horiz-adv-x="1288" d="M193 0v1350h98l567 -953l154 -268h8q-4 98 -8 196.5t-4 196.5v828h88v-1350h-99l-567 952l-154 269h-8q4 -98 8.5 -191.5t4.5 -191.5v-838h-88zM387 1466q2 35 12 69t28.5 60.5t44 43t60.5 16.5q41 0 72 -18.5t58.5 -40t55 -39t58.5 -17.5q33 0 55.5 31t28.5 84h59 q-2 -35 -12 -68t-28.5 -60.5t-44 -44t-60.5 -16.5q-41 0 -73 18.5t-59.5 40t-54 40t-57.5 18.5q-33 0 -55.5 -31.5t-28.5 -85.5h-59z" /> -<glyph unicode="Ò" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM428 1669h118l189 -217h-82z" /> -<glyph unicode="Ó" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM583 1452l189 217h118l-225 -217h-82z" /> -<glyph unicode="Ô" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM419 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82z" /> -<glyph unicode="Õ" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM393 1466q2 35 12 69t28.5 60.5t44 43t60.5 16.5q41 0 72 -18.5t58.5 -40t55 -39t58.5 -17.5q33 0 55.5 31t28.5 84h59q-2 -35 -12 -68 t-28.5 -60.5t-44 -44t-60.5 -16.5q-41 0 -73 18.5t-59.5 40t-54 40t-57.5 18.5q-33 0 -55.5 -31.5t-28.5 -85.5h-59z" /> -<glyph unicode="Ö" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM423 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM745 1559q0 35 21.5 55 t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> -<glyph unicode="×" d="M104 334l332 342l-332 342l56 57l329 -346l332 346l53 -57l-329 -342l329 -342l-53 -58l-332 345l-329 -345z" /> -<glyph unicode="Ø" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q109 0 200.5 -38t163.5 -109l127 170l57 -45l-137 -183q68 -90 106 -212.5t38 -276.5q0 -160 -41 -290t-115 -222t-176.5 -142.5t-222.5 -50.5q-219 0 -365 152l-131 -174l-60 45l140 188q-66 92 -104 216t-38 278z M203 680q0 -127 26.5 -232.5t75.5 -183.5l664 887q-59 66 -137 101.5t-170 35.5q-102 0 -187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM352 203q59 -68 137 -105t173 -37q102 0 186 44.5t144.5 125t93 194.5t32.5 255q0 127 -26.5 229.5t-75.5 180.5z" /> -<glyph unicode="Ù" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM410 1669h118l189 -217h-82z " /> -<glyph unicode="Ú" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM565 1452l189 217h118 l-225 -217h-82z" /> -<glyph unicode="Û" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM401 1452l197 217h86 l197 -217h-82l-154 147h-8l-154 -147h-82z" /> -<glyph unicode="Ü" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM405 1559q0 35 20.5 55 t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM727 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> -<glyph unicode="Ý" horiz-adv-x="901" d="M-2 1350h100l205 -422q35 -74 70 -145.5t73 -145.5h9q39 74 75.5 145.5t71.5 145.5l205 422h96l-405 -803v-547h-95v547zM375 1452l189 217h118l-225 -217h-82z" /> -<glyph unicode="Þ" horiz-adv-x="1150" d="M193 0v1350h94v-240h274q113 0 202 -20.5t151.5 -64.5t95 -115.5t32.5 -176.5q0 -199 -127 -296t-354 -97h-274v-340h-94zM287 420h250q209 0 308 73.5t99 239.5q0 168 -100.5 232.5t-306.5 64.5h-250v-610z" /> -<glyph unicode="ß" horiz-adv-x="1110" d="M188 0v1090q0 190 95.5 296.5t255.5 106.5q68 0 120 -21.5t88.5 -58.5t56 -87t19.5 -107q0 -80 -31.5 -136.5t-69.5 -104.5t-69.5 -96t-31.5 -110q0 -59 31.5 -96t79.5 -64.5t103.5 -54.5t103.5 -63.5t80 -92t32 -141.5q0 -61 -22.5 -112.5t-62.5 -90.5t-94.5 -60.5 t-119.5 -21.5q-80 0 -150 29t-129 76l45 67q59 -47 113.5 -70.5t120.5 -23.5q51 0 90 17.5t64.5 45t38.5 64.5t13 76q0 72 -31.5 117t-78.5 76.5t-103.5 57t-103.5 58.5t-79 79t-32 120t32 127t69 101t68.5 98.5t31.5 119.5q0 90 -48 147.5t-146 57.5q-117 0 -187.5 -86 t-70.5 -270v-1059h-91z" /> -<glyph unicode="à" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM357 1450h106l189 -279h-78z" /> -<glyph unicode="á" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM422 1171l189 279h106l-217 -279h-78z" /> -<glyph unicode="â" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM304 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> -<glyph unicode="ã" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM283 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17 q33 0 51 29.5t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> -<glyph unicode="ä" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM301 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5 t-20.5 53.5zM623 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="å" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM369 1280q0 80 48 129t120 49t120 -49t48 -129q0 -78 -48 -127t-120 -49t-120 49t-48 127z M431 1280q0 -55 30.5 -89t75.5 -34t75.5 34t30.5 89q0 57 -30.5 91t-75.5 34t-75.5 -34t-30.5 -91z" /> -<glyph unicode="æ" horiz-adv-x="1605" d="M133 244q0 164 153.5 250t471.5 122q0 55 -8.5 111.5t-34 100.5t-71.5 72t-118 28q-92 0 -173 -39t-130 -76l-41 68q27 18 64 40.5t83 41t98 32t108 13.5q121 0 191.5 -67t94.5 -179q53 113 142.5 179.5t199.5 66.5q174 0 269.5 -119t95.5 -336v-36.5t-4 -37.5h-680 q0 -92 26.5 -170t73.5 -134t111.5 -88t138.5 -32q80 0 140.5 23.5t115.5 64.5l39 -71q-29 -18 -59.5 -35t-67.5 -31t-80 -22.5t-96 -8.5q-66 0 -119 17.5t-96 46.5t-77 64.5t-60 74.5q-98 -94 -210 -148.5t-204 -54.5q-59 0 -110.5 16.5t-91.5 49.5t-62.5 83t-22.5 120z M227 250q0 -106 61.5 -151.5t145.5 -45.5q39 0 86 12.5t95.5 37t95.5 60.5t90 81q-23 45 -33 111.5t-10 136.5l-2 55q-143 -18 -243.5 -45t-164 -64t-92.5 -84t-29 -104zM844 549h600q0 190 -75 285.5t-208 95.5q-61 0 -115.5 -28t-96.5 -78t-69.5 -120.5t-35.5 -154.5z" /> -<glyph unicode="ç" horiz-adv-x="919" d="M106 489q0 123 37 220.5t98.5 163t142.5 100.5t171 35q102 0 171 -37t118 -84l-53 -64q-47 45 -104.5 75t-129.5 30q-76 0 -140.5 -32t-112.5 -90t-75.5 -138t-27.5 -179q0 -96 25.5 -176t71.5 -137t112.5 -89t146.5 -32q78 0 144.5 33t117.5 80l47 -62q-63 -57 -141 -94 t-172 -37q-96 0 -177 35t-141.5 100.5t-94.5 160.5t-34 218zM391 -365q86 12 138.5 37t52.5 68q0 47 -39 69.5t-98 38.5l82 156h71l-59 -115q49 -16 86 -47.5t37 -93.5q0 -41 -21.5 -70.5t-57.5 -50t-82 -34t-95 -19.5z" /> -<glyph unicode="è" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM355 1450h106l189 -279h-78z" /> -<glyph unicode="é" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM420 1171l189 279h106l-217 -279h-78z" /> -<glyph unicode="ê" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM302 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> -<glyph unicode="ë" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM299 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM621 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5 t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="ì" horiz-adv-x="468" d="M53 1450h106l189 -279h-78zM188 0v983h91v-983h-91z" /> -<glyph unicode="í" horiz-adv-x="468" d="M118 1171l189 279h106l-217 -279h-78zM188 0v983h91v-983h-91z" /> -<glyph unicode="î" horiz-adv-x="468" d="M0 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75zM188 0v983h91v-983h-91z" /> -<glyph unicode="ï" horiz-adv-x="468" d="M-3 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM188 0v983h91v-983h-91zM319 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="ð" horiz-adv-x="1095" d="M123 449q0 100 30.5 185t87 144.5t134.5 93t172 33.5q88 0 166 -39t137 -116q-29 152 -90.5 260t-147.5 194l-290 -151l-31 57l270 139q-57 49 -120.5 91t-131.5 81l45 62q76 -41 146.5 -88t136.5 -107l291 152l30 -56l-272 -141q61 -61 111.5 -136t87.5 -164 t57.5 -195.5t20.5 -231.5q0 -123 -31 -223t-85 -171t-131 -109t-169 -38q-82 0 -159 33t-135 93.5t-94 148.5t-36 199zM213 449q0 -86 26.5 -159t71.5 -125t106.5 -81t129.5 -29q84 0 144.5 36t100 97.5t59 145.5t19.5 180q0 66 -6 127q-39 57 -79 94t-78.5 57.5t-77.5 27.5 t-78 7q-84 0 -146.5 -30.5t-105.5 -82.5t-64.5 -121t-21.5 -144z" /> -<glyph unicode="ñ" horiz-adv-x="1089" d="M188 0v983h78l8 -152h7q76 76 155.5 126.5t181.5 50.5q154 0 225.5 -92.5t71.5 -284.5v-631h-90v618q0 158 -52 233t-173 75q-88 0 -159.5 -46t-161.5 -139v-741h-91zM326 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17q33 0 51 29.5 t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> -<glyph unicode="ò" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM367 1450h106l189 -279h-78z" /> -<glyph unicode="ó" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM432 1171l189 279h106l-217 -279h-78z" /> -<glyph unicode="ô" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM314 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> -<glyph unicode="õ" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM293 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17q33 0 51 29.5t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58 t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> -<glyph unicode="ö" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM311 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM633 1300q0 31 21.5 52.5 t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="÷" d="M70 637v78h841v-78h-841zM412 307q0 35 22.5 57.5t54.5 22.5q35 0 56.5 -22.5t21.5 -57.5q0 -39 -21.5 -61.5t-56.5 -22.5q-33 0 -55 22.5t-22 61.5zM412 1044q0 35 22.5 57.5t54.5 22.5q35 0 56.5 -22.5t21.5 -57.5q0 -39 -21.5 -61t-56.5 -22q-33 0 -55 22.5t-22 60.5z " /> -<glyph unicode="ø" horiz-adv-x="1095" d="M94 -2l119 143q-49 66 -78 152t-29 196q0 123 36 220.5t96.5 163t140.5 100.5t168 35q82 0 156.5 -29t134.5 -86l110 133l53 -43l-118 -141q49 -66 77.5 -154t28.5 -199q0 -123 -35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35q-168 0 -289 115l-111 -135zM199 492 q0 -166 73 -281l510 614q-94 104 -235 105q-74 0 -138.5 -32t-110.5 -90t-72.5 -139t-26.5 -177zM313 156q96 -102 234 -103q74 0 138.5 32t111.5 89t73.5 137t26.5 176q0 168 -74 283z" /> -<glyph unicode="ù" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM361 1450h106l189 -279h-78z" /> -<glyph unicode="ú" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM426 1171l189 279h106l-217 -279h-78z" /> -<glyph unicode="û" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM308 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> -<glyph unicode="ü" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM305 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21 t-53.5 21.5t-20.5 53.5zM627 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="ý" horiz-adv-x="892" d="M25 983h98l237 -618q23 -61 50.5 -135t56.5 -140h8q23 66 46.5 139.5t43.5 135.5l211 618h92l-389 -1106q-20 -61 -50 -119.5t-70 -104.5t-92 -74t-117 -28q-55 0 -101 21l21 80q16 -6 36.5 -11.5t43.5 -5.5q92 0 153.5 74t97.5 187l27 86zM354 1171l189 279h106 l-217 -279h-78z" /> -<glyph unicode="þ" horiz-adv-x="1114" d="M188 -444v1917h91v-424v-187q74 57 157.5 101.5t175.5 44.5q98 0 173 -36t124 -101.5t74 -157.5t25 -207q0 -125 -35 -223.5t-95.5 -167t-139.5 -104.5t-165 -36q-72 0 -144.5 31t-149.5 88v-180v-358h-91zM279 182q86 -70 159.5 -98.5t130.5 -28.5q74 0 137.5 33 t108.5 92.5t70.5 142.5t25.5 183q0 90 -17 168t-54 134t-96.5 88t-143.5 32q-74 0 -152.5 -42t-168.5 -120v-584z" /> -<glyph unicode="ÿ" horiz-adv-x="892" d="M25 983h98l237 -618q23 -61 50.5 -135t56.5 -140h8q23 66 46.5 139.5t43.5 135.5l211 618h92l-389 -1106q-20 -61 -50 -119.5t-70 -104.5t-92 -74t-117 -28q-55 0 -101 21l21 80q16 -6 36.5 -11.5t43.5 -5.5q92 0 153.5 74t97.5 187l27 86zM233 1300q0 31 20.5 52.5 t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM555 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> -<glyph unicode="Œ" horiz-adv-x="1691" d="M104 680q0 154 40 276.5t121 210.5t201 135.5t279 47.5h838v-82h-606v-510h502v-82h-502v-594h627v-82h-861q-160 0 -279.5 48t-199.5 137t-120 215t-40 280zM203 680q0 -133 33.5 -242.5t101.5 -189.5t172 -124t246 -44h127v1190h-127q-141 0 -245.5 -43t-172.5 -120 t-101.5 -186.5t-33.5 -240.5z" /> -<glyph unicode="œ" horiz-adv-x="1736" d="M106 489q0 123 35 220.5t95.5 163t138.5 100.5t164 35q119 0 223 -73t158 -218q53 135 150 213t216 78q174 0 274.5 -119t100.5 -336q0 -37 -6 -74h-690q0 -92 27.5 -170t74.5 -134t112.5 -88t139.5 -32q80 0 143.5 23.5t118.5 64.5l39 -71q-59 -35 -130 -66t-181 -31 q-129 0 -231.5 78t-155.5 211q-57 -143 -155.5 -216t-227.5 -73q-86 0 -164 35t-138.5 100.5t-95.5 160.5t-35 218zM201 489q0 -96 25.5 -176t70.5 -137t107.5 -89t134.5 -32q74 0 136 32t106 89t70 137t26 176q0 98 -26 178.5t-70 138.5t-106.5 90t-135.5 32 q-72 0 -134.5 -32t-107.5 -90t-70.5 -138.5t-25.5 -178.5zM965 549h610q0 190 -79 285.5t-210 95.5q-61 0 -116.5 -28t-98.5 -78t-70.5 -120.5t-35.5 -154.5z" /> -<glyph unicode="Ÿ" horiz-adv-x="901" d="M-2 1350h100l205 -422q35 -74 70 -145.5t73 -145.5h9q39 74 75.5 145.5t71.5 145.5l205 422h96l-405 -803v-547h-95v547zM215 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM537 1559q0 35 21.5 55t54.5 20 t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> -<glyph unicode="ˆ" horiz-adv-x="1095" d="M314 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> -<glyph unicode="˜" horiz-adv-x="1095" d="M293 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17q33 0 51 29.5t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> -<glyph unicode=" " horiz-adv-x="884" /> -<glyph unicode=" " horiz-adv-x="1769" /> -<glyph unicode=" " horiz-adv-x="884" /> -<glyph unicode=" " horiz-adv-x="1769" /> -<glyph unicode=" " horiz-adv-x="589" /> -<glyph unicode=" " horiz-adv-x="442" /> -<glyph unicode=" " horiz-adv-x="294" /> -<glyph unicode=" " horiz-adv-x="294" /> -<glyph unicode=" " horiz-adv-x="221" /> -<glyph unicode=" " horiz-adv-x="353" /> -<glyph unicode=" " horiz-adv-x="98" /> -<glyph unicode="‐" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> -<glyph unicode="‑" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> -<glyph unicode="‒" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> -<glyph unicode="–" horiz-adv-x="983" d="M82 475v74h819v-74h-819z" /> -<glyph unicode="—" horiz-adv-x="1638" d="M82 475v74h1474v-74h-1474z" /> -<glyph unicode="‘" horiz-adv-x="448" d="M119 1120q0 111 46 188.5t128 131.5l37 -47q-68 -55 -102.5 -110.5t-34.5 -143.5q4 2 16 2q31 0 56.5 -18.5t25.5 -57.5t-23.5 -60.5t-58.5 -21.5q-41 0 -65.5 36t-24.5 101z" /> -<glyph unicode="’" horiz-adv-x="448" d="M119 1024q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> -<glyph unicode="‚" horiz-adv-x="448" d="M119 -219q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> -<glyph unicode="“" horiz-adv-x="737" d="M119 1120q0 111 46 188.5t128 131.5l37 -47q-68 -55 -102.5 -110.5t-34.5 -143.5q4 2 16 2q31 0 56.5 -18.5t25.5 -57.5t-23.5 -60.5t-58.5 -21.5q-41 0 -65.5 36t-24.5 101zM408 1120q0 111 46 188.5t128 131.5l37 -47q-68 -55 -102.5 -110.5t-34.5 -143.5q4 2 16 2 q31 0 56.5 -18.5t25.5 -57.5t-23.5 -60.5t-58.5 -21.5q-41 0 -65.5 36t-24.5 101z" /> -<glyph unicode="”" horiz-adv-x="737" d="M119 1024q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5zM408 1024q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5 t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> -<glyph unicode="„" horiz-adv-x="737" d="M119 -219q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5zM408 -219q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5 t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> -<glyph unicode="•" horiz-adv-x="575" d="M82 541q0 51 17.5 93t46 70.5t65.5 45t76 16.5t76.5 -16.5t66.5 -45t46.5 -70.5t17.5 -93q0 -53 -17.5 -94t-46.5 -71t-66.5 -45.5t-76.5 -15.5t-76 15.5t-65.5 45.5t-46 70.5t-17.5 94.5z" /> -<glyph unicode="…" horiz-adv-x="1904" d="M213 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM903 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM1593 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5 t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> -<glyph unicode=" " horiz-adv-x="353" /> -<glyph unicode="‹" horiz-adv-x="530" d="M88 477v78l281 330l51 -43l-252 -326l252 -330l-51 -39z" /> -<glyph unicode="›" horiz-adv-x="530" d="M111 186l249 330l-249 326l49 43l282 -330v-78l-282 -330z" /> -<glyph unicode=" " horiz-adv-x="442" /> -<glyph unicode="€" d="M49 504v59l127 8q-2 23 -2 43.5v42.5v37t2 35h-127v59l133 9q14 125 53 224t100.5 169t144.5 106.5t182 36.5q92 0 167.5 -47t120.5 -112l-59 -56q-45 61 -101.5 99t-127.5 38q-164 0 -262.5 -121.5t-120.5 -336.5h569v-68h-576q-2 -16 -2 -33.5v-36.5v-44t2 -44h494v-67 h-487q27 -209 118.5 -330t239.5 -121q86 0 150.5 41t123.5 125l60 -51q-66 -90 -146 -141.5t-194 -51.5q-90 0 -166 37t-133.5 105.5t-96 166t-53.5 220.5h-133z" /> -<glyph unicode="™" horiz-adv-x="1249" d="M4 1313v71h518v-71h-221v-557h-78v557h-219zM629 756v628h106l107 -256l63 -176h8l64 176l102 256h107v-628h-78v329l10 201h-8l-168 -432h-70l-167 432h-9l11 -201v-329h-78z" /> -<glyph unicode="" horiz-adv-x="983" d="M0 0v983h983v-983h-983z" /> -<glyph unicode="fi" horiz-adv-x="1044" d="M68 905v70l135 8v219q0 147 63.5 221t179.5 74q72 0 144 -33l-25 -73q-31 16 -60.5 22t-58.5 6q-78 0 -115.5 -58t-37.5 -165v-213h227v-78h-227v-905h-90v905h-135zM729 1300q0 39 23.5 60.5t58.5 21.5t58 -21.5t23 -60.5q0 -35 -23 -57t-58 -22t-58.5 22.5t-23.5 56.5z M763 0v983h91v-983h-91z" /> -<glyph unicode="fl" horiz-adv-x="1024" d="M68 905v70l135 8v219q0 147 63.5 221t179.5 74q72 0 144 -33l-25 -73q-31 16 -60.5 22t-58.5 6q-78 0 -115.5 -58t-37.5 -165v-213h227v-78h-227v-905h-90v905h-135zM727 131v1342h91v-1354q0 -33 12 -48.5t31 -15.5h13t23 4l17 -73q-14 -4 -28.5 -7.5t-37.5 -3.5 q-121 0 -121 156z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf deleted file mode 100644 index b081effa23ca1217956e1334a938b0d3bb25b250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54196 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%0ARkbxReGw@nX;FLy9 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 K?0X+p>VE*a>!FVT diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff deleted file mode 100644 index 0cc7b8d7815bbd7ee728812f8d8db78a6842b641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26796 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 M0003|D}jsv06FP(n*aa+ diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot deleted file mode 100644 index 3490416ce5062bb5fabc5ef50f3c9f411691650b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24107 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 Qw%j?REebBx0_o=2u#snO3IG5A diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg deleted file mode 100644 index 83388d83b58..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg +++ /dev/null @@ -1,245 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="source_sans_proregular" horiz-adv-x="1017" > -<font-face units-per-em="2048" ascent="1536" descent="-512" /> -<missing-glyph horiz-adv-x="413" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="682" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="0" /> -<glyph unicode="
" horiz-adv-x="413" /> -<glyph unicode=" " horiz-adv-x="413" /> -<glyph unicode="	" horiz-adv-x="413" /> -<glyph unicode=" " horiz-adv-x="413" /> -<glyph unicode="!" horiz-adv-x="591" d="M174 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM211 1372h170l-4 -192l-23 -774h-116l-23 774z" /> -<glyph unicode=""" horiz-adv-x="870" d="M164 1413h180l-6 -188l-33 -342h-102l-33 342zM524 1413h180l-6 -188l-33 -342h-102l-33 342z" /> -<glyph unicode="#" d="M72 418v117h178l37 303h-174v118h188l47 375h109l-47 -375h272l49 375h109l-49 -375h165v-118h-178l-37 -303h174v-117h-188l-51 -418h-109l49 418h-270l-51 -418h-111l52 418h-164zM360 535h271l37 303h-271z" /> -<glyph unicode="$" d="M106 135l78 117q66 -57 145 -97t173 -40q115 0 171 57t56 154q0 82 -42 136t-105.5 94t-138 75t-138 80t-105.5 109.5t-42 164.5q0 137 80.5 228.5t216.5 113.5v205h123v-203q98 -10 166.5 -53t123.5 -102l-90 -101q-57 55 -111.5 86t-138.5 31q-94 0 -149 -53.5 t-55 -143.5q0 -74 42 -121t105.5 -82.5t138 -69.5t138 -82t105.5 -118.5t42 -181.5q0 -147 -85 -241.5t-232 -114.5v-207h-123v202q-98 10 -190.5 54.5t-158.5 103.5z" /> -<glyph unicode="%" horiz-adv-x="1687" d="M72 946q0 203 83 312.5t222 109.5q137 0 221 -109.5t84 -312.5q0 -205 -84 -315.5t-221 -110.5q-139 0 -222 111t-83 315zM199 946q0 -160 49 -240.5t129 -80.5q78 0 127 81t49 240q0 160 -49 239t-127 79q-80 0 -129 -79t-49 -239zM414 -25l741 1393h115l-741 -1393 h-115zM1008 401q0 203 83 312.5t222 109.5q137 0 221 -109.5t84 -312.5q0 -205 -84 -315.5t-221 -110.5q-139 0 -222 111t-83 315zM1135 401q0 -160 49 -240.5t129 -80.5q78 0 127 81t49 240q0 160 -49 239t-127 79q-80 0 -129 -79t-49 -239z" /> -<glyph unicode="&" horiz-adv-x="1247" d="M66 348q0 68 21.5 123t58 102.5t85 87t99.5 74.5q-41 84 -64.5 163t-23.5 153q0 68 22.5 125t63.5 100t98 67.5t127 24.5q125 0 194.5 -73.5t69.5 -192.5q0 -66 -26.5 -121t-69.5 -103.5t-97.5 -90.5t-109.5 -82q66 -104 155 -200.5t185 -176.5q61 84 109.5 182t78.5 215 h158q-41 -133 -98.5 -254t-136.5 -227q70 -47 133 -80t119 -49l-46 -140q-72 20 -149.5 58.5t-159.5 95.5q-78 -70 -173 -112t-214 -42q-92 0 -167 28t-129 77t-83.5 117.5t-29.5 150.5zM229 358q0 -55 20.5 -101t56.5 -79t84 -50t104 -17q70 0 133 28.5t123 79.5 q-98 86 -189.5 188.5t-163.5 210.5q-72 -57 -120 -119.5t-48 -140.5zM387 1053q0 -55 17.5 -114.5t46.5 -121.5q45 31 87 62.5t73.5 65.5t50 72t18.5 83q0 59 -29.5 103t-97.5 44q-76 0 -121 -55t-45 -139z" /> -<glyph unicode="'" horiz-adv-x="509" d="M164 1413h180l-6 -188l-33 -342h-102l-33 342z" /> -<glyph unicode="(" horiz-adv-x="620" d="M168 569q0 270 71.5 496.5t198.5 433.5l105 -49q-119 -197 -177.5 -421t-58.5 -460t58.5 -460t177.5 -420l-105 -49q-127 205 -198.5 432t-71.5 497z" /> -<glyph unicode=")" horiz-adv-x="620" d="M78 -311q119 197 177 421t58 459q0 236 -58 460t-177 421l104 49q127 -207 199 -433t72 -497q0 -270 -72 -497.5t-199 -431.5z" /> -<glyph unicode="*" horiz-adv-x="856" d="M119 1194l31 94l208 -51l19 221h100l19 -219l211 49l30 -94l-198 -82l114 -192l-80 -60l-145 176l-145 -176l-82 60l116 192z" /> -<glyph unicode="+" d="M70 612v127h372v400h133v-400h373v-127h-373v-399h-133v399h-372z" /> -<glyph unicode="," horiz-adv-x="509" d="M96 -250q86 39 135.5 102.5t49.5 147.5q-6 -2 -21 -2q-49 0 -85 29.5t-36 87.5q0 55 37 86.5t88 31.5q66 0 104 -53t38 -145q0 -133 -72 -231.5t-197 -151.5z" /> -<glyph unicode="-" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> -<glyph unicode="." horiz-adv-x="509" d="M133 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> -<glyph unicode="/" horiz-adv-x="716" d="M20 -328l547 1782h123l-545 -1782h-125z" /> -<glyph unicode="0" d="M90 657q0 330 110.5 502t309.5 172q197 0 307.5 -172t110.5 -502t-110.5 -506t-307.5 -176q-199 0 -309.5 176.5t-110.5 505.5zM254 657q0 -287 70.5 -416.5t185.5 -129.5q57 0 103 31.5t80 98t52.5 170t18.5 246.5t-18.5 246t-52.5 167.5t-80 95t-103 30.5t-104.5 -30.5 t-81 -95t-52 -167t-18.5 -246.5z" /> -<glyph unicode="1" d="M162 0v139h299v963h-238v108q90 16 156.5 40t120.5 57h129v-1168h270v-139h-737z" /> -<glyph unicode="2" d="M74 1133q82 90 174 144t221 54q182 0 286.5 -105.5t104.5 -279.5q0 -92 -40 -185t-110.5 -192.5t-168 -207t-213.5 -228.5q53 4 110.5 8t108.5 4h379v-145h-844v100q147 147 262 266t192.5 220.5t118.5 186.5t41 165q0 113 -61.5 184.5t-185.5 71.5q-82 0 -152 -46 t-127 -112z" /> -<glyph unicode="3" d="M53 160l86 110q59 -61 138 -108t196 -47q119 0 194.5 64.5t75.5 174.5q0 57 -21.5 105.5t-70.5 83.5t-129 53t-196 18v129q104 0 174.5 18.5t114.5 51.5t62.5 78t18.5 96q0 96 -60.5 151.5t-164.5 55.5q-82 0 -150.5 -37t-127.5 -96l-91 106q76 72 167 118t208 46 q86 0 158 -22.5t124 -64.5t80.5 -103.5t28.5 -141.5q0 -119 -65.5 -194.5t-171.5 -116.5v-8q59 -14 110.5 -42t90 -70t60 -97t21.5 -123q0 -86 -33.5 -155.5t-92 -117.5t-136.5 -74t-168 -26q-78 0 -142.5 15.5t-117.5 41t-95 58.5t-75 70z" /> -<glyph unicode="4" d="M35 360v111l559 836h188v-811h179v-136h-179v-360h-159v360h-588zM213 496h410v378q0 53 3 126t7 126h-8q-25 -47 -51.5 -92t-55.5 -92z" /> -<glyph unicode="5" d="M51 154l82 110q57 -59 136 -104t194 -45q59 0 111.5 21.5t91.5 60.5t61.5 94t22.5 123q0 135 -76 210.5t-203 75.5q-68 0 -116 -20.5t-107 -58.5l-90 57l43 629h653v-146h-506l-35 -387q47 25 94.5 39t106.5 14q84 0 157.5 -24.5t129 -74.5t87.5 -127t32 -183t-37 -188.5 t-98.5 -138.5t-140.5 -86t-165 -30q-78 0 -142.5 15.5t-116.5 40t-94 56.5t-75 67z" /> -<glyph unicode="6" d="M98 604q0 197 41 335t110.5 225t159 127t187.5 40q106 0 183 -40t132 -99l-94 -105q-41 47 -97 75t-118 28q-68 0 -129 -28.5t-108.5 -94.5t-76 -171t-30.5 -261q61 76 143 120t162 44q170 0 271.5 -100.5t101.5 -303.5q0 -94 -31 -171t-84 -132t-122.5 -86t-149.5 -31 q-96 0 -178 39t-142.5 118t-95.5 196.5t-35 275.5zM262 500q16 -193 89 -292t198 -99q49 0 90 20.5t71.5 58t48 90t17.5 117.5q0 129 -59.5 203t-181.5 74q-61 0 -134 -40t-139 -132z" /> -<glyph unicode="7" d="M90 1161v146h842v-105q-117 -147 -189.5 -282.5t-115.5 -275.5t-62.5 -297t-27.5 -347h-175q8 184 33 338t69 292t112.5 267t164.5 264h-651z" /> -<glyph unicode="8" d="M84 334q0 63 21.5 117.5t55.5 98.5t78 78t91 58v8q-72 51 -127.5 124t-55.5 177q0 76 29 137.5t78 105.5t116.5 68.5t147.5 24.5q86 0 153.5 -25.5t116 -71.5t74 -110.5t25.5 -140.5q0 -51 -17.5 -98t-43 -88t-57.5 -74t-62 -55v-9q43 -25 83.5 -56.5t72.5 -71t51.5 -91 t19.5 -116.5q0 -74 -31 -137.5t-86 -110.5t-133 -74t-172 -27q-92 0 -171 27t-135 75t-89 113.5t-33 143.5zM236 350q0 -55 21.5 -100t59 -79t89 -52.5t110.5 -18.5q115 0 185.5 63.5t70.5 166.5q0 63 -28.5 108t-78 79t-114 61.5t-133.5 56.5q-78 -53 -130 -124t-52 -161z M303 995q0 -59 24.5 -101t66.5 -75t96.5 -58t113.5 -48q66 59 101.5 124.5t35.5 137.5q0 98 -59 164.5t-168 66.5q-92 0 -151.5 -57t-59.5 -154z" /> -<glyph unicode="9" d="M82 911q0 94 30.5 171t83 132.5t123 86t148.5 30.5q96 0 179 -39t143.5 -117.5t94.5 -196.5t34 -276q0 -197 -41 -335t-111 -225t-159 -127t-187 -40q-104 0 -183 39t-133 99l95 106q41 -47 97 -75.5t118 -28.5q70 0 131 28.5t108 95t76 173t31 264.5q-61 -78 -143 -123 t-164 -45q-170 0 -270.5 100.5t-100.5 302.5zM240 911q0 -129 59 -202.5t182 -73.5q63 0 136 40t139 134q-16 193 -90 291t-199 98q-47 0 -89 -20.5t-73 -58.5t-48 -91t-17 -117z" /> -<glyph unicode=":" horiz-adv-x="509" d="M133 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM133 841q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> -<glyph unicode=";" horiz-adv-x="509" d="M96 -250q86 39 135.5 102.5t49.5 147.5q-6 -2 -21 -2q-49 0 -85 29.5t-36 87.5q0 55 37 86.5t88 31.5q66 0 104 -53t38 -145q0 -133 -72 -231.5t-197 -151.5zM133 841q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> -<glyph unicode="<" d="M70 612v136l878 344v-146l-432 -160l-274 -102v-8l274 -103l432 -159v-146z" /> -<glyph unicode="=" d="M70 395v127h878v-127h-878zM70 831v127h878v-127h-878z" /> -<glyph unicode=">" d="M70 268v146l432 159l274 103v8l-274 102l-432 160v146l878 -344v-136z" /> -<glyph unicode="?" horiz-adv-x="870" d="M78 1227q66 74 149.5 122t194.5 48q160 0 255 -87t95 -241q0 -68 -24.5 -123t-60.5 -104t-76 -97.5t-73.5 -99.5t-52 -109.5t-10.5 -129.5h-147q-12 80 5 144t48 118.5t71 101.5t74.5 93t58 93.5t23.5 102.5q0 82 -50 140t-148 58q-68 0 -128.5 -31.5t-107.5 -86.5z M285 102q0 59 34.5 95t86.5 36q51 0 86.5 -35.5t35.5 -95.5q0 -55 -35.5 -91t-86.5 -36t-86 36t-35 91z" /> -<glyph unicode="@" horiz-adv-x="1734" d="M104 416q0 205 69 372.5t186.5 286.5t272 183.5t326.5 64.5q156 0 280 -49t211 -138t134 -214t47 -277q0 -135 -38 -236.5t-97 -170t-132 -103.5t-142 -35q-84 0 -142.5 39t-68.5 117h-4q-51 -59 -117 -99t-133 -40q-104 0 -175 73.5t-71 215.5q0 82 27.5 166.5t79 153.5 t124 112t162.5 43q53 0 94 -23.5t70 -75.5h4l23 82h112l-80 -409q-61 -240 111 -240q49 0 97 28.5t88 83t64.5 133.5t24.5 179q0 123 -35.5 228.5t-107.5 181t-178.5 118.5t-245.5 43q-137 0 -266 -56t-229.5 -158.5t-161 -248t-60.5 -325.5q0 -150 46 -266.5t128 -196.5 t194 -122t243 -42q94 0 178 25.5t153 66.5l45 -100q-174 -104 -389 -104q-152 0 -282.5 47t-228 140t-154 230.5t-56.5 315.5zM645 416q0 -98 41 -141.5t102 -43.5q43 0 89.5 29t99.5 92l59 326q-29 47 -59.5 66.5t-71.5 19.5q-61 0 -109 -33t-82 -84t-51.5 -112.5 t-17.5 -118.5z" /> -<glyph unicode="A" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> -<glyph unicode="B" horiz-adv-x="1193" d="M178 0v1343h400q102 0 187 -18t146.5 -57t95 -101.5t33.5 -150.5q0 -100 -57 -181t-178 -112v-8q147 -23 229 -103t82 -219q0 -98 -37 -172t-104.5 -123t-160.5 -73.5t-206 -24.5h-430zM350 135h234q174 0 269 64.5t95 201.5q0 125 -93 183.5t-271 58.5h-234v-508z M350 770h199q172 0 247.5 59.5t75.5 171.5q0 111 -79.5 159t-235.5 48h-207v-438z" /> -<glyph unicode="C" horiz-adv-x="1159" d="M100 672q0 162 45 291t126 219t190.5 138t238.5 48q121 0 214.5 -50t152.5 -116l-96 -108q-53 57 -119 91t-150 34q-96 0 -174.5 -38t-134 -109t-86.5 -171t-31 -225q0 -127 30 -228.5t84 -173t131 -110.5t173 -39t169 39t138 110l97 -104q-78 -92 -178.5 -143.5 t-229.5 -51.5q-127 0 -234.5 47.5t-186.5 136.5t-124 219t-45 294z" /> -<glyph unicode="D" horiz-adv-x="1253" d="M178 0v1343h336q311 0 473 -172t162 -493q0 -160 -41 -286t-121 -213t-196.5 -133t-268.5 -46h-344zM350 139h152q238 0 354.5 141.5t116.5 397.5t-117 391t-354 135h-152v-1065z" /> -<glyph unicode="E" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795z" /> -<glyph unicode="F" horiz-adv-x="1001" d="M178 0v1343h776v-143h-604v-455h512v-143h-512v-602h-172z" /> -<glyph unicode="G" horiz-adv-x="1253" d="M100 672q0 162 46.5 291t129 219t196.5 138t249 48q137 0 231.5 -52t153.5 -114l-98 -108q-51 53 -118 89t-167 36q-102 0 -184 -38t-140.5 -109t-90.5 -171t-32 -225q0 -127 30 -228.5t86.5 -173t139 -110.5t191.5 -39q72 0 137.5 21.5t106.5 58.5v350h-285v141h440 v-565q-66 -66 -174 -111t-243 -45q-133 0 -244 47.5t-191 136.5t-125 219t-45 294z" /> -<glyph unicode="H" horiz-adv-x="1325" d="M178 0v1343h172v-563h625v563h170v-1343h-170v633h-625v-633h-172z" /> -<glyph unicode="I" horiz-adv-x="528" d="M178 0v1343h172v-1343h-172z" /> -<glyph unicode="J" horiz-adv-x="970" d="M59 190l121 86q47 -80 104.5 -115.5t129.5 -35.5q109 0 162 66.5t53 220.5v931h170v-948q0 -86 -20.5 -162.5t-65.5 -134t-116 -90.5t-169 -33q-250 0 -369 215z" /> -<glyph unicode="K" horiz-adv-x="1175" d="M178 0v1343h172v-673h4l559 673h195l-422 -512l485 -831h-190l-401 698l-230 -272v-426h-172z" /> -<glyph unicode="L" horiz-adv-x="985" d="M178 0v1343h172v-1198h586v-145h-758z" /> -<glyph unicode="M" horiz-adv-x="1478" d="M178 0v1343h203l260 -720l96 -275h8l95 275l258 720h200v-1343h-161v739q0 90 8 199t14 199h-8l-107 -299l-258 -703h-98l-258 703l-106 299h-9q6 -90 13.5 -199t7.5 -199v-739h-158z" /> -<glyph unicode="N" horiz-adv-x="1314" d="M178 0v1343h176l488 -843l145 -279h8q-6 102 -14 212t-8 216v694h162v-1343h-177l-485 846l-145 276h-9q6 -102 13.5 -207.5t7.5 -212.5v-702h-162z" /> -<glyph unicode="O" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5z" /> -<glyph unicode="P" horiz-adv-x="1169" d="M178 0v1343h414q111 0 203 -20t156.5 -66.5t100 -122t35.5 -186.5q0 -106 -35.5 -184t-101 -129t-157 -77t-201.5 -26h-242v-532h-172zM350 672h219q178 0 263.5 66.5t85.5 209.5q0 145 -87.5 201.5t-261.5 56.5h-219v-534z" /> -<glyph unicode="Q" horiz-adv-x="1349" d="M98 678q0 162 42 290t118 217t181.5 136t232.5 47t232.5 -48t182 -137t118.5 -217t42 -288q0 -145 -33.5 -265t-96 -209t-150.5 -145.5t-195 -74.5q47 -90 133 -133.5t197 -43.5q45 0 78.5 6.5t62.5 14.5l33 -133q-31 -10 -82 -20.5t-111 -10.5q-186 0 -311 89t-184 229 q-111 14 -201 69t-154.5 145.5t-99.5 212t-35 269.5zM274 678q0 -127 29 -228.5t81 -174t125 -111.5t163 -39t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-163 -38t-125 -107.5t-81 -170t-29 -225.5z" /> -<glyph unicode="R" horiz-adv-x="1179" d="M178 0v1343h422q102 0 188 -19t148.5 -64.5t97.5 -117t35 -175.5q0 -158 -82 -252t-219 -129l342 -586h-195l-323 567h-242v-567h-172zM350 707h225q158 0 241 64.5t83 195.5q0 133 -83 186t-241 53h-225v-499z" /> -<glyph unicode="S" horiz-adv-x="1083" d="M82 174l102 119q72 -76 168.5 -122t202.5 -46q133 0 207 60.5t74 158.5q0 51 -17.5 87t-48.5 61.5t-72 46t-88 43.5l-192 84q-47 20 -95.5 48.5t-88 69.5t-64.5 97.5t-25 130.5q0 76 32 141.5t89.5 113.5t134 74.5t168.5 26.5q121 0 222.5 -46t173.5 -120l-91 -110 q-61 59 -136.5 93t-168.5 34q-115 0 -183.5 -52.5t-68.5 -144.5q0 -49 20.5 -83t52.5 -59.5t72 -45t79 -35.5l192 -82q57 -25 108.5 -56.5t88.5 -73.5t58.5 -98.5t21.5 -130.5q0 -80 -32 -149.5t-91.5 -121.5t-144.5 -82t-191 -30q-141 0 -261 53.5t-208 145.5z" /> -<glyph unicode="T" horiz-adv-x="1087" d="M51 1200v143h985v-143h-407v-1200h-170v1200h-408z" /> -<glyph unicode="U" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5z" /> -<glyph unicode="V" horiz-adv-x="1044" d="M-4 1343h180l217 -725q35 -121 63.5 -223t65.5 -221h8q18 59 35 113.5t32 108t30.5 108.5t31.5 114l215 725h175l-426 -1343h-199z" /> -<glyph unicode="W" horiz-adv-x="1599" d="M41 1343h176l141 -731q20 -111 40 -217t40 -217h8q23 111 46.5 218.5t48.5 215.5l186 731h156l186 -731q23 -106 47.5 -214.5t48.5 -219.5h9q20 111 38.5 218.5t36.5 215.5l142 731h165l-278 -1343h-207l-203 809q-16 78 -32.5 152.5t-30.5 152.5h-8q-16 -78 -34 -152.5 t-34 -152.5l-201 -809h-202z" /> -<glyph unicode="X" horiz-adv-x="1040" d="M27 0l391 694l-367 649h189l184 -344q25 -47 48.5 -91t55.5 -103h9q29 59 49 103t45 91l178 344h180l-364 -657l391 -686h-189l-198 362q-27 49 -54.5 101.5t-60.5 114.5h-8q-29 -61 -54.5 -113.5t-52.5 -102.5l-194 -362h-178z" /> -<glyph unicode="Y" horiz-adv-x="964" d="M-8 1343h184l172 -378q33 -74 64.5 -145.5t66.5 -147.5h8q35 76 69 147.5t65 145.5l174 378h176l-404 -823v-520h-170v520z" /> -<glyph unicode="Z" horiz-adv-x="1093" d="M86 0v102l709 1098h-645v143h856v-100l-709 -1098h715v-145h-926z" /> -<glyph unicode="[" horiz-adv-x="620" d="M193 -311v1761h366v-98h-240v-1567h240v-96h-366z" /> -<glyph unicode="\" horiz-adv-x="716" d="M29 1454h121l546 -1782h-123z" /> -<glyph unicode="]" horiz-adv-x="620" d="M63 -215h238v1567h-238v98h365v-1761h-365v96z" /> -<glyph unicode="^" d="M123 582l311 790h150l311 -790h-147l-134 360l-100 272h-8l-103 -272l-133 -360h-147z" /> -<glyph unicode="_" horiz-adv-x="1024" d="M25 -145h974v-113h-974v113z" /> -<glyph unicode="`" horiz-adv-x="1110" d="M328 1462h176l184 -288h-129z" /> -<glyph unicode="a" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87z" /> -<glyph unicode="b" horiz-adv-x="1136" d="M168 0v1458h168v-397l-4 -180q68 59 147.5 99t163.5 40q96 0 170 -36t124 -102.5t75.5 -159.5t25.5 -208q0 -127 -34.5 -227.5t-94 -170t-137.5 -105.5t-164 -36q-70 0 -144.5 32t-139.5 91h-7l-14 -98h-135zM336 221q66 -57 130 -80.5t114 -23.5q61 0 113 27.5t90 77.5 t59.5 124t21.5 166q0 82 -14 149.5t-46 115.5t-82 75t-120 27q-121 0 -266 -136v-522z" /> -<glyph unicode="c" horiz-adv-x="933" d="M94 496q0 125 39 222t104.5 164.5t152.5 102.5t183 35q98 0 169 -36t122 -83l-84 -108q-45 39 -93 63.5t-107 24.5q-68 0 -125.5 -28t-98.5 -79t-64.5 -121.5t-23.5 -156.5t22.5 -156t62.5 -120t97.5 -77.5t124.5 -27.5q72 0 130.5 29.5t103.5 70.5l76 -111 q-68 -59 -151 -94t-173 -35q-98 0 -184 35t-148.5 101.5t-98.5 164t-36 220.5z" /> -<glyph unicode="d" horiz-adv-x="1136" d="M96 496q0 121 36 218t95.5 164.5t137 104.5t163.5 37t149.5 -31t129.5 -84l-8 170v383h170v-1458h-140l-14 117h-6q-59 -57 -136 -99.5t-165 -42.5q-188 0 -300 135.5t-112 385.5zM270 498q0 -180 72 -280.5t203 -100.5q70 0 131 33.5t123 103.5v520q-63 57 -122 81 t-120 24q-59 0 -111.5 -28t-91.5 -78t-61.5 -119.5t-22.5 -155.5z" /> -<glyph unicode="e" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5z" /> -<glyph unicode="f" horiz-adv-x="598" d="M61 858v127l136 10v158q0 154 70.5 242t219.5 88q47 0 89 -9.5t77 -23.5l-37 -129q-55 25 -112 25q-139 0 -139 -193v-158h210v-137h-210v-858h-168v858h-136z" /> -<glyph unicode="g" horiz-adv-x="1032" d="M92 -190q0 63 39 120.5t107 104.5v8q-37 23 -62.5 62.5t-25.5 99.5q0 63 34.5 110t73.5 74v8q-49 41 -89 109.5t-40 159.5q0 82 29.5 147.5t81 111.5t120 70.5t144.5 24.5q41 0 76.5 -7t64.5 -18h346v-129h-205q35 -35 58.5 -88t23.5 -116q0 -80 -28.5 -144.5 t-77.5 -108.5t-115.5 -69t-142.5 -25q-37 0 -76 9.5t-74 25.5q-27 -23 -45 -50.5t-18 -68.5q0 -47 37 -77.5t139 -30.5h192q174 0 261.5 -56.5t87.5 -181.5q0 -70 -35 -132t-100.5 -109t-158.5 -75t-210 -28q-92 0 -168 17.5t-130 52.5t-84 84t-30 115zM240 -168 q0 -80 76.5 -127t211.5 -47q72 0 130.5 17.5t99.5 45t63.5 64.5t22.5 76q0 70 -51.5 96.5t-149.5 26.5h-172q-29 0 -62.5 3t-66.5 13q-53 -39 -77.5 -82t-24.5 -86zM293 666q0 -55 16.5 -99.5t46 -75t67.5 -47t81 -16.5t81 16.5t67.5 47t46 74.5t16.5 100q0 111 -61.5 171 t-149.5 60t-149.5 -60.5t-61.5 -170.5z" /> -<glyph unicode="h" horiz-adv-x="1114" d="M168 0v1458h168v-397l-6 -205q72 68 149.5 116t182.5 48q158 0 230.5 -98.5t72.5 -290.5v-631h-168v608q0 141 -45 203.5t-144 62.5q-78 0 -137 -38.5t-135 -114.5v-721h-168z" /> -<glyph unicode="i" horiz-adv-x="503" d="M137 1309q0 49 34 78.5t83 29.5t83 -29.5t34 -78.5q0 -47 -34 -78t-83 -31t-83 31t-34 78zM168 0v995h168v-995h-168z" /> -<glyph unicode="j" horiz-adv-x="505" d="M-82 -418l35 127q18 -6 42.5 -11t51.5 -5q74 0 98.5 51t24.5 143v1108h168v-1108q0 -152 -61.5 -241.5t-210.5 -89.5q-47 0 -84 8t-64 18zM139 1309q0 49 34 78.5t83 29.5q47 0 81 -29.5t34 -78.5q0 -47 -34 -78t-81 -31q-49 0 -83 31t-34 78z" /> -<glyph unicode="k" horiz-adv-x="1013" d="M168 0v1458h166v-987h6l424 524h186l-334 -399l379 -596h-184l-291 479l-186 -217v-262h-166z" /> -<glyph unicode="l" horiz-adv-x="522" d="M168 201v1257h168v-1270q0 -41 14.5 -57t32.5 -16h15.5t21.5 4l22 -127q-16 -8 -38.5 -12.5t-57.5 -4.5q-96 0 -137 57.5t-41 168.5z" /> -<glyph unicode="m" horiz-adv-x="1697" d="M168 0v995h139l15 -143h6q66 72 142.5 120t166.5 48q115 0 179.5 -50t94.5 -141q78 86 157 138.5t171 52.5q154 0 228.5 -98.5t74.5 -290.5v-631h-168v608q0 141 -45 203.5t-139 62.5q-113 0 -250 -153v-721h-168v608q0 141 -45 203.5t-141 62.5q-113 0 -250 -153v-721 h-168z" /> -<glyph unicode="n" horiz-adv-x="1120" d="M168 0v995h139l15 -143h6q72 72 150.5 120t183.5 48q158 0 230.5 -98.5t72.5 -290.5v-631h-168v608q0 141 -45 203.5t-144 62.5q-78 0 -137 -38.5t-135 -114.5v-721h-168z" /> -<glyph unicode="o" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5z" /> -<glyph unicode="p" horiz-adv-x="1136" d="M168 -420v1415h139l15 -114h6q68 57 148.5 98t168.5 41q96 0 170 -36t123 -102.5t74.5 -159.5t25.5 -210q0 -127 -34.5 -226.5t-94 -169t-137.5 -105.5t-164 -36q-70 0 -138.5 31t-137.5 84l4 -174v-336h-168zM336 221q68 -57 131 -80.5t113 -23.5q61 0 113 27.5t90 77.5 t59.5 124t21.5 166q0 82 -14 149.5t-46 115.5t-82 75t-120 27q-63 0 -127.5 -35t-138.5 -101v-522z" /> -<glyph unicode="q" horiz-adv-x="1126" d="M96 496q0 121 36 218t95.5 164.5t137 104.5t163.5 37t151.5 -29.5t133.5 -89.5h4l17 94h135v-1415h-170v354l8 177q-59 -55 -136 -95.5t-163 -40.5q-188 0 -300 135.5t-112 385.5zM270 498q0 -180 72 -280.5t203 -100.5q70 0 131 33.5t123 103.5v520q-63 57 -122 81 t-120 24q-59 0 -111.5 -28t-91.5 -78t-61.5 -119.5t-22.5 -155.5z" /> -<glyph unicode="r" horiz-adv-x="710" d="M168 0v995h139l15 -180h6q51 94 123.5 149.5t158.5 55.5q59 0 107 -21l-33 -147q-25 8 -45.5 12t-50.5 4q-63 0 -132 -51t-120 -178v-639h-168z" /> -<glyph unicode="s" horiz-adv-x="858" d="M57 113l84 112q66 -53 134.5 -86t158.5 -33q98 0 147.5 45.5t49.5 110.5q0 39 -20.5 67.5t-52.5 50t-73 38t-82 33.5q-53 18 -106 41.5t-95 57.5t-69 79t-27 108q0 59 24 111.5t68 90.5t107.5 59.5t143.5 21.5q94 0 172.5 -33t136.5 -80l-80 -106q-51 39 -106.5 63.5 t-120.5 24.5q-94 0 -138.5 -43t-44.5 -101q0 -35 18.5 -59t49.5 -44.5t70.5 -36t82.5 -32.5q53 -20 107.5 -42.5t97.5 -56.5t71 -83t28 -119q0 -61 -24 -114.5t-70 -94t-114.5 -64.5t-156.5 -24q-106 0 -202.5 39t-168.5 99z" /> -<glyph unicode="t" horiz-adv-x="692" d="M49 858v127l156 10l20 279h142v-279h268v-137h-268v-553q0 -92 33.5 -142t119.5 -50q27 0 57.5 8t55.5 18l33 -127q-41 -14 -89.5 -25.5t-95.5 -11.5q-80 0 -134 25t-88 68t-48 104t-14 135v551h-148z" /> -<glyph unicode="u" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5z" /> -<glyph unicode="v" horiz-adv-x="956" d="M25 995h174l188 -565q23 -74 46.5 -147.5t45.5 -145.5h8q23 72 45.5 145.5t45.5 147.5l188 565h166l-352 -995h-197z" /> -<glyph unicode="w" horiz-adv-x="1470" d="M49 995h172l148 -575q16 -72 30.5 -139.5t28.5 -137.5h8q16 70 32.5 138.5t35.5 138.5l153 575h164l156 -575q18 -72 35.5 -139.5t34.5 -137.5h8q16 70 30.5 137.5t30.5 139.5l146 575h159l-266 -995h-205l-143 535q-18 72 -33.5 141t-34.5 145h-8q-16 -76 -32.5 -146.5 t-36.5 -142.5l-140 -532h-196z" /> -<glyph unicode="x" horiz-adv-x="913" d="M29 0l325 520l-301 475h183l133 -219q23 -41 47 -83t51 -83h8q23 41 45.5 83t44.5 83l121 219h176l-301 -493l324 -502h-183l-145 231q-27 45 -53.5 90.5t-54.5 88.5h-9q-27 -43 -51 -87t-49 -92l-135 -231h-176z" /> -<glyph unicode="y" horiz-adv-x="956" d="M25 995h174l202 -551q23 -66 48.5 -138.5t48.5 -141.5h8q23 68 43 141.5t41 138.5l178 551h164l-375 -1077q-27 -74 -59.5 -137.5t-77.5 -109.5t-102.5 -72.5t-133.5 -26.5q-35 0 -63.5 5t-52.5 15l32 134q16 -4 37 -9.5t39 -5.5q86 0 140.5 60.5t84.5 152.5l23 74z" /> -<glyph unicode="z" horiz-adv-x="870" d="M63 0v90l525 768h-467v137h680v-90l-525 -768h541v-137h-754z" /> -<glyph unicode="{" horiz-adv-x="620" d="M70 516v107q51 0 85.5 14t54 35.5t28 50.5t8.5 57q0 98 -9.5 194.5t-9.5 203.5q0 78 14.5 130t44 83.5t75 45t104.5 13.5h94v-98h-57q-82 0 -109.5 -42t-27.5 -143q0 -90 6 -183t6 -187q0 -100 -29 -152.5t-94 -71.5v-8q66 -18 94.5 -71.5t28.5 -151.5q0 -104 -6 -190 t-6 -181q0 -100 27.5 -143t109.5 -43h57v-96h-94q-59 0 -104.5 13t-75 44t-44 83t-14.5 132q0 55 3 105.5t6.5 97.5t6.5 94t3 98q0 31 -8.5 58.5t-28 50t-54 37t-85.5 14.5z" /> -<glyph unicode="|" horiz-adv-x="493" d="M188 -512v2048h119v-2048h-119z" /> -<glyph unicode="}" horiz-adv-x="620" d="M63 -215h54q84 0 111.5 43t27.5 143q0 94 -5 180.5t-5 190.5q0 98 27.5 151.5t93.5 71.5v8q-66 18 -93.5 70.5t-27.5 153.5q0 94 5 187t5 183q0 100 -27.5 142.5t-111.5 42.5h-54v98h91q123 0 181 -58.5t58 -213.5q0 -106 -9 -202.5t-9 -195.5q0 -59 37 -107t139 -50 v-107q-51 0 -85 -14.5t-54.5 -37t-28.5 -50t-8 -58.5q0 -51 3 -98l6 -94t6 -97.5t3 -105.5q0 -80 -14 -132t-44 -83t-75 -44t-106 -13h-91v96z" /> -<glyph unicode="~" d="M74 641q55 98 122.5 141t133.5 43q61 0 109 -26.5t90 -59t81 -59.5t82 -27q45 0 84 30t74 95l94 -69q-55 -98 -122.5 -140.5t-133.5 -42.5q-61 0 -109.5 27t-90.5 59.5t-80.5 59t-81.5 26.5q-45 0 -84 -29.5t-74 -95.5z" /> -<glyph unicode="¡" horiz-adv-x="591" d="M174 893q0 55 36 91t87 36q49 0 85 -36t36 -91q0 -59 -36 -95t-85 -36q-51 0 -87 36t-36 95zM211 -377l4 193l23 774h116l23 -774l4 -193h-170z" /> -<glyph unicode="¢" d="M125 635q0 106 31.5 190t87 145.5t131.5 99.5t162 50v217h106v-211q90 -4 155.5 -38.5t112.5 -79.5l-82 -107q-41 37 -87 59.5t-99 26.5v-704q66 4 119 31.5t94 64.5l74 -107q-59 -53 -133 -87.5t-154 -41.5v-211h-106v213q-92 10 -168 48t-130.5 99.5t-84 147.5 t-29.5 195zM293 635q0 -137 63.5 -227.5t180.5 -116.5v686q-113 -27 -178.5 -117t-65.5 -225z" /> -<glyph unicode="£" d="M109 584v106l137 8h37q-20 66 -38 128.5t-18 127.5q0 86 28 156t78 119t119.5 75.5t155.5 26.5q111 0 187.5 -44t130.5 -109l-99 -97q-39 47 -88 78t-118 31q-111 0 -169.5 -66.5t-58.5 -173.5q0 -66 15.5 -126t33.5 -126h326v-114h-299q4 -29 7 -56.5t3 -58.5 q0 -109 -32.5 -180.5t-94.5 -134.5v-9h576v-145h-817v102q104 57 160.5 154.5t56.5 214.5q0 29 -4.5 56.5t-10.5 56.5h-204z" /> -<glyph unicode="¤" d="M53 303l131 133q-35 47 -54 106.5t-19 131.5t19.5 132t53.5 107l-131 136l90 92l140 -144q98 76 227 76q59 0 118.5 -19.5t106.5 -56.5l139 144l91 -92l-134 -136q35 -47 55.5 -107.5t20.5 -131.5q0 -72 -20.5 -131.5t-55.5 -106.5l134 -133l-91 -92l-139 141 q-47 -39 -106.5 -58.5t-118.5 -19.5q-131 0 -227 78l-140 -141zM266 674q0 -61 19.5 -111.5t52.5 -87.5t78 -56.5t94 -19.5t93 19.5t77 56.5t52.5 87t19.5 112q0 61 -19.5 111.5t-52.5 87t-77 56t-93 19.5t-94 -19.5t-78 -56t-52.5 -87t-19.5 -111.5z" /> -<glyph unicode="¥" d="M47 1307h176l160 -351q31 -68 60.5 -136t62.5 -140h8q35 72 64.5 140.5t60.5 135.5l160 351h172l-336 -656h291v-96h-334v-133h334v-98h-334v-324h-168v324h-332v98h332v133h-332v96h289z" /> -<glyph unicode="¦" horiz-adv-x="493" d="M188 438h119v-950h-119v950zM188 596v940h119v-940h-119z" /> -<glyph unicode="§" d="M92 702q0 90 49 156t127 109q-31 33 -48 73.5t-17 94.5q0 53 19.5 101t59.5 85t97 58.5t135 21.5q98 0 177 -35t138 -82l-81 -108q-49 41 -104.5 67.5t-123.5 26.5q-86 0 -124 -38t-38 -91q0 -55 42 -92t105.5 -68t136.5 -61.5t136.5 -74.5t105.5 -106.5t42 -156.5 q0 -98 -48.5 -159t-125.5 -106q29 -35 45 -74.5t16 -92.5q0 -61 -24.5 -112.5t-68.5 -88.5t-104.5 -58.5t-132.5 -21.5q-111 0 -200.5 39t-153.5 106l102 92q51 -49 110.5 -77.5t141.5 -28.5t128 41t46 100q0 57 -42 96t-104 70t-136 60.5t-136.5 72.5t-104.5 105.5 t-42 156.5zM240 713q0 -68 41 -112t103 -76.5t135 -62.5t136 -67q59 29 91 68t32 106q0 70 -41 115t-102.5 79t-134 62.5t-135.5 65.5q-59 -33 -92 -74t-33 -104z" /> -<glyph unicode="¨" horiz-adv-x="1110" d="M279 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM631 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="©" horiz-adv-x="1523" d="M100 662q0 156 53.5 280.5t143.5 212.5t211 135t254 47t253 -47t211 -135t144 -213t53 -280q0 -158 -53 -284t-144 -215t-211 -137.5t-253 -48.5t-254 48.5t-211 137.5t-143.5 215t-53.5 284zM197 662q0 -135 45 -245t121.5 -188.5t179 -122t219.5 -43.5t219 43.5 t179 122t122 188t45 245.5q0 133 -45 242.5t-122 187t-179 119.5t-219 42t-219.5 -42t-179 -119.5t-121.5 -187t-45 -242.5zM406 662q0 88 31.5 159.5t83.5 122.5t121 78t142 27q86 0 146.5 -34t109.5 -83l-71 -80q-41 41 -83 62.5t-95 21.5q-113 0 -181.5 -77t-68.5 -197 q0 -135 66.5 -214t176.5 -79q66 0 115 25.5t94 64.5l62 -86q-57 -49 -121 -83t-156 -34q-78 0 -145.5 27.5t-118.5 80t-79.5 127.5t-28.5 171z" /> -<glyph unicode="ª" horiz-adv-x="706" d="M76 709q0 109 97 166t310 77q-2 66 -28.5 109t-98.5 43q-53 0 -109.5 -22.5t-96.5 -47.5l-48 86q51 33 122 60.5t151 27.5q123 0 179 -71.5t56 -202.5v-402h-102l-14 76h-9q-41 -37 -92 -64.5t-114 -27.5q-92 0 -147.5 53.5t-55.5 139.5zM201 719q0 -53 30.5 -77 t83.5 -24q80 0 168 82v172q-158 -16 -220 -56t-62 -97z" /> -<glyph unicode="«" horiz-adv-x="878" d="M92 453v127l279 317l73 -61l-241 -320l241 -323l-73 -58zM416 453v127l279 317l73 -61l-241 -320l241 -323l-73 -58z" /> -<glyph unicode="¬" d="M70 612v127h878v-526h-135v399h-743z" /> -<glyph unicode="­" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> -<glyph unicode="®" horiz-adv-x="866" d="M47 1057q0 90 31 163.5t83 127t121.5 83t149.5 29.5t150.5 -29.5t123 -83t83 -127t30.5 -163.5t-30.5 -164t-83 -127t-123 -83t-150.5 -30t-149.5 30t-121.5 83t-83 127t-31 164zM129 1057q0 -74 23.5 -134.5t63.5 -103.5t95 -66.5t121 -23.5q63 0 119.5 23.5t97.5 66.5 t64.5 103.5t23.5 134.5q0 72 -23.5 132t-64.5 104t-97 68.5t-120 24.5q-66 0 -121 -24.5t-95 -68.5t-63.5 -104.5t-23.5 -131.5zM285 854v416h155q66 0 113 -30t47 -103q0 -37 -20.5 -69t-55.5 -44l94 -170h-94l-71 143h-84v-143h-84zM369 1063h53q88 0 88 70q0 31 -18.5 49 t-65.5 18h-57v-137z" /> -<glyph unicode="¯" horiz-adv-x="1110" d="M303 1231v117h504v-117h-504z" /> -<glyph unicode="°" horiz-adv-x="677" d="M84 1139q0 61 20.5 109t56.5 83t82 53.5t97 18.5t97 -18.5t82 -53.5t56.5 -83t20.5 -109q0 -59 -20.5 -107.5t-56.5 -82.5t-82 -52t-97 -18t-97 18t-82 52t-56.5 82t-20.5 108zM186 1139q0 -72 43 -119t111 -47t111 47t43 119q0 76 -43 123t-111 47t-111 -47.5 t-43 -122.5z" /> -<glyph unicode="±" d="M70 0v127h878v-127h-878zM70 623v127h372v389h133v-389h373v-127h-373v-363h-133v363h-372z" /> -<glyph unicode="²" horiz-adv-x="751" d="M82 1569q47 70 115.5 112.5t150.5 42.5q121 0 193.5 -65.5t72.5 -192.5q0 -57 -22.5 -110.5t-62.5 -107.5t-94 -111.5t-118 -122.5h338v-113h-549v76q92 84 164 150.5t119 121.5t71.5 103.5t24.5 93.5q0 78 -41 123t-112 45q-51 0 -94 -34t-78 -83z" /> -<glyph unicode="³" horiz-adv-x="751" d="M72 1032l88 68q37 -55 88 -87t114 -32q66 0 113 37t47 106q0 70 -65.5 106t-182.5 36v84q104 0 161 40.5t57 102.5q0 57 -40 92t-106 35q-45 0 -86 -27.5t-76 -68.5l-80 69q53 59 116 95t147 36q51 0 97 -14t81 -42t55.5 -68t20.5 -91q0 -72 -39 -120t-101 -76 q68 -16 120 -66.5t52 -130.5q0 -55 -22.5 -99t-61.5 -76t-91 -48.5t-109 -16.5q-98 0 -174 44t-123 112z" /> -<glyph unicode="´" horiz-adv-x="1110" d="M422 1174l184 288h176l-231 -288h-129z" /> -<glyph unicode="µ" horiz-adv-x="1126" d="M168 -410v1405h168v-608q0 -141 45 -203.5t143 -62.5q78 0 136.5 40t130.5 128v706h167v-995h-139l-14 156h-4q-59 -80 -130 -126t-157 -46q-59 0 -106.5 17t-81.5 71l10 -185v-297h-168z" /> -<glyph unicode="¶" horiz-adv-x="1146" d="M84 907q0 121 37 204t103.5 135t156.5 74.5t197 22.5h90v-880h-68q-111 0 -206 25.5t-163.5 80t-107.5 138.5t-39 200zM778 -164v1507h172v-1507h-172z" /> -<glyph unicode="·" horiz-adv-x="509" d="M133 657q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> -<glyph unicode="¸" horiz-adv-x="1110" d="M393 -352q82 10 132 33.5t50 64.5t-33.5 62.5t-95.5 37.5l82 160h109l-52 -108q49 -16 85 -49t36 -97q0 -45 -24.5 -77.5t-65.5 -55t-95 -36t-112 -19.5z" /> -<glyph unicode="¹" horiz-adv-x="751" d="M178 1532v86q68 12 113 31.5t86 50.5h106v-799h-131v631h-174z" /> -<glyph unicode="º" horiz-adv-x="747" d="M61 862q0 82 25 146.5t68 108.5t99 67.5t120 23.5q63 0 119.5 -23.5t99.5 -67.5t67.5 -108.5t24.5 -146.5t-24.5 -146.5t-67.5 -108.5t-99.5 -67.5t-119.5 -23.5t-119.5 23.5t-99.5 67.5t-68 108.5t-25 146.5zM190 862q0 -109 48.5 -175t134.5 -66t133 66.5t47 174.5 q0 111 -47 176.5t-133 65.5t-134.5 -65.5t-48.5 -176.5z" /> -<glyph unicode="»" horiz-adv-x="878" d="M111 193l241 323l-241 320l71 61l281 -317v-127l-281 -318zM435 193l241 323l-241 320l71 61l281 -317v-127l-281 -318z" /> -<glyph unicode="¼" horiz-adv-x="1599" d="M131 1176v86q68 12 113 31.5t86 50.5h106v-799h-131v631h-174zM369 -25l741 1393h115l-741 -1393h-115zM932 213v68l336 518h147v-492h119v-94h-119v-213h-118v213h-365zM1069 307h228v144l8 223h-8l-103 -166z" /> -<glyph unicode="½" horiz-adv-x="1654" d="M131 1176v86q68 12 113 31.5t86 50.5h106v-799h-131v631h-174zM326 -25l741 1393h115l-741 -1393h-115zM985 668q47 70 115.5 112.5t150.5 42.5q121 0 193.5 -65.5t72.5 -192.5q0 -57 -22.5 -110.5t-62.5 -107.5t-94 -111.5t-118 -122.5h338v-113h-549v76 q92 84 164 150.5t119 121.5t71.5 103.5t24.5 93.5q0 78 -41 123t-112 45q-51 0 -94 -34t-78 -83z" /> -<glyph unicode="¾" horiz-adv-x="1630" d="M72 676l88 68q37 -55 88 -87t114 -32q66 0 113 37t47 106q0 70 -65.5 106t-182.5 36v84q104 0 161 40.5t57 102.5q0 57 -40 92t-106 35q-45 0 -86 -27.5t-76 -68.5l-80 69q53 59 116 95t147 36q51 0 97 -14t81 -42t55.5 -68t20.5 -91q0 -72 -39 -120t-101 -76 q68 -16 120 -66.5t52 -130.5q0 -55 -22.5 -99t-61.5 -76t-91 -48.5t-109 -16.5q-98 0 -174 44t-123 112zM444 -25l741 1393h115l-741 -1393h-115zM963 213v68l336 518h147v-492h119v-94h-119v-213h-118v213h-365zM1100 307h228v144l8 223h-8l-103 -166z" /> -<glyph unicode="¿" horiz-adv-x="870" d="M98 -74q0 68 24.5 123t60.5 104.5t76 97.5t73 99t51 109.5t10 130.5h150q10 -80 -6.5 -144.5t-47 -119t-70.5 -101.5t-75 -93t-58.5 -94t-23.5 -101q0 -82 49 -139.5t150 -57.5q68 0 127 30.5t106 86.5l99 -88q-66 -72 -150 -121t-194 -49q-160 0 -255.5 87t-95.5 240z M342 893q0 55 36 91t87 36q49 0 85 -36t36 -91q0 -59 -36 -95t-85 -36q-51 0 -87 36t-36 95z" /> -<glyph unicode="À" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM281 1675h192l180 -229h-141zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> -<glyph unicode="Á" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5zM445 1446l180 229h192l-231 -229h-141z" /> -<glyph unicode="Â" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM270 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> -<glyph unicode="Ã" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM252 1456q10 96 55 158.5t119 62.5q41 0 74 -16t60.5 -36.5t54 -37t55.5 -16.5t51.5 27.5t30.5 78.5h94q-10 -94 -55 -157.5t-119 -63.5q-41 0 -74 16.5t-60.5 37t-54 37t-55.5 16.5t-51.5 -27t-30.5 -80 h-94zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> -<glyph unicode="Ä" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM273 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5 t-67 -223.5zM625 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="Å" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5zM359 1612q0 82 53 131t137 49q82 0 136 -49t54 -131q0 -84 -54 -132t-136 -48q-84 0 -137 48t-53 132zM451 1612 q0 -51 28.5 -79t69.5 -28q39 0 67.5 28t28.5 79q0 47 -28.5 75.5t-67.5 28.5q-41 0 -69.5 -28.5t-28.5 -75.5z" /> -<glyph unicode="Æ" horiz-adv-x="1673" d="M12 0l705 1343h842v-143h-572v-422h477v-145h-477v-488h592v-145h-762v391h-426l-203 -391h-176zM463 528h354v680h-8q-53 -111 -110.5 -219t-110.5 -219z" /> -<glyph unicode="Ç" horiz-adv-x="1159" d="M100 672q0 162 45 291t126 219t190.5 138t238.5 48q121 0 214.5 -50t152.5 -116l-96 -108q-53 57 -119 91t-150 34q-96 0 -174.5 -38t-134 -109t-86.5 -171t-31 -225q0 -127 30 -228.5t84 -173t131 -110.5t173 -39t169 39t138 110l97 -104q-78 -92 -178.5 -143.5 t-229.5 -51.5q-127 0 -234.5 47.5t-186.5 136.5t-124 219t-45 294zM524 -352q82 10 132 33.5t50 64.5t-33.5 62.5t-95.5 37.5l82 160h109l-52 -108q49 -16 85 -49t36 -97q0 -45 -24.5 -77.5t-65.5 -55t-95 -36t-112 -19.5z" /> -<glyph unicode="È" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM310 1675h192l180 -229h-141z" /> -<glyph unicode="É" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM474 1446l180 229h192l-231 -229h-141z" /> -<glyph unicode="Ê" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM299 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138z" /> -<glyph unicode="Ë" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM302 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM654 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5 q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="Ì" horiz-adv-x="528" d="M-4 1675h192l180 -229h-141zM178 0v1343h172v-1343h-172z" /> -<glyph unicode="Í" horiz-adv-x="528" d="M160 1446l180 229h192l-231 -229h-141zM178 0v1343h172v-1343h-172z" /> -<glyph unicode="Î" horiz-adv-x="528" d="M-15 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138zM178 0v1343h172v-1343h-172z" /> -<glyph unicode="Ï" horiz-adv-x="528" d="M-12 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM178 0v1343h172v-1343h-172zM340 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z " /> -<glyph unicode="Ð" horiz-adv-x="1292" d="M61 657v88l158 9v589h336q311 0 473 -172t162 -493q0 -160 -41 -286t-121 -213t-196.5 -133t-268.5 -46h-344v657h-158zM389 139h154q236 0 353.5 141.5t117.5 397.5t-118 391t-353 135h-154v-450h311v-97h-311v-518z" /> -<glyph unicode="Ñ" horiz-adv-x="1314" d="M178 0v1343h176l488 -843l145 -279h8q-6 102 -14 212t-8 216v694h162v-1343h-177l-485 846l-145 276h-9q6 -102 13.5 -207.5t7.5 -212.5v-702h-162zM367 1456q10 96 55 158.5t119 62.5q41 0 74 -16t60.5 -36.5t54 -37t55.5 -16.5t51.5 27.5t30.5 78.5h94 q-10 -94 -55 -157.5t-119 -63.5q-41 0 -74 16.5t-60.5 37t-54 37t-55.5 16.5t-51.5 -27t-30.5 -80h-94z" /> -<glyph unicode="Ò" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM406 1675h192l180 -229h-141z" /> -<glyph unicode="Ó" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM570 1446l180 229h192l-231 -229h-141z" /> -<glyph unicode="Ô" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM395 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138z" /> -<glyph unicode="Õ" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM377 1456q10 96 55 158.5t119 62.5q41 0 74 -16t60.5 -36.5t54 -37t55.5 -16.5t51.5 27.5t30.5 78.5h94q-10 -94 -55 -157.5t-119 -63.5 q-41 0 -74 16.5t-60.5 37t-54 37t-55.5 16.5t-51.5 -27t-30.5 -80h-94z" /> -<glyph unicode="Ö" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM398 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM750 1565 q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="×" d="M102 350l318 326l-318 323l91 93l317 -326l315 326l90 -93l-317 -323l317 -326l-90 -92l-315 328l-317 -328z" /> -<glyph unicode="Ø" horiz-adv-x="1349" d="M96 12l142 185q-66 90 -102 210.5t-36 270.5q0 162 42 290t119 217t182.5 136t232.5 47q106 0 198.5 -34t163.5 -99l129 170l97 -72l-146 -188q63 -88 97 -205t34 -262q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-209 0 -357 129l-126 -165zM276 678 q0 -203 72 -340l590 768q-102 113 -262 113q-90 0 -164 -38t-126 -107.5t-81 -170t-29 -225.5zM420 233q102 -109 256 -108q90 0 162.5 39t125 111.5t81 174t28.5 228.5q0 193 -65 323z" /> -<glyph unicode="Ù" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM387 1675h192 l180 -229h-141z" /> -<glyph unicode="Ú" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM551 1446l180 229h192 l-231 -229h-141z" /> -<glyph unicode="Û" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM376 1446l197 229h164 l197 -229h-138l-137 139h-8l-137 -139h-138z" /> -<glyph unicode="Ü" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM379 1565 q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM731 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="Ý" horiz-adv-x="964" d="M-8 1343h184l172 -378q33 -74 64.5 -145.5t66.5 -147.5h8q35 76 69 147.5t65 145.5l174 378h176l-404 -823v-520h-170v520zM377 1446l180 229h192l-231 -229h-141z" /> -<glyph unicode="Þ" horiz-adv-x="1193" d="M182 0v1343h170v-225h242q111 0 203 -20.5t156.5 -67.5t100.5 -121.5t36 -185.5q0 -106 -36 -185t-101.5 -130.5t-156.5 -76t-202 -24.5h-242v-307h-170zM352 446h221q176 0 261.5 66t85.5 211t-86 200.5t-261 55.5h-221v-533z" /> -<glyph unicode="ß" horiz-adv-x="1179" d="M168 0v1055q0 193 104.5 308.5t296.5 115.5q80 0 142.5 -23.5t105.5 -64.5t64.5 -95.5t21.5 -115.5q0 -78 -28.5 -132.5t-64.5 -99.5t-64.5 -87t-28.5 -95q0 -49 29.5 -82t74.5 -58.5t97.5 -52t97.5 -63.5t74.5 -92.5t29.5 -136.5q0 -66 -22.5 -121.5t-65.5 -96 t-103.5 -64.5t-135.5 -24q-86 0 -156 27t-133 74l67 119q53 -45 105.5 -67t111.5 -22q86 0 129.5 49.5t43.5 114.5q0 59 -30 98.5t-75 68t-97 54t-97.5 58.5t-75 79t-29.5 117q0 70 27.5 119t61.5 94.5t62.5 92.5t28.5 112q0 78 -42 128t-128 50q-111 0 -171 -78.5 t-60 -238.5v-1024h-168z" /> -<glyph unicode="à" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM324 1462h176l184 -288h-129z" /> -<glyph unicode="á" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM418 1174l184 288h176l-231 -288h-129z" /> -<glyph unicode="â" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM287 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> -<glyph unicode="ã" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM266 1186 q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95q-8 -92 -49 -154.5t-117 -62.5q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95zM285 270q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276 q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87z" /> -<glyph unicode="ä" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM275 1305 q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM285 270q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM627 1305q0 43 28.5 71.5t71.5 28.5 q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="å" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM361 1300q0 86 53 137.5t137 51.5t137 -51.5t53 -137.5t-53 -138t-137 -52t-137 52t-53 138zM453 1300q0 -53 28.5 -83.5t69.5 -30.5t69.5 30.5t28.5 83.5 q0 51 -28.5 82t-69.5 31t-69.5 -30.5t-28.5 -82.5z" /> -<glyph unicode="æ" horiz-adv-x="1607" d="M119 258q0 164 145.5 251t456.5 122q0 47 -8 92t-32 80t-62.5 56.5t-100.5 21.5q-82 0 -155.5 -33t-133.5 -74l-67 117q70 45 168 87t209 42t182.5 -56.5t101.5 -154.5q59 98 142.5 154.5t185.5 56.5q92 0 162.5 -33t119 -94.5t73 -148.5t24.5 -193q0 -57 -6 -94h-645 q2 -78 27.5 -141.5t66.5 -108.5t96 -69.5t119 -24.5q72 0 129 23.5t113 58.5l61 -117q-66 -41 -143.5 -72t-180.5 -31q-125 0 -209 56.5t-141 130.5q-102 -92 -205.5 -139.5t-199.5 -47.5q-127 0 -210 74t-83 209zM285 270q0 -86 50 -122.5t124 -36.5q70 0 151.5 39.5 t149.5 113.5q-16 39 -26.5 93.5t-12.5 111.5v51q-119 -16 -202 -38.5t-135 -53.5t-75.5 -71t-23.5 -87zM879 569h503q0 154 -60 236t-175 82q-104 0 -179 -85t-89 -233z" /> -<glyph unicode="ç" horiz-adv-x="933" d="M94 496q0 125 39 222t104.5 164.5t152.5 102.5t183 35q98 0 169 -36t122 -83l-84 -108q-45 39 -93 63.5t-107 24.5q-68 0 -125.5 -28t-98.5 -79t-64.5 -121.5t-23.5 -156.5t22.5 -156t62.5 -120t97.5 -77.5t124.5 -27.5q72 0 130.5 29.5t103.5 70.5l76 -111 q-68 -59 -151 -94t-173 -35q-98 0 -184 35t-148.5 101.5t-98.5 164t-36 220.5zM383 -352q82 10 132 33.5t50 64.5t-33.5 62.5t-95.5 37.5l82 160h109l-52 -108q49 -16 85 -49t36 -97q0 -45 -24.5 -77.5t-65.5 -55t-95 -36t-112 -19.5z" /> -<glyph unicode="è" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM316 1462h176l184 -288h-129z" /> -<glyph unicode="é" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM410 1174l184 288h176l-231 -288h-129z" /> -<glyph unicode="ê" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM279 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> -<glyph unicode="ë" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM267 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM619 1305q0 43 28.5 71.5t71.5 28.5 q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="ì" horiz-adv-x="503" d="M25 1462h176l184 -288h-129zM168 0v995h168v-995h-168z" /> -<glyph unicode="í" horiz-adv-x="503" d="M119 1174l184 288h176l-231 -288h-129zM168 0v995h168v-995h-168z" /> -<glyph unicode="î" horiz-adv-x="503" d="M-12 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123zM168 0v995h168v-995h-168z" /> -<glyph unicode="ï" horiz-adv-x="503" d="M-24 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM168 0v995h168v-995h-168zM328 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="ð" horiz-adv-x="1116" d="M109 455q0 104 32.5 189t89 145.5t133 93t166.5 32.5q78 0 150 -32.5t125 -102.5q-29 127 -85 221.5t-134 172.5l-289 -150l-49 84l260 133q-106 82 -229 148l77 106q74 -41 145.5 -86t137.5 -100l291 149l49 -84l-264 -135q123 -125 200.5 -297t77.5 -416 q0 -123 -31.5 -224t-90 -174t-139.5 -113t-181 -40q-86 0 -166 33t-141.5 95.5t-98 151.5t-36.5 200zM268 455q0 -78 22.5 -140.5t62.5 -106.5t91.5 -68.5t110.5 -24.5q70 0 121 29.5t86 83t52 128t17 164.5q0 29 -1 57.5t-3 55.5q-68 90 -135 120.5t-137 30.5 q-68 0 -121 -24.5t-90 -69.5t-56.5 -105.5t-19.5 -129.5z" /> -<glyph unicode="ñ" horiz-adv-x="1120" d="M168 0v995h139l15 -143h6q72 72 150.5 120t183.5 48q158 0 230.5 -98.5t72.5 -290.5v-631h-168v608q0 141 -45 203.5t-144 62.5q-78 0 -137 -38.5t-135 -114.5v-721h-168zM313 1186q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95 q-8 -92 -49 -154.5t-117 -62.5q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95z" /> -<glyph unicode="ò" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM328 1462h176l184 -288h-129z" /> -<glyph unicode="ó" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM422 1174l184 288h176l-231 -288h-129z" /> -<glyph unicode="ô" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM291 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> -<glyph unicode="õ" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM270 1186q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95q-8 -92 -49 -154.5t-117 -62.5 q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95z" /> -<glyph unicode="ö" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM279 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM631 1305 q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="÷" d="M70 612v127h878v-127h-878zM397 307q0 47 33 78t80 31t79 -31t32 -78q0 -49 -32 -79.5t-79 -30.5t-80 30.5t-33 79.5zM397 1044q0 47 33 78t80 31t79 -30.5t32 -78.5q0 -49 -32 -79.5t-79 -30.5t-80 30.5t-33 79.5z" /> -<glyph unicode="ø" horiz-adv-x="1110" d="M94 12l111 133q-51 66 -81 153t-30 198q0 125 38 222t101.5 164.5t146.5 102.5t175 35q78 0 151.5 -25.5t133.5 -76.5l102 124l74 -59l-111 -133q51 -66 81 -155t30 -199q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35q-162 0 -285 101l-100 -123zM260 504 q0 -137 47 -232l438 531q-76 82 -190 82q-63 0 -117.5 -28t-93.5 -78t-61.5 -120.5t-22.5 -154.5zM365 190q80 -80 190 -79q63 0 117.5 27.5t94.5 77.5t61.5 120t21.5 153q0 137 -49 234z" /> -<glyph unicode="ù" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM330 1462h176l184 -288h-129z" /> -<glyph unicode="ú" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM424 1174l184 288h176l-231 -288h-129z" /> -<glyph unicode="û" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM293 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> -<glyph unicode="ü" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM281 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29 q-45 0 -72.5 29t-27.5 72zM633 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="ý" horiz-adv-x="956" d="M25 995h174l202 -551q23 -66 48.5 -138.5t48.5 -141.5h8q23 68 43 141.5t41 138.5l178 551h164l-375 -1077q-27 -74 -59.5 -137.5t-77.5 -109.5t-102.5 -72.5t-133.5 -26.5q-35 0 -63.5 5t-52.5 15l32 134q16 -4 37 -9.5t39 -5.5q86 0 140.5 60.5t84.5 152.5l23 74z M363 1174l184 288h176l-231 -288h-129z" /> -<glyph unicode="þ" horiz-adv-x="1136" d="M168 -420v1878h168v-397l-2 -170q66 53 143.5 91t159.5 38q98 0 173 -36t126 -102.5t76.5 -159.5t25.5 -210q0 -127 -34.5 -226.5t-94 -169t-137.5 -105.5t-164 -36q-72 0 -139.5 29t-134.5 82l2 -170v-336h-168zM336 221q68 -57 131 -80.5t113 -23.5q61 0 113 27.5 t90 77.5t59.5 124t21.5 166q0 82 -14 149.5t-46 115.5t-82 75t-120 27q-63 0 -127.5 -35t-138.5 -101v-522z" /> -<glyph unicode="ÿ" horiz-adv-x="956" d="M25 995h174l202 -551q23 -66 48.5 -138.5t48.5 -141.5h8q23 68 43 141.5t41 138.5l178 551h164l-375 -1077q-27 -74 -59.5 -137.5t-77.5 -109.5t-102.5 -72.5t-133.5 -26.5q-35 0 -63.5 5t-52.5 15l32 134q16 -4 37 -9.5t39 -5.5q86 0 140.5 60.5t84.5 152.5l23 74z M220 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM572 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="Œ" horiz-adv-x="1724" d="M100 678q0 322 172 493.5t486 171.5h852v-143h-570v-422h476v-145h-476v-488h590v-145h-880q-154 0 -274 46t-204 133t-128 213t-44 286zM276 678q0 -258 125 -398.5t369 -140.5h98v1065h-98q-244 0 -369 -135t-125 -391z" /> -<glyph unicode="œ" horiz-adv-x="1718" d="M94 496q0 125 37 222t98.5 164.5t143.5 102.5t172 35q115 0 211 -63.5t149 -186.5q57 117 148.5 183.5t201.5 66.5q92 0 164 -33t121 -94.5t74.5 -148.5t25.5 -193q0 -57 -6 -94h-653q2 -78 27.5 -141.5t67.5 -108.5t98.5 -69.5t119.5 -24.5q72 0 131.5 23.5t114.5 58.5 l62 -117q-66 -41 -146 -72t-182 -31q-117 0 -213 65.5t-154 182.5q-117 -248 -366 -248q-90 0 -171 35t-142.5 101.5t-97.5 164t-36 220.5zM266 496q0 -86 20.5 -156t57.5 -120t88 -77.5t113 -27.5q61 0 112.5 27.5t88 77.5t57 120t20.5 156t-20.5 156.5t-57 121.5t-88 79 t-112.5 28t-112.5 -28t-88.5 -79t-57.5 -121.5t-20.5 -156.5zM981 569h512q0 154 -63.5 236t-178.5 82q-104 0 -180 -85t-90 -233z" /> -<glyph unicode="Ÿ" horiz-adv-x="964" d="M-8 1343h184l172 -378q33 -74 64.5 -145.5t66.5 -147.5h8q35 76 69 147.5t65 145.5l174 378h176l-404 -823v-520h-170v520zM205 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM557 1565q0 45 28.5 72.5 t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> -<glyph unicode="ˆ" horiz-adv-x="1110" d="M291 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> -<glyph unicode="˜" horiz-adv-x="1110" d="M270 1186q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95q-8 -92 -49 -154.5t-117 -62.5q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95z" /> -<glyph unicode=" " horiz-adv-x="896" /> -<glyph unicode=" " horiz-adv-x="1792" /> -<glyph unicode=" " horiz-adv-x="896" /> -<glyph unicode=" " horiz-adv-x="1792" /> -<glyph unicode=" " horiz-adv-x="597" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode=" " horiz-adv-x="298" /> -<glyph unicode=" " horiz-adv-x="298" /> -<glyph unicode=" " horiz-adv-x="224" /> -<glyph unicode=" " horiz-adv-x="358" /> -<glyph unicode=" " horiz-adv-x="99" /> -<glyph unicode="‐" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> -<glyph unicode="‑" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> -<glyph unicode="‒" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> -<glyph unicode="–" horiz-adv-x="983" d="M84 457v116h815v-116h-815z" /> -<glyph unicode="—" horiz-adv-x="1638" d="M84 457v116h1470v-116h-1470z" /> -<glyph unicode="‘" horiz-adv-x="509" d="M117 1061q0 123 55 213t162 151l49 -79q-78 -51 -117 -108.5t-39 -145.5q6 2 19 2q41 0 74.5 -27t33.5 -78q0 -53 -30.5 -82.5t-77.5 -29.5q-61 0 -95 47t-34 137z" /> -<glyph unicode="’" horiz-adv-x="509" d="M129 961q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150z" /> -<glyph unicode="‚" horiz-adv-x="509" d="M129 -217q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150z" /> -<glyph unicode="“" horiz-adv-x="870" d="M117 1061q0 123 55 213t162 151l49 -79q-78 -51 -117 -108.5t-39 -145.5q6 2 19 2q41 0 74.5 -27t33.5 -78q0 -53 -30.5 -82.5t-77.5 -29.5q-61 0 -95 47t-34 137zM477 1061q0 123 55 213t162 151l49 -79q-78 -51 -117 -108.5t-39 -145.5q6 2 19 2q41 0 74.5 -27 t33.5 -78q0 -53 -30.5 -82.5t-77.5 -29.5q-61 0 -95 47t-34 137z" /> -<glyph unicode="”" horiz-adv-x="870" d="M129 961q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150zM489 961q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5 q0 -123 -56 -212t-163 -150z" /> -<glyph unicode="„" horiz-adv-x="870" d="M129 -217q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150zM489 -217q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5 q0 -123 -56 -212t-163 -150z" /> -<glyph unicode="•" horiz-adv-x="622" d="M82 539q0 55 18.5 101t50 78t72.5 50t88 18q45 0 87 -18t74 -50t50.5 -78t18.5 -101t-18.5 -100.5t-50.5 -78t-74 -50t-87 -17.5q-47 0 -88 17.5t-72.5 50t-50 77.5t-18.5 101z" /> -<glyph unicode="…" horiz-adv-x="1941" d="M192 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM878 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM1565 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91 t-85 -36q-51 0 -87 36t-36 91z" /> -<glyph unicode=" " horiz-adv-x="358" /> -<glyph unicode="‹" horiz-adv-x="555" d="M92 453v127l279 317l73 -61l-241 -320l241 -323l-73 -58z" /> -<glyph unicode="›" horiz-adv-x="555" d="M111 193l241 323l-241 320l71 61l281 -317v-127l-281 -318z" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode="€" d="M47 481v88l121 9q-2 18 -2 36.5v36.5v32.5t2 33.5h-121v90l131 10q18 121 61.5 216t108 162t149.5 101.5t185 34.5q92 0 172 -46t133 -114l-100 -96q-43 53 -94.5 87t-116.5 34q-135 0 -218 -100.5t-108 -278.5h520v-100h-528q-2 -14 -2 -28.5v-31.5v-39.5t2 -37.5h446 v-99h-436q27 -174 106 -272t206 -98q76 0 132 36.5t109 108.5l101 -90q-68 -90 -154 -140.5t-199 -50.5q-92 0 -171 34t-140 99.5t-103 158.5t-61 214h-131z" /> -<glyph unicode="™" horiz-adv-x="1304" d="M6 1274v110h531v-110h-205v-524h-123v524h-203zM635 750v634h153l95 -229l55 -162h8l55 162l93 229h151v-634h-117v280l13 215h-8l-146 -397h-92l-147 397h-9l15 -215v-280h-119z" /> -<glyph unicode="" horiz-adv-x="993" d="M0 0v993h993v-993h-993z" /> -<glyph unicode="fi" horiz-adv-x="1138" d="M61 858v127l136 10v158q0 154 70.5 242t219.5 88q47 0 89 -9.5t77 -23.5l-37 -129q-55 25 -112 25q-139 0 -139 -193v-158h210v-137h-210v-858h-168v858h-136zM772 1309q0 49 34 78.5t83 29.5t83 -29.5t34 -78.5q0 -47 -34 -78t-83 -31t-83 31t-34 78zM803 0v995h168 v-995h-168z" /> -<glyph unicode="fl" horiz-adv-x="1120" d="M61 858v127l136 10v158q0 154 70.5 242t219.5 88q47 0 89 -9.5t77 -23.5l-37 -129q-55 25 -112 25q-139 0 -139 -193v-158h210v-137h-210v-858h-168v858h-136zM766 201v1257h168v-1270q0 -41 14.5 -57t32.5 -16h15.5t21.5 4l22 -127q-16 -8 -38.5 -12.5t-57.5 -4.5 q-96 0 -137 57.5t-41 168.5z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf deleted file mode 100644 index fe5d758dce70b7b25183b7dd064ffd52ca60fc88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54820 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 Sy|h22fI7muDDCDlrT!ZU6N=9O diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff deleted file mode 100644 index 9799be38b24ef0223e78cf7cfaf0b5af9a895049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26984 zcmY&;b8u!)(C!=Cwr$(CvEdtA8{5go8*XfDY}?w{wrwXjzwf*Ek2_V*ndzsxdwS-~ zoT@oJ?n;u901&`;v9bi9|5q=P|F8UC`~NSZB5D!<07%C-EBFoNNasX<NlA5uZ|?nD z#{Umy*OGQp;u4Yo04VmiO!^IK5F7xxl(LfAH^=`ibALmc?ULS6N=-xbn{)Y=SHFFP zKt#UPDycEC0svsj-<<Y0fYuP14JLL*j^EthZ=Hy5?1D-c=bE^=5CZ@Z?B6<y{{bx& z;ndvG!tR?3`PQlZ_G_lrz*J&k<os<5^<SUR{};#>ww~tSobdM$`~ZNA)C$(Ha7!~I zQvg7#=Ua#68=L^^j%>?s@|(N=mWjSWjtGQ^vb1yY_zvxRra<}ri^(lRJH*z(<XcbY zJ7$ovZ!GS5cIw#~d3^V)_urfl{|8VgP=LLWo!K|{JqNJgW2VX<L#aq~ba4J|o7a5X zU3~l8TO`2<bo^=dZEKnPZP)e9D<GE-JGz@0f5&VE{N^D4LkOn|rpKxY&=d&V1{h;P z3PKkDOPYVre_!W^q{QONL5A$g97y1Y#DL_4ME=$SE!#H&zBh+}6vCBL18Uk~VZXh6 zJOA(TPauEle`+`T<NxXje)h)y=Nrrz1`>jJbf5=1gefo;;-3i+7y<;~E`fZnfd8js z%nWoi0seHlgE873m!Tgu`E3jYiDY~KngS$9nX_S9Xcn<L1`MiVZvz0nxG>EgtFFJh z5k*+g!@Jj_M8w7SQG;coQ7I{-QU~@ST8u>pwnoi4qf+?;Mz=u*woy9ZkD4gN3$3P3 z++W|anz)6NVD;5IXKc}kT+GRShJ@UCY|A<-3wbX+g`22;$P80)WyO{37u}XYmXC^s zM8u;GgPM`1W4Nl%7nPHc5$L;Rw(MBCH6uEu{Wxnh8jr6R+_8=W-)z5}uG0~0kdcE& zcmx?nrFf!KPPAp%s6XdX-X$&Q(~#7#=|ED*J^pZFQy=waOQ7m%Il)YPjf9Z<5F@l= zRVoP}BKhArG4JZ*4h&2V3|&Y)pa%o%r-z<!Ng;_DMUr-|XJxBrW@D+PW@fGdJHWxo z?U@-IP3{d0eBwgG>lY%<@g<xSgn%3xCFVICu6Pud4GhEq*uTL4&-(xZ%>#fqkdlzd zEnxdBK`-?1Pyr2y!Jxkf!Ax&h=ULt@;LR(5yhAQhfpQ|^BC;ZiA~GThB8I)PBnCz? z`LkeQTk>CD!4o?Wr@B4Z;2IOT#JR+I#9$hBFj^DP>J#r@Z(k)}aqmp8S5I*_R~b-L zMEIVL*S&#I-bCkKH7C7eP?bpZS41ivldt%vqWK_Xcmp;-PPE@Z5v`t{p0T0H-qFE{ z{_$ZZVrp`FQd&wz5*i8yGCHd2+`okt`DMjbd8I{_1?43UKuc3wV{3DJBP%mI6B~=G z?c@FP-P6O%os)x$y|W`CWNdVNR9s9#6dVi!G(4=F->FIere{_*_*@r*isVu%wYz>k zta6+!I;_`N-7Q|Mxt*`JI$V8%!BbeBtUQ%tVjT#Uj~E@N_bZR}{Qd#srf)#dUnVe7 z3PJ4V_Ys_w@|Y$SYtZd<bUC5hj)O>K;_-TX6ZHpvq4|oX;i2*INj{U^v+o`Ue(rE0 zXWa2!oJCm;0T~Q{lO9R?-v$AI?Li0u;s7fESAaLb9}o<P0Hgry0e=CffG9u`APtZW z$p4lq05yOHKsdk_kN|K76azv5x!+$kV?ZFl6QBUd05}4~AyEEXGx{p+in=1m8wf~X zfdk9LJgeySX}^cO^B`ab7GjJ|`9cq%t+;;1M>&BI2?vTJtXAXX<`qh3K$2id`-lpX zpt9Ng%4g@}t9PDEW0M<;FLOV!nNm9<|J}C%Il=j%DBV~Ocq%+Qi-~RshSIS$zaMjb z`-Fqcm`UQZ1{?@D&>-O`@CE8Llzh&-!-l=R6W#G)H?Ys$&-22Zkboa%ILQTH;Y_rR zBfSPK>=-jM7p4~PG71%|em1ioS&!E=#?N#Fv!T3<vJ0!(*ny{i&XX+MIibt_9xtxt zOiiu(BuDEF9d*%AYy9`T+N)nze+&$!od|?l?$`8$CqzV|M4xRYAEQS=c{DB`fJRBg zhvhj~AN?#8evw8U>X4D;+Y4)i9ExA+$>mh4|KiV3uyY{jd;Wpn>)wqc$NM}Iwu+5n z%x6p!03$9csqqqqJJm@Kxv%;*C7cv+a1-aB1>JDDEYAO@(G`(J6WYsfZT)sUvR$)v zGD_6lq0IX4EX~B5!DQDkST-SCzlce1#?;%VY~U+DeHFVUBDk0rm)BQ*<LR&R4lKbs zs=4l3o&S~q2ms{k3xMRYI?)N|qjr?c)JEi`yQrIDSjR9f3T@<27=tYO9LOT+q(A)N zq`%}uu*W@=8ZP!ruJr8YS@};(2r97*T7v4Ba@e@z$!47>t9*K3p;dTsnmiTP{=GSC z*89(&td|XG>=##=A<JX>XKT7hczBk4&XWqi8yYEW{I^~gn-~2BxCWIG&<F47gp_KN z(#ue-B6W$h==i%~B54nVD&y+m@l{EqN|HTzt27xh^odGt_#NER1Q_ef18L+mr{k!g zl5@I0wGbk;sGns{`%126N|H9z5zUGPl?EHp50q+P#|p3Kf<n>$+T_!^LlVtFVies( znU6;U55<Gc%vUX$ZQfxLgMZSz2SvzXkH%XTedN!WHvQ7!M9tHL=qq2k?&WV+IAAn1 zKUk>9=tSNFtJMyO^PHr?N8*OeubnvSuT8DHy*+o;l!$lAGJj(Jlbo1@Dyb;}1FJZF z3nMFHwXIV|%y7&j;;CSI&jxCO>b#wR`w^Wg_qG!>E5X12;v#y0>p0`PFTwMocZ<Jq zgYOw;Ge8~bt2nAAp-$tAg~1fkI(*>?!9N9u&SmGkkEOxw5wAHZ&vs~R5lRN#pK7i^ zQRJZmQ=*}x&zK3BaP~guD%-e7w6uR5EP`!_LxpZ2ht5q62j9{|US{PlDz-VefcxI0 zllK6Jo0tkkv|NOA?)e<J0ZX(zT8Qd(8+e@m(U;yQ*9aw8mUr&AQMAhRRb6r;OwF#q z7HVDYpH4AF>l0S4U<1eQ_}e0V@!&xFW~tcu!s|IGf<I%l9wFz35Al}Zx!mVg>pDZC zbc;suBNnZjO+Vq)oF?1iOddXpoH;FCb8s?YwhZD6#x=Bsm}K)b3~H)vyLWA4f2XN! z8^!I1er?N9pYyt6EGL8;WLKQSb5`Jf`1|!~^^By_ZS#F8O8OgXCl^m>921qlV8VHx z(hk_98av0m6%AiiW)W>^u(}UVMgI1YM5sAsS7ycdEr#$kDWj2!vX|)@ts=7?np}XZ zto$x4aU~D+D?VEg2lexaXawOl1)_l*ym^$cR0xJS2^HxxeSSVQD$2Zh9zUrEeLfix zwjRA|Dua?*LvQ?5siQb})DQMG(s+$Powks}U>ni$a`e0fn?90F15v(tjfQqTv*u)K zpxEDwOJxj!c~$>>iz(lWy|~zB|Eu1au2M%WQw#4Y#-F?EwKHAag3PE^o&Iubv5P}h z5uc?Nw+5a+mQXsm^y)jyOD&wmuJU$Fgc>?u)i$tbmKkc5w$vJF_>7jg1FAdGl>{UQ z1*8*w4DOHq1^f-z12t$k`bXX%iIj1M)##{=OB`Or!`4ufe(o*sTigMaK^O`Hzf9hk z1)njz|A4X<7IB<_%^2E%!K>a(XMEQ_;+Mwwj)F*O3G$|L{vy&<<oF-09jQlEkAhiU zY7a2^cnZwECVtUUGhsZs37ZoN!Kf@AZr8{2`Chg?-%18wUxrFw2j;8GG`f6$&weP| z_XDmipO@t3&ld}-Zuir6Dy7WleU*dDv+xsVIK^P-+*2W6B_{|=O&N(&zQ0bimttP6 zp7BeQ&<DL9jKAgAD?rECQO48*;VW1pa8uvB_M&Sx$vJ!SMw!V{<&9DBF*7U%rnXCP zw~5TeEt#o)`uYsSz8lp++mMRJ^JE*g(FeWPr%8Rzq^3w%oAu2z@6hssGlf7yN+Lw7 ziG_QDRi<c<*Z>&IjQg5UpU2Xfd5jtlc&xP}6dykMnyv+_>MlNqYJ>A)vvyuR93D~< z(7FWNIX_oc%a#-E7^bc+{A{J}nS5$D8)N*Nx~|f+E1p8ueykXrMR2ma&uk#HUv|xH z_~n=Ge8%?Fc0RN>H82r%%&vYG#E&9{w|LEoHBCw4t}Q((xQ4f%jg$Ed)A5m-{A;@2 zOrKp1I~=n-VqE@1+<&4-+OJRDYj&dmSC({6iR79xEtthnB7!tMzp}q4UwW%R`=?H| z0Z4qWg=a2aaIZxvx148u&KV`v8O`JE;j^|GAK$q)gv5rjD%^c<y<KFwQSF~q@usqk z@jAT!q>~Ug$7J?J=&dks=I0PY(U5)<c1LfHR$#yK)&u4ZHB98^!SDG%@p{|+k>2&L zy1lUfy6=!kL`fz@*4_N)!hBP6hz9JOU0s%!aG?aZ#A<*@iJBb69@I^_rU#LyX1^jE zzvrPZmiY>rZyvEx>jL45;RDL1`=K#`Xlu)BUwREJ(plhL*8$RNm9ZKt<l)cg18(Wk zN{BJi`4uN@LsBjzL{T<MQZKheK}~^6Zipo;l9lEeRivuB0x&2a)2)gWd+GF=jp39w z3lqsTX)$LuljIN1bkK>L#_<6y-_$ey>cif2JR|=a$D$F5gsAlVgSKVxj_b0E?r# z9*nodKb3#TEr0=bZs8&9?Qj~+0t(9jROcjSL$H5X%iJLuyh*Fur<<|f>O;a65!DWU z9_MZD9a#}oa7&1;N?qurOV%aT%znj$ZdN>#SX5C+xX&_$!eVu;Nth$$@-bVRirpfH zX{kNkS>U$yNJDACd;df^?^I$1@eW2pMuzAUX&MsxXiW8*_Uq;KJVAyYe!xNnclUyZ z{z#PWS7jr{OHNp<GWf{ArnLzb)_{>u7ETk_d|~Os)OlfHQ<#CLE0@JB5x#4Paf+M# zV121L_4lg~qo02`@jjR7q2WnNEc;_liYvm7;YeBzp_(LpyDGZhh;YzoCP^Qvl_3bx zKLARGUq-DiUt{%5%-YhPNixg<Pfg=t0c_iR9hGzFe3(_*<n^^wDs1oFvpS9yzuY`F zik(()vADIpC4Ki#*c9E0_u=Ew;(IyW>Gu~>(HFRZ%^RgbE`CdvNFuaEEpbd@k5&z@ zkx@VV2aOwx`I9Fwkf0<d;tadb*9#~fc1;cz4LubQB@PB}FbtTpL>9U2Nx4Lp72cju zYxw%88s$K1*dcz~MVzBuqIx0-vEk}%R070g&P&qT_u1er<K!`meaB2Lx1QH0$MerI zUe#0qjC27X?(c)>9edGFZVDVdu@X}z{N6C=BJuLJ(u<XdC?N-d`(3a+0e%7A4DLsv zY+Jk!oi#C(!O1FuYW?G``$Vos8g{AIxX!QJ*2RtQ4GLo?S`#J(^x@|a9^}E#0Uati z8qizrbW@~Xl#SH#RnP+&F%6Y*Ox9<M!d!ztr<*a$h|tyJ{s}h?*T_h53gX^VYzQJN zKEe@&LFmz_yZZuBHRAK!+ahKfF?!v}U5^@;8;6Q%@hhEt9z}qq?rH6_D-j8v@bvy1 z&o(1+bHT@{aBrt~<TLMhaq5*TmVaS^m1W-Vr<Uu~K-EafP$Z0!FV+^{Iyyn5t5#E7 z)8$8#l8N?OS9#tZ@aj~x%b@SZUi%MS4;t^7q^n#<l(F1k6pv1l6eyUy5tNI+!Zegb z433*Ja}`ODOabWPG-^$S1Ws}|wISTN87rAo@Stc9jtQoGiz!Ju7g!be48#y3fRXF3 z99O>pm%zuyKEPM6Xc|2v^M0Fojrr|0I2QtvsIVKC7k9UfTaSov@yH4Lh}D`4gK0`9 z$48q8k1G9#HW5>-noH2E4kOtuk%6I7KuhZwaVjI7M8=CrFtA%bg3?<9LjYl9IeT?I zA8pvac6Zt70(gW+VV{^nTQ9B&<mPNtoCUqHi%0X$U(=x_B62v6aeGM<lS$5K=Uer& zZK<-l7nd3z0KVPmUyF=ag@J87GDI<xNhO*<3<iGgiHU7>JNR1VD(b`urXKy+?q{tj zYf`;2&a?_Om((7O;N(cFLA4k|i8l^AaD;%Um$?VIAPBJ5>@A;y4_>0P8-%vNH&-d| zrKzkCc5~^O6&LSBNRh-tNitvV`DICODkO8PwW>CINlH!Wed}unRq_@V8}9A%w7~B3 za0#vE+xD<N&LIY+>#cNU!*9pSi)mTzcJ*QXpi=xsvFeuB$k7&~i}&&>B)G8d`EZcE z*KVz&_`a4-C-mrRz7`fCr9<Jn0KxBpySON9C+nOmy~iG7D#G!YhCW_<_hXX0J~KBM zXLiKVR$P^hmY~3`n#QzG-*#>!9<llmDjj&FUTu7O++-4f^vUtEca&44HOHCGBTO=6 z3)Pkb(&k;t9G(9svOWGbxeUjMOndGZ10KxipA2(whRgRxbI^t}Ah;$Vt^8UKX5?YQ zG2gy&<u-aOm)=n;>=tHvQ#*oK)rJ8^!$R1UI+T<`aBTCM)kXY7xW)t~xGarcq`f;Y zF$$sjjBk3?2?%#}cqaRvQ+~I2?p0RuHsJdZ_a;=&(RQS~pB<sV5R3<Q!B_B*(cMw+ z&9tG~USCgQ*iS@YOLzf)y@592qonJb-IV({S&5fE<h@vNvayABX?-2-P<deu%_p{H z{66#enoHIuw8-TtbZw3|eOwFgfEzFBSpz4>T?^{r3~^mdIg!D*uK?N%;h;P}+HsP< zF8~Scy_#A=PclCWc0i>~DjM;lMsfgSq?EVp*Do2HbYb|QQ!|4!g8uz1Q=bruCcE-Y zx4%VC|GL7O!gqaxsTS7}_*b77vR!)$?2f9kpKmQMX1wOeO!T}Jc)VMVo*iAs-Ti!b zi}tIT8k#DIc1hz$my{Y@^gm7pY8SKVgl;*I;y<LBVc*z{t8ea<VWkH{REDTuxXsXi z1607_JW=56g=r55mB&Tz`!LOc@On8wo|Y~g_M;<KOT-Jab{{9@>=c_IO6tS@!8?T@ zkRS0t0>l|Y5!?z0Q_<KJ1My>Dw2oo(7$?F<wL(Z<B5>NS99%}Ap$^h=b08>bU_<j! zf`80;m8s3G@2V)A{8zBc(M%#(dgYctq_a&SQXR~r=Pnzae4Z4jB(ktIw@QX&3_Jh! zAM?1n_T%8aJr`piy##{0svk0YLM@aG(<%FJqngi6pU3Xa){u&X3faEM)hnR<70R*5 zYu?Ir9cV?fUWZ`VB6;<h&qP0C*ydisjKP*?gctP^E&l}KMe2yLAW#4D66ig>lZ!CP z%dDx{kT+EkT%Ap#ZMGEDQ{i48w??lc9Br!6J^lLmynh#{eI^-qnA+7*?25LuwNw*_ zx7m=s)sc3Dhrz`4V8FduQ|>U{Gjg~nw6!wl>)vt^xOz?1EjN>s2bsuJ=9T34+wfvu zNVyMEF&eat?PtCg51EHTAHfK=r{nrq1jRKfaZMbipc3af?sh5%rKxT$3L>7uu58a0 z@2J%>$;n*0mj4s{sao)~E$aFo38l$l(Lpm0wvQF_<^`hgqdJEa-?>WGR0b5<ovLeg z{}k@@;|h~}TP@C@U+lDZvY<1o2q82vD!En);<larwyl2)Dj?{Vw0~C-qw6Ik=%~f3 zw2pV!lY*GCt@nm|Y9<Gc!LsvGoUMV}S85M=kgFIan+|SseZ?SV`JWcR2}~FYww3yd zmuz=;IbG}SR7$mp+9`(abuFIW1#T|(9EKYTaVN_gY%KY{8a_T{Zm4_i#0)3qbhKnR zHEFzcqet?V`z~}M*uU=6-Dh1X-49j^`E4JR4yB}6p4B=uei&|@Z)-MFH2Wd1c;@@x zH#)elKgr%!4w$e}t$7-L0jDTdaj)L`+H~6D?-r4wW#0%s)f%X6jHFUar=+R%fiK(> zfSfXR^ei~}zgaRbehUDh1xl4bK7NO=7B>v*ZT_%DOBfZad&hmy7f@hx%MUCYSI=_G z!mRYqQL|U7hzQfo0ngWX-Y3XELmGxv6`g*eg4y`M_3HD_qxg8k&G0r9$-Lt*mLH|Y zW5EeI%ZQv8@Hi>QGn3?*gQk{>>n-CW)3(g)7Rohg13v4_0ckKmO)&1ee9{_{swEOu znkE!0a_)(IMyjA}J`n^mNE1?o5UaXl!qJ)i60y=??vLx9)|r^6D?Ycjlb)iD(fw*h zet(+J@|?`CNB0~rjUT!*tcxrDW$Js}o;6qTT|I#jrM2-lolgi)vULStb5H0BV~S&; z2^%sEY4(&=13V|L%<(^AOjj(#xj^nc&E-VJtl(hHFa(J>ie6&4{Vj{T&*n4G-aaW; z@m{^WuiV3I7O%KB*SuZ&Q&P&&_8c;gjTN)=)5IP8KVqfD?wUXCzmH@63=A1i?aiA6 zB^ano#2do_mo+$l8`1xYCw&OJLP}XmFxJGQ90E$6<&Q~Gl9{#n5Es+M^mId_&603N zkCH273w7uSit$zzC;9z8Z=Njt9x{fL8-aYE7o#h18&D^txYA;H+b~sAU7$--AZH3X z&J1+bJONiBs>V`5QWRwRHi>%J1D$yjBF-w~)@JTuwrz5sa3?4h8qOBSD}_Ngnu~;r zZUi!iMDf+$FjeJ6r-f&XehM3;OaJs3EP5AqE6gw1#VBYxRQIpf)8LWrL6AKDzLmDv zkRXvqM(WG97@%Yv+5n-z*QqJx<k@b5P&@2JQ1nn%+5k1~de!1+NZ^0qJEH=eLK1!{ z+hR@tci_C>0v1OUv`5ZCqj(1;4PQU~g_s}uEs4HjJ_F~-T+iJ7{Vi;}nO+b-Y(M<@ zm|v!-)H2z%>&ejNoD#Ogp77JXTf5|TDMi%=1?y58>(o``R3(&eVKk-wj-AfZMbHm| z$CtAczhH>eIjF(?0-+;3=O#Y&G=FM!b`DQ&bgpK8f1vx<)e45Hzk}<7q!$;uk^G~- zfoh0TjBxCpX=tk8IR29pmbVT4b5Z=oEU7erW9D}^7aE!#R6#9qhE0z$8V&DSZWs|6 zE@@lb8rm9<%jD8SW!Kr1dxL#8|K#VOt@ALN_o<l|ez47PsRpY6yOkF*6SS8tG|Kb} z2@aNUuCzEVW1N8_*F;|n2K<w8U6kL`%l`EjfOmbuhe>9_z=)ATNZPH?3WQUip{P)E z?Cn?b6Ut4a?ESC$kl-H_jtRVCmVCckWPZHKti|6u&@f!<LSQ41?=6n)Y4*3kjaFj- z?iraQc(<h(0GRh4SlicjZa~2-&vX!sz;q286ojE)wmcEA!Tda{W4cy)hU~LHGK=uQ zYj{3cD~}h}71;cr1QKQI1=7ytD8n0Q$^Ln2+;TM}zd&h!xwn08RqdZS<E3^NeK>L- z$=_@;&k)(&raJGl*t{gc*Xx*rm+#k4)gt3i>Nu%$3yYXw;s|sc_E0BBA!5_hn2ydX zL%bTsS*jPS8P^>{<LsW#jiv?q;~Fy>boVt)Hw7*=O)a3|M7@34Eq`hD1S7CEV-%7H z=u-8Hs9V%ri2O;;-5X~N>_JsGl4K=x2f;u6TOpt?s%x4E@mOOzVYcq^aWQO&N927G z@%Tt(fQRRQ;n7}We;r>{MfUv%$xf=RjSxp~IFkp$<?JNJUp9+BIkVGaN&w4hu=M6n zTtfrCr>D>PY471-u$CHcKBlD&;H^+lSBF=a?g)3ZYf|DwLLPkvKyL>R3yIbX+fq6s zk3wJ>U`D48_BR5Qx4>KpUWl*O^X}8a&G*^-z1q)lN5SmkmdV%K<G3_%!MWR9QISxv z4$l`$MuY{ffxbXfEh|a9PlI<Cs&N}xG{MM{DlE^icpul}p<URTHYx_CFUKjWGeF#c zURZ;KiL`>1$|b4O<44mf#XUvdpN2{O!%AZ;)wb%7o28-Qz*)TEkc;(~ov|22t&^Tt zxut^shzLpIw;A}AxJjzFc%<ES27SYk1^LtSn{fE{?9UA{x#@1OV~4`q()L5==2Rp( zAagtg^Y%O3$a_o;cyTT;Nw2pBJoFe=^2?!05!Ue3=#~=9$p-r65W*6gvyji*Y7#z^ z$cA4)!o4H)eJ9)@huisZU~O#G%$<Oc|0dJ>k`yhweXN7K*8it;0+D6EKeWw2K{M0u zgi1tw`v}FKPC8Y2LTF3SCY5w{s^~Lj@#~(}cXP181*V<=iV@i;ZS4>_4N{07451Qq z^?K$5{=G9Awy;Gd{pIpBSwG$AZSa2S<D~lx=+6!5A2zMyRIJ^JKXv^vao6yFlk+b2 zajo1OkFQktZ0kG<L-chta&Ug?5)>SI!@p>fUb`$l{OHWPEY_b1v)c%S+_bT#`)jwg zG4JK*_~FKCNVq7abbZfDTP1si7%3q|iJKO5n*MjbKa48Yf`T_yU6x-xFPO$8(D+}d zg@63In<5Fm;JZw@C~>zx;r=ioX<WbhdhGrDG5HE3_ADsQ03RgbPZn4jxP857j+Gg2 zdx=mAXFFMU4VI%Rs8x3dOY9TqO#Ad-4g|lH*jfA*Ip3<^6rWx`d`q5cU+TLB9~S3d zAJiOrxdpRAJu!)iK!1{{!ZQ*<eTKZ8I(rg^8Iy|T-I;^0lAk(3*S!5p(0>ZL&R`o* zl1&5OGXwJxQ#R;QCwNw<G`%=c2s*7ptpN5qzRbdv_&Fme9`!W$Oe-6^fq80f-xZw( zZoTupsGFs0mNUnTh-EkK|B%XdzUD#n&tSoX;3TCcb$X7fa88HzqA^0-7yrvkP@sNL z1KTKBK2FX&?drvE$ISRnOi*LwX#;byZL?g1K~F5Pi*@-+%7liAhNJT)*mPJ)*!$(_ z!`8v&=uuzg&{dq6{h)w48Nu=-pNc}Bnwwllajp$tH#Ar&4YDB%8SSZ7U#S9|{19X7 zYEuzqE}7C?;mhF*a*7s0KUrkj05b}K2(IW4lYZ-Gug*ya*d&$#W())oT`2x@?)_5= z#VGuUtxk?fNOSA{O2E{gs`q}VFVWA!Y4$9`<A6JeXP;8@t8mSqUGwZ0^bAAtC_V-* z5ZiYZ&J^+7dX#74_Tci3-0$>Vqv2*OEV7lGsfK!Ev_BCbLMIbKc_>}75W4cmXYdHF z8J1KH<-8$n+2dc6qysgPBbE2Z<)p*w<9afa8GbBYpdqfLtg$0jZO^Lx!4LGQoG^J= zd`j&0dN4~I&t=g_t@=dAT>Z|8!y|Rq275YBvfaa-KyL?BAIxArbG<>XOi2VR2$H^e zrqNHt@Uygl3#?4Gc+$j+yysC`kq3a)Ll#ZoYM}TMd+vu%VLF=W9Nh+akiJ0sZifpo z!nU(3b{#_;lCmZ9kGo11WZ`e{aPcomB0)4Qs5`(>5(R&}qeSnS<!c40uLt~u!%?1= z!Nd7b^Q!Y6)B_VG!GJXyBVO~d<xCT{x5^f{Ds#12M<~Jy*^hMwUicQAI6B|$P`;Me zYaIz1vnSXCTE;%Jm-RJR6*a&VHJDL>62Vd08u>br=h8PnF=mOy+oxrY>fD)`CSvNc zoK+4FKqTgNK9v~9S{`I?Y5QrW0`aSgN0ca!@yE)9wfse8Vt+9gS5eHjrb34F=$@qZ zKG$X!CKZXZ2pc00Jks4)Aqh$wXmoBo-K=$9zfJDf|Enk8TuYC9qO_!WKyahx6WV|4 zQ}Ul{Bi@(8O8CvB+af)Jr9IIaM?<7x(Br|Rus~Todo-$tOOsHYs4VTQ;tWH}hV{Uq z%mS0l57H6>RtRy7r)I5cJJx>!IEKZ{DS!NUI>{O}ari6yCdin4%sIwhw>M_LyCsgL zi1>+D)E_sqW3qL;WSbQ-b!YA`fiz3W%uPt;ul8HM?#h=JzQIx11BKQCl8Bs=>4zTT zv<1ZZ))XX2^Nfr94K^7yQ{U5{y(csv3oZtYE<^9{-UK0ZD?KMzO?;0{h2anjswAw$ zuOMzqrtQd&bNZX|SQRI{pSB=%%B60U_Jt};pt!~x5R&Zd&a*9T+CpUL83RA>fh)lx zGi6k60TaUcUeNVXPSpp*?@V079FienK?(`Twje6`KqBDhpBc~|7!c#o@LVCD)N~83 zb~B4Sd`4!x<<5riszyf!j;y$<t>tI;H^yv1OZ9=SEdjqnd4IL@DHD?;C_1addkC(j zh2!d{81<&FTZco%^BBL+coPD5+lmsq;<0qi%%>mIUyx>*V_=?6anaoq+*hK@yw;iS z5K-fbL5a+U;n~Yco;`4gXigKs$q_rUGl2%6y5iIvQP!x!426Yg7|_rVjSz+Prs!q$ zCUM{AGFM*l@Hx#KfpW`dd+#f<kN4tEC0BOAHW53=g)h$<ubLG@y``;|t6!|y>xsXb zhA5dXaJs#iHL)(d>H0$7h)(SJrrQriBCfoE0#ZN${T9QlpM_La1289zI9sU-k1+>4 zMirqbA`Y=?I(6c*QTV$5ME&5hOy!lvKjAukw|3X)ybBP#S6jvw1@KJBk|z)>+FmE) z29J@347jJU_uM?dY@iTbUHIpTVqe1wVqy}R5|*K(Z)m4CC0k1`)cLWj9D4H(OTu(u z8<s#W=te9r0R88x(z0mi4_*mz@o<?b;}L|~fuwwn>9eA{4?!rM&#g3Y4fF7}-HwU| z>^u~U#;O$*3iVt~PouH1H(nF1;qYb0H<L%72Yvl-c-=Z`ZwJ=!sB=W;-aEo-3di^Y zew}9Ix1Ouq87*zK@qt8!YyQ8Ni=@AtO@%a+#njgW=UA-{tdgzFQ3qQQ@8vP}G;e>O z9PDbs8vpH!Xi9dH)Pt;^)N81eM_g%|)wLUFV&x$}92@+dp`2N3pti%=NH^Z_o#<hN z*TGKBKCDe75Qy8vQ=ND?Ek+vds^ir8+Nk`%qD)t0dyI&mPQlFn1m1^&)xOT$i5X3m z9=#v5`*75b(g_LrjcxIYdX(c*dPu*pnw7Mf%H&BA6o@WSDzH~sey6U?dyYIafn+Nx z)L8JnEem1O>(-D-_Vv4Y2r6yCEfzSVK-Dx5c2aXBITeO*T*%A9qWR!cC?tWg#&&_7 zkzW7z;d<MpmdgRBUh7oqmY>GfkML^}#=RS($ZsIig7O<8zVWX#7!Jax)d4#{;$IDw zCkF1WbA<)St~0SUCdu{OIkk;A^jdKB#f7+jn1eeg=So*BbCa>BF*6~mgA+Cu=&?-< zM6Ed?4!#^W(%UaRv$(2szzN#2j$BgK>f1H(Cz?z+zq}kvHnc`gh=R}q#n2ZUtr<ek z+WPP<FfwjNAZiBSs@>D~c-mn3)qrW7=v<9x<^KXbtFT=R5+ekT0vR305#5j}A-Tt* zW`FGXo7$p&KF#er+pG=@QER%(1&43#BQ!`hD{{PX@|{#^t?Ly!)UC|zGL~85w)pHo z#k?`axCnKbe2^*O|B7kQu)pBDT0e$`5UsMT-`c`=jd62}6*O!QpX0vNGh9<EyiwR# zXzJzzj-)vvEi@^*Kvq&pEe~s45!$@#OzF6r7+ToG@vZOM!I!#hA}*qQ8aIw>Y_z&P z)4h?exME`7P>^DAn$iCxjZ&ziZ;}%vAdQ--3_esw1eEcU#zioJH$jhWd9q?@MEro= zOq<Hq7|dRG+Z|b{^495Ek0yOc4%__0IHkbS89pSq#y>10_)dd8O?ZIb14`DI9eEbN z<{UrTm^ossnQdi&+MP{)gJ))IF>f(@UtbVv$*RZ!4vO$hEl}<PnLh*2QoD-?^|e@x zSo*jZtqas!f<`5m9OUqjL3W0vVVH>2VpMEZEn%=u1Oexd4wOdR=AO|BP!)}ryBDC< z#&t5|-ZQ4y8^Kk}SVN_@hRr1KO|tRIBkAE_cMJ?OoobQgny$3`+JE1hqg>GN%)G_z z1hZkE`iks}sfauGU$A(u9+UW}u7S5uzh99X<ra9gy{(iRd#(tdp>m(fD)E1b+IQ`k z{Jw4Bh<mI|YXz-BaTg%&p-IXidFrI;`Od5JNSP&Y)?gVO#;;b?-h5GJe2A7+EzeRl zb18F^Dl2inr-(zB0p}s8*bfg~4%6D94XQN;SL{**cV~q#P#uJr11jJ&Yy8^uqmDoV zOAI@f+eRhf$3LLGiZM(_=tpJLNTL)l?#+!*s%);>0tr{+LCNJJjoON5#`k@uUSFWS zWYX>7GTV5I2mkD%yWB)KQZ6TTZ~sq)FPL*3NZ6!Dohn=3L}H`!h#sabK?XaBFvtl4 zxV)hM@`^6BB<`D{7gGGq#Fj_`;XCvY`;<_I>Xp6SkdV#zvxObk)08=@J!={#PMnd_ z-E-RICEMOa=@MMm;YDNPT83|_7ECfbp@)&}{h-VMX#uo+-v^Sb3qGzkoN(xNpJ{U+ zU~e+mX-m$G*eERX7aR>E$0t7!O6oT<2U9Sd6Rsz#3R}x`W(?d3dPF4+s>ScTf`CcM zFj@}Pjveo;&bWJ-Wk>78{GF-Uks7yrnw3g^NB=^E+?|nUCBz|XQLF?|ws?{7m<MvI zqKr=2=K%$~0@mMh;m&e<RqLTGbXbmBD!A?^_|Oy3mtzWhj0BX0AeVL0Cm5)wvlCMK zKG-H`I}|EQpOB$1Jv<8c9>e*6>Ds!EUIp8f;Qj4EPD$UVIzaDO)iTtw@9(V-PR)09 z_@_^1XWZ)>;C|6<&{v{D=t;VjTYcIm3*?|q-AVE0m+L`vC9FE!p7TXy8@;i_m;-(6 zL5Gk*{Fnk*!2dFo@~g+db7iLLVeEt7an!>1NTluO=!5(U3}0e(9umq(JgV46rmLv= z1ra*JrWm@CkZb9@1IwQkj%=KrxY(W=w;1m>Be{B3()N0Jv(We=Dt2L`=^ESo=wqQz zC)AO56qTLM_mP)HV58-#<cg@j;%oT#vkGAoy6wI-tZMbR$^82g(msMqg>&_7a=KkI zf^W>inox6@L;_Es(w0dqU6mTdJec~rtju9(1++&44g@W>mi27c5Aa_DmFfNp^QT4A z4t~5Qf;pxzhhUWG4ZweR(unA7x+^}ph{0)Dn%vANG3H6i`5KWZa+%}>8^3w3lP+`{ z1Yh1_2qYFD7`HI1T&2WVb|qHhGt<(&3);5|@wm8y2n_9vJDB74YV4gJ36{|aR#JY+ zZr%<!nJ8J|yFl7FMNP4ZC<j^ppg~jQ6t+yZ4H&UEj#!)19Io3t;(gP3v={WA&b9Y3 zzTQXiqPjb1O$;B>;Y-6Z&r)jKxI?{x0{T%zGhmt2n%b&cOGC!0YyMKNI_FKlGNNm_ z&I}%(<EAB;%96?UiSV_!JSaA)U9P316nBKIAd;X#>UC&8R#WeQFFAL-;fFkyNM^w% z*J|svvmS3zn6PR-fg3}*hg&cHcOb{%{_&_XDo|F&3Oz_k;iWp3L{u;*T=M=r3wQRF zHNOrMOG{D$YiDh8GYko@hlSzqQ~K)u_31Z+Q%N>yN#G>ee^-P>`}wi9KR1|JDjILa z+x_cVdDPhm<)*MqP+RP?@Za~jh%8(ERxfhOsbxU)$`xO*mus@fw^U-_j}CRKT1>QN zj-k3<*&_WZWzpF!cJjG=s6%pV%JZf%;=-C!A>^cx@lRZK%0CYgb4owf&0|Kbcwaa6 zzkCjAisoTU?2ta7Q@3T|@3+*+)aVEZez7#xD-NN&nLFR*Ew5L{GX?N1qijdL_^H1h z`l*Mr7wdpt?(<WST@-Rr7<!w})|NqIvpD4Z_KC6gIFwfTtF7BmwhbuA+wz%Px(xPr zpsbYH@J@Dr`N%5YB=f6r>w6lU*P`zGmCqP{RLjpv6c~&~=OEqCD!$wEaP`rqAL)L~ zya{4Ua?C__hU^w$Q?K<Wvb@1d5BVke8FtX;2Zx%uid7u_x*{ZJR!>`T3S-N)8r0P^ zcgoscNurtrUfUykJK2j_F-A&k76oGNEz@b7tu=R3;Emty&p8iw>F>-WsfD3?A~}~$ zU>8WLZb~)gelaMO3@xpFzn1R!J|$gRy>quoranE#0!R1|>}Y9{ZzG8{_;0vZE`$XC zxp4|wRRi64NnLjYs)`Ou%iw&t86a}6T~A<IXi#KaJ1BLGzU1$r>|AWg5Ip7*(lB)h z{FDmtBBhK`8W1}ID3WwNq(EF6*|iAHF*&NB(qDnrRK{M7;C8sZpd7kcGwt~T@l7>; z8)2`%1lKW70?`zcb<7^^jnUVlKF%WFs%#x_Di}^}x|`2bmA*L3hw3^VuHQF42s%SK zf-85ty}h1i9gEN`uk{l0Ju$q%GOhes<=#hc<;n_S3U8df6O+CjC;0Y9V_9MexA(+0 zj3-iKO233bU{R$UNSEn3DKLXe2u)WpQ!_dPhxGJn;Y*80z{*ra@>l=R?8Cb!2vk0T zRgUfJ@$mf(7cEQ^gM}_pcyr0u%NAz|*MIDisr^{xxG>Uh=_1TtU0UaO4Jfh-aJWuW zr`5Q5tvYSrJU+g9>4ti1(q&JvdwSG6J^k|88c7t>x{P>aUCT<|QSB-@+H^bvDv+c( zqnQ99I7NB>5{I4?<Cc;KYa}*+(ew+O4BUdjwdILp26*a)GH$5bpYxXxm+rz4{jI*V zbGXrJYVp4IkbASZNliOGgSOMI_v<h2nyOwwj$BN{ec1<jMF�N@j;D{GMjiA#<QS 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 CfJn~( diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot deleted file mode 100644 index 1f11e3af0d468258e96734126358b5f84c825ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24228 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 Nl;8RTy<QCRKEVA4bP50f diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg deleted file mode 100644 index ca699f72cc4..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg +++ /dev/null @@ -1,245 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="source_sans_prosemibold" horiz-adv-x="1050" > -<font-face units-per-em="2048" ascent="1536" descent="-512" /> -<missing-glyph horiz-adv-x="419" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="682" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="0" /> -<glyph unicode="
" horiz-adv-x="419" /> -<glyph unicode=" " horiz-adv-x="419" /> -<glyph unicode="	" horiz-adv-x="419" /> -<glyph unicode=" " horiz-adv-x="419" /> -<glyph unicode="!" horiz-adv-x="645" d="M170 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM205 1372h237l-8 -233l-33 -699h-157l-33 699z" /> -<glyph unicode=""" horiz-adv-x="987" d="M160 1409h241l-6 -231l-47 -375h-135l-45 375zM584 1409h241l-6 -231l-47 -375h-135l-45 375z" /> -<glyph unicode="#" d="M72 399v156h174l33 264h-166v156h186l45 356h141l-43 -356h240l47 356h139l-43 -356h164v-156h-182l-33 -264h174v-156h-192l-47 -399h-144l47 399h-239l-49 -399h-144l49 399h-157zM389 555h242l33 264h-242z" /> -<glyph unicode="$" d="M92 135l107 160q72 -57 145.5 -92t157.5 -35q100 0 149 46t49 130q0 68 -41 113t-103 81.5t-134 70.5t-134.5 80t-103.5 110.5t-41 161.5q0 143 82 238t221 120v209h164v-205q98 -12 169 -56t128 -104l-121 -137q-57 53 -110 81t-127 28q-84 0 -131 -42t-47 -122 q0 -61 41 -101.5t103.5 -74t134 -67.5t134 -81t103.5 -115.5t41 -171.5q0 -147 -82 -246.5t-236 -127.5v-211h-164v205q-94 10 -189 50t-165 105z" /> -<glyph unicode="%" horiz-adv-x="1722" d="M61 942q0 203 89.5 312.5t230.5 109.5t230 -109.5t89 -312.5t-89 -314.5t-230 -111.5t-230.5 112t-89.5 314zM231 942q0 -152 42 -220t108 -68t107.5 68.5t41.5 219.5q0 152 -42 218.5t-107 66.5q-66 0 -108 -66.5t-42 -218.5zM422 -25l731 1389h143l-729 -1389h-145z M1022 401q0 203 89.5 312.5t230.5 109.5t230 -109.5t89 -312.5t-89 -314.5t-230 -111.5t-230.5 112t-89.5 314zM1192 401q0 -152 42 -220t108 -68t107.5 68.5t41.5 219.5q0 152 -42 218.5t-107 66.5q-66 0 -108 -66.5t-42 -218.5z" /> -<glyph unicode="&" horiz-adv-x="1308" d="M57 352q0 70 20.5 125t56.5 101.5t82 84t97 72.5q-41 78 -63.5 152t-22.5 143q0 70 23.5 130.5t69 105.5t106.5 71.5t139 26.5q137 0 216 -78t79 -207q0 -66 -24.5 -121t-65.5 -101t-93 -87t-108 -80q61 -84 140 -162.5t165 -144.5q55 74 98.5 163t71.5 193h218 q-37 -127 -94.5 -243.5t-135.5 -221.5q66 -41 127.5 -68.5t114.5 -37.5l-60 -193q-78 18 -159.5 54.5t-165.5 89.5q-80 -66 -180.5 -105t-223.5 -39q-100 0 -179 30t-134 80t-85 118.5t-30 148.5zM283 367q0 -94 65.5 -151.5t165.5 -57.5q55 0 109.5 21.5t105.5 58.5 q-90 76 -171 160.5t-146 176.5q-57 -47 -93 -97t-36 -111zM424 1032q0 -47 14.5 -95t38.5 -101q84 53 141.5 108t57.5 133q0 53 -24.5 90t-84.5 37q-63 0 -103 -47t-40 -125z" /> -<glyph unicode="'" horiz-adv-x="563" d="M160 1409h241l-6 -231l-47 -375h-135l-45 375z" /> -<glyph unicode="(" horiz-adv-x="663" d="M158 569q0 272 70.5 497.5t199.5 436.5l147 -65q-117 -199 -171 -420t-54 -449q0 -227 54.5 -448t170.5 -420l-147 -66q-129 211 -199.5 436.5t-70.5 497.5z" /> -<glyph unicode=")" horiz-adv-x="663" d="M88 -299q117 199 171 420t54 448t-54 448.5t-171 420.5l148 65q129 -211 199.5 -436t70.5 -498q0 -272 -70.5 -497.5t-199.5 -436.5z" /> -<glyph unicode="*" horiz-adv-x="897" d="M98 1155l39 123l223 -51l23 231h129l23 -231l225 51l39 -123l-211 -92l119 -201l-105 -76l-153 179l-156 -179l-105 76l119 201z" /> -<glyph unicode="+" d="M70 590v172h366v387h178v-387h367v-172h-367v-387h-178v387h-366z" /> -<glyph unicode="," horiz-adv-x="563" d="M96 -244q98 39 152.5 104.5t54.5 143.5h-18q-59 0 -105.5 38t-46.5 108q0 66 46 105.5t112 39.5q84 0 130 -63.5t46 -178.5q0 -152 -83 -262t-237 -164z" /> -<glyph unicode="-" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> -<glyph unicode="." horiz-adv-x="563" d="M129 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> -<glyph unicode="/" horiz-adv-x="704" d="M25 -328l477 1782h160l-478 -1782h-159z" /> -<glyph unicode="0" d="M82 657q0 332 118.5 501t323.5 169t324 -170t119 -500q0 -332 -119 -507t-324 -175t-323.5 175.5t-118.5 506.5zM307 657q0 -139 16.5 -233t45 -153.5t68.5 -85t87 -25.5t87 25.5t69 85t45 153.5t16 233q0 137 -16 230.5t-45 151t-69 81t-87 23.5t-87 -23.5t-68.5 -81 t-45 -150.5t-16.5 -231z" /> -<glyph unicode="1" d="M152 0v193h290v856h-239v147q98 18 168.5 44t132.5 63h176v-1110h256v-193h-784z" /> -<glyph unicode="2" d="M68 1126q90 96 185 148.5t230 52.5q94 0 170 -28.5t129.5 -81t83 -126t29.5 -163.5q0 -86 -38 -175t-102.5 -180.5t-150.5 -187.5t-182 -199q51 4 110.5 9.5t106.5 5.5h319v-201h-880v137q135 131 244.5 241.5t186.5 205t118 176.5t41 155q0 104 -55.5 165t-159.5 61 q-76 0 -138.5 -43t-115.5 -103z" /> -<glyph unicode="3" d="M49 160l113 151q59 -59 135 -101t174 -42q106 0 173 52t67 145q0 51 -18.5 92t-62.5 69.5t-118 44t-184 15.5v172q96 0 160.5 15t104.5 43t57.5 67t17.5 84q0 82 -51.5 128t-141.5 46q-78 0 -140.5 -34t-121.5 -89l-121 145q84 74 179.5 119t211.5 45q94 0 172 -22.5 t133.5 -66.5t86 -108.5t30.5 -146.5q0 -111 -60.5 -184.5t-166.5 -114.5v-8q117 -31 193.5 -113t76.5 -211q0 -90 -35.5 -159.5t-98 -117.5t-145.5 -74t-177 -26q-160 0 -266.5 53.5t-176.5 131.5z" /> -<glyph unicode="4" d="M37 336v160l516 807h281v-785h163v-182h-163v-336h-222v336h-575zM270 518h342v295q0 57 3 135t8 135h-9q-25 -51 -51 -100t-55 -102z" /> -<glyph unicode="5" d="M49 156l109 151q59 -55 133 -97t172 -42q111 0 181.5 65.5t70.5 184.5q0 117 -65.5 180.5t-174.5 63.5q-63 0 -106 -17.5t-103 -56.5l-112 71l39 644h696v-199h-492l-26 -316q41 20 81 31.5t91 11.5q84 0 158.5 -24.5t130 -74.5t88 -127t32.5 -181q0 -106 -37.5 -190 t-101 -141.5t-146.5 -87.5t-173 -30q-158 0 -265.5 54.5t-179.5 126.5z" /> -<glyph unicode="6" d="M90 612q0 190 43 325.5t113.5 221.5t163 127t192.5 41q119 0 204 -43t144 -104l-127 -144q-35 43 -91 71t-116 28q-61 0 -115.5 -25t-95 -81t-66.5 -148.5t-30 -227.5q57 72 134 113t149 41q84 0 154.5 -24.5t121 -75t78 -126t27.5 -178.5q0 -98 -33 -177t-88 -134 t-130 -86t-159 -31q-96 0 -182 38t-150.5 116t-102.5 199t-38 284zM315 485q18 -174 83 -251.5t161 -77.5q82 0 138.5 63.5t56.5 183.5q0 117 -53.5 174.5t-151.5 57.5q-55 0 -116.5 -34t-117.5 -116z" /> -<glyph unicode="7" d="M90 1104v199h875v-144q-115 -141 -185.5 -269t-111.5 -262t-58.5 -286t-25.5 -342h-240q8 174 30.5 318.5t64.5 275.5t107.5 255t160.5 255h-617z" /> -<glyph unicode="8" d="M84 334q0 61 19.5 111.5t52 91.5t74.5 73.5t89 57.5v8q-76 53 -128 127t-52 178q0 80 30 143.5t82 108.5t125 69.5t156 24.5q88 0 159 -25.5t121 -71.5t76.5 -110.5t26.5 -144.5q0 -49 -15 -93t-39.5 -82t-56.5 -70t-63 -54v-8q45 -25 86 -56.5t72 -72.5t49.5 -92.5 t18.5 -116.5q0 -76 -32 -140.5t-89.5 -112.5t-139 -75t-180.5 -27q-96 0 -177 27t-139 74t-92 112.5t-34 145.5zM291 358q0 -98 69.5 -156.5t169.5 -58.5q94 0 154.5 51.5t60.5 143.5q0 53 -24.5 91t-66.5 67.5t-99 54t-123 51.5q-61 -45 -101 -106.5t-40 -137.5zM350 981 q0 -49 20.5 -86t56.5 -64.5t83 -51.5t102 -44q53 53 81 108.5t28 117.5q0 86 -50 142t-143 56q-76 0 -127 -46t-51 -132z" /> -<glyph unicode="9" d="M76 901q0 98 32.5 177t88 134.5t130 85t158.5 29.5q94 0 180.5 -38t151 -115.5t102 -197.5t37.5 -284q0 -190 -42 -325.5t-112.5 -222.5t-163.5 -128t-194 -41q-117 0 -202.5 43t-145.5 105l127 143q37 -43 93.5 -70.5t115.5 -27.5q61 0 115.5 24.5t95.5 81t66.5 148.5 t29.5 227q-57 -72 -135 -111.5t-149 -39.5q-84 0 -154 24.5t-120 74.5t-77.5 126t-27.5 178zM293 901q0 -117 54.5 -175t152.5 -58q55 0 117.5 34.5t115.5 116.5q-18 172 -84.5 250t-161.5 78q-80 0 -137 -63.5t-57 -182.5z" /> -<glyph unicode=":" horiz-adv-x="563" d="M129 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM129 835q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> -<glyph unicode=";" horiz-adv-x="563" d="M96 -244q98 39 152.5 104.5t54.5 143.5h-18q-59 0 -105.5 38t-46.5 108q0 66 46 105.5t112 39.5q84 0 130 -63.5t46 -178.5q0 -152 -83 -262t-237 -164zM129 835q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> -<glyph unicode="<" d="M70 594v172l911 354v-198l-395 -140l-277 -98v-8l277 -98l395 -140v-198z" /> -<glyph unicode="=" d="M70 363v172h911v-172h-911zM70 819v172h911v-172h-911z" /> -<glyph unicode=">" d="M70 240v198l395 140l276 98v8l-276 98l-395 140v198l911 -354v-172z" /> -<glyph unicode="?" horiz-adv-x="909" d="M82 1219q66 78 156 128t202 50q82 0 152 -21.5t121 -64.5t78.5 -106.5t27.5 -147.5q0 -66 -23.5 -118t-58.5 -99t-74.5 -90t-71.5 -90.5t-51.5 -100.5t-11.5 -119h-206q-10 74 5 135.5t44.5 112.5t67.5 95t72 86t56.5 83t22.5 88q0 74 -44 119t-122 45 q-63 0 -114.5 -28.5t-96.5 -77.5zM274 135q0 70 43 115t109 45t110 -45t44 -115t-44 -115t-110 -45t-109 45t-43 115z" /> -<glyph unicode="@" horiz-adv-x="1792" d="M102 418q0 211 72 382t192.5 292.5t282.5 188.5t342 67q160 0 290 -51.5t221 -144.5t140.5 -223t49.5 -286q0 -137 -40 -240.5t-103.5 -173t-141.5 -104.5t-154 -35q-88 0 -149.5 39t-75.5 117h-4q-47 -61 -114.5 -100.5t-133.5 -39.5q-113 0 -185.5 79t-72.5 221 q0 88 30 175t83 156.5t126.5 113.5t164.5 44q106 0 159 -100h4l27 84h150l-88 -433q-51 -207 102 -206q47 0 94 27.5t84 78.5t59.5 124t22.5 165q0 117 -34 219t-102.5 179t-175 122t-251.5 45q-135 0 -262 -55t-225.5 -156.5t-159 -244t-60.5 -318.5q0 -152 47 -266.5 t129 -191.5t192.5 -115.5t235.5 -38.5q86 0 170 23.5t152 60.5l55 -131q-180 -102 -395 -103q-152 0 -288 47t-238.5 142.5t-163 236t-60.5 328.5zM700 420q0 -84 34 -122t91 -38q37 0 76 24.5t86 82.5l53 301q-45 72 -112 71q-53 0 -95 -30.5t-72 -77.5t-45.5 -103.5 t-15.5 -107.5z" /> -<glyph unicode="A" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> -<glyph unicode="B" horiz-adv-x="1216" d="M168 0v1339h428q102 0 190 -17t151.5 -55t99.5 -101.5t36 -155.5q0 -96 -55 -178t-174 -113v-8q145 -25 223 -104t78 -214q0 -100 -39 -174t-107.5 -123t-163 -72.5t-204.5 -23.5h-463zM406 184h200q147 0 226 55.5t79 170.5q0 104 -77.5 154t-227.5 50h-200v-430z M406 784h167q141 0 204 51.5t63 145.5q0 92 -64.5 133t-195.5 41h-174v-371z" /> -<glyph unicode="C" horiz-adv-x="1173" d="M96 666q0 164 48.5 294t132 220t196.5 137t242 47q123 0 220 -51t161 -119l-131 -147q-53 51 -111.5 80.5t-136.5 29.5q-82 0 -151.5 -33.5t-120 -96t-78 -153t-27.5 -202.5q0 -229 100.5 -359.5t268.5 -130.5q90 0 157.5 35t124.5 98l131 -145q-82 -94 -185 -144.5 t-232 -50.5q-127 0 -239 45.5t-194 133.5t-129 217t-47 295z" /> -<glyph unicode="D" horiz-adv-x="1275" d="M168 0v1339h356q307 0 480.5 -165.5t173.5 -497.5q0 -166 -44 -293t-127 -212t-202 -128t-268 -43h-369zM406 193h102q205 0 315.5 117.5t110.5 365.5q0 246 -111.5 358.5t-314.5 112.5h-102v-954z" /> -<glyph unicode="E" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825z" /> -<glyph unicode="F" horiz-adv-x="1036" d="M168 0v1339h809v-200h-571v-379h485v-201h-485v-559h-238z" /> -<glyph unicode="G" horiz-adv-x="1277" d="M96 666q0 164 49.5 294t135.5 220t202.5 137t251.5 47q70 0 129.5 -14.5t108.5 -38t90 -54t72 -63.5l-131 -147q-51 49 -112 79.5t-155 30.5q-90 0 -162.5 -33.5t-125 -96t-81 -153t-28.5 -202.5q0 -229 104.5 -359.5t307.5 -130.5q55 0 106 15.5t84 44.5v288h-252v195 h465v-590q-70 -66 -182.5 -113t-249.5 -47q-133 0 -248 45.5t-198.5 133.5t-132 217t-48.5 295z" /> -<glyph unicode="H" horiz-adv-x="1351" d="M168 0v1339h238v-538h540v538h238v-1339h-238v594h-540v-594h-238z" /> -<glyph unicode="I" horiz-adv-x="571" d="M168 0v1339h238v-1339h-238z" /> -<glyph unicode="J" horiz-adv-x="1005" d="M45 203l164 121q41 -74 94 -108t115 -34q94 0 142 57.5t48 200.5v899h238v-919q0 -92 -23.5 -173t-72 -141.5t-124 -95.5t-180.5 -35q-141 0 -238 57.5t-163 170.5z" /> -<glyph unicode="K" horiz-adv-x="1216" d="M168 0v1339h238v-608h6l477 608h262l-412 -522l482 -817h-263l-360 631l-192 -240v-391h-238z" /> -<glyph unicode="L" horiz-adv-x="1021" d="M168 0v1339h238v-1138h555v-201h-793z" /> -<glyph unicode="M" horiz-adv-x="1519" d="M168 0v1339h260l242 -659l88 -254h8l88 254l236 659h262v-1339h-224v612q0 47 3.5 102.5t7.5 112t10 110.5t10 101h-8l-109 -305l-231 -608h-109l-231 608l-106 305h-9q4 -47 9.5 -101t9.5 -110.5t7 -112t3 -102.5v-612h-217z" /> -<glyph unicode="N" horiz-adv-x="1337" d="M168 0v1339h244l415 -753l140 -285h8q-10 104 -20.5 224t-10.5 233v581h225v-1339h-243l-416 754l-139 284h-9q10 -106 20.5 -223t10.5 -229v-586h-225z" /> -<glyph unicode="O" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353z" /> -<glyph unicode="P" horiz-adv-x="1204" d="M168 0v1339h450q111 0 204 -20.5t161 -69.5t105.5 -128t37.5 -195q0 -111 -38.5 -193t-107.5 -136t-162 -79.5t-200 -25.5h-212v-492h-238zM406 682h192q152 0 223.5 60.5t71.5 183.5q0 127 -74 175t-221 48h-192v-467z" /> -<glyph unicode="Q" horiz-adv-x="1374" d="M92 676q0 162 43 290t121 216t186.5 135t239.5 47t239.5 -47t187.5 -135t122 -216t43 -290q0 -139 -32 -255t-91 -204t-142 -145.5t-186 -79.5q47 -80 130 -115t182 -35q45 0 80.5 6.5t64.5 16.5l43 -178q-35 -16 -90 -26.5t-125 -10.5q-201 0 -336 94t-201 242 q-109 18 -196.5 74.5t-151 144.5t-97.5 206.5t-34 264.5zM336 676q0 -113 24.5 -204t69.5 -155.5t108.5 -99.5t143.5 -35t143.5 35t108.5 99.5t69.5 155.5t24.5 204q0 225 -93 353t-253 128t-253 -128t-93 -353z" /> -<glyph unicode="R" horiz-adv-x="1220" d="M168 0v1339h450q104 0 194.5 -20.5t157 -66.5t104.5 -121.5t38 -188.5q0 -154 -72.5 -248t-195.5 -135l319 -559h-266l-289 524h-202v-524h-238zM406 713h188q139 0 211 57t72 172q0 117 -72 162t-211 45h-188v-436z" /> -<glyph unicode="S" horiz-adv-x="1110" d="M76 172l137 162q72 -68 164 -110t186 -42q113 0 173.5 47t60.5 125q0 41 -15.5 70t-43 50.5t-66.5 39.5t-84 37l-182 80q-49 20 -98.5 51t-87.5 74t-61.5 100t-23.5 131q0 80 34 148.5t93.5 120t141 80t180.5 28.5q119 0 227.5 -46t185.5 -124l-123 -152 q-63 53 -133.5 84t-156.5 31q-96 0 -152.5 -42t-56.5 -116q0 -39 17.5 -66.5t47 -49t68.5 -39t80 -33.5l180 -76q59 -25 109.5 -57.5t86 -75.5t55 -99.5t19.5 -129.5q0 -82 -32.5 -154t-95 -126t-151.5 -86t-202 -32q-135 0 -260 51.5t-221 145.5z" /> -<glyph unicode="T" horiz-adv-x="1112" d="M51 1139v200h1010v-200h-385v-1139h-238v1139h-387z" /> -<glyph unicode="U" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282z" /> -<glyph unicode="V" horiz-adv-x="1091" d="M-10 1339h252l188 -673q33 -115 57.5 -217.5t59.5 -219.5h8q35 117 60.5 219.5t58.5 217.5l186 673h242l-414 -1339h-282z" /> -<glyph unicode="W" horiz-adv-x="1632" d="M33 1339h246l114 -675q16 -109 33.5 -215.5t34.5 -212.5h8q20 106 41.5 213.5t44.5 214.5l166 675h205l166 -675q23 -104 44 -212t44 -216h8q16 109 32.5 215t32.5 213l115 675h229l-258 -1339h-295l-165 705q-16 78 -30.5 154.5t-29.5 154.5h-8q-14 -78 -28.5 -155 t-30.5 -154l-162 -705h-291z" /> -<glyph unicode="X" horiz-adv-x="1101" d="M25 0l378 690l-356 649h264l150 -297q23 -47 46 -96t54 -108h8q25 59 46.5 108t43.5 96l142 297h252l-357 -659l381 -680h-264l-164 315q-27 53 -52.5 105.5t-53.5 114.5h-8q-27 -61 -51.5 -113.5t-49.5 -106.5l-158 -315h-251z" /> -<glyph unicode="Y" horiz-adv-x="1019" d="M-12 1339h254l145 -342q29 -76 58.5 -146.5t60.5 -148.5h8q33 78 64.5 149t60.5 146l145 342h248l-403 -841v-498h-238v498z" /> -<glyph unicode="Z" horiz-adv-x="1099" d="M78 0v143l649 996h-588v200h881v-143l-647 -995h653v-201h-948z" /> -<glyph unicode="[" horiz-adv-x="663" d="M184 -311v1761h402v-131h-224v-1501h224v-129h-402z" /> -<glyph unicode="\" horiz-adv-x="704" d="M43 1454h160l479 -1782h-162z" /> -<glyph unicode="]" horiz-adv-x="663" d="M78 -182h223v1501h-223v131h401v-1761h-401v129z" /> -<glyph unicode="^" d="M113 571l313 801h197l315 -801h-199l-112 310l-99 276h-8l-96 -276l-113 -310h-198z" /> -<glyph unicode="_" horiz-adv-x="1024" d="M25 -131h974v-141h-974v141z" /> -<glyph unicode="`" horiz-adv-x="1124" d="M295 1473h233l185 -299h-177z" /> -<glyph unicode="a" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> -<glyph unicode="b" horiz-adv-x="1155" d="M150 0v1446h235v-373l-6 -168q63 55 138 90t153 35q94 0 167.5 -36t125 -102.5t78 -160.5t26.5 -211q0 -129 -36 -230.5t-95 -171t-137 -106.5t-162 -37q-70 0 -140.5 33t-134.5 94h-6l-20 -102h-186zM385 254q53 -47 105.5 -65.5t97.5 -18.5q100 0 167.5 87t67.5 259 q0 152 -51 236t-166 84q-106 0 -221 -113v-469z" /> -<glyph unicode="c" horiz-adv-x="946" d="M84 502q0 125 41 223t110.5 165.5t160.5 103.5t192 36q98 0 170.5 -33.5t124.5 -83.5l-113 -149q-41 35 -82 54.5t-88 19.5q-123 0 -198.5 -91.5t-75.5 -244.5q0 -152 74.5 -243t193.5 -91q61 0 113.5 25.5t93.5 60.5l98 -150q-72 -63 -158 -96t-172 -33q-102 0 -191 35 t-154.5 102.5t-102.5 166t-37 223.5z" /> -<glyph unicode="d" horiz-adv-x="1155" d="M88 502q0 123 36 221t95.5 165.5t136 104.5t158.5 37q86 0 145.5 -29.5t118.5 -80.5l-8 161v365h236v-1446h-195l-16 109h-9q-55 -55 -128.5 -94.5t-155.5 -39.5q-190 0 -302 138.5t-112 388.5zM332 504q0 -164 58.5 -249t168.5 -85q113 0 211 113v469 q-53 47 -103.5 65.5t-101.5 18.5q-98 0 -165.5 -86t-67.5 -246z" /> -<glyph unicode="e" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5z" /> -<glyph unicode="f" horiz-adv-x="649" d="M55 819v176l135 11v104q0 78 18.5 144.5t59.5 114.5t103.5 74.5t152.5 26.5q53 0 101.5 -10t83.5 -24l-45 -176q-53 24 -107 24h-4q-127 0 -127 -170v-108h197v-187h-197v-819h-236v819h-135z" /> -<glyph unicode="g" horiz-adv-x="1064" d="M82 -182q0 63 37 117.5t106 97.5v8q-39 25 -64.5 65.5t-25.5 102.5q0 59 34 107.5t77 78.5v8q-51 39 -91 108t-40 159q0 86 32.5 153.5t87 113.5t126 69.5t151.5 23.5q41 0 79 -7t68 -17h361v-175h-184q25 -29 41 -72.5t16 -96.5q0 -84 -29.5 -147.5t-81 -106.5t-121 -66 t-149.5 -23q-33 0 -67.5 6.5t-69.5 20.5q-23 -20 -36 -40.5t-13 -55.5q0 -43 35.5 -67.5t127.5 -24.5h179q182 0 275 -58.5t93 -189.5q0 -74 -37.5 -139.5t-107.5 -112.5t-169 -74.5t-222 -27.5q-90 0 -167 16t-132.5 49t-87 82t-31.5 115zM279 -147q0 -68 68.5 -106 t189.5 -38q123 0 197.5 48t74.5 114q0 59 -46 79.5t-132 20.5h-137q-82 0 -138 15q-77 -59 -77 -133zM336 670q0 -98 51 -150.5t125 -52.5q72 0 123 52t51 151q0 94 -50 146t-124 52t-125 -51t-51 -147z" /> -<glyph unicode="h" horiz-adv-x="1142" d="M150 0v1446h235v-373l-8 -194q63 59 140 105t181 46q162 0 236 -103.5t74 -295.5v-631h-236v600q0 125 -37 176t-121 51q-66 0 -115.5 -31.5t-113.5 -93.5v-702h-235z" /> -<glyph unicode="i" horiz-adv-x="536" d="M123 1315q0 59 41 97t104 38t104.5 -38t41.5 -97t-41.5 -96t-104.5 -37t-104 36.5t-41 96.5zM150 0v1006h235v-1006h-235z" /> -<glyph unicode="j" horiz-adv-x="538" d="M-94 -395l45 176q20 -6 41.5 -11.5t44.5 -5.5q68 0 91.5 46.5t23.5 134.5v1061h237v-1057q0 -80 -16.5 -147.5t-54 -118t-99 -78t-149.5 -27.5q-55 0 -95.5 8t-68.5 19zM125 1315q0 59 42 97t103 38q63 0 105.5 -38t42.5 -97t-42.5 -96t-105.5 -37q-61 0 -103 36.5 t-42 96.5z" /> -<glyph unicode="k" horiz-adv-x="1069" d="M150 0v1446h231v-903h6l373 463h258l-344 -410l379 -596h-256l-258 436l-158 -180v-256h-231z" /> -<glyph unicode="l" horiz-adv-x="555" d="M150 258v1188h235v-1200q0 -43 16.5 -60.5t34.5 -17.5h15.5t21.5 4l31 -176q-47 -20 -125 -21q-127 0 -178 76t-51 207z" /> -<glyph unicode="m" horiz-adv-x="1726" d="M150 0v1006h194l16 -138h9q63 68 138 115t169 47q111 0 177.5 -47t100.5 -133q72 78 150 129t174 51q160 0 235.5 -103.5t75.5 -295.5v-631h-237v600q0 125 -38 176t-116 51q-94 0 -211 -125v-702h-235v600q0 125 -38 176t-118 51q-94 0 -211 -125v-702h-235z" /> -<glyph unicode="n" horiz-adv-x="1146" d="M150 0v1006h194l16 -136h9q68 66 146.5 113t182.5 47q162 0 236 -103.5t74 -295.5v-631h-236v600q0 125 -37 176t-121 51q-66 0 -115.5 -31.5t-113.5 -93.5v-702h-235z" /> -<glyph unicode="o" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243 q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> -<glyph unicode="p" horiz-adv-x="1155" d="M150 -397v1403h194l16 -107h9q63 53 141 92t162 39q94 0 166.5 -36t124 -103.5t78 -161.5t26.5 -211q0 -129 -36 -230.5t-95 -170t-137 -105.5t-162 -37q-66 0 -131.5 29t-126.5 82l6 -168v-315h-235zM385 254q55 -47 106.5 -65.5t96.5 -18.5q100 0 167.5 87t67.5 259 q0 152 -51 236t-166 84q-106 0 -221 -113v-469z" /> -<glyph unicode="q" horiz-adv-x="1148" d="M88 502q0 123 36 221t95.5 165.5t136 104.5t158.5 37q86 0 150.5 -29.5t128.5 -91.5h6l20 97h187v-1403h-236v329l8 166q-55 -53 -126.5 -88t-149.5 -35q-190 0 -302 138.5t-112 388.5zM332 504q0 -164 58.5 -249t168.5 -85q113 0 211 113v469q-53 47 -103.5 65.5 t-101.5 18.5q-98 0 -165.5 -86t-67.5 -246z" /> -<glyph unicode="r" horiz-adv-x="763" d="M150 0v1006h194l16 -179h9q53 98 128.5 150.5t155.5 52.5q72 0 115 -20l-41 -205q-27 8 -49.5 12t-54.5 4q-59 0 -125 -46t-113 -161v-614h-235z" /> -<glyph unicode="s" horiz-adv-x="882" d="M49 115l111 151q68 -53 134 -82.5t144 -29.5q82 0 121 33.5t39 86.5q0 31 -18.5 54.5t-49 42t-69.5 34t-78 31.5q-49 18 -100.5 43t-91 59.5t-65.5 81t-26 109.5q0 133 98.5 217t268.5 84q104 0 188 -37t146 -84l-109 -143q-53 39 -107.5 62.5t-113.5 23.5 q-76 0 -111.5 -32t-35.5 -79q0 -29 17 -50t46 -38.5t67 -32t78 -28.5q51 -18 102.5 -42t93.5 -58.5t67.5 -85t25.5 -119.5q0 -66 -25.5 -122t-74.5 -98t-123 -67t-168 -25q-104 0 -205.5 40t-175.5 100z" /> -<glyph unicode="t" horiz-adv-x="739" d="M41 819v176l156 11l28 274h197v-274h256v-187h-256v-479q0 -176 141 -176q27 0 54.5 6t50.5 16l41 -174q-41 -14 -93.5 -25.5t-111.5 -11.5q-88 0 -148.5 27t-98.5 75t-55.5 114.5t-17.5 148.5v479h-143z" /> -<glyph unicode="u" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5z" /> -<glyph unicode="v" horiz-adv-x="1013" d="M25 1006h239l160 -523q20 -74 41.5 -149.5t42.5 -153.5h8q23 78 43.5 154t42.5 149l160 523h227l-342 -1006h-272z" /> -<glyph unicode="w" horiz-adv-x="1531" d="M49 1006h238l121 -523q16 -72 27 -143.5t26 -144.5h8q14 74 29.5 145.5t33.5 142.5l132 523h215l133 -523q18 -72 34.5 -143.5t32.5 -144.5h8q14 74 26.5 145.5t27.5 142.5l121 523h221l-256 -1006h-281l-117 469q-16 72 -30.5 142.5t-30.5 150.5h-8 q-14 -80 -28.5 -151.5t-31.5 -143.5l-114 -467h-271z" /> -<glyph unicode="x" horiz-adv-x="985" d="M29 0l319 524l-299 482h254l113 -191q23 -41 46 -85t46 -85h8q18 41 38.5 85t39.5 85l96 191h244l-297 -508l319 -498h-254l-122 199q-25 45 -50.5 90t-52.5 88h-8q-23 -43 -44.5 -87t-43.5 -91l-107 -199h-245z" /> -<glyph unicode="y" horiz-adv-x="1013" d="M25 1006h239l174 -494q23 -66 44.5 -138.5t43.5 -144.5h9q18 70 37.5 142.5t37.5 140.5l152 494h227l-364 -1051q-31 -86 -68 -153.5t-85 -115.5t-110.5 -74t-144.5 -26q-41 0 -71.5 5.5t-59.5 15.5l43 184q14 -4 33.5 -9t38.5 -5q80 0 128 48t72 124l19 63z" /> -<glyph unicode="z" horiz-adv-x="907" d="M70 0v127l475 692h-422v187h717v-125l-473 -693h489v-188h-786z" /> -<glyph unicode="{" horiz-adv-x="663" d="M66 498v143q51 0 84.5 14.5t54 36t29 48t8.5 55.5q0 96 -9.5 181t-9.5 191q0 162 60.5 222.5t189.5 60.5h113v-131h-49q-72 0 -97.5 -35t-25.5 -127q0 -86 5 -173t5 -179q0 -111 -33 -162t-104 -70v-8q72 -18 104.5 -70.5t32.5 -160.5q0 -98 -5 -181t-5 -171 q0 -92 25.5 -128t97.5 -36h49v-129h-113q-63 0 -110.5 13t-78 46t-46 87t-15.5 136q0 55 3 101.5t6.5 89.5t6.5 87t3 93q0 29 -8.5 56.5t-29 49t-54 36t-84.5 14.5z" /> -<glyph unicode="|" horiz-adv-x="522" d="M182 -512v2048h158v-2048h-158z" /> -<glyph unicode="}" horiz-adv-x="663" d="M78 -182h47q74 0 99.5 35.5t25.5 128.5q0 88 -5 171t-5 181q0 109 32.5 161t104.5 70v8q-72 18 -104.5 69.5t-32.5 162.5q0 92 5 179t5 173q0 92 -25.5 127t-99.5 35h-47v131h110q63 0 111.5 -14.5t79.5 -47t46 -87t15 -134.5q0 -106 -9 -191t-9 -181q0 -29 8 -55.5 t28.5 -48t54.5 -36t85 -14.5v-143q-51 0 -85 -14.5t-54.5 -36t-28.5 -49t-8 -56.5q0 -49 3 -93t6 -87t6 -89t3 -102q0 -82 -15 -136t-46 -87t-79 -46t-112 -13h-110v129z" /> -<glyph unicode="~" d="M66 645q66 106 138 152.5t144 46.5q61 0 109.5 -25.5t89.5 -56.5t79 -56.5t81 -25.5q86 0 151 121l125 -96q-66 -104 -137.5 -150.5t-143.5 -46.5q-61 0 -109 25.5t-89 56.5t-79 56.5t-81 25.5q-86 0 -151 -121z" /> -<glyph unicode="¡" horiz-adv-x="645" d="M170 872q0 68 44 113t110 45t108.5 -45t42.5 -113q0 -72 -43 -116.5t-108 -44.5q-66 0 -110 45t-44 116zM205 -367l6 234l33 698h157l33 -698l8 -234h-237z" /> -<glyph unicode="¢" d="M125 631q0 106 32.5 193t89 150.5t134.5 103.5t170 55v206h135v-200q86 -4 150.5 -37t111.5 -80l-110 -145q-72 63 -152 71v-631q53 4 98 29t82 55l99 -149q-59 -53 -132 -85t-147 -42v-201h-135v203q-193 25 -309.5 154t-116.5 350zM354 631q0 -115 51.5 -193 t145.5 -106v600q-94 -31 -145.5 -109t-51.5 -192z" /> -<glyph unicode="£" d="M104 0v145q98 49 158 138.5t60 201.5q0 23 -2.5 42.5t-6.5 41.5h-204v142l137 10h24q-16 53 -29.5 105.5t-13.5 103.5q0 92 30 165.5t84 125t130 79t166 27.5q113 0 193.5 -43t142.5 -117l-131 -129q-39 45 -82 71t-103 26q-96 0 -149 -56.5t-53 -160.5q0 -51 10 -99.5 t24 -97.5h316v-152h-281q6 -43 6 -86q0 -92 -26.5 -153.5t-81.5 -120.5v-8h553v-201h-871z" /> -<glyph unicode="¤" d="M47 313l127 129q-35 47 -53.5 105.5t-18.5 126.5q0 70 18.5 128t53.5 105l-127 129l121 123l139 -143q98 63 217 63t217 -63l142 143l121 -123l-130 -129q35 -47 53.5 -105.5t18.5 -127.5q0 -68 -18.5 -126.5t-53.5 -105.5l130 -129l-121 -123l-142 144 q-47 -33 -103 -48.5t-114 -15.5q-57 0 -112.5 15.5t-102.5 48.5l-141 -144zM315 674q0 -106 61.5 -171t147.5 -65q88 0 148.5 64.5t60.5 171.5q0 109 -60.5 173t-148.5 64q-86 0 -147.5 -64t-61.5 -173z" /> -<glyph unicode="¥" d="M37 1303h244l131 -310q29 -68 55.5 -135t56.5 -137h8q29 70 56.5 137.5t56.5 134.5l131 310h238l-318 -627h271v-121h-324v-121h324v-123h-324v-311h-237v311h-322v123h322v121h-322v121h268z" /> -<glyph unicode="¦" horiz-adv-x="522" d="M182 428h158v-940h-158v940zM182 618v918h158v-918h-158z" /> -<glyph unicode="§" d="M84 684q0 84 46 151.5t124 112.5q-61 68 -61 168q0 61 21.5 114.5t64.5 92.5t105 61.5t144 22.5q109 0 196 -39t148 -86l-110 -149q-47 41 -103.5 68.5t-117.5 27.5q-72 0 -103.5 -29t-31.5 -74q0 -47 41.5 -78.5t103 -61.5t135.5 -61.5t135.5 -76.5t103.5 -109.5 t42 -156.5q0 -94 -45 -158t-125 -111q25 -33 39 -72.5t14 -90.5q0 -66 -24.5 -120.5t-71.5 -95t-115 -63.5t-152 -23q-111 0 -211 41t-165 119l139 123q51 -51 108.5 -78.5t128.5 -27.5q72 0 110 32.5t38 81.5t-41 82t-102.5 61.5t-132 59.5t-132 75t-102.5 107.5t-41 159.5 zM287 700q0 -57 36.5 -95t93 -68.5t124 -58t129.5 -62.5q47 25 70.5 59.5t23.5 87.5q0 57 -36 97t-92 71t-124 57.5t-129 61.5q-47 -29 -71.5 -64t-24.5 -86z" /> -<glyph unicode="¨" horiz-adv-x="1124" d="M250 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM629 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> -<glyph unicode="©" horiz-adv-x="1529" d="M96 664q0 158 54.5 282.5t145.5 212.5t213 134t257 46t256 -46t212 -134t145.5 -213t54.5 -282q0 -158 -54.5 -284t-145.5 -215t-212 -137t-256 -48t-257 48t-213 137t-145.5 215t-54.5 284zM215 664q0 -129 43 -235.5t118 -182.5t175 -118t215 -42t215 42t174 118 t117 182.5t43 235.5t-43 234.5t-117 180t-174 115.5t-215 41t-215 -41t-175 -115.5t-118 -180t-43 -234.5zM401 662q0 90 32 162.5t86 122.5t124 78t145 28q92 0 154 -35t111 -84l-92 -103q-39 37 -76 56.5t-84 19.5q-104 0 -163.5 -69.5t-59.5 -175.5q0 -119 58 -189 t157 -70q59 0 102 23t84 57l80 -114q-57 -47 -122 -79t-151 -32q-82 0 -152.5 27.5t-121.5 80t-81 127.5t-30 169z" /> -<glyph unicode="ª" horiz-adv-x="720" d="M68 715q0 109 93 167t302 76q-4 55 -28.5 88t-86.5 33q-47 0 -97 -19.5t-97 -45.5l-62 112q59 37 132 64t153 27q256 0 256 -291v-394h-137l-17 72h-8q-41 -37 -90.5 -62.5t-108.5 -25.5q-94 0 -149 56.5t-55 142.5zM233 729q1 -82 95 -82q35 0 67.5 17.5t67.5 50.5v143 q-129 -14 -179.5 -48t-50.5 -81z" /> -<glyph unicode="«" horiz-adv-x="933" d="M96 430v172l277 305l94 -76l-236 -315l236 -317l-94 -74zM452 430v172l277 305l94 -76l-236 -315l236 -317l-94 -74z" /> -<glyph unicode="¬" d="M70 590v172h911v-559h-178v387h-733z" /> -<glyph unicode="­" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> -<glyph unicode="®" horiz-adv-x="907" d="M57 1053q0 90 31 165.5t85 130t126 84t154 29.5t153.5 -29.5t125.5 -84t85 -130t31 -165.5t-31 -165t-85 -129t-125.5 -84t-153.5 -30t-154 30t-126 84t-85 129t-31 165zM154 1053q0 -72 22.5 -130.5t62.5 -100.5t94 -65.5t120 -23.5q63 0 118.5 23.5t95.5 65.5 t62.5 100.5t22.5 130.5t-22.5 131t-62.5 102t-95.5 66.5t-118.5 23.5q-66 0 -120 -23.5t-94 -66.5t-62.5 -102.5t-22.5 -130.5zM295 854v408h170q68 0 116 -31t48 -103q0 -35 -19.5 -65.5t-56.5 -46.5l90 -162h-108l-68 133h-70v-133h-102zM397 1061h47q35 0 55.5 16.5 t20.5 44.5q0 27 -17.5 44.5t-56.5 17.5h-49v-123z" /> -<glyph unicode="¯" horiz-adv-x="1124" d="M295 1221v155h532v-155h-532z" /> -<glyph unicode="°" horiz-adv-x="712" d="M82 1124q0 61 21.5 112.5t59.5 88.5t88 57.5t107 20.5t107.5 -20.5t88.5 -57.5t59.5 -88t21.5 -113q0 -61 -21.5 -112t-59.5 -88t-88.5 -57.5t-107.5 -20.5t-107 20.5t-88 57.5t-59.5 88t-21.5 112zM213 1124q0 -70 39.5 -113.5t105.5 -43.5t106 44t40 113q0 72 -40 116 t-106 44t-105.5 -44t-39.5 -116z" /> -<glyph unicode="±" d="M70 0v170h911v-170h-911zM70 612v170h366v367h178v-367h367v-170h-367v-319h-178v319h-366z" /> -<glyph unicode="²" horiz-adv-x="761" d="M68 1565q53 76 126.5 117.5t159.5 41.5q127 0 204 -67.5t77 -196.5q0 -53 -19.5 -102t-54.5 -99.5t-81 -101.5t-99 -106h289v-150h-572v98q172 147 268.5 247.5t96.5 184.5q0 68 -36 107t-99 39q-45 0 -84 -30t-74 -77z" /> -<glyph unicode="³" horiz-adv-x="761" d="M63 1036l111 86q74 -109 186 -108q57 0 97.5 30.5t40.5 87.5q0 59 -56.5 91t-162.5 32v105q88 0 138 32.5t50 90.5q0 47 -33 75.5t-88 28.5q-41 0 -79 -24.5t-68 -63.5l-103 90q59 66 124 100.5t155 34.5q53 0 101 -15t85 -43t58.5 -69t21.5 -92q0 -68 -34 -114t-93 -76 q66 -23 112 -71t46 -124q0 -55 -23.5 -100t-64.5 -77t-95.5 -49.5t-113.5 -17.5q-102 0 -182 43t-130 117z" /> -<glyph unicode="´" horiz-adv-x="1124" d="M409 1174l185 299h233l-241 -299h-177z" /> -<glyph unicode="µ" horiz-adv-x="1150" d="M150 -410v1416h235v-600q0 -125 38 -176.5t120 -51.5q66 0 115 33t108 106v689h235v-1006h-194l-16 147h-9q-47 -78 -111.5 -118.5t-142.5 -40.5q-49 0 -88 12t-67 53l12 -184v-279h-235z" /> -<glyph unicode="¶" horiz-adv-x="1226" d="M82 893q0 125 39 210t107.5 137t161.5 75.5t200 23.5h90v-905h-76q-111 0 -206 27.5t-165.5 85t-110.5 143.5t-40 203zM793 -164v1503h237v-1503h-237z" /> -<glyph unicode="·" horiz-adv-x="563" d="M129 657q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> -<glyph unicode="¸" horiz-adv-x="1124" d="M376 -342q78 10 127.5 31.5t49.5 62.5q0 33 -30 55.5t-95 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -27 -83.5t-73 -59.5t-105 -39t-125 -18z" /> -<glyph unicode="¹" horiz-adv-x="761" d="M168 1503v111q76 12 121 31.5t92 54.5h141v-799h-178v602h-176z" /> -<glyph unicode="º" horiz-adv-x="755" d="M55 864q0 84 25.5 149.5t71 110.5t102.5 69t123 24q63 0 121.5 -24t103.5 -69t70.5 -110.5t25.5 -149.5q0 -82 -25.5 -146.5t-70.5 -109.5t-103.5 -68.5t-121.5 -23.5q-66 0 -123 23.5t-102.5 68.5t-71 109.5t-25.5 146.5zM229 864q0 -94 38 -152.5t110 -58.5t109.5 58.5 t37.5 152.5q0 98 -37.5 156.5t-109.5 58.5t-110 -58t-38 -157z" /> -<glyph unicode="»" horiz-adv-x="933" d="M111 199l233 317l-233 315l92 76l278 -305v-172l-278 -305zM467 199l233 317l-233 315l92 76l278 -305v-172l-278 -305z" /> -<glyph unicode="¼" horiz-adv-x="1628" d="M115 1143v111q76 12 121 31.5t92 54.5h141v-799h-178v602h-176zM375 -25l731 1389h143l-729 -1389h-145zM944 195v90l311 514h213v-484h119v-120h-119v-195h-158v195h-366zM1116 315h194v113l11 231h-9l-92 -161z" /> -<glyph unicode="½" horiz-adv-x="1693" d="M115 1143v111q76 12 121 31.5t92 54.5h141v-799h-178v602h-176zM338 -25l731 1389h143l-729 -1389h-145zM1000 664q53 76 126.5 117.5t159.5 41.5q127 0 204 -67.5t77 -196.5q0 -53 -19.5 -102t-54.5 -99.5t-81 -101.5t-99 -106h289v-150h-572v98q172 147 268.5 247.5 t96.5 184.5q0 68 -36 107t-99 39q-45 0 -84 -30t-74 -77z" /> -<glyph unicode="¾" horiz-adv-x="1652" d="M61 676l111 86q74 -109 186 -108q57 0 97.5 30.5t40.5 87.5q0 59 -56.5 91t-162.5 32v105q88 0 138 32.5t50 90.5q0 47 -33 75.5t-88 28.5q-41 0 -79 -24.5t-68 -63.5l-103 90q59 66 124 100.5t155 34.5q53 0 101 -15t85 -43t58.5 -69t21.5 -92q0 -68 -34 -114t-93 -76 q66 -23 112 -71t46 -124q0 -55 -23.5 -100t-64.5 -77t-95.5 -49.5t-113.5 -17.5q-102 0 -182 43t-130 117zM434 -25l731 1389h143l-729 -1389h-145zM969 195v90l311 514h213v-484h119v-120h-119v-195h-158v195h-366zM1141 315h194v113l11 231h-9l-92 -161z" /> -<glyph unicode="¿" horiz-adv-x="909" d="M92 -51q0 66 23.5 118t58.5 99t74 90t70.5 90t50 100.5t12.5 118.5h209q10 -76 -6.5 -136t-46 -111.5t-67.5 -95.5t-71.5 -86t-56.5 -84t-23 -87q0 -72 44.5 -118t123.5 -46q61 0 112.5 30t96.5 77l133 -121q-68 -78 -157.5 -128t-200.5 -50q-84 0 -152.5 21.5t-120 64.5 t-79 106.5t-27.5 147.5zM332 872q0 68 43 113t108 45q66 0 109 -45t43 -113q0 -72 -43 -116.5t-109 -44.5t-108.5 45t-42.5 116z" /> -<glyph unicode="À" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM262 1679h258l172 -237h-190zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> -<glyph unicode="Á" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5zM434 1442l172 237h258l-240 -237h-190z" /> -<glyph unicode="Â" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM252 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> -<glyph unicode="Ã" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM239 1448q12 119 65.5 184.5t131.5 65.5q41 0 75 -15.5t63.5 -34t55 -34t52.5 -15.5q29 0 49 24t31 75h125q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -75 15.5t-63.5 35t-55 34.5t-52.5 15 q-29 0 -49 -24.5t-31 -75.5h-125zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> -<glyph unicode="Ä" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM252 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5zM631 1571 q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> -<glyph unicode="Å" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM352 1620q0 86 58.5 138t152.5 52q92 0 151.5 -52t59.5 -138q0 -88 -59.5 -139t-151.5 -51q-94 0 -152.5 51t-58.5 139zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8 q-29 -113 -57.5 -224.5t-61.5 -217.5zM473 1620q0 -47 25.5 -71.5t64.5 -24.5q37 0 63.5 24.5t26.5 71.5q0 45 -26.5 70.5t-63.5 25.5q-39 0 -64.5 -25.5t-25.5 -70.5z" /> -<glyph unicode="Æ" horiz-adv-x="1701" d="M-8 0l667 1339h922v-200h-541v-342h453v-201h-453v-395h562v-201h-799v348h-395l-170 -348h-246zM498 535h305v622h-8q-47 -104 -96.5 -206.5t-96.5 -200.5z" /> -<glyph unicode="Ç" horiz-adv-x="1173" d="M96 666q0 164 48.5 294t132 220t196.5 137t242 47q123 0 220 -51t161 -119l-131 -147q-53 51 -111.5 80.5t-136.5 29.5q-82 0 -151.5 -33.5t-120 -96t-78 -153t-27.5 -202.5q0 -229 100.5 -359.5t268.5 -130.5q90 0 157.5 35t124.5 98l131 -145q-82 -94 -185 -144.5 t-232 -50.5q-127 0 -239 45.5t-194 133.5t-129 217t-47 295zM512 -342q78 10 127.5 31.5t49.5 62.5q0 33 -30 55.5t-95 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -27 -83.5t-73 -59.5t-105 -39t-125 -18z" /> -<glyph unicode="È" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM283 1679h258l172 -237h-190z" /> -<glyph unicode="É" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM455 1442l172 237h258l-240 -237h-190z" /> -<glyph unicode="Ê" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM273 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184z" /> -<glyph unicode="Ë" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM273 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM652 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> -<glyph unicode="Ì" horiz-adv-x="571" d="M-16 1679h258l172 -237h-190zM168 0v1339h238v-1339h-238z" /> -<glyph unicode="Í" horiz-adv-x="571" d="M156 1442l172 237h258l-240 -237h-190zM168 0v1339h238v-1339h-238z" /> -<glyph unicode="Î" horiz-adv-x="571" d="M-26 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184zM168 0v1339h238v-1339h-238z" /> -<glyph unicode="Ï" horiz-adv-x="571" d="M-26 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM168 0v1339h238v-1339h-238zM353 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> -<glyph unicode="Ð" horiz-adv-x="1320" d="M57 637v113l156 8v581h356q307 0 480.5 -165.5t173.5 -497.5q0 -166 -44 -293t-127 -212t-202 -128t-268 -43h-369v637h-156zM451 193h102q205 0 315.5 117.5t110.5 365.5q0 246 -111.5 358.5t-314.5 112.5h-102v-389h282v-121h-282v-444z" /> -<glyph unicode="Ñ" horiz-adv-x="1337" d="M168 0v1339h244l415 -753l140 -285h8q-10 104 -20.5 224t-10.5 233v581h225v-1339h-243l-416 754l-139 284h-9q10 -106 20.5 -223t10.5 -229v-586h-225zM348 1448q12 119 65.5 184.5t131.5 65.5q41 0 75 -15.5t63.5 -34t55 -34t52.5 -15.5q29 0 49 24t31 75h125 q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -75 15.5t-63.5 35t-55 34.5t-52.5 15q-29 0 -49 -24.5t-31 -75.5h-125z" /> -<glyph unicode="Ò" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM385 1679h258l172 -237h-190z" /> -<glyph unicode="Ó" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM557 1442l172 237h258l-240 -237h-190z" /> -<glyph unicode="Ô" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM375 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184z" /> -<glyph unicode="Õ" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM362 1448q12 119 65.5 184.5t131.5 65.5q41 0 75 -15.5t63.5 -34t55 -34t52.5 -15.5q29 0 49 24t31 75h125q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -75 15.5t-63.5 35 t-55 34.5t-52.5 15q-29 0 -49 -24.5t-31 -75.5h-125z" /> -<glyph unicode="Ö" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM375 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM754 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34 t-34.5 87z" /> -<glyph unicode="×" d="M100 367l303 307l-303 309l121 123l303 -311l305 311l121 -123l-305 -309l305 -307l-121 -123l-305 309l-303 -309z" /> -<glyph unicode="Ø" horiz-adv-x="1374" d="M88 25l141 178q-63 90 -98 207.5t-35 265.5q0 162 43 290t122 216t187.5 135t239.5 47q213 0 361 -119l133 168l125 -98l-150 -191q59 -86 90 -197.5t31 -250.5q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5q-201 0 -346 111l-127 -160zM340 676 q0 -156 47 -273l520 662q-88 92 -219 92q-160 0 -254 -128t-94 -353zM481 264q86 -82 207 -82q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 137 -39 244z" /> -<glyph unicode="Ù" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM367 1679h258l172 -237 h-190z" /> -<glyph unicode="Ú" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM539 1442l172 237h258 l-240 -237h-190z" /> -<glyph unicode="Û" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM357 1442l196 237h230 l196 -237h-184l-123 131h-8l-123 -131h-184z" /> -<glyph unicode="Ü" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM357 1571q0 53 33.5 88 t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM736 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> -<glyph unicode="Ý" horiz-adv-x="1019" d="M-12 1339h254l145 -342q29 -76 58.5 -146.5t60.5 -148.5h8q33 78 64.5 149t60.5 146l145 342h248l-403 -841v-498h-238v498zM381 1442l172 237h258l-240 -237h-190z" /> -<glyph unicode="Þ" horiz-adv-x="1232" d="M172 0v1339h238v-213h213q111 0 204 -21.5t160.5 -69.5t106.5 -127t39 -195q0 -113 -39 -195t-107.5 -135t-162 -78.5t-201.5 -25.5h-213v-279h-238zM410 469h192q152 0 223.5 60.5t71.5 183.5q0 125 -73.5 174t-221.5 49h-192v-467z" /> -<glyph unicode="ß" horiz-adv-x="1236" d="M150 0v1026q0 98 28.5 179t83.5 139.5t138 90t194 31.5q92 0 162.5 -26.5t119 -70.5t72 -101.5t23.5 -120.5q0 -76 -26.5 -128t-59.5 -94t-59.5 -81t-26.5 -84q0 -41 28.5 -69.5t70.5 -53.5t92 -50.5t92 -63.5t71 -93t29 -135q0 -68 -23.5 -126t-69 -101t-112 -68 t-150.5 -25q-86 0 -157.5 26t-141.5 71l86 161q104 -80 207 -79q68 0 105 38.5t37 92.5q0 49 -29 81.5t-71 59.5t-91 51.5t-91 58t-70.5 80t-28.5 115.5q0 63 25.5 109.5t55 88.5t55 86t25.5 105q0 70 -37.5 115t-111.5 45q-102 0 -156.5 -73.5t-54.5 -215.5v-991h-233z" /> -<glyph unicode="à" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M297 1473h233l185 -299h-177zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> -<glyph unicode="á" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5zM411 1174l185 299h233l-241 -299h-177z" /> -<glyph unicode="â" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M272 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> -<glyph unicode="ã" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M250 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34t49.5 -15.5q53 0 73 99h125q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226 q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> -<glyph unicode="ä" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M252 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5zM631 1309q0 51 34.5 86t87.5 35 t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> -<glyph unicode="å" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5zM352 1315q0 92 58.5 146.5t152.5 54.5t152.5 -54.5t58.5 -146.5q0 -90 -58.5 -144.5t-152.5 -54.5t-152.5 54.5t-58.5 144.5zM473 1315 q0 -47 25.5 -76t64.5 -29t64.5 29t25.5 76t-25.5 76.5t-64.5 29.5t-64.5 -29.5t-25.5 -76.5z" /> -<glyph unicode="æ" horiz-adv-x="1607" d="M106 270q0 162 140.5 251t445.5 122q-2 39 -11 75t-29.5 63.5t-54.5 43t-85 15.5q-72 0 -142.5 -29t-136.5 -70l-86 158q84 53 184.5 92t211.5 39q104 0 174.5 -48t109.5 -134q61 86 138 134t176 48q96 0 168.5 -36t122 -99.5t75 -152.5t25.5 -193q0 -70 -10 -111h-615 q12 -131 89 -202.5t188 -71.5q66 0 119 21.5t108 56.5l84 -158q-72 -47 -159 -78t-183 -31q-119 0 -205 50.5t-145 121.5q-104 -90 -201.5 -131t-195.5 -41q-133 0 -216.5 81t-83.5 214zM336 289q0 -68 40 -98.5t103 -30.5q59 0 125 31.5t121 87.5q-16 35 -23.5 79.5 t-9.5 90.5l-4 47q-193 -27 -272.5 -78t-79.5 -129zM907 588h422q0 123 -49 191.5t-147 68.5q-86 0 -148.5 -67.5t-77.5 -192.5z" /> -<glyph unicode="ç" horiz-adv-x="946" d="M84 502q0 125 41 223t110.5 165.5t160.5 103.5t192 36q98 0 170.5 -33.5t124.5 -83.5l-113 -149q-41 35 -82 54.5t-88 19.5q-123 0 -198.5 -91.5t-75.5 -244.5q0 -152 74.5 -243t193.5 -91q61 0 113.5 25.5t93.5 60.5l98 -150q-72 -63 -158 -96t-172 -33q-102 0 -191 35 t-154.5 102.5t-102.5 166t-37 223.5zM376 -342q78 10 127.5 31.5t49.5 62.5q0 33 -30 55.5t-95 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -27 -83.5t-73 -59.5t-105 -39t-125 -18z" /> -<glyph unicode="è" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M281 1473h233l185 -299h-177zM311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5z" /> -<glyph unicode="é" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5zM395 1174l185 299h233l-241 -299h-177z" /> -<glyph unicode="ê" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M256 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164zM311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5z" /> -<glyph unicode="ë" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M236 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5zM615 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5 t-34.5 88.5z" /> -<glyph unicode="ì" horiz-adv-x="536" d="M2 1473h233l185 -299h-177zM150 0v1006h235v-1006h-235z" /> -<glyph unicode="í" horiz-adv-x="536" d="M116 1174l185 299h233l-241 -299h-177zM150 0v1006h235v-1006h-235z" /> -<glyph unicode="î" horiz-adv-x="536" d="M-23 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164zM150 0v1006h235v-1006h-235z" /> -<glyph unicode="ï" horiz-adv-x="536" d="M-43 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM150 0v1006h235v-1006h-235zM336 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> -<glyph unicode="ð" horiz-adv-x="1130" d="M98 461q0 106 34 192t91.5 146.5t133 92.5t159.5 32q70 0 134.5 -26t111.5 -85q-29 104 -78 184t-119 148l-291 -148l-63 109l250 127q-47 35 -98.5 65.5t-108.5 61.5l104 145q74 -39 145.5 -83t137.5 -97l293 150l63 -111l-254 -129q121 -123 199 -293t78 -405 q0 -123 -33 -226.5t-93 -178.5t-146 -116t-193 -41q-92 0 -174 34t-145.5 96.5t-100.5 152.5t-37 203zM315 461q0 -68 19.5 -122t53.5 -92t79 -58.5t94 -20.5q113 0 174.5 93t61.5 263q0 27 -1 52.5t-3 50.5q-55 70 -113.5 94t-120.5 24q-113 0 -178.5 -75.5t-65.5 -208.5z " /> -<glyph unicode="ñ" horiz-adv-x="1146" d="M150 0v1006h194l16 -136h9q68 66 146.5 113t182.5 47q162 0 236 -103.5t74 -295.5v-631h-236v600q0 125 -37 176t-121 51q-66 0 -115.5 -31.5t-113.5 -93.5v-702h-235zM301 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34t49.5 -15.5q53 0 73 99h125 q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125z" /> -<glyph unicode="ò" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM295 1473h233l185 -299h-177zM326 502q0 -152 62.5 -243t172.5 -91 q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> -<glyph unicode="ó" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243 q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245zM409 1174l185 299h233l-241 -299h-177z" /> -<glyph unicode="ô" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM270 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164z M326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> -<glyph unicode="õ" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM248 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34 t49.5 -15.5q53 0 73 99h125q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> -<glyph unicode="ö" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM250 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88 t-87.5 -35t-87 34.5t-34 88.5zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245zM629 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> -<glyph unicode="÷" d="M70 590v172h911v-172h-911zM385 307q0 59 40 96t99 37t99.5 -36.5t40.5 -96.5q0 -59 -40 -97t-100 -38q-59 0 -99 38t-40 97zM385 1044q0 59 40 96.5t99 37.5t99.5 -37t40.5 -97q0 -59 -40.5 -97t-99.5 -38t-99 38t-40 97z" /> -<glyph unicode="ø" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36q158 0 279 -90l96 117l94 -74l-102 -127q53 -66 82.5 -155t29.5 -199q0 -125 -39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35q-76 0 -147.5 22.5t-130.5 68.5l-95 -115l-94 74l103 125q-53 66 -83 153.5t-30 198.5z M313 514q0 -106 29 -186l373 458q-63 59 -154 60q-111 0 -179.5 -92t-68.5 -240zM408 221q61 -61 153 -61q111 0 180.5 91t69.5 238q0 109 -29 189z" /> -<glyph unicode="ù" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM305 1473h233l185 -299h-177z" /> -<glyph unicode="ú" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM419 1174l185 299h233l-241 -299h-177z" /> -<glyph unicode="û" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM280 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164z" /> -<glyph unicode="ü" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM260 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5 t-34 88.5zM639 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> -<glyph unicode="ý" horiz-adv-x="1013" d="M25 1006h239l174 -494q23 -66 44.5 -138.5t43.5 -144.5h9q18 70 37.5 142.5t37.5 140.5l152 494h227l-364 -1051q-31 -86 -68 -153.5t-85 -115.5t-110.5 -74t-144.5 -26q-41 0 -71.5 5.5t-59.5 15.5l43 184q14 -4 33.5 -9t38.5 -5q80 0 128 48t72 124l19 63zM370 1174 l185 299h233l-241 -299h-177z" /> -<glyph unicode="þ" horiz-adv-x="1155" d="M150 -397v1843h235v-373l-4 -158q59 49 130 82t148 33q96 0 172 -36t128.5 -103.5t80 -161.5t27.5 -211q0 -129 -36 -230.5t-95 -170t-137 -105.5t-162 -37q-72 0 -134.5 27t-121.5 76l4 -160v-315h-235zM385 254q55 -47 106.5 -65.5t96.5 -18.5q100 0 167.5 87t67.5 259 q0 152 -51 236t-166 84q-106 0 -221 -113v-469z" /> -<glyph unicode="ÿ" horiz-adv-x="1013" d="M25 1006h239l174 -494q23 -66 44.5 -138.5t43.5 -144.5h9q18 70 37.5 142.5t37.5 140.5l152 494h227l-364 -1051q-31 -86 -68 -153.5t-85 -115.5t-110.5 -74t-144.5 -26q-41 0 -71.5 5.5t-59.5 15.5l43 184q14 -4 33.5 -9t38.5 -5q80 0 128 48t72 124l19 63zM211 1309 q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM590 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> -<glyph unicode="Œ" horiz-adv-x="1753" d="M96 676q0 166 48.5 290t136.5 206.5t211.5 124.5t275.5 42h864v-200h-538v-342h450v-201h-450v-395h559v-201h-897q-147 0 -269 43t-208 128t-134.5 212t-48.5 293zM340 676q0 -250 116.5 -366.5t327.5 -116.5h72v954h-72q-209 0 -326.5 -111.5t-117.5 -359.5z" /> -<glyph unicode="œ" horiz-adv-x="1699" d="M84 502q0 125 38 223t101.5 165.5t147.5 103.5t178 36q111 0 200 -55t144 -158q59 100 147 156.5t189 56.5q96 0 171 -36t125 -99.5t75.5 -152.5t25.5 -193q0 -35 -3 -63.5t-7 -47.5h-621q12 -131 90 -202.5t189 -71.5q66 0 120 21.5t109 56.5l84 -158q-72 -47 -160 -78 t-186 -31q-104 0 -194.5 56.5t-149.5 156.5q-61 -104 -148 -158.5t-204 -54.5q-94 0 -178 35t-146.5 102.5t-99.5 166t-37 223.5zM324 502q0 -152 61 -243t164 -91q104 0 165.5 91t61.5 243q0 154 -61.5 245t-165.5 91q-102 0 -163.5 -91t-61.5 -245zM995 588h426 q0 123 -50 191.5t-148 68.5q-88 0 -150.5 -67.5t-77.5 -192.5z" /> -<glyph unicode="Ÿ" horiz-adv-x="1019" d="M-12 1339h254l145 -342q29 -76 58.5 -146.5t60.5 -148.5h8q33 78 64.5 149t60.5 146l145 342h248l-403 -841v-498h-238v498zM199 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM578 1571q0 53 34.5 88t87.5 35t87 -35t34 -88 t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> -<glyph unicode="ˆ" horiz-adv-x="1124" d="M270 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164z" /> -<glyph unicode="˜" horiz-adv-x="1124" d="M248 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34t49.5 -15.5q53 0 73 99h125q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125z" /> -<glyph unicode=" " horiz-adv-x="905" /> -<glyph unicode=" " horiz-adv-x="1810" /> -<glyph unicode=" " horiz-adv-x="905" /> -<glyph unicode=" " horiz-adv-x="1810" /> -<glyph unicode=" " horiz-adv-x="603" /> -<glyph unicode=" " horiz-adv-x="452" /> -<glyph unicode=" " horiz-adv-x="301" /> -<glyph unicode=" " horiz-adv-x="301" /> -<glyph unicode=" " horiz-adv-x="226" /> -<glyph unicode=" " horiz-adv-x="362" /> -<glyph unicode=" " horiz-adv-x="100" /> -<glyph unicode="‐" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> -<glyph unicode="‑" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> -<glyph unicode="‒" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> -<glyph unicode="–" horiz-adv-x="983" d="M86 438v156h811v-156h-811z" /> -<glyph unicode="—" horiz-adv-x="1638" d="M86 438v156h1466v-156h-1466z" /> -<glyph unicode="‘" horiz-adv-x="563" d="M115 1010q0 268 254 401l57 -104q-86 -49 -128 -107.5t-42 -150.5q6 2 18 2q55 0 95.5 -34t40.5 -93q0 -66 -38 -104t-98 -38q-78 0 -118.5 59.5t-40.5 168.5z" /> -<glyph unicode="’" horiz-adv-x="563" d="M137 905q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401z" /> -<glyph unicode="‚" horiz-adv-x="563" d="M137 -215q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401z" /> -<glyph unicode="“" horiz-adv-x="987" d="M115 1010q0 268 254 401l57 -104q-86 -49 -128 -107.5t-42 -150.5q6 2 18 2q55 0 95.5 -34t40.5 -93q0 -66 -38 -104t-98 -38q-78 0 -118.5 59.5t-40.5 168.5zM539 1010q0 268 254 401l57 -104q-86 -49 -128 -107.5t-42 -150.5q6 2 18 2q55 0 95.5 -34t40.5 -93 q0 -66 -38 -104t-98 -38q-78 0 -118.5 59.5t-40.5 168.5z" /> -<glyph unicode="”" horiz-adv-x="987" d="M137 905q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401zM561 905q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5 q0 -268 -256 -401z" /> -<glyph unicode="„" horiz-adv-x="987" d="M137 -215q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401zM561 -215q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5 q0 -268 -256 -401z" /> -<glyph unicode="•" horiz-adv-x="665" d="M82 539q0 57 19.5 106t53 84t80 55.5t97.5 20.5t97 -20.5t81 -55.5t54.5 -84t19.5 -106q0 -59 -19.5 -107.5t-54.5 -84.5t-81 -55.5t-97 -19.5t-97.5 19.5t-80 55.5t-53 84t-19.5 108z" /> -<glyph unicode="…" horiz-adv-x="1972" d="M174 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM856 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM1538 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45 q-66 0 -110 45t-44 115z" /> -<glyph unicode=" " horiz-adv-x="362" /> -<glyph unicode="‹" horiz-adv-x="577" d="M96 430v172l277 305l94 -76l-236 -315l236 -317l-94 -74z" /> -<glyph unicode="›" horiz-adv-x="577" d="M111 199l233 317l-233 315l92 76l278 -305v-172l-278 -305z" /> -<glyph unicode=" " horiz-adv-x="452" /> -<glyph unicode="€" d="M45 461v114l117 9q-2 16 -2 31.5v31.5v30.5t2 29.5h-117v114l129 8q20 119 66.5 211.5t114 156t153.5 97t188 33.5q92 0 176 -43t144 -117l-133 -129q-41 47 -87 76t-106 29q-111 0 -182.5 -82t-95.5 -230h479v-124h-492q-2 -12 -2 -24.5v-27.5v-35.5t2 -33.5h410v-125 h-395q29 -143 98.5 -222t173.5 -79q66 0 117 32.5t98 96.5l133 -123q-72 -92 -161 -141.5t-201 -49.5q-188 0 -322.5 125t-175.5 361h-129z" /> -<glyph unicode="™" horiz-adv-x="1351" d="M6 1239v145h543v-145h-193v-494h-159v494h-191zM641 745v639h190l87 -206l49 -150h8l49 150l84 206h190v-639h-155v238l18 225h-8l-127 -366h-113l-127 366h-8l19 -225v-238h-156z" /> -<glyph unicode="" horiz-adv-x="1003" d="M0 0v1004h1004v-1004h-1004z" /> -<glyph unicode="fi" horiz-adv-x="1222" d="M55 819v176l135 11v104q0 78 18.5 144.5t59.5 114.5t103.5 74.5t152.5 26.5q53 0 101.5 -10t83.5 -24l-45 -176q-55 25 -111 24q-127 0 -127 -170v-108h197v-187h-197v-819h-236v819h-135zM809 1315q0 59 41 97t104 38t104.5 -38t41.5 -97t-41.5 -96t-104.5 -37 t-104 36.5t-41 96.5zM836 0v1006h235v-1006h-235z" /> -<glyph unicode="fl" horiz-adv-x="1204" d="M55 819v176l135 11v104q0 78 18.5 144.5t59.5 114.5t103.5 74.5t152.5 26.5q53 0 101.5 -10t83.5 -24l-45 -176q-55 25 -111 24q-127 0 -127 -170v-108h197v-187h-197v-819h-236v819h-135zM799 258v1188h235v-1200q0 -43 16.5 -60.5t34.5 -17.5h15.5t21.5 4l31 -176 q-47 -20 -125 -21q-127 0 -178 76t-51 207z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf deleted file mode 100644 index 680103c671287a1a1feecc46cec6cc5295e7131c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54012 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 diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff deleted file mode 100644 index 56e335d010688e27340f16f8f78c343e848f6a0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27116 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 diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot deleted file mode 100644 index d0743324939c117b1e014f7e4be16affd4032b83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23844 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 YvT=+7_`Kx%fRUbSn2>(#AxsM7z#p-f0{{R3 diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg deleted file mode 100644 index fcd05c3683a..00000000000 --- a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg +++ /dev/null @@ -1,245 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="source_sans_probold" horiz-adv-x="1081" > -<font-face units-per-em="2048" ascent="1536" descent="-512" /> -<missing-glyph horiz-adv-x="425" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="682" /> -<glyph horiz-adv-x="0" /> -<glyph horiz-adv-x="0" /> -<glyph unicode="
" horiz-adv-x="425" /> -<glyph unicode=" " horiz-adv-x="425" /> -<glyph unicode="	" horiz-adv-x="425" /> -<glyph unicode=" " horiz-adv-x="425" /> -<glyph unicode="!" horiz-adv-x="696" d="M166 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM197 1372h303l-11 -272l-43 -627h-196l-43 627z" /> -<glyph unicode=""" horiz-adv-x="1097" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408zM639 1405h303l-10 -272l-60 -408h-164l-59 408z" /> -<glyph unicode="#" d="M70 383v192h174l28 226h-161v192h186l43 338h172l-41 -338h213l43 338h172l-41 -338h162v-192h-186l-27 -226h172v-192h-195l-47 -383h-174l45 383h-211l-47 -383h-174l45 383h-151zM420 575h211l28 226h-213z" /> -<glyph unicode="$" d="M80 135l131 203q78 -59 148.5 -89t144.5 -30q86 0 126 35t40 106q0 53 -40 90t-100.5 71t-130 68t-130 81t-100.5 110.5t-40 155.5q0 152 83 251t228 128v211h199v-207q98 -14 172 -59.5t133 -108.5l-151 -172q-55 51 -106.5 76.5t-117.5 25.5q-74 0 -112.5 -30.5 t-38.5 -100.5q0 -49 40 -82.5t100 -64.5t130 -63.5t130.5 -80t100 -114t39.5 -164.5q0 -147 -79.5 -252.5t-239.5 -140.5v-213h-199v205q-90 10 -189 50t-171 105z" /> -<glyph unicode="%" horiz-adv-x="1755" d="M53 938q0 100 24.5 178t68.5 132.5t105.5 83t133.5 28.5t133.5 -28.5t105.5 -83t69.5 -132t25.5 -178.5q0 -100 -25.5 -179t-69.5 -134t-105.5 -84t-133.5 -29t-133.5 29t-105.5 84t-68.5 134t-24.5 179zM262 938q0 -143 36 -200.5t87 -57.5t87 57.5t36 200.5t-36 198.5 t-87 55.5t-87 -55t-36 -199zM430 -25l721 1385h174l-721 -1385h-174zM1038 401q0 100 24.5 178t68.5 132.5t105.5 83t133.5 28.5t133.5 -28.5t105.5 -83t69.5 -132t25.5 -178.5q0 -100 -25.5 -179t-69.5 -134t-105.5 -84t-133.5 -29t-133.5 29t-105.5 84t-68.5 134 t-24.5 179zM1247 401q0 -143 36 -200.5t87 -57.5t87 57.5t36 200.5t-36 198.5t-87 55.5t-87 -55t-36 -199z" /> -<glyph unicode="&" horiz-adv-x="1366" d="M51 356q0 70 19.5 126.5t53.5 101.5t78 81.5t93 67.5q-39 72 -60.5 142.5t-21.5 134.5q0 72 25.5 135t72.5 111.5t114 76t150 27.5q152 0 240 -82t88 -221q0 -66 -23.5 -120t-63.5 -100t-90 -85t-101 -74q57 -66 125.5 -128.5t142.5 -115.5q51 66 90 145.5t64 174.5h274 q-37 -123 -91 -234.5t-132 -216.5q63 -33 121.5 -54.5t109.5 -29.5l-72 -244q-84 16 -170 51t-172 85q-86 -63 -189 -99.5t-230 -36.5q-109 0 -192 31t-139 83t-85 121t-29 146zM336 375q0 -76 54 -123t145 -47q82 0 170 53q-78 63 -149 133t-130 144q-41 -35 -65.5 -74 t-24.5 -86zM461 1012q0 -37 11 -78t32 -82q72 43 121 90t49 115q0 47 -22.5 75.5t-69.5 28.5q-51 0 -86 -39.5t-35 -109.5z" /> -<glyph unicode="'" horiz-adv-x="614" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408z" /> -<glyph unicode="(" horiz-adv-x="704" d="M147 569q0 270 71 497.5t200 438.5l188 -78q-113 -201 -164 -420t-51 -438t51.5 -438t163.5 -420l-188 -78q-129 211 -200 438.5t-71 497.5z" /> -<glyph unicode=")" horiz-adv-x="704" d="M98 -289q115 201 166 420t51 438t-51 438.5t-166 419.5l189 78q129 -211 199.5 -438t70.5 -498q0 -270 -70.5 -497.5t-199.5 -438.5z" /> -<glyph unicode="*" horiz-adv-x="935" d="M78 1118l47 148l237 -49l27 241h158l26 -244l236 52l49 -148l-221 -100l121 -213l-125 -90l-164 182l-166 -182l-125 90l121 213z" /> -<glyph unicode="+" d="M70 569v213h360v377h221v-377h361v-213h-361v-376h-221v376h-360z" /> -<glyph unicode="," horiz-adv-x="614" d="M94 -238q113 41 172.5 106.5t59.5 143.5h-17q-72 0 -127 44t-55 126q0 78 55.5 125t132.5 47q102 0 155.5 -74.5t53.5 -209.5q0 -170 -94 -292t-274 -175z" /> -<glyph unicode="-" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> -<glyph unicode="." horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> -<glyph unicode="/" horiz-adv-x="694" d="M27 -328l411 1782h197l-412 -1782h-196z" /> -<glyph unicode="0" d="M76 655q0 166 33.5 291t94 210t146.5 127t191 42q104 0 190 -42t146.5 -127t94.5 -210t34 -291t-34 -292.5t-94.5 -213t-146.5 -130.5t-190 -44t-190.5 44t-147 130.5t-94 213t-33.5 292.5zM360 655q0 -133 14.5 -219t39 -137t57.5 -70.5t70 -19.5q39 0 71.5 19.5 t57 70.5t38 137t13.5 219t-13.5 218t-38 133.5t-57 67t-71.5 18.5q-37 0 -70 -18.5t-57.5 -67t-39 -133.5t-14.5 -218z" /> -<glyph unicode="1" d="M143 0v244h283v751h-244v187q106 20 180 49t144 69h221v-1056h244v-244h-828z" /> -<glyph unicode="2" d="M61 1118q96 102 196.5 154.5t240.5 52.5q96 0 175 -29.5t136 -84t88 -130t31 -170.5q0 -82 -35 -167t-93.5 -170t-133 -170t-154.5 -166q49 6 109.5 11t107.5 5h262v-254h-915v172q125 117 228.5 218.5t178 190.5t116.5 165.5t42 146.5q0 96 -49 146.5t-135 50.5 q-72 0 -127.5 -40t-104.5 -94z" /> -<glyph unicode="3" d="M45 160l139 190q59 -57 130 -94t155 -37q96 0 153.5 40t57.5 114q0 43 -15.5 77.5t-54.5 58t-106.5 37t-173.5 13.5v213q88 0 146.5 12.5t94 36t51 55t15.5 70.5q0 68 -41 106t-119 38q-70 0 -126 -31t-118 -84l-151 184q90 78 189.5 122t220.5 44q100 0 183 -23.5 t141 -69.5t91 -111.5t33 -151.5q0 -102 -56.5 -173t-160.5 -116v-8q113 -33 185.5 -112t72.5 -206q0 -90 -39 -160.5t-104.5 -118.5t-153.5 -74t-186 -26q-160 0 -270.5 50.5t-182.5 134.5z" /> -<glyph unicode="4" d="M39 311v207l475 782h369v-759h149v-230h-149v-311h-281v311h-563zM328 541h274v211q0 63 4 146t8 144h-8q-25 -53 -51.5 -108t-54.5 -111z" /> -<glyph unicode="5" d="M47 158l135 190q59 -53 128 -91t153 -38q100 0 159.5 51.5t59.5 151.5q0 98 -56.5 149.5t-148.5 51.5q-29 0 -51.5 -3.5t-44 -11.5t-45 -20.5t-51.5 -30.5l-135 86l36 657h738v-253h-478l-22 -244q37 16 70.5 23.5t74.5 7.5q84 0 159 -25t132.5 -74t90 -124.5 t32.5 -180.5q0 -109 -39 -192.5t-104.5 -142t-152.5 -89.5t-181 -31q-160 0 -270.5 52.5t-188.5 130.5z" /> -<glyph unicode="6" d="M84 621q0 182 44 315t116.5 219t168 128t197.5 42q129 0 223.5 -46t155.5 -110l-158 -180q-35 37 -90 64.5t-112 27.5q-53 0 -100.5 -20.5t-83 -68.5t-58 -126t-27.5 -190q25 33 58 58.5t67.5 43t69.5 26.5t66 9q84 0 154.5 -24.5t122.5 -73.5t81 -125t29 -178t-35 -182 t-93.5 -137.5t-137 -87.5t-167.5 -30q-94 0 -183 37t-157.5 115t-109.5 200t-41 294zM367 471q10 -78 30.5 -129t47 -83t58 -45t66.5 -13q68 0 116 50t48 161q0 104 -48 146t-122 42q-49 0 -100 -28.5t-96 -100.5z" /> -<glyph unicode="7" d="M90 1047v253h905v-184q-113 -137 -181.5 -257t-106 -248t-54 -274.5t-24.5 -336.5h-303q8 162 29.5 298t61.5 260t102.5 243t154.5 246h-584z" /> -<glyph unicode="8" d="M86 332q0 119 64.5 194.5t156.5 124.5v8q-76 57 -125 130t-49 178q0 82 31 148.5t86 113.5t132 71.5t167 24.5q88 0 161.5 -25.5t125 -71.5t80 -112.5t28.5 -146.5q0 -94 -51 -167t-119 -118v-8q94 -51 159.5 -131t65.5 -209q0 -78 -32.5 -143.5t-93 -113.5t-145.5 -76 t-189 -28q-98 0 -181.5 26t-143.5 73t-94 112.5t-34 145.5zM344 367q0 -86 59.5 -134.5t141.5 -48.5q76 0 125 40t49 122q0 43 -19.5 74t-56.5 56.5t-87 48t-112 48.5q-43 -41 -71.5 -94t-28.5 -112zM397 967q0 -80 62 -125t162 -84q80 92 79 190q0 76 -42 122t-115 46 q-59 0 -102.5 -37t-43.5 -112z" /> -<glyph unicode="9" d="M70 889q0 100 34.5 181t93 138.5t137.5 87t167 29.5q94 0 183 -37t157.5 -114.5t110.5 -199.5t42 -294q0 -182 -44 -315.5t-116.5 -219.5t-168 -128t-197.5 -42q-129 0 -224 47.5t-157 108.5l160 180q33 -37 88 -64.5t113 -27.5q55 0 102 20.5t83 68.5t57.5 125t25.5 192 q-25 -33 -57.5 -58.5t-67.5 -43t-70 -27t-65 -9.5q-84 0 -155 25t-122 74t-80.5 124.5t-29.5 178.5zM344 889q0 -104 49 -146.5t123 -42.5q49 0 100.5 29t94.5 100q-20 154 -76.5 212.5t-126.5 58.5q-66 0 -115 -50.5t-49 -160.5z" /> -<glyph unicode=":" horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM125 828q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> -<glyph unicode=";" horiz-adv-x="614" d="M94 -238q113 41 172.5 106.5t59.5 143.5h-17q-72 0 -127 44t-55 126q0 78 55.5 125t132.5 47q102 0 155.5 -74.5t53.5 -209.5q0 -170 -94 -292t-274 -175zM125 828q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> -<glyph unicode="<" d="M70 575v209l942 363v-248l-361 -119l-276 -96v-8l276 -96l361 -119v-248z" /> -<glyph unicode="=" d="M70 333v213h942v-213h-942zM70 807v213h942v-213h-942z" /> -<glyph unicode=">" d="M70 213v248l360 119l277 96v8l-277 96l-360 119v248l942 -363v-209z" /> -<glyph unicode="?" horiz-adv-x="948" d="M84 1210q70 84 164 135.5t209 51.5q86 0 160.5 -20.5t129 -63.5t85 -109.5t30.5 -156.5q0 -63 -22.5 -113.5t-56 -93.5t-71.5 -83t-70 -83t-50.5 -91t-11.5 -110h-265q-10 70 5.5 127t44 106.5t64.5 90.5t68.5 78.5t54 73.5t21.5 75q0 63 -37.5 96t-99.5 33 q-57 0 -101 -26.5t-85 -67.5zM266 164q0 82 51.5 136t128.5 54q78 0 130.5 -54t52.5 -136q0 -80 -52.5 -134.5t-130.5 -54.5t-129 54.5t-51 134.5z" /> -<glyph unicode="@" horiz-adv-x="1849" d="M100 420q0 215 74 390t200 300t294 192.5t356 67.5q166 0 300 -53t228.5 -150.5t145.5 -231.5t51 -294q0 -141 -43 -246.5t-110.5 -176.5t-150.5 -105.5t-163 -34.5q-88 0 -153.5 41t-81.5 114h-5q-43 -59 -112.5 -97t-132.5 -38q-123 0 -197 83t-74 225q0 94 32 184 t87 160.5t131 113.5t164 43q51 0 90 -23.5t66 -78.5h4l28 86h187l-94 -451q-43 -176 94 -176q45 0 89 25.5t79 74t55.5 117t20.5 152.5q0 111 -31 211t-98.5 177t-174 122t-256.5 45q-131 0 -256 -54.5t-223 -153.5t-157.5 -239.5t-59.5 -312.5q0 -152 48 -264.5t131 -186 t190.5 -110.5t228.5 -37q80 0 163 22.5t148 57.5l66 -164q-94 -51 -192.5 -74.5t-208.5 -23.5q-154 0 -294.5 47t-248 143t-171 240.5t-63.5 341.5zM754 424q0 -137 106 -137q33 0 64.5 20.5t70.5 71.5l49 276q-31 59 -94 60q-47 0 -83 -29t-61.5 -72t-38.5 -94t-13 -96z " /> -<glyph unicode="A" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> -<glyph unicode="B" horiz-adv-x="1236" d="M156 0v1335h456q104 0 194.5 -15t157 -54t104.5 -102.5t38 -159.5q0 -45 -13.5 -90.5t-41 -84t-70.5 -69.5t-100 -45v-8q143 -27 216.5 -103t73.5 -211q0 -102 -39.5 -176t-110.5 -122t-166 -71.5t-204 -23.5h-495zM459 233h168q250 0 250 183q0 88 -62.5 128t-187.5 40 h-168v-351zM459 797h139q111 0 162 44t51 120t-52 108.5t-157 32.5h-143v-305z" /> -<glyph unicode="C" horiz-adv-x="1187" d="M92 659q0 166 51.5 296t138.5 220.5t202.5 137.5t244.5 47q125 0 226.5 -52.5t168.5 -121.5l-166 -187q-51 47 -102 74t-123 27q-70 0 -130 -30t-105 -85t-71 -135t-26 -180q0 -207 88.5 -320.5t235.5 -113.5q84 0 144.5 32.5t109.5 85.5l166 -182q-84 -98 -191.5 -147.5 t-232.5 -49.5q-129 0 -244 44t-201 130.5t-135 214t-49 295.5z" /> -<glyph unicode="D" horiz-adv-x="1298" d="M156 0v1335h376q154 0 278 -39t212 -119.5t135 -205.5t47 -297t-47 -299t-133 -210t-206 -124t-267 -41h-395zM459 244h57q84 0 153.5 22.5t120 72.5t78 132t27.5 203q0 119 -27.5 199.5t-78 129t-120 69t-153.5 20.5h-57v-848z" /> -<glyph unicode="E" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858z" /> -<glyph unicode="F" horiz-adv-x="1071" d="M156 0v1335h843v-254h-540v-309h461v-254h-461v-518h-303z" /> -<glyph unicode="G" horiz-adv-x="1302" d="M92 659q0 166 52.5 296t141.5 220.5t208.5 137.5t255.5 47q141 0 244.5 -53.5t170.5 -120.5l-166 -187q-51 47 -105 74t-140 27q-78 0 -142.5 -30t-110.5 -85t-73 -135t-27 -180q0 -207 93.5 -320.5t283.5 -113.5q41 0 79 10t63 30v230h-222v246h490v-615 q-37 -31 -85 -60.5t-105.5 -52t-123 -36t-135.5 -13.5q-135 0 -252.5 44t-205.5 130.5t-138.5 214t-50.5 295.5z" /> -<glyph unicode="H" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303z" /> -<glyph unicode="I" horiz-adv-x="614" d="M156 0v1335h303v-1335h-303z" /> -<glyph unicode="J" horiz-adv-x="1038" d="M31 217l205 152q39 -68 87 -100.5t99 -32.5q82 0 124 50t42 183v866h303v-891q0 -96 -25.5 -182t-78 -149.5t-133.5 -100.5t-191 -37q-154 0 -258.5 59.5t-173.5 182.5z" /> -<glyph unicode="K" horiz-adv-x="1255" d="M156 0v1335h303v-547h6l399 547h330l-403 -532l479 -803h-332l-324 563l-155 -205v-358h-303z" /> -<glyph unicode="L" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829z" /> -<glyph unicode="M" horiz-adv-x="1558" d="M156 0v1335h319l223 -600l80 -233h8l80 233l217 600h320v-1335h-283v489q0 49 4 108.5t10.5 120t12.5 119t12 107.5h-8l-109 -309l-206 -518h-121l-205 518l-107 309h-8q6 -49 12.5 -107.5t12.5 -119t10 -119.5t4 -109v-489h-278z" /> -<glyph unicode="N" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-10 106 -24.5 237t-14.5 250v471h287v-1335h-309l-348 666l-131 290h-8q10 -111 24 -237.5t14 -245.5v-473h-288z" /> -<glyph unicode="O" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5 t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> -<glyph unicode="P" horiz-adv-x="1239" d="M156 0v1335h487q109 0 204 -21.5t165.5 -71.5t111.5 -133t41 -204q0 -117 -42 -203t-113.5 -141t-165.5 -81.5t-201 -26.5h-184v-453h-303zM459 692h166q245 0 245 211q0 106 -62.5 149.5t-182.5 43.5h-166v-404z" /> -<glyph unicode="Q" horiz-adv-x="1398" d="M86 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t191.5 -134t123.5 -216t44 -290q0 -270 -114.5 -444.5t-309.5 -229.5q47 -70 127 -97.5t166 -27.5q43 0 81 7t67 18l53 -222q-37 -18 -97.5 -30.5t-137.5 -12.5q-213 0 -359.5 98.5t-218.5 256.5 q-106 23 -193.5 79t-148.5 144t-94 203.5t-33 257.5zM395 674q0 -203 80 -320.5t217 -117.5t217 117.5t80 320.5q0 201 -80 313.5t-217 112.5t-217 -112.5t-80 -313.5z" /> -<glyph unicode="R" horiz-adv-x="1259" d="M156 0v1335h481q106 0 199.5 -20.5t164 -68.5t111.5 -128t41 -198q0 -147 -65.5 -242.5t-172.5 -142.5l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q119 0 181.5 50t62.5 149q0 98 -62.5 137t-181.5 39h-153v-375z" /> -<glyph unicode="S" horiz-adv-x="1134" d="M70 168l174 207q72 -61 157.5 -100t169.5 -39q94 0 140.5 34.5t46.5 94.5q0 31 -13.5 53t-39 39.5t-61.5 33t-79 33.5l-172 74q-53 20 -101 53t-86 77t-60.5 102.5t-22.5 132.5q0 82 36 154.5t98 126.5t149.5 85t191.5 31q117 0 230.5 -45t199.5 -131l-151 -191 q-66 51 -132.5 79t-146.5 28q-78 0 -124 -32t-46 -89q0 -31 15.5 -52.5t43 -39t65.5 -32.5t81 -34l170 -69q123 -49 193.5 -135.5t70.5 -227.5q0 -84 -34 -158.5t-98.5 -131t-157.5 -90.5t-212 -34q-131 0 -261 48.5t-234 144.5z" /> -<glyph unicode="T" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369z" /> -<glyph unicode="U" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489z" /> -<glyph unicode="V" horiz-adv-x="1136" d="M-16 1335h319l162 -622q29 -111 52.5 -214.5t53.5 -213.5h9q31 111 54 214t52 214l158 622h309l-403 -1335h-363z" /> -<glyph unicode="W" horiz-adv-x="1662" d="M27 1335h309l92 -624q14 -104 27.5 -210t27.5 -212h9q18 106 37.5 211.5t39.5 210.5l144 624h256l145 -624q20 -102 40 -208t40 -214h8q12 109 25.5 213t27.5 209l93 624h288l-237 -1335h-379l-131 606q-16 78 -29.5 157t-23.5 152h-9q-12 -74 -24 -152.5t-29 -156.5 l-127 -606h-373z" /> -<glyph unicode="X" horiz-adv-x="1159" d="M23 0l368 686l-348 649h338l115 -252q23 -47 46 -99t52 -116h8q23 63 43.5 115.5t40.5 99.5l107 252h321l-346 -663l369 -672h-336l-131 272q-27 53 -50.5 105.5t-50.5 114.5h-8q-25 -61 -47 -113.5t-45 -106.5l-125 -272h-321z" /> -<glyph unicode="Y" horiz-adv-x="1073" d="M-16 1335h321l121 -307q27 -76 53.5 -146.5t55.5 -148.5h8q29 78 56.5 148.5t55.5 146.5l119 307h316l-404 -860v-475h-301v475z" /> -<glyph unicode="Z" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966z" /> -<glyph unicode="[" horiz-adv-x="704" d="M178 -311v1761h432v-160h-207v-1442h207v-159h-432z" /> -<glyph unicode="\" horiz-adv-x="694" d="M57 1454h197l414 -1782h-199z" /> -<glyph unicode="]" horiz-adv-x="704" d="M94 -152h209v1442h-209v160h432v-1761h-432v159z" /> -<glyph unicode="^" d="M102 561l318 811h242l317 -811h-248l-94 262l-92 277h-8l-93 -277l-94 -262h-248z" /> -<glyph unicode="_" horiz-adv-x="1024" d="M25 -117h974v-170h-974v170z" /> -<glyph unicode="`" horiz-adv-x="1136" d="M264 1483h291l182 -307h-219z" /> -<glyph unicode="a" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> -<glyph unicode="b" horiz-adv-x="1173" d="M133 0v1436h301v-353l-8 -155q59 53 128 82.5t140 29.5q92 0 166 -36.5t126 -103t80 -162t28 -212.5q0 -131 -36 -233.5t-96.5 -173t-137 -107.5t-158.5 -37q-68 0 -136.5 33t-128.5 98h-8l-24 -106h-236zM434 287q41 -37 82 -51.5t80 -14.5q78 0 133 70.5t55 228.5 q0 274 -176 275q-90 0 -174 -93v-415z" /> -<glyph unicode="c" horiz-adv-x="956" d="M74 508q0 127 43 226.5t115.5 167t169 103t200.5 35.5q94 0 170 -31.5t127 -84.5l-137 -187q-72 59 -141 60q-111 0 -174.5 -78t-63.5 -211t64.5 -211t162.5 -78q55 0 100.5 22.5t82.5 51.5l120 -191q-74 -66 -164 -96.5t-174 -30.5q-106 0 -197 36t-158.5 103.5 t-106.5 167t-39 226.5z" /> -<glyph unicode="d" horiz-adv-x="1173" d="M80 508q0 125 36 223t94 167t135 105.5t157 36.5q86 0 141 -28.5t109 -77.5l-13 156v346h301v-1436h-245l-21 100h-8q-53 -53 -125 -89t-145 -36q-94 0 -171 37t-131.5 105.5t-84 167t-29.5 223.5zM389 512q0 -152 48 -221.5t136 -69.5q49 0 89 20.5t77 71.5v416 q-41 37 -84 51.5t-84 14.5q-72 0 -127 -69t-55 -214z" /> -<glyph unicode="e" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151z" /> -<glyph unicode="f" horiz-adv-x="698" d="M49 780v224l135 10v55q0 80 19.5 151.5t64.5 125t117 84t174 30.5q63 0 115.5 -12t87.5 -25l-55 -221q-57 20 -105 21q-55 0 -86 -34t-31 -112v-61h183v-236h-183v-780h-301v780h-135z" /> -<glyph unicode="g" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-41 27 -67.5 67.5t-26.5 104.5q0 55 32.5 105.5t82.5 84.5v9q-53 37 -95.5 105.5t-42.5 158.5q0 92 35 160.5t93.5 114.5t134 68.5t157.5 22.5q90 0 158 -24h371v-219h-162q14 -23 23.5 -57.5t9.5 -75.5q0 -88 -31 -153t-85 -107t-127 -62 t-157 -20q-59 0 -123 20q-20 -16 -28.5 -32.5t-8.5 -43.5q0 -39 34 -57.5t120 -18.5h164q188 0 287.5 -60t99.5 -198q0 -80 -40 -146.5t-113.5 -114.5t-178 -75.5t-235.5 -27.5q-90 0 -167 15.5t-135.5 46t-91 79.5t-32.5 117zM317 -127q0 -57 61.5 -87t164.5 -30 q102 0 167.5 36t65.5 89q0 47 -40 63.5t-115 16.5h-105q-53 0 -86 3t-57 9q-56 -49 -56 -100zM379 674q0 -86 40 -128t99 -42t99 42t40 128q0 80 -39.5 122t-99.5 42q-59 0 -99 -41t-40 -123z" /> -<glyph unicode="h" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q57 51 133 95t180 44q166 0 241 -108.5t75 -300.5v-631h-301v592q0 111 -30 151.5t-95 40.5q-57 0 -98.5 -25.5t-90.5 -72.5v-686h-301z" /> -<glyph unicode="i" horiz-adv-x="565" d="M109 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-48 -114t-126 -44q-76 0 -125 44t-49 114zM133 0v1016h301v-1016h-301z" /> -<glyph unicode="j" horiz-adv-x="569" d="M-104 -373l53 221q20 -6 38.5 -10t41.5 -4q59 0 82.5 39t23.5 125v1018h301v-1010q0 -84 -17.5 -157.5t-59.5 -129t-111.5 -88t-173.5 -32.5q-63 0 -105.5 8t-72.5 20zM113 1323q0 70 49 113t125 43t125 -43t49 -113t-49 -114t-125 -44t-125 44t-49 114z" /> -<glyph unicode="k" horiz-adv-x="1122" d="M133 0v1436h293v-824h8l322 404h327l-356 -418l383 -598h-326l-229 395l-129 -145v-250h-293z" /> -<glyph unicode="l" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -47 17.5 -65.5t35.5 -18.5h17.5t19.5 4l37 -223q-25 -10 -62.5 -17.5t-88.5 -7.5q-78 0 -131.5 25t-85 69t-46 106.5t-14.5 139.5z" /> -<glyph unicode="m" horiz-adv-x="1755" d="M133 0v1016h246l20 -131h9q63 63 134.5 109t172.5 46q109 0 175 -44t105 -126q68 70 142.5 120t177.5 50q164 0 240.5 -109.5t76.5 -299.5v-631h-301v592q0 111 -29.5 151.5t-95.5 40.5q-76 0 -174 -98v-686h-301v592q0 111 -29.5 151.5t-95.5 40.5q-78 0 -172 -98v-686 h-301z" /> -<glyph unicode="n" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q66 61 143.5 107t181.5 46q166 0 241 -108.5t75 -300.5v-631h-301v592q0 111 -30 151.5t-95 40.5q-57 0 -98.5 -25.5t-90.5 -72.5v-686h-301z" /> -<glyph unicode="o" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211 t-140 78q-94 0 -140 -78t-46 -211z" /> -<glyph unicode="p" horiz-adv-x="1173" d="M133 -377v1393h246l20 -101h9q59 53 133.5 89t154.5 36q92 0 166 -36.5t125 -104.5t79 -163t28 -212q0 -131 -36 -232.5t-96.5 -172t-137 -107.5t-158.5 -37q-66 0 -127.5 28t-114.5 79l10 -162v-297h-301zM434 287q41 -37 82 -51.5t80 -14.5q78 0 133 70.5t55 228.5 q0 274 -176 275q-88 0 -174 -93v-415z" /> -<glyph unicode="q" horiz-adv-x="1171" d="M80 508q0 125 36 223t94 167t135 105.5t157 36.5q84 0 147.5 -29.5t122.5 -95.5h8l25 101h235v-1393h-301v309l13 156q-51 -49 -119 -81t-137 -32q-94 0 -171 37t-131.5 105.5t-84 167t-29.5 223.5zM389 512q0 -152 48 -221.5t136 -69.5q49 0 89 20.5t77 71.5v416 q-41 37 -84 51.5t-84 14.5q-72 0 -127 -69t-55 -214z" /> -<glyph unicode="r" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q55 104 132.5 153t155.5 49q43 0 71 -5t50 -15l-49 -260q-29 8 -53.5 12t-57.5 4q-57 0 -119.5 -41t-103.5 -145v-590h-301z" /> -<glyph unicode="s" horiz-adv-x="907" d="M43 117l135 188q70 -53 133.5 -79.5t128.5 -26.5q68 0 98.5 22.5t30.5 63.5q0 25 -17 44t-47 35.5t-67 30t-76 29.5q-47 18 -94 43t-86 60.5t-63.5 83.5t-24.5 112q0 70 28 129t79 100t122.5 64.5t159.5 23.5q117 0 205 -39.5t154 -89.5l-135 -180q-55 41 -108.5 63.5 t-106.5 22.5q-115 0 -115 -80q0 -25 16.5 -42t44 -31.5t63.5 -27.5t74 -28q49 -18 97.5 -41.5t88.5 -58.5t64.5 -85t24.5 -120t-26.5 -129t-80 -103t-131 -70t-180.5 -26q-100 0 -205.5 39t-183.5 103z" /> -<glyph unicode="t" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -86 36 -124t95 -38q25 0 50.5 6t45.5 14l48 -219q-41 -12 -96.5 -24.5t-129.5 -12.5q-94 0 -160.5 29t-108.5 80t-61.5 124t-19.5 161v411h-139z" /> -<glyph unicode="u" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301z" /> -<glyph unicode="v" horiz-adv-x="1071" d="M25 1016h303l131 -479q20 -76 39.5 -155t40.5 -159h8q18 80 37.5 159t40.5 155l133 479h289l-332 -1016h-348z" /> -<glyph unicode="w" horiz-adv-x="1589" d="M49 1016h299l98 -471q12 -76 22.5 -149.5t23.5 -151.5h8q14 78 27.5 153.5t31.5 147.5l113 471h260l115 -471q18 -76 32.5 -149.5t30.5 -151.5h8q14 78 23.5 151.5t23.5 149.5l97 471h278l-244 -1016h-352l-92 406q-16 72 -28.5 143.5t-26.5 152.5h-9q-14 -82 -25 -153.5 t-26 -142.5l-90 -406h-344z" /> -<glyph unicode="x" horiz-adv-x="1052" d="M29 0l311 528l-293 488h324l90 -164q20 -43 41.5 -87t44.5 -87h8q16 43 34.5 87t35.5 87l69 164h312l-295 -522l313 -494h-324l-98 168q-25 43 -48.5 88t-47.5 88h-8q-18 -43 -39 -87t-39 -89l-80 -168h-311z" /> -<glyph unicode="y" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -70 41 -141.5t39 -147.5h8q16 72 33.5 144.5t36.5 144.5l123 436h288l-352 -1026q-37 -96 -77 -169t-92 -121t-118.5 -72.5t-156.5 -24.5q-47 0 -80 5t-64 15l54 230q14 -4 32.5 -8.5t34.5 -4.5q76 0 117 37t61 96l15 54z" /> -<glyph unicode="z" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815z" /> -<glyph unicode="{" horiz-adv-x="704" d="M63 481v176q49 2 83 15.5t54.5 35t30 48t9.5 53.5q0 47 -3.5 88t-7.5 81t-7 84t-3 97q0 164 63.5 227.5t198.5 63.5h129v-160h-39q-63 0 -85.5 -29.5t-22.5 -113.5q0 -82 4 -162t4 -172q0 -117 -37 -169t-115 -71v-8q78 -18 115 -70.5t37 -168.5q0 -94 -4 -172t-4 -162 t22.5 -114t85.5 -30h39v-159h-129q-135 0 -198.5 62.5t-63.5 228.5q0 55 3 98t7 83t7.5 80t3.5 89q0 27 -9.5 53.5t-30 48t-54 34.5t-83.5 15z" /> -<glyph unicode="|" horiz-adv-x="548" d="M176 -512v2048h197v-2048h-197z" /> -<glyph unicode="}" horiz-adv-x="704" d="M94 -152h39q63 0 86 30t23 114t-4.5 161.5t-4.5 172.5q0 117 37 169t115 70v8q-78 18 -115 70.5t-37 169.5q0 92 4.5 172t4.5 162q0 84 -22.5 113.5t-86.5 29.5h-39v160h129q135 0 198.5 -63.5t63.5 -227.5q0 -53 -3 -97t-7 -84t-7 -81t-3 -88q0 -27 9 -53.5t29.5 -48 t54.5 -35t83 -15.5v-176q-49 -2 -83 -15t-54.5 -34.5t-29.5 -48.5t-9 -53q0 -49 3 -89t7 -80t7 -83t3 -98q0 -166 -63.5 -228.5t-198.5 -62.5h-129v159z" /> -<glyph unicode="~" d="M59 649q76 117 153 164t155 47q63 0 110 -24.5t87 -53t76 -53t79 -24.5t79 30.5t68 87.5l156 -121q-76 -117 -152.5 -163.5t-154.5 -46.5q-63 0 -110.5 24.5t-87.5 53t-75.5 53t-79.5 24.5q-41 0 -77.5 -30.5t-69.5 -88.5z" /> -<glyph unicode="¡" horiz-adv-x="696" d="M166 852q0 80 52 134t130 54t130 -54t52 -134q0 -82 -52 -136t-130 -54t-130 54t-52 136zM197 -356l10 272l43 627h196l43 -627l11 -272h-303z" /> -<glyph unicode="¢" d="M123 629q0 109 32.5 196.5t92 152t139.5 106.5t176 59v198h166v-190q80 -8 144.5 -38t109.5 -77l-137 -184q-61 49 -117 55v-557q43 8 80 27.5t68 44.5l120 -191q-59 -51 -128.5 -80.5t-139.5 -39.5v-195h-166v195q-100 12 -181 53t-138.5 107.5t-89 156.5t-31.5 201z M416 629q0 -92 38 -159t109 -97v512q-74 -33 -110.5 -98.5t-36.5 -157.5z" /> -<glyph unicode="£" d="M98 0v186q92 41 154.5 122t62.5 192q0 14 -1 27.5t-3 27.5h-205v176l140 10h12q-14 41 -23.5 82t-9.5 82q0 96 33 174t91.5 132.5t138 84t176.5 29.5q115 0 199.5 -43t154.5 -123l-164 -164q-35 43 -74 64.5t-88 21.5q-82 0 -130 -47t-48 -145q0 -37 6 -74t17 -74h303 v-186h-265q2 -14 3.5 -28.5t1.5 -28.5q0 -74 -21.5 -127.5t-71.5 -108.5v-8h531v-254h-920z" /> -<glyph unicode="¤" d="M41 322l125 127q-70 94 -70 227q0 66 17.5 122t50.5 101l-123 127l149 152l142 -144q98 51 209 51q106 0 209 -51l141 144l149 -152l-125 -127q70 -92 70 -223q0 -68 -18.5 -124t-51.5 -103l125 -127l-149 -152l-143 145q-47 -25 -100.5 -37t-106.5 -12q-113 0 -207 49 l-144 -145zM365 676q0 -92 51 -146.5t125 -54.5t125 54.5t51 146.5t-51.5 146.5t-124.5 54.5q-74 0 -125 -54.5t-51 -146.5z" /> -<glyph unicode="¥" d="M25 1300h309l104 -272q25 -68 49.5 -135.5t53.5 -132.5h8q27 68 51.5 135.5t50.5 132.5l103 272h303l-301 -600h250v-143h-316v-113h316v-143h-316v-301h-301v301h-313v143h313v113h-313v143h250z" /> -<glyph unicode="¦" horiz-adv-x="548" d="M176 418h197v-930h-197v930zM176 639v897h197v-897h-197z" /> -<glyph unicode="§" d="M76 668q0 78 44 146.5t120 115.5q-29 33 -44.5 75t-15.5 95q0 139 95.5 226t269.5 87q119 0 212 -42t156 -91l-137 -188q-47 41 -104.5 69.5t-110.5 28.5q-111 0 -110 -80q0 -37 40.5 -64.5t102 -55t134.5 -60.5t134.5 -79t102.5 -111.5t41 -157.5q0 -90 -44 -157 t-124 -116q23 -33 35 -71.5t12 -85.5q0 -70 -25.5 -129.5t-75 -102.5t-123 -67.5t-169.5 -24.5q-113 0 -220.5 42t-177.5 130l174 154q100 -104 224 -105q63 0 92.5 24.5t29.5 63.5t-39.5 67.5t-99 55.5t-130.5 57.5t-130 76.5t-99 111.5t-40 162.5zM330 690q0 -49 32.5 -83 t84 -61.5t114 -53t121.5 -56.5q70 43 70 121q0 49 -33 83t-83 61.5t-112.5 52t-122.5 55.5q-71 -47 -71 -119z" /> -<glyph unicode="¨" horiz-adv-x="1136" d="M223 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM628 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> -<glyph unicode="©" horiz-adv-x="1536" d="M92 666q0 160 54.5 284.5t147.5 211.5t216 133t258 46t258 -46t215 -133t146.5 -213t54.5 -283q0 -160 -54.5 -286t-146.5 -215t-215 -136t-258 -47t-258 47t-216 136t-147.5 215t-54.5 286zM231 666q0 -127 42 -229.5t114 -176.5t170 -114t211 -40t211 40t170 114 t114 176.5t42 229.5q0 125 -42 227t-114 175t-170 112t-211 39t-211 -39t-170 -112t-114 -175t-42 -227zM397 664q0 90 33 162.5t87 123.5t126 79t150 28q94 0 157.5 -36t112.5 -85l-113 -125q-33 35 -65.5 52.5t-73.5 17.5q-98 0 -148.5 -62.5t-50.5 -154.5 q0 -104 51.5 -166t137.5 -62q51 0 88 19.5t76 50.5l98 -139q-59 -47 -125 -77t-145 -30q-86 0 -159 28.5t-125 81t-82 127.5t-30 167z" /> -<glyph unicode="ª" horiz-adv-x="735" d="M59 721q0 109 90.5 167t292.5 79q-4 43 -27.5 65.5t-72.5 22.5q-41 0 -88 -16.5t-96 -45.5l-76 142q68 39 142.5 63.5t154.5 24.5q131 0 203.5 -75t72.5 -228v-388h-170l-20 68h-8q-37 -37 -84.5 -60.5t-106.5 -23.5q-96 0 -151.5 59.5t-55.5 145.5zM262 737 q0 -59 76 -59q31 0 54.5 13.5t49.5 37.5v115q-102 -12 -141 -41t-39 -66z" /> -<glyph unicode="«" horiz-adv-x="983" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90zM485 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90z" /> -<glyph unicode="¬" d="M70 569v213h942v-589h-221v376h-721z" /> -<glyph unicode="­" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> -<glyph unicode="®" horiz-adv-x="946" d="M66 1051q0 90 31.5 165.5t87 131t130 86t158.5 30.5t158 -30.5t129 -86t87 -131t32 -165.5t-32 -166t-87 -131.5t-129 -86t-158 -30.5t-158.5 30.5t-130 86t-87 131.5t-31.5 166zM178 1051q0 -72 21.5 -129.5t61.5 -98.5t93 -63.5t119 -22.5q129 0 211 85t82 229 q0 143 -82 228t-211 85q-66 0 -119 -22.5t-93 -63.5t-61.5 -98.5t-21.5 -128.5zM307 852v403h182q72 0 119 -32.5t47 -102.5q0 -76 -71 -110l84 -158h-123l-62 123h-59v-123h-117zM424 1057h43q31 0 46 17.5t15 39.5q0 23 -15 38t-46 15h-43v-110z" /> -<glyph unicode="¯" horiz-adv-x="1136" d="M286 1212v191h566v-191h-566z" /> -<glyph unicode="°" horiz-adv-x="747" d="M80 1110q0 63 22.5 117.5t62.5 94.5t94 61.5t116 21.5q61 0 115.5 -21.5t94.5 -61.5t63.5 -94t23.5 -118q0 -66 -23.5 -119t-63.5 -93t-94.5 -61.5t-115.5 -21.5t-115.5 21.5t-94.5 61.5t-62.5 93t-22.5 119zM238 1110q0 -68 39 -110t98 -42q61 0 99 42t38 110 q0 66 -38 108t-99 42q-59 0 -98 -42t-39 -108z" /> -<glyph unicode="±" d="M70 0v213h942v-213h-942zM70 602v213h360v344h221v-344h361v-213h-361v-278h-221v278h-360z" /> -<glyph unicode="²" horiz-adv-x="770" d="M55 1560q123 164 305 164q133 0 214 -70.5t81 -199.5q0 -49 -17 -95t-47 -91t-68 -90.5t-81 -92.5h242v-184h-592v119q154 127 252 224t98 173q0 59 -30.5 92t-85.5 33q-41 0 -76 -25.5t-70 -70.5z" /> -<glyph unicode="³" horiz-adv-x="770" d="M55 1038l133 105q72 -98 170 -99q47 0 81 25t34 72q0 104 -190 104v127q74 0 117.5 23.5t43.5 74.5q0 41 -26.5 63.5t-73.5 22.5q-39 0 -70.5 -22.5t-60.5 -57.5l-125 111q66 72 133.5 104.5t161.5 32.5q55 0 105.5 -15t89 -44t61.5 -71t23 -93q0 -63 -31 -107t-86 -77 q61 -25 103 -73t42 -120q0 -55 -25.5 -101t-67.5 -78t-98.5 -50.5t-117.5 -18.5q-104 0 -188 42t-138 120z" /> -<glyph unicode="´" horiz-adv-x="1136" d="M401 1176l182 307h291l-254 -307h-219z" /> -<glyph unicode="µ" horiz-adv-x="1173" d="M133 -410v1426h301v-592q0 -111 30 -152t95 -41q57 0 97 27t85 86v672h301v-1016h-245l-23 141h-8q-39 -74 -97.5 -111.5t-125.5 -37.5q-37 0 -69 8t-58 37l18 -184v-263h-301z" /> -<glyph unicode="¶" horiz-adv-x="1302" d="M80 879q0 129 41 216t111.5 141t166 76.5t201.5 22.5h90v-932h-82q-109 0 -205 30t-167.5 90.5t-113.5 149.5t-42 206zM805 -164v1499h301v-1499h-301z" /> -<glyph unicode="·" horiz-adv-x="614" d="M125 656q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> -<glyph unicode="¸" horiz-adv-x="1136" d="M360 -332q74 8 122 28.5t48 61.5q0 27 -25.5 48.5t-95.5 37.5l82 164h176l-41 -96q53 -16 86 -52t33 -100q0 -53 -29.5 -91t-79 -64.5t-115 -40t-138.5 -17.5z" /> -<glyph unicode="¹" horiz-adv-x="770" d="M156 1476v136q41 6 72.5 14t58 18.5t50 23.5t48.5 32h176v-799h-223v575h-182z" /> -<glyph unicode="º" horiz-adv-x="763" d="M49 868q0 84 27.5 149.5t74 112t105.5 70t125 23.5t125 -23.5t105 -70t74 -112t28 -149.5t-28 -148.5t-74 -110.5t-105 -69.5t-125 -23.5t-125 23.5t-105.5 69.5t-74 110.5t-27.5 148.5zM266 868q0 -84 28 -134t87 -50t88 50t29 134q0 86 -29 136.5t-88 50.5t-87 -50.5 t-28 -136.5z" /> -<glyph unicode="»" horiz-adv-x="983" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295zM496 205l227 311l-227 311l112 91l275 -295v-213l-275 -295z" /> -<glyph unicode="¼" horiz-adv-x="1656" d="M97 1112v136q41 6 72.5 14t58 18.5t50 23.5t48.5 32h176v-799h-223v575h-182zM379 -25l721 1385h174l-721 -1385h-174zM959 178v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM1161 322h164v84l13 239h-9l-82 -158z" /> -<glyph unicode="½" horiz-adv-x="1732" d="M97 1112v136q41 6 72.5 14t58 18.5t50 23.5t48.5 32h176v-799h-223v575h-182zM348 -25l721 1385h174l-721 -1385h-174zM1016 659q123 164 305 164q133 0 214 -70.5t81 -199.5q0 -49 -17 -95t-47 -91t-68 -90.5t-81 -92.5h242v-184h-592v119q154 127 252 224t98 173 q0 59 -30.5 92t-85.5 33q-41 0 -76 -25.5t-70 -70.5z" /> -<glyph unicode="¾" horiz-adv-x="1675" d="M51 674l133 105q72 -98 170 -99q47 0 81 25t34 72q0 104 -190 104v127q74 0 117.5 23.5t43.5 74.5q0 41 -26.5 63.5t-73.5 22.5q-39 0 -70.5 -22.5t-60.5 -57.5l-125 111q66 72 133.5 104.5t161.5 32.5q55 0 105.5 -15t89 -44t61.5 -71t23 -93q0 -63 -31 -107t-86 -77 q61 -25 103 -73t42 -120q0 -55 -25.5 -101t-67.5 -78t-98.5 -50.5t-117.5 -18.5q-104 0 -188 42t-138 120zM424 -25l721 1385h174l-721 -1385h-174zM975 178v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM1177 322h164v84l13 239h-9l-82 -158z" /> -<glyph unicode="¿" horiz-adv-x="948" d="M86 -29q0 63 22.5 113.5t56.5 93.5t71.5 83t69.5 82t51.5 90t13.5 110h262q10 -70 -5.5 -127.5t-44 -106.5t-64.5 -90t-68.5 -79t-54 -73.5t-21.5 -74.5q0 -63 39 -96t98 -33q57 0 101 26.5t85 67.5l166 -152q-70 -84 -164 -135t-208 -51q-86 0 -161 20.5t-129.5 63.5 t-85 109.5t-30.5 158.5zM319 852q0 80 52.5 134t130.5 54t130 -54t52 -134q0 -82 -52 -136t-130 -54t-130.5 54t-52.5 136z" /> -<glyph unicode="À" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM246 1683h320l166 -245h-240zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> -<glyph unicode="Á" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM424 1438l166 245h320l-246 -245h-240zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> -<glyph unicode="Â" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM234 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> -<glyph unicode="Ã" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM230 1440q16 141 77.5 209.5t141.5 68.5q41 0 76 -14t64.5 -31.5t55 -32t50.5 -14.5q27 0 47 20.5t31 71.5h153q-16 -141 -77.5 -209.5t-141.5 -68.5q-41 0 -76 14t-64.5 31.5t-55 32t-50.5 14.5 q-27 0 -47 -20.5t-31 -71.5h-153zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> -<glyph unicode="Ä" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM232 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212zM637 1577 q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> -<glyph unicode="Å" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM347 1628q0 92 63.5 146.5t167.5 54.5t167.5 -54.5t63.5 -146.5t-63.5 -146.5t-167.5 -54.5t-167.5 54.5t-63.5 146.5zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218 t-55 -212zM494 1628q0 -41 24.5 -64.5t59.5 -23.5t58.5 23.5t23.5 64.5t-23.5 64.5t-58.5 23.5t-59.5 -23.5t-24.5 -64.5z" /> -<glyph unicode="Æ" horiz-adv-x="1728" d="M-29 0l633 1335h998v-254h-510v-268h430v-252h-430v-307h530v-254h-834v305h-362l-139 -305h-316zM532 539h256v569h-8q-41 -98 -81 -194.5t-81 -184.5z" /> -<glyph unicode="Ç" horiz-adv-x="1187" d="M92 659q0 166 51.5 296t138.5 220.5t202.5 137.5t244.5 47q125 0 226.5 -52.5t168.5 -121.5l-166 -187q-51 47 -102 74t-123 27q-70 0 -130 -30t-105 -85t-71 -135t-26 -180q0 -207 88.5 -320.5t235.5 -113.5q84 0 144.5 32.5t109.5 85.5l166 -182q-84 -98 -191.5 -147.5 t-232.5 -49.5q-129 0 -244 44t-201 130.5t-135 214t-49 295.5zM504 -332q74 8 122 28.5t48 61.5q0 27 -25.5 48.5t-95.5 37.5l82 164h176l-41 -96q53 -16 86 -52t33 -100q0 -53 -29.5 -91t-79 -64.5t-115 -40t-138.5 -17.5z" /> -<glyph unicode="È" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM256 1683h320l166 -245h-240z" /> -<glyph unicode="É" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM434 1438l166 245h320l-246 -245h-240z" /> -<glyph unicode="Ê" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM244 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231z" /> -<glyph unicode="Ë" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM242 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM647 1577q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> -<glyph unicode="Ì" horiz-adv-x="614" d="M-25 1683h320l166 -245h-240zM156 0v1335h303v-1335h-303z" /> -<glyph unicode="Í" horiz-adv-x="614" d="M153 1438l166 245h320l-246 -245h-240zM156 0v1335h303v-1335h-303z" /> -<glyph unicode="Î" horiz-adv-x="614" d="M-37 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231zM156 0v1335h303v-1335h-303z" /> -<glyph unicode="Ï" horiz-adv-x="614" d="M-39 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM156 0v1335h303v-1335h-303zM366 1577q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> -<glyph unicode="Ð" horiz-adv-x="1347" d="M53 616v136l152 10v573h379q154 0 276.5 -39t210.5 -119.5t135 -205.5t47 -297t-47 -299t-133 -210t-205.5 -124t-267.5 -41h-395v616h-152zM508 244h57q84 0 153.5 22.5t120 72.5t78 132t27.5 203q0 119 -27.5 199.5t-78 129t-120 69t-153.5 20.5h-57v-330h258v-146 h-258v-372z" /> -<glyph unicode="Ñ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-10 106 -24.5 237t-14.5 250v471h287v-1335h-309l-348 666l-131 290h-8q10 -111 24 -237.5t14 -245.5v-473h-288zM334 1440q16 141 77.5 209.5t141.5 68.5q41 0 76 -14t64.5 -31.5t55 -32t50.5 -14.5q27 0 47 20.5t31 71.5h153 q-16 -141 -77.5 -209.5t-141.5 -68.5q-41 0 -76 14t-64.5 31.5t-55 32t-50.5 14.5q-27 0 -47 -20.5t-31 -71.5h-153z" /> -<glyph unicode="Ò" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM366 1683h320l166 -245h-240zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88 t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> -<glyph unicode="Ó" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5 t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313zM544 1438l166 245h320l-246 -245h-240z" /> -<glyph unicode="Ô" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM354 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231zM401 674 q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> -<glyph unicode="Õ" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM350 1440q16 141 77.5 209.5t141.5 68.5q41 0 76 -14t64.5 -31.5t55 -32 t50.5 -14.5q27 0 47 20.5t31 71.5h153q-16 -141 -77.5 -209.5t-141.5 -68.5q-41 0 -76 14t-64.5 31.5t-55 32t-50.5 14.5q-27 0 -47 -20.5t-31 -71.5h-153zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5 t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> -<glyph unicode="Ö" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM352 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41 t-40 102zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313zM757 1577q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> -<glyph unicode="×" d="M98 381l291 293l-291 295l150 151l293 -295l293 295l149 -151l-291 -295l291 -293l-149 -152l-293 295l-293 -295z" /> -<glyph unicode="Ø" horiz-adv-x="1398" d="M80 35l141 176q-61 88 -95 203.5t-34 259.5q0 164 44 292t124 215t191.5 133t246.5 46q211 0 361 -109l135 168l156 -121l-156 -194q111 -170 111 -430q0 -164 -44 -293t-124 -219t-191.5 -138.5t-247.5 -48.5q-193 0 -336 97l-124 -156zM401 674q0 -59 7.5 -109.5 t19.5 -95.5l451 559q-72 72 -181 72q-135 0 -216 -113t-81 -313zM539 291q72 -55 159 -55q137 0 217 117.5t80 320.5q0 86 -16 164z" /> -<glyph unicode="Ù" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM346 1683h320l166 -245h-240z" /> -<glyph unicode="Ú" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM524 1438l166 245h320l-246 -245h-240z" /> -<glyph unicode="Û" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM334 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231z" /> -<glyph unicode="Ü" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM332 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM737 1577q0 61 40 102t104 41 q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> -<glyph unicode="Ý" horiz-adv-x="1073" d="M-16 1335h321l121 -307q27 -76 53.5 -146.5t55.5 -148.5h8q29 78 56.5 148.5t55.5 146.5l119 307h316l-404 -860v-475h-301v475zM383 1438l166 245h320l-246 -245h-240z" /> -<glyph unicode="Þ" horiz-adv-x="1269" d="M164 0v1335h301v-202h184q109 0 205 -21.5t167 -72t112 -132.5t41 -202q0 -119 -42 -204t-114 -140.5t-167 -82t-202 -26.5h-184v-252h-301zM465 492h168q244 0 244 213q0 104 -62.5 146t-181.5 42h-168v-401z" /> -<glyph unicode="ß" horiz-adv-x="1294" d="M133 0v997q0 98 30 182.5t89 145.5t151.5 96t214.5 35q104 0 183.5 -28.5t131.5 -76.5t78.5 -109.5t26.5 -127.5q0 -74 -24.5 -124t-55 -90t-55 -73.5t-24.5 -72.5q0 -35 26.5 -58.5t66.5 -46t87 -49.5t87 -64.5t66.5 -92t26.5 -132.5q0 -70 -23.5 -131t-71.5 -106 t-119 -72t-163 -27t-163.5 25t-145.5 68l104 204q100 -74 195 -73q53 0 83 27.5t30 70.5q0 39 -27 66.5t-67 51t-87 49t-87 59.5t-66.5 80t-26.5 114q0 59 22.5 102t50.5 82t50.5 81t22.5 97q0 59 -34 99.5t-98 40.5q-94 0 -141 -69t-47 -187v-963h-297z" /> -<glyph unicode="à" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M270 1483h291l182 -307h-219zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> -<glyph unicode="á" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102zM407 1176l182 307h291l-254 -307h-219z" /> -<glyph unicode="â" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M260 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> -<glyph unicode="ã" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M235 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5t54 -30.5t48.5 -14.5q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154zM383 305q0 -49 31.5 -72.5t85.5 -23.5 q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> -<glyph unicode="ä" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M229 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102zM634 1313q0 59 40 100t104 41q63 0 103 -41t40 -100 q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> -<glyph unicode="å" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M344 1331q0 96 63.5 152.5t167.5 56.5t167.5 -56.5t63.5 -152.5t-63.5 -152.5t-167.5 -56.5t-167.5 56.5t-63.5 152.5zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102zM491 1331q0 -43 24.5 -69.5t59.5 -26.5t59.5 26.5 t24.5 69.5t-24.5 69.5t-59.5 26.5t-59.5 -26.5t-24.5 -69.5z" /> -<glyph unicode="æ" horiz-adv-x="1609" d="M96 281q0 162 133 253t433 121q-4 66 -38 106t-120 40q-61 0 -127 -24.5t-139 -67.5l-107 198q98 59 201.5 96t214.5 37q94 0 165.5 -41t116.5 -112q66 74 137.5 113.5t163.5 39.5q100 0 176 -37.5t126.5 -104.5t76 -157t25.5 -194q0 -41 -4 -75t-8 -52h-586 q16 -106 83.5 -157.5t160.5 -51.5q57 0 108 20.5t107 53.5l102 -195q-78 -53 -173 -84t-185 -31q-115 0 -200 43t-151 115q-109 -86 -198.5 -122t-192.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 119.5zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 101 22.5t89 63.5 q-23 63 -28 135l-3 43q-150 -23 -213 -66t-63 -102zM936 604h342q0 92 -37 149.5t-121 57.5q-72 0 -122 -50t-62 -157z" /> -<glyph unicode="ç" horiz-adv-x="956" d="M74 508q0 127 43 226.5t115.5 167t169 103t200.5 35.5q94 0 170 -31.5t127 -84.5l-137 -187q-72 59 -141 60q-111 0 -174.5 -78t-63.5 -211t64.5 -211t162.5 -78q55 0 100.5 22.5t82.5 51.5l120 -191q-74 -66 -164 -96.5t-174 -30.5q-106 0 -197 36t-158.5 103.5 t-106.5 167t-39 226.5zM367 -332q74 8 122 28.5t48 61.5q0 27 -25.5 48.5t-95.5 37.5l82 164h176l-41 -96q53 -16 86 -52t33 -100q0 -53 -29.5 -91t-79 -64.5t-115 -40t-138.5 -17.5z" /> -<glyph unicode="è" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M248 1483h291l182 -307h-219zM362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151z" /> -<glyph unicode="é" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151zM385 1176l182 307h291l-254 -307h-219z" /> -<glyph unicode="ê" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M238 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202zM362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151z" /> -<glyph unicode="ë" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M207 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151zM612 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41 t-40.5 103z" /> -<glyph unicode="ì" horiz-adv-x="565" d="M-22 1483h291l182 -307h-219zM133 0v1016h301v-1016h-301z" /> -<glyph unicode="í" horiz-adv-x="565" d="M115 1176l182 307h291l-254 -307h-219zM133 0v1016h301v-1016h-301z" /> -<glyph unicode="î" horiz-adv-x="565" d="M-32 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202zM133 0v1016h301v-1016h-301z" /> -<glyph unicode="ï" horiz-adv-x="565" d="M-63 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM133 0v1016h301v-1016h-301zM342 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> -<glyph unicode="ð" horiz-adv-x="1146" d="M86 467q0 111 35 197t93 145t133 91t155 32q59 0 116.5 -19.5t100.5 -66.5q-53 158 -174 272l-291 -145l-78 133l238 119q-41 29 -87 55.5t-98 52.5l131 183q72 -37 143.5 -80t139.5 -95l293 148l78 -133l-246 -125q121 -123 198.5 -290t77.5 -396q0 -123 -33.5 -227.5 t-96 -180.5t-152.5 -119t-203 -43q-96 0 -181 35t-150.5 98.5t-103.5 154.5t-38 204zM360 467q0 -121 62.5 -184.5t146.5 -63.5q86 0 140.5 75t54.5 234v47.5t-2 45.5q-47 51 -96.5 69.5t-102.5 18.5q-90 0 -146.5 -59.5t-56.5 -182.5z" /> -<glyph unicode="ñ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q66 61 143.5 107t181.5 46q166 0 241 -108.5t75 -300.5v-631h-301v592q0 111 -30 151.5t-95 40.5q-57 0 -98.5 -25.5t-90.5 -72.5v-686h-301zM291 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5t54 -30.5t48.5 -14.5 q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154z" /> -<glyph unicode="ò" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM262 1483h291l182 -307h-219zM383 508q0 -133 46 -211t140 -78 q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211z" /> -<glyph unicode="ó" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211 t-140 78q-94 0 -140 -78t-46 -211zM399 1176l182 307h291l-254 -307h-219z" /> -<glyph unicode="ô" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM252 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z M383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211z" /> -<glyph unicode="õ" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM227 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5 t54 -30.5t48.5 -14.5q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211z" /> -<glyph unicode="ö" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM221 1313q0 59 40 100t103 41t103.5 -41t40.5 -100 q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211zM626 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> -<glyph unicode="÷" d="M70 569v213h942v-213h-942zM375 307q0 70 47 114t119 44t119 -44t47 -114t-47.5 -113.5t-118.5 -43.5q-72 0 -119 43.5t-47 113.5zM375 1044q0 70 47 114t119 44t119 -44t47 -114t-47 -113.5t-119 -43.5t-119 44t-47 113z" /> -<glyph unicode="ø" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5q72 0 141.5 -20.5t129.5 -58.5l90 110l112 -88l-96 -119q53 -68 85 -157t32 -199q0 -127 -41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-152 0 -274 82l-88 -108l-113 86l96 119q-53 66 -84.5 154.5t-31.5 199.5z M365 524q0 -82 14 -137l305 381q-45 39 -115 39q-94 0 -149 -77t-55 -206zM451 250q47 -41 118 -41q92 0 147.5 76.5t55.5 206.5q0 84 -14 139z" /> -<glyph unicode="ù" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM279 1483h291l182 -307h-219z" /> -<glyph unicode="ú" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM416 1176l182 307h291l-254 -307h-219z" /> -<glyph unicode="û" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM269 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z" /> -<glyph unicode="ü" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM238 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103z M643 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> -<glyph unicode="ý" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -70 41 -141.5t39 -147.5h8q16 72 33.5 144.5t36.5 144.5l123 436h288l-352 -1026q-37 -96 -77 -169t-92 -121t-118.5 -72.5t-156.5 -24.5q-47 0 -80 5t-64 15l54 230q14 -4 32.5 -8.5t34.5 -4.5q76 0 117 37t61 96l15 54zM377 1176l182 307h291 l-254 -307h-219z" /> -<glyph unicode="þ" horiz-adv-x="1173" d="M133 -377v1813h301v-353l-8 -143q53 47 118.5 73.5t135.5 26.5q96 0 173 -36.5t130 -104.5t82 -163t29 -212q0 -131 -36 -232.5t-96.5 -172t-137 -107.5t-158.5 -37q-74 0 -130.5 25t-109.5 72l8 -152v-297h-301zM434 287q41 -37 82 -51.5t80 -14.5q78 0 133 70.5 t55 228.5q0 274 -176 275q-88 0 -174 -93v-415z" /> -<glyph unicode="ÿ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -70 41 -141.5t39 -147.5h8q16 72 33.5 144.5t36.5 144.5l123 436h288l-352 -1026q-37 -96 -77 -169t-92 -121t-118.5 -72.5t-156.5 -24.5q-47 0 -80 5t-64 15l54 230q14 -4 32.5 -8.5t34.5 -4.5q76 0 117 37t61 96l15 54zM199 1313q0 59 40 100 t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM604 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> -<glyph unicode="Œ" horiz-adv-x="1779" d="M92 674q0 172 51.5 297t143.5 205.5t218 119.5t273 39h877v-254h-508v-268h428v-252h-428v-307h528v-254h-913q-141 0 -264 41t-213 124t-141.5 210t-51.5 299zM401 674q0 -121 29 -204t81 -133t125 -71.5t161 -21.5h49v848h-49q-88 0 -161 -20.5t-125 -69t-81 -128 t-29 -200.5z" /> -<glyph unicode="œ" horiz-adv-x="1683" d="M74 508q0 127 39 226.5t104.5 167t152.5 103t183 35.5q109 0 189.5 -47t140.5 -131q61 86 145 132t176 46q100 0 176 -37.5t127.5 -104.5t77 -157t25.5 -194q0 -41 -4 -75t-9 -52h-587q16 -106 83.5 -157.5t159.5 -51.5q57 0 108.5 20.5t106.5 53.5l105 -195 q-78 -53 -174 -84t-187 -31q-92 0 -178 46.5t-149 132.5q-63 -88 -144.5 -133.5t-193.5 -45.5q-98 0 -184.5 36t-151 103.5t-101 167t-36.5 226.5zM379 508q0 -133 45 -211t129 -78t131 78t47 211t-47 211t-131 78t-129 -78t-45 -211zM1010 604h342q0 92 -37 149.5 t-121 57.5q-72 0 -122 -50t-62 -157z" /> -<glyph unicode="Ÿ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q27 -76 53.5 -146.5t55.5 -148.5h8q29 78 56.5 148.5t55.5 146.5l119 307h316l-404 -860v-475h-301v475zM191 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM596 1577q0 61 40 102t104 41q63 0 103 -41 t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> -<glyph unicode="ˆ" horiz-adv-x="1136" d="M254 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z" /> -<glyph unicode="˜" horiz-adv-x="1136" d="M229 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5t54 -30.5t48.5 -14.5q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154z" /> -<glyph unicode=" " horiz-adv-x="914" /> -<glyph unicode=" " horiz-adv-x="1829" /> -<glyph unicode=" " horiz-adv-x="914" /> -<glyph unicode=" " horiz-adv-x="1829" /> -<glyph unicode=" " horiz-adv-x="609" /> -<glyph unicode=" " horiz-adv-x="457" /> -<glyph unicode=" " horiz-adv-x="304" /> -<glyph unicode=" " horiz-adv-x="304" /> -<glyph unicode=" " horiz-adv-x="228" /> -<glyph unicode=" " horiz-adv-x="365" /> -<glyph unicode=" " horiz-adv-x="101" /> -<glyph unicode="‐" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> -<glyph unicode="‑" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> -<glyph unicode="‒" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> -<glyph unicode="–" horiz-adv-x="983" d="M88 422v192h807v-192h-807z" /> -<glyph unicode="—" horiz-adv-x="1638" d="M88 422v192h1462v-192h-1462z" /> -<glyph unicode="‘" horiz-adv-x="614" d="M113 961q0 145 71.5 255.5t218.5 182.5l66 -131q-92 -47 -138 -107.5t-46 -152.5q6 2 20 2q66 0 112 -40t46 -110q0 -78 -45 -123t-113 -45q-96 0 -144 71t-48 198z" /> -<glyph unicode="’" horiz-adv-x="614" d="M145 852q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> -<glyph unicode="‚" horiz-adv-x="614" d="M145 -213q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> -<glyph unicode="“" horiz-adv-x="1097" d="M113 961q0 145 71.5 255.5t218.5 182.5l66 -131q-92 -47 -138 -107.5t-46 -152.5q6 2 20 2q66 0 112 -40t46 -110q0 -78 -45 -123t-113 -45q-96 0 -144 71t-48 198zM596 961q0 145 71.5 255.5t218.5 182.5l66 -131q-92 -47 -138 -107.5t-46 -152.5q6 2 20 2q66 0 112 -40 t46 -110q0 -78 -45 -123t-113 -45q-96 0 -144 71t-48 198z" /> -<glyph unicode="”" horiz-adv-x="1097" d="M145 852q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5zM628 852q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5 t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> -<glyph unicode="„" horiz-adv-x="1097" d="M145 -213q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5zM628 -213q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5 t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> -<glyph unicode="•" horiz-adv-x="706" d="M82 537q0 61 20.5 113t57.5 90t86 59.5t106 21.5t107.5 -21.5t87.5 -59.5t57.5 -90t20.5 -113t-20.5 -112.5t-57.5 -90.5t-87.5 -60.5t-107.5 -21.5t-106 21.5t-86 60.5t-57.5 90t-20.5 113z" /> -<glyph unicode="…" horiz-adv-x="2000" d="M156 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM834 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM1511 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5 t-130 -54.5t-130 54.5t-52 134.5z" /> -<glyph unicode=" " horiz-adv-x="365" /> -<glyph unicode="‹" horiz-adv-x="598" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90z" /> -<glyph unicode="›" horiz-adv-x="598" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295z" /> -<glyph unicode=" " horiz-adv-x="457" /> -<glyph unicode="€" d="M43 440v142l111 8q-2 14 -2 26.5v26.5v26.5t2 26.5h-111v140l127 10q25 115 74 204t119.5 150.5t158.5 93t191 31.5q92 0 180 -41t154 -119l-168 -161q-39 39 -81 63.5t-96 24.5q-88 0 -146 -63.5t-83 -180.5h438v-152h-456v-43v-30.5t2 -28.5h372v-154h-352 q29 -113 87.5 -172t144.5 -59q59 0 103 28.5t85 81.5l166 -155q-74 -92 -168 -140.5t-205 -48.5q-193 0 -333 118t-187 347h-127z" /> -<glyph unicode="™" horiz-adv-x="1396" d="M8 1206v178h551v-178h-178v-465h-195v465h-178zM647 741v643h227l78 -184l41 -137h8l43 137l76 184h230v-643h-191v197l23 236h-8l-109 -338h-133l-109 338h-8l23 -236v-197h-191z" /> -<glyph unicode="" horiz-adv-x="1013" d="M0 0v1014h1014v-1014h-1014z" /> -<glyph unicode="fi" horiz-adv-x="1300" d="M49 780v224l135 10v55q0 80 19.5 151.5t64.5 125t117 84t174 30.5q63 0 115.5 -12t87.5 -25l-55 -221q-57 20 -105 21q-55 0 -86 -34t-31 -112v-61h183v-236h-183v-780h-301v780h-135zM844 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-48 -114t-126 -44 q-76 0 -125 44t-49 114zM868 0v1016h301v-1016h-301z" /> -<glyph unicode="fl" horiz-adv-x="1284" d="M49 780v224l135 10v55q0 80 19.5 151.5t64.5 125t117 84t174 30.5q63 0 115.5 -12t87.5 -25l-55 -221q-57 20 -105 21q-55 0 -86 -34t-31 -112v-61h183v-236h-183v-780h-301v780h-135zM831 315v1121h301v-1133q0 -47 17.5 -65.5t35.5 -18.5h17.5t19.5 4l37 -223 q-25 -10 -62.5 -17.5t-88.5 -7.5q-78 0 -131.5 25t-85 69t-46 106.5t-14.5 139.5z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf deleted file mode 100644 index bf5f60a6654b6728bd8804436562f331a770af8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53496 zcmc${4SZ8|nlFBSC+~eplQeDm-h{LbAuS;dA(YY=YAvPK8f&LhvDQ*cDM)!4L}ZvQ zf0khp7(_)BkyT__)?pd;oHR0w<N9*dab1V?dRg$guB*=M49ku)J3E(g9c;t>KEHF) zrY)em_kQkQOwU_#&hPg;&+mDEo+B_p5bXG)73v!n-Es5o4g0qW0&B(DNK;eCtpmDS z{}{)Iaa^#t@#ZF$E0o~)431|mj@))f@Hge_aQq35n-|~ljRxKBFJ(axXX4y<Z@a@^ zdEcKsn<)sIlepe{@6fV!V)OAMcvu>)|Looe?sulIw*5#Dbic**xdZD~4BZj)|Aipv z@eFbKie(#cZ^0r6#_wTkT(Nrd!0Ddw&$0WsAUruZxO`c^@Y>&gDG1Mw;`%%~Vg8Zs zCP6qd7sn-oL-#-UgWT4SaomM5JimJFz02<Z^T;!Ta158(g`s5+t`iOHhl23u{}U&i zYnBZy|H*;x{~eCM5CqTeb!#`=f5DZtO%Tq07vuT)x^FFC_wyGnJ|YPJeGuP&Xw&k( zfj#ZF`*2L-*9!zoBR*QeEQl-nm#_WS+MzXq*x1zCA(&S$yMGN}r^j_XToCciG=asB z@n2p0EPW6E{j}!jyL|h=nonta_V()c_!Tn_as(&-ia2J%C498}NckoGnm#GQ9HD8_ zIP&=SgsWHib^1+WpKVzA?d2F7o$IIb>VL|8<_mq3?o%{=9}T`ovr616ajd!b-l27Z zec)Tm?iGqQY+Sd2=toFgrQay~T0sYR*o7jYOsM2gV!~{`6@^ATl_11~HGHcP4hb>g zZ~54n@DJ)8%s9^D-_i;X3kQW$!WsSzy1xi2${xSYgf{iJiILE6ZTz<i#5DYv0gv<_ z&0WO!%7i-XeHTy96AlYUg@Et|{>>MDf`3&Q1>?_1{Dywf&wo4pZgfWt?r8`97*RO> zqjQOm2v}%@Vc`K`6V7RHUkARa(OSiqa96D^s6C5sA5ymBSz$nI!w^#q8jV&Xidv^2 z7}UFABM6Hc8*UbyLi(4YUWnt^@Q!A_Q(*h)n&t~#7#k;^qCkVT1$-oe@Q*l4V=4e% zU&Xc@-_v4jf{-r!k#LpW!5$QUBL1T@#c6luIg6Y#oMleGbAj_7=SkO$PlPW;P#FD} zj^7<&?drD$r^T7$EKt8)HU4deZ)>jp$JJk4edFr4uC~S5*k_--{mC1jy!OefpZxVF zFMbmJ<oloO_@wINH=GxB7u6B++kc%u3=~9DqyLzQKb%teq4Edw)aeaIQ%Y)Dx;evQ zwPo6~vK=|OdHDr}Ma53n40lOsnP;YVman{Gwtr5bGB`IhFFe0$LG{9#+PeBh4L5;5 zE^c1Za!c#2ZMQ{kZ@;7C8=c?mx^wAW-FNrg)4QziUg4o#d-fhUbmY&E9e@5WzW<j$ zIC<)?WGOoG!VgcMdGSXt|Me@c3il7JxbNd{|Jk>Oe)-^PVfSHSqadu@%!jw;kAxF1 zZC}2Q4%Tk{r2o4+pL*lX_y6ZVe)PdV{8)JXC&Dj&_Va(aBy9QcpM*boc*nl)J^I-G zN1i+=Jn_u4e=5B7HyiMy@9^8G_>K#o37<0^tH8gIa8fuSyn^-gJK@K|Ke2paA1M6K zg#n?TS%gNNRT9c2A@dfgHPR)uJaDHZxa)Exy|1h0PJV9qPUqiCEOT~Fg~ZC8{~)FL zDkQP|miDfj-FLbwBu)9s9H&$t>2gW+cUDN+a{8&u?fQ1tNBL*(%*Xe-#`1rCXTIAd z>3m&M(*t+%3wPd$`{~NlyO&l-`f_;&dk9Z=KGfZvFA2Dfp<FKEr|QQ~8Ov=}XO+J~ zGL<`r=^=06{!U3#y2S02v}G-l5b4^zeD^XZ?aa@2x$ey0&5zoZBYI$pGCE7X#f68Y zmOK9kpH5o2(=Qo(-Ca)SVt3QBRn9JFf1h#-`d&Ic8IN}Eb}ruCw9LKRx!cVj=az)_ zE~y^h#Qf;7QvGr|z;Dd_Ni`R8T&{fQh1~!HezXK*`-VC;j1OPSD0e$As1J8LyKcE7 z-zBj-yLMwjOWeEN&fQCPyO+^OXgc(l#$zEg*nkErO@MZ6Qzn3cx|`g~R`n*&gnpV? zj!Ep^NnmT~ckebx&Pdn7{8w?sUOpn!v-*YxcFP%yaIe7s(wD!1kvn&{ce(p8dUr!U zHq6}s$k(@bMX~O0y0;<9oD3Vud9Reaynv4scg!l6a29aEp9-Q*$S`n#4DiK9aI=2h zH?Uw0!fcrd{)JJ4Hs{xsvR?O(3!@qlyMnBt(>gjGHRy9k7e*PK4_aN;QkT`$C_3XM z>|lIQ_l+xm*~s~&C>+0fQMBp0g;c?cXGBec;EQSWLaNrsB%5CnF2wXE!J+l3n-Q~K zF#2Sx;gV$a%VxtRIg|Nhv(;*oO`57IVNM`CcV4hEJIk(j&nU}ur82kX_+VSxAbpCN zKh^h!?^yfl)$Ng?A)PV)+p)bOEk#i{ES}e#(hY-`r$Wj}TEAop#vt1aTA!q^WKx=6 z(p`{6JXf^Hsd%Ol&rWAPJW+WH<Ig(G{3#2MRkIJ2t!_B}+xQ?m$Slg1U@AiL3z|_~ zP{<dG**!uOBGMPl%FYc2gOcDMu{(0|OB}%%(+XKy--u`}C@gVQVnibvOHnah(J5E- zrj&GC0l-syBlS9i$rm-Ird3vAw4l$t3$a`S!EwZpn`iXJjQk*KFw&O|T9Z%8waD4b z7t2yEWM$KZtW1+{BsD7=KS<-}Wf${F^YUJ-`|cMrge+gmi*>ucxP^A4Jj;lfXUO!8 zX!u_}{lz^;Ou0tvWLrj3vQx2>Wf@7&O2gMI{I8Y&wbNhvj)Q*(zslji!aeg7_bEu+ zr;xrgQk3{+F`d`cTSN^3z+xqMkvy0^<v*!DkB}1zhTWlHW>CXFS#Cox%dK%|(kF~d zO{WT;d(n5&dmf*oFXo?o-G8d$96oQID>%=#zWTFQS$q5xeXtwf#<tSu)t?a_nGm^J zta(}Yxlkc&7o=JKm{u>OfL!wZu}r?lq}hJSd_gV()f8FeS%9RqGUhc1R(vb7Qu114 z11PB!l;p>@$P6k@WmQ$OcNX@v`PeHpSZz^9&WtM1wydSo!py2FDc?H6%sHhcjw&hB zCR-g<RdWJ$tcV3G=Y{6Z)`sTJ3x|SPMa*HC&D=BeS@t3=R)itT9h%J|+uQcGbVeeZ z_iT<FfAp=s$E%+VuV`qwHS*y1HsAK_k++uqWam583!4^)S{fUBwss%<N#VJ7&3DzE z3<hhO0yotzx@Sk<{&Vj0XHy~&&qC<xMg8--h>$513vMAS+yosj8U#g4&S0#X6KYf^ z;?Nb074pMah9js;_r)@lBkv-9<mE?9YUFF)uE5A{k@G;IDauib1ro*=o39+rx5%|P zn$3^on*qN(J7ATea{^XUidAw~$@5FBHpx{b)mo$8paR2;YO8IeWcK`8z)mjo;vmJI zC*T02GPhO?Ru+j_cC+Z7F<T7VvpGD=0KrTaG_f084+XlmG&gVQ3I>&J;JxNxu$ey3 zi|?Hp^Rwu6zo0qMe|V^>YUt_Z{m-mfuwczI{rfg-*tc)(nlFE#TY2S4cD>6)gBl@t z^`b5S_*X#dZ4@38qF#c%J17UVm!uh$(R9E*)}R#%iJ{)?my8!;RR$pkY+-hl5u8*2 zZ3=#QHa1ljxegGuDDbsd<a_|N0L0mZZIuzUr<(`R)>%i=y@4#EJ&R4w3376j%0Qn1 zfD=1XgEb}?E%O$RLp3~`g*foQm(8L9bXm*7E;FM&P^iZYBAqRk61?$M9A?_H@s-eA z0)5ca*cI^jf<1q7$3e*-=?_-zY6-UGGF$2Dwz`eM=8lt{oqxA===iz?tZ?;R?OkmT zS9=4)*;&nf75-oo>u*}WbV+gZ-umW0S{6RGr(tz>o4a8+)bQ**TRvXt@)<8%nkws- z)DG_MZS4uweXqscCbpHfdwo5P{;J!Qbq?9U-r=&LkR*dD7MP?@$OKx(<AOjH0SVR* zKCwUksMw?X6goF79?8rp+`y3_XDC0k*uoAy2+!s)l!^Nv-uBY^ffegs+V-$m#mwxj zb8T<OTR!|S-tu<aIrf$^ras)WBKe-03$#vv*u*{O*+O$gPdM9VwTOnk4Fdxk{(9Tq zz1!j+zs*j6_#yk@-?W{JFNptp{CDxHbILv2#CJ4Hby3(@MHpv>U&1}LiWIPb1hg8U zH<e^;X4nx9I>HWv!{9M^!fpOv=RcG8S>U71!^e&fZ`Sra9{Bgmb06<Nzx4F!rRSA< zHwmw4E^Bu}x_(0d!AXXo%s`>K%Ba9d@CYdoUreA~rZIt5A#hVJNMdEoq|l?bGHObp z%O(<ZDJI%Y5lp^>5DvMlP&Be!R=2f@4SvK{#-IF1tUAv&$9JBOKg1pc9(v*%#5C3i z>n_Ogn4%ZbXjxeKOw;*uqMCHvS<v7ivJJ?QQ?!_MI@kjdBy<Y!Rz<%s^sL`xZC<nX z)`9z8iv7mBy{)Ugt>?hb6PH6I8@kwGF(R(V3Y|gorODEVfqrBGt4w1OOu&^+!GFk= z)y2MGhtC6AOc=g;kzK+#Q-#nZjcBrV1OQFdj#OAAt3bmE<tL%_;QsmXGvXHADU9t7 z;2Ek8?xRtltg*-pqZ9cNjgDl0?cM+W42gWLB+Qn?*^*$9HEDk!MTn*SK^%ecrXkr2 zfy;<ESditjr{9eC$Is|L|3eDlUldxeUex?XR{=TU5gLSO2Dp@*3j%QaWgUTKCXGV2 zgAIY{7lGPRz<9ja7J;kF89I`G?p*Aq2qf&L^6FB15qNj42<ZpjZ5CT^+I({5;K|L6 zjhjyn4*p>CO{}0W&`|1G6v)pHEb^2#1PaA{$FH2|=s0oZ`0=qHbank;?D&q810K)7 z$sIdREGsQtb^_yOu)GA#J32co?1&J>8K2B_m!uTZ$5cH`GWwa6?w7<1H0EfE$SE@o zL@IK66+xsU^&&Jb*-Y~iK~F|nMM03PI|NP`v<9>GvHZ)c9&h^S@@4Vger#Vb^UF^z z^XJ##`5yyr#X_?Xg+s(ATQrxX0>7*ws6o%my+EpHG?(jjxlrFoV-sYH4X{eLgE<#i zqsH7~5{ep|BoORsp(iL}&VXI4nNY1p;kAaE-nYNk`^>j$n>HSZ1UCDbespN~-2)wc zoy}_l+Ma=x)k9C-(|+Q_iQDxl@sk_hi9XfTyF4-vaH;@)&tsf^VMvI=b^yBooYMSq zI*^>@mkVgPbFl6&$TNZDnHI_AykM1W*thv*7mytQa9mJ#<dRaZ>{I|wLY0(el^Ll# z>B<Eu%PQx%Xj(QY7n7OLdPH}K69CB!gC{XZC_P0?k?3U=d#WGq=-p7<wsTe2#>K_$ zZB6THpIrLZ=KkaNH>@9A|7hEGsqe@~M_#UKiM04`_UE6^_1AeCTWdpS+PeJR+dBsy zt}wcu*}8OZ@7(1?(;m1ijG&Dac#XQ1l`5t9C4Ep%#iX^Bk_gJkf+cZ5N~<I+Nt((i z+!-JTqaO5O;y42%@R1@e8%>zJ#Y&S;O~K?@l_Xjv3t=q8z}>Rk+>j#W&JEe=VIQ*f z2M)w9#(%?XMy)Y7RKUXTYRqG%U&h~N;a{GsJ6;o7GatC|12^wuoF&5TLUcv~H!1#D z4%Z7LyI;0yfSyv0o<iWF48tiTT-Y)>E@mjWNU=s)Mj??>4n~?aN$UjIA=*8eASa@# zaXqTczq5LGNB^ev-GvoCf5FZY@n`WF*`+smJD%9EsBQbHo+BSU^Kz(lMStH4gC*D2 zDLy)O*^*J&_vFf<zt~v2lHlBd@&6XIRRTZcN+If`8O#EN=lJDpY(Qi>9flv|EQCzM z(n`r{kt;BXd`xC8wiU1tN78iJPEuR)t+L5T^O^&NTFS4IvaPZJxJzj^$y6o5zhdMp z#zynVR&;30tyVKJD`+c4IE1!M<kr#k=qm%;{<`KF_nNBEJ&P-JxeYfr6?g0%T+p=f zPw(uB?rLZGDc(?>yRo;oB`_ckon|Q~JG$#*rD1RH;dQQ{+ZO0MI52Qz!@`!sm$Taj z>ht>74t7)lcT2JUe-7N4g_~6hBVj_=f_ye9YhNWPh|Oe@B9TobC8c1dOu&wYlaedT z%u<-aH4oDZFV*Z?zv~v4G5(&>7a8u>I>yfI`t4OA{^83<ndOV$Ao2hy(Fyop1pHlC z-3x?o3(-PgAXcgn&wPI@O;s<exg?ok5Q<^n7_hu!bCmrV7C8i|V&(dYG?Ny74iK{t zBb);&!@#7FHC9+!krpKUfbQ%dE<v7OYPG!}7_2!Jbe_0A?3#owNgOO`b*uU#**~JH zLC*7V>~wDHZtbgGb7*PT{uNaNjXm2JZ9XyB_ZJT~GI3LTYoDj3zt&e3`c8j@bu6j= zCTrdFWWZSU*vj@DJ%M2Nj!4gA6~^F^ZEf3o=g;lgzM*qjq}^8=tjP1O5(^_sJ>7k+ z-7NqU+4X?a&pDmWAv)zUE*o6X>6d4MPG_s4F2Ly&R-aVLb!^F3$)#N-z)=c3@kK`_ zUPiW#=v9!jGXNx8mE^QanN`wE2tn9}(rowvIZzU2i%5EOnI~KXvaJ=vX3e-(Jr8O% z=(OqPjn8y}92I(fx%P-_&4O@Gvrn75sHv%_<Kcm7X6tJStnk^_H#PKWHuoRhP~GzM z<&&r5zdzY=PYoy6LmNP@nOL7I2EVaj@u7|2gfw@qvuLhBXK@JCleLx%25QMteL6Wb zd9Xv(pCj24dvY#Ug_3m_YeLn+tj6`2srrogFRD9783)(#Fb)em<aY~E1k!x5JpOEw z*a?lV&@WjpNQTOogFBZbheb*!dQE6S{+OZ-a!o`-yd%Y8&*QkbzCNf)8g8;~SezL0 zBqdS%cG9>Rd_w1;A8!%h00XzrO6UJKX->tTjDN=LY^7ND9=q?0O})n6O$dd7*4V9@ z%bHQFP6K8d)nT5p7DT3~nhZ*bY~ldTgl@_3!M#S?HK*9E=g+f$Q1r~CXNE&?JL7+r z1?8D##eWq)s5y0BeO~;)dmP8ahkJAzg+jqAJSapV{(Lc)0^2+&B*cSf`K6)@u@Vl| zk&Kce_>o{wmVqBw{ILwaH{zhv+<)c+#aoI%+tw<{0qEQFTpj>fHj>?*2ExyC!K61T zB1fZ=`?zq?I$UM7@O5y357sd5_UmYRX+!6Mp_+=DTI)*<@&8CEu4-Q7yQQ|O%WGM2 zYun0|ZEXYE7duvXJ9jLtTizMz?5%D3*1hewG<)hALf+AB6NnLo{`e97dEHXr=MLdn zL2B@;P7Sc%n1}l;q->&`CCdJ7{#cQ+7f9%bOzPl#ah{@K&$AGv#}+F`i!E|Fjua1v z{0+dPe6iJ5Z_;IC7X_;88gAt@M@|c=wo39?!3E^omRN1El-zP*9xh5n)~L%}0+~$g z(KfFnSgFmnsS1w=dIC3Dh(lyMg5jV>pQI%-a8Od4=Y<{gy^=DR;B=H(=7B8le|(fh zUOLXw{(7Ku=kZ9_c8kupr*6yR^=l4x1>5qq1wZcb?W*W%^49J=|HSqyZ*1y4{yscP ziyC^~TyrRX@%^ph!>e3%o<MP(zd4x4j=j%%uIya(di?T{z2_djxqV4>>+y$sVtYIN z;m&xC6kN8eW9{D@S~~QT_{Eb4Ki%I_;XW4h_q@tnZ}0L3nZ24V=o}EltG|QJbrkV2 zfDf@Ru8~WcARNu0MZHmA={{LcswR|5c!nYP;J4uBo13|qOXJdHx;$_(kOF09$3W}H z;;**HSG4bA#je6&fyptqP#3=PHmixhE_%20f4XwjC;cP?5pUP-$8)nl{bj;>A(};6 z2-J_Lh)2t1+Doyb!YmPwFQUhLIFHW;k1wi(pOa87TX1BtaKR|g!2S%sY=9J;iAx5u zY|_$6<`rgRz!t(QKOvRbBm-~@+cu%IClp#wuoA@YV<ANk@v+0~Zw6o3(V8FbtlGE# zwufIHdiD7$!^6+-SvxSea-S|-)V8&^;;vh3&BpwLI|m-`^<Vm7SLA$GYwIHD8QoVe zYB$4=R4mj8(R`YlU4Myt?&LH*CIm|Z_L<dmNii?%`50vmY3EVF1otDfCbDWc4NlUU zvbYmXA+Xs@>|Sx|;<n*;ZaN+uXl{CN>0Eh#$L7HCj`xSR{qkg=xc@lQzR<Js<{$g# zEnIV?|J|Q23Z3q|x9bN2#Vp~Y2M%JuL7I>YZ&wsSPgwst6$81%e)9Mz(*fLc3y%yK zFkrZ`1UWYy1D*^>Hvp(uj0Cy|4}Br^^ql<d{_d)dJ<G%4<$F4+bm6w=uADp>Ki+=1 zqW{?DP0uZZca70FG@oM}sX~it6Ph%aI0?c>aw(=$$WTX08aL8q69z>73+~=9rII~p zg0`mkGE}2oabA!E!<BVdbMx50vY*5kh(2979=|*qKO0w{dlAny3H8czC!T54and)^ zGhu=NRg<4N@ifFP$oAx}5_;NU%`Id9%+AJx^rUy<V^>IyD)ev+^iV2n5u&cC^bpI< zbHRrzbD)<cNQ0Da2e?@Q=krlV0a-eZT$nc=(6|F)G@7P^?M61Ks)5_V;H82pIgb{A z6{bBXitFGvq^6J?rZZP>Kv65B|Mt+{cR^9BJKMH(&-?Mq-qzfIV*gs&yJ36N&R<E( zRjRu0rg5sW+kg4_*i*&T75OS@DX`VP$#GhzautKZRU}<7rb*$@)zCsvFq#UCij`8T zMK;1mqOIgBSqTRLwB!Ha3uI?mMf@CrcPuW7SKbyY#?C3vgHJIG&f-eKrRt55HQ)>M zQQSjxN8E|{630z3<nR{!)(U-G(K5AIt48o49y5c9P0ka}{<Ney!iqLpVNOn1%eWzT za+ejK_4EeYJD5MX^5~jF?|pEvaZ&#cP2cE_-jiEfDAR$~9MO6jGFB9BYaE9QcYA=; z(l{{4yP+5wvL=PZ5e+-YTqZDH1C3wL_OX`u5c@bDi@)?V;PH{@9{X(cBQbb3ekif7 zKEShd3C=ES)OE#ut#}e(64mfkq|t$_6t^n}corTYnswnX-=cI1K5iYss1W`}W!xrp z+=d{Nia5!_(v=D=ateqOt3@uxwvhDiY%nxL5Jp5prkzBrDPfkA6(wse>f|yZP%{bF zaBYX(h&1B=B25;iTK93p82NzJ$A4i=PtzNR{%-Tx`;7YZG$SVc{H04`7X-|uz^2U` z1Mzppu84XT3T)i`KxN#atUZEx6l2d6+SReAs$(}{>~=o(OpHB~Qy)im7RH`Qqcdk< z>_)3BrqLWQTJAYh25wdd&N72#Vh96wF^wDE5sWy*x_1~;3Ry8&z_IPdlmd)&W&DFx zOuvb}528K9W~?3C6o<+OJ`7o*%jGd27sYH9UtU656w@M^!N+Jfac^D$#+Cv;?8dfW z!kbr|?9Jn*b`gW(!i^Y63dN(R8ra=kM?T)U^OGZ8T}M9Ix%1;AT`c5lUDLSh$g{h5 z9u<!sW5TKKZt1FU^jJI|Ted95#AC2sYJT<3+n@4SogzE-0;Xp8;NgG7Jm8-r$qf-6 zOGkto+zhTNCOP=f5m}ZpDkZapoWOi>=MZ&sLu|4X@v&T(TU-zyW*3KE-rL@>@1^_B z9RL0BgU5AYU;pvV8&9qY#jC~GxmDjJ{E9+ne7~*>@GBB#37yd0X&5v0m+)xWLPPNJ zAru38#TL0#g&x#IxwIH8RF?-mf#_4VfKK7*b6|<vVHR3rDMDu63{dR27$%6q`%ea8 zLdo;Y*6=`!3fWEtvd?z?;&uO#PG4(bsC4tK=i?tXullQRH?Yu=UAvCZCmF_w82nkd zDQr&tCtL2D&p6ge7axA-R|M)$RT=#n;GBW%sJkYpmxDS7pf+1LsLeFbTt3eXfZ9?i zWmsgp3TnjsWIHjg^eV|<l~X{<m?om5aAin2)=6SqZvcC76AEZTB*;Hq_2a$m+wWtu z<EO3)$DZ0WJiO^C9sDdu9@zhif9w+bG+r#e*MDyx^0UAvV6$s|z(qh96rz5TbHqy> zgpwkn<VwF}yFmU)$)!YVXMvJ~7@&(gSP`wo5MR)yIf_dC#4Bdm<UAPX2-f;BUU1$b zglcX1v*?<`CgmkDVK^%MY&JZvigrF8suhb7$yGG?lBQG5f7#J<cYd(hcQVx5TG9NS zzZ%^5^Ufz5c0}5`i^HwH6I=E+ZhLXl_W0=Y@7A>4ys)_3U2JQyH*{@mX@7Ke?b6Oy zg7fREihb^)%$oy0*xPYned98kcK|%526!^SqZ36U7J@G{X93P-4H5{9aARJObzrwT zJxOsLIhXW0+SQZ4a>BMG1{lz$#UG2G(^kdfU%sWSqWeDqxW0({TM-jhID{T>rDsSf zU}8MAgV?!*hy!j$GK4E^CJHiT@E{XztVCe3V-Z|V;R#mp!20#WY)1TYd=&qFE3OjH zj%B_1^wV#OzZwh1rTAGk7a1$a{nT#5v(rhJO{ckmFqP->;G4{_w3x#9Q-Mwd;UEOS zJQWRGAXQNZL}^@^2v7#$Cd-8FU}1Gf3;ji=;@O4Iuuyy`egHi3v9<56S^IZu#Wh?s zW8P4m_5FCZi{aT^Z*n+;K|TOE#U8}e72c>0fk-|JQwMM4Sr(SxXY=F==WMf7@T#m& z|AS<D^~Kk||L@<W(>lq4^Et1|8RkDoX|KLm`}yVVIG-x%Eh7fK30V^GD`)y%e69Gh zou5xb@<mz(&YS7)i?u)fU&r}*r)8wjSwLA8{BJS+Maqte@`l`ctTf1wswhs=ULlCM zDvJ9gT{Tw;_33(3T1HMmvB8*bE-adqeZlH8=%NExo!7Xm#EKNBq^nBKf>4mMv1SBl zgR&0G2MjC;_7hlu{iYgk8dp9Gb({0eCY#6p2ooN)&$JuU^38WM=da^Cwp;R3OldjR zt?@lT(j$X^ziQRFmEyXwM+W|W_0WIE9z<GC+cQgA{<LlEDCYwZz1sD_TQ00SMPJAW zaseTw0cUV;a4SM25o<tH1=<bt8izt2bzI3AADM%#iyvd{8yvF>jSjE<KDH=+oUM;b z+w=YT#@uqpuy{(`HR>O%uUqLK9a}lp%PgUlwKXf}#X-1OJDh$SFqRDXyQ4^6O`=~5 zPbh(bBU?c^>69^|<*saj*yA*!rIo`LZO#uB8Vkb(o7lqm>i9V*`e$4BwzchTWx>&7 z@ly67=(ZX2hx!EDVzx4W*#O;3OFRKe7#S6m^(4r!yD2iE1cUVi2gD}G#pKFr7Td-y zY4(go#rD&h?eWv2!=#Gg-qHBmVxR5=culP!84`XG^2dqXSHjs1Vvq(HNbnRP=Bwl0 z5ekyh34LXP-@s~dBM=g0(!1}*-`0P6<Vw%8$}_4E(>y#SrpXi^3s$-YR>|a;=4*fc z?+0i}CB-xm%%qqmLYvcLnnC8SdXqi#mhKb}Xi_ZsZK#_xr^S3uNM1#@mZU)z(8Qb! z7r;!()5&LHi6sUE=4weyPLpudIf94=f}8fd_a2ktk%PLUNB&UE;Wr=#H0O{bN4`M> zR~1!rfYttv)qK&@ZM?e&*L|bsnVviD$be%)Zv0ct#jAT@Um#}zqf*AFZg>=0u`L|1 z0dqBfH(I%o$2*x(dr<sT_YQvN<iA6buAO4!N|abcuxdPN&0LvoW@PTuAL`zTp9PEU zg<bNt)&d?_Dy&wbl~JrKpIi(#NjiBbxobwT7m-*Z6<Cl)3ZPYzZ-g6(1+>6SFdw8D z)~G(6dloFD-UxCr3EWJIXzI!7;3g#~om2wSc1lXQgIkIFWoKF4it8&86bOgRte0i5 z3T;b!!}cZj^}WCO&38X{=o=pGY+BRiW5spzLM`5-TUh>)SW#mn;QL8+%g4VOdvUO; zdCnbcy8`|SZ`9FAy4w!OwI<zRXpt^qnW{%xX^wetL>Op}#qjvU>{I!?1Ji_|=&;Cz zSg>iT8tkBHYH2QoR@uNqetER8pvDzj;rWydHc3m13k!I1G|l5SfE|*yWAV%|>|hnf z>fMXGA0M3Gy!om2#$5}IIg7mQp0+j8(hl9>__I%ks+a6|W#jg<ds`Y7tzyNcg?pc2 zHg-3skrv?VQQ)h9<YW#_!iq_7S8^(OQ{W|s&1J@z5s(*TYYs-3RVAeo_%Ze*pO31+ zz;B3LGs>D$9X?`9=cBI;_8biEYQA~x)@^;^yGkEyiFK?xy|aytZhdR#;=0g}tJ&cl zI}TSAzS2<Byc5|iBJ%1kYAqbbZltv;65N)6F(00bV(@@*2_K;Y;#>i+WUAzv1S!ph z(2HfA4Z}nT*$A@;?qo=I#X@qCGkL;irHtPLXip^^E2pbS^Zkb+oonW$vx?tm8AFdO z={Yo1%|g9hfk>&h)7!j;jSj!Ddr4K`Fk5=1zdzL6vg^%l2lv2nd8D*(H_eG){Q+Ma zGiXkHSy-_w_;j35j0?;T%8Dycxrf^?6(%xzqJ=z>ppX<VWWdQOg)jrsX(?b%R#p8s z^Vm?q^aKgL!9@g<z(}c!JIq_!cbx1VdTuCW)Q%mo?_DvproZjw?xC0Vv@s`J+t%H@ znvHJx$?hdfwvP;Y8*Lj0Z#o^SZQk|f#jdrz#9yF4idS?oX!&<4vx(Y3{1OYwSrmnU z>ExG<*fUz>G@>Qw`VLCxk;x}&t&C<nNSDmEL#=f1%u@%=4w}Cp8%dO<(y|VP$CYCu ztwN^6zymuyOCK4iTj>s0%?a23@Q3kpnzT<+!jXOV)#RjqWM_?SHJ^=M*1$ig5t`x= ztp{+Qi_FB^gpa_LFwEGkJYpHmqV?*)DChWN^A!eO=a)S=QS6T`RxuIrOX(NnMhsgZ zM}J5OVumbI2_5Pc8Kd{dN|e1ui`)Wflcz*JtMMJ#2j+G=@YV?Oi;AWO;7u;kW0Eju zTC6V=+dOl4KBAOoi`pGXb^u!I=Ht6QAw<i}V~vU$`ju2{llAcRON*^YhT@(yhixQ1 zud#(2eU7<GbTlbQ3ieJGK6myYDvHHf%_uv1N`|A4A#SKg)}3NTQK;}yZ)j0v=o?KN zpKM>+$Tl1`XV$KMtfRW#Zf)#5_R?FC{qJpGdT8UK|Jbr(V0+}2m7#{5`L&Vi>d0*i zt0Skjv>WqpuMaPuVJh9Vw0l=~Mb3wgo4s9s+%eN`apikTAKV?;(HkzV>Dy4XusP&+ z>Gc8eH=P|Foso`quqM#g4(KDf-~o2wmI*78^H<7$A^wWQ3UDXN7y^Gq(oh;847VIl zrLYq-)pBQ|0l+k%c4RU?g@}OPhDVO9V4~)#gM-JPh@V@ysOpXY@y*l0t`A-v+a*TU z-X8Ri@iB?WY!TSoy0?T>XlAX7|Cx(5$>gV;buK5Npeb2dMM};(HX|84XPvxcNL7Hj z%XPPmH1HxdXFWN1m5G53^|iM3_O`Y5<**8!uc@=Msi~{$%Y4ljqbOz*uO5uAWoI!C zD`b0{5H-@m%kcB?A99ZoY2_n<k4y0cjuaVeW?wAFBw#Sy%auZ@9a)N*I@v*};lbm1 z<Q!5Qgvmo24B1N^)qYmt?$|R}_l+O-wYK)rC%)$+y|JxRb7j=rv48C%i~giKWEGE{ zz~dzUAu&CUL!?bj@gM3)GEVg$Y7ALBSgDaUu*LDi$iaT`7u$4)NB@RB9`6}D!S+0= z`m7<FMPLtbaVt`TKV#g~<o2b8C?h?|zFfc(oDp>3wxwjGmFC_OY`d?nkX37!eYxLX zs{J@6qq1vwoG$gf;3qE1bHXXeOeF3{8D_-Azmy)7i$I~-FrpPpPxT#;QzI87fUJ9R zDIraTJH%WnrRI@aL(1hm!Dgiq$_$aws74EAh-(5tvP3D2$Nwhi*Pzm|!MfvfyQyy9 z@}ci~8V{^E_Eh{_bpud?zimC5FSgfpceOY5fB3RO(|u#@MB3PluQklcPE<{ElE~kf zm=PtMC9k#{FExgxhTOEtLrx4<uZ*(c>50Xr`C?m5_oSu9WhLj?lvAGYFFF#MNg+uS zB^ssr7YVZDUqs#;&jDAn1-bmcUbf%_qibp373=LC+11{@E4r*VhE$zUcTe{{J$LtX zD=Nz3oo{W0s?rSQWb2N@q^lezJutpg+XR@A9te3pt^!Vgjr2faTn{9%hbj()0+aQ? zY@+rldLY6i6M7&^05j97;y;m}UgmM+su}-W69o3F4@9~jAK;o`!<JBrq6c<$#&_!0 zFAp^@dFbVh+uzySGCz1U{=Rr{ToZ)8g}GSxT->D7+7hZ(3X#CLzLh>z-$J-UDxA=_ z(yyU!L1l+CM^dz{ltfHN(Y6qc2JMC^@;t7lCuv(9TdR$^zlxtr4?cABwY9D4hUHiG zvC!c_{S<9WrD;t7bFxw16w!1NL7U03m&sWV@(;-{q_k;r#n>o06AmodOv^I0N@CV& z#O#2f4*{u=a`@>s-~8-AVZc>2?A3e`9qda<iH{nM?So_VQ~(fqUpvMz2i1Gg*#uc+ zX+*PeK`ta8D3XD!7vy442YkJVXUJYK2Fe5~COSY0AbA&4vkTp`$%E*%$+>ylyEq$H zp}`iyyJ*ex(zWbq36XI1j_Xe}W{UPZ5TQ^wyKiUH)<umqGZwaZ{5@@f`2+j9HcAaU z!}o<YxWdh4fn||E=)R{{^q<@KQYcj6%`J1~TWpn!d+VDXX!qZSI+lt^?u^2`44c2H zzp3eguDNiiGQkZV{2QGfew0l@G?V6=rfRvQ8<IvSpkj$9K60O;2uSd_ZO%l<GKW+{ zp5~pylO=PY8cHTu%!=v-i<v4DG-Qs5z*Sl%b`UW~j4MOY8Z#-Q)~$FC6Wl#ybwBOC za`|#|b#Bl;$Gf(rXGezzdSe<h$A9-(d}U{An(@Q5+yw)Vb+M;`I?QDY>=2{o3xzLo zKO$cmdJ0Nm*xZq+XdzP^nUu}R9hvZ+A)X0$COmmq=@guST1&!}8%fwv?TxZ6tfHo& zstx6zpJ(eE4y-(WfNc{ujY(_U=T(bGMvZ&hy8eO2lncGcfia~EGZVhe#8BYdOu4{S zAgU^m$K9C8t~BP#W&Z7UPnOZ<flPHF6n9MXMcmc;OeFG5EBhD<2G{NNT0FzWkT06# z!z7}e<iiBj!nrcVhgo~|a*RAHQo@Is@dwEWALifx_J7c6#fO;(AEt%-FzbZNKjJ<~ z?!!cB*Nd;+^}B!OXC`|uso*Rp&jF`pF8zJ6_LcuNz`u4KXQpw&U3p_qW)$}$KW7en znr8jDOEWibic@notGD3txKnfb7yhsKHIWD1mzI@oH0RsaGwlXjp~Yy<G%sV>m*Ype zExBfsIXh!%{CQx_+q%E4?a5~LzOuK!mAyY|WKT5jyS;ti;`k~~!${TCqN03?Uz14Y z>-sg-beRlR$indtS>sZ>&tbHbT5o3a;~%i9_)C4c{v4ximMtP$*uNa}b@}lBv9ZtN zwIv0w2#r`z}jtqtQSK+FpzAAI#t2`6GgQVwW{cwwPmaWn|DvdNb@iE=64uO>In zt3%Mu|EQxR%V=?DZeh;&k<!TEj-~#F;(6v$OKZD51K??G+Sl6rXfum_8Sj0pH;|I@ zORcG;dY-bj!K^gH7*CSF6MRZbB+fJIzlOiFjh%?^5Pui%WM__wt3Eq2_V{PYz3Wte zXAmXcQW-2m#k3UsYE38RtyaG=X|7+IbwNt4jJXu%X0Jq`DdtyfNk1i%M_qp6hb{}4 zU}+^K(#kHxmeeqlfK)lTXclZjh$@OaQTA*q{AOf6Q(FIQ)I`jyW?2wfu>QtVX6b;R zML~;_1XCAi^ky22`mH;+dFm>REp2Tr#)>-6ww+t`Mnk6eCibZ$=KDhV{`N>$=-AdH z)gA3ex;GAH8f`1@?>XGjvGCd9<6+bl2J%C`JWhKOl2$hIBLBiEbtY<}rJCOW-Nq`t z8Ap!`q&9*!$hW!;zSW>`zksZ6)oF?J^aLcc{IP7+ItTo;7bJ5ffecby%BzgcQh--n z8P(1r$Z4|xIYEKkEUM<AglL{<Yw!bJC03-{W19v34B3i8AH@jfMU<3mtOOR3WyS4g zE=04;kfJ;R*~fZ3b+b(bEmK9k0xiAG+ZX^eZF&yPg9|%4p1x<}pbe1P*nOnEqx#6! zW1+4{yC0Cs7bP*zH!m*`iFAgKlaaxMYWA5XuIWZ5E$WnD*g<NJ*o_%Tn&hOJ<L9}u zN{AGKAJKk+qWviE;9e854~izz`lujAZ>VlP)K=FMY4-V=orhbWYOA{^vbfy4#3k<9 z*b}G<)KqQWcsFeqK({>}KP=jyv#2%M8Z3&KNzLEo*3^`mY-_T8ONI^AWLvLe-{y<K zd^S;%oq~ewR82=@_38-HF26j)EaHZ-y%Y%%A%9P5exa*@m0KdLK$Mb#c-gR^NrB4X z?xP%FmK;rF6QFtlwxn8Xi)g*9b5$b2*FZJUvcX(gNmUJkoPqp0IWrgVGNVi}&E}$j zxnzW^FqJPFO6E{&XUjZR#Qu;Q$qQ#GZ0@j{*_K6{j`SXnY^&H+GvC)z{9yH-rsGI9 zsAHwAi(8h68;AaCTZi>0FB=#7&jj>i=Zv1*SAx|kufLwwz9Y7_`%j8Q!L?oC6Mf)8 zSCB7Wjw~Clqsp^jIU4-Zj9@H9;Tg_Kiall0{3>|p2RSQIb0JOMOj=Q)MJgjV6w34{ z$rd4%G9~${j2DHMl~a~k*$lYWW&<Kx#j{3EXD_h~<Q6)y7G{yM%T-P2zH%OFPh>Nt zz+_qxm7@p`FU9n@L*ZZ|`ChGxATB}?1adJU7vGiD*F7wXXTO(b&TQED?6M8tZ#w2~ z3$*v9r80l~KSYhMQp|kOdvq=0b`tCp6h91AcSer+d_8@oEu}A-3(YO}g^h9G-YcAd zO>&6mNc?{S)l|<=>J4W4W2tJr0rDhJp;)X;T}hRQ+4vD9)yl;PCBMM*MpI!Cp}5p4 z=L5x(&GtgN*^=eR!AU`$fkeg^SXQ=>gDQJUqL6LqBOs;PUeFs%=@}NB1Sbts*<aWb zcFYS_Qr#oxqbPnP<Hdt4p$T)+JKW@UZ8`98-`Z6x_8u5+Ds>GX*yq15w7%z&zZz(1 z8CbETWq>to?b*?=u43!KM}ome4sPw<-nh=c_28qqIe|ynmF}UTZhXK8NY`_r_M=ev zmXdEu$tkuVmF=Vh*_KLxMKTA;XH3Uwl~h<s(RH|fvMxxumE1d)Q5m&o5y9APAei*Z zXqKIhvK%<dujKw9dlpcx#t{+noi2NWKrJN;;$MjV1#?+wFgH+W%n#(P0BX-&iNAs1 z;u}bGdkZSTTUT`U_-`9`F2euJGWPtw_50%ISOqp9d{LN?3kG;<c=S(m0ZDXfhz{|- zM6gaxGeBev86J=kZ@$Tnj`nD`YPOA1X$tPudbI;}g*(707YW}J5D?&%K^6qnNTX=r z-nhAnXwZ`{76zX**CJQLMT_<bBr$R=QZZerz?BL=nPT!ypdK3>v?H3CfqEi~3hRi) zR8mK~#kP^G^n&@=#loRHbr0&GtuN@)i)U8x@0uue9W(=i;nIU#Haxe(p;qB1{IO7G zvK^GRGFuxa%Z&C!kG{35wXpb=Q=8Cf!M`E2mfgPPu`TUg5l2q&-u=Dn-)}nA|DC$( z+crJ?KqS6s#c*{~L;vu?#p2<%U4B<bXwRvRz)Rk$NNG6S(7nBT>7N8#xB8nlbp|@R z4h^z^$5S=0rhEIQKw~&q>}$g&P>iG(!0}`4qniDQpHlsXUw}tb$_mOzctjQyZJ5Lh zH)K74q*r{cfTUWpk?bQZP0GXnI8s-4`|Wjg5q2O_Ul*YxovXUNy}IU(_F8pIKKkyf zztJ59pQqZ;n}z*KzDO*WQ#H?yin;lIY|(-YijgehyfIcWmmgKAnm`lBH97}?-;+NW zdDXG7q6&n0NhxL7lPp*a>=uQswjXBX>f9A`Y8P=_E?5LyBFBEN^>m88NSGO@;fS|M zb2u`|XOVEdP-_4Zu!`P9b#IO-IXv9D<4N_i#qOaOKi|3Y^D{$3XK4H4(4LM*-dMl> zjYm2X+v5$ZA8G5^8d&dI<n3F&qBGdy>8t+kZJmz|E))+P`2$khPL2NQk<n;RPjvLi z*0YaCB9EWlI{eee+S(rb>DHx>!s8PdcDskW2fyPf-s4|bweksNZB&a|ai8`r@R1q9 zS^>;MjV_^ZJ(jLQ4RI#;s}ZfBo)mc&Vh0qnR+<3tXcGk{m5^-l)R1fexqPfB5mZ95 zyz|0%NLH;mni`TV3-cNS1Z1mU_*<<%;Oz;tHXev<fAoaiSb9%&@7i}-i~V^6ZQ^@F z_h<PkT!jyN0#7^@|4w76f73v9e$Ixp1w^m?!UoNt<_UCYfnkn{8HXm*pl<qE=DMH% zeBByl!w#Kip1b02$KPJcJmb3n5Y^nECS7AjzA5x9rEn%ujgD$vo^z^AR7OX&8seH- zic%S%N055WYt1#MsLXt91Qq6V&;NSew^nEnhc#<;XRr?3@E27H-zV))T?dli9}6fe z!XKcK_$$D_ODd%*h<t_rBW8upFpvaHS}<iTP~QyH;?c?oR7!J{ay&F5p%dsrf(*^X z;s9fmLvv7Il95|HTSrU4ivU&yP>h1xa`3zWY>!xqy+H8M#VV`hz3%!T#hF$I^n22s z4GuUvvc{_w8tT>_=;(NSO?~~E$2&R>tgTz;i>zwccI?=;hE);Yw$sf$i#xW|R{M&J zii&;O{H0H>t*Kf2<kF=FX?t*K^M>|{6OZgWQPI93{yVmRQB&)TXSQrP>&|u*0S~N5 z`;w+Zw*}l~CgE1KywnZPe^9INjo=7MDg;$Yu_AGv_N7-|;XE;-@ry^$_ksM-tsEB) z1=58RkmjD~*aX*sGdcmvukVje?lcmqh^(%y8H)J*k)axFE1qequ4!$psczGD)(u5` zzR2o&0uTYKv7@80p`(M=1N9W5{t6nzrutQFk{T=^ZzDBGCH4r7N3}eGPiscdb)sny zLunSe)R5Fwiryq6+J=~k#?q1Xhg$cjnR+593MW$Ck$I$4uTxzaOgB;t&~$<7%My(j z&Yu^To@ZV0=g-Igm1Wbq2y1qTC-pBuy7USNgC+D^`$P^91dR29n)wseS?P&7s-m~@ zL0i+Y@TiJLM}ASV;8I{<NaiZZZpF8GqKHT?Q7lX-Y1~vps~?oMt8GLK;Vq|k9G$VS z)%UwG>ChWBVQ-ULpL1;Qwm|pNyZmQ1ZT)Yp)eXT4Wvr{kD8@PyodwB$*C@KU(H}D@ z_{XYD*q>fXlqBPw_@~Pvp>>#*S|`yVrkT(8qG|awoironfG$9CJ_Ub^Fb7Q;cHqW^ z3CF0Y9lAqNm6QQBg)Dh^bTer_s+xfMc4b9PDsLaxCc-<K`}~bBw|q0?_tX^*H|*>Q zFTZtmZMdc**s;E5@OiCyWgn~b4{r4by%iPiwatr)7IXybx?H)v&Ef9)QjihW&7<0b znpKJXA6hpz$p6W7Y1pHunLDmM$b!fKBG~PS4{$$^1NCw|k^nywrTt8JOch09A}=P9 z{Yl8ByckL`F;Sr#m1A?)DJA}xdA0d9U8f!gg>VtNjlg^Qdxz1p@ut%HJX?G~_gIqu zwB;5{;hFd!Xstx9c5B;_>z0NpQLmDJ4K<qg0a3EhsOgu%LWMazF$wWH;`fm8)yzuK z3I;_u(!TeVRZH84UftJ$_AnKiwcAdut{ClJxH&r7r~B|qDPS?o&aq3HHt1C7D5k`S z!Endhn_a(wN3udSUid0LGEtYv*dQ{>FTrDCg+Gn_N$~P<&JX(>HjzSr+zwBJ6@)r) z1P$f{m}1C<gUAS{D1d<tw)6&@+9hwOq59tKOX4x3*PHLN9P70-*N0j|`P7jSwG>#p z0sS%bIY9oN!b|b2M7I`nGGJ0F6{Ay+G0=T-5jq9sc@esvhg{*2Le$4?J?yOu`E#X@ zb#FYRw`ApIj(#fE;ZeX%06NRt&{-z&T*|CdcrNzT=pXT1T4d1lRGy2Y|3nNhndb(= zcR$e3@Id$c`Q5a=JN&`?>gojxs;lQ~`a8DY?f2iky`y7Wx8L8rt)rvAzoT<G@BgqC zI>?5E4ie7Pgjp6VRW@s(fUwN?ubEZdIm^N<d{_K~^YIUsPVCa0wZby=&{~Nc^c2Ai zU9DI+tz=_S6qfru(t@bBO4X;MX&Ckt7L-*P&C4aGk_W3!W_pYB)d?biP`Va2C>aNi z5m<fX79rr-D$!hw?&5%tESke}a&j_oLy}#*ABCPw<{Ypz<eE|eG?Lim!XgSmQOOpC zT?AxTp(g|>L@IVENwHLIS%H>go?s~KHY`(7-mmn-dV)Dw=B7<=9y^w9YS(s6kinPx zsO!}`Ygs(*ek2-wq~qV7Asc~UG^E0)O!!M7no2P}DpVwhfGoyAWpxv%Vpe{3Dr8WX zc|FKDA-NTrirSq76MH^j;^fA%vj8xmLd^-7IIS;GS5j*(fP(Tus)t0PwA&gp*^SOJ zf)vgu@u&%~nAo*tQvx_QE5P~9bWt@OMB>Tm!b?m2!1PqdITK!`F!K7Y3Q>5xq2&dm z+2lW)6-+c<3(xmvgQNn%SXd#cU}bcEm?l1dj>#7*)6iwoEdkt^$;gis`NyQ%|D@ET z;)!{nysApdpCZbeQyC4-qlblpfbzT$?aqTrOD)K_e3XmIktQ_{8Q~+de15XG(IY~x zUPz=jAJ&^RyNZj?s6gkgBSOEn@HAbEWP@KJQCXdWuFc7`EFS#|F*~+@I)PJ7&~^>w zl~8T{Rz%&%=ju^v>vR3GjU0f}YwHu;+mKT<V&uj4Xe-8>Z}^E9V^5|M`y!I6@a!3p z>k~_}<?<qX_`OkRDabZj#@Rf{OfW#mVj;tt)p}gnX7mh9He{2fQfEcuE%hEf(<`<0 zZPlo)Ki>4xw>qB~s=0*vdg`~ivXF}FJ5XG|p|8DlF)yw^*fD^rd(BzZ-%I>YqttZk z_am1&74_BAs=CpXJ5kjQ?=K2Wks3p~pA|z@tGZK>i|^K4yRzHQ>W}|+KATqFt>6Fq z(LLi8-v4*Tp~(!p4A&XQ_T#Mn^M9T`4&5`qpEQtUcw|5xOoNAI0v?IF1j@RB-joE7 zFaUyF;p>d0`b}2$=EWi75Gwwrmc7$>hKDCWlNirw;HOxjPGAjQ0;MJ~rgtXBgSJ%U zn<Z(D?v@T{!jdr<v+y&Ve9?Rm-dZv`;jKlGK((7Vkrq>fLA?PhIn(-r$Wk3n7p-|a z9P`K~0?M73VrlXeC*mAIC5eRM9M>uDud{54c$=z&x%o3wpGw*fU1R=7_U<Zh7kY#0 zW^~sCk!V#~Jp))|^0j)OVrxx6!#)lTw3YLq6%>4EE+m6t^%{{(4gVR63aP<a3H)cY zI?b5)2s7w;sVS=da}b1*N^B!qQAbS{F>@-9$xWVll8<d-zRAmTQfq^ngd6Us6O(;@ z+##nnJJ5S;+S_aJ8Ld&LtJ$HRAst1Tx1n@=-rH|9@0d%GC>~A^TrcI*j}<A{M>ACN zNSOJN!lD3#sGjkx@)GNaH775Xuy01Wqex6?9160BYJ|+Fc^M~mP4di>;F08&p9GJ2 zTL%ZX(&x?zc;p7$Zol8{4p5ObHGj~P51u}wi7pVDGhV;nix1!-Ui~@hygGS}PB!I# zQ7-~X2qNnvsS$wLl17{hwT|csz;}61066i}FCYhcyhNW{*CsL15CFL^Xc0h~8mb6& z6APRC?}-oESXiltMWMJ^^UJu%PQ}|r+vv;jC-(fF2}W<kOV#|mZvYF#-xc%4s=n8{ zNWbomSF3#<0@TBWD^TcTLi#+fLq)R(<RrzM{1h*LL{JTFAE>q;MQX8fF1~pMq#Ks_ zh_lQSAWW58U(ng}(`HgCk|5_}u|~_hkl<Bvng{!WDTjpgby{mpk~2)4W~SV*YXmzy z$%eT>6N%BcuVLN*CcK{m<PYWbsukCh5t-c4fhYKmqwd-r9jG?TL_!xmY<Lkz0&OUh za=4SaJB+1}a2m%IL=xfX|K)ffuad`uelPVX_g86$M8Tx-WC|UsZ)p;tC&Nc6PoLa< zVrs_=s#YiXC<T{OAf!sJq*0B=6XI&p$cBeu7bvhg1Kc^_HHGFxvgvx*qnvS9P|g62 z=Yu6H)gw0?D$>p*8%2lI>}?7knYa~2k!D_;ZK6PT2AI@TR3~xi<fusU#6}aWIVnPt z0RA{fCaz2$&UY@tAU_LQrM^$dq=A91EL<K%(_Wxbb*i!;r-}i&4yb(N1JjUx1g}Ld z(c2>QV%Y!tD}72s2~l_oM7Q<&_oUnjYE(1zo?O?#J)a_)`8E1efLhd>idR3xJ@=?O z9ma{gb@&Bffba$y5QLPePyUruF8xHUf%pbWZWDS7?pvC`dYN+X;o-!Pp)-Df`|s5g z-ZM~dh8h&&z`WZr#jbLd*i|NwT;P||E>PC}h(052qTw+DStAyH0-3o=PA(Co296S5 z<<C<DXh2C=B=1x5u_uAO*O~wBgg_lf+Z8*(cl;3R2#sO2zktl3?D17fWhbw=;#HQ& zYmSK)vlb>9I%lIW5-b_bgLoEs2Ctk!W(D$XqgI~!V0FT5%HUqo3`zu0TCd0^rNB&( zMQDUFb><<vJUre!$nCNsJ46Xw`QXNagY+QVa_INe`sUvrk8foDiS9Q{jK{^nhf>6v zL>C-!F#f$nBb@l@$5dXWjp|QB8}bQHsye|$w+gg%jlpM58ewszgcm1RB|DE-;|!C^ zDM}$Loh&3DE{^-r{V|`SDNMAu;6d7$Q&AZzKsi3BMNyGbDye8rcAy|oa@yeIMlKBL z3xrPXbz5F&uBkm<qY=iMByBNSb3|S7%4;;p&`r@E$#=o~Wne92f=887#YP74sKP|Y z3^#>Wm7>TT2wG&r!4<(X+CA9jkQ_l>pwk-5$kI8oxqNk_0&Kh!?)2Un+#2E`O4VUJ zy?=&{7{R%(XriG#@cS`sawCo8xww+%lAD+d@BX38WlHxCnhSORh-K(zxOwM#^k^>u zqW&{|K#1i`pG#6NkbT69lABdrqalbm7gB99Uh-krpid0Piz_h~58(xRD`>O;ctNo$ zFTTSHBek6>RS7R8))z9evUBoztPCmcr2cRnHBowS4fG_K+>KGBPw>ApUx6mg5wh5l zF_plRvM#HHUFzHdiMfR#0&loBc?3}|HzD(^9B<r6tjBT-Z>NfKixFqaT%1qXb5I$T zrAYzAVjq%fG8{U0Ak4`%9Jn#LUUMyKZVVmqI_q-atAKTMvUxWqCK0$+U8@v>Ek;lM zD#XndswhoB&Iib$Fg6^N9i%FQK`Wqg5~!T?a*{moX(!J=phY|~H)SSHQiFXo0G$hA zLlBys2i-YCS4u%tLH41~>5Z0ivJ6Uw3QM{$eOYJ|;wdlz64sxPQ`cN1TA!+GjGi8c ziulTe{=x9xuU}~1*Y-m03YjJrHZg~Z8BDAXQJ{~WV5O||K>Q=-J`n#9slvlJ_B@Fs zVfqvQ@F4TVA+|M$zns)H>Gq&@)P;4Y<~E@s@)Fk&WX?md?x4-&V%?!&ig<@bU3a<A zYNE`+%?XcnB+FFD6ZkB)Xlfd`J)l{FY$gOJcu24qi96Z?ULRq?H`3`F)CP+(bNIsK z*<4no>k!Z6axkh2%p}KGXs#!+x2BOg<eYnA=i$R^vG>qx`@ZvM8ENeG=AoTOcQ=1? z*Aa_b>bm#{Z$UKl{O135B95L4)P(4;_<8m63en&Ev#}qAfAvl$GLE4G@V+RJ1y*>v z5`EAobw<hN3};F~0i0fVxegc(qGBdAhQ*7p6n$wtAVw8?&?}rmCN#ZijZ)qqZhx(A zDY^%V75*QMiwYe^GHjVNBC2*ktv+-P3`eoQ6XU`Q9}LsR#U9}N`WkIqwA+bEC&MdO zSfZ}QN$^ry{!M{b{v>$C0IzKF(^Et->)OMEWZ@38X+u1d;KJ7eAB_@b2xwZt>lt2? z>7^<vE=!U|O1XM)2W5e2sO})h6%2dCrXi+*e#l9!a7IefOgPDtS^eXlq9WwQ!+7Be z{d52)dqI-zjcGGFo!|=-M#r`0rZcPSev<t`y>%KuzZu|==)q_vts7`kieX^;A(6mR zDN}<IGV-WF$%xiy&E#xOp!Cyg^(cYXZ?H`3QzELi=#*w9n%BAb#zT)`EKhKKIww&j z%sULlGOXMQheY9+2Cwsj4~8dBEB&UZ)r4rRtVAzPUb+JNPpLc4q09mk*h3I{aU$Ex z$Fh*U!dpunV-;tHUVXT|<B^x|JM;YI;Z4u$!hh>qe(b?bC)S2W*=OemDTGcjaMTUG zuaf|u?<g8^w15=88A!sI>sNYURPj|lA4tc0Y*6t*_RxqWH2|cS<77EHf#F0cKY>uW zyZ~P*M@hI;OxcDpeSy<E7ciAmAz6_mfIL>>4!Ahi8inhWbGaZjrc2BN>FRLjQ`tAA z9fp;(LnZZ}_+6HD$HE7G^zFfC2Sb6HKq%4^3Hf^;?(W{#GT47lXyH6MQ8B-wvA(BA z^NYUkf4ixwcS}P{f8-{Q+g~y7mZ7$$Z!eu!>HBF53;R4_f3UH;vAVOZBV2v^?gvI| zus(Qi5abo$omUFaw-M#=HVAHH2TXJaQ4}sGfB+eajO|2s5YoAvm?R3{3ot#Y3{XgS z6yk+g{5>>w9+PxW?h)dlFODaqUAIRF%1qoECDd`_J|U;5*~#7;_6pJdE`E0OsYJt& z<aw83-sl@UG4IJ;QB*|}^Pb!lC8293x}qS{)KTW)5)H54v7=kS|9NYae00YBI_*(% zDB0u2JyJB~YAVPioV%e*J&-(i^jJv3IbM?mW(bG4RHD2lOYI0lZ^bG}!uc%9vvm}r z-!Vt}h#hZ%<ebGb8SlQYhxdFI%;Z6muY>zzZ~W$szeU94wi}{f^9oJ>x#uQGU>pvo zK>I;NWS>ojLpTWz)c3C-n5c0nQPPqjGh%bp2nwRE025S5DOialX6my_u@rbXkkJed zp)Qq?nU)36%st9g_~2(MnmI*QJ%Hv&O1e$aJM{otOfY5Is|ld#)~{-&qrN$W`nx2B zT)x)Q*<;zz?ro|HI`W-qhiJdCn(ymx49?f~?ksc`dINiukj&_liIoM`uksXvs|Wo^ zYViKkq}An1hAe7Bs)M9hN+BrhfMdZ0nOZPYM-To!61<@R1rjO%rAj&t=FEf9GmsHK zqBl8szGEeo=1cQ!vJIgML8hALs3{X=MC50=eix!-*{oCxP)DNVvo~0NI}-BxkP53W z6FU60m!h^=&8;47Q=z4KVLaP<9Bz8;INT220B*66;)$yE$BNaMfI^0Ni_1vCOfn5C z6+)ZIK`3kHqtXV#D>h?->SlxLPU}<B9mU+>L2oA&e&Ynldna-Nl&eF~a%O<X|5qTI z6!W<OM88NxfIKQhS0nrrpwD$6y0mxw`d)lSdlC?R%NGjy@FCp~vP~D~HQo!+W#)(w zEr)EA%7XG-NPLu`k#Ixm4oQA#QDv;ApgbL!6*cOrZse;v0BQ^<ue8hIbqV~Hb^!oR zVf?k$`V@V7W<haTxhBk0({pUm{29~*OOWT5<7;j&gk6DkM3}*?Zm9+@XIp?%dX%uk zs|h(Mr|{ObQ|Xj9l;Fi|N~a*Tc~cp$ZW%AlFZ1J7WNP!EUc5l0T-(@L^If#kdUtKl zzKVu@-Teob2hmLEv}NbrRRi+}+Fo9|;Y7pG$cpg>TfJU~PV>YciC)&(($U<{a*v)a zYEXJ@wJ&bD?Up}@QKz9*E4;4PL$#gFo#U;y>Y9Cy&fj)#=!eeN60cT!R?Q~uin>-2 z$K>%VD&9onD%jcdszDxhL<J>SCR$ig)Ri)Pl(#R+bHEFEjX!dBoYttjWHyNmuPvs_ zv6fQyjv(hymnC-@pb9k$g&v4uQ6zFAhDFL1N;{@Ey_y!kx<MDL(n-Oq>omn03tuB} zrBQlHsXA2|MIk45l`4Vy>r}c*A)LoOu1J4!jdzuD@vc%X%4nz5rW6ELuhUh^IpLj1 zXp~dBN^uqHt2#?@_33*z>Mo^ii=Q3)DQ_`_b;WyT@%ha_S4LztPoCd3x@KX1*X)|b z=LdX_plcTS9{<a2vq)3=>eg9$t|wi$e->JTE9tV6=IBN|XWAU`-k4a4f<vW>n0E&* z9mioQ$6+bqkV@WC;7Fo5l2$x*jwN4-#BqJ-s}Pych1za}OAT&Es!#%-S{0v)yq=A| zv&iC`jL~w;cBV4hnM%|Ef_uIqxaqaFc)^e=xFN4eISheoq7zpN#SXBtshrD;+;YAb z^>WyF2{!bmA(G>=8Tzv1w?-X0icMp|)2l~9)@Wwsd^$$MY<g!J`hSouNblM~`{5}s zoSRDdNj|tt1#ro7{rbc*F4mt`pm=Fqs$Y|EG{;mKKDG_(L+l)v=;GCXh0*ys&)GIW z6H;S>V1`LC!D+!e^tR;z!E7>V?nRp^v~c`#Q0Xv5ewPjS)B2yhCl*I4rABWc@_(CE zC~4t|yNXvo!96>1PbdZyyHsL=e4I#yzClbdQ&rP(Yp1G(mnQE1+;fThYp%YA`)}km zY?ESwBz^y%#RTgT%Gw*OqC0`n@v65k3kkyGhk$b@d<AyhXNX-_!nYbl!%rybkYRYY z8GkRL@=~)2(}=vw+yzf|(MW2V#Y(C>3?p5NF`ch_>LQor$Obv%1!u^;kn`xZ3gej< ziqtCe=sfhQRkZtZl%k$hePc{Q+J_c0w0(eIptI@zCnD7we4)+pkJ^6Y?Vh{6d0!(d zZTo!l(>D#r*7u&+-pXvl9i2m>|K8Bj_3Yf*lMmE;{Lg&r(H)x#LwP?e?VS7gj^Qow z=r6Xscd)Z*>*@8Iw?6S~ZiORQx{3Q8l|FB$&|{@s_~WGbA&{oD)1-E92-IgKULQ;) z&pBA{6eUf(G#I7Pkn+?DuDlWn;p!``DcX<haJ4Voh%*)8U#irA&BUvr$(tY>&`wWn z5J#^^L*p2=%~n#+s%yszsoz#|C#!wev2dn!xY8b)Y}5b_T-IqlSQ`{0bdSdf^AlaK z(C{*mub{>V`8zV<6Q@>}i5Ou~a*WW0l;mm5OX>SJ;qc%UTKZ`{uwEjru;aRYu(+7+ zPc*}tGJbjwbRxz%xoek_Z!x877mc6Z+>E%OQ!(rj7n}i{e9it{ibTF{4=;-%imBJ= zH5z$|4n-0t!=J3lL@W?Jyp#r5r38QF9i?h45RGejjMj^7A{IE~8nHm?*?%20jLX|3 zt7RH0qAJH*d|hme3)%^cB<6Dp^yEVxII{J)KiZ#|PY5gqrJv)$csQMugw5h$OcA|I zn$K4iLV$Qdom6g_2+rexT2#TbAqXS_e^mfPB@B_%6!@Fz4{;SFM4d{eN>G&uuNn1A zuBD#_i>I!$#Kh~vrf~9F8|xdVTCR^^%@K@>Ih59^P;w`r<OP%v>kBEdK0h=N1ty5~ z!8<ACk(+?H4ql+C2L0f$B$!C$bg2@onxImy1pC}dZk*SBeUK#U5=lfcS)rIh>-!TD z=V$^7|0^MPrZupeP$F_wIEY6QiUfM43QwShFbZx&@^h|$x7x-Gy#7nAjzt$&dbK@o zFA1*`8n0M53832{rO;5^hiWL3W|8~~KU4^gZSQGr?zv}ia}RClgWB2i@hfO=+0^vS zZ)!Zs4l)%Lo_H300R2K9>X&Cx#tiQ#Rtm>XqHAvAT^V@Ir<AXRT#;eRRpESacPb^D zX&uSb6>*QDnZI~fF3p6YgZ>Ys@Hwp`W}%S3ok52;&848)h5H>8DTz)GiSjyn&-H9p zYM&e)<P_SxXW`Oyy`g$)Ab9ZGUF&;8bqu+gfr_S{HJ$#&-D}MX9=v61x;8aN*HAOT z_SK!68sx3*VK(eJ6d&?F^~W7y%$a(gpywFmfF04%uH@dwle&&6k&G!pFO)$kK|)?Y z7qw;c8Kxm*giz>LcOWC7Fue=eVUh&XTaoEfc)j2MpW|gHKb$^ZR>~RvwBBi&_Y*c( z@|X+oe$}M@(vx7UbibYgW0JZ&5X)g4vt>JS3rGPYC<EMI4dn#SpFZ-(R7O7?*vi<S zdydwGLLa0rIiWEPUuX2x0c2KC&Vj?T1YAqekCdtK3RQaN1k@vXJ#JFeQF0O2@?Zf` zvzUB@(J9`H=8bxkhrlvIs?}FdFqu~+hasm=cte75O~fIm&t2QA@~82J5u%Vwy~MCa z3IGGx5s0`^_;G4CF_)j3%cBq8*XSmObZX64brkauVO_tin08ntFts-*`p~L9;>UY~ zj<<(Lo0f?V@sxikIuMWi&-MmYd&E;DcuJ4>$(=#bBR;gfsrS&T1=J(HWqrsv(HYc` z6@PZ0Ka}VVTIoMHsW+%bh4m@GdL|?SRhC~1+LXRl8I+x%w{p;1h}<x;8^q<d@Rzvz zF-O#Y$&|N-<bKB23>ph)5zLnSN<H`2!c&rHNhYqZ!rcecN$vWW)aj>^9QblK^8N8H z5v)6xuv~~*$WBX#X_AL-mI!~#c=MiAP#H6&S?IlZ$c|35|ILCnkj3BgOHpxNThEKZ z(+!mGpUzXG(@~L6+4X|VlZgfR8Oiw#AvB)wpXK6RQj3%lWHVl*cxH6JW+<*@C*vKW zWpwS{&tofCXu;rPU4cN?V}lFCqbILC*QO?Nw;zw6+<d&>r-^u%J)6+i^)2vO6IQE* zJwmhuGm?seayfJ!2PQ>mM(2P^98%Suy@WciAQ-^?hzq%D=*4`{JpzcOej!wCRs$T* z^P;tiF4a*~V&_UA;?>bi>P!dbQ4T+<oKKbRb}Qb6B!z4vD8VM@zpSeSyHVaCsR&<1 zJ*2);t|H{DUehbBm@hijUxl}c_YOU`u;zLAqE`fsy0I55JG-k^gjcq`dRO<!y1GAG z*Y|^MOIToOM@LUjN5@ielj@1)uOjH_=<J^CgTA}7>#n4(zoq1X1`k%=&w|`z(vmzB z*G$fWpicLtK{*pkp%_a6HiP*BVSXe#-HhlyA|vRxKwa=h3it_xq4*LpBVjkns4-cU zTtGd__}V~7#E5rc*rNZtyDI^%>N?No-nU3XAcPPIu}F_i0%WuzK&+NP4@t<9kOUTv zVp{?U<e&v1f$^Ti*mzB_UB-2Z$4(sLrm6doRm!+-f*m`>Nu1hKyK&;w>5Sv0*!3{3 z&3LA+)bBh0J-YWvPe7PyW?IC3cRR~}zJEFYIrl6RG8bwD)wp9Q#!-#2<0@Vps|*-d zKWdbPzh?C44@+U5zpqdC-{f!}IOaT!EDwPFqA+zH`?X-|yxy!uHuvFR4^!g}IrW?L z3b8ihSc&)ikNF;e51yv3;tCs>Lo*mJU4QY(5g*(6iA95{j@ap?1Dqw@xZ^`2Bo9;F z*`Vj@0f}6W#>ZL;+7q*N@!mKMh!{<B(B`h?f)!@wPHVEhu#R!(WYT^4?~eO!x7$&Z zV_%k->ypS~BsxQ1wsrjUX(zwq!K6!#7dSZ*Z?8RQy%{)waY=eDL9XMc-FI2X57R{f z-as6uv8Xt#w!v9>utJz9Dobf#5i2ZXG)-nL2QheL@3$T<Yi<rEl{H_3&Fp<I9QoIZ zZ{{6rw(G(**E|SZj@YkTUj#V54fzEy|I5t}>k`O}uK^!d7g0VghoSRJ<SeHo+B_^! zz+AA}nqI>r7<Z)ktHDWSUui18cE>{x`x>3Bw%_-4WK2FB8G0IQx#2SN!>6wc<@e^O z>`)H?Pv0qx=X}hCp~TKDazMp`Yfc}{;22!FoCKDU;F@CuJUxW~q-OvC^nVE8ClvN7 zq1hh|IV!pfGQoQHLOi)WnnP@3fJeT!HIH-|0=joi7=;N2x(u;+#ZPD$)aA7I2c~h7 zyqY%Clz~h<k%XZ~vDmoq!a!S3UVzO;z8t25eyo1`w&wZ&68&Sv;*X*~T5Lv<51Fl3 zU)p<p#prjyx*%9f2Fqn*6(Z;4Z16caAwfTs6LF_e^9<<XIwbXrt6ED++Nu^Wu4*eO zX{}mpr?1^zos(0&d+pj?H90vo?XVq~BQ^X%T!YoBWR4VOaA6}UY&$o%2s_*ADds08 z&no2h#Q2sf4~!gR>#8(-Q;`+l22<oNMbCd4%+PmQe)9`f7=?xMdL1+G^)bu|=e+RU z_Q>*|_V>-Rr<}!2xC&@}U1z5`Q^&E^m-T^OXJal_3&i@EsA>WUDjAevpin$4KX;Ab zy6u2SmI8Cu0P`&Vg><l9hxKW6I+!cvB;}@KF&$?)53`PkXZa35inOq<JNk~6V%*97 z&bsd0HikW%MP~M^RmjdG%z&P$KSpCArI8&z3-clYy;kW!hF;w$V?Le146HIS5XgX9 zT^Zn<9&Bb*gu-P|u@VdDKP^Cieq@Pmli67OJtg8RiD2glEL4xZB~z(+#VfLwq4$0T z7VBK+)8D6cKYkn>$!W7KS*vrznOcyY({0<`x2Ly05ZTonDSJA*ad}f;x^;4BrET>M zJu#<$+iJ|~uX?`wg`p4gtWyuhC#5Ih|NRs84cxrGzUIm7g4_Ea%}Jh<^w{40CB=Wy z-16~zurKlUdl=un8{c_mVQv{#n>!Id1+s>vgtT`s8OyTDHC7Kdi~DlZNpvY;EhX9e zE%v^Xk$~Rv)>&4GT|P9bQ)EsmH&&R%S>!X|L`71jJUe0X^fWfk@hFw^^G+zNyEHJ7 zU-&ds+)Qr%6l+RRrd6~a>q`Q&`9A!mO^dg)2Yzb3`fknQ_?+tZf07p8d8ji!&3|%W zU?|UeeJIcV=Baz`IrZPSzWnjfGgke_FN;i2+0OgUL*rBd8fCoxasuuOFzDuK?AI~_ z>)0+*-<PkRa1!-iL?^7QqLEFL=3$9GU12^OKYJd$MNA!*?US&~)Wx??VhfVp=@^<5 zS(N;2#-dDY`;xA=ePPdCrfdMi1*p>LV8)}f>%<~_G1jAPu<sHkG7coBXFBMt7}-0( zyZ4f}bB`_0v3oJuk9c;k@x|Pj$<7?Tr;RFrK7AD6eo{-Y>XtJw6v&L;R%&J*_B)DC z@<4-8bC(7UT}13Ur+WuS0KkZuNESpRiN0gzJP3}~C#^}b0YIVAHS2C069a*}N9`mN z8-<~~82ih>wj`{mo!Gwhy2)!kSDE-mihr+eS^c^>WA`5w*MOP$nCA^$lYf>{aliQT z41Ql5esuVBTm#-l|2u1cjJ;Iw&*naV_-Fm49QG-7++V4V!Fq;q)CJ#G#er?A2)^bq z`?Pu(N2~7#s)q0J>{|N=stM;??UQO2o>k-c7LK(zmg309k%yxZ$2B;%;b6R58JE}Q z@C~X)?9H^(e`NSm{~O5vd#X8*g7dXF^3<`wblhJL8bF6X39ZWya1N<s!RdHci(|iP z_WxR+xA{N9yDp^NqY467siXd$;d8;;K;PY{z6yrV`M0PFlw$xim*7k~+WktU`+Kn8 zVY#~A|7Yru?|D^)bDe*Is<NL`1$Z9zA5n+wV%2Gv3_t2`#dW1R1bhzpAI8z6!}A*J z1S0-@D#w?s=KJqcH-rB4U@_8|t>*Z1RJ!jORfBxj+Y400$$vHR*VvaJe2Hqsu^2}> z!{A(v^nV{zs@eX%TJ8Haa3YSt-Z!AiKzD}y5opCTpN+NkaNyYymIJue5pUe@#`9zL zf2jh*?+)ImT7oa(xK9-U`)wL`Vn6B#o*sUeywH3gFPy_}$Ic$@>d$e08^><~8z3hR zAIJ;u0lHdoUq@be56z3u)l-2a;78nJ9KlL;z2*h@Kwg-`E*?G$UhKp9-*CL(zX@e9 zd>}8p2jz_S<c0SDFNhI&68ulqjCl-Inx-DKZF?}Y2~%3*7Q%`<XS)SD@(PZ8In*C; z?u7ERfp^pc=K#J<!FH_|dx6mr9?+@1ICwr{zo_ctUQ@>y*WRXf;^=0&z$qutr{aB> z>VkEi3j%)D73kM>|9aGM>t1`J{Y&3%zQ=uMe4qM5{#O5^{*(Uq1EIhzf#-wC!Fz-6 z#I1{aK5i)fp@igw#)L@1nS`?w><PCdZcMx*@!Z6+iFZwWapD(~dL}(R>1UI^Oe#!j zN;)|?IQja?$CFc&_auLaogKGLc_gJL<z&jasTou2rXHU9<Ed{={VX*l_0H6@)0R(r zVtV}a=CqY*-$?t}jM+2lXWTjCll0~3htofq*);RmtkhXI&3b9p`Psk2P~F{gj%Liv zSe|h*<9x>X%vG5`46O`3H#ci;_1tswa_9Yae#QJ7=07rjU_sM@n-;vbFtl+0!q2i& zv)Z#B%Q}-al)Wtb-t1=<UAgFu#gQesOL~`_Tr!k%C%`y-#UGY-Ej_t(D7QNIrQA>Q zX5>}meK&t%{^JGyf*T6nD(oxr7iASaRdjCInq}WE_7_(bA6*_=er(0e6_2m1TKRs- zgR3^K`uXZrtADg+-kM*n`C{$7we@R%wC;*^k@d;zd)B{o<qcPUTDq!quxw&kd)Z4H z!W)im_;TYN8$T?+D{P0a2;Vf$-{J7l@KfQ_;ooga-Bi8l&Q0%Ege#6$yi>Ujf31~= zD-TyquX?EJ@y+?02WfC|oJE^4fHTAZ_cnTnak8${PZau-o`bhw`4e!TibJj~tbv~D zT*J4*I1zcy?{%x3Yd`#oJDlqP#!)=&TnE(xYl(9mr%qcn&UL(6W+yq<32KI2=3FPL zLi-x$deZ!p_WjOvlB&ouVa}-OS@$~6Us3s4PpAg$)6k1KPaRmLe>bi}*!{Hu-gZBp z?trd@aMz-`Fs3M^>hP=^GvB%qW+$XQ7c1QsspaT{EJgiPhV`FUN5wTUCEn7Jm=eBL z$GC7_p^-S-Kua&E=s@mWpv9Ye9dZq+*dg*k<7$+w8)e&}<L)1cor|yQeA|f<ehuj} zOgl=o2f4I@SGkz=&jW1={CO!IuVmgZA*4doT5t%)JCO(T>P2oL<kpVgQXtul+yv=^ zh|#A*F=i!7N}79BkN$1Z?{?x%hsK}}<zl?8xa$~sM~+HJ$-N6X<mvd#Q{wa@7E|s= zOw!hYboQaFmqSe*a_a|XA;>^3ek+_*DNTK#d=+xf!;Vt?%SBjI-ds&VC*Jj`g9z7# z@z>orAJp_1X)FZt1vsui%5q(ZtIMG?1U<WSnilIE4`^I>BgcA;5M^*buE>Khs3m$K zjF@QwU&)E=C@IO-c$5MgqEnBwq*Ua~==6x(|8?n^gjFzkGy-RleHSB^tsQ6`09L&k zD+xheqn)9J5nL&g)D+67k?;oSLN)GdwVY7@-IS}NQlOl~vIMjjW9f^|-DoT|qX(%9 zJ=D!Tcyd5X1Z|;cplH_~(A|wZTOb#-qI>Y$ieE~DD?PLUVMy&39kLHP5gH|n`+x%V zum@$PCeqUF!I|2>3p!GZ_|+pNSc*AWfBHY-=W?PB_P$1!s}|=*TvdZh8}!o#{Eo+m z5GbcEFV}I~fL1Ro2BqSleokAvLYMSUUqa?+q@)fyS`MCFg*vDjS4OhQ*<IjE3;07B z5Ib%p_2LprJ0#p(jMzpS`m_|$`gg#V(4LA7rxZ~JSmRQjs2L&sOFKll?9sMIERoPc z`K8UFBr+~j>d<y81RXS1s|RnoF*2tOl1G`N<`^pak*d@=v~Q+tZd}T0o0G28$8AWN z?|XGx29*}1O^eTZk9yAXivCdZx`1Op&QfZ=CFPyE{8FPyy+q1PJfTo%-;cP02lcC6 z(?oPkSYkuVBJadT3!1Edr4BuyZPgC^y4aAbtfwiDQZw(vd*Kvy-=t4Y8A`-fNSZx5 zY#(wKpM}=22k~5c;MT*`bt7@Ko1|Z)gZYq)v^=E9a3R`eksiYr2}NrpRQDqu=^}o_ zxF6SI)%c_nDf7PFdFGajyyY9lp-pN<OnN1f7vECyh)#>9j5Ly$=3Xe3_hRe25Q36K zTS-YKg?uj|JMo+;Qlg1RNY@}l!YvsoCb~NiPRe0&?9wSojX^2*O1t5<NH=AX(je%t zRFp;9YQcz7%6B{QXP#XM3y}lkTe)R(`OFY3C*MWaenxIYf{6&RAnn2j#$w(?#`QV6 z5Q3ftIc+S5!PaowV0$q{V&g2ilb%@d1xI?*2S5e+)vKjTkTsMDzNDVmQbt5}yfwQ) z#?=HOAby~+9?_ESrI%^%1^+rUMnpvHpI9KT+%Q#Y1Y=OAMMJ%m5cgQV2odN;EMjd+ z)&f25L8(M`rQSF4*A3b1*W3|WTpMXh&pKVCR^&dKPTEeR5iHku9B}Q$M$}4S)VVb{ z8gZ~5ZqU|bp2t6G7$tl295mWdHnyk?LWU-Ci&7|c39SRU$Z%sh>eb><O#i(C=}_aD z*CM3CI`7iZ7wux5AX3CSkhq%`l%OgWXdlv~4L33({4_S)Yd2_BsEuy>)-54z46Oo7 zObv+k$-J5o&1<nZw1F;f=8f_2y*{gHF^tCxqa9v--v`NKT^(()$rn?4Qb;R9tc@f| zojSTzMaxdAsS~0*!W%FBwMd067NW<RXtX~!9_>bsj29yQg=x2oRE5C-(UQ^9X?y^B zAFMwaie(f&k5?;QjvRW+dKGeut_!2v5aX5A@F|w96iMY9W0C0zF&AS4y0z_O2ue78 zG`^t}iY*{tTTyzxVeM@~(1WHA&F~>e1#1G)Sn^$-(yyWBF?R`VXcZ24xkN7}8tv#X z7n20h8|o%?kokzz&?69wOidI%O38#@#=~?G5&!2x(jnHI{vM^{0M3*VdV=(3yGG>M z%iU6q9r5VJXmqh-qphDohuol@-lfx*+Ko9#iRk&rGpWCK;f^&jwMd>*r-%amSJsNu zn*(?!{WIi`AmFX{sMoZ_q@STlsptWvf3ycC2pIm2kClr6TWa-a$5f(rVEc{rL`Y@f z*r2aBj;TNDG)45;_h~eQGO?=U5o-eBp&&pyjmPBr;UYyM6Kut{Y1uX$lzKC|?Cc4n zWuinFsUWYVMNSEemdx=>PnndQ#4qB#@qrIIJ`39iaxMHb6uN#OW4V5^gk{-d*&&9d z6iLlNo!%1_+w>=xFsudLw9Q*7skD3kxYCNXFzq>0dLt*)L(`ft$TBa|OW73rybnDS zrZrNa>*^YmmhXk@Zmlvt^5QK~(v40D&zK4=Idf;8(t2adpE!}0(RPT4GBjI6qw6Bk zqKnyW@mGx>Abu(J%-aSLy2vl~{hHDj>e63+zL(BBsV6Ag<F!l1lQ>G6NYmxCL5S{! zS|Rk@sk>h76NxbzN^TnYlD-DE2;A_(Gx@3@9<=oJ8LB0AEZ;j9sWfVtqc_SFSx$ox zWx})r#S4s<QR5SmPRiO+oTZJ*v}mbr#4qb6<J%I8-KZrfDP0Ip#93RreR-6B>B$hE zS>#Wo)5U<T1J*<Q?Lc_uCHy6l4BZwpb=n_N%N%(Y+9;D4KZQHfqBQxL5(pKoI%RqR zlp?oO#F?>Uwa+o0O4G*BZa&dCOWTbYF<t5_Yg|D*+T#)%+w0MvBFB2LCcBuHUXHFv zj;{RGgD#fHZ7aJL%6Qw}_J_1-hz_x2n~t(cTj18$<Q}C?>ZsVYVRZdxJUt^3)R$iT zkv8$MT>o!_mXqkO9p2WG(E-s9NkhB=_Sd=obeF>)(>67AN3@?H5=r?sQbOC$(wa7g zkrsv&EKRLWl*va^D#LAW-_<hBZ_!ydO@nxJt$neQyRp3O7_S%ShTu0eLzm0(v8@W} z!IL`KwC2U$N@-|IrIez<teMGwS_Vo1`vR!>)MwE;YOC~skQ?%b)`PloF^QK{Z-m6P zK`zJz$(t7UYe<9rE0oZk+G}!4XzZ`+6N((f#^X|P7AxuI5*umq!q_1bR{AL}PlMdL zwm3?5#^)kYBVVXPVz<aO;YKWPis8j#UaXBIDN_>23y}-v!h08MQ`b;0q~}R2<E8Xx zFb9J(`}ZZMXh|F|M{oK@!o2N=|Ns4D<I99AMU5k^oElX+(jR8N+QjlQgwxb1*1xO^ zy1*H+5r$X$@s@qGlqA|37k{ti8SVXy_Np0=R#kjs%9zynF7<4KHK09K4caSVKiFau z+ADC)z9aLMtpQhIl<#VU<QFQA6KKFMzgN}b+h--d!<XX-p{-l0-|+oBZON|2+eUn$ zuf>>wMud<w>Jg4#@V4U#)8_Z}8hy7J;cJi<rMDb&n&q1qTagS|k6+SSr@#C$PljU* zmSZdKdA$kG%AEXa5R3WpOCj5%<QXY##B(>-XsRj^M)D(Ng3Jb#L1->T+Wa=mw6^Q~ z*(2JBd>M=Jh#V;`#Ziafdc5U#%B_gSJ3ifta~;CTcT1*Bsz@#SR%?((y*_V3s-!@^ zcM4W)L)Rg1hS&tU8Z{NniKSymqSA=>93{i}%yqMVDwGiua+$Qasj&WM-a-fQ-{z#p zkpe7#HU5~gNXS?^I2NN8VVEn^<_I0Zo~ZGgrWYOIxGRCAdLwcny)3uOb1%I_ek>1S z$$*h5rbX@$k7|uV1Mn*cN0^d4VSGvt<$HsJprk3%O;k--!BBcK$iFS%rr<8=jV=Yt zb+yLKMO|<vg_INKXnILp9y3qUZ0MoPQkIM+xTsLeNC|TyuX)EDs0oy$T42g|Mhhhm z!^f>Uu1S^gqVYA_V#1kt7qSq7k;$8ByJe?z5KEzuToyDgo~~H0OCM8XzVGB|-)0wV zB1bqdekZQ3hJ9>>jWvF$jPRl-)unOcTaFtj#%}@sR$-h#5q=9XKFf>^D$=9#^pL#a zT}Ug|Kd!iCTRzKg1uzoMk1>6i+kmlo2^igwh<$}8VJFwg*ym-6O2I6jR5cAF{n9YD zJsoRV%)(siIT+KIi5%y`rq0K#fQ9Hu%f`2j#Tfmb1HLXrnez0gr9#lR4D>F?c!rgr zauvp!t-)HS>(qL6rRM4et(#$OH!4*XtU@(pgLbD5a$FBdXoNIx12#>tFxRNBU@r4l z)wSw6b-ik_g6ex1Z+}SrgF31{RClQdF&Fqd*m?dbD^A_3ev6f39=77G1oeP5K^;~< zRqt4d>T&f$^||^?ombygf303o|EQh;t~=DXQOErP95|zXuKr2=QoX8vrT!fV{<C^b zy{`TSe&{)MME#3;L%j)(eWd<F-Gi|M9q?AkyDs$v__P<kEPZ75RPTqccor?Io8S-M zjI|DKQK!_C*yHIojCK6F`dEE}@sbhD>iB#0mimo_4c4$i<zy?_nqs9`Q>|3&#yj0g zvu0T7n6>^acGdkm^^zJ?f2&?rcdNg$W~v{npIEc3+3J34j+J3$26yc_*t5GpPK9zR zitF#{$j{H;DCg3A=j_~<70P{?6Rxb-xi8_l5D}eofpga3@mz<;d71NE$HV<{=YEBA zUg?}odZlt-;G|nnFrmF;SATEY&X#?<<yB!=&c$JWd4F#=Z^|7y!e#lI4x9_sDQoyp z#Ckw&j>OkBov^G2x1R_HbDHKxlDBV;q}Jo&j_q?I!JOtMg?YH;5ns;6NFY=`fW4qG z?Fu)3+yu&<n;_qOM{Y1h%LyMJDt}JJ-9D^rteO$tk4Om!7yppC-5yEJQP!56`?e_c EKXHMmdjJ3c diff --git a/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff b/app/design/frontend/Magento/plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff deleted file mode 100644 index 42ca5dc005aabb888fac8dbc810c5c20f88e67b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26700 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 VksCy`0d1-%@&Et<Q7em4006vjP&EJm diff --git a/app/design/frontend/Magento/plushe/i18n/en_US.csv b/app/design/frontend/Magento/plushe/i18n/en_US.csv deleted file mode 100644 index 062b8524da1..00000000000 --- a/app/design/frontend/Magento/plushe/i18n/en_US.csv +++ /dev/null @@ -1,4 +0,0 @@ -"%1 items","%1" -"1 item","1" -"My Cart (1 item)","My Cart (1)" -"My Cart (%1 items)","My Cart (%1)" diff --git a/app/design/frontend/Magento/plushe/images/banner1.jpg b/app/design/frontend/Magento/plushe/images/banner1.jpg deleted file mode 100644 index 5f91054dab522771221d545690835a01f72e33cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27699 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 M`M=xYf`C8&+4=E}!2kdN diff --git a/app/design/frontend/Magento/plushe/images/banner2.jpg b/app/design/frontend/Magento/plushe/images/banner2.jpg deleted file mode 100644 index 6d00c1a05d5b0267f165ae6a843135851f3eaff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20777 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 F|Jf(FTGs#o diff --git a/app/design/frontend/Magento/plushe/images/banner3.jpg b/app/design/frontend/Magento/plushe/images/banner3.jpg deleted file mode 100644 index fff706df31cc47159c1560b272b3129c8967f04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11208 zcmbVxWmr|)*6^Z3x<O*o9edMA$ELeGHVvEDgb30|H%NE4O1Bb{Qqm<zi+}<G3J4$P z+;h&o@AKa0{qc<-YtAv}=rQJ4Yd!OR>Haf7q2T9a4*<%_8~`TpZ@51K2<3fXF3$iY z0QF&63jppvqqsYIdwYoS^16BPSlhbW*zv&J;k<s<9=u>4K3+gv%Fn|Z=3?g!vaxe; za+6^A*7cSF<YX(sU?`~0r|uzV=jf#5kFeAA*U*FcyTC+k8KfjZ;(lU&a1Xehw>8KQ z?&{_x<|o1Mr*N@{`5()?44^+ryj>(1Wd6_!GE&z9$+;u!K!QAc+%P^NK9CTY2h1-Z zEG*0gg7AU)c=;f_U<fx@Sd1Sc#>WTx3m6`>A#Cl%bmXCb>3YB<82)nV>C>k?Px*P= z5e~dyQBl!9WI!O?4;0*9&)mGN{kYw{82^?aZ|4O=IC*$Gxx0b>kZ5h=?&B@N@L=h` zT!4G1tN$bTzeWoV|HH38slB{)?EY=Wf2H=)d*)%st7GTo?t_5YJ&-g0&HNC%|69=? zgb&t;X(F5+l49*D?+){U+qrow%S$jk?C{t+*^2RjMfkvAVF5m22%nG$7%U2r<rC$X z6$FclD1Zgzg#VWD-*{z(zye^1yn+Z=K^_cNfXF~a1)y>eD1@J1NI+CT=x<(SH!p8% zH<;budYvBh{>3Z*fAWgSA?&QZ-4S~3?yi4VfR>}Xx4W04y9Y>4R}iFb4Rdn)1OFpE z|MFJe4&mf$XA4ER!$E(>SIp_Z=ogexkQWh==jZ4Dm)|17V5p3cjJ${d1i~*OEX(j0 zukHU&%y=J+;r*jH{-ap_UV5m&Kc@eb{sZ#Q;jwdjI5CKaqj7%%;Qd+ffbF}7BZzdr z3Pb?N{{YIv3<dS!iGqrT`Ujw)qx}i!=olE77#QeSSlHNDSUCR^kWf%i&`{B^(9yAQ zA7MSh#m9R9eEdI&{u*%ph5b*yf3W*^03jxD2ppmy5dz4BNGOCz_k%zg03f3vAtC*{ zgCL^-NDn4qA_0G_|K}Fc9~PryU=lnK01tMfpkksUq5a_@K!}V&4<<sD(Y8kOWPlKd zrpW4~@{<(5>6@_$D`EWp`4pi`D$p+nOJjP_jf{kfgo2EQjE457TBLuNiP5Y*zZWw= zNJ8JF^nE_nnUQ7WCq>+^05~W}4<@4!0#d+rNlm$v<NJ|`pa~bIU|y54u6)kA2rJGI zaGoE+XraDC^sDjQn4|whq+Fk+gjGwR)d*C<*_Cn-<y<F5KG_4C07T42K&1dqa3x7K zBzd>oN}9O<H9|=pJKr2;`iZHw$ce@e4&A-hiBXYJbB3YqD2whH^x{6JX;^Mq+R#5+ zTdf$u2l<+HoLSU+LVvQy9)8+w@1Onp^M}Zp<BE5o^1FtYHKGeuPU(qEsn4pzZ17%4 z40u6Te4s(fy+!_Y@W|HY9NjmmFTHDHdnU~zGDUk`iV1bWahZlJjne#VNUpnSZ0tBC zp^TLZ0Zv-8)>2h@_!HIv#u9igD`P8^PBjpSSB9#p39h?+Xa=oT4%I_26{2*qrYo3A z9;LiKOMYe(DL1$L>)RdpaPQ4!Z-wOW9B$9Y3X>2IFYIp?N?i+bt@d6EK@C{?vSH4} zBuE(m@eH3oRYPkR+bl(M2f{Ajc|QKDL3Wr(7+KwN1Q->BRsqQ+!EvNuQdSE|Nl{Mi zr_+(O!Kl{dK5{H-cGX7kZb}c?S%%%>ZI*>beSf#7_ltF;lw6;=f~!xII?PHpWrWID zltZ@aOS4jfG<6DG>s3u?R~%ZJU!;#f9RqlQz}xuPS<JlO@D;u7D@O6eYDzCrPH2oY z8%2p(4Lcgesho{#Di;M)C>HEm%Phx}vdmsg(rQgMvlw4)dPY3}bFrfl+)5V7_*-_n zrvQ4`9B#tvkf_RRyDyjYyp*$&Ei(S>QAM0wzB5eHm|GYcr$?*!o*s}>hJ+I$M0`|~ z)2iE7;a^LLBQ7*7s!kta+cq_W1yXAbve*5|8xu$7pYEY7ZLFTEa&}iOb&7ksd4bC) z1jt#yEI<Z#ADl(^P>UiRNUFCC*F>rQu~hL1v-dzPP(hbFk&+!`o2!PLuJXjxb9KtS z*+l9$1_gES3}R#Lip14tJ22RO?H;)F+qe#t+^3M!%c0)@bynah(*;fbZm0c$gM}wf zqRY`blnvf^tTI}CA$tDEwvW%|G0D=BWVIM<N!03bj#4^z8XFb@t0Wo3%IIp7sz7U} zEgkd&XTvoj!oz;TK_8t|%eyx616+`9X#31aI4D>~WP3mT9#Db=q$SU?6QQdrDP<{P z!N|9W<zy?Uk*mp~!N8dux-1wCNL+MTITmJtd4erc!jtLtI+}KRq@3RBl8I-!Ft=CT z1ba!$W4!bkH;Qqrsqb!zQ*fY)eMxqFMA(YX6dzmeV^{pNwjn`IEC9Z)f6QI<k(u32 z>h#>m^6^s*^*5LLV3Wkgjl$u|u-05k1MBYIQtsMcxsn>6*hXJUeJm*d{O+T%yXCFd ztDC^dV8oMWZlkNiYLxKsOu9L!p`!2U-3Gczj}SL^C#3a2&5I*j%^RUJYCVOF0ZL^l zE%TlyoKTrhPH)nfg}1lt>)U%Kx|T8@HrqG%rEz^%?^_nTYQt_TS`_=d8`3u=?$2Wm zuC6{%?=tptNdGtkm(m?~D?VOj1IJM#SwsqRXkb^g@#isa)#JJ;MJk8esS<DIPyu^c zlas5~Ep0HnOY@3@YnyxEjh7|&%g@}noGRVEP0fOh7b4fj-lKV8p3=iJZ3)*csv3D= zxf?P0XPy{m+jlZQbAl&$U{{g_=%xv20}!R3C0)ekA;91k1$Ek5W%b7;xXaoy+p^Uw z4f+MjMlo(eqc?RKTWgrD$Yd&@_PvG%?O6U+7S_$WA`nGZ#TYC>m(Ys{Ly%+Sg{|`n z{Hd_`mj+$J3xcoW*_`IfJ_FC2`s;^_G&zpu_|axMMW;>c-)Bw|Wg|S^LGrxyO{jLp zU0Z!yw<f$oS+qf_1kY-Avhn*qCf@yW9a{P_lfoVMq_OX_%57rY)5ZYF$-H2xH~n3w zhUUJIiua2LZ^+is+GI=k^~N0>U@HxubUCfrLW$ndvZn5iFX?$qCcaf=wSJ;Q@Ba&| zlFMq_JeWegP&3LHBLQ@$uni~cOP8d33z@DS(5+_VnGN$9h<b9mxx_W4HSERPt&e@# z_!ZXgflGjnJF4!%Y{6`MygT~R)?GIt@Z*}9Yleg1tjVdCT94^^zJHgz+tRq78;oF! znp~nw+<geI#)sy$sX)DWaP^=FhPfiBDMYO#WX^OiFQJ`|VsbRVXLp!dlH;+eft-`` z#A?v8-B~(H_TUr6+XchP+G?Zf=dIfc4}E=}<LIR=fsIkST??E;MoLGX+$wT#X@c=O zT^T}2wYAMx&~E}Ub?CqhB?BwC;BZ=SVJgMTfKF{!9?O;QQMFf@5HyqW5bfranXnNs zQ}RclNg;KHPrD2MIPvw-#g?}-!sik}@AKU5|LVIcb|W#i`(DlY^<v?0RYH_^lZ)A5 z1Z;0hk=D7%$`CQ~^$OvWrXM9)Vai;W?KR<;PA&Eencs0p9;HMhS1v(g=pJZSe5Nn0 zU#h{P@$1ZN$>Y1b?)10Ys55<+A<*vP7seEGe6J6!dz|+Gsf&8Tmp58JjG{UpxxI*w zwWBew*t)LG<80K5?~$fnpk&L<h-lh*&ynH$RLuNUyJ2fW|Ja9?OmxxqP0RPzOZ_Kv zG;irPUKyq~X8#bsJG2=;N{5vZM<}8#Cn#tS^Ybt$E>O{-k*)QwMz^Zdk@`Sinq(J| zHmTAUA_ATVxGKmGd)Of1nHBK%W#UQ<r<o^q7Y^M?_yzrD4gM<0IDHP;=}H-TF)E;g z`OM~4MVRbprY)}~IcvhfXIvKkLxOCvW4^g!oa>eT`TGs<=pwBe-U;#a$(N^JLrs57 ztZw|)K>y~+J%8RSE&t(K5p6Lsj}wDOEr~h5;5asr&?~3@!xjHw=7m_5LO+e!QrV1< zj0%^Tt&W;<+{h1(NXe#mr&=S8^f+pMBuXs2q0}~2#m%FAF}k+u(_=6s(L=Zyje2ev z&l)b*4o*8elNMbJt@S+l6WrPftuJA@ZVJt?%a@Pg37{`mOeh6-mCWtcg74$jM@`g} z%vY_1d<_;{h^ce0$`>al_?z11?zmst+bK^pu;?!Vh+o{R^VGin#rBYBCuFQmT@96N z!P)d~GGB1JkF~KRGp8G;8-MGO)Dcgf+7BqBc1Cb9*RP&te;SS2Bg-()vV`^H#D!(; zDpgg1C<3|a;UH%Xw@Hj}&QdQ7hJEG^p4iyXS>qG{!}ViJ5!ZNonl(lk=j*Cw{&S8A zAbQRpXBOs<Dt>lAwEW1{rGfr}PR#(GZ5*99k;)n}YN8caZ%s~kK^>+ZZl(IcYzKm! z5pDw91NHPTM85D4Yslv%H9#7f03~WYVN~M*5=A_Ez4UBPDZWUYX&VPZ5Q!RPCGrQ2 z_O|&juVUR|MAa<Fe4F8gn{@psx#N!y&$YD;rvv?>U*g0OBnT;{zm}axM#NR(dhY1F zZh$aXvT%8T$}UNc-n;GFHO5!+^Iw*k)eNPYP}OC0xlOcP2>5o@mYl-h%v0p~eSddL z;>&Stq^M{r=&@ISQcmBq?PYNIQ=^IxDLxUkv7m*9v-(v)lg5yRo>qzE9@SZ4*urq3 z)l^3KX2y}KDe3FhF}1oHd!o^PetlD@`!`F{msOt=JG~mAUMcB`EDGv6CXA0Q7Moh~ zT78}bJJei%T{njfxv9gF2LvPC#%s5d+)Gd61j$rQH5Gnb=lHmGS)4!#{Z!rxWw4-~ z{o>mCRbB1Qf|q1HRQ;+;LzB0+_i@7e)_!EdY!Bpb?+s1Lrg)iukFU%S?cwN*zjuz2 zXH=7iItaKuPHeydw)B=$>}fvQ*GQ4nbjQYxW1Din_ee;q8tU-3N3e6XxDgAq!1d~8 zm5(-;8;{RV&^;P#2wy?`>dy9zt^^M++?Sg46G#qSmXB&z-4#p^Ldnk3GG)JtcbI<> z5EzJUo~+K7z3t7prlA|VO!T-1MsF-j2Ws}NAa{zTN8UZbCl|N98!_U!F1Uldny~&Q zjs`*bckfT%l{-(Cw1_(EMHW{%yniHZf?JU_LP<W6tzI`H+@)A_yxy97(CF3tzDyeF zb>CWp_^)+17Hy^6cJ*>;Pd%-`-O-jM8FM12Tj`*)W{TZ$b6j+6B+M&zhK;91$yWS3 zc)O3al=)yHS1h5ip~z^No?M*F7(QfdbSmCKN}l0<Li6^lV1~?v*q3XN@UE6xv|}>L zFu3?uX+c-CNHF4eQCmK~q#fGD&j>&A@afn9zvBu;ne6av;=P4suc@%D-L$n^*Fd6y zd2<aDHTV6@%AY^QTjX)!8AapMZ#I`Qlf((t!*VgS`UCZrav^PK)o!lD72Cr%ajOco z7{@koJ#vg0{&?%JOMUdynp5SQqr)a5U6O=cwEHEJ;(p$m$38Ld$hrwsYu0!SpQ#wf zX-&x{ie^=IMFKhWna{S^ach`Sa)wJiTJCo0_z{%wN)qXt&@prA*+h+W9F81b%tdYR zO+pZKiP!s7aY5*s*1KUg`smWDDW=u5J&cKp2vj)N5g`6!%g2X1)cj@@S{UKQLptv1 zRQtW<nK;>ndu;xssbC#^Q<zlx!*!wz_ZsEhKC)AMIhZlGgX8Ek`BTiJlbf<{s{{6& zagpe-BD?XVhFUj83ya_9)(t|bDpH^>pKUu=dl@h&4wxdbuWT<GE?vEov~Y)K(aZ)3 z3p>~G#d{Cu+V9dl7bmO8KN&l=+ev3Crj|h5D9-&lHRto{#}pB<&jM%6(-SgKoT{`k zw3;Ge2_LJM)FtRIcqV5@ivmr)ke0BkN{qPOh$w;f3V|N+Osjc9`o2f9E~Vj=I7*uc z6RIffSr&!lx^gNP7BW8WA!hrz66TXOF}<PnyRFWn_EeekaWWKYGBOt$JH|>h-nFq> zmte!HfZx%}V~wm0LQh0&FsClcqj*IHf8j-)nnbbR11W_r9M&B*0nvw5#8v!>S)3!e zwF#3!`KOEA77BuAQXR&vjl-(|185fHg!+@M&y@K(F)4LCibejEo6#J!t$&bm2kNZv zcn=>k5ucW1H?-EZPNuaa<%+al&!eZco8J~3OyHxkCLCc4$Tl8-OgV{P0_CB2<A80V z=F?N#<VZ3Kwq#BD5@Is%2v;c1&x?*9Ym!;W2PbIX*$FP{a5j{3yuuL0nOjbCA?md2 z>5@kz5@NPw2(q*vtm@ay$G6gD_|a)`t?Sh8SLfIK61Y-;A2P)doM&5!YX@LYT9P<_ z(si3g;-h^=VD1n*c0;v$xPhD65$=ZC5Sld)SirJOEftE&+47V0zxft6;TtYV78u)i ze-hOU_;ldU-6I~ncrM;kK~>}em!l>xH9mWO>@YeTIqc;-cY+GkAuF*Gp}SyYw6xK& zs*6#=6LwX9ygFOkGDg9YLYp^a(MLqiThkg^A#`mOYP3C6iyYxPu%aD=%J`_Tg-X88 zu#)c}y%DE1Dwt@m>di-1HG2{Ja(|-Ca61DPG1rKATS)S|x?@Y6*p<2F`2m>?pEep_ zwMl6!O{Q9Xb3$W&OYVvjqv}A`D!uq=Wz2Dc`Q^La(zW@M$R#>uo#?8*WF6(iZ-U>G zSWFh>;p&_$^C>YU2@TsGcN6wj4qQ<ms#;YReZ4mi?WS%xnbzR$t4>$el}2Jppxw<_ z+xknqVNF&G(W<lr@zI@5trQ=Hi26)?6|P(CsXlsQ(T)#$k)QD<30C*ZuuHQi)JYB% zNDjv<^=YlV^Jd)VgdHGlT+Y2gJHHuORWGY#o02-ptQ66;?AyeCuN_^H=r}i-w`0B; z);#qwTX*wmdRcsOTVO_B4p$Vq2Y6r2?Yp+>tc}d-MF>Qtk8SW+U>omUh_xPD#?C6^ z-z9lo4sRb!MXih~p4I-M*|@FSP~ZL?w2|Ex>Vz?RYF>A~^2DLT)MDxQv*YC?fbJ_A zW!Bs8n>F__|HC+WbDrMbbsq-#R_oIK(&P})#~?I|y)?Fu=<W9a!31<jeL!fS?F3gU zi!{y5bAH;>bwN|mAwIXE!3B0j8mz>gXa58v$8*n&o3O>0^Be_b&??TU%2XYy;{g^Y zdLs;dfo`SrOdR7--A!lh$oKd~K>P9&7U`IejAX$?Cml`p-X2M&+md4WIbG&G0uf$q zPdwEZwXs}~UGD+r)+cAmc{K4B3x@K00%E2GvmCyA8{QgPz$DHmE`KieC4**}gUcY= zB~PziZnx4K;+8x0<J+mWSGcs>{GJYdG>QJ6<b%Pq@RPxx`EMog1h>+9n`eGn<x5iY zo9h)|KNWd`7rXHJ#zFJ76LqCSt2?XF6UUEm2#c1@8u;mEhu5~|g&OVt;1yiqnBy#8 zJFUY_n7;|S#n5C~g2LtZmb3v|pIwo6WPc)!mAZzpuRj@*9P*)|ym+Kphcw{@jBS7G z#UaOaLY%H~UeiwbT_x(<xlMCE2+Q&wLSs@u!D6NaTY6Q3@uP&oBYEa)y&P#m04MCj zL<cg$6&=D}CJ-_tf@AB&5xd6b=Flv5n4OT<uMvAKk-)dp!#&nO@%H8++m)w*AEv5l zCj#-3f?011&fga5K0=sMq7g;12r+k)G@1xW4-QA^r$M=$8Hfq<vaI%Z>Z=u6*uD*P zjy<s)zp)yJMlan$Mm>8weRo+aH8WZ~0?d4(3oDnlvzve9wUf?L(P~mkn^U6>&*u09 zVJL1YR>;b6_4mwF9Jp5uQ>uyO&pa-b9z;X8rSGGj7N9X$HX>?3)QyQ`rAp}-)C6Rj zWe#nSEw0LtDGjkmZ&z{Fq!=1_ADukOts>Eo9*j)SouHqq<BV)+&hH3P6;caYFDM8! ze&PIV&p&k0HrhdivvnxbpGhh<oFBUCDbZ501Sp{rAV5_;q;veGwaaZ5w}+g8-35CC zw(n5U2`PbEGC>8***8mV_P0kiQK{(5{^bz{uME-2=KJ*J^zwGVl59;8Pec^PZ!U%J z)}IyFJ^JygD)Wn_b{cbp4gWiKrSu-CEHYC2DZ4P!@+cxBC6Z}}AeotAxpUIELaXD0 z0X`+k$JEpv+xe;vlR>IM(z3Iy^h6o7Zc;!QlPx`mSgypB7TXwy{r&CsR;rEWyRn_m z?eVFNq{#+~dh(H;$|9s@;FnNCLC=`H@{s5c)lJ(~UsX+J^toRKEv&Z_w4y^OLi{4W zq?qctWRjkm@D#_O=sk|dKhXPOuL%_@IX!&D-nz5w3}#TFK;MZJ;`ydH$kDK?>zVQ+ z35_em1odfkCY+|HjJ{5$43p|Y7*BMk{irdZFj_K>^t$l<0*l~1kjeY)QUoRD9-!bE z*pHKrPeu2|Y?6eSuwu@O=;%l3MZnTMq7NgAe6(8dG%<&={P(ke+cDQ>sLYRZA<-QV zvt94b(`juO`17ncu2{C@XI%GzMpvcx?`q?OOc$n;+_yW8_^n%Bz1?shp4&>D8csb_ z3`bsy*MNw6tHIDeo$DPpbZCGt)L+w)bW}%9I7MF8HfqM6dDf+uvxuIVvs2A8MJ*yB z)dU0O9ZPX0-U>HSN53_{>mqN_I~rTHQWGHgD9JIh=*)2A$G9UGCy(=i#X|as88j5- zd&SRb^qN)WS{L&xwuA<;_+LwSa3FN^tv2eH{1BY=CUkE<sXh}KmyWOzi0;~-hjKk9 zeD$>R#?Zi--q8!TTc~Vh@J$cVqvb*6AaXv)bRplPU6IxAyZD&7f+(3d6QsfUL?|un z`$B7vejdwQKJ9MXs`haJT72j{`Ex#-H+=ynwm*6e>!a}L+@E%4-&NASJN^0MV-iQ* z#%gP+&%-5JU=_yecyWvgSS~A?q{g?T!(dh}sg*Vfao;W#dI^C+nV8%JqvvJ~<f#h* zg}NFQID($~w9oH>XW~8;R7ZkgoO5bO6NPAB46Kz;jYYb8pJ)_Xp#v=TPXp9^BZ*&j z;;v+2wUxhiFw2i}nuQ%m(zer>b|VTU3zbFJ7tg-0sh(XwpFxIly*sr(X#0BR^IMU8 zl*{5CxD$z95K4P#M2Nm@%NO<Yu+9I#W7Yf-Rq38of}312^d7Kwzm$Uk05v*mwazln z08QvH9y_KO3umj4hS(M!pUR;gqnWT?CtO9r?OVigdTnC9vEpSZ4V6h|!B_6}nqu7A zuKeDW0Bxh}ED)_pIH}NAL>prhhVReUt5hn~U#~=QKx%um2p$HphU|Pi_I$E|Vr|KQ zAVQtv&x9_13O6tB0n_Is1LS1Z6RvJhHOxm=I>1MQ!@WU-&I}p!%W6&g`*57tQ3Fbz z<FX!%0e8#Ya`$%BJ~;K<lU{A~T3mR{Mn-L4j?94PX0zI!S{3!<XgPGWlr3>tA3Obs z6Kn8h5PKlnVI-3>0eV8c)>}_~164H^qr&A=?bOK@IE{q3;CM!JQ^Y+$m%XxvdD$U5 z(QIad<60x15-HDPq5<dLyb9oWOFjRFcfC~e%TCqPssP)`(v$dzK-TRXI{nEc8Qp!C zfeZb!Yu9JX+ovK8bI+F@2?@}hf)W0Hp5N~QK^J+)w<<hPrbDSH3%P9B+df`eV;}J{ z2d=3D>eSX8>=j1|WmIYG#y((xk~*wrL8adIgEEDGU22o%k(qVT>+=<_9fGyr5yw*2 zC49A0*3Sx0!?NAw)w&!*(G69p=|?3vBsiQdIc~Ja4Tq2FI^KSm4SQ$^zngvs;_33F zCX~WyL`Dv`{J0+eRpJ$zvjFoxLsMm+?pU<f9I;sRkDcS2qei|P8)q#a8heIsBBYbG zq?A8rhN-DFg<=#q0;vR9n|Ao|`cgU@Rl5&&Kw`06Yo=7S7pgHMcy{V1HRZV%-%Tav zIlCk*7K)pSpkI-)nZ|5CPm3OO-)8K?2`_%Dan>gC+DTg8{Kg0O2;|RKL|$&7kFJva zY&g<=udzS&v_LrL)5h_w=AP~Dj3a_91YIEt;(;U}kg(l+0&5et-lHlfc>ZDeHbZKp zwwX4+mtVN;L^e9>9D_%jDV{Hpbl?@FP3=65hOkWdL$zzhPBW%{YwUmnW3s-<s83yV z1e1j#rLwMF7k3nt$_!uoLS5DNi83u%j6QzS;i`nyfKaSyns&Z5WB43he)ae!=evW0 z`_jV)Q;MD6DQjmhKiz51dk1lcFJI|)e}+fxhU|1+iQ^g<u2c6m|IG0Kqnw%M3OJH4 zSE?pmc^ZF*J}1;kFI$OgbdvrUYR^703lhghpYZH<0^$`%?GJ1YsBO2Ew^Njh1&D>C zm1KTwB9!DY3A)7V!9SAkuxk(WeWsmLl|sZGi?~(6cfGS034DC0O=E`{>))#S7i6kr zKUCFzy?yPuh03RIyWP_Q0UqJWG^4BynD3)Py6yqcjaCT}A9s?7oxbt&_dbexyUDsP z9M$&i9vgz~GpdyBE9<RbaygAx%4mHm*`${OM;8#E6+>+n(0R6$8Xt`&X~Rh0LE=5| zd+;sq@r~vBY^CYv(Phtj;PHjpK|t{D%45&%>k`)CwJl-NIX{IW)K$j@sX+vGtufEb z9gdt`{uAS2P|ZRDp<%OQf<nlSNZp5s?z;ZBTq09f9MNm-s-ABmtSIn_(h#cf)PNW$ z?Wd;V4Y`b9R1VcNm6eljyWz@kk~#=;uZw(9xe?iZ;apgxn>A)u77}HkG;6|Jrfv9% zJw~L08I=G9JLY=HTli|E3njvObTs+>=_6&q)G!zgmWR#^E>(%;AlC}Su~7u)920qn z>)Bp1L5K_nV-Bj`!$s<Ek)WNWC1uR7+UvMaEMY6p<O#8QDb61itOprnOT^Q0omyZ1 zJZyDf_NEmjK%YqbdX^c7;{%mbdpD89n>x-T=@Z^oym}{Op{}x=bQ18>t<;P?1{u%7 zY?2aVR0D@6H{X)^jO6H4UxU1QJem-|d*nOC+`)~^0GMZBZ|zGW36#|=7{z``-#szC zePeJ;#c=GWl^`D-AB1FYpC0$oA^v+3X3&N1V?3C3#1Q?c70C%x*{DRHi1c%V*n*0d z;Y0cuUWQ#`gct!+$e1bp(#)?XZ?`i18%4d018V0Mmq+gb^5)~sJuD9qo{Z3<ERq*Y z_R>@}B?gMRuPM2X9c_gVu+Sl3(TFSD5v!jiveJWOQpj1u{VG)SrAj;`lqpSzp=2R~ z$G!$9A9|W7qW#MmCmhl^D)!wqOVgUft(gxQRvg+|eT=BI>3`YQv>NEd^M7uA+-d5~ ztsO&v`tbEDkMuB*sA5PzBADm)n);H&tV_kP`U2BA72DO4e*z`Nz>GfRTs8CC!$H+A z%T~%S-?1zj;TC{)8d|5+;hgInslIlFAdSh7Ed2tDu=}U_NS!1tB?iw=^?3!8T;2oM zSNA~d>iIoTIekt+y;$_DqNeqF3$H}2hhE_o&cyl$CdlJwvbLsVuAw^LIAzRRDn8iO zUFLu(2ve02EY)vNZqm-}RVqu^4-(Ta+w{#G#LBUELzuV><kwgXG+NDk3|map_Q!bp z`sX3UY>FA;Y00kM%<rllGa{=&(I^&+0dCXdtFvrV^OQJz#yf+rI#y@D*?tusqQ8#m z{IX$N|GK*}r)FMXR`h(Y)un6Imt8yM&&cQi%@47$@w4J*qmqkUIXCQPPpJxoN5v-k zWaX=8nsQc3@+MWiv`1#OW>xSjVB*w28`nP@djW#+rqV=yI{>!>eacL;LkeL`OnTqq zpTEY_=Me5tNjR~8nJO~UrceT{dCh3%zn4dj)QIYHDFhAIPpDHErBT@%x6p|h$Xyw0 zn0t5k`T0`_armGt7uFO8hsSJW{9@a(@fk}-3I=@)&&jifG!*E9O>J#naTQcLWg<~k zJXQ}cL%*^0`)v5EdsoKFadS;o_T-SqM0vDG1GN#isj9?O@-J~?k4{~Kdw_8=tC!w) z^gJfS%6teT6`>c=Z;maSh4TcKrKHx38I26W3}FDGkz=gW&M>J!<J3Qk<k^sge-+^y zuGX#IsetE^%IN%v(0Q{hf}B^gFYW=#O!Cu@FDveWL!7RL5Bd^#Y8HI8swm^7ES*>R zN^Rp8^K^7n%#ZJZ^dQigf#`**+B2N7AKGW*2YRTD@e=J`qUn5|`?}RU%bg8{LE1Pd zWB7Y0*^lxaYCWD>Zk;dEwJ#JDXiwz7iKHx0^)VJ9wH;-j92mR@Fh`wJq18-WLvj%M z8Bq=;PHLn~ofr%oNAaj?b}Tfl0ko`mN_uc=Cj!T~z44`9jGhvp0t-#awNI08rhvs& z6HF@|5-~?IVP`QHWk0llf1Lj-27eC75BIvm$0S2WxG_A>(zBF5HTBF(bQc%h%*Mn} zIN?$LYEZc_Y5pl0$NHgm%O!4SE)ZXs8^Nj$ztu4xBiv-Okh#2@8@;0_Q5?yEky~Nt z<h2qlRU6|$f<gtdRq8Z5@EZe_2YBPixb_;bw<waub;3+=`(=4!Ww8L6FjPrm#wx8D zo<@Exkwz_fbSB8dD~d?=f7yz31MkVLRnXthD?^}UYX{V@J182~2fhDk_&edrrwxfR zn1s#Pj`yKG=%-C7nOz`W!`0Ag&C3ei+3DSEwa=LMfWTYCI`hu?M+@o8!pE*b*{Hw# z@iR*}*D7f9G`~mvW<Pa(?s~<<Y&T0#Q<?r6Kj{F|Nnh2@kh<OEZL#p<z+D`knD8CI zR_90SP+R}0NRLUdE^8ZO;TIES@syxN$jA<L$mRCbp=$CkaPsP7###VR>1mjS5-~?} zDowOrok@3^S`@j4tTxP$DT0ETjRc)39UBFeBnE~tq0ES^rskabufqJ#+#LDVuRjj< zC0B*Eg43+SKZord!F;17UPYh4`bNzMhl-wZ|6EJaH=0MjPMQlw`0;(8KhYd}9(E*2 z^1Jrj0Te^az1gYBC@oQyXRDT^_X~V(>s*|R>O5fJxcrTC^~B{ht}IhKN+?b#kFayI zj}N4q(g0e4`+K!rx4of#p2$1%8TwS%@T(W|9Zz~ydo(`QI~L@Oi|^E>9CYbx3hF5r z>gY3>$hQ2vP75pAu-KGEW?@Q6o%m?{;>|dbT~(@=NKM$sFfrh@7TRWV7yy!qegR>p zr0}uLWquPvIC7z*G#K;0QjJV4R^-7o_MHBly`M@6*-aE6o_2|rTu-HiB>}3Hqx5G= z>^f>t&~qXKJS{E*nG24TGfIaX#w?YxMW~&feL3L_IL@t5M~-}Nr>-ck=#lpev`&Ck zNd`F-9bYeohDMR$vmAXQYAaYrT5~!g?2&ZzpB-U{IhATYJ?me{Us)KCWXE-T`qXqH zzl+d}Vo92?zK6-a!*jc{yHIBJ<l@Xn-=#OX6gJ_Ax02~vfb&u$(m@?u!8C}+QP#m8 zB>=Q0U4W{A$P}QLV@9d$T{jV-pQki=m@FmcU@}cU%P72HtYE$+W1)k5Q3UHIDa7L! zFJwKAlTIdT%VPt($;~9Ya40Om-7Wm44GQV|Y-*iER4eJw2>v;hsD3`$ki&aUzW%kO zWBwS*myNL&?=gVRRa@^Ours{(#-_ZskLh-J$8%A6>#vt0ArQwr%JvvB_Ls-`fW@;1 zM^Q&`zRTk=<&<8Af#@T?rJ`cRYgjQrbIF|Re&~<B98Gtk#(p04!LVuZP?4b{%fxJ9 zZ-wmRUNS1umKMWmjVumo1huqxR`yKd;b)`D_2gGaqITg!6)>%<Mh*{y=Ygy;+dl22 zvF{rRD23po=eoxW_UK*D^!+$R2$Y#e5njy3ldJxX$qfHl`Tx<X4gfVqu70Nkp(uE3 zQ|FX(R(B#(UdW!FB|}YydpOz+`L_9J@A5_qn9S-fTaiFJj@$jsD_C_}y<_Kw!{#nA z`28X@QY++&MI`+*ek|vwLaAyVw&w(|x~m$K&RI~RJ_kx&r$0MWOo44x72Tc5KKjO_ zbloF2S2AccGqq4Ob>l9H|9w65M%5SZ+uYe=EYennt}jKo0zYBzX-K1_GMBA*}y% z186E-$YBqbF1<al37-CXnRFW`Mf`oLQoMif=x*cC{~maB5479^zfP~9iRTBUr(T)0 mo2B(#VnObgvnN+~Q7@Y$rO*!aPB}Qgaj@YRR-@6~FaJLoNEX8Y diff --git a/app/design/frontend/Magento/plushe/images/banner4.jpg b/app/design/frontend/Magento/plushe/images/banner4.jpg deleted file mode 100644 index efc84cbe21a2e99a70b33fc11603586107c8e4ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18920 zcmbSyWmH_<vS8yDAOs8UZo%E%p>YoytQ+?b0zra9<E{-fmOyX~?h+gtcRENQcmfRH zefPeZS?jI&G4-R*u6@d@cAverJS{zK0bVQmJ2?OVs;cY&Ou+w!r(*ztf{(3B000Sq z`rNGp06cA>xH)=zyNmJgfW5e_?c8kaxozD*JpR`1JiOd*cmNX8{_fVcF81EEHumqF zz>@T5?cMaWPIi*?MuM7eG~MOx9i3DHJ?-@Zwe)QRU2H||=%uA-CH%$wLGB=XZ);kA zkSo|r%wLlJU&6(n+y8X)(9`~l#M?!ZUiKfYw8ok`wDNAA_OycBZ@6sV2)&^d;^pS$ z7Z4T}=A`9&!~2Hk4Id9L9~ZB%7(bubn>V!o2Kr}ho^}pmKn10L>w3l{>HqDNpPwJM zA3wL7=Q|!=QBl!<WbpBEJyURb1%SP+{kgzi4F8d!VDDw?>E!P1<OZhwN20Zjn~%37 z{j;V2<pRiEQ}e$C|BulEf&TI9U({aSK>Pn~#{Wp|r61sK&jYmga`W-DwSOjO_z&}Q z?Ec@1{vmv}Moin&={YIZt_p6pJ|KIrx2l39{qq}cJ10A_H@qTmczJ~d-U#!(5fb6$ z73GtABg!u)$SW$M$SWW({2v+r6R(^QuL8fUoPr3iq5?0kBA=|1sDP3@pAsKGzmR~a zfY5(<Rl#1~)?i!v|LApk*86W>`Tr-cn7pUGwYQt6zMGrte=0!7(aqb<%hAo9R$fn# zR@2(n3H%TKPkR2#TLpVhCtrIzB~LdH?Z4tH=JY@47nD_05D`(}=jZ<~zeR+3m1Kov z6+{I1`1nPH<>>#-Yxn;XGoEK-c>XDl|D#y`)Ad|||1|%*^q-Oc9z6Eo=Mm%iJT#t8 z0eJr^c!1sa=OKvn1P6ozkpCM{o?9rW&%Y?BXsG`H8amp)0396z0}}%S9SaK^8w=~j z{|!heC@5&CXjtgzShzS?IJo$D&w!8rFQR`xUi=sKfAjq}_VgV<fC)eV5GY6l0AvCr z6au8Den9oJf#@hmNY9V|z_VHC7)Z#NSlCDa<mXra=R2f-j7G<J33xUK83hd;6$Kp) z73JB-=Y9YI8XY>X>?>VsdO{43&}2R$%sM$BLlGl!&kq}ZJ(6Ero?%!Jd0VCw($~)x zAR(h6qoAWdhv8oekdO&b=y+eDqRHx7dk}^u7t!+({i^HvA&0)ja1Qk3CnkAX0lavo zeWoJ-NCR&087S3NFzNVSLCOXm--^UQyf5g7V?x#9Pl-~FX=9qgVDu5ZttY_(kOHwa z_HGP9_zAIjk%rFfAzfB9ZZ$Ll0&<V|O*Qy=^^}FWPtI^xd8Wq9<6DK8xfgLzSay+R zIf<%8{^*Khn*n8o5A$D{v(s9G6**J0;bqj_Dw)d(Y}40rJ?<a%Z|~%^@dIGJ2Xc6f z%5*Ki#&R!J&RWV%X~mgX+v(&J)uLXBuGCKjxtPU-)J;cG`Sj_PNs2+@e3ftxRTLK1 zeZRlbjBakKZ5A10iO$}O?h}wgPQxe3i)#A9iZ-g)Wk+p5`Vox{c}+7XfzgYYvQCCY z8b%pVo?IMbX*=9&j?<Y?vafA#kjzdd%f&M;djwO`AHb?ibX8R^ff}m)5f4r)<DZiY ztIQ0QLH>vazy=TjSf4)(g-HKFk#KT%MiRywIAFu4$fQeYj<Tm!^eNvzdB2=+B4mh* zv$pNklTSW@$^JO9@vkh36Deh5m#v3@)9{qO%or~7#PZ+A8K5$uo6+wzx=T%g?D9H! zzPItub!d>R`ttgCK*kQ903csofJa>=^QwC+3#FF=2j}*E$57b3?OUKLM^+%b#-wd^ zLD3*%1NnupY<m67f=NQJfTvt^z0OBLVKGCRR*;}M-ug!TfKc7v$cauuk)KZhvt%FM z`yOeP<T<!J1no9|_E)tw5aM{KWqA36Jsq2&vPXvQT_TV>A_T>BE{;<&u2u;p57*u@ zA-M;SQ7rNHMt|X`?@sWXEq#TQ*F$^LxCPXk<*4q3<LDnx?fSU#FtjH)2R{u~jK|YD zcz4t`*l=<?o}BDPE@E(@Kkz!q6hgX9&T~s1S*${*ijf#<`#U69Q;>5&&CZ#00M9Xi zBe|kQ$7yc4{JkRMQh8``apAB2u_XB5&_yeJ)%no;aJWIlpkMaiX_!c~2iQhYv7%6^ zKFDvg0?a=YofqO(2eG33D_^K4snEfNv9LoACU&YpD2ZZG7*0&6q{q6Ix-(O=+eN{Q zrj@5yiM|mjbQ_cwx+f6LMN3=WM~CuJB9)y4Ec^*4skoA3`~W7-KRXZ&{~|H@1`1{S zY=j8jabaS0bygL_nWtDg$>Go_t%AcoOxXwiuBKl(1)3$ESve{?^`CTpk!F>*2aQ7- z_?C^gk!2Z|a*Xm?CuFT(H~F3X5+<)MO*VM@cqE+gu<i;f-L5m1P?#G@<Df5XX)NQ= zJcQdTAU9SVf>r_ycp!f6-b!N<)LATsJ&nRzG``@6kxr`Y*_?N8yQ&Sj_6YVWZA?3w zL$`c;!!X{()QiEmhl)Gx2Uot)zz(#BKZQIHcRqkdC*YQ$-wi21Hf!nuPXPT3-rj6k zxrvpqv1p*VE?XT-2Dgv+MH)0+IwLD#VSOcpzeaMs4=R*PW0+;~1aLo7X>Iwbrmk5R z1!hmGGEtsTN3<AG5FL#|x<wV=zH6so+w5YT+xo2zG*3zPxbUG<QIigHu1ZR+<1l*r zweaNiSeWiiaiD+2(K#_FLp*>lHrqkFP8@oTtjh%DDwyxbx8AeJ5g+=SJknhsSC?RS z$}LCPAEE61s+Nn;9^X%F(Rhp@Puw%oQKxhxaj+2a8H>_LhRrlE`3XSDzGPm8PdlrV z^u7^lZE5SgS=1lo3`~4$9AiLN8Vl=(N|uJ+&THN<*Np6jb+7pkv$1|KHOIO`)*LQv zUf2rHa`hE{2O+l$OpFI_rIQ?0z8iy^Fer$?I+lhQ<`%Cs{8dT*4w+7H+g~buKF6sd zUqp~NO=Upae|@c_;qgeX<(_%P;}6F8@^^doc&6%o+T!0>lHQp|dVBDTzR1zsbIClV z!kcd)BPnLaJlkPLIinw(z?DycZRm~Hsrt#zGFE~u(_?$VeZ2B1bQMxZ-NP}lJB{^< zgj2+aJj9P_&c%&%nqFvcifO=GI{*u#x3-v_BgF4<Jh#d4C{EWJ)VY@R%EUS731C9z zjOA7B|4}-VBOz^i`NB`|D4(^jZ3iSGjHYDX{flEd-<=4F2xO=u5KcR0y9U|eQF3i* z#*qK4O(jA;>+HnNSCx$L3aOUr5U(p5`TlmrmM$v+s*opAA(C!!)MC%JX_ylWaTPJj z*=w~2gV!>C`viA%Xe;*rdaTwz3+7?knEL*k#vN>)a5$zptUW9$rWfNgG@1&IKzW;! z^EdbN%;V^9z7%lHeAhu$IFVs$MKZztJHq|+R8oQ&8mH@M(D%CGBng=yk?c>L3bvjN zFkF}>7psdE(|}aqU;0s1Rt9-5TSIwd-88i0(~0@kCZYLDLYp13fq~4eh@=T6RJMMp zMp60^6`Gb;26M$O@7;uca+;3#9h-o4n@OR%9TX?)`7G{xlKPiZC+*HBTu~7{;whQ7 z=<aY^qV&Jhk;yx0j1?cl*{t~HVY&zUE~zQ01v$ZgUOz7CXMpn+RcX$&=Zqmtq`rn+ zyk#PYx^b=p*_dz>uBNkeB6ALt#_!Z)`nD}<4V?MCT-<xH%^z;u2}mlss%$ovQ(mih ze$Z@MO^$bElaysMvj#IRtzNNg7%sJPoH!1C;VujM^V%%d2P!#aetdG(EWA%j)8hN6 zD9R~hQaU`St=LBG6v93u@-gV@qy}3Mq^euyRlDM@S}E{{P)Vnhx+wz;r(*Ze5+#Gz z+U!X*&0xFgix8A=83j(fyqp!#+8pQKa=J3BbJ*0kyx1PLaslm!t*vJ5<zOMv`ZBtl zSLR>egoH9RG_;{|@Md}&kLq9~G@9S|(Eyj0n%ZzrD{T*MN?W>qW>0X`r-L#o6z#%L znNqeH|2Px5rdOh4(*G4aP>SS|OW(v<&4x57j_bz-qPJP4sn3#peFBt%B(%byP+B0Y z04hUzFg`OARlzn$F#A^WQX(=lS(8OZ(Fo}Ms%?l$prWp@R7ph`faB6zXadxZOn^#2 z2*1Z{G{u`_|E-9<drt4M3QcckjD$xcKpt45$cQxi;>zZNZJ>s0H;v%(yXn~sHCKg@ zX5(Fr+BTR=SxhV-0UiVK9Bs*`In@|cX3H>lEf(9jZ%#iZ^hT3dnLP+YLI?|~b_c(| zegkzWKm@bAV9Pj^vHHMhwACu8{dK&tQiz?<5#ec<5teESLjFlt$XT^aU#sIeHgQWV zs)wTTJ1?erduRUTu+L;>y?p@Wbz~vuCNPH_qIoIQEf%YKkTDRySmtmiL6`a?h3>F+ zSAWz@J-%hunwsM>GOVr5t!AVG#@K<yCYE+YR?{q4olY%(JodS`qScV%VNRlkJN%ow z=9ekB;h=%P^~u8+;cVg|ZNhk5zK#CSfm%+>#Yv5c3BMIbb_1<9ROXc&nYOMlJBqq# zY<#1MUBS0U)%HejlkSkegp{@>n0NjJzCT}2Or_c}-QBr<igl)_fzCuQ70yWesMfWj zGE(3=!+PPGlQ3`HvmM|U;6Ap%^%Ed;ioe<8H}5+%N$7|z^Pj~1cWe>RT{g|Af}|hw zYQWQ1M5<WY;W!55Wzbp?fv+cfx4*eR#S2K}+o9M5CL(Cy={v07<?_U5_S&ej8p~ib zV?t-zdUdOahlsGMrCSnl+@H<Ot9?E+`Rem$8&lo;aYohR(i$O)@aBw@xvO&9`;qX~ zI40KAV^x@%)Hgy=v}g@BRcs^>d%rowrwRrgm5TNRyg2A_+At!LwUrLcs>hx5RSko~ zEJCm)?kk_R6NgQj-4^4k=A;~)B$Wf5h4$pj4O_!{|0}B-_*WsZn8?P}K=MO-llOtL zM;@pN<a1QR@n%U8W|1$uPiYB8x2ycNHBFMDgUVhnj%($f8A#43#)4>5PluhQ4@yH; z*`<BkA%9GKg~Xd)ib<uM6`d}+o0<6HDV@fGENIBB{6C%8u_+zIlsr0;R6J~x!W*ZB zABM=}l@%+3`f0!u-L-smZ#TOsvaNijWea!hRy_Nv^~_THPXx&An!3j&8+i<if5;4u z>hp|3N%c{8T*_-eCB*{+iGyus7$(qdubW%NZseUWZv)=ypfc~V*HMb-%a~EEr=bMB z1WV2{G6yi+SRXb2(VK^fn!oq89#}iBqWd^p%6>jin`(zWSDVTL?c3BUy)r+tR8MO> zv;+n74Z-18lFhi!Nhp1+*g8J+ob%V|ztphwArmh8>T!GM#IDELuopHE6@!>gt0+w_ z{3<w^nx73!8^}{*pEJxNwDQoP)3tnC0&7&Z8Bvp^HZ|~J#rdc&u;UCXjf$l(w}KqE zUM!<apb1kGvN~3(l@i*~;XKs2RDS<Z5;T`Cpe}q`L>gfxSFW(95P)ZEl9CCaDQ4$X ziX-BAS3p0Y;4BB$#=BQb8)$oP^_BgeQ^CEirkBuwo}I?VNg);1JU#o3iB5)Zv^N#W z(Q-s(R#TSwQVo$t?AbTg{+s+$%oopz<v%nWd<tjf%Xh-SJ6EP#4=Qy{k>yt0nlT}O z&b+D+^JYw{Z+q<A50W2b7UBF(Btg_M_a$PskPLPK*Z1>0mCRbe50&f|NF4IA;cZC( zQj+@ipTS)?UV<^Y<?$LbyT@ifb@ewIO-=`cQGA9Xvtq5T&@B^=%c$jUnPj&^3z7T% z=AQtMzKDSl>ogL}8G-{YBh=+Zsi;8h276a#Nr`n`k3Urm-^M<}O)g7|U5uMC^*lN* zt0unTuw$Vqpn8Y)wh3L6*BrISn()VVtgph?uUv(RITzLLB(Q|!f2>+A`Ai*M@YTo% z4zTi*>;!tE$y9B-<b=eATUiB^ZHRwBl+0`-t;g3yv9kw9*;OPN?03`)Ogmx{$=kkb z42F8`@^m#^ztRBnqv1|Ao%7D|c&3FFg#-vTEv)p1ggJ=kR9!r}e)DjG1A(be0JSKp z*}{j?r6&OP8dXg+`yj`vb=sdXQEC6b?zi#Sb#LbI-;9d9XKy{>s^0GGHOncu{&3EJ z%lW20B|1_Z)0*Tjdq#6J&1UC7m50X@faQ$vg#%K^Hy$kXzsTdhPk^@C_$tC)oy1lG zzuF;U;WKOeV^9WX2!B)EPwdTx#_8Yzp~_m1oOgK*CV285lw}XQ$~;F>{Q=UWJEgV@ zZria;{qV<mV*D**?qBUjsiqeWaEZyIckFkia@3cCJQZKa+V=a!!iAYiC6Z6rxUvtX z?vL#+C%y=H(>+A$-WL|66ule|ltuV*vHKD7P_>vT4m)LN_$Aii8xtNIc%6k<t@gcc z<YD=fbL<5-%hVM4YxKRe84t1A&Zq7nY{(2oTEu#h1%h$4C{stF&3y5wRb1=*qXmi8 z?ms=5&+DyeWedO$diTCHTbCf8hlvCM)coEFENARJT~-z_e|=YPNHAB7-15l+M@wVh zB8KI5E+RF@5d^D^ugG*TGXuWSPhUWf4=XvXy&-lp=>J2hrM5>WH}plr9ZBZpG8^Cu z&)gA$`YK{60;RVwbCmzoZFc_t(~*PXagdXxn=@hBkOh*n87s{MA5TbD_scVt+7OQB zt7@T)2}&b`j|gb7D46AP4C9{qjcAH>#_nK1H=7qp>5#cylKu}B9G@GRW;Iv0U@q{= z1#c`w)BEh6dhG{qe$YM#r*eFf2CKC0z7~Y?1-IGgucj55I(3KD&n?vVxx7_S3yGsg zg_&A!MOc$B_1-!n?5~905E)t^y9+uaUg^u)G87n&hk4t;pG5Mm$=<&g@f`DyQfQ=Z zE0LbVtvmND;r&WBzK<KV_35eg%g%Cd`I5fAX9XTZUuxFAG64H5eCvV64`%GN^9}`x z&&)c!%K2sRHzIRw`LMPx$z&xc;9(+{i3Rb#oN*YK#0g>4_!+n;{Hqx}x<O%PM#ktG zh2PapWn@pGd+rnRLW(i&J`r&pK=S>>*vyjPM=Kf1J|~_6h6>6PV9-TFm_OqOp(LDA zYVir+vuu%JpV4<iR-gQ!>=X8gxUzq(QiWR6GD$+wjEv;kr+Q1?c>e_fvD{dKdWlo` zgRXso_p}#H0G`Y}0l%_x&IDU`A#z>O><}ze6#J&WyzbiiwY<;4en#Ja;2%qbe{FOi zu++XO|DFTN>#6faR}`&g-W%ESs-aVlH2122I&D(g&xErHQ!}17{)F6FG{S^Iqn7H( zV>hC>$C8r0%|(|Zf2f`E$fYiJcF&I+gsz#i#718oH}AiioeFzd2<M96qEc&BVUg`$ zFk8JWt*8lF9!tC$AT{#%LyAz?4Ib_>yP(Ya7#byy11e`|6(88|kRw+%QU$>5kUaF| zlXLUDt@qW;?QCE*&AS%j;yyiVzbLav_@^0_JT%5W(XYKNP2Q(1%`cmiJu(tIUTUcw ztk|_|I8lqsA2OYhRi%yjK`Jkhrs^v!^qWM!eB3P}-Z^4ri$S91n(2o<FHiqyD8|0) zbENU+JxpHK@W1%LugzHG)O=*bdsfNhn(H7K_Lm7&((ko2`v5`9!Yjt@d{(Im@oo8! zpU$f&35QLy$3-Q%VsU8f4d*dT!&}Zb{q-q0bwv(Ni#3A3=QTE@ql|=Y*T4GmMQ)V} zljI3dw%;)&*;baxIc5D|(-)hzxcm9KzsI)j^@43*LgYsk;G*@M>b7P;j{6*9auV?~ zrHb>`6|eMH=jCjg_c2`bTe6Lf>Cq9Y(~?VYsdYO&Vx=0j-{Vh6W}r?`6!{gUW}EC- z>wYWSf-_@f+mHYe5^2(?A-A)pzPv6KYI%L7b9jVDuIts;i&sCn8KDblHY5=^Y>Zy0 z6ne1)JHoI6x2(=qMAylH(wHE=n<%SvjIX?G{}Vtx*m{?5jExqxkUF*^bS@=mF{gm& z!H5V(J}=esIMf2a;BB?xciVT4_pk09w4I5E{ASZ&bh8-k{chjiw3>l3Lh`Fdl}kvr z6{!?v(?%k6EmZa52|%Tpyac{+(Sx@5rGM~#IE*&+TCa1HDM70EgHQCWWQ;UbCm@ZL z?d=ob@EW`Il!fV{lKYNm<UC0Dx8dJMn&y2)X6pw*_>7&}dV8<K*<?e6C^sRV$nP#f zo3u!MXxTwZZTNy&bIs7tJgcbfk_^GFj)s#h3Z09;JQ4CaS8UZ@R+@F467g|yDR2MI z)1j8eQ*sVsM4y;2*Nvq%(>!=we|vFF`lZt>wpM#0X?5~^gCFjo<mNTf``wH~uljrJ zr4y@G$&JyD+8rRx{MxjBZI62tCgAvO&?HhNd~(!voKOx7v^%;RdBJsCUk_^eA{xR+ zFn0#*=|(jEM9JU&3!5Ftiw$DJEWaaosC@!dN>%ra^HaODqhQbN29tm#iU>y|C+?RC z!~z$ZH50Su0OZEm$I4C(@E)PGk=yOgbqvwLhmjp)<v!_vDYM0sCjbYE$L_w(Z-{W! z2j}!~RbY5*l@<1?E>3gHLW}3QyRMV+7=4!eBH>&P<TfFPH?9lyj;qH9tmMHlEHu-W z>%2f>#xiu$=;h}bKcr`$*`gGsESTBX7N;d-&6*?TnAwZ-!PNBgTIx;}9wSj~;mQ$9 zRcN)C8EZg(esHDhky#W*>rKZ<+ylBU$maZofIc)r0hsGEge0WW9?GV&D5q^7h{q3l zZ00`5-s9=k)3$jWwzl7)Wb>&vljiuO6MPlizd4?i4S89l;86zEZHX;W^+@w+*iuXR z9#c=~F<h&w&1Z(=PAAJXu1zKJT$_$n^TT5j*cMIojI4UEbkv>ID|F^OZexHAnW@<f z%dP^@lJSAgJ*hl-b}{Nr7p7q?k^ZjL?Z=|npZfz?T55bN?v5o-0I`_W*`JDCX&=%l zA8o|lch&F1nJOk=i-uivY@`CUYY9<|zZ7cVDUf(xe@cp0z8PVmo#DM*YN+b_R6JP} zg;+l%OB64kjh5Z}0;QE@LoQbC&vm}%Y;hlzxsYHhP4->qoN>;`pKHSzLZ@<A2-3-9 zbR}90D)p6|*wYtqxYOS%f=7HJn2&tWw|7?&91E^zfxbJWOTWe2wfra)TBGAsXqxIm zX1oP|#Ld;e8Rc?dgAp(wD1rX^!|_1fnW~uZAB?mf&T>f&t1q3iA>+F|o%ou$Yi9iT zU9YD^Lq9dF>X{9w>d1q4XlS8BL@EHjGeL6`rK&YH5d*4qjO0Hiqhk6wBVF;-&N5fh zjwfMsfnLqTEf+XwP;dZD?`2yQkEkk-2wK8t6>XcUWbq%3u~X|0%M5jXr^2<(b}PqU zqjMv@g51zo-2_|m^^8F3gF6P7UuV*8+g_Q`fdT$kDdz2embJ;VkB?7QMrg0<KEYqY zEy3r7>C^O;Z)6c3MpVpVn5LnfBTc18D{tl}w&J>}G~Juo9ystrg`NQRZbn~uZ_wZI z(9CjmQ+-6(t6`?4Bvbx+G$-OE)J~~r>7x8;(T*c(YZ;55;I<i)4LVYE3g4hm#)8Og zZ##e^T5gnBybef?hj3us+B2|z@4|#&ERw3dhE}kkhpN;PdC`$N=4efjYE|6uT1x*& zog9=)lHqq=5RW-LUgl^yjlkjF>+t4Jf>+PMix=MZCcl=C5JtfjjkVzD>7dSmb`Q<U z`hoQiu_qGfYW$f_a-;SI2wg@lBOJd9x_&m(mtA3)UEzN7@OCwUnR^@SWj7{)E2Wqg zy$g;ffZpRe16VUh*b9`&^#thn8XvW!2TmvC6VpCzx>KIi3DeKHHofAiw#+b!+F@Y6 zzjXOHacH#s;ds53)nvRO<fvVH3Qv2D%+K79j@6OUnL>=Hw7eIK7Ef%^%B4PSA@{3t z?z*RYL#}mPd;TOyv#ME02^)QR#W?a!CZ{vDjqMV8?>+)JSFGPyfq=3?T)JOZRB|Tr zvx$l|8%lPJ0biD_yNX13s4he+s_G_dg;Q`f5+#&xhLxV{nGe{sS`QI9MV!Wki@>X& zCk{tC(_!qXW4|1VPL+4`fF#Mbgat8$JNQH|{jJn;!7aP8aE+ASHC$0UP3`nASIYSQ zRR&8_64-0$^^6(ulKE*&t*)#d)9^o)t?<gBSL|9mDA|&3c{qUa_uQg;%!UR`%W+nJ zn`G;KXeu6w_wKSd+-75^NOuEk(cx`tBb*EwSrgOrSDa3sE>W-bFH^D{taA=ANovwJ zZCd$;291%H|FR><7+J@5Q)i{*g}KEGQ9e^n=!wpk5+o4YmQ7Ep3~&s)lf9&t62iLE zMkrg?P7ZlNo&1N+lgHMV^akFJl@TpLlBnW-)%~sfRS_gxJI9#M`wq{;1q*LO=iq)Q z3bAK&4`G{*NWdv&^{kEI$F$Nm)$F{Kka4hjh0k78?8xoQLfrZ*ApTq4=jdD4UExA| zYY}9~4t{Bo&5-)is^1EfTws<wB|J6VY3>)!0`z1<UO4@5$t;DhoPUWl%-S|Prrg|@ zFx``($5%zlMS%h$Gw1n*^EP(9Bqniey+N`eAc%V<&BKLW_=u+Bj_Rm|I5svmF=3$1 zh}pXtDbRLAh0T>Xhp7%E2IS-rrW>m1Y#Y_=8bkZ@&0)ynh7X)crP(COJ218Wx?{Ht z`1AFURJF3jLRwov(wEAcy4G5U^&MlXoNuK9NmFgBWkG@aO;hDT&K!4Sdg(NQIBIOJ zsL6g7#&^KvLgr5D!DB){yTg)<te#b~^mu|vlWwF9tRruW#;{&nzE-9KFOf3+erDvk zmX;<eT@Q~X_H$O45(3yL+1p!p)=KP!mi#4gMcl{fUCyZq{2iE{qG*G*f^X%M=?8F% z?RhOxIc(e4KHM?l;>~Osh!Srhv}KShAh>_7^N|dg%(W^{=VI<)n3ysdRLIc?NbvdQ z<RhzAMVb*6ZE!2>%WtJ&)S0gJD=mC%U{LnWT8<DVsKu=mLUBlfrr@mEfMPmbR+ehW zInw;iXQVOAA2I<=4~@{0rr}_o9@Tg+w9aKsw_OaW+d?oVr2h0UYpBvq$hGiL77uF5 z0axvn1>^1X+ffYf6sv=K@S2imasX+J#-&KTgPpkT*^qai+TCVTKHpDc?--Q<2duFu zE4>NALPyg8347Pa<`De`z<6?xeCYLpOA}F@NqX<kXahT5VBKl@hHGI0Ml#jlS2b?# zI5-&_CweiFz-^2HrwWr1U^T~ApG@FY?r|KeuZyR;hLT!tP{q+qp5`O5-da0b+h#1u zvW2t2KyF@}u)x}0OFbDZ5|MduA|OIndaIKpYK(nh^kvM$XEhy^zX)nhSQrNlmG6sf zXZ;Y;9Nr0RdilM~v%f&bt-RFCv>wXGl)U<)8O(?XzSQzo)HKMpwQKr&C#RuIDL0ck zl!RO3mI+X5oAV8P#{!c^H)yZ6srWm>N3RTWRM+By^6cTDl>SkvtrkM?>}7Q9tNnH% z(mbC`H@Vo5k&IDAB|m}#)#53CCUEU@|IR#?aGuKf#@^Rz-OyE<n$I9_vDB9P9GV$z zYuIO()G5{97$}2Pt<<H(z1b!pRh_M60~R^u468etOJebI$LC3s)f-;1`saZ4op}os z5H3aIg>cas?p#h)l@`o&A=+9<meZ*4MWt33B7gI(svPM!VFJ8Vgar2j77i1AzU!6+ z>NVSC))Xz=a+=?)cZ@SB`JO5pqQ}|xEwcsCaB)p!Z0di+FqYX&3P3V!uSqdXBj6r7 zX`%!IlyxcH`co!T4HP-Db;Tl@A#e^RIxIP?#+IA8O9qLvOS&oRqMks7<XJK%h2hM0 z)P%JV>{OC+1@(E)JFj0H)%jk61?km>{f>P@WhauY`uXL#w6|T!EO}1=(b@X8q-F|7 z#8TsHxn@hrZcq5-)a++7Ii2x6B8y=)g!#bmx5PGRJWc}puJN_OLh~qIw1cN;@XD&$ z<rW0ttMomWXzsIYux8@g+iPlUn$X(G6$|`=3zCZrOK9=TqhKR{x(J=Md{>ReXL}VS zXMH5fVS@5{6UdUOHp+xlpTXozc7LkfHX^1<w8`F9E#HxJo3I2%UjA5Q4qvc$8QyS4 z<Ws3=M5H3881H#TwhTf^5oP-t#?ie)?onlc)?kSoO2RY2@4Gj|PXN=OS%)pbWl|+a z$y(bc+?*U)LiAT*t6Brgmz*88l0u9)cs{l4kz{Qtn4?&LYoKdQ0xoQXTbL{-!%9cq zwo|G1+hl#9p(}fF<%P1Q?11t+QVe2xLi}&IsSRmtfIRf_s)VvmP))tz4thFvR8o8J z=uS4cCYoyH^`f~NTrYWe4(F=$y$>unyB67OM2`^f#6;EY+FbpJ5_9@5uEpVG-spp4 z^AhL@;HLQmkbNKMPc6_e_Km4latvwO#GMl#>xaR7T*ai9Y!#K<U)dT))L0duno1`^ z|GT`2tXvF!%Yu_qTpcg-JCx6Be}W_%{9fn^W3;|i8MH61(rLLc<EqB_4OpdCK+$@^ z=Og8k4<~bzm9$@{&T~lpQoSOo*zc?s5nkai7I%B<lg4BTU!=%{{|x<kOEp2Z0k`EI z|Lg6<X`;~)UbS4-xGj~T6y(ej{kA8dfR}A%V<kX;fyvXDaNIjwplF7twj`-auPEEO zv?nXVQR*!gM+?a#Q7)WM4W|fgHHU+ybzEV0BeTVoqhcrPeSPm7?&+aY<zgDbaJ49g z#l?d|^JqL}>s;iR-%-I4G^B>1rlvTN(x><Q33QID+#50X|9Vkg&))%ssX9`W&7BNZ zQ!$XIU-zVOlK{z85Dw}aT0n0`R@0qj%TKm}sug3c2La-5QYlQJdPRz7$F*zt-0V($ zAI>%3kQ7<SRcl0dsvya{re!6nK*p@Y2rZqLflBJxqBMT>^uvJ=V2xcW59Pn2l1LJX z^^mBVx|nWmZbq;u!@HB0w;wbI2Eb|O#{oU*<K4Mq-Mly0b3enY|7fM3ej$WSYIaN& z%dIq`5ovs_K`mlDKdEUde%sBdj`y<OXW`2Gt0Gy#qq~!^&{s+qiOeH&jLz7CKH>IF zr4iN~Iv2YHOwR?m`Bf~~c{AM&hoSm!{tLshrZep=D(?}s9L?hzv{ccAX_r+dy}mJi za3N`LZ?+tsd;*o(SE{no;(LM~2dYJutMVv&ld|9e{nw=!uVl&R;|T~E145c=F?OYw z4b3u?6bm!Z5_gP>k+HBy5c}+;4EiEp!+D^pI#TyVe0`$@e>3j|nN^pmyG|;cJ+&lC zT+d1ya?<#=*oRb&DFY4le@GrxfQ$2*mgl#b9}I}Iraq*cin`h?g>p4AX%<>Eiw22T z9kjP_fl7`RGDfSig8Rp+CS0N4mAOw5qhDE|0w%ZbKYKH2QH3;B$HKBb$`n7259Zoq zw_>a87*6+Z&k_}z0>xB078Sk9@-Wqi1w3uA6(?#Yp+Ic(nuDb<`A$`AZ3gEyQhi=5 z)5Xx~^+a2!!>(vsIpgPKB$wAKEu=((#xz@$e|}DTkgP2S){oc)B!DkLUz9{U#!e1< zjDP}?xm8`;0d1d&(rA~$Andp=bY=_436X3JJOb-fqMLQfb;$Xbj}4dmrluUAWhDHR z%bw~8Y1C3LV8TZO@%VmD*-3CTsd1h7Z=JBJcWF{J_XChCQmMbiQ02iPrd&e_8XV4z z0_U^=r7o{ww|5;a2b^u(!}lSi1M>DRTAl%2$KhKLXbo!Y@9KpgWj~8tZGkUeaf5+k z@vgB&llh!k15#8N*i7_on7;}8MQYo&kJD#8OV&(y%!|1jvFm7{A~zS`pkOQ~gVG#j zjEg2It9aM#>#M-5jP#D;2JR@Q<G&F76_5HgR+2}}c^9`|)Tg7@W_}SA5{3wodBTCd zU<Mc)9?KPj={z(`kT#V~^Hzm^j!lQWqH0RpZLg}aSODK(T1CuEErmW_Kea8#tCW{- zMk!_o4&N}6^P!!NpED<K_zVZ95pk@U9FX(%Bi@`oz!I-e98QDd(*XUeEjNW3cwMHe z+9zV-IAGKYzZg^f?d=QuCU84{{P2FBHkMGjf$_;=+U0NY=nPU%P?WvQsGXdwol5wY z>s3DM&&Gk<^$zYEYYqb+V=+D0)kN36@D7=*L!}w#E^zj{&+@`Vs&rSY7B0CuDOL_Q z(%hy}x{wf*yv#r#7Efp!RO)?oMZYRrHOtpx5VP3EfEwFE2!8NBE(b~_4e<De=|>XJ z&zEJ-nUQ~6h2uq=uzfaznZjEbsYyz|^&64Ld_U3F5RNr&$_}NIeR&B2C60=qA+1ez zN)vZXS6oPhaMbxxL$hXvO)2FlLDqu{$Vm-3Vfe_nf!>Hj&RLUekrhMEqM#WYioArT zL?BrA*1$6!i`jK{q4A0+wPJ8yez%)k;N9LxFv0d9NNYIh+e|neG6ERA34m$o#+m07 zo5b*XIx!he@pk%N`5M7QS>D`6bJ)7r<Vnj73*AS=OWa_D>`_L%ze(GLw&&BxjeIDd zxs{@GEvi+2NR-A$Ni)UcP1583O`B-%Iaiq|bFNqwsiu>9o#(v7k2Y^;;y+ehqQwwz zQa!k-ZTkjUkUYmSC0P%9__%s-KMvIx+#Uy-D`#NCVq(>%PFZ(uIXSiTQEe%YJ!ENb zwnd*w86inW!KJ~)su*vgP<w^;u_>%mYGEbZF<@<CQB*%&{(aLn?r`1oqUo$?v%&LX zjwe{8mr^~P)v<2F$e?Fl;)NC)glJO!BSwzeAH<b!YjFlPg-_4(T47gyg)i~zS~H{b z#9*gvS~|6A=enE<H0-xb9<@T#^V6-XpFYpC)njC0#8WE!XnD+q=b<|J7diT{B$7{& zM%&{vOI;fG1~MU@m%zXAO$MWnU8#wraEv&%>||v+;*L0BsobS+$cG&?*SAs@P<VNG zsIAm^Np@eYJ50oXYYx<(&4_uI`@3tW_zZXBU|WA5KF}~7n-I^6zpkeFcW8K;&Ai&X zlE>Y%(PiJXAnMQ?<hAf+wbX(%ItX-fB{?TJci7ftP<q8=u_f1Wvep(Wu4Y=t^;tZH ziLRlP$w+59fqWs5Q4tE%OLSoob>blwSl$+$2g`F-8?r@)sm;!RugG&2WKXeAiw};J zQA5@dO<p#XozE(ZZW5=DB;GIbop!NM$5)-|#8v!xv{-Q%MOQ8Ld|c|WO)kt<s^n2_ zzV`{RCGm%&y>7!X(EjpK83nTAQ{z7M`*}}G#heuxlQtGAABqu5yf*%u8G|~d<`$?L zinL({ceoEu@ZxQ|dBI8K%?RUC@u6D;^$X13rv``BpO)k3&MlX?Is4g{v6ts{)jgcv z`?T;LI9sobi$_6<JrntsK|n~#mMc+&cS+XC7ykBD%e5f|n>n%h?I%DF;`UTX+~ht5 z;(4@Cu)B9;`Q={g-c*A%;JpBp$}+&w1C`nyhjvlydX)Tw@rbmoa!FlV+r|WI<0+kq z<V_rpFmLok*NTB}f#wWRzSCmpDNDT9<APJ8d=1&4Iv;#RyqP8o)LrIHyhK>R@W(}B zhgFO(Hn}L++LGE7FY>yM{F9ES16z6mx%lr58-7*}pLr;z%(i~XTXx-)99@%dT%(Gj z63HtRwl5|(dItuDk_?j<c|&UE-}gTvcO?&<7_N*qFMf$dyng}&w+6-5x-IXLLRS3W zCv$K<Fd(*n3z145Z94l2`R>K^+`epX&vl=8X&yN^GSF7U#cxW9{GJ14$+^5aS3);% zb<kw<9nqiLnU>ilkAyF2_KeQ#F0X&=8*w7)m^de#WQBsIxB+u%O@_Ns)Qyj&f17tk zp-1(C3g15#%93KlyYa`(P;hZxdkSjIqldlPGpevmL%AmKF;VLq3aWST3B2Bv_r zU40pePLc2GJoes)Q9lL^o$Y(dvm3!fu=pwekKoy(h9tOnIKzGZz-WtLY*tJfyJ$CK zyXVXwV2NI%BxkNYw19;y?t?m7^6-}Dv{C$oHB=IZBhlMiq(Ac~SKCVHCa^TwY!(Jn z`PzhEX%gH`S1~ort<XY+BTQ~Yle|qAAgZXFw=SHOmr<rwaq^IZm{ZjhoW4L_0B|MO z{Okw&5;h$EIKKXq<Cmr<hJo9i$tsuLaDiwli1*4X%Yydsh0p}`U-bCOyCO?SIs=kd zdE`RPBCx1=0(R_Pma1~N$xuy~=J%((4W4(kNj4Z3dvyq3e-W)ZU?crUqCRDA*EfE; zH^e-O6Sxx8Wjk#6$G`dof71eA5261|u00!f_kP=Zb&HzqQ_3iN3u1YRI)Bm+_zP<T zpW!%(iM@4geEzA#{IR~uvyybBpB$EbWL1AswnZf3Eb2Lph<nU(ItDyE0q`pW3y<_B zwN0fSAN*He)d%@G_x9cEQbB74BB|6bzC9--f^CNi)98V%=F9uiuUe5V@A+fz^0dYH z??QBh8Ar%oOd`hi4_G08Gh)H5u(k#cc9doP(Ub1ojQ%5&<yB+3su6n3-M<}1*h+!6 z+*W%&LMq2C7}^o0sZ4)$R#|BFe{PEmuIKcT2d>8rZiagst0^0F!sdcNswdT}BS$t@ zU*Ln;$vl05q0u8;FGtg&v+D^jJyp1_tROQy=jip8JGmYc{^ZA=jou^I_IcrxqRpN! z#)7#UHjJ$16&PcE!}3VPKiAr?6}OTzz;GX^82!#l;e+TuV`jE?vxdU~R2Rn?FO{Nd zx)|WjzuWT~YQ$7^T33Mv${~Tm&3g3mtwTS2-{NI1Zd&T>Jg>Lcc3(|oz&zH|b;q6n zJih|gL;Q-dXC_VVsK~i2mvt^)Y*dyhOdJ9-P{0WpX6n(>X)-i}DXRMdLXr^!oi?@s zYLqy3<+u7&Es%xhf4UOoCxFH2RHplJiTWw|Un~n}cC6q+1lL^@cB}!i6hd9?c;VZK zPImt&<vuQBPmzqVP93a_j{k(o>G>q*bgf02H`9+~$3%_KO_)BYFov*p$wn>#?73eV zPXN{p5XTT0Q`#d)n#xt_z^B>`HvT4wkcI`Exr~O?!v_?jl&(g(t5U2=9dClyVk8eo z&S0AzsRHBM=3L!Y*&i%4dFnYQD&js%X<*)A)$46xTVo%hw3q=!$@kretM?RqgtVRj zzhJ?j;SZG>%u@Uq$-wVz#B8Yz$;<X4rIxK6E)AV2@$V0P^LGMV1detk_kGK2Z<(cG zcD_nBW?~g~<cU``jJP0Q!)-n1R`;*zCjP`yzPtRlY35%Hg@3wn6CKA@IBJJ3JxJ*l zNr?H>LnPBH_xjADG}O7gyjqt!Iz_J@PCCXkf+;kV)jv&Mq&JPu`NR6Q8S`h&;|F_p zscd|TI+_E3%2rz+wwuD6baJbcqmzJX9OJYMrN8I`Kb==g)%2f#`k=69!@)*B+!L76 zP!ASlLFu4X%?QfeyF?E9+>LL~W~n<cA5g}lR+$j*|LSf@v#x97w^zF@VQTOkYDT_w zIhD|{MO%$t`25gCw-+1aGT8t;)fikOQpFG&M%R@Dif3$E?rH+{Y=bP)C0R17%(<Du zBisV8e?a$vSu{<D%NRzlB<94Enq#rj)KCUjOfmukEhrmkujkcHhJ$%71;v}ny8P$; z#%q3CIT9K+vc1k~$$|<w9ri;}6MuyjdY{z@-GTbwI9K&gNG8ne^Lk&{)3rXXHz#c9 zMQrS+5i1nA2^60|c($-wg{}?%NQ^TcG07K%eD<zp%p&V|VA(d+l4jvS>=4e7>wzm+ zERnZ&)=XJ2R|AVH#(#J<UyRIUZQTeNz1y=rjfbTKXINLjcAJRO*l2G*&h`t`p$1h^ z!3nyl2#qg=OxsT0kG;N9Zr*Ts0{BvpE>Lw-IApnQ-&_keit@j%+Y5f%9la3xl@Z5+ zzPv8H$;l+U{N0Sz?$*VEq?7pdn(e$#;_bP33(uxYb*Z~%+u39dkbe9sWfH3U8gW+9 zij?ykTJg3!nE3TECOP&ju!J^6?k!z<uemDlgLS_?W6~hnTB8e8mq|`_ZjIYYKhLp3 zN0bN6(LX_e4Gno!nc7K0nSB=PlEZ_e^RCXF;=ma!nb+zuG6n+8qpf~$qx_0>kw=2i zyk$clRoyMbHU8S~kw*6WTg!)O&-{$Dj{W(yZxlJ?lxbhwMiQzzr6~<R<eQB(W@BsR zo4&V@Sq&Y^8uPSrA?LJv82M0rmCHj#bujrW=B9b6+c#l)V2j*Af>mR{iR7!COm~2U zrhn`o*jkz$BFH7k-!z`S!dq)Slt32Cr-6InR|PWuAhcQa8`E9A{v$dj!t<2|hCU~B zh^a8Rh!OkPq@6=kM2xcPtC0cA=Lz9=_W|8hF0O$^&09jdKb8AVH^;1-sSKl?Wr6x8 z?geRY!>gjg&oBQ_11S=()_N`O`6ti(mzTBna)A>*R&Ao<3p8~S3sc#bC$SJR)=KTn zbs?h&4pN3u_1uhMwD&F+Cy)@;47U-%tU*X!D`uskkn^5xsiJ8KAL*7JJND6w4&t&H zp~W3@vvh&xuygV28}glkWY2rE>ng-MSRK`rE7idBJSV{dDhv5p=b-FQ1uR{<%s+=( zxw+i%`djbo2KhJD8-$>g76lUA#DCjrJD63R5Ew{LXV?=<4LQPNiMMWj0OQUp<tt=d zV~z=BQEGpot~x$0d9C@Q`S)weMXS_V6J{bCG1bN#cf34pTn_Oqdp9<|fnm7=`9k-p z`%VNISfE2onq)kwpgb)l<`so732OiV#(ckO98)i$c(ip+xXZaR_+@FVnea$@btie8 z=|JdH(u#~a&nUM<IX(xBt@Go)Pt^uWK&7*i_T&1z*o<YbV$`M8oNME`WuZL0rzyia zDctZzhmr_6;y5UNzzF|m2IFG@J7Iye4SUmErL^21`b%9C>zq}0>Q!wtrvB{(`8S_F zu5v(WTB@iO4Nr*YSAH!Vi#2WRdI?J}@vQ5s@=%v8KLHx7G!N{`ranc2-;4^F4D;nM z;eE(Z;{w-}e>U8xtKTz>8%ymdDJy4eeF7wK^+m2buEAO69RGM)itdi}YN(m34+r32 zW4Q|fj_5a&g6EZfzCG>f5!5DBf~Ur}A|M|GB(32W`wD$K^aqS(hK3Rj@L_dF>L_Y8 z8PnNdSFJ`3AyQkS9L-D~%VyDLVnv|RYFRGEsIirwSlr1ZSus`_*_<{Nd)wEduLf`U z=bc}pR6lQ962FxUOA7kwfF^TpCI8mR1|XzO5H$S@soqYfP(S&tzrHCMjg=nGoB^0I z1vwWLjU|y+$1Vw0-U~s74Jw%O6^*;syh%1w7Jldp<VyrLt?*?szZ6b@tE~;P$k@Mm zuQkBZuyXhWAZ@C<Fk@<KRJ`Ksw*At3;btGSf6r796}|5wt&1*SXaA;U##Y2MnQSgq zWM#$`*pMfS-hl=OhG#=cl;`L?g&AOCWyUQMVM%2Z#{v2$>gs%J@#;W<R26$h_We~C z7}!9Wd)KkouD-uzN(mC)F&52grbgPrkf)kt%(uQ2(0^*tEbQh$$ye`>dZ!XF#^y=K zYEr!SXiq=DcrLYaEunOG$_2F2cMmC%NaU?E<c7(<uOAw@lDPg8eram{K7Dib2RZ&X z`U@H-1|xDTq-kYA)Q?5$_#o|ocT|q~qxZ9=)xo&qWAK1mp6|o$FFLt8KFDrDUlMI1 zMSOv(=pa<7X<e8KAWqd;O=o{-XC=c2to_=y`F8Wx!!n+4vE@1qDSjqLBLx<n3og%c zALONOnbX^HeWTkiuA*r<Pr5->6@G;i&8|u{>{VrD4HI`(e}#RTp?|0@^sXGyrwpca z(#qwK!Avf#Xfc!73{NvpO)wG*VjFPMS9s@T$=R|!V8ibu=kpc$pe=GV4=uyh6Qw>4 zbvb7vKQ%&6enzAKR8fdv@KJ5bWmm;6CdGZ!)nF%yfMK@?F<7v3>1W&Sst$|^Z8z@L zez-r_fOBqJkR=>RUZp9dI9wl>7aCx6r6*O~Y^ima2RZ*GKw(DIsWu1WzvO#Qf1o#+ zFXOD8iP;nte`HuFpczRdV)+-B^J9X<Y#c{+%CfF|Eh{8Byfql;8pK{nNc6m)zGsA@ z#aEd9g1xEm53XZ)Ot$F3f}8Bu$I^y<Kg@Iwisf)8_BGB)tj*Pr(!w^k34w;(@^O); zg2tLY50i_86RS&|e1jX{b*sAXZZ>>yFE$pOobXd&7PR13bW&paDZ!W$L@E6QgB=zp z)yL`@^W>5bHEW&yM4N~#o*_*$8DwukpDdlqV|Eq!y}2}6ggA$4+F<DGyziY=Et_`O zqYRVMvaIgU`x-LBzbvYty%T*tS`hsQ-O0V`s+@P`+XzeXAtVZqlY<;Cw9!NPc)UDS zF*bJUUY8|{__zKK9hc*Kxyo?YwVJM#5!j0<xJk>S#v!|QL?g@K=&1<FVvrv-;y|uH z^(b2`(T7a7@so0)xEg0uU2=&w6L?6@l%=86v~7&xQ=sbDi|D_OFObt<0Jsi5y8-R< zW&wcE1zXN_DhDhu++;g-cCA-L@>U{9rCgRA_7+j%rQ*oRN(CUFR+*C7E;%hlk1C|_ zSd3>LDYa*SzK!RQ$Z}SI(5G$#So#Zk>&+7c8M(2JwtbE(zmrO)M#&x-YE>>&`@ckz zl<zAK#+}3cC@GdRtAZ<cw$;>-g7SPA+P(IDg$g>%Lvb>LGG3V(HQ+X!HPzox)KgH5 z?Jf+2`MwulZAh&$OLmBFfIX5~Svx{mODX)2`BUFV1g;fUT7ywn@x5(xr}_~31?J0d z9y&@qVl&FwKXxM?8wmSpe2m&w`aH<h*Iky~YC%lK9bzS+&4!b!K{%Y%N?Va;t<02{ z=5=(G=_^kFf_|f<HP>2DxpIc`>dhajht5?&#hrN{ITb$rJZ@J}j|$n0N&35U<J_?i zw$>l?YE-~a00iIHZTyx}!<w2irAx4{gXF*$;A+tt72(mT37LlSoK#4zdaS)GhXE6v zLTOd~=BiQ0Tv=uPyU<n)u%^VA=Es?c)YJ-;AP>|FYJ}qyvzj#%7L`5yL5981u#S&< zVJse1Dpt;28?GauQ9^KGKQkML2mV_>nGjuPQ}azxG9CMY%QVtR07|IvSy5=%cDgG* zwU0SeZn$57jg?dvbs<1?xRsrvfoMB)VKsue;`uhI4Sr_qA=dN#$`{Y~K)ccf%|2HW zUdBAI#4D>HIO`hcN6YsWz613+vsKFgazujcH#$iuwWIXw_Z%|F5F%NYvdBt+F_jQX zRa*{H<6)=V1M^0NGA&tYuX@-hiA0(qTlptqRzB%ONaDqexytRFy;~iZynn#qZqdR* z=!$HkygZVgS7bW%xgq0lQ+Vqt360-&em@u!vmnu*I;qaSsa73i4lG(>*K4Loo)y$L zark?zsRb_)VVNt?<m<|_n`vP4YC4`TIBI>1I}<V!xPpeiV`&>SB-vi=5qleu|1)mS zx+9*N(B#WJfr@7!{7AR+ih8Bj4Z@Vez*#M{89>*Y?%Bh})|Kz+O+)YmAYZK7@+03o z>B^$k%Yi#NyTIl$7iWIC=~vKNs8RBq)&AIDVb&103w;8x*A|n|jU9QNlvl7)>{AI| z>s9E`X~Cl##UfD00(&<%8fN7Rm2)Z<qhZWk%v<p5^O-C52sB(aH3{!-?C?@m1y8x^ z0=&*Eb<KJo6+zs9ShROq_ujg4HOjX?20v}-t0~MdE?sjr<aiOwQ!ol0INQm}U_wZg z6C-5x0co_aFvy(>k>u`ciHo30=&G2_{F<8pou5>x5;CKDGa~EZ73kQ}ZGpj;mB>aV zu@n>=Y0QyAA|slkn(Z)WM^<LwWRW8dRk;3qkB(NwuiSav8Aw2=TW@w|h2vZPCqUD7 z@*`nI6;b%~R2KZ}Z{ubE>Qsk|*LR;;lgZxqY${t*$`<QGO6zT#Ma>|o7UUur|0{+E zdHB?yPIA7T<cgaPOxv>7PCp<<t^WY=JVyl%N1b`i=E2%^kJ5X7H<XU%G?o%yilVtx z*8oGzuchXXQ)}-WDvhQ0V&alDZ#L@vw-$95r@8Tw!^L$<1<QW+w>?8bJ~i$2DJ@GT zcpH##lZ(w3^l3e52KVl&TOmQo4|W^hiS4LVbPn@HtxlmsLa=n;JL+mdK|0mh@4pJM zFrZMeHyV!9QmGmSm4@zCeSlGzWH`i)A@35?<TiM9=uf+iIwhGGF2sR|Y@`mgDZ)7q z2&lQPf}>-^cF>!7ZG`)-ekQAOY?4FUC{ebWb{eUY9;0-o#HQBls$54=!6&F*q6XB! zZ$VPNVQPv47D5%nS};IllCPB7)Br31B}ViCfZ$ND(u#l*f(g2f3Ls@pbemfJ^f^!r z6ouJF;*(VXw^&M(ry3kbQKjYx;i0O)Zd*$SUIL_;8UjhSqTCHwu@R!&Qcc0sRD?F< zBEic>b{<AEa-+N~<1VBvDjnd|T^T617gd?aKB@W=xC~3rY{rzh?E>t~DsG|^#HpTo zexHSNw>)~1)eQR{gJH}%s9pE|<ss>==~g2)<|<2tG3TD90<^QK(Mdg*8rIGt`;=X& zX0q}t<~Hi8<a*|H);A)TP@a_o%<EkV#)k}&F!xcoKN_ikv(7j0nn(?<r6_jusU|Sg zu(gns+?(s&Q%oBiT7c4SU0tuKwOF5Ww%<W)XzeLrMUGu_lgrc&@m6Z=L9XPMJ~yBR zK6;dOBB11h5!I+@R|Hz1<T?&bMoI>W6<d)cg~(?>PlO7CV-+AI=rru8HZfyj)POpG z8UoeTU=6ucDh5=Mp;a~pRD3pXjUGS*g{XMAP?G~GC<K9P^Pw;`DR8Kp=|va@TqF*o zdU*f{3r(-ajKIQE)6Vpgpb4Y`F0h+{^C$ai6ToP13t{z^kgy%K%O^u_(N)IeWa-qC zi%Pu&?#EJ1!1ju=E`(YUt(2Z5q}969BS8zX7Ikce`zWG$3_?VfkI0}05Jkl`Q4~i0 z^c!t%=UmHSRCdPW^E~$Du$#wm;BE_z_nstLt5%Yln!-rgZ+kTz62>H278i4Ek1ihI zgj!NG6PhJ#Io=ih_0iO%urpOx0)GKzXh{b5<Z6jVfJoyor4U8WZA3%Macl;ZR6@4n zte%$8Nur@a(mo+hs26T+`FRSGVr-Hz5w-wJX&qg(+=!$&GZc~v_;yrv401ytSR{L@ zErkUE2~QDqc2rv!I#i>rA&L@^o;0d6aHSps!?u-2Lq0FmX#jyv1SkQoZ6@eM%7<9F zxB`s8-61I&YfWGVsZx!>6q8_Qr3oON4LktKijT`f10zwWrT_|00YyN?lnw8D(x4ep z0Bg^cHUwiW4aBJuqMn!Ip0*EfYEN;j8;eanQOz1HO=R+7=+hH2GjbamC|PZuDNy2* z>@|J4sm7?TaMI`-(9@%Zk7Z1NL56~E74G3c1L;;c8;X)_C~9K%w3T<-rLBsFj$`7! zg*5zd<7&}Or~(hT)Re-6ZF>g}rwfr(<UXxSN!2&*2B+#UsG+TzmPMMC)H@U{_)^pr z3|8Bgk}MLm^B~iz0b@9_&4QXK{YIFFBu4;rr8HD1ENV5iBU)7fa#<9r0hR+qi+9qf zz!BYgRUHEYX#u!TV4x~((?A*N?xq8BtdI(|J(U-LfK(PN4^8N;K*Ad%imo|QNDP-i zRju!)<v<5dSBR23=~AF?@{K%3o<L}om1spI*c)`D5O`CfKm`?kQA4jlGBx5UpbK%d zID&)jJ@pwR)dq;ymaJ^TyMHSrgvd|nS0#_Y)+C*&_%izIjXI&+pruzyw_&X`DGUh< z<z-XM15%X^bWw;jcZ<`g281B;wMa(6l=7wq!K+gPaDpfUew*<Z6u{K7+5CVW>U9HP z&;v>;0O(h{x{$yVZd8EVrhqmA)WmEB01HqCXaT6Fs9i##hyf)%HcbhjG)Qx({yeE9 zz%fK7-Bvx-Cg=cHjW$ZUXstlP5Tx-mBnC@>D2g=!f{?RtNHm(L8-ZcW)1?5wQ92q* zKyDC_LE+s_fDtM(A3;e??kq=bLgW;YD9VgS5h_UfXLVD5<*4&d{HnWe__A}y6fN?q z+7*T+ByrSs(117~9u(*X;T_aaM!`L_=my|Z12&)ytSAFErU0M;KmvdT015yU04M-Z z15NzFYK3Y5OKBIe_fe$*qLien_8~NzXbt*8#mas3=}<RMNEc3~nxX)(T<SV;<xy1t z!Ucg)9@>-f18ZG2NgdSl03|CQ-$^D0{0)w#ih;3DRkfk2fw)aN07Hz05VYu|oee@! z>Paxv4xxKk^A#nCnZHFb8wA>l0k{+awS_P<KmvdT015yU04M-Z0H6Ut0)Pbo3IJ_K z$~b$eAQS#`$B#OPP!tXW`)Xie&yex=QkFm`Z<R#=tv~U4ngF+Wij08SJg7h(nvfV* z9$(u@fMR{r&>M~v04M`Q{Kwfz3^Jr6BaHxWNC8X%KmvdT015yU04M-Z0H6Ut0)Pbo H3IPAv_!w*& diff --git a/app/design/frontend/Magento/plushe/images/blog_bg.png b/app/design/frontend/Magento/plushe/images/blog_bg.png deleted file mode 100644 index f20b394d5a21879e9743f3f98b64071e1ff88042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2999 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 OSDNnVN^7J9$^HZAO5b$= diff --git a/app/design/frontend/Magento/plushe/images/express-checkout-retina.png b/app/design/frontend/Magento/plushe/images/express-checkout-retina.png deleted file mode 100644 index cb7603592ef8fc83e7511a5399e592bf52ecce22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19622 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 diff --git a/app/design/frontend/Magento/plushe/images/header-bg.jpg b/app/design/frontend/Magento/plushe/images/header-bg.jpg deleted file mode 100644 index 994156d1a36a237b84481ede705c9598c5794ec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21105 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 D%TYd+ diff --git a/app/design/frontend/Magento/plushe/images/info_photo.jpg b/app/design/frontend/Magento/plushe/images/info_photo.jpg deleted file mode 100644 index dc150e4367e783cba98100101beaf054957f3a4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7859 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 diff --git a/app/design/frontend/Magento/plushe/images/loader.gif b/app/design/frontend/Magento/plushe/images/loader.gif deleted file mode 100644 index 53b5ac653eb1e7f42844e5fc0afa59a62110b086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmZ?wbhEHb6krfw_{hNU9}NEe`^Uh*p!lEL&ow02*)hP?NY8+o5hV0a%DE^tu_QG` zp**uBLm@FMu_7lwF-0#kFD;)z@h1x>7f_WB5Ce@9U|?X<ZRyWE^md<vb?`bZ$-Pal zxQpV_J7qfSBHPy`Z<(ambM<BRsc+L?Mg8Z{YU^OaV}h79Z%4$_tyQ-rYvaCoifFWD zich*)wo^f;|CZ&YALs6_`GL~}9f%wJCJT2QeX;ji+L_j=$4i&EC2B})On5QxLqzBO zo0q<C|Nf0RghP-On-ic09Lb!#R%<cq%&fY~JJ&j&wf6}gYtno&E6hCYYv}Fgf2W<# z59VORY5+78Ze#`@$x1%g@M>-1-AkSiBWArUSr@K3Z_f0lcU+h5EnEGE`H4nb1J+Q0 yI^ott?XHsrN3MtEmnJ>yWGJ1aJhM#wMwX`geuI?7lUA;N_&EUN2WwCSfB^swKeCPh diff --git a/app/design/frontend/Magento/plushe/images/logo.gif b/app/design/frontend/Magento/plushe/images/logo.gif deleted file mode 100644 index 7f1dc1ad3c939aba615ac5f95e5d01a254659c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3454 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 diff --git a/app/design/frontend/Magento/plushe/images/logo_notext.gif b/app/design/frontend/Magento/plushe/images/logo_notext.gif deleted file mode 100644 index 133a77524368fb060a9e47c72b05a7240e75d68c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1964 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 ZD=A}1ovq}3`ab9XQxvmF(8NnA{4drCA`$=q diff --git a/app/design/frontend/Magento/plushe/images/main_image1.jpg b/app/design/frontend/Magento/plushe/images/main_image1.jpg deleted file mode 100644 index 728174638d03156b34d6c3eceec19492ecc0971e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147971 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�f+(NZz3 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 diff --git a/app/design/frontend/Magento/plushe/images/social-links.png b/app/design/frontend/Magento/plushe/images/social-links.png deleted file mode 100644 index 66eb6c9083e3b1f170c19963bf849ffcbf69241e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7564 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 diff --git a/app/design/frontend/Magento/plushe/images/texture.png b/app/design/frontend/Magento/plushe/images/texture.png deleted file mode 100644 index 2b5301b01cd63825074a43b5878e339f7c212f1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81548 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 diff --git a/app/design/frontend/Magento/plushe/js/jquery.dropdowns.js b/app/design/frontend/Magento/plushe/js/jquery.dropdowns.js deleted file mode 100644 index 168f52bb221..00000000000 --- a/app/design/frontend/Magento/plushe/js/jquery.dropdowns.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -;(function($, document) { - 'use strict'; - - $.fn.dropdown = function(options) { - var defaults = { - parent: null, - autoclose: true, - btnArrow: '.arrow', - menu: '[data-target="dropdown"]', - activeClass: 'active' - }; - - var options = $.extend(defaults, options); - var actionElem = $(this), - self = this; - - this.openDropdown = function(elem) { - elem - .addClass(options.activeClass) - .parent() - .addClass(options.activeClass); - - $(options.btnArrow, elem).text('â–²'); - }; - - this.closeDropdown = function(elem) { - elem - .removeClass(options.activeClass) - .parent() - .removeClass(options.activeClass); - - $(options.btnArrow, elem).text('â–¼'); - }; - - /* Reset all dropdowns */ - this.reset = function(params) { - var params = params || {}, - dropdowns = params.elems || actionElem; - - dropdowns.each(function(index, elem) { - self.closeDropdown($(elem)); - }); - }; - - /* document Event bindings */ - if(options.autoclose === true) { - $(document).on('click.hideDropdown', this.reset); - $(document).on('keyup.hideDropdown', function(e) { - var ESC_CODE = '27'; - - if (e.keyCode == ESC_CODE) { - self.reset(); - } - }); - }; - - if (options.events) { - $.each(options.events, function(index, event) { - $(document).on(event.name, event.selector, event.action); - }); - } - - return this.each(function() { - var elem = $(this), - parent = $(options.parent) || elem.parent(), - menu = $(options.menu, parent) || $('.dropdown-menu', parent); - - elem.off('click.toggleDropdown'); - menu.off('click.preventMenuClosing'); - elem.on('click.toggleDropdown', function() { - if(options.autoclose === true) { - self.reset({elems: actionElem.not(elem)}); - }; - self[elem.hasClass('active') ? 'closeDropdown' : 'openDropdown'](elem); - - return false; - }); - - menu.on('click.preventMenuClosing', function(e) { - e.stopPropagation(); - }); - }); - }; - - $(document).ready(function() { - $('[data-toggle="dropdown"]').dropdown(); - }); -})(window.jQuery, document); \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/js/navigation-menu.js b/app/design/frontend/Magento/plushe/js/navigation-menu.js deleted file mode 100644 index 7debbcdda22..00000000000 --- a/app/design/frontend/Magento/plushe/js/navigation-menu.js +++ /dev/null @@ -1,557 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -/*jshint jquery:true*/ - -(function($) { - 'use strict'; - - $.widget('mage.navigationMenu', { - options: { - itemsContainer: '> ul', - topLevel: 'li.level0', - topLevelSubmenu: '> .submenu', - topLevelHoverClass: 'hover', - expandedTopLevel: '.more', - hoverInTimeout: 300, - hoverOutTimeout: 500, - submenuAnimationSpeed: 200, - collapsable: true, - collapsableDropdownTemplate: - '<script type="text/x-jquery-tmpl">' + - '<li class="level0 level-top more parent">' + - '<div class="submenu">' + - '<ul>{{html elems}}</ul>' + - '</div>' + - '</li>' + - '</script>' - }, - - _create: function() { - this.itemsContainer = $(this.options.itemsContainer, this.element); - this.topLevel = $(this.options.topLevel, this.element); - this.topLevelSubmenu = $(this.options.topLevelSubmenu, this.topLevel); - - this._bind(); - }, - - _init: function() { - if (this.options.collapsable) { - setTimeout($.proxy(function() { - this._checkToCollapseOrExpand(); - }, this), 100); - } - }, - - _bind: function() { - this._on({ - 'mouseenter > ul > li.level0': function(e) { - if (!this.entered) { // fix IE bug with 'mouseenter' event - this.timeoutId && clearTimeout(this.timeoutId); - this.timeoutId = setTimeout($.proxy(function() { - this._openSubmenu(e); - }, this), this.options.hoverInTimeout); - this.entered = true; - } - }, - 'mouseleave > ul > li.level0': function(e) { - this.entered = null; - - this.timeoutId && clearTimeout(this.timeoutId); - this.timeoutId = setTimeout($.proxy(function() { - this._closeSubmenu(e.currentTarget); - }, this), this.options.hoverOutTimeout); - }, - 'click': function(e) { - e.stopPropagation(); - } - }); - - $(document) - .on('click.hideMenu', $.proxy(function(e) { - var isOpened = this.topLevel.filter(function() { - return $(this).data('opened'); - }); - - if (isOpened) { - this._closeSubmenu(null, false); - } - }, this)); - - $(window) - .on('resize', $.proxy(function() { - this.timeoutOnResize && clearTimeout(this.timeoutOnResize); - this.timeoutOnResize = setTimeout($.proxy(function() { - if (this.options.collapsable) { - if ($(this.options.expandedTopLevel, this.element).length) { - this._expandMenu(); - } - this._checkToCollapseOrExpand(); - } - }, this), 300); - }, this)); - }, - - _openSubmenu: function(e) { - var menuItem = e.currentTarget; - - if (!$(menuItem).data('opened')) { - this._closeSubmenu(menuItem, true, true); - - $(this.options.topLevelSubmenu, menuItem) - .slideDown(this.options.submenuAnimationSpeed, $.proxy(function() { - $(menuItem).addClass(this.options.topLevelHoverClass); - $(menuItem).data('opened', true); - }, this)); - } else if ($(e.target).closest(this.options.topLevel)) { - $(e.target) - .addClass(this.options.topLevelHoverClass) - .siblings(this.options.topLevel) - .removeClass(this.options.topLevelHoverClass); - } - }, - - _closeSubmenu: function(menuItem, excludeCurrent, fast) { - var topLevel = $(this.options.topLevel, this.element), - activeSubmenu = $(this.options.topLevelSubmenu, menuItem || null); - - $(this.options.topLevelSubmenu, topLevel) - .filter(function() { - return excludeCurrent ? $(this).not(activeSubmenu) : true; - }) - .slideUp(fast ? 0 : this.options.submenuAnimationSpeed); - - topLevel - .removeClass(this.options.topLevelHoverClass) - .data('opened', false); - }, - - _checkToCollapseOrExpand: function() { - if ($("html").hasClass("lt-640") || $("html").hasClass("w-640")) { - return; - } - - var navWidth = this.itemsContainer.width(), - totalWidth = 0, - startCollapseIndex = 0; - - $.each($(this.options.topLevel, this.element), function(index, item) { - totalWidth = totalWidth + $(item).outerWidth(true); - - if (totalWidth > navWidth && !startCollapseIndex) { - startCollapseIndex = index - 2; - } - }); - - this[startCollapseIndex ? '_collapseMenu' : '_expandMenu'](startCollapseIndex); - }, - - _collapseMenu: function(startCollapseIndex) { - this.elemsToCollapse = this.topLevel.filter(function(index) { - return index > startCollapseIndex; - }); - this.elemsToCollapseClone = $('<div></div>').append(this.elemsToCollapse.clone()).html(); - - this.collapsableDropdown = $(this.options.collapsableDropdownTemplate).tmpl({elems: this.elemsToCollapseClone}); - - this.itemsContainer - .append(this.collapsableDropdown); - - this.elemsToCollapse.detach(); - }, - - _expandMenu: function() { - if ($.browser.version != 8.0) { - this.elemsToCollapse && this.elemsToCollapse.appendTo(this.itemsContainer); - this.collapsableDropdown && this.collapsableDropdown.remove(); - } else { - setTimeout($.proxy(function() { - var moreWrapper = $('.more', this.element); - - if (moreWrapper.length > 1) { - moreWrapper.eq(moreWrapper.length - 1).remove(); - } - }, this), 1); - } - }, - - _destroy: function() { - this._expandMenu(); - } - }); - - /* - * Provides "Continium" effect for submenu - * */ - $.widget('mage.navigationMenu', $.mage.navigationMenu, { - options: { - parentLevel: '> ul > li.level0', - submenuAnimationSpeed: 150, - submenuContiniumEffect: false - }, - - _init: function() { - this._super(); - this._applySubmenuStyles(); - }, - - _applySubmenuStyles: function() { - $(this.options.topLevelSubmenu, $(this.options.topLevel, this.element)) - .removeAttr('style'); - - $(this.options.topLevelSubmenu, $(this.options.parentLevel, this.element)) - .css({ - display: 'block', - height: 0, - overflow: 'hidden' - }); - }, - - _openSubmenu: function(e) { - var menuItem = e.currentTarget, - submenu = $(this.options.topLevelSubmenu, menuItem), - openedItems = $(this.options.topLevel, this.element).filter(function() { - return $(this).data('opened'); - }); - - if (submenu.length) { - this.heightToAnimate = $(this.options.itemsContainer, submenu).outerHeight(true); - - if (openedItems.length) { - this._closeSubmenu(menuItem, true, this.heightToAnimate, $.proxy(function() { - submenu.css({ - height: 'auto' - }); - $(menuItem) - .addClass(this.options.topLevelHoverClass); - }, this), e); - } else { - submenu.animate({ - height: this.heightToAnimate - }, this.options.submenuAnimationSpeed, $.proxy(function() { - $(menuItem) - .addClass(this.options.topLevelHoverClass); - }, this)); - } - - $(menuItem) - .data('opened', true); - } else { - this._closeSubmenu(menuItem); - } - }, - - _closeSubmenu: function(menuItem, excludeCurrent, heightToAnimate, callback, e) { - var topLevel = $(this.options.topLevel, this.itemsContainer), - expandedTopLevel = e && $(e.target).closest(this.options.expandedTopLevel); - - if (!excludeCurrent) { - $(this.options.topLevelSubmenu, $(this.options.parentLevel, this.element)) - .animate({ - height: 0 - }); - - topLevel - .data('opened', false) - .removeClass(this.options.topLevelHoverClass); - } else { - var prevOpenedItem = topLevel.filter(function() { - return $(this).data('opened'); - }), - prevOpenedSubmenu = $(this.options.topLevelSubmenu, prevOpenedItem); - - prevOpenedSubmenu.animate({ - height: heightToAnimate - }, this.options.submenuAnimationSpeed, 'linear', function() { - $(this).css({ - height: 0 - }); - callback && callback(); - }); - - prevOpenedItem - .data('opened', false) - .removeClass(this.options.topLevelHoverClass); - } - }, - - _collapseMenu: function() { - this._superApply(arguments); - this._applySubmenuStyles(); - } - }); - - // Responsive menu - $.widget('mage.navigationMenu', $.mage.navigationMenu, { - options: { - responsive: false, - origNavPlaceholder: '.page.header', - mainContainer: 'body', - pageWrapper: '.page.wrapper', - openedMenuClass: 'opened', - toggleActionPlaceholder: '.block.search', - itemWithSubmenu: 'li.parent', - titleWithSubmenu: 'li.parent > a', - submenu: 'li.parent > .submenu', - toggleActionTemplate: - '<script type="text/x-jquery-tmpl">' + - '<span data-action="toggle-nav" class="action toggle nav">Toggle Nav</span>' + - '</script>', - submenuActionsTemplate: - '<script type="text/x-jquery-tmpl">' + - '<li class="action back">' + - '<a><span>${ category }</span></a>' + - '</li>' + - '<li class="action all">' + - '<a href="${ categoryURL }">All ${ category }</a>' + - '</li>' + - '</script>' - }, - - _init: function() { - this._super(); - - this.mainContainer = $(this.options.mainContainer); - this.pageWrapper = $(this.options.pageWrapper); - this.toggleAction = $(this.options.toggleActionTemplate).tmpl({}); - - if (this.options.responsive) { - mediaCheck({ - media: '(max-width: 640px)', - entry: $.proxy(function() { - this._toggleMobileMode(); - }, this), - exit: $.proxy(function() { - this._toggleDesktopMode(); - }, this) - }); - } - }, - - _bind: function() { - this._super(); - this._bindDocumentEvents(); - }, - - _bindDocumentEvents: function() { - if (!this.eventsBound) { - $(document) - .on('click.toggleMenu', '.action.toggle.nav', $.proxy(function(e) { - if ($(this.element).data('opened')) { - this._hideMenu(); - } else { - this._showMenu(); - } - e.stopPropagation(); - this.mobileNav.scrollTop(0); - this._fixedBackLink(); - }, this)) - .on('click.hideMenu', this.options.pageWrapper, $.proxy(function() { - if ($(this.element).data('opened')) { - this._hideMenu(); - this.mobileNav.scrollTop(0); - this._fixedBackLink(); - } - }, this)) - .on('click.showSubmenu', this.options.titleWithSubmenu, $.proxy(function(e) { - this._showSubmenu(e); - - e.preventDefault(); - this.mobileNav.scrollTop(0); - this._fixedBackLink(); - }, this)) - .on('click.hideSubmenu', '.action.back', $.proxy(function(e) { - this._hideSubmenu(e); - this.mobileNav.scrollTop(0); - this._fixedBackLink(); - }, this)); - - this.eventsBound = true; - } - }, - - _showMenu: function() { - $(this.element).data('opened', true); - this.mainContainer.add( "html" ).addClass(this.options.openedMenuClass); - }, - - _hideMenu: function() { - $(this.element).data('opened', false); - this.mainContainer.add( "html" ).removeClass(this.options.openedMenuClass); - }, - - _showSubmenu: function(e) { - var submenu = $(e.currentTarget).siblings('.submenu'); - - submenu - .addClass('opened') - .closest('.navigation > ul') - .css({ - height: submenu.outerHeight(true) - }); - }, - - _hideSubmenu: function(e) { - var submenuSelector = '.submenu', - submenu = $(e.currentTarget).closest(submenuSelector); - - submenu.removeClass('opened'); - - if (!$('.submenu.opened').length) { - submenu - .closest('.navigation > ul') - .removeAttr('style'); - } else { - submenu - .closest('.navigation > ul') - .css({ - height: submenu.closest('.submenu.opened').outerHeight(true) - }); - } - }, - - _renderSubmenuActions: function() { - $.each($(this.options.itemWithSubmenu), $.proxy(function(index, item) { - var actions = $(this.options.submenuActionsTemplate).tmpl({ - category: $('> a > span', item).text(), - categoryURL: $('> a', item).attr('href') - }), - submenu = $('> .submenu', item), - items = $('> ul', submenu); - - items.prepend(actions); - -// submenu -// .css({ -// height: $(window).outerHeight(true) - 1 -// }); - }, this)); - }, - - _toggleMobileMode: function() { - this._expandMenu(); - - $(this.options.topLevelSubmenu, $(this.options.topLevel, this.element)) - .removeAttr('style'); - - this.toggleAction.insertBefore(this.options.toggleActionPlaceholder); - this.mobileNav = $(this.element).detach().clone(); - this.mainContainer.prepend(this.mobileNav); - this.mobileNav.find('> ul').addClass('nav'); - this._insertExtraItems(); - this.mobileNav.scroll($.proxy( - function() { - this._fixedBackLink(); - }, this - )); - - this._renderSubmenuActions(); - this._bindDocumentEvents(); - }, - - _toggleDesktopMode: function() { - this.mobileNav && this.mobileNav.remove(); - this.toggleAction.detach(); - $(this.element).insertAfter(this.options.origNavPlaceholder); - - $(document) - .off('click.toggleMenu', '.action.toggle.nav') - .off('click.hideMenu', this.options.pageWrapper) - .off('click.showSubmenu', this.options.titleWithSubmenu) - .off('click.hideSubmenu', '.action.back'); - - this.eventsBound = false; - - this._applySubmenuStyles(); - }, - - _insertExtraItems: function() { - if ($('.header > .panel .switcher').length) { - var settings = $('.header > .panel') - .clone() - .addClass('settings'); - - this.mobileNav.prepend(settings); - - settings.wrapInner('<div class="content"></div>'); - settings.prepend('<div class="title">Settings</div>'); - - settings.find('> .title') - .dropdown({ - autoclose: false, - menu: '> .content' - }); - - settings.find('.switcher.language .options > strong') - .dropdown({ - autoclose: false, - menu: '.switcher.language .options > ul' - }); - - settings.find('.switcher.currency .options > strong') - .dropdown({ - autoclose: false, - menu: '.switcher.currency .options > ul' - }); - } - - if ($('.header > .content > .links li').length) { - var account = $('.header > .content > .links') - .clone() - .addClass('account'); - - this.mobileNav.prepend(account); - - account.find('.customer.welcome > .customer') - .dropdown({ - autoclose: false, - menu: '.customer.welcome > .menu' - }); - } - }, - - _fixedBackLink: function() { - var linksBack = this.mobileNav.find('.submenu .action.back'); - var linkBack = this.mobileNav.find('.submenu.opened > ul > .action.back').last(); - - linksBack.removeClass('fixed'); - - if(linkBack.length) { - var subMenu = linkBack.parent(), - navOffset = this.mobileNav.find('.nav').position().top, - linkBackHeight = linkBack.height(); - - if (navOffset <= 0) { - linkBack.addClass('fixed'); - subMenu.css({ - paddingTop: linkBackHeight - }) - } else { - linkBack.removeClass('fixed'); - subMenu.css({ - paddingTop: 0 - }) - } - } - } - }); -})(window.jQuery); \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/js/responsive.js b/app/design/frontend/Magento/plushe/js/responsive.js deleted file mode 100644 index 2628c647646..00000000000 --- a/app/design/frontend/Magento/plushe/js/responsive.js +++ /dev/null @@ -1,130 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -; -(function($) { - 'use strict'; - - $(document).ready(function(){ - mediaCheck({ - media: '(max-width: 640px)', - - // Switch to Mobile Version - entry: function() { - // minicart - $('.action.showcart').addClass('is-disabled'); - - $('.action.showcart').on( "click", function() { - if ($(this).hasClass('is-disabled')) { - window.location = $(this).attr("href"); - } - }); - - $('.action.toggle.checkout.progress') - .on('click.gotoCheckoutProgress', function(e){ - var myWrapper = '#checkout-progress-wrapper'; - scrollTo(myWrapper + ' .title'); - $(myWrapper + ' .title').addClass('active'); - $(myWrapper + ' .content').show(); - }); - - $('body') - .on('click.checkoutProgress', '#checkout-progress-wrapper .title', function(e){ - $(this).toggleClass('active'); - $('#checkout-progress-wrapper .content').toggle(); - }); - - (function() { - var productInfoMain = $('.product.info.main'), - productInfoAdditional = $("#product-info-additional"); - - if (!productInfoAdditional.length) { - - var productTitle = productInfoMain.find(".page.title.product").clone(), - productStock = productInfoMain.find(".stock:not(.alert)").clone(); - - productInfoAdditional = $("<div/>", { - id: "product-info-additional", - addClass: "product info additional" - }); - - $('.catalog-product-view .column.main') - .prepend(productInfoAdditional); - - productInfoAdditional - .append(productTitle) - .append(productStock); - - } else { - productInfoAdditional.removeClass("hidden"); - } - - productInfoMain.addClass("responsive"); - - })(); - var galleryElement = $('[data-role=media-gallery]'); - setTimeout(function(){ - if (galleryElement.length && galleryElement.data('zoom')) { - galleryElement.zoom('disable'); - } - if (galleryElement.length && galleryElement.data('gallery')) { - galleryElement.gallery("option","disableLinks",false); - } - if (galleryElement.length && galleryElement.data('galleryFullScreen')) { - galleryElement.galleryFullScreen('disable'); - } - }, 2000); - - }, - - // Switch to Desktop Version - exit: function() { - // minicart - $('.action.showcart').removeClass('is-disabled'); - - (function() { - - var productInfoMain = $('.product.info.main'), - productInfoAdditional = $("#product-info-additional"); - - if(productInfoAdditional.length) { - productInfoAdditional.addClass("hidden"); - productInfoMain.removeClass("responsive"); - } - - })(); - - var galleryElement = $('[data-role=media-gallery]'); - if (galleryElement.length && galleryElement.data('zoom')) { - galleryElement.zoom('enable'); - } - if (galleryElement.length && galleryElement.data('gallery')) { - galleryElement.gallery("option","disableLinks",true); - } - if (galleryElement.length && galleryElement.data('galleryFullScreen')) { - galleryElement.galleryFullScreen('enable'); - } - } - }); - }); -})(window.jQuery); diff --git a/app/design/frontend/Magento/plushe/js/sticky.js b/app/design/frontend/Magento/plushe/js/sticky.js deleted file mode 100644 index 64000be11e5..00000000000 --- a/app/design/frontend/Magento/plushe/js/sticky.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -/*jshint browser:true jquery:true*/ -(function($, window) { - $.widget('mage.sticky', { - options: { - container: '' - }, - - /** - * Bind handlers to scroll event - * @private - */ - _create: function() { - $(window).on('scroll', $.proxy(this._setTop, this)); - }, - - /** - * float Block on windowScroll - * @private - */ - _setTop: function() { - if ((this.element).is(':visible')) { - var startOffset = this.element.parent().offset().top + parseInt(this.element.css("margin-top")), - currentOffset = $(document).scrollTop(), - parentHeight = $(this.options.container).height() - parseInt(this.element.css("margin-top")), - discrepancyOffset = currentOffset - startOffset; - - if (discrepancyOffset >= 0) { - if (discrepancyOffset + this.element.innerHeight() < parentHeight) { - this.element.css('top', discrepancyOffset); - } - } else { - this.element.css('top', 0); - } - } - } - }); -})(jQuery, window); diff --git a/app/design/frontend/Magento/plushe/js/tabs.js b/app/design/frontend/Magento/plushe/js/tabs.js deleted file mode 100644 index 4deecc66b15..00000000000 --- a/app/design/frontend/Magento/plushe/js/tabs.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -; -(function($) { - 'use strict'; - - $.fn.terms = function(args){ - - // default - var defaults = { - start:0, - wrapper:'', - showAnchor:'', - effects:'slide' - }; - - var options = $.extend(defaults, args); - - this.each(function() { - var obj = $(this), - wrapper = (options.wrapper !== '') ? '> ' + options.wrapper : '', - switches = $(wrapper + '> [data-section="title"] > [data-toggle="switch"]',obj), - terms = $(wrapper + '> [data-section="content"]',obj), - t = switches.length, - marginTop = $(switches[0]).closest('[data-section="title"]').css('position') == 'absolute' ? 0 : null, - title, - current, - - init = function() { - if (t > 0) { - if($(switches[0]).closest('[data-section="title"]').css('display')=='table-cell') { - obj.addClass('adjusted'); - var linksList; - if (obj[0].tagName=='DL') { - linksList = jQuery('<dd>'); - } else { - linksList = jQuery('<div>'); - } - linksList.addClass('sections-nav'); - obj.prepend(linksList); - - for (var i=0; i < t; i++) { - title = $(switches[i]).html(); - var classes = $(switches[i]).closest('[data-section="title"]').attr('class'); - var dataSection = $(switches[i]).closest('[data-section="title"]').attr('data-section'); - var itemHref = $(switches[i]).attr('href'); - var itemClass = $(switches[i]).attr('class'); - $(switches[i]).parent('[data-section="title"]').hide(); - switches[i] = jQuery('<a/>',{ - href: itemHref, - 'class' : itemClass, - html: title - }).appendTo(linksList); - $(switches[i]).wrap('<strong class="'+classes+'" data-section="'+dataSection+'" />'); - } - } - $(switches).each(function(ind,el){ - $(el).click(function(event){ - event.preventDefault(); - showItem(ind); - }); - if (marginTop !== null) { - $(el).closest('[data-section="title"]').css({'top' : marginTop + 'px'}); - marginTop = marginTop + $(el).closest('[data-section="title"]').outerHeight(true); - obj.css({'min-height' : marginTop + 'px' }); - } - }); - - var fromUrl = false; - if (window.location.hash.length > 0) { - $(terms).each(function(ind,el) { - if ( '#info-'+$(el).attr('id') == window.location.hash) { - showItem(ind); - $('html, body').animate({ - scrollTop: $(switches[ind]).offset().top - }, 700); - fromUrl = true; - } - }); - } - if (fromUrl === false) { - if ( options.start % 1 === 0 ) { - current = options.start + 1; - showItem(options.start); - } else { - $(terms).each(function(ind,el) { - if ( $(el).attr('id') == options.start) { - current = ind + 1; - showItem(ind); - $('html, body').animate({ - scrollTop: $(switches[ind]).offset().top - }, 700); - } - }); - } - } - } - }, - - - showItem = function(item) { - if (item != current && !$(switches[item]).closest('[data-section="title"]').hasClass('disabled') ) { - $(switches).closest('[data-section="title"]').removeClass('active'); - if (options.wrapper !== '') { - $(switches).parent().parent().removeClass('active'); - } - $(terms).removeClass('active'); - $(switches[item]).closest('[data-section="title"]').addClass('active'); - if (options.wrapper !== '') { - $(switches[current]).parent().parent().addClass('active'); - } - $(terms[item]).addClass('active'); - - /*if ($(terms[item]).attr('id')) { - scr = document.body.scrollTop; - window.location.hash='#tab-' + $(terms[item]).attr('id'); - document.body.scrollTop = scr; - }*/ - current = item; - } else if ( - // Check if this is accordion width as criteria for now - (obj.attr('data-sections') == 'accordion' - || $(switches[item]).closest('[data-section="title"]').css('width') == obj.css('width') - ) - && item == current && !$(switches[item]).closest('[data-section="title"]').hasClass('disabled') - ) { - $(switches).closest('[data-section="title"]').removeClass('active'); - if (options.wrapper !== '') { - $(switches).parent().parent().removeClass('active'); - } - $(terms).removeClass('active'); - current = -1; - } - }, - - applyEffect = function(item, effect) { - }; - - init(); - }); - }; - $(document).ready(function() { - $('[data-sections]').terms(); - }); - -})(window.jQuery); - - - diff --git a/app/design/frontend/Magento/plushe/js/theme.js b/app/design/frontend/Magento/plushe/js/theme.js deleted file mode 100644 index a56c6586f05..00000000000 --- a/app/design/frontend/Magento/plushe/js/theme.js +++ /dev/null @@ -1,125 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -; -(function($) { - 'use strict'; - - function listScroll() { - var list = $('[data-action="scroll"]').addClass('carousel'); - var listInner = $('> .minilist.items', list); - var items = $('.item', list); - var itemWidth = $(items).length ? $(items[0]).outerWidth() : null; - var perpage = (itemWidth !== null) ? Math.floor(list.outerWidth()/itemWidth) : null; - var pages = (perpage !== null) ? Math.floor(items.length/perpage) : null; - var page=0; - for (var i=0 ; i < perpage; i++) { - $(items[i + page*perpage]).addClass('shown'); - }; - for (var i=perpage; i < items.length; i++) { - $(items[i + page*perpage]).addClass('hidden'); - }; - if ( itemWidth*items.length > list.outerWidth() ) { - var next = $('<button class="action next" type="button"><span>Next</span></button>'); - var previous = $('<button class="action previous" type="button"><span>Previous</span></button>').attr('disabled', 'disabled'); - list.append(previous); - list.append(next); - listInner.wrap('<div class="items-wrapper" />'); - $('.items-wrapper').css('width', itemWidth*perpage); - next.on('click.itemsScroll', function() { - list.addClass('animation'); - items.removeClass('shown'); - items.removeClass('hidden'); - listInner.animate({ - left: '-=' + itemWidth*perpage, - }, 400, 'easeInOutCubic', function() { - // Animation complete. - page = page + 1; - for (var i=0 ; i < perpage; i++) { - $(items[i + page*perpage]).addClass('shown'); - }; - for (var i=perpage; i < items.length; i++) { - $(items[i + page*perpage]).addClass('hidden'); - }; - if (window.console) { - console.log(i); - } - previous.removeAttr('disabled'); - if (page == pages) { - next.attr('disabled', 'disabled'); - } - list.removeClass('animation'); - }); - }); - previous.on('click.itemsScroll', function() { - list.addClass('animation'); - items.removeClass('shown'); - items.removeClass('hidden'); - listInner.animate({ - left: '+=' + itemWidth*perpage, - }, 400, 'easeInOutCubic', function() { - // Animation complete. - page = page - 1; - for (var i=0 ; i < perpage; i++) { - $(items[i + page*perpage]).addClass('shown'); - }; - for (var i=perpage; i < items.length; i++) { - $(items[i + page*perpage]).addClass('hidden'); - }; - next.removeAttr('disabled'); - if (page == 0) { - previous.attr('disabled', 'disabled'); - } - list.removeClass('animation'); - }); - }); - - } - } - - $(document).ready(function() { - listScroll(); - - if ($('body').hasClass('checkout-cart-index')) { - $('.cart.summary > .block > .title').dropdown({autoclose:false, menu:'.title + .content'}); - if ($('#co-shipping-method-form .fieldset.rates').length > 0 && $('#co-shipping-method-form .fieldset.rates :checked').length === 0 ) { - $('.block.shipping > .title').addClass('active'); - $('.block.shipping').addClass('active'); - } - } - - if ($('[role="navigation"]').length) { - $('[role="navigation"]').navigationMenu({ - responsive: true, - submenuContiniumEffect: true - }); - } else { - $('<nav class="navigation" role="navigation"></nav>').navigationMenu({ - responsive: true, - submenuContiniumEffect: true - }); - } - - }); - -})(window.jQuery); \ No newline at end of file diff --git a/app/design/frontend/Magento/plushe/mage/gallery.css b/app/design/frontend/Magento/plushe/mage/gallery.css deleted file mode 100644 index 225705dc644..00000000000 --- a/app/design/frontend/Magento/plushe/mage/gallery.css +++ /dev/null @@ -1,223 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Mage - * @package js - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -@font-face { - font-family: 'icons-blank-theme'; - src: url('../fonts/Blank-Theme-Icons/Blank-Theme-Icons.eot'); - src: url('../fonts/Blank-Theme-Icons/Blank-Theme-Icons.eot?#iefix') format('embedded-opentype'), url('../fonts/Blank-Theme-Icons/Blank-Theme-Icons.woff') format('woff'), url('../fonts/Blank-Theme-Icons/Blank-Theme-Icons.ttf') format('truetype'), url('../fonts/Blank-Theme-Icons/Blank-Theme-Icons.svg#icons-blank-theme') format('svg'); - font-weight: normal; - font-style: normal; -} -.loading-mask { - position: relative; - z-index: 9999; -} -.loading-mask:before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - background-color: rgba(204, 204, 204, 0.5); - background-image: url('../images/loader-1.gif'); - background-position: 50% 50%; - background-repeat: no-repeat; -} -.loading-mask .loader > p { - display: none; -} -.ui-widget-overlay { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: rgba(204, 204, 204, 0.5); -} -.zoom.lense { - position: absolute; - z-index: 9999; - overflow: hidden; - background: #ffffff; - outline: 1px solid #d1d1d1; -} -.zoom.lightbox { - position: fixed; - height: auto !important; - width: auto !important; - left: 20px !important; - top: 20px !important; - right: 20px; - bottom: 20px; - border: 1px solid #d1d1d1; - background-color: #ffffff; - -webkit-box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); -} -.zoom.lightbox .img.photo.container img { - position: absolute; - max-width: 100%; - max-height: 100%; - margin: auto; - left: 0 !important; - right: 0 !important; - top: 0 !important; - bottom: 0 !important; - display: block; -} -.zoom.lightbox .ui-dialog-titlebar-close:before { - background-image: url('../images/sprite-gallery.png'); -} -.zoom.lightbox .ui-dialog-titlebar-close { - position: absolute; - line-height: 1; - top: 20px; - right: 20px; - display: inline-block; -} -.zoom.lightbox .ui-dialog-titlebar-close > span { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.zoom.lightbox .ui-dialog-titlebar-close:before { - content: ''; - display: inline-block; - width: 13px; - height: 13px; - line-height: 13px; - vertical-align: middle; - background-image: url('../images/sprite-gallery.svg'); - background-position: -60px 0; - background-repeat: no-repeat; - margin: 0; -} -.zoom.lightbox .gallery.control.prev:before, -.zoom.lightbox .gallery.control.next:before { - background-image: url('../images/sprite-gallery.png'); -} -.zoom.lightbox .gallery.control.prev, -.zoom.lightbox .gallery.control.next { - position: absolute; - top: 50%; - margin-top: -57px; - display: inline-block; -} -.zoom.lightbox .gallery.control.prev:before, -.zoom.lightbox .gallery.control.next:before { - content: ''; - display: inline-block; - width: 29px; - height: 57px; - line-height: 57px; - vertical-align: middle; - background-image: url('../images/sprite-gallery.svg'); - background-position: 0 0; - background-repeat: no-repeat; - margin: 0; -} -.zoom.lightbox .gallery.control.prev { - left: 20px; -} -.zoom.lightbox .gallery.control.next { - right: 20px; -} -.zoom.lightbox .gallery.control.next:before { - background-position: -30px 0px; -} -.zoom.lightbox .product.photo.main { - position: absolute; - top: 33px; - left: 49px; - right: 49px; - bottom: 130px; - margin: 0 20px 72px 20px; -} -.zoom.lightbox .product.photo.main:before { - content: ""; - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - z-index: 1; -} -.zoom.lense .zoom.inner > img { - position: absolute; -} -.zoom.lightbox .product.photo.thumbs { - width: 100%; - padding: 15px 15px 15px 15px; - background: #ffffff; - position: absolute; - bottom: 0; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.zoom.lightbox .product.photo.thumbs ul { - margin: 0; - padding: 0; - list-style-type: none; - list-style-image: none; - white-space: nowrap; - position: relative; - vertical-align: top; - overflow: auto; -} -.zoom.lightbox .product.photo.thumbs .item.thumb { - display: inline-block; - margin: 0 0 0 20px; - line-height: 1; -} -.zoom.lightbox .product.photo.thumbs li:first-child { - margin-left: 0; -} -.zoom.lightbox .product.photo.thumbs a { - border: 1px solid transparent; - display: block; - outline: none; -} -.zoom.lightbox .product.photo.thumbs .active { - border-color: #ff5f10; -} -.zoom.lightbox .product.photo.thumbs .item.thumb img { - border: none; - position: static; -} -.zoom.lightbox .gallery.control { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} diff --git a/app/design/frontend/Magento/plushe/media/preview.jpg b/app/design/frontend/Magento/plushe/media/preview.jpg index c15840788eda96da49e92c32fe285a3130126ea0..9352afc4f89f9809871da30012d82deff873a126 100644 GIT binary patch literal 12683 zcmeHLc~n!^x<6rbKoJ>4LCJ-R1(`xf!jOQJ0JSSfkwieDmV^WmNH7VIpe3l+CxSw8 zU@XCfeL;hUqCyBmK}E#^a%q}E2%sQ?AcKG+2$FXKYPHwrQ`<k@U5k&!$v%63!*Bo2 z_wBRKmbc2g0DX5>7zF^fZZ!v%0Dp*l2++btlfu~m1W*CH(EuRtQl{-;GNT-=t*H#F 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 B9I*fZ literal 113913 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 diff --git a/app/design/frontend/Magento/plushe/theme.xml b/app/design/frontend/Magento/plushe/theme.xml index d4b9fe5dc80..ed8f817e911 100644 --- a/app/design/frontend/Magento/plushe/theme.xml +++ b/app/design/frontend/Magento/plushe/theme.xml @@ -26,7 +26,8 @@ --> <theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/Magento/Framework/Config/etc/theme.xsd"> <title>Magento Plushe</title> - <version>1.0.0.0</version> + <version>2.0.0.0</version> + <parent>Magento/blank</parent> <media> <preview_image>media/preview.jpg</preview_image> </media> diff --git a/app/design/frontend/Magento/plushe/view.xml b/app/design/frontend/Magento/plushe/view.xml deleted file mode 100644 index e890597439e..00000000000 --- a/app/design/frontend/Magento/plushe/view.xml +++ /dev/null @@ -1,298 +0,0 @@ -<?xml version="1.0"?> -<!-- -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Design - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ ---> -<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/Magento/Framework/Config/etc/view.xsd"> - <vars module="Magento_Catalog"> - <var name="product_small_image_sidebar_size">100</var> <!-- Override for small product image --> - <var name="product_base_image_size">275</var> <!-- Override for base product image --> - <var name="product_base_image_icon_size">48</var> <!-- Base product image icon size --> - - <var name="product_list_image_size">166</var> <!-- New Product image size used in product list --> - <var name="product_zoom_image_size">370</var> <!-- New Product image size used for zooming --> - - <var name="product_image_white_borders">0</var> - - <var name="review_page_product_image:type">small_image</var> - <var name="review_page_product_image:width">285</var> - <var name="review_page_product_image:ratio">1</var> - <var name="review_page_product_image:height">285</var> - - <var name="customer_account_product_review_page:type">image</var> - <var name="customer_account_product_review_page:width">285</var> - <var name="customer_account_product_review_page:ratio">1</var> - <var name="customer_account_product_review_page:height">285</var> - - <var name="category_page_list:type">small_image</var> - <var name="category_page_list:width">180</var> - <var name="category_page_list:ratio">1</var> - <var name="category_page_list:height">230</var> - - <var name="category_page_grid:type">small_image</var> - <var name="category_page_grid:width">180</var> - <var name="category_page_grid:ratio">1</var> - <var name="category_page_grid:height">230</var> - - <var name="product_comparison_list:type">small_image</var> - <var name="product_comparison_list:width">140</var> - <var name="product_comparison_list:ratio">1</var> - <var name="product_comparison_list:height">140</var> - - <var name="related_products_list:type">small_image</var> - <var name="related_products_list:width">140</var> - <var name="related_products_list:ratio">1</var> - <var name="related_products_list:height">140</var> - - <var name="upsell_products_list:type">small_image</var> - <var name="upsell_products_list:width">140</var> - <var name="upsell_products_list:ratio">1</var> - <var name="upsell_products_list:height">140</var> - - <var name="product_page_main_image:type">image</var> - <var name="product_page_main_image:width">400</var> - <var name="product_page_main_image:ratio">1</var> - <var name="product_page_main_image:height">495</var> - - <var name="product_page_main_image_default:type">image</var> - <var name="product_page_main_image_default:width">400</var> - <var name="product_page_main_image_default:ratio">1</var> - <var name="product_page_main_image_default:height">495</var> - - <var name="product_page_more_views:type">thumbnail</var> - <var name="product_page_more_views:width">90</var> - <var name="product_page_more_views:ratio">1</var> - <var name="product_page_more_views:height">90</var> - - <var name="side_column_widget_product_thumbnail:type">thumbnail</var> - <var name="side_column_widget_product_thumbnail:width">50</var> - <var name="side_column_widget_product_thumbnail:ratio">1</var> - <var name="side_column_widget_product_thumbnail:height">50</var> - - <var name="new_products_content_widget_list:type">small_image</var> - <var name="new_products_content_widget_list:width">166</var> - <var name="new_products_content_widget_list:ratio">1</var> - <var name="new_products_content_widget_list:height">166</var> - - <var name="new_products_content_widget_grid:type">small_image</var> - <var name="new_products_content_widget_grid:width">166</var> - <var name="new_products_content_widget_grid:ratio">1</var> - <var name="new_products_content_widget_grid:height">166</var> - - <var name="recently_compared_products_images_names_widget:type">thumbnail</var> - <var name="recently_compared_products_images_names_widget:width">50</var> - <var name="recently_compared_products_images_names_widget:ratio">1</var> - <var name="recently_compared_products_images_names_widget:height">50</var> - - <var name="recently_viewed_products_images_names_widget:type">small_image</var> - <var name="recently_viewed_products_images_names_widget:width">50</var> - <var name="recently_viewed_products_images_names_widget:ratio">1</var> - <var name="recently_viewed_products_images_names_widget:height">50</var> - - <var name="recently_compared_products_images_only_widget:type">thumbnail</var> - <var name="recently_compared_products_images_only_widget:width">76</var> - <var name="recently_compared_products_images_only_widget:ratio">1</var> - <var name="recently_compared_products_images_only_widget:height">76</var> - - <var name="recently_viewed_products_images_only_widget:type">small_image</var> - <var name="recently_viewed_products_images_only_widget:width">76</var> - <var name="recently_viewed_products_images_only_widget:ratio">1</var> - <var name="recently_viewed_products_images_only_widget:height">76</var> - - <var name="bundled_product_customization_page:type">thumbnail</var> - <var name="bundled_product_customization_page:width">140</var> - <var name="bundled_product_customization_page:ratio">1</var> - <var name="bundled_product_customization_page:height">140</var> - - <var name="recently_compared_products_grid_content_widget:type">small_image</var> - <var name="recently_compared_products_grid_content_widget:width">135</var> - <var name="recently_compared_products_grid_content_widget:ratio">1</var> - <var name="recently_compared_products_grid_content_widget:height">135</var> - - <var name="recently_compared_products_list_content_widget:type">small_image</var> - <var name="recently_compared_products_list_content_widget:width">166</var> - <var name="recently_compared_products_list_content_widget:ratio">1</var> - <var name="recently_compared_products_list_content_widget:height">166</var> - - <var name="recently_viewed_products_grid_content_widget:type">small_image</var> - <var name="recently_viewed_products_grid_content_widget:width">135</var> - <var name="recently_viewed_products_grid_content_widget:ratio">1</var> - <var name="recently_viewed_products_grid_content_widget:height">135</var> - - <var name="recently_viewed_products_list_content_widget:type">small_image</var> - <var name="recently_viewed_products_list_content_widget:width">166</var> - <var name="recently_viewed_products_list_content_widget:ratio">1</var> - <var name="recently_viewed_products_list_content_widget:height">166</var> - - <var name="customer_shared_wishlist:type">small_image</var> - <var name="customer_shared_wishlist:width">113</var> - <var name="customer_shared_wishlist:ratio">1</var> - <var name="customer_shared_wishlist:height">113</var> - - <var name="wishlist_thumbnail:type">small_image</var> - <var name="wishlist_thumbnail:width">113</var> - <var name="wishlist_thumbnail:ratio">1</var> - <var name="wishlist_thumbnail:height">113</var> - - <var name="wishlist_sidebar_block:type">thumbnail</var> - <var name="wishlist_sidebar_block:width">50</var> - <var name="wishlist_sidebar_block:ratio">1</var> - <var name="wishlist_sidebar_block:height">50</var> - - <var name="shared_wishlist_email:type">small_image</var> - <var name="shared_wishlist_email:width">135</var> - <var name="shared_wishlist_email:ratio">1</var> - <var name="shared_wishlist_email:height">135</var> - - <var name="customer_account_my_tags_tag_view:type">small_image</var> - <var name="customer_account_my_tags_tag_view:width">100</var> - <var name="customer_account_my_tags_tag_view:ratio">1</var> - <var name="customer_account_my_tags_tag_view:height">100</var> - - <var name="cart_cross_sell_products:type">thumbnail</var> - <var name="cart_cross_sell_products:width">140</var> - <var name="cart_cross_sell_products:ratio">1</var> - <var name="cart_cross_sell_products:height">140</var> - - <var name="gift_messages_checkout_thumbnail:type">thumbnail</var> - <var name="gift_messages_checkout_thumbnail:width">75</var> - <var name="gift_messages_checkout_thumbnail:ratio">1</var> - <var name="gift_messages_checkout_thumbnail:height">75</var> - - <var name="gift_messages_checkout_small_image:type">small_image</var> - <var name="gift_messages_checkout_small_image:width">75</var> - <var name="gift_messages_checkout_small_image:ratio">1</var> - <var name="gift_messages_checkout_small_image:height">75</var> - - <var name="mini_cart_product_thumbnail:type">thumbnail</var> - <var name="mini_cart_product_thumbnail:width">78</var> - <var name="mini_cart_product_thumbnail:ratio">1</var> - <var name="mini_cart_product_thumbnail:height">78</var> - - <var name="new_products_images_only_widget:type">small_image</var> - <var name="new_products_images_only_widget:width">78</var> - <var name="new_products_images_only_widget:ratio">1</var> - <var name="new_products_images_only_widget:height">78</var> - - <var name="cart_page_product_thumbnail:type">thumbnail</var> - <var name="cart_page_product_thumbnail:width">80</var> - <var name="cart_page_product_thumbnail:ratio">1</var> - <var name="cart_page_product_thumbnail:height">80</var> - - <var name="product_stock_alert_email_product_image:type">small_image</var> - <var name="product_stock_alert_email_product_image:width">76</var> - <var name="product_stock_alert_email_product_image:ratio">1</var> - <var name="product_stock_alert_email_product_image:height">76</var> - </vars> - <vars module="Magento_Bundle"> - <var name="product_summary_image_size">58</var> <!-- New Product image size used for summary block--> - </vars> - <vars module="Magento_DesignEditor"> - <var name="store-name:font-picker">"marvel"</var> - <var name="store-name:color-picker">#837d75</var> - <var name="store-name:logo-uploader"></var> - <var name="header-background:color-picker">#d6d7d2</var> - <var name="header-background:image-uploader">header-bg.jpg</var> - <var name="header-background:tile">repeat</var> - - <var name="menu-background">#f8f8f8</var> - <var name="menu-stroke">#c2c2c2</var> - <var name="menu-links">#675f55</var> - <var name="menu-links-hover">#f47a1f</var> - - <var name="header-links">#837d75</var> - <var name="header-links-hover">#675f55</var> - <var name="header-scroll-bar-background">#ffffff</var> - <var name="header-scroll-bar-handle">#e5e5e5</var> - <var name="search-field">#ffffff</var> - <var name="search-field-text">#675f55</var> - <var name="search-field-stroke">#c2c2c2</var> - - <var name="page-background:color-picker">#ffffff</var> - <var name="page-background:image-uploader"></var> - <var name="page-background:tile">no-repeat</var> - - <var name="form-background">#f8f8f8</var> - <var name="form-stroke">#c2c2c2</var> - <var name="form2-background">#e5e5e5</var> - <var name="form2-stroke">#c2c2c2</var> - - <var name="form-field-stroke">#c2c2c2</var> - <var name="form-field-stroke-clicked">#999999</var> - <var name="image-stroke-keylines">#e5e5e5</var> - <var name="scroll-bar-background">#f8f8f8</var> - <var name="scroll-bar-handle">#c2c2c2</var> - - <var name="radio-checkbox-icon">#675f55</var> - <var name="radio-checkbox-background">#e5e5e5</var> - <var name="radio-checkbox-stroke">#999999</var> - - <var name="button-background">#f47a1f</var> - <var name="button-text">#ffffff</var> - <var name="button-hover">#ff953b</var> - <var name="icons">#c2c2c2</var> - <var name="icons-hover">#999999</var> - <var name="icons2">#837d75</var> - - <var name="accents">#55c2e6</var> - <var name="size-swatches">#f8f8f8</var> - <var name="size-swatches-unavailable">#e5e5e5</var> - <var name="size-swatches-hover">#675f55</var> - - <var name="tooltip-text">#675f55</var> - <var name="tooltip-box">#ffffff</var> - <var name="tooltip-stroke">#c2c2c2</var> - <var name="tooltip2-text">#ffffff</var> - <var name="tooltip2-box">#000000</var> - <var name="tooltip2-stroke">#c2c2c2</var> - - <var name="error-box">#ff3200</var> - <var name="error-icon">#ffffff</var> - <var name="success-box">#d3edd5</var> - <var name="success-icon">#ffffff</var> - <var name="notice-box">#ffedb8</var> - <var name="notice-icon">#ffffff</var> - - <var name="banner-text:font-picker">"marvel", Arial, sans-serif</var> - <var name="banner-text:color-picker">#675f55</var> - <var name="page-headings:font-picker">"sourcesanspro", Arial, sans-serif</var> - <var name="page-headings:color-picker">#675f55</var> - <var name="menu:font-picker">"sourcesanspro", Arial, sans-serif</var> - <var name="menu:color-picker">#675f55</var> - - <var name="body-text:font-picker">"sourcesanspro", Arial, sans-serif</var> - <var name="body-text:color-picker">#675f55</var> - - <var name="buttons:font-picker">"sourcesanspro", Arial, sans-serif</var> - <var name="buttons:color-picker">#ffffff</var> - - <var name="text-links">#675f55</var> - <var name="text-links-hover">#f47a1f</var> - <var name="text-links-active">#f47a1f</var> - <var name="text-links-product">#675f55</var> - <var name="small-links">#675f55</var> - <var name="small-links-hover">#c2c2c2</var> - </vars> -</view> diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php b/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php index c3522e3850a..847b399c018 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php @@ -69,13 +69,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * An error occurred. - * Method is required by implemented interface, but is not needed by the class. - * - * @param \PHPUnit_Framework_Test $test - * @param \Exception $e - * @param float $time - * + * {@inheritdoc} * @SuppressWarnings(PHPMD.ShortVariable) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ @@ -84,13 +78,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * A failure occurred. - * Method is required by implemented interface, but is not needed by the class. - * - * @param \PHPUnit_Framework_Test $test - * @param \PHPUnit_Framework_AssertionFailedError $e - * @param float $time - * + * {@inheritdoc} * @SuppressWarnings(PHPMD.ShortVariable) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ @@ -99,13 +87,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * Incomplete test. - * Method is required by implemented interface, but is not needed by the class. - * - * @param \PHPUnit_Framework_Test $test - * @param \Exception $e - * @param float $time - * + * {@inheritdoc} * @SuppressWarnings(PHPMD.ShortVariable) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ @@ -114,14 +96,16 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * Skipped test. - * Method is required by implemented interface, but is not needed by the class. - * - * @param \PHPUnit_Framework_Test $test - * @param \Exception $e - * @param float $time - * @since Method available since Release 3.0.0 - * + * {@inheritdoc} + * @SuppressWarnings(PHPMD.ShortVariable) + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time) + { + } + + /** + * {@inheritdoc} * @SuppressWarnings(PHPMD.ShortVariable) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ @@ -130,10 +114,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * A test suite started. - * - * @param \PHPUnit_Framework_TestSuite $suite - * @since Method available since Release 2.2.0 + * {@inheritdoc} */ public function startTestSuite(\PHPUnit_Framework_TestSuite $suite) { @@ -145,10 +126,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * A test suite ended. - * - * @param \PHPUnit_Framework_TestSuite $suite - * @since Method available since Release 2.2.0 + * {@inheritdoc} */ public function endTestSuite(\PHPUnit_Framework_TestSuite $suite) { @@ -159,9 +137,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * A test started. - * - * @param \PHPUnit_Framework_Test $test + * {@inheritdoc} */ public function startTest(\PHPUnit_Framework_Test $test) { @@ -172,12 +148,7 @@ class PhpUnit implements \PHPUnit_Framework_TestListener } /** - * A test ended. - * Method signature is implied by implemented interface, not all parameters are needed. - * - * @param \PHPUnit_Framework_Test $test - * @param float $time - * + * {@inheritdoc} * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function endTest(\PHPUnit_Framework_Test $test, $time) diff --git a/dev/tests/integration/framework/bootstrap.php b/dev/tests/integration/framework/bootstrap.php index 72ac1316994..a0f65e9f90b 100644 --- a/dev/tests/integration/framework/bootstrap.php +++ b/dev/tests/integration/framework/bootstrap.php @@ -32,11 +32,8 @@ $testsBaseDir = dirname(__DIR__); $testsTmpDir = "{$testsBaseDir}/tmp"; $magentoBaseDir = realpath("{$testsBaseDir}/../../../"); -\Magento\Framework\Autoload\IncludePath::addIncludePath( - array( - "{$testsBaseDir}/framework", - "{$testsBaseDir}/testsuite" - ) +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath( + array("{$testsBaseDir}/framework", "{$testsBaseDir}/testsuite") ); function tool_autoloader($className) diff --git a/dev/tests/integration/framework/tests/unit/framework/bootstrap.php b/dev/tests/integration/framework/tests/unit/framework/bootstrap.php index 37dfbd9f1d3..55ad628f84d 100644 --- a/dev/tests/integration/framework/tests/unit/framework/bootstrap.php +++ b/dev/tests/integration/framework/tests/unit/framework/bootstrap.php @@ -27,4 +27,4 @@ $rootDir = realpath(__DIR__ . '/../../../../../../../'); require_once $rootDir . '/app/bootstrap.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath($rootDir . '/dev/tests/integration/framework'); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath($rootDir . '/dev/tests/integration/framework'); diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Workaround/Cleanup/TestCasePropertiesTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Workaround/Cleanup/TestCasePropertiesTest.php index a75b9221caf..5cda9ce5220 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Workaround/Cleanup/TestCasePropertiesTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Workaround/Cleanup/TestCasePropertiesTest.php @@ -61,7 +61,7 @@ class TestCasePropertiesTest extends \PHPUnit_Framework_TestCase $testClass = $testSuite->testAt(0); $propertyObjectMock = $this->getMock('stdClass', array('__destruct')); - $propertyObjectMock->expects($this->once())->method('__destruct'); + $propertyObjectMock->expects($this->atLeastOnce())->method('__destruct'); $testClass->setPropertyObject($propertyObjectMock); foreach ($this->_fixtureProperties as $property) { diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php index 0dadb0ecb52..8b8fe5ed7ac 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php @@ -130,14 +130,6 @@ class AbstractTest extends \PHPUnit_Framework_TestCase $this->assertGreaterThan(0, $this->_block->getMinimalQty($this->_product)); } - public function testGetPriceHtml() - { - $this->_block->setLayout( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\View\LayoutInterface') - ); - $this->assertContains('10', $this->_block->getPriceHtml($this->_product)); - } - public function testGetReviewsSummaryHtml() { $this->_block->setLayout( @@ -153,40 +145,6 @@ class AbstractTest extends \PHPUnit_Framework_TestCase $this->assertSame($this->_product, $this->_block->getProduct()); } - public function testGetTierPriceTemplate() - { - $this->assertEquals('product/view/tierprices.phtml', $this->_block->getTierPriceTemplate()); - $this->_block->setData('tier_price_template', 'test.phtml'); - $this->assertEquals('test.phtml', $this->_block->getTierPriceTemplate()); - } - - public function testGetTierPriceHtml() - { - $this->_block->setLayout( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\View\LayoutInterface') - ); - $html = $this->_block->getTierPriceHtml(); - $this->assertNotEmpty($html); - $this->assertContains('2', $html); /* Buy 2 */ - $this->assertContains('8', $html); /* Price 8 */ - $this->assertContains('5', $html); /* Buy 5 and price 5 */ - } - - public function testGetTierPrices() - { - $prices = $this->_block->getTierPrices(); - $this->assertNotEmpty($prices); - $this->assertGreaterThanOrEqual(2, count($prices)); - $this->assertArrayHasKey('price', $prices[0]); - $this->assertArrayHasKey('savePercent', $prices[0]); - $this->assertArrayHasKey('formated_price', $prices[0]); - $this->assertArrayHasKey('formated_price_incl_tax', $prices[0]); - - $this->_product->setFinalPrice(7); - $prices = $this->_block->getTierPrices(); - $this->assertEquals(1, count($prices)); - } - public function testGetImageLabel() { $this->assertEquals($this->_product->getName(), $this->_block->getImageLabel()); diff --git a/dev/tests/integration/testsuite/Magento/Cron/Model/ObserverTest.php b/dev/tests/integration/testsuite/Magento/Cron/Model/ObserverTest.php index cad07426c6f..f2d9a513bb3 100644 --- a/dev/tests/integration/testsuite/Magento/Cron/Model/ObserverTest.php +++ b/dev/tests/integration/testsuite/Magento/Cron/Model/ObserverTest.php @@ -40,6 +40,9 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $this->_model->dispatch('this argument is not used'); } + /** + * @magentoConfigFixture current_store crontab/default/jobs/catalog_product_alert/schedule/cron_expr 8 * * * * + */ public function testDispatchScheduled() { $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php index 52a2bae2113..9252aeeda84 100755 --- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php @@ -1061,4 +1061,13 @@ class IndexTest extends \Magento\Backend\Utility\Controller ); $this->assertRedirect($this->stringStartsWith($this->_baseControllerUrl . 'edit')); } + + public function testIndexActionCorrectTabsQty() + { + $this->dispatch('backend/customer/index/new/'); + $html = $this->getResponse()->getBody(); + $this->assertSelectCount('.tab-item-link', 2, $html); + $this->assertSelectCount('[title="Account Information"]', 1, $html); + $this->assertSelectCount('[title="Addresses"]', 1, $html); + } } diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php b/dev/tests/integration/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php deleted file mode 100644 index 2059af715fd..00000000000 --- a/dev/tests/integration/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php +++ /dev/null @@ -1,176 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - */ - -namespace Magento\Downloadable\Block\Catalog\Product; - -use Magento\Customer\Controller\RegistryConstants; - -/** - * Tests Magento\Downloadable\Block\Catalog\Product\Links.php - * - */ -class LinksTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\TestFramework\ObjectManager */ - private $objectManager; - - /** @var \Magento\Tax\Model\Calculation */ - private $taxCalculationModel; - - /** @var \Magento\Framework\Registry */ - private $registry; - - /** @var \Magento\Downloadable\Block\Catalog\Product\Links */ - private $linksBlock; - - public function setUp() - { - $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->registry = $this->objectManager->get('Magento\Framework\Registry'); - $this->taxCalculationModel = $this->objectManager->create('Magento\Tax\Model\Calculation'); - - $this->linksBlock = $this->objectManager->get('Magento\Framework\View\LayoutInterface') - ->createBlock('Magento\Downloadable\Block\Catalog\Product\Links'); - } - - public function tearDown() - { - $this->registry->unregister('product'); - $this->registry->unregister(RegistryConstants::CURRENT_CUSTOMER_ID); - $this->registry->unregister('_fixture/Magento_Tax_Model_Calculation_Rule'); - $this->registry->unregister('_fixture/Magento_Tax_Model_Calculation_Rate'); - } - - /** - * Test that has no customer registered. - * - * @magentoDataFixture Magento/Downloadable/_files/product_with_files.php - */ - public function testGetFormattedLinkPriceNoCustomer() - { - $product = $this->objectManager->create('Magento\Catalog\Model\Product')->load(1); - $this->registry->register('product', $product); - $link = array_values($this->linksBlock->getLinks())[0]; - $formattedLink = $this->linksBlock->getFormattedLinkPrice($link); - $this->assertEquals('<span class="price-notice">+<span class="price">$15.00</span></span>', $formattedLink); - } - - /** - * Test that uses customer's billing address as tax calculation base. - * - * @magentoConfigFixture current_store tax/display/type 3 - * @magentoConfigFixture current_store tax/calculation/based_on billing - * @magentoDataFixture Magento/Downloadable/_files/product_with_files.php - * @magentoDataFixture Magento/Customer/_files/customer.php - * @magentoDataFixture Magento/Customer/_files/customer_address.php - * @magentoDataFixture Magento/Customer/_files/customer_group.php - * @magentoDataFixture Magento/Tax/_files/tax_classes.php - */ - public function testGetFormattedLinkPriceCustomerBasedTax() - { - /** set the product and tax classes from tax_class fixture */ - $this->setUpTaxClasses(); - $link = array_values($this->linksBlock->getLinks())[0]; - $formattedLink = $this->linksBlock->getFormattedLinkPrice($link); - $this->assertEquals( - '<span class="price-notice">+<span class="price">$15.00</span>'. - ' (+<span class="price">$16.13</span> Incl. Tax)</span>', - $formattedLink - ); - } - - /** - * Test a customer outside of region. - * - * @magentoConfigFixture current_store tax/display/type 3 - * @magentoConfigFixture current_store tax/calculation/based_on billing - * @magentoDataFixture Magento/Downloadable/_files/product_with_files.php - * @magentoDataFixture Magento/Customer/_files/customer.php - * @magentoDataFixture Magento/Customer/_files/customer_address.php - * @magentoDataFixture Magento/Customer/_files/customer_group.php - * @magentoDataFixture Magento/Tax/_files/tax_classes.php - */ - public function testGetFormattedLinkPriceCustomerBasedTaxDiffRegion() - { - /** set the product and tax classes from tax_class fixture */ - $this->setUpTaxClasses(13); - $link = array_values($this->linksBlock->getLinks())[0]; - $formattedLink = $this->linksBlock->getFormattedLinkPrice($link); - $this->assertEquals('<span class="price-notice">+<span class="price">$15.00</span></span>', $formattedLink); - } - - /** - * Test that has a customer but product based tax. - * - * @magentoConfigFixture current_store tax/display/type 3 - * @magentoDataFixture Magento/Downloadable/_files/product_with_files.php - * @magentoDataFixture Magento/Customer/_files/customer.php - */ - public function testGetFormattedLinkPriceCustomerProductTax() - { - $product = $this->objectManager->create('Magento\Catalog\Model\Product')->load(1); - $product->setTaxPercent(10); - $product->save(); - - $this->registry->register('product', $product); - $this->registry->register(RegistryConstants::CURRENT_CUSTOMER_ID, 1); - - $link = array_values($this->linksBlock->getLinks())[0]; - $formattedLink = $this->linksBlock->getFormattedLinkPrice($link); - $this->assertEquals( - '<span class="price-notice">+<span class="price">$15.00</span>'. - ' (+<span class="price">$16.50</span> Incl. Tax)</span>', - $formattedLink - ); - } - - /** - * Set the product and tax classes from tax_class fixture - * - * @param int $addressRegionId Region to use for customer billing address. - * Defaults to 12 which is the same as in tax rate fixture - */ - private function setUpTaxClasses($addressRegionId = 12) - { - $taxRule = $this->registry->registry('_fixture/Magento_Tax_Model_Calculation_Rule'); - $customerTaxClasses = $taxRule->getTaxCustomerClass(); - $productTaxClasses = $taxRule->getTaxProductClass(); - - $customerGroup = $this->objectManager->create('Magento\Customer\Model\Group')->load(1); - $customerGroup->setTaxClassId($customerTaxClasses[0]); - $customerGroup->save(); - - $address = $this->objectManager->create('Magento\Customer\Model\Address')->load(1); - $address->setRegionId($addressRegionId); - $address->save(); - - $product = $this->objectManager->create('Magento\Catalog\Model\Product')->load(1); - $product->setTaxClassId($productTaxClasses[0]); - $product->save(); - - $this->registry->register('product', $product); - $this->registry->register(RegistryConstants::CURRENT_CUSTOMER_ID, 1); - } -} - \ No newline at end of file diff --git a/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php new file mode 100644 index 00000000000..63d751517ac --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php @@ -0,0 +1,46 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Email\Controller\Adminhtml\Email; + +/** + * @magentoAppArea adminhtml + */ +class TemplateTest extends \Magento\Backend\Utility\Controller +{ + public function testDefaultTemplateAction() + { + /** @var $formKey \Magento\Framework\Data\Form\FormKey */ + $formKey = $this->_objectManager->get('Magento\Framework\Data\Form\FormKey'); + $post = array( + 'form_key' => $formKey->getFormKey(), + 'code' => 'customer_password_forgot_email_template' + ); + $this->getRequest()->setPost($post); + $this->dispatch('backend/admin/email_template/defaultTemplate/?isAjax=true'); + $this->assertContains( + '"template_type":2,"template_subject":"Password Reset Confirmation for {{var customer.name}}"', + $this->getResponse()->getBody() + ); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php index dd4e283c96c..10b7c01f094 100644 --- a/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php +++ b/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php @@ -55,6 +55,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase /** * @magentoConfigFixture current_store web/unsecure/base_link_url http://example.com/ + * @magentoConfigFixture admin_store web/unsecure/base_link_url http://example.com/ */ public function testStoreDirective() { @@ -67,6 +68,12 @@ class FilterTest extends \PHPUnit_Framework_TestCase array('{{store url="translation/ajax/index"}}', 'store', ' url="translation/ajax/index"') ); $this->assertStringMatchesFormat('http://example.com/%stranslation/ajax/index/', $url); + + $this->_model->setStoreId(0); + $url = $this->_model->storeDirective( + array('{{store url="translation/ajax/index"}}', 'store', ' url="translation/ajax/index"') + ); + $this->assertStringMatchesFormat('http://example.com/index.php/backend/translation/ajax/index/%A', $url); } public function testEscapehtmlDirective() diff --git a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php index 992a1c3cda2..694d96ac0a9 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php @@ -73,7 +73,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase ); $generationDirectory = $this->varDirectory->getAbsolutePath('generation'); - \Magento\Framework\Autoload\IncludePath::addIncludePath($generationDirectory); + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath($generationDirectory); $this->_ioObject = new \Magento\Framework\Code\Generator\Io( new \Magento\Framework\Filesystem\Driver\File(), diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php index ef6b3a4c4b2..4e9ac039a4c 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php @@ -177,11 +177,13 @@ class CreateTest extends \Magento\Backend\Utility\Controller $this->assertContains('>Test Configurable</label>', $body); $this->assertContains('"code":"test_configurable","label":"Test Configurable"', $body); $this->assertContains( - '"label":"Option 1","price":"5","oldPrice":"5","inclTaxPrice":"5","exclTaxPrice":"5","products":[', + '"label":"Option 1","price":"5","oldPrice":"5",'. + '"inclTaxPrice":"5","exclTaxPrice":"5","products":[', $body ); $this->assertContains( - '"label":"Option 2","price":"5","oldPrice":"5","inclTaxPrice":"5","exclTaxPrice":"5","products":[', + '"label":"Option 2","price":"5","oldPrice":"5",'. + '"inclTaxPrice":"5","exclTaxPrice":"5","products":[', $body ); $this->assertContains('"basePrice":"100","oldPrice":"100","productId":"1","chooseText":"Choose an Option..."', diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php index 6e2f3816c58..3fb1e77a6e1 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php @@ -37,8 +37,10 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity * @param string $file */ function ($application, $file) { - \Magento\TestFramework\Helper\Bootstrap::getInstance() - ->loadArea($application); + if ($application != 'base') { + \Magento\TestFramework\Helper\Bootstrap::getInstance() + ->loadArea($application); + } \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Framework\View\DesignInterface') ->setDefaultDesignTheme(); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php index c69a2f08034..6d6aa9363c7 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php @@ -132,7 +132,6 @@ class TemplateFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrit $templates[] = array($module, (string)$template, $parent[0]->asXml()); } break; - case 'addPriceBlockType': case 'addInformationRenderer': case 'addMergeSettingsBlockType': $blockType = $action[0]->xpath('block'); diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php index 35aa9674051..4dfccfbb740 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php @@ -30,21 +30,25 @@ class ItemsTest extends \PHPUnit_Framework_TestCase { public function testGetColumns() { - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $layout = $objectManager->get( 'Magento\Framework\View\LayoutInterface' ); $block = $layout->addBlock('Magento\Wishlist\Block\Customer\Wishlist\Items', 'test'); $child = $this->getMock( - 'Magento\Framework\View\Element\Text', + 'Magento\Wishlist\Block\Customer\Wishlist\Item\Column', array('isEnabled'), - array( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( - 'Magento\Framework\View\Element\Context' - ) - ) + array($objectManager->get('Magento\Framework\View\Element\Context')), + '', + false ); $child->expects($this->any())->method('isEnabled')->will($this->returnValue(true)); $layout->addBlock($child, 'child', 'test'); - $this->assertSame(array($child), $block->getColumns()); + $expected = $child->getType(); + $columns = $block->getColumns(); + $this->assertNotEmpty($columns); + foreach ($columns as $column) { + $this->assertSame($expected, $column->getType()); + } } } diff --git a/dev/tests/js/jsTestDriverOrder.php b/dev/tests/js/jsTestDriverOrder.php index 74060e49644..956bbe3ced9 100644 --- a/dev/tests/js/jsTestDriverOrder.php +++ b/dev/tests/js/jsTestDriverOrder.php @@ -32,7 +32,7 @@ return array( '/pub/lib/jquery/jquery-1.8.2.js', '/pub/lib/jquery/jquery-ui-1.9.2.js', '/pub/lib/jquery/jquery.cookie.js', - '/pub/lib/headjs/head.load.min.js', + '/pub/lib/headjs/head.min.js', '/pub/lib/mage/mage.js', '/pub/lib/mage/decorate.js', '/pub/lib/jquery/jquery.validate.js', diff --git a/dev/tests/js/pj b/dev/tests/js/pj deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/dev/tests/js/run_js_tests.php b/dev/tests/js/run_js_tests.php index f2b2fee92e9..a3aa9d9c046 100644 --- a/dev/tests/js/run_js_tests.php +++ b/dev/tests/js/run_js_tests.php @@ -28,7 +28,7 @@ define('RELATIVE_APP_ROOT', '../../..'); require __DIR__ . '/../../../app/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(realpath(RELATIVE_APP_ROOT . '/lib')); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath(realpath(RELATIVE_APP_ROOT . '/lib')); $userConfig = normalize('jsTestDriver.php'); $defaultConfig = normalize('jsTestDriver.php.dist'); diff --git a/dev/tests/performance/framework/bootstrap.php b/dev/tests/performance/framework/bootstrap.php index dcaaa6aed4e..17da9b35167 100644 --- a/dev/tests/performance/framework/bootstrap.php +++ b/dev/tests/performance/framework/bootstrap.php @@ -30,7 +30,7 @@ $testsBaseDir = realpath(__DIR__ . '/..'); $magentoBaseDir = realpath($testsBaseDir . '/../../../'); require_once "{$magentoBaseDir}/app/bootstrap.php"; -\Magento\Framework\Autoload\IncludePath::addIncludePath("{$testsBaseDir}/framework"); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath("{$testsBaseDir}/framework"); $bootstrap = new \Magento\TestFramework\Performance\Bootstrap($testsBaseDir, $magentoBaseDir); $bootstrap->cleanupReports(); diff --git a/dev/tests/performance/framework/tests/unit/framework/bootstrap.php b/dev/tests/performance/framework/tests/unit/framework/bootstrap.php index 6ccf62ff29a..1d2ca91d37a 100644 --- a/dev/tests/performance/framework/tests/unit/framework/bootstrap.php +++ b/dev/tests/performance/framework/tests/unit/framework/bootstrap.php @@ -27,4 +27,4 @@ $magentoBaseDir = realpath(__DIR__ . '/../../../../../../../'); require_once "{$magentoBaseDir}/app/bootstrap.php"; -\Magento\Framework\Autoload\IncludePath::addIncludePath("{$magentoBaseDir}/dev/tests/performance/framework"); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath("{$magentoBaseDir}/dev/tests/performance/framework"); diff --git a/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeSniffer.php b/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeSniffer.php index 7dee29cdf76..8d2e932729d 100644 --- a/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeSniffer.php +++ b/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeSniffer.php @@ -131,6 +131,7 @@ class CodeSniffer implements ToolInterface ob_start(); $result = $this->wrapper->process(); ob_end_clean(); + return $result; } diff --git a/dev/tests/static/framework/Magento/TestFramework/Utility/AggregateInvoker.php b/dev/tests/static/framework/Magento/TestFramework/Utility/AggregateInvoker.php index b7a4520be8d..20660aa1a9a 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Utility/AggregateInvoker.php +++ b/dev/tests/static/framework/Magento/TestFramework/Utility/AggregateInvoker.php @@ -47,7 +47,7 @@ class AggregateInvoker * @param \PHPUnit_Framework_TestCase $testCase * @param array $options */ - public function __construct(\PHPUnit_Framework_TestCase $testCase, array $options = array()) + public function __construct($testCase, array $options = array()) { $this->_testCase = $testCase; $this->_options = $options + $this->_options; diff --git a/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php b/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php index 8cb3b8d193c..c58107e1939 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php +++ b/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php @@ -185,7 +185,7 @@ class Classes self::getXmlNodeValues( $xml, '/layout//action/attributeType | /layout//action[@method="addTab"]/content - | /layout//action[@method="addPriceBlockType" or @method="addMergeSettingsBlockType" + | /layout//action[@method="addMergeSettingsBlockType" or @method="addInformationRenderer" or @method="addDatabaseBlock"]/*[2] | /layout//action[@method="setMassactionBlockName"]/name diff --git a/dev/tests/static/framework/bootstrap.php b/dev/tests/static/framework/bootstrap.php index 359d1b8ec6f..94d0a49d477 100644 --- a/dev/tests/static/framework/bootstrap.php +++ b/dev/tests/static/framework/bootstrap.php @@ -27,7 +27,9 @@ define('BP', realpath(__DIR__ . '/../../../../')); require BP . '/app/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(array(__DIR__, dirname(__DIR__) . '/testsuite', BP . '/lib')); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath( + array(__DIR__, dirname(__DIR__) . '/testsuite', BP . '/lib') +); \Magento\TestFramework\Utility\Files::setInstance(new \Magento\TestFramework\Utility\Files(BP)); function tool_autoloader($className) diff --git a/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Utility/AggregateInvokerTest.php b/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Utility/AggregateInvokerTest.php index b656a314ec3..45b18aadb3e 100644 --- a/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Utility/AggregateInvokerTest.php +++ b/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Utility/AggregateInvokerTest.php @@ -37,7 +37,10 @@ class AggregateInvokerTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_testCase = $this->getMock('PHPUnit_Framework_TestCase'); + $this->_testCase = $this->getMock( + 'PHPUnit_Framework_Test', + ['run', 'count', 'fail', 'markTestIncomplete', 'markTestSkipped'] + ); $this->_invoker = new AggregateInvoker($this->_testCase, array()); } @@ -90,7 +93,7 @@ class AggregateInvokerTest extends \PHPUnit_Framework_TestCase ), array( 'Passed: 0, Failed: 0, Incomplete: 0, Skipped: 1.', - 'markTestCkipped', + 'markTestSkipped', 'PHPUnit_Framework_SkippedTestError' ) ); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php index 751593e15fe..0c58af64dbf 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php @@ -463,6 +463,7 @@ class ClassesTest extends \PHPUnit_Framework_TestCase '/downloader/lib/', '/dev/tools/', '/dev/tests/api-functional/framework/', + '/dev/tests/functional/', '/dev/tests/integration/framework/', '/dev/tests/integration/framework/tests/unit/testsuite/', '/dev/tests/integration/testsuite/', diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php index 053a7a76edd..b5a6bb53af6 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php @@ -82,7 +82,7 @@ class CompilerTest extends \PHPUnit_Framework_TestCase $this->_generationDir = $this->_tmpDir . '/generation'; $this->_compilationDir = $this->_tmpDir . '/di'; - \Magento\Framework\Autoload\IncludePath::addIncludePath( + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath( array($basePath . '/app/code', $basePath . '/lib', $this->_generationDir) ); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php index 1a9b579fb20..442cf404796 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php @@ -43,9 +43,9 @@ class HandlesTest extends \PHPUnit_Framework_TestCase $issues = array(); $node = simplexml_load_file($layoutFile); $label = $node['label']; - $design_abstraction = $node['design_abstraction']; + $designAbstraction = $node['design_abstraction']; if (!$label) { - if ($design_abstraction) { + if ($designAbstraction) { $issues[] = 'Attribute "design_abstraction" is defined, but "label" is not'; } } diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt index 490babd93d6..a5472f82ecf 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt @@ -19,6 +19,9 @@ dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/s dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/unused/Model.php dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php +dev/tests/static/framework/PHP/CodeSniffer/Standards/Zend/Sniffs/Debug/CodeAnalyzerSniff.php +dev/tests/static/framework/PHP/CodeSniffer/Standards/Zend/Sniffs/Files/ClosingTagSniff.php +dev/tests/static/framework/PHP/CodeSniffer/Standards/Zend/Sniffs/NamingConventions/ValidVariableNameSniff.php dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/coupling.php dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/cyclomatic_complexity.php dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/descendant_count.php diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt index 25f6a53b45a..4b71dd41ec0 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt @@ -32,3 +32,4 @@ TestSuite DbTest Model1 Model3 +\Magento\Framework\Error\Processor diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php index 2db32dc0ab6..095c485b3ee 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php @@ -263,7 +263,6 @@ class LayoutTest extends \PHPUnit_Framework_TestCase 'addDatabaseBlock', 'addInputTypeTemplate', 'addNotice', - 'addPriceBlockType', 'addReportTypeOption', 'addTab', 'addTabAfter', diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php index 169d402d0af..0314b773974 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php @@ -2399,6 +2399,8 @@ return array( ['Magento\Backend\Model\Resource\Translate', 'Magento\Translation\Model\Resource\Translate'], ['Magento\Backend\Model\Resource\Translate\String', 'Magento\Translation\Model\Resource\String'], ['Magento\Core\Model\Layout', 'Magento\Framework\View\Layout'], + ['Magento\Catalog\Block\Product\Price\Template'], + ['Magento\Bundle\Block\Catalog\Product\View'], ['Magento\Backup\Archive\Tar', 'Magento\Framework\Backup\Archive\Tar'], ['Magento\Backup\Db\BackupDbInterface', 'Magento\Framework\Backup\Db\BackupDbInterface'], ['Magento\Backup\Db\BackupFactory', 'Magento\Framework\Backup\Db\BackupFactory'], diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php index e3225da0afa..a794a000b55 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php @@ -599,4 +599,14 @@ return array( array('CONFIG_KEY_LOCALE', 'Magento\Framework\Translate'), array('CONFIG_KEY_SCOPE', 'Magento\Framework\Translate'), array('CONFIG_KEY_DESIGN_THEME', 'Magento\Framework\Translate'), + array( + 'XML_NODE_MAX_INDEX_COUNT', + 'Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction', + 'Magento\Catalog\Model\Indexer\Product\Flat\FlatTableBuilder' + ), + array( + 'ATTRIBUTES_CHUNK_SIZE', + 'Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction', + 'Magento\Catalog\Model\Indexer\Product\Flat\Action\Indexer' + ), ); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php index 919d33e33ac..c90ca1dd917 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php @@ -1665,4 +1665,22 @@ return array( ['setCustomer', 'Magento\Checkout\Model\Session', 'Magento\Checkout\Model\Session::setCustomerData'], ['getPersistentName', 'Magento\Persistent\Helper\Data'], ['getCustomerDataObject', 'Magento\Persistent\Helper\Session'], + ['getFlatTableName', 'Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction'], + ['deleteProductsFromStore', 'Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction'], + ['getPriceHtml', 'Magento\Rss\Block\Catalog\AbstractCatalog'], + ['_getPriceBlock', 'Magento\Rss\Block\Catalog\AbstractCatalog'], + ['_construct', 'Magento\Catalog\Block\Product\Widget\NewWidget'], + ['_getPriceBlock', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['_getPriceBlockTemplate', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['_preparePriceRenderer', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['addPriceBlock', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['getTierPriceHtml', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['_prepareLayout', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['getTierPriceHtml', 'Magento\GroupedProduct\Block\Product\View\Type\Grouped'], + ['_construct', 'Magento\Reports\Block\Product\Widget\Viewed\Item'], + ['addPriceBlockType', 'Magento\Rss\Block\Wishlist'], + ['getTierPriceTemplate', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['getTierPrices', 'Magento\Catalog\Block\Product\AbstractProduct'], + ['getTierPrices', 'Magento\Catalog\Block\Product\Price'], + ['processTierPrices', 'Magento\Weee\Helper\Data'], ); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php index 505951cccdf..cfde7648766 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php @@ -338,4 +338,6 @@ return array( ['_layout', 'Magento\Install\App\Action\Plugin\Design'], ['_layout', 'Magento\Framework\View\DesignLoader'], ['_area', 'Magento\Framework\View\Layout'], + ['_coreData', '\Magento\Rss\Block\Catalog\Special', 'priceCurrency'], + ['_tierPriceDefaultTemplate', 'Magento\Catalog\Block\Product\AbstractProduct'], ); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml index 0a5d039febd..d9e414c4f01 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml @@ -43,6 +43,7 @@ <word>secure_base_url}}js/</word> <word>secure_base_url}}skin/</word> <word>secure_base_url}}media/</word> + <word>head.js</word> <!-- typos --> <word>overriden</word> <word>retrive</word> @@ -82,5 +83,37 @@ <path>dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php</path> <word>overriden</word> </item> + <item> + <path>app/code/Magento/Paypal/view/frontend/express/shortcut.phtml</path> + <word>head.js</word> + </item> + <item> + <path>app/code/Magento/Bundle/view/adminhtml/product/edit/bundle.phtml</path> + <word>head.js</word> + </item> + <item> + <path>app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml</path> + <word>head.js</word> + </item> + <item> + <path>app/code/Magento/Install/view/install/</path> + <word>head.js</word> + </item> + <item> + <path>app/code/Magento/GiftCard/view/adminhtml/catalog/product/composite/fieldset/giftcard.phtml</path> + <word>head.js</word> + </item> + <item> + <path>app/code/Magento/GiftRegistry/view/adminhtml/edit/attributes.phtml</path> + <word>head.js</word> + </item> + <item> + <path>app/code/Magento/GiftRegistry/view/adminhtml/edit/type/select.phtml</path> + <word>head.js</word> + </item> + <item> + <path>pub/lib/mage/mage.js</path> + <word>head.js</word> + </item> </whitelist> </config> diff --git a/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcs/whitelist/common.txt b/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcs/whitelist/common.txt index 899db1d4099..7ec547860ac 100644 --- a/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcs/whitelist/common.txt +++ b/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcs/whitelist/common.txt @@ -1,9 +1,10 @@ # Files or directories that are included into php code sniffer analysis # Glob patterns are supported # -app/ -dev/ +app +dev +downloader/app/Magento +downloader/lib/Magento index.php lib/Magento -downloader/lib/Magento -downloader/app/Magento +pub diff --git a/dev/tests/unit/framework/Magento/TestFramework/Listener/GarbageCleanup.php b/dev/tests/unit/framework/Magento/TestFramework/Listener/GarbageCleanup.php index 57ca7b524a7..53a5ad52df9 100644 --- a/dev/tests/unit/framework/Magento/TestFramework/Listener/GarbageCleanup.php +++ b/dev/tests/unit/framework/Magento/TestFramework/Listener/GarbageCleanup.php @@ -59,6 +59,15 @@ class GarbageCleanup implements \PHPUnit_Framework_TestListener { } + /** + * {@inheritdoc} + * @SuppressWarnings(PHPMD.ShortVariable) + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time) + { + } + /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ShortVariable) diff --git a/dev/tests/unit/framework/bootstrap.php b/dev/tests/unit/framework/bootstrap.php index 146844c5853..3cf244db157 100644 --- a/dev/tests/unit/framework/bootstrap.php +++ b/dev/tests/unit/framework/bootstrap.php @@ -29,7 +29,7 @@ if (!defined('TESTS_TEMP_DIR')) { require BP . '/app/functions.php'; require BP . '/app/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath( +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath( array( __DIR__, realpath(__DIR__ . '/../testsuite'), diff --git a/dev/tests/unit/framework/tests/unit/framework/bootstrap.php b/dev/tests/unit/framework/tests/unit/framework/bootstrap.php index 4fbac1ae741..5a8075bd3ea 100644 --- a/dev/tests/unit/framework/tests/unit/framework/bootstrap.php +++ b/dev/tests/unit/framework/tests/unit/framework/bootstrap.php @@ -27,6 +27,6 @@ $rootDir = realpath(__DIR__ . '/../../../../../../..'); require __DIR__ . '/../../../../../../../app/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath( +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath( array($rootDir . '/lib/', $rootDir . '/dev/tests/unit/framework/', $rootDir . '/app/code/', $rootDir . '/app') ); diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Block/Catalog/Product/View/Type/BundleTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Block/Catalog/Product/View/Type/BundleTest.php index 07e1d0974e7..863c33277bf 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Block/Catalog/Product/View/Type/BundleTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Block/Catalog/Product/View/Type/BundleTest.php @@ -59,13 +59,12 @@ class BundleTest extends \PHPUnit_Framework_TestCase $optionBlock = $this->getMock( '\Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Checkbox', - array('setOption', 'toHtml', 'getPriceBlockTypes'), + array('setOption', 'toHtml'), array(), '', false ); $optionBlock->expects($this->any())->method('setOption')->will($this->returnValue($optionBlock)); - $optionBlock->expects($this->any())->method('getPriceBlockTypes')->will($this->returnValue(array())); $optionBlock->expects($this->any())->method('toHtml')->will($this->returnValue('option html')); $layout = $this->getMock( 'Magento\Framework\View\Layout', diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Adjustment/CalculatorTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Adjustment/CalculatorTest.php index ac3c56e5dfe..10a3b219d16 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Adjustment/CalculatorTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Adjustment/CalculatorTest.php @@ -71,7 +71,10 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->saleableItem = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->saleableItem = $this->getMockBuilder('Magento\Catalog\Model\Product') + ->setMethods(['getPriceInfo', 'getPriceType', '__wakeup']) + ->disableOriginalConstructor() + ->getMock(); $priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfoInterface', [], [], '', true); $priceInfo->expects($this->any())->method('getPrice')->will($this->returnCallback(function ($type) { if (!isset($this->priceMocks[$type])) { @@ -90,15 +93,15 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase $factoryCallback = $this->returnCallback(function () { list(, $selectionMock) = func_get_args(); - $bundlePrice = $this->getMockBuilder('\Magento\Bundle\Pricing\Price\BundleSelectionPriceInterface') + $bundlePrice = $this->getMockBuilder('Magento\Bundle\Pricing\Price\BundleSelectionPrice') ->setMethods(['getAmount']) + ->disableOriginalConstructor() ->getMock(); $bundlePrice->expects($this->any())->method('getAmount') ->will($this->returnValue($selectionMock->getAmountMock())); return $bundlePrice; }); $this->selectionFactory->expects($this->any())->method('create')->will($factoryCallback); - $this->model = new Calculator($this->baseCalculator, $this->amountFactory, $this->selectionFactory); } @@ -122,11 +125,11 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase } $price = $this->getMock('Magento\Bundle\Pricing\Price\BundleOptionPrice', [], [], '', false); $price->expects($this->atLeastOnce())->method('getOptions')->will($this->returnValue($options)); - $this->priceMocks[Price\BundleOptionPriceInterface::PRICE_TYPE_BUNDLE_OPTION] = $price; + $this->priceMocks[Price\BundleOptionPrice::PRICE_CODE] = $price; // Price type of saleable items $this->saleableItem->expects($this->any())->method('getPriceType')->will($this->returnValue( - ProductPrice::PRICE_TYPE_FIXED + ProductPrice::PRICE_TYPE_DYNAMIC )); $this->amountFactory->expects($this->atLeastOnce())->method('create') @@ -210,7 +213,10 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase 'case with getting maximum amount' => $this->getCaseWithMaxAmount(), // third case without saleable items - 'case without saleable items' => $this->getCaseWithoutSaleableItems() + 'case without saleable items' => $this->getCaseWithoutSaleableItems(), + + // fourth case without require options + 'case without required options' => $this->getCaseMinAmountWithoutRequiredOptions(), ]; } @@ -390,4 +396,82 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase ] ]; } + + /** + * Array for data provider dataProviderForGetterAmount for case 'case without required options' + * + * @return array + */ + protected function getCaseMinAmountWithoutRequiredOptions() + { + return [ + 'amountForBundle' => [ + 'adjustmentsAmounts' => [], + 'amount' => null + ], + 'optionList' => [ + // first option + [ + 'isMultiSelection' => false, + 'data' => [ + 'title' => 'test option 1', + 'default_title' => 'test option 1', + 'type' => 'select', + 'option_id' => '1', + 'position' => '0', + 'required' => '0', + ], + 'selections' => [ + 'first product selection' => [ + 'data' => ['price' => 20.], + 'amount' => [ + 'adjustmentsAmounts' => ['tax' => 8], + 'amount' => 8 + ] + ], + 'second product selection' => [ + 'data' => ['price' => 30.], + 'amount' => [ + 'adjustmentsAmounts' => ['tax' => 10], + 'amount' => 12 + ] + ], + ] + ], + // second option + [ + 'isMultiSelection' => false, + 'data' => [ + 'title' => 'test option 2', + 'default_title' => 'test option 2', + 'type' => 'select', + 'option_id' => '2', + 'position' => '1', + 'required' => '0', + ], + 'selections' => [ + 'first product selection' => [ + 'data' => ['price' => 25.], + 'amount' => [ + 'adjustmentsAmounts' => ['tax' => 8], + 'amount' => 9 + ] + ], + 'second product selection' => [ + 'data' => ['price' => 35.], + 'amount' => [ + 'adjustmentsAmounts' => ['tax' => 10], + 'amount' => 10 + ] + ], + ] + ] + ], + 'expectedResult' => [ + 'isMinAmount' => true, + 'fullAmount' => 8., + 'adjustments' => ['tax' => 8] + ] + ]; + } } diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BasePriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BasePriceTest.php index 87fd8fc8937..e74eb2e3920 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BasePriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BasePriceTest.php @@ -64,13 +64,13 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->model = $objectHelper->getObject('Magento\Bundle\Pricing\Price\BasePrice', [ - 'salableItem' => $this->saleable, + 'saleableItem' => $this->saleable, 'quantity' => $this->quantity ]); } /** - * @covers \Magento\Bundle\Pricing\Price\BasePrice::applyDiscount + * @covers \Magento\Bundle\Pricing\Price\BasePrice::calculateBaseValue * @covers \Magento\Bundle\Pricing\Price\BasePrice::getValue */ public function testGetValue() @@ -83,7 +83,7 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase $pricesIncludedInBase = []; foreach ($priceValues as $priceValue) { - $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); + $price = $this->getMock('Magento\Catalog\Pricing\Price\RegularPrice', [], [], '', false); $price->expects($this->atLeastOnce()) ->method('getValue') ->will($this->returnValue($priceValue)); @@ -91,7 +91,7 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase } $this->priceInfo->expects($this->once()) - ->method('getPricesIncludedInBase') + ->method('getPrices') ->will($this->returnValue($pricesIncludedInBase)); $tearPrice = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); @@ -112,9 +112,9 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase $this->priceInfo->expects($this->any()) ->method('getPrice') ->will($this->returnValueMap([ - [CatalogPrice\TierPriceInterface::PRICE_TYPE_TIER, $this->quantity, $tearPrice], - [CatalogPrice\GroupPriceInterface::PRICE_TYPE_GROUP, $this->quantity, $groupPrice], - [CatalogPrice\SpecialPriceInterface::PRICE_TYPE_SPECIAL, $this->quantity, $specialPrice], + [CatalogPrice\TierPrice::PRICE_CODE, $this->quantity, $tearPrice], + [CatalogPrice\GroupPrice::PRICE_CODE, $this->quantity, $groupPrice], + [CatalogPrice\SpecialPrice::PRICE_CODE, $this->quantity, $specialPrice], ])); $this->assertEquals($result, $this->model->getValue()); diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleOptionPriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleOptionPriceTest.php new file mode 100644 index 00000000000..b0c0d288b64 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleOptionPriceTest.php @@ -0,0 +1,400 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Bundle\Pricing\Price; + +use Magento\TestFramework\Helper\ObjectManager as ObjectManagerHelper; + +class BundleOptionPriceTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Bundle\Pricing\Price\BundleOptionPrice + */ + protected $bundleOptionPrice; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $baseCalculator; + + /** + * @var ObjectManagerHelper + */ + protected $objectManagerHelper; + + /** + * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $saleableItemMock; + + /** + * @var \Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $bundleCalculatorMock; + + /** + * @var \Magento\Bundle\Pricing\Price\BundleSelectionFactory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $selectionFactoryMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $amountFactory; + + /** + * @var \Magento\Framework\Pricing\PriceInfo\Base|\PHPUnit_Framework_MockObject_MockObject + */ + protected $priceInfoMock; + + protected function setUp() + { + $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $this->saleableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->saleableItemMock->expects($this->once()) + ->method('getPriceInfo') + ->will($this->returnValue($this->priceInfoMock)); + + $this->saleableItemMock->expects($this->once()) + ->method('setQty') + ->will($this->returnSelf()); + + $this->selectionFactoryMock = $this->getMockBuilder('Magento\Bundle\Pricing\Price\BundleSelectionFactory') + ->disableOriginalConstructor() + ->getMock(); + $this->amountFactory = $this->getMock('Magento\Framework\Pricing\Amount\AmountFactory', [], [], '', false); + $factoryCallback = $this->returnCallback( + function ($fullAmount, $adjustments) { + return $this->createAmountMock(['amount' => $fullAmount, 'adjustmentAmounts' => $adjustments]); + } + ); + $this->amountFactory->expects($this->any())->method('create')->will($factoryCallback); + $this->baseCalculator = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); + $this->bundleCalculatorMock = $this->getMockBuilder('Magento\Bundle\Pricing\Adjustment\Calculator') + ->setConstructorArgs([$this->baseCalculator, $this->amountFactory, $this->selectionFactoryMock]) + ->setMethods(['getOptionsAmount']) + ->getMock(); + $this->objectManagerHelper = new ObjectManagerHelper($this); + $this->bundleOptionPrice = $this->objectManagerHelper->getObject( + 'Magento\Bundle\Pricing\Price\BundleOptionPrice', + [ + 'saleableItem' => $this->saleableItemMock, + 'quantity' => 1., + 'calculator' => $this->bundleCalculatorMock, + 'bundleSelectionFactory' => $this->selectionFactoryMock + ] + ); + } + + /** + * @dataProvider getOptionsDataProvider + */ + public function testGetOptions($selectionCollection) + { + $this->prepareOptionMocks($selectionCollection); + $this->assertSame($selectionCollection, $this->bundleOptionPrice->getOptions()); + $this->assertSame($selectionCollection, $this->bundleOptionPrice->getOptions()); + } + + /** + * @param array $selectionCollection + * @return void + */ + protected function prepareOptionMocks($selectionCollection) + { + $this->saleableItemMock->expects($this->atLeastOnce()) + ->method('getStoreId') + ->will($this->returnValue(1)); + + $priceTypeMock = $this->getMock('Magento\Bundle\Model\Product\Type', [], [], '', false); + $priceTypeMock->expects($this->atLeastOnce()) + ->method('setStoreFilter') + ->with($this->equalTo(1), $this->equalTo($this->saleableItemMock)) + ->will($this->returnSelf()); + + $optionIds = ['41', '55']; + $priceTypeMock->expects($this->atLeastOnce()) + ->method('getOptionsIds') + ->with($this->equalTo($this->saleableItemMock)) + ->will($this->returnValue($optionIds)); + + $priceTypeMock->expects($this->atLeastOnce()) + ->method('getSelectionsCollection') + ->with($this->equalTo($optionIds), $this->equalTo($this->saleableItemMock)) + ->will($this->returnValue($selectionCollection)); + + $collection = $this->getMock('Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false); + $collection->expects($this->atLeastOnce()) + ->method('appendSelections') + ->with($this->equalTo($selectionCollection), $this->equalTo(false), $this->equalTo(false)) + ->will($this->returnValue($selectionCollection)); + + $priceTypeMock->expects($this->atLeastOnce()) + ->method('getOptionsCollection') + ->with($this->equalTo($this->saleableItemMock)) + ->will($this->returnValue($collection)); + + $this->saleableItemMock->expects($this->atLeastOnce()) + ->method('getTypeInstance') + ->will($this->returnValue($priceTypeMock)); + } + + public function getOptionsDataProvider() + { + return [ + ['1', '2'] + ]; + } + + /** + * @param float $selectionQty + * @param float|bool $selectionAmount + * @dataProvider selectionAmountDataProvider + */ + public function testGetOptionSelectionAmount($selectionQty, $selectionAmount) + { + $selection = $this->getMock('Magento\Catalog\Model\Product', ['getSelectionQty', '__wakeup'], [], '', false); + $selection->expects($this->once()) + ->method('getSelectionQty') + ->will($this->returnValue($selectionQty)); + $priceMock = $this->getMock('Magento\Bundle\Pricing\Price\BundleSelectionPrice', [], [], '', false); + $priceMock->expects($this->once()) + ->method('getAmount') + ->will($this->returnValue($selectionAmount)); + $this->selectionFactoryMock->expects($this->once()) + ->method('create') + ->with($this->equalTo($this->saleableItemMock), $this->equalTo($selection), $this->equalTo($selectionQty)) + ->will($this->returnValue($priceMock)); + $this->assertSame($selectionAmount, $this->bundleOptionPrice->getOptionSelectionAmount($selection)); + } + + /** + * @return array + */ + public function selectionAmountDataProvider() + { + return [ + [1., 50.5], + [2.2, false] + ]; + } + + public function testGetAmount() + { + $amountMock = $this->getMock('Magento\Framework\Pricing\Amount\AmountInterface'); + $this->bundleCalculatorMock->expects($this->once()) + ->method('getOptionsAmount') + ->with($this->equalTo($this->saleableItemMock)) + ->will($this->returnValue($amountMock)); + $this->assertSame($amountMock, $this->bundleOptionPrice->getAmount()); + } + + /** + * Create amount mock + * + * @param array $amountData + * @return \Magento\Framework\Pricing\Amount\Base|\PHPUnit_Framework_MockObject_MockObject + */ + protected function createAmountMock($amountData) + { + /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\Amount\Base $amount */ + $amount = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); + $amount->expects($this->any())->method('getAdjustmentAmounts')->will( + $this->returnValue(isset($amountData['adjustmentAmounts']) ? $amountData['adjustmentAmounts'] : []) + ); + $amount->expects($this->any())->method('getValue')->will($this->returnValue($amountData['amount'])); + return $amount; + } + + /** + * Create option mock + * + * @param array $optionData + * @return \Magento\Bundle\Model\Option|\PHPUnit_Framework_MockObject_MockObject + */ + protected function createOptionMock($optionData) + { + /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Bundle\Model\Option $option */ + $option = $this->getMock('Magento\Bundle\Model\Option', ['isMultiSelection', '__wakeup'], [], '', false); + $option->expects($this->any())->method('isMultiSelection') + ->will($this->returnValue($optionData['isMultiSelection'])); + $selections = []; + foreach ($optionData['selections'] as $selectionData) { + $selections[] = $this->createSelectionMock($selectionData); + } + $option->setData($optionData['data']); + $option->setData('selections', $selections); + return $option; + } + + /** + * Create selection product mock + * + * @param array $selectionData + * @return \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject + */ + protected function createSelectionMock($selectionData) + { + $selection = $this->getMockBuilder('Magento\Catalog\Model\Product') + ->setMethods(['isSalable', 'getAmount', 'getSelectionQty', '__wakeup']) + ->disableOriginalConstructor() + ->getMock(); + // All items are saleable + $selection->expects($this->any())->method('isSalable')->will($this->returnValue(true)); + $selection->setData($selectionData['data']); + $amountMock = $this->createAmountMock($selectionData['amount']); + $selection->expects($this->any())->method('getAmount')->will($this->returnValue($amountMock)); + return $selection; + } + + /** + * @dataProvider getTestDataForCalculation + */ + public function testCalculation($optionList, $expected) + { + $storeId = 1; + $this->saleableItemMock->expects($this->any())->method('getStoreId')->will($this->returnValue($storeId)); + $this->selectionFactoryMock->expects($this->any())->method('create')->will($this->returnArgument(1)); + + $this->baseCalculator->expects($this->atLeastOnce())->method('getAmount') + ->will($this->returnValue($this->createAmountMock(['amount' => 0.]))); + + $options = []; + foreach ($optionList as $optionData) { + $options[] = $this->createOptionMock($optionData); + } + /** @var \PHPUnit_Framework_MockObject_MockObject $optionsCollection */ + $optionsCollection = $this->getMock('Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false); + $optionsCollection->expects($this->atLeastOnce())->method('appendSelections')->will($this->returnSelf()); + $optionsCollection->expects($this->atLeastOnce())->method('getIterator') + ->will($this->returnValue(new \ArrayIterator($options))); + + /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product\Type\AbstractType $typeMock */ + $typeMock = $this->getMock('Magento\Bundle\Model\Product\Type', [], [], '', false); + $typeMock->expects($this->any())->method('setStoreFilter')->with($storeId, $this->saleableItemMock); + $typeMock->expects($this->any())->method('getOptionsCollection')->with($this->saleableItemMock) + ->will($this->returnValue($optionsCollection)); + $this->saleableItemMock->expects($this->any())->method('getTypeInstance')->will($this->returnValue($typeMock)); + + $this->assertEquals($expected['min'], $this->bundleOptionPrice->getValue()); + $this->assertEquals($expected['max'], $this->bundleOptionPrice->getMaxValue()); + } + + /** + * @return array + */ + public function getTestDataForCalculation() + { + return [ + 'first case' => [ + 'optionList' => [ + // first option with single choice of product + [ + 'isMultiSelection' => false, + 'data' => [ + 'title' => 'test option 1', + 'default_title' => 'test option 1', + 'type' => 'select', + 'option_id' => '1', + 'position' => '0', + 'required' => '1', + ], + 'selections' => [ + [ + 'data' => ['price' => 70.], + 'amount' => ['amount' => 70] + ], + [ + 'data' => ['price' => 80.], + 'amount' => ['amount' => 80] + ], + [ + 'data' => ['price' => 50.], + 'amount' => ['amount' => 50] + ] + ] + ], + // second not required option + [ + 'isMultiSelection' => false, + 'data' => [ + 'title' => 'test option 2', + 'default_title' => 'test option 2', + 'type' => 'select', + 'option_id' => '2', + 'position' => '1', + 'required' => '0', + ], + 'selections' => [ + [ + 'data' => ['value' => 20.], + 'amount' => ['amount' => 20] + ] + ] + ], + // third with multi-selection + [ + 'isMultiSelection' => true, + 'data' => [ + 'title' => 'test option 3', + 'default_title' => 'test option 3', + 'type' => 'select', + 'option_id' => '3', + 'position' => '2', + 'required' => '1', + ], + 'selections' => [ + [ + 'data' => ['price' => 40.], + 'amount' => ['amount' => 40] + ], + [ + 'data' => ['price' => 20.], + 'amount' => ['amount' => 20] + ], + [ + 'data' => ['price' => 60.], + 'amount' => ['amount' => 60] + ], + ] + ], + // fourth without selections + [ + 'isMultiSelection' => true, + 'data' => [ + 'title' => 'test option 3', + 'default_title' => 'test option 3', + 'type' => 'select', + 'option_id' => '4', + 'position' => '3', + 'required' => '1', + ], + 'selections' => [] + ], + ], + 'expected' => ['min' => 70, 'max' => 220] + ] + ]; + } +} diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionFactoryTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionFactoryTest.php index e933d44975c..ab6a66deb7a 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionFactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionFactoryTest.php @@ -45,8 +45,8 @@ class BundleSelectionFactoryTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->bundleMock = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); - $this->selectionMock = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); + $this->bundleMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->selectionMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); $this->objectManagerMock = $this->getMock('Magento\Framework\ObjectManager'); @@ -61,7 +61,7 @@ class BundleSelectionFactoryTest extends \PHPUnit_Framework_TestCase public function testCreate() { - $result = $this->getMock('Magento\Bundle\Pricing\Price\BundleSelectionPriceInterface'); + $result = $this->getMock('Magento\Bundle\Pricing\Price\BundleSelectionPrice', [], [], '', false); $this->objectManagerMock->expects($this->once()) ->method('create') ->with( @@ -70,7 +70,7 @@ class BundleSelectionFactoryTest extends \PHPUnit_Framework_TestCase [ 'test' => 'some value', 'bundleProduct' => $this->bundleMock, - 'salableItem' => $this->selectionMock, + 'saleableItem' => $this->selectionMock, 'quantity' => 2. ] ) @@ -96,7 +96,7 @@ class BundleSelectionFactoryTest extends \PHPUnit_Framework_TestCase [ 'test' => 'some value', 'bundleProduct' => $this->bundleMock, - 'salableItem' => $this->selectionMock, + 'saleableItem' => $this->selectionMock, 'quantity' => 2. ] ) diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionPriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionPriceTest.php index 8bcf2ae9ea9..c878000fdd2 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/BundleSelectionPriceTest.php @@ -126,14 +126,14 @@ class BundleSelectionPriceTest extends \PHPUnit_Framework_TestCase public function getPriceCallback($priceType) { switch ($priceType) { - case CatalogPrice\BasePrice::PRICE_TYPE_BASE_PRICE: + case CatalogPrice\BasePrice::PRICE_CODE: $this->basePriceMock = $this->getMock('Magento\Bundle\Pricing\Price\BasePrice', [], [], '', false); $this->basePriceMock->expects($this->once()) - ->method('applyDiscount') + ->method('calculateBaseValue') ->with($this->expectedResult) ->will($this->returnArgument(0)); return $this->basePriceMock; - case CatalogPrice\FinalPriceInterface::PRICE_TYPE_FINAL: + case CatalogPrice\FinalPrice::PRICE_CODE: $this->finalPriceMock = $this->getMock( 'Magento\Catalog\Pricing\Price\FinalPrice', [], @@ -145,7 +145,7 @@ class BundleSelectionPriceTest extends \PHPUnit_Framework_TestCase ->method('getValue') ->will($this->returnValue($this->finalPriceValue)); return $this->finalPriceMock; - case CatalogPrice\RegularPrice::PRICE_TYPE_PRICE_DEFAULT: + case CatalogPrice\RegularPrice::PRICE_CODE: $this->regularPriceMock = $this->getMock( 'Magento\Catalog\Pricing\Price\RegularPrice', [], @@ -215,7 +215,7 @@ class BundleSelectionPriceTest extends \PHPUnit_Framework_TestCase $this->bundleSelectionPrice = $this->objectManagerHelper->getObject( 'Magento\Bundle\Pricing\Price\BundleSelectionPrice', [ - 'salableItem' => $this->saleableInterfaceMock, + 'saleableItem' => $this->saleableInterfaceMock, 'quantity' => $this->quantity, 'calculator' => $this->calculatorInterfaceMock, 'bundleProduct' => $this->productMock, diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/FinalPriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/FinalPriceTest.php index 6eca9f3929c..f1e4daf947c 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/FinalPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/FinalPriceTest.php @@ -60,7 +60,7 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase */ protected function prepareMock() { - $this->saleableInterfaceMock = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); + $this->saleableInterfaceMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); $this->bundleCalculatorMock = $this->getMock('Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface'); $this->basePriceMock = $this->getMock('Magento\Bundle\Pricing\Price\BasePrice', [], [], '', false); @@ -72,12 +72,13 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $this->priceInfoMock = $this->getMock('\Magento\Framework\Pricing\PriceInfoInterface'); + $this->priceInfoMock = $this->getMock('\Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $this->priceInfoMock->expects($this->atLeastOnce()) ->method('getPrice') ->will($this->returnValueMap([ - [\Magento\Catalog\Pricing\Price\BasePrice::PRICE_TYPE_BASE_PRICE, null, $this->basePriceMock], - [BundleOptionPriceInterface::PRICE_TYPE_BUNDLE_OPTION, $this->quantity, $this->bundleOptionMock] + [\Magento\Catalog\Pricing\Price\BasePrice::PRICE_CODE, $this->basePriceMock], + [BundleOptionPrice::PRICE_CODE, $this->quantity, $this->bundleOptionMock] ])); $this->saleableInterfaceMock->expects($this->once()) @@ -85,13 +86,10 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->priceInfoMock)); $this->objectManagerHelper = new ObjectManagerHelper($this); - $this->finalPrice = $this->objectManagerHelper->getObject( - 'Magento\Bundle\Pricing\Price\FinalPrice', - [ - 'salableItem' => $this->saleableInterfaceMock, - 'quantity' => $this->quantity, - 'calculator' => $this->bundleCalculatorMock - ] + $this->finalPrice = new \Magento\Bundle\Pricing\Price\FinalPrice( + $this->saleableInterfaceMock, + $this->quantity, + $this->bundleCalculatorMock ); } @@ -107,7 +105,7 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase ->method('getValue') ->will($this->returnValue($optionsValue)); - $this->basePriceMock->expects($this->once())->method('applyDiscount') + $this->basePriceMock->expects($this->once())->method('calculateBaseValue') ->with($this->equalTo($optionsValue)) ->will($this->returnValue($discountValue)); diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/GroupPriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/GroupPriceTest.php index 08bbf779456..ce72d34bea8 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/GroupPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/GroupPriceTest.php @@ -58,7 +58,7 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->model = $objectHelper->getObject('Magento\Bundle\Pricing\Price\GroupPrice', [ - 'salableItem' => $this->saleable + 'saleableItem' => $this->saleable ]); } @@ -85,7 +85,7 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); $this->priceInfo->expects($this->once()) ->method('getPrice') - ->with(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_TYPE_BASE_PRICE, null) + ->with(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_CODE) ->will($this->returnValue($price)); $price->expects($this->once()) ->method('getValue') diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/SpecialPriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/SpecialPriceTest.php index 7f701ca5115..df83f0af358 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/SpecialPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/SpecialPriceTest.php @@ -63,7 +63,7 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->model = $objectHelper->getObject('Magento\Bundle\Pricing\Price\SpecialPrice', [ - 'salableItem' => $this->saleable, + 'saleableItem' => $this->saleable, 'localeDate' => $this->localeDate ]); } @@ -106,7 +106,7 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); $this->priceInfo->expects($this->once()) ->method('getPrice') - ->with(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_TYPE_BASE_PRICE, null) + ->with(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_CODE) ->will($this->returnValue($price)); $price->expects($this->once()) ->method('getValue') @@ -123,9 +123,9 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase public function getValueDataProvider() { return array( - ['basePrice' => 100, 'specialPrice' => 40, 'isScopeDateInInterval' => true, 'value' => 60], - ['basePrice' => 75, 'specialPrice' => 40, 'isScopeDateInInterval' => true, 'value' => 45], - ['basePrice' => 75, 'specialPrice' => 40, 'isScopeDateInInterval' => false, 'value' => false], + ['basePrice' => 100, 'specialPrice' => 40, 'isScopeDateInInterval' => true, 'value' => 60], + ['basePrice' => 75, 'specialPrice' => 40, 'isScopeDateInInterval' => true, 'value' => 45], + ['basePrice' => 75, 'specialPrice' => 40, 'isScopeDateInInterval' => false, 'value' => false], ); } } diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/TierPriceTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/TierPriceTest.php index 50261155e18..516dcc4679a 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/TierPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Price/TierPriceTest.php @@ -69,7 +69,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->model = $objectHelper->getObject('Magento\Bundle\Pricing\Price\TierPrice', [ - 'salableItem' => $this->product, + 'saleableItem' => $this->product, 'calculator' => $this->calculator ]); } @@ -80,7 +80,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase */ public function testGetterTierPriceList($tierPrices, $basePrice, $expectedResult) { - $this->product->setData(TierPrice::PRICE_TYPE_TIER, $tierPrices); + $this->product->setData(TierPrice::PRICE_CODE, $tierPrices); $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); $price->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Render/FinalPriceBoxTest.php b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Render/FinalPriceBoxTest.php index 946774a100a..8de3e597e90 100644 --- a/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Render/FinalPriceBoxTest.php +++ b/dev/tests/unit/testsuite/Magento/Bundle/Pricing/Render/FinalPriceBoxTest.php @@ -66,7 +66,7 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase $priceInfo->expects($this->atLeastOnce()) ->method('getPrice') - ->with(Price\BundleOptionPriceInterface::PRICE_TYPE_BUNDLE_OPTION) + ->with(Price\BundleOptionPrice::PRICE_CODE) ->will($this->returnValue($optionPrice)); $optionPrice->expects($this->once()) diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/EraserTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/EraserTest.php new file mode 100644 index 00000000000..f21da8f4874 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/EraserTest.php @@ -0,0 +1,109 @@ +<?php +/** + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; + + +class EraserTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $connection; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $indexerHelper; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $storeManager; + + /** + * @var \Magento\Catalog\Model\Indexer\Product\Flat\Action\Eraser + */ + protected $model; + + protected function setUp() + { + $resource = $this->getMock('Magento\Framework\App\Resource', array(), array(), '', false); + $this->connection = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface'); + $resource->expects($this->any())->method('getConnection')->will($this->returnValue($this->connection)); + $this->indexerHelper = $this->getMock( + 'Magento\Catalog\Helper\Product\Flat\Indexer', + array(), + array(), '', false + ); + $this->indexerHelper->expects($this->any())->method('getTable')->will($this->returnArgument(0)); + $this->indexerHelper->expects($this->any())->method('getFlatTableName')->will($this->returnValueMap(array( + array(1, 'store_1_flat'), + array(2, 'store_2_flat'), + ))); + + $this->storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface'); + $this->model = new \Magento\Catalog\Model\Indexer\Product\Flat\Action\Eraser( + $resource, + $this->indexerHelper, + $this->storeManager + ); + } + + public function testRemoveDeletedProducts() + { + $productsToDeleteIds = array(1, 2); + $select = $this->getMock('\Magento\Framework\Db\Select', array(), array(), '', false); + $select->expects($this->once())->method('from')->with('catalog_product_entity')->will($this->returnSelf()); + $select->expects($this->once())->method('where')->with('entity_id IN(?)', $productsToDeleteIds) + ->will($this->returnSelf()); + $products = array(array('entity_id' => 2)); + $statement = $this->getMock('\Zend_Db_Statement_Interface'); + $statement->expects($this->once())->method('fetchAll')->will($this->returnValue($products)); + $this->connection->expects($this->once())->method('query')->with($select) + ->will($this->returnValue($statement)); + $this->connection->expects($this->once())->method('select')->will($this->returnValue($select)); + $this->connection->expects($this->once())->method('delete') + ->with('store_1_flat', array('entity_id IN(?)' => array(1))); + + $this->model->removeDeletedProducts($productsToDeleteIds, 1); + } + + public function testDeleteProductsFromStoreForAllStores() + { + $store1 = $this->getMock('Magento\Store\Model\Store', array(), array(), '', false); + $store1->expects($this->any())->method('getId')->will($this->returnValue(1)); + $store2 = $this->getMock('Magento\Store\Model\Store', array(), array(), '', false); + $store2->expects($this->any())->method('getId')->will($this->returnValue(2)); + $this->storeManager->expects($this->once())->method('getStores') + ->will($this->returnValue(array($store1, $store2))); + $this->connection->expects($this->at(0))->method('delete') + ->with('store_1_flat', array('entity_id IN(?)' => array(1))); + $this->connection->expects($this->at(1))->method('delete') + ->with('store_2_flat', array('entity_id IN(?)' => array(1))); + + $this->model->deleteProductsFromStore(1); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php index 7587adbf284..dc6779516c5 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php @@ -31,22 +31,105 @@ use Magento\TestFramework\Helper\ObjectManager; class RowTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Catalog\Model\Indexer\Product\Flat\Action\Rows + * @var \Magento\Catalog\Model\Indexer\Product\Flat\Action\Row */ - protected $_model; + protected $model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $storeManager; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $store; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $productIndexerHelper; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $resource; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $connection; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $flatItemWriter; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $flatItemEraser; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $flatTableBuilder; public function setUp() { $objectManager = new ObjectManager($this); - $this->_model = $objectManager->getObject('Magento\Catalog\Model\Indexer\Product\Flat\Action\Row'); + + $this->connection = $this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface'); + $this->resource = $this->getMock('Magento\Framework\App\Resource', array(), array(), '', false); + $this->resource->expects($this->any())->method('getConnection') + ->with('default') + ->will($this->returnValue($this->connection)); + $this->storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface'); + $this->store = $this->getMock('Magento\Store\Model\Store', array(), array(), '', false); + $this->store->expects($this->any())->method('getId')->will($this->returnValue('store_id_1')); + $this->storeManager->expects($this->any())->method('getStores')->will($this->returnValue(array($this->store))); + $this->productIndexerHelper = $this->getMock( + 'Magento\Catalog\Helper\Product\Flat\Indexer', array(), array(), '', false + ); + $this->flatItemEraser = $this->getMock( + '\Magento\Catalog\Model\Indexer\Product\Flat\Action\Eraser', array(), array(), '', false + ); + $this->flatItemWriter = $this->getMock( + '\Magento\Catalog\Model\Indexer\Product\Flat\Action\Indexer', array(), array(), '', false + ); + $this->flatTableBuilder = $this->getMock( + '\Magento\Catalog\Model\Indexer\Product\Flat\FlatTableBuilder', array(), array(), '', false + ); + + $this->model = $objectManager->getObject('Magento\Catalog\Model\Indexer\Product\Flat\Action\Row', array( + 'resource' => $this->resource, + 'storeManager' => $this->storeManager, + 'productHelper' => $this->productIndexerHelper, + 'flatItemEraser' => $this->flatItemEraser, + 'flatItemWriter' => $this->flatItemWriter, + 'flatTableBuilder' => $this->flatTableBuilder + )); } /** * @expectedException \Magento\Framework\Model\Exception * @expectedExceptionMessage Could not rebuild index for undefined product */ - public function testEmptyId() + public function testExecuteWithEmptyId() { - $this->_model->execute(null); + $this->model->execute(null); + } + + public function testExecuteWithNonExistingFlatTablesCreatesTables() + { + $this->productIndexerHelper->expects($this->any())->method('getFlatTableName') + ->will($this->returnValue('store_flat_table')); + $this->connection->expects($this->any())->method('isTableExists')->with('store_flat_table') + ->will($this->returnValue(false)); + $this->flatItemEraser->expects($this->never())->method('removeDeletedProducts'); + $this->flatTableBuilder->expects($this->once())->method('build')->with('store_id_1', array('product_id_1')); + $this->flatItemWriter->expects($this->once())->method('write')->with('store_id_1', 'product_id_1'); + $this->model->execute('product_id_1'); } } + diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Option/Type/FileTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Option/Type/FileTest.php new file mode 100644 index 00000000000..d8eb55266ac --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Option/Type/FileTest.php @@ -0,0 +1,114 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Catalog\Model\Product\Option\Type; + +class FileTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\TestFramework\Helper\ObjectManager + */ + protected $objectManager; + + /** + * @var \Magento\Framework\Filesystem\Directory\ReadInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $rootDirectory; + + /** + * @var \Magento\Core\Helper\File\Storage\Database|\PHPUnit_Framework_MockObject_MockObject + */ + protected $coreFileStorageDatabase; + + public function setUp() + { + $this->objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + + $this->rootDirectory = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\ReadInterface') + ->disableOriginalConstructor() + ->setMethods(['isFile', 'isReadable', 'getAbsolutePath']) + ->getMockForAbstractClass(); + + $this->coreFileStorageDatabase = $this->getMock( + 'Magento\Core\Helper\File\Storage\Database', + ['copyFile'], + [], + '', + false + ); + } + + /** + * @return \Magento\Catalog\Model\Product\Option\Type\File + */ + protected function getFileObject() + { + return $this->objectManager->getObject( + 'Magento\Catalog\Model\Product\Option\Type\File', + [ + 'saleableItem' => $this->rootDirectory, + 'priceCurrency' => $this->coreFileStorageDatabase + ] + ); + } + + public function testCopyQuoteToOrder() + { + $optionMock = $this->getMockBuilder( + 'Magento\Catalog\Model\Product\Configuration\Item\Option\OptionInterface' + )->disableOriginalConstructor()->setMethods(['getValue'])->getMockForAbstractClass(); + + $quotePath = '/quote/path/path/uploaded.file'; + $orderPath = '/order/path/path/uploaded.file'; + + $optionMock->expects($this->any()) + ->method('getValue') + ->will($this->returnValue(['quote_path' => $quotePath, 'order_path' => $orderPath])); + + $this->rootDirectory->expects($this->any()) + ->method('isFile') + ->with($this->equalTo($quotePath)) + ->will($this->returnValue(true)); + + $this->rootDirectory->expects($this->any()) + ->method('isReadable') + ->with($this->equalTo($quotePath)) + ->will($this->returnValue(true)); + + $this->rootDirectory->expects($this->any()) + ->method('getAbsolutePath') + ->will($this->returnValue('/file.path')); + + $this->coreFileStorageDatabase->expects($this->any()) + ->method('copyFile') + ->will($this->returnValue('true')); + + $fileObject = $this->getFileObject(); + $fileObject->setData('configuration_item_option', $optionMock); + + $this->assertInstanceOf( + 'Magento\Catalog\Model\Product\Option\Type\File', + $fileObject->copyQuoteToOrder() + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/ProductTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/ProductTest.php index 8672f4cbbdb..ad23bbc4e9f 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/ProductTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/ProductTest.php @@ -253,4 +253,13 @@ class ProductTest extends \PHPUnit_Framework_TestCase $this->assertEquals($this->_priceInfoMock, $this->model->getPriceInfo()); $this->assertEquals($this->_priceInfoMock, $this->model->reloadPriceInfo()); } + + /** + * Test for get qty + */ + public function testGetQty() + { + $this->model->setQty(1); + $this->assertEquals(1, $this->model->getQty()); + } } diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/BasePriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/BasePriceTest.php index a8255cd56ce..b0f87ecaccd 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/BasePriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/BasePriceTest.php @@ -41,7 +41,7 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */ - protected $salableItemMock; + protected $saleableItemMock; /** * @var \Magento\Framework\Pricing\Adjustment\Calculator @@ -74,14 +74,14 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase public function setUp() { $qty = 1; - $this->salableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->saleableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); $this->regularPriceMock = $this->getMock('Magento\Catalog\Pricing\Price\RegularPrice', [], [], '', false); $this->groupPriceMock = $this->getMock('Magento\Catalog\Pricing\Price\GroupPrice', [], [], '', false); $this->specialPriceMock= $this->getMock('Magento\Catalog\Pricing\Price\SpecialPrice', [], [], '', false); $this->calculatorMock = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); - $this->salableItemMock->expects($this->once()) + $this->saleableItemMock->expects($this->once()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfoMock)); $this->prices = [ @@ -89,7 +89,7 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase 'group_price' => $this->groupPriceMock, 'special_price' => $this->specialPriceMock ]; - $this->basePrice = new BasePrice($this->salableItemMock, $qty, $this->calculatorMock); + $this->basePrice = new BasePrice($this->saleableItemMock, $qty, $this->calculatorMock); } /** @@ -99,15 +99,15 @@ class BasePriceTest extends \PHPUnit_Framework_TestCase { $specialPriceValue = 77; $this->priceInfoMock->expects($this->once()) - ->method('getPricesIncludedInBase') + ->method('getPrices') ->will($this->returnValue($this->prices)); - $this->regularPriceMock->expects($this->exactly(2)) + $this->regularPriceMock->expects($this->exactly(3)) ->method('getValue') ->will($this->returnValue(100)); - $this->groupPriceMock->expects($this->once()) + $this->groupPriceMock->expects($this->exactly(2)) ->method('getValue') ->will($this->returnValue(99)); - $this->specialPriceMock->expects($this->once()) + $this->specialPriceMock->expects($this->exactly(2)) ->method('getValue') ->will($this->returnValue($specialPriceValue)); $this->assertSame($specialPriceValue, $this->basePrice->getValue()); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/OptionPriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/CustomOptionPriceTest.php similarity index 75% rename from dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/OptionPriceTest.php rename to dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/CustomOptionPriceTest.php index cad83d025ba..01940100fe9 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/OptionPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/CustomOptionPriceTest.php @@ -31,10 +31,10 @@ use Magento\Framework\Pricing\PriceInfoInterface; /** * Class OptionPriceTest */ -class OptionPriceTest extends \PHPUnit_Framework_TestCase +class CustomOptionPriceTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Catalog\Pricing\Price\OptionPrice + * @var \Magento\Catalog\Pricing\Price\CustomOptionPrice */ protected $object; @@ -107,11 +107,74 @@ class OptionPriceTest extends \PHPUnit_Framework_TestCase } /** - * Return value + * Test getValue() */ public function testGetValue() { + $price = 100; + $minPrice = 10; $optionId = 1; + $type = 'select'; + + $optionValueMax = $this->getOptionValueMock($price); + $optionValueMin = $this->getOptionValueMock($minPrice); + + $optionItemMock = $this->getMockBuilder('Magento\Catalog\Model\Product\Option') + ->disableOriginalConstructor() + ->setMethods(['getValues', '__wakeup', 'getIsRequire', 'getId', 'getType']) + ->getMock(); + $optionItemMock->expects($this->once()) + ->method('getId') + ->will($this->returnValue($optionId)); + $optionItemMock->expects($this->once()) + ->method('getType') + ->will($this->returnValue($type)); + $optionItemMock->expects($this->once()) + ->method('getIsRequire') + ->will($this->returnValue(true)); + $optionItemMock->expects($this->any()) + ->method('getValues') + ->will($this->returnValue([$optionValueMax, $optionValueMin])); + $options = [$optionItemMock]; + $this->product->expects($this->once()) + ->method('getOptions') + ->will($this->returnValue($options)); + + $result = $this->object->getValue(); + $this->assertCount(1, $result); + $this->assertArrayHasKey('option_id', $result[0]); + $this->assertArrayHasKey('type', $result[0]); + $this->assertArrayHasKey('min', $result[0]); + $this->assertEquals($minPrice, $result[0]['min']); + } + + /** + * @param int $price + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getOptionValueMock($price) + { + $optionValueMock = $this->getMockBuilder('Magento\Catalog\Model\Product\Option\Value') + ->disableOriginalConstructor() + ->setMethods(['getPriceType', 'getPrice', 'getId', '__wakeup']) + ->getMock(); + $optionValueMock->expects($this->once()) + ->method('getPriceType') + ->will($this->returnValue('percent')); + $optionValueMock->expects($this->once()) + ->method('getPrice') + ->with($this->equalTo(true)) + ->will($this->returnValue($price)); + return $optionValueMock; + } + + /** + * Test getSelectedOptions() + */ + public function testGetSelectedOptions() + { + $optionId1 = 1; + $optionId2 = 2; $optionValue = 10; $optionType = 'select'; $optionValueMock = $this->getMockBuilder('Magento\Catalog\Model\Product\Option\DefaultType') @@ -141,7 +204,7 @@ class OptionPriceTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($optionValue)); $optionMock->expects($this->at(0)) ->method('getId') - ->will($this->returnValue($optionId)); + ->will($this->returnValue($optionId1)); $optionMock->expects($this->once()) ->method('getType') ->will($this->returnValue($optionType)); @@ -152,19 +215,21 @@ class OptionPriceTest extends \PHPUnit_Framework_TestCase $optionValueMock->expects($this->once()) ->method('getValue') ->will($this->returnValue($optionValue)); - $optionIds = new \Magento\Framework\Object(['value' => '1']); + $optionIds = new \Magento\Framework\Object(['value' => '1,2']); - $customOptions = ['option_ids' => $optionIds, 'option_1' => $optionValueMock]; + $customOptions = ['option_ids' => $optionIds, 'option_1' => $optionValueMock, 'option_2' => null]; $this->product->setCustomOptions($customOptions); - $this->product->expects($this->once()) + $this->product->expects($this->at(0)) ->method('getOptionById') - ->with($this->equalTo($optionId)) + ->with($this->equalTo($optionId1)) ->will($this->returnValue($optionMock)); - $result = $this->object->getValue(); - $this->equalTo($optionValue, $result); + $this->product->expects($this->at(1)) + ->method('getOptionById') + ->with($this->equalTo($optionId2)) + ->will($this->returnValue(null)); // Return from cache - $result = $this->object->getValue(); + $result = $this->object->getSelectedOptions(); $this->equalTo($optionValue, $result); } @@ -186,17 +251,7 @@ class OptionPriceTest extends \PHPUnit_Framework_TestCase ->method('getAmount') ->will($this->returnValue($this->amount)); - $optionValueMock = $this->getMockBuilder('Magento\Catalog\Model\Product\Option\Value') - ->disableOriginalConstructor() - ->setMethods(['getPriceType', 'getPrice', 'getId', '__wakeup']) - ->getMock(); - $optionValueMock->expects($this->once()) - ->method('getPriceType') - ->will($this->returnValue('percent')); - $optionValueMock->expects($this->once()) - ->method('getPrice') - ->with($this->equalTo(true)) - ->will($this->returnValue($price)); + $optionValueMock = $this->getOptionValueMock($price); $optionValueMock->expects($this->once()) ->method('getId') ->will($this->returnValue($id)); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/FinalPriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/FinalPriceTest.php index 123a108585e..efad3b08029 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/FinalPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/FinalPriceTest.php @@ -59,7 +59,13 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase public function setUp() { $this->saleableMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); - $this->priceInfoMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\PriceInfoInterface'); + $this->priceInfoMock = $this->basePriceMock = $this->getMock( + 'Magento\Framework\Pricing\PriceInfo\Base', + [], + [], + '', + false + ); $this->basePriceMock = $this->getMock( 'Magento\Catalog\Pricing\Price\BasePrice', [], @@ -68,16 +74,21 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase false ); + $this->calculatorMock = $this->getMock( + 'Magento\Framework\Pricing\Adjustment\Calculator', + [], + [], + '', + false + ); + $this->saleableMock->expects($this->once()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfoMock)); $this->priceInfoMock->expects($this->once()) ->method('getPrice') - ->with($this->equalTo(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_TYPE_BASE_PRICE)) + ->with($this->equalTo(\Magento\Catalog\Pricing\Price\BasePrice::PRICE_CODE)) ->will($this->returnValue($this->basePriceMock)); - $this->calculatorMock = $this->getMockBuilder('Magento\Framework\Pricing\Adjustment\Calculator') - ->disableOriginalConstructor() - ->getMock(); $this->model = new \Magento\Catalog\Pricing\Price\FinalPrice($this->saleableMock, 1, $this->calculatorMock); } diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/GroupPriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/GroupPriceTest.php index 82c225547fd..cc3ac4c83a8 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/GroupPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/GroupPriceTest.php @@ -48,12 +48,12 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase */ public function testGroupPrice($groupPrice, $customerGroup, $expected) { - $salableItemMock = $this->prepareSalableItem($groupPrice); - $sessionMock = $this->prepareSession($salableItemMock, $customerGroup); + $saleableItemMock = $this->prepareSaleableItem($groupPrice); + $sessionMock = $this->prepareSession($saleableItemMock, $customerGroup); $groupPriceModel = $this->objectManager->getObject( 'Magento\Catalog\Pricing\Price\GroupPrice', [ - 'salableItem' => $salableItemMock, + 'saleableItem' => $saleableItemMock, 'customerSession' => $sessionMock ] ); @@ -61,18 +61,18 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase } /** - * @param \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product $salableItemMock + * @param \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product $saleableItemMock * @param int $customerGroup * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Customer\Model\Session */ - protected function prepareSession($salableItemMock, $customerGroup) + protected function prepareSession($saleableItemMock, $customerGroup) { $session = $this->getMock('Magento\Customer\Model\Session', ['getCustomerGroupId'], [], '', false); $session->expects($this->any()) ->method('getCustomerGroupId') ->will($this->returnValue($customerGroup)); - $salableItemMock->expects($this->any()) + $saleableItemMock->expects($this->any()) ->method('getCustomerGroupId') ->will($this->returnValue(false)); @@ -90,21 +90,24 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase $groupPriceModel = $this->objectManager->getObject( 'Magento\Catalog\Pricing\Price\GroupPrice', [ - 'salableItem' => $this->prepareSalableItem($groupPrice), + 'saleableItem' => $this->prepareSaleableItem($groupPrice), 'customerSession' => $this->getMock('Magento\Customer\Model\Session', [], [], '', false) ] ); $this->assertEquals($expected, $groupPriceModel->getValue()); + + //Verify that storedGroupPrice is cached + $this->assertEquals($expected, $groupPriceModel->getValue()); } /** * @param array|null $groupPrice * @return \PHPUnit_Framework_MockObject_MockObject */ - protected function prepareSalableItem($groupPrice) + protected function prepareSaleableItem($groupPrice) { - $salableItemMock = $this->getMock( + $saleableItemMock = $this->getMock( 'Magento\Catalog\Model\Product', ['getCustomerGroupId', 'getData', 'getPrice', 'getPriceInfo', 'getResource', '__wakeup'], [], @@ -112,17 +115,17 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase false ); - $salableItemMock->expects($this->at(1)) + $saleableItemMock->expects($this->at(1)) ->method('getData') ->will($this->returnValue(null)); - $salableItemMock->expects($this->at(2)) + $saleableItemMock->expects($this->at(2)) ->method('getData') ->will($this->returnValue($groupPrice)); - $salableItemMock->expects($this->any()) + $saleableItemMock->expects($this->any()) ->method('getResource') - ->will($this->returnValue($this->prepareSalableItemResource())); + ->will($this->returnValue($this->prepareSaleableItemResource())); $priceInfo = $this->getMockBuilder( 'Magento\Framework\Pricing\PriceInfoInterface' @@ -132,17 +135,17 @@ class GroupPriceTest extends \PHPUnit_Framework_TestCase ->method('getAdjustments') ->will($this->returnValue([])); - $salableItemMock->expects($this->any()) + $saleableItemMock->expects($this->any()) ->method('getPriceInfo') ->will($this->returnValue($priceInfo)); - return $salableItemMock; + return $saleableItemMock; } /** * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product */ - protected function prepareSalableItemResource() + protected function prepareSaleableItemResource() { $resourceMock = $this->getMockBuilder( 'Magento\Catalog\Model\Resource\Product' diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/RegularPriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/RegularPriceTest.php index 3a5e51b7743..ae59eb18253 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/RegularPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/RegularPriceTest.php @@ -39,18 +39,13 @@ class RegularPriceTest extends \PHPUnit_Framework_TestCase */ protected $priceInfoMock; - /** - * @var \Magento\Framework\Pricing\Amount\Base|\PHPUnit_Framework_MockObject_MockObject - */ - protected $amountMock; - /** * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */ - protected $salableItemMock; + protected $saleableItemMock; /** - * @var \Magento\Framework\Pricing\Adjustment\Calculator + * @var \Magento\Framework\Pricing\Adjustment\Calculator|\PHPUnit_Framework_MockObject_MockObject */ protected $calculatorMock; @@ -60,15 +55,15 @@ class RegularPriceTest extends \PHPUnit_Framework_TestCase protected function setUp() { $qty = 1; - $this->salableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->saleableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); $this->amountMock = $this->getMock('Magento\Framework\Pricing\Amount', [], [], '', false); $this->calculatorMock = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); - $this->salableItemMock->expects($this->once()) + $this->saleableItemMock->expects($this->once()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfoMock)); - $this->regularPrice = new RegularPrice($this->salableItemMock, $qty, $this->calculatorMock); + $this->regularPrice = new RegularPrice($this->saleableItemMock, $qty, $this->calculatorMock); } /** @@ -79,7 +74,7 @@ class RegularPriceTest extends \PHPUnit_Framework_TestCase */ public function testGetValue($price) { - $this->salableItemMock->expects($this->once()) + $this->saleableItemMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($price)); $this->assertEquals($price, $this->regularPrice->getValue()); @@ -109,7 +104,7 @@ class RegularPriceTest extends \PHPUnit_Framework_TestCase ->method('getAmount') ->with($this->equalTo($priceValue)) ->will($this->returnValue($amountValue)); - $this->salableItemMock->expects($this->once()) + $this->saleableItemMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($priceValue)); @@ -119,8 +114,8 @@ class RegularPriceTest extends \PHPUnit_Framework_TestCase /** * Test method getPriceType */ - public function testGetPriceType() + public function testGetPriceCode() { - $this->assertEquals(RegularPrice::PRICE_TYPE_PRICE_DEFAULT, $this->regularPrice->getPriceType()); + $this->assertEquals(RegularPrice::PRICE_CODE, $this->regularPrice->getPriceCode()); } } diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/SpecialPriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/SpecialPriceTest.php index 9ae61efe3e0..ba406d5cbf3 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/SpecialPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/SpecialPriceTest.php @@ -48,7 +48,7 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase $specialPriceModel = $this->objectManager->getObject( 'Magento\Catalog\Pricing\Price\SpecialPrice', [ - 'salableItem' => $this->prepareSalebleItem($specialPrice), + 'saleableItem' => $this->prepareSaleableItem($specialPrice), 'localeDate' => $this->prepareLocaleDate($isValidInterval) ] ); @@ -60,9 +60,9 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase * @param float $specialPrice * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product */ - protected function prepareSalebleItem($specialPrice) + protected function prepareSaleableItem($specialPrice) { - $salableItemMock = $this->getMock( + $saleableItemMock = $this->getMock( 'Magento\Catalog\Model\Product', ['getSpecialPrice', 'getPriceInfo', 'getStore', '__wakeup'], [], @@ -70,7 +70,7 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase false ); - $salableItemMock->expects($this->any()) + $saleableItemMock->expects($this->any()) ->method('getSpecialPrice') ->will($this->returnValue($specialPrice)); @@ -82,11 +82,11 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase ->method('getAdjustments') ->will($this->returnValue([])); - $salableItemMock->expects($this->any()) + $saleableItemMock->expects($this->any()) ->method('getPriceInfo') ->will($this->returnValue($priceInfo)); - return $salableItemMock; + return $saleableItemMock; } /** diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/TierPriceTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/TierPriceTest.php index c8ca757b05c..d578dd0a449 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/TierPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Price/TierPriceTest.php @@ -105,7 +105,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase */ public function testBaseInitialization($tierPrices, $expectedValue) { - $this->product->setData(TierPrice::PRICE_TYPE_TIER, $tierPrices); + $this->product->setData(TierPrice::PRICE_CODE, $tierPrices); $this->assertEquals($expectedValue, $this->model->getValue()); } @@ -158,7 +158,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase $attributeMock->expects($this->once())->method('getBackend')->will($this->returnValue($backendMock)); $productResource = $this->getMock('Magento\Catalog\Model\Resource\Product', [], [], '', false); - $productResource->expects($this->once())->method('getAttribute')->with(TierPrice::PRICE_TYPE_TIER) + $productResource->expects($this->once())->method('getAttribute')->with(TierPrice::PRICE_CODE) ->will($this->returnValue($attributeMock)); $this->product->expects($this->once())->method('getResource')->will($this->returnValue($productResource)); @@ -179,7 +179,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase */ public function testGetterTierPriceList($tierPrices, $basePrice, $expectedResult) { - $this->product->setData(TierPrice::PRICE_TYPE_TIER, $tierPrices); + $this->product->setData(TierPrice::PRICE_CODE, $tierPrices); $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface', [], [], '', false); $price->expects($this->any())->method('getValue')->will($this->returnValue($basePrice)); @@ -268,16 +268,21 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase */ public function testGetSavePercent($basePrice, $tierPrice, $savedPercent) { + $priceAmount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $priceAmount->expects($this->once()) + ->method('getBaseAmount') + ->will($this->returnValue($basePrice)); + $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); $price->expects($this->any()) - ->method('getValue') - ->will($this->returnValue($basePrice)); + ->method('getAmount') + ->will($this->returnValue($priceAmount)); $this->priceInfo->expects($this->atLeastOnce()) ->method('getPrice') ->will($this->returnValue($price)); - $amount = $this->getMock('Magento\Framework\Pricing\Amount\AmountInterface'); + $amount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); $amount->expects($this->atLeastOnce()) ->method('getBaseAmount') ->will($this->returnValue($tierPrice)); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/FinalPriceBoxTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/FinalPriceBoxTest.php index 1560127a30b..a452910afa8 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/FinalPriceBoxTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/FinalPriceBoxTest.php @@ -76,26 +76,8 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->product = $this->getMockForAbstractClass( - 'Magento\Framework\Pricing\Object\SaleableInterface', - [], - '', - true, - true, - true, - ['getPriceInfo', '__wakeup'] - ); - - $this->priceType = $this->getMockBuilder('Magento\Catalog\Pricing\Price\MsrpPrice') - ->disableOriginalConstructor() - ->setMethods(['isShowPriceOnGesture', 'getMsrpPriceMessage', 'canApplyMsrp']) - ->getMock(); - - $this->priceInfo = $this->getMockBuilder('Magento\Framework\Pricing\PriceInfo') - ->disableOriginalConstructor() - ->setMethods(['getPrice']) - ->getMock(); - + $this->product = $this->getMock('Magento\Catalog\Model\Product', ['getPriceInfo', '__wakeup'], [], '', false); + $this->priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfo', ['getPrice'], [], '', false); $this->product->expects($this->any()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfo)); @@ -107,7 +89,6 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase $this->priceBox = $this->getMock('Magento\Framework\Pricing\Render\PriceBox', [], [], '', false); $this->logger = $this->getMock('Magento\Framework\Logger', [], [], '', false); - $this->layout->expects($this->any()) ->method('getBlock') ->will($this->returnValue($this->priceBox)); @@ -136,8 +117,8 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase $this->price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); $this->price->expects($this->any()) - ->method('getPriceType') - ->will($this->returnValue(\Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL)); + ->method('getPriceCode') + ->will($this->returnValue(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE)); $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); $this->object = $objectManager->getObject( @@ -153,12 +134,13 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase public function testRenderMsrpDisabled() { + $priceType = $this->getMock('Magento\Catalog\Pricing\Price\MsrpPrice', [], [], '', false); $this->priceInfo->expects($this->once()) ->method('getPrice') ->with($this->equalTo('msrp_price')) - ->will($this->returnValue($this->priceType)); + ->will($this->returnValue($priceType)); - $this->priceType->expects($this->any()) + $priceType->expects($this->any()) ->method('canApplyMsrp') ->with($this->equalTo($this->product)) ->will($this->returnValue(false)); @@ -173,12 +155,13 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase public function testRenderMsrpEnabled() { + $priceType = $this->getMock('Magento\Catalog\Pricing\Price\MsrpPrice', [], [], '', false); $this->priceInfo->expects($this->once()) ->method('getPrice') ->with($this->equalTo('msrp_price')) - ->will($this->returnValue($this->priceType)); + ->will($this->returnValue($priceType)); - $this->priceType->expects($this->any()) + $priceType->expects($this->any()) ->method('canApplyMsrp') ->with($this->equalTo($this->product)) ->will($this->returnValue(true)); @@ -218,4 +201,124 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase //assert css_selector $this->assertRegExp('/[final_price]/', $result); } + + public function testRenderAmountMinimal() + { + $priceType = $this->getMock('Magento\Catalog\Pricing\Price\FinalPrice', [], [], '', false); + $amount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $priceId = 'price_id'; + $html = 'html'; + $this->object->setData('price_id', $priceId); + + $arguments = [ + 'display_label' => __('As low as:'), + 'price_id' => $priceId, + 'include_container' => false, + 'skip_adjustments' => true + ]; + + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', ['toHtml'], [], '', false); + $amountRender->expects($this->once()) + ->method('toHtml') + ->will($this->returnValue($html)); + + $this->priceInfo->expects($this->once()) + ->method('getPrice') + ->with(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE) + ->will($this->returnValue($priceType)); + + $priceType->expects($this->once()) + ->method('getMinimalPrice') + ->will($this->returnValue($amount)); + + $this->rendererPool->expects($this->once()) + ->method('createAmountRender') + ->with($amount, $this->product, $this->price, $arguments) + ->will($this->returnValue($amountRender)); + + $this->assertEquals($html, $this->object->renderAmountMinimal()); + } + + /** + * @dataProvider hasSpecialPriceProvider + * @param float $regularPrice + * @param float $finalPrice + * @param bool $expectedResult + */ + public function testHasSpecialPrice($regularPrice, $finalPrice, $expectedResult) + { + $regularPriceType = $this->getMock('Magento\Catalog\Pricing\Price\RegularPrice', [], [], '', false); + $finalPriceType = $this->getMock('Magento\Catalog\Pricing\Price\FinalPrice', [], [], '', false); + $regularPriceAmount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $finalPriceAmount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + + $regularPriceAmount->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($regularPrice)); + $finalPriceAmount->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($finalPrice)); + + $regularPriceType->expects($this->once()) + ->method('getAmount') + ->will($this->returnValue($regularPriceAmount)); + $finalPriceType->expects($this->once()) + ->method('getAmount') + ->will($this->returnValue($finalPriceAmount)); + + $this->priceInfo->expects($this->at(0)) + ->method('getPrice') + ->with(\Magento\Catalog\Pricing\Price\RegularPrice::PRICE_CODE) + ->will($this->returnValue($regularPriceType)); + $this->priceInfo->expects($this->at(1)) + ->method('getPrice') + ->with(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE) + ->will($this->returnValue($finalPriceType)); + + $this->assertEquals($expectedResult, $this->object->hasSpecialPrice()); + } + + public function hasSpecialPriceProvider() + { + return [ + [10.0, 20.0, false], + [20.0, 10.0, true], + [10.0, 10.0, false] + ]; + } + + public function testShowMinimalPrice() + { + $finalPrice = 10.0; + $minimalPrice = 5.0; + $displayMininmalPrice = 2.0; + + $this->object->setDisplayMinimalPrice($displayMininmalPrice); + + $finalPriceType = $this->getMock('Magento\Catalog\Pricing\Price\FinalPrice', [], [], '', false); + + $finalPriceAmount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $minimalPriceAmount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + + $finalPriceAmount->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($finalPrice)); + $minimalPriceAmount->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($minimalPrice)); + + $finalPriceType->expects($this->at(0)) + ->method('getAmount') + ->will($this->returnValue($finalPriceAmount)); + $finalPriceType->expects($this->at(1)) + ->method('getMinimalPrice') + ->will($this->returnValue($minimalPriceAmount)); + + $this->priceInfo->expects($this->once()) + ->method('getPrice') + ->with(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE) + ->will($this->returnValue($finalPriceType)); + + $this->assertTrue($this->object->showMinimalPrice()); + } } diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/PriceBoxTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/PriceBoxTest.php index b54ab9c06df..cbe05f08d4e 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/PriceBoxTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/Render/PriceBoxTest.php @@ -100,15 +100,7 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase */ public function testGetCanDisplayQty($typeCode, $expected) { - $product = $this->getMockForAbstractClass( - 'Magento\Framework\Pricing\Object\SaleableInterface', - [], - '', - true, - true, - true, - ['getTypeId'] - ); + $product = $this->getMock('Magento\Catalog\Model\Product', ['getTypeId', '__wakeup'], [], '', false); $product->expects($this->once()) ->method('getTypeId') diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/RenderTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/RenderTest.php index 7caa25db78f..9a0b6ab7cb6 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Pricing/RenderTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Pricing/RenderTest.php @@ -104,12 +104,14 @@ class RenderTest extends \PHPUnit_Framework_TestCase ->with($this->equalTo('product')) ->will($this->returnValue($product)); + $arguments = $this->object->getData(); + $arguments['render_block'] = $this->object; $this->pricingRenderBlock->expects($this->any()) ->method('render') ->with( $this->equalTo('test_price_type_code'), $this->equalTo($product), - $this->equalTo($this->object->getData()) + $this->equalTo($arguments) ) ->will($this->returnValue($expectedValue)); @@ -127,12 +129,14 @@ class RenderTest extends \PHPUnit_Framework_TestCase $block = $this->getMock('Magento\Framework\Pricing\Render', ['getProductItem', 'render'], [], '', false); + $arguments = $this->object->getData(); + $arguments['render_block'] = $this->object; $block->expects($this->any()) ->method('render') ->with( $this->equalTo('test_price_type_code'), $this->equalTo($product), - $this->equalTo($this->object->getData()) + $this->equalTo($arguments) ) ->will($this->returnValue($expectedValue)); diff --git a/dev/tests/unit/testsuite/Magento/CatalogRule/Pricing/Price/CatalogRulePriceTest.php b/dev/tests/unit/testsuite/Magento/CatalogRule/Pricing/Price/CatalogRulePriceTest.php index f4a117e4e58..c250bb5a68a 100644 --- a/dev/tests/unit/testsuite/Magento/CatalogRule/Pricing/Price/CatalogRulePriceTest.php +++ b/dev/tests/unit/testsuite/Magento/CatalogRule/Pricing/Price/CatalogRulePriceTest.php @@ -39,7 +39,7 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $salableItemMock; + protected $saleableItemMock; /** * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject @@ -91,7 +91,7 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase */ public function setUp() { - $this->salableItemMock = $this->getMock( + $this->saleableItemMock = $this->getMock( 'Magento\Catalog\Model\Product', ['getId', '__wakeup', 'getPriceInfo'], [], @@ -142,7 +142,7 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase $this->priceInfoMock->expects($this->any()) ->method('getAdjustments') ->will($this->returnValue([])); - $this->salableItemMock->expects($this->any()) + $this->saleableItemMock->expects($this->any()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfoMock)); @@ -155,7 +155,7 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase ->getMock(); $qty = 1; $this->object = new CatalogRulePrice( - $this->salableItemMock, + $this->saleableItemMock, $qty, $this->calculator, $this->dataTimeMock, @@ -194,7 +194,7 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase $this->catalogRuleResourceMock->expects($this->once()) ->method('getRulePrice') ->will($this->returnValue($expectedValue)); - $this->salableItemMock->expects($this->any()) + $this->saleableItemMock->expects($this->any()) ->method('getId') ->will($this->returnValue($productId)); diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php index 9bce90138f1..367b7974471 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php @@ -30,20 +30,39 @@ use Magento\Checkout\Block\Cart\Item\Renderer; class RendererTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Catalog\Helper\Image|\PHPUnit_Framework_MockObject_MockObject */ + /** + * @var \Magento\Catalog\Helper\Image|\PHPUnit_Framework_MockObject_MockObject + */ protected $_imageHelper; - /** @var Renderer */ + /** + * @var Renderer + */ protected $_renderer; + /** + * @var \Magento\View\LayoutInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $layout; + protected function setUp() { parent::setUp(); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->_imageHelper = $this->getMock('Magento\Catalog\Helper\Image', array(), array(), '', false); + $this->layout = $this->getMock('Magento\Framework\View\LayoutInterface'); + + $context = $this->getMockBuilder('Magento\Framework\View\Element\Template\Context') + ->disableOriginalConstructor() + ->getMock(); + $context->expects($this->once()) + ->method('getLayout') + ->will($this->returnValue($this->layout)); + $this->_renderer = $objectManagerHelper->getObject( 'Magento\Checkout\Block\Cart\Item\Renderer', - array('imageHelper' => $this->_imageHelper) + array('imageHelper' => $this->_imageHelper, 'context' => $context) ); } @@ -110,4 +129,39 @@ class RendererTest extends \PHPUnit_Framework_TestCase { $this->assertEmpty($this->_renderer->getIdentities()); } + + /** + * @covers \Magento\Checkout\Block\Cart\Item\Renderer::getProductPriceHtml + * @covers \Magento\Checkout\Block\Cart\Item\Renderer::getPriceRender + */ + public function testGetProductPriceHtml() + { + $priceHtml = 'some price html'; + $product = $this->getMockBuilder('Magento\Catalog\Model\Product') + ->disableOriginalConstructor() + ->getMock(); + + $priceRender = $this->getMockBuilder('Magento\Framework\Pricing\Render') + ->disableOriginalConstructor() + ->getMock(); + + $this->layout->expects($this->atLeastOnce()) + ->method('getBlock') + ->with('product.price.render.default') + ->will($this->returnValue($priceRender)); + + $priceRender->expects($this->once()) + ->method('render') + ->with( + \Magento\Catalog\Pricing\Price\ConfiguredPriceInterface::CONFIGURED_PRICE_CODE, + $product, + [ + 'include_container' => true, + 'display_minimal_price' => true, + 'zone' => \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST + ] + )->will($this->returnValue($priceHtml)); + + $this->assertEquals($priceHtml, $this->_renderer->getProductPriceHtml($product)); + } } diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Helper/DataTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Helper/DataTest.php index 6d94596ae1e..d1adc7cb5b2 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Helper/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Helper/DataTest.php @@ -300,7 +300,13 @@ class DataTest extends \PHPUnit_Framework_TestCase { $price = 5.5; $quoteMock = $this->getMock('\Magento\Sales\Model\Quote', array(), array(), '', false); - $storeMock = $this->getMock('\Magento\Core\Model\Store', array('formatPrice'), array(), '', false); + $storeMock = $this->getMock( + 'Magento\Store\Model\Store', + array('formatPrice', '__wakeup'), + array(), + '', + false + ); $this->_checkoutSession->expects($this->once())->method('getQuote')->will($this->returnValue($quoteMock)); $quoteMock->expects($this->once())->method('getStore')->will($this->returnValue($storeMock)); $storeMock->expects($this->once())->method('formatPrice')->will($this->returnValue('5.5')); @@ -311,7 +317,13 @@ class DataTest extends \PHPUnit_Framework_TestCase { $price = 5.5; $quoteMock = $this->getMock('\Magento\Sales\Model\Quote', array(), array(), '', false); - $storeMock = $this->getMock('\Magento\Core\Model\Store', array('convertPrice'), array(), '', false); + $storeMock = $this->getMock( + 'Magento\Store\Model\Store', + array('convertPrice', '__wakeup'), + array(), + '', + false + ); $this->_checkoutSession->expects($this->once())->method('getQuote')->will($this->returnValue($quoteMock)); $quoteMock->expects($this->once())->method('getStore')->will($this->returnValue($storeMock)); $storeMock->expects($this->once())->method('convertPrice')->will($this->returnValue('5.5')); @@ -373,7 +385,13 @@ class DataTest extends \PHPUnit_Framework_TestCase '\Magento\Checkout\Helper\Data', ['storeManager' => $storeManager] ); - $storeMock = $this->getMock('Magento\Core\Model\Store', array('roundPrice'), array(), '', false); + $storeMock = $this->getMock( + 'Magento\Store\Model\Store', + array('roundPrice', '__wakeup'), + array(), + '', + false + ); $itemMock = $this->getMock( 'Magento\Framework\Object', array('getPriceInclTax', 'getQty', 'getTaxAmount', 'getDiscountTaxCompensation', 'getRowTotal'), @@ -434,7 +452,13 @@ class DataTest extends \PHPUnit_Framework_TestCase ); $itemMock = $this->getMock('Magento\Framework\Object', array('getQty'), array(), '', false); $itemMock->expects($this->once())->method('getQty'); - $storeMock = $this->getMock('Magento\Core\Model\Store', array('roundPrice'), array(), '', false); + $storeMock = $this->getMock( + 'Magento\Store\Model\Store', + array('roundPrice', '__wakeup'), + array(), + '', + false + ); $storeManager->expects($this->once())->method('getStore')->will($this->returnValue($storeMock)); $storeMock->expects($this->once())->method('roundPrice'); $helper->getPriceInclTax($itemMock); @@ -451,7 +475,13 @@ class DataTest extends \PHPUnit_Framework_TestCase $itemMock = $this->getMock('Magento\Framework\Object', array('getQty', 'getQtyOrdered'), array(), '', false); $itemMock->expects($this->once())->method('getQty')->will($this->returnValue(false)); $itemMock->expects($this->exactly(2))->method('getQtyOrdered')->will($this->returnValue(5.5)); - $storeMock = $this->getMock('Magento\Core\Model\Store', array('roundPrice'), array(), '', false); + $storeMock = $this->getMock( + 'Magento\Store\Model\Store', + array('roundPrice', '__wakeup'), + array(), + '', + false + ); $storeManager->expects($this->once())->method('getStore')->will($this->returnValue($storeMock)); $storeMock->expects($this->once())->method('roundPrice'); $helper->getBasePriceInclTax($itemMock); diff --git a/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Pricing/Price/AttributePriceTest.php b/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Pricing/Price/AttributePriceTest.php new file mode 100644 index 00000000000..059b5d0d50f --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Pricing/Price/AttributePriceTest.php @@ -0,0 +1,392 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\ConfigurableProduct\Pricing\Price; + +/** + * Class CustomOptionTest + * + * @package Magento\ConfigurableProduct\Pricing\Price; + */ +class AttributePriceTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Catalog\Model\Product\PriceModifierInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $priceModifier; + + /** + * @var \Magento\Framework\Pricing\Amount\Base|\PHPUnit_Framework_MockObject_MockObject + */ + protected $amountMock; + + /** + * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject + */ + protected $saleableItemMock; + + /** + * @var \Magento\Framework\Pricing\Adjustment\Calculator|\PHPUnit_Framework_MockObject_MockObject + */ + protected $calculatorMock; + + /** + * @var \Magento\Framework\Pricing\PriceInfoInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $priceInfoMock; + + /** + * @var \Magento\ConfigurableProduct\Pricing\Price\AttributePrice|\PHPUnit_Framework_MockObject_MockObject + */ + protected $attribute; + + /** + * @var \Magento\Catalog\Pricing\Price\RegularPrice|\PHPUnit_Framework_MockObject_MockObject + */ + protected $regularPriceMock; + + /** + * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $storeManagerMock; + + /** + * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute| + * \PHPUnit_Framework_MockObject_MockObject + */ + protected $attributeMock; + + /** + * Test setUp + */ + protected function setUp() + { + $qty = 1; + $this->saleableItemMock = $this->getMock( + 'Magento\Catalog\Model\Product', + [ + 'getTypeInstance', + 'setParentId', + 'hasPreconfiguredValues', + 'getPreconfiguredValues', + '__wakeup', + 'getPriceInfo' + ], + [], + '', + false + ); + $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $this->amountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); + $this->calculatorMock = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); + $this->regularPriceMock = $this->getMock('Magento\Catalog\Pricing\Price\RegularPrice', [], [], '', false); + $this->priceModifier = $this->getMock( + 'Magento\Catalog\Model\Product\PriceModifierInterface', + [], + [], + '', + false + ); + $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', ['getStore'], [], '', false); + $this->attributeMock = $this->getMock( + 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute', + [], + [], + '', + false + ); + $this->attribute = new AttributePrice( + $this->saleableItemMock, + $qty, + $this->calculatorMock, + $this->priceModifier, + $this->storeManagerMock + ); + } + + public function testInstanceOf() + { + $qty = 100; + $object = new AttributePrice( + $this->saleableItemMock, + $qty, + $this->calculatorMock, + $this->priceModifier, + $this->storeManagerMock + ); + $this->assertInstanceOf('Magento\ConfigurableProduct\Pricing\Price\AttributePrice', $object); + } + + public function testPrepareJsonAttributes() + { + $options = []; + $attributeId = 1; + $attributeCode = 'test_attribute'; + $attributeLabel = 'Test'; + $pricingValue = 100; + $amount = 120; + $modifiedValue = 140; + $valueIndex = 2; + $optionId = 1; + $expected = [ + 'priceOptions' => + [ + $attributeId => + [ + 'id' => $attributeId, + 'code' => $attributeCode, + 'label' => $attributeLabel, + 'options' => + [ + 0 => + [ + 'id' => $valueIndex, + 'label' => $attributeLabel, + 'price' => $modifiedValue, + 'oldPrice' => $modifiedValue, + 'inclTaxPrice' => $modifiedValue, + 'exclTaxPrice' => $pricingValue, + 'products' => [] + ], + ], + ], + ], + 'defaultValues' => + [ + $attributeId => $optionId, + ], + ]; + $attributePrices = [ + [ + 'is_percent' => false, + 'pricing_value' => $pricingValue, + 'value_index' => $valueIndex, + 'label' => $attributeLabel + ] + ]; + + $configurableAttributes = [ + $this->getAttributeMock($attributeId, $attributeCode, $attributeLabel, $attributePrices) + ]; + $configuredValueMock = $this->getMockBuilder('Magento\Framework\Object') + ->disableOriginalConstructor() + ->getMock(); + $configuredValueMock->expects($this->any()) + ->method('getData') + ->will($this->returnValue($optionId)); + + $configurableProduct = $this->getMockBuilder('Magento\ConfigurableProduct\Model\Product\Type\Configurable') + ->disableOriginalConstructor() + ->getMock(); + $configurableProduct->expects($this->once()) + ->method('getConfigurableAttributes') + ->with($this->equalTo($this->saleableItemMock)) + ->will($this->returnValue($configurableAttributes)); + $this->saleableItemMock->expects($this->once()) + ->method('getTypeInstance') + ->will($this->returnValue($configurableProduct)); + $this->saleableItemMock->expects($this->any()) + ->method('setParentId'); + $this->saleableItemMock->expects($this->any()) + ->method('hasPreconfiguredValues') + ->will($this->returnValue(true)); + $this->saleableItemMock->expects($this->any()) + ->method('getPreconfiguredValues') + ->will($this->returnValue($configuredValueMock)); + + $this->priceModifier->expects($this->once()) + ->method('modifyPrice') + ->with($this->equalTo($pricingValue), $this->equalTo($this->saleableItemMock)) + ->will($this->returnValue($amount)); + $this->calculatorMock->expects($this->any()) + ->method('getAmount') + ->will($this->returnValue($this->getModifiedAmountMock($modifiedValue, $pricingValue))); + $storeMock = $this->getMockBuilder('Magento\Store\Model\Store') + ->disableOriginalConstructor() + ->getMock(); + $storeMock->expects($this->once()) + ->method('convertPrice') + ->with($this->equalTo($modifiedValue)) + ->will($this->returnArgument(0)); + + $this->storeManagerMock->expects($this->any()) + ->method('getStore') + ->will($this->returnValue($storeMock)); + + $result = $this->attribute->prepareAttributes($options); + $this->assertEquals($expected, $result); + } + + protected function getModifiedAmountMock($modifiedValue, $pricingValue) + { + $modifiedAmountMock = $this->getMockBuilder('Magento\Framework\Pricing\Amount\Base') + ->disableOriginalConstructor() + ->getMock(); + $modifiedAmountMock->expects($this->any()) + ->method('getValue') + ->will($this->returnValue($modifiedValue)); + $modifiedAmountMock->expects($this->once()) + ->method('getBaseAmount') + ->will($this->returnValue($pricingValue)); + + return $modifiedAmountMock; + } + + protected function getAttributeMock($attributeId, $attributeCode, $attributeLabel, $attributePrices) + { + $productAttributeMock = $this->getMockBuilder('Magento\Catalog\Model\Entity\Attribute') + ->disableOriginalConstructor() + ->setMethods(['getLabel', '__wakeup', 'getAttributeCode', 'getId', 'getAttributeLabel']) + ->getMock(); + $productAttributeMock->expects($this->once()) + ->method('getId') + ->will($this->returnValue($attributeId)); + $productAttributeMock->expects($this->once()) + ->method('getAttributeCode') + ->will($this->returnValue($attributeCode)); + $attributeMock = $this->getMockBuilder('Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute') + ->disableOriginalConstructor() + ->setMethods(['getProductAttribute', '__wakeup', 'getLabel', 'getPrices']) + ->getMock(); + $attributeMock->expects($this->once()) + ->method('getProductAttribute') + ->will($this->returnValue($productAttributeMock)); + $attributeMock->expects($this->once()) + ->method('getLabel') + ->will($this->returnValue($attributeLabel)); + $attributeMock->expects($this->once()) + ->method('getPrices') + ->will($this->returnValue($attributePrices)); + + return $attributeMock; + } + + /** + * test method testGetOptionValueModified with option is_percent = true + */ + public function testGetOptionValueModifiedIsPercent() + { + $finalPriceMock = $this->getMock('Magento\Catalog\Pricing\Price\RegularPrice', [], [], '', false); + $this->saleableItemMock->expects($this->once()) + ->method('getPriceInfo') + ->will($this->returnValue($this->priceInfoMock)); + $this->saleableItemMock->expects($this->once()) + ->method('setParentId') + ->with($this->equalTo(true)) + ->will($this->returnValue($this->returnSelf())); + $this->priceInfoMock->expects($this->once()) + ->method('getPrice') + ->with($this->equalTo(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE)) + ->will($this->returnValue($finalPriceMock)); + $finalPriceMock->expects($this->once()) + ->method('getValue') + ->will($this->returnValue(50)); + $this->priceModifier->expects($this->once()) + ->method('modifyPrice') + ->with($this->equalTo(50), $this->equalTo($this->saleableItemMock)) + ->will($this->returnValue(55)); + $this->calculatorMock->expects($this->once()) + ->method('getAmount') + ->with( + $this->equalTo(55), + $this->equalTo($this->saleableItemMock), + $this->equalTo(\Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE) + ) + ->will($this->returnValue(57.55)); + $this->assertEquals( + 57.55, + $this->attribute->getOptionValueModified( + [ + 'is_percent' => true, + 'pricing_value' => 100 + ] + ) + ); + } + + /** + * test method testGetOptionValueModified with option is_percent = false + */ + public function testGetOptionValueModifiedIsNotPercent() + { + $this->saleableItemMock->expects($this->once()) + ->method('setParentId') + ->with($this->equalTo(true)) + ->will($this->returnValue($this->returnSelf())); + $this->priceModifier->expects($this->once()) + ->method('modifyPrice') + ->with($this->equalTo(77.33), $this->equalTo($this->saleableItemMock)) + ->will($this->returnValue(77.67)); + $this->calculatorMock->expects($this->once()) + ->method('getAmount') + ->with( + $this->equalTo(77.67), + $this->equalTo($this->saleableItemMock), + $this->equalTo(\Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE) + ) + ->will($this->returnValue(80.99)); + $this->assertEquals( + 80.99, + $this->attribute->getOptionValueModified( + [ + 'is_percent' => false, + 'pricing_value' => 77.33 + ] + ) + ); + } + + /** + * test for method getTaxConfig + */ + public function testGetTaxConfig() + { + $expectedTaxConfig = [ + 'includeTax' => false, + 'showIncludeTax' => false, + 'showBothPrices' => false, + 'defaultTax' => 0, + 'currentTax' => 0, + 'inclTaxTitle' => __('Incl. Tax') + ]; + $this->assertEquals($expectedTaxConfig, $this->attribute->getTaxConfig()); + } + + /** + * test for method prepareAdjustmentConfig + */ + public function testPrepareAdjustmentConfig() + { + $expectedAdjustmentConfig = [ + 'includeTax' => false, + 'showIncludeTax' => false, + 'showBothPrices' => false, + 'defaultTax' => 0, + 'currentTax' => 0, + 'inclTaxTitle' => __('Incl. Tax'), + 'product' => $this->saleableItemMock + ]; + $this->assertEquals($expectedAdjustmentConfig, $this->attribute->prepareAdjustmentConfig()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/DbTest.php b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/DbTest.php index 42642467959..794fdf862de 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/DbTest.php +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/DbTest.php @@ -60,11 +60,13 @@ class DbTest extends \PHPUnit_Framework_TestCase $notFullJob = array('schedule' => ''); $source = array( 'crontab' => array( - 'jobs' => array( - 'job_name_1' => $fullJob, - 'job_name_2' => $nullJob, - 'job_name_3' => $notFullJob, - 'job_name_4' => array() + 'default' => array( + 'jobs' => array( + 'job_name_1' => $fullJob, + 'job_name_2' => $nullJob, + 'job_name_3' => $notFullJob, + 'job_name_4' => array() + ) ) ) ); @@ -100,11 +102,13 @@ class DbTest extends \PHPUnit_Framework_TestCase $source = array( 'crontab' => array( - 'jobs' => array( - 'job_name_1' => $runFullJob, - 'job_name_2' => $runNoMethodJob, - 'job_name_3' => $runEmptyMethodJob, - 'job_name_4' => $runNoModelJob + 'default' => array( + 'jobs' => array( + 'job_name_1' => $runFullJob, + 'job_name_2' => $runNoMethodJob, + 'job_name_3' => $runEmptyMethodJob, + 'job_name_4' => $runNoModelJob + ) ) ) ); diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/XmlTest.php b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/XmlTest.php index 33cdb08097c..433cf5274db 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/XmlTest.php +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Converter/XmlTest.php @@ -63,22 +63,28 @@ class XmlTest extends \PHPUnit_Framework_TestCase */ public function testConvert() { - $expected = array( - 'default' => array( - 'job1' => array( + $expected = [ + 'default' => [ + 'job1' => [ 'name' => 'job1', 'schedule' => '30 2 * * *', 'instance' => 'Model1', 'method' => 'method1' - ), - 'job2' => array( + ], + 'job2' => [ 'name' => 'job2', 'schedule' => '* * * * *', 'instance' => 'Model2', 'method' => 'method2' - ) - ) - ); + ], + 'job3' => [ + 'name' => 'job3', + 'instance' => 'Model3', + 'method' => 'method3', + 'config_path' => 'some/config/path' + ], + ] + ]; $xmlFile = __DIR__ . '/../_files/crontab_valid.xml'; $dom = new \DOMDocument(); diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Reader/DbTest.php b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Reader/DbTest.php index 88d8ba2384e..0333af3c71f 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Reader/DbTest.php +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/Reader/DbTest.php @@ -61,7 +61,7 @@ class DbTest extends \PHPUnit_Framework_TestCase { $job1 = array('schedule' => array('cron_expr' => '* * * * *')); $job2 = array('schedule' => array('cron_expr' => '1 1 1 1 1')); - $data = array('crontab' => array('jobs' => array('job1' => $job1, 'job2' => $job2))); + $data = array('crontab' => array('default' => array('jobs' => array('job1' => $job1, 'job2' => $job2)))); $this->_defaultReader->expects($this->once())->method('read')->will($this->returnValue($data)); $expected = array( 'job1' => array('schedule' => $job1['schedule']['cron_expr']), diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/XsdTest.php b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/XsdTest.php index b6f5f439a48..d9f3f62d189 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/XsdTest.php +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/XsdTest.php @@ -94,7 +94,8 @@ class XsdTest extends \PHPUnit_Framework_TestCase "Element 'job': The attribute 'name' is required but missing.\n", "Element 'job': The attribute 'instance' is required but missing.\n", "Element 'job': The attribute 'method' is required but missing.\n", - "Element 'wrongSchedule': This element is not expected. Expected is ( schedule ).\n" + "Element 'wrongSchedule': This element is not expected." . + " Expected is one of ( schedule, config_path ).\n" ) ), array( diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/_files/crontab_valid.xml b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/_files/crontab_valid.xml index ec1a8651c9f..156d8a7b7c7 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/Config/_files/crontab_valid.xml +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/Config/_files/crontab_valid.xml @@ -31,5 +31,8 @@ <job name="job2" instance="Model2" method="method2"> <schedule>* * * * *</schedule> </job> + <job name="job3" instance="Model3" method="method3"> + <config_path>some/config/path</config_path> + </job> </group> </config> diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php index 1259545eac9..dd205c5293d 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php @@ -509,15 +509,24 @@ class ObserverTest extends \PHPUnit_Framework_TestCase public function testDispatchGenerate() { $jobConfig = array( - 'test_group' => array('test_job1' => array('instance' => 'CronJob', 'method' => 'execute')) + 'test_group' => array( + 'default' => array( + 'test_job1' => array( + 'instance' => 'CronJob', + 'method' => 'execute' + ) + ) + ) ); $this->_config->expects($this->at(0))->method('getJobs')->will($this->returnValue($jobConfig)); $jobs = array( 'test_group' => array( - 'job1' => array('config_path' => 'test/path'), - 'job2' => array('schedule' => ''), - 'job3' => array('schedule' => '* * * * *') + 'default' => array( + 'job1' => array('config_path' => 'test/path'), + 'job2' => array('schedule' => ''), + 'job3' => array('schedule' => '* * * * *') + ) ) ); $this->_config->expects($this->at(1))->method('getJobs')->will($this->returnValue($jobs)); diff --git a/dev/tests/unit/testsuite/Magento/Customer/Model/ImportExport/Import/AddressTest.php b/dev/tests/unit/testsuite/Magento/Customer/Model/ImportExport/Import/AddressTest.php index 2b37358377c..34a8a9ec9ea 100644 --- a/dev/tests/unit/testsuite/Magento/Customer/Model/ImportExport/Import/AddressTest.php +++ b/dev/tests/unit/testsuite/Magento/Customer/Model/ImportExport/Import/AddressTest.php @@ -590,8 +590,8 @@ class AddressTest extends \PHPUnit_Framework_TestCase * Test Address::validateRow() * with 2 rows with identical PKs in case when add/update behavior is performed * - * @covers Address::validateRow - * @covers Address::_validateRowForUpdate + * @covers \Magento\Customer\Model\ImportExport\Import\Address::validateRow + * @covers \Magento\Customer\Model\ImportExport\Import\Address::_validateRowForUpdate */ public function testValidateRowForUpdateDuplicateRows() { @@ -640,7 +640,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase /** * Test Address::validateRow() with delete action * - * @covers Address::validateRow + * @covers \Magento\Customer\Model\ImportExport\Import\Address::validateRow * @dataProvider validateRowForDeleteDataProvider * * @param array $rowData @@ -689,7 +689,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase /** * Test if correct methods are invoked according to different custom behaviours * - * @covers Address::_importData + * @covers \Magento\Customer\Model\ImportExport\Import\Address::_importData */ public function testImportDataWithCustomBehaviour() { diff --git a/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/GroupTest.php b/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/GroupTest.php new file mode 100644 index 00000000000..43edbaf3021 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/GroupTest.php @@ -0,0 +1,96 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Customer\Model\Resource; + +use Magento\TestFramework\Helper\ObjectManager as ObjectManagerHelper; + +class GroupTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Magento\Customer\Model\Resource\Group */ + protected $groupResourceModel; + + /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */ + protected $resource; + + /** @var \Magento\Customer\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */ + protected $customerHelper; + + /** @var \Magento\Customer\Model\Group|\PHPUnit_Framework_MockObject_MockObject */ + protected $groupModel; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $customersFactory; + + protected function setUp() + { + $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false); + $this->customerHelper = $this->getMock('Magento\Customer\Helper\Data', [], [], '', false); + $this->customersFactory = $this->getMock( + 'Magento\Customer\Model\Resource\Customer\CollectionFactory', + ['create'], + [], + '', + false + ); + $this->groupModel = $this->getMock('Magento\Customer\Model\Group', [], [], '', false); + + $this->groupResourceModel = (new ObjectManagerHelper($this))->getObject( + 'Magento\Customer\Model\Resource\Group', + [ + 'resource' => $this->resource, + 'customerData' => $this->customerHelper, + 'customersFactory' => $this->customersFactory, + ] + ); + } + + public function testDelete() + { + $dbAdapter = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface'); + $this->resource->expects($this->once())->method('getConnection')->will($this->returnValue($dbAdapter)); + + $customer = $this->getMock( + 'Magento\Customer\Model\Customer', + ['__wakeup', 'load', 'getId', 'getStoreId', 'setGroupId', 'save'], + [], + '', + false + ); + $customerId = 1; + $customer->expects($this->once())->method('getId')->will($this->returnValue($customerId)); + $customer->expects($this->once())->method('load')->with($customerId)->will($this->returnSelf()); + $defaultCustomerGroup = 1; + $this->customerHelper->expects($this->once())->method('getDefaultCustomerGroupId') + ->will($this->returnValue($defaultCustomerGroup)); + $customer->expects($this->once())->method('setGroupId')->with($defaultCustomerGroup); + $customerCollection = $this->getMock('Magento\Customer\Model\Resource\Customer\Collection', [], [], '', false); + $customerCollection->expects($this->once())->method('addAttributeToFilter')->will($this->returnSelf()); + $customerCollection->expects($this->once())->method('load')->will($this->returnValue([$customer])); + $this->customersFactory->expects($this->once())->method('create') + ->will($this->returnValue($customerCollection)); + + $this->groupResourceModel->delete($this->groupModel); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/ImportExport/Import/CustomerComposite/DataTest.php b/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/ImportExport/Import/CustomerComposite/DataTest.php index 3adc1cd18ea..8d26ec77882 100644 --- a/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/ImportExport/Import/CustomerComposite/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Customer/Model/Resource/ImportExport/Import/CustomerComposite/DataTest.php @@ -100,9 +100,9 @@ class DataTest extends \PHPUnit_Framework_TestCase } /** - * @covers Data::getNextBunch - * @covers Data::_prepareRow - * @covers Data::_prepareAddressRowData + * @covers \Magento\Customer\Model\Resource\ImportExport\Import\CustomerComposite\Data::getNextBunch + * @covers \Magento\Customer\Model\Resource\ImportExport\Import\CustomerComposite\Data::_prepareRow + * @covers \Magento\Customer\Model\Resource\ImportExport\Import\CustomerComposite\Data::_prepareAddressRowData * * @dataProvider getNextBunchDataProvider * @param string $entityType diff --git a/dev/tests/unit/testsuite/Magento/Dhl/Model/CarrierTest.php b/dev/tests/unit/testsuite/Magento/Dhl/Model/CarrierTest.php index 1acc44b96df..6f8827fe424 100644 --- a/dev/tests/unit/testsuite/Magento/Dhl/Model/CarrierTest.php +++ b/dev/tests/unit/testsuite/Magento/Dhl/Model/CarrierTest.php @@ -227,10 +227,10 @@ class CarrierTest extends \PHPUnit_Framework_TestCase $filesPath . 'response_shipping_label.xml' ); unset( - $empty->AirwayBillNumber, - $empty->LabelImage, - $billingNumberOnly->LabelImage, - $outputImageOnly->AirwayBillNumber + $empty->{'AirwayBillNumber'}, + $empty->{'LabelImage'}, + $billingNumberOnly->{'LabelImage'}, + $outputImageOnly->{'AirwayBillNumber'} ); return array(array($empty), array($billingNumberOnly), array($outputImageOnly)); @@ -258,8 +258,10 @@ class CarrierTest extends \PHPUnit_Framework_TestCase $this->returnValue(file_get_contents(__DIR__ . '/_files/success_dhl_response_rates.xml')) ); // for setRequest - $request_params = include __DIR__ . '/_files/rates_request_data_dhl.php'; - $request = $this->_helper->getObject('Magento\Sales\Model\Quote\Address\RateRequest', $request_params); + $request = $this->_helper->getObject( + 'Magento\Sales\Model\Quote\Address\RateRequest', + require __DIR__ . '/_files/rates_request_data_dhl.php' + ); $this->assertNotEmpty($this->_model->collectRates($request)->getAllRates()); } } diff --git a/dev/tests/unit/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php b/dev/tests/unit/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php index 536cba24516..5aee86121e1 100644 --- a/dev/tests/unit/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php +++ b/dev/tests/unit/testsuite/Magento/Downloadable/Block/Catalog/Product/LinksTest.php @@ -24,33 +24,23 @@ namespace Magento\Downloadable\Block\Catalog\Product; +use Magento\Catalog\Pricing\Price\FinalPrice; +use Magento\Catalog\Pricing\Price\RegularPrice; + /** * Tests Magento\Downloadable\Block\Catalog\Product\Links */ class LinksTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Downloadable\Block\Catalog\Product\Links */ - protected $linksBlock; - - /** - * @var \Magento\Downloadable\Model\Link|\PHPUnit_Framework_MockObject_MockObject - */ - protected $linkMock; - /** - * @var \Magento\Downloadable\Pricing\Price\LinkPrice|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Downloadable\Block\Catalog\Product\Links */ - protected $linkPriceMock; - - /** - * @var \Magento\Framework\Pricing\Amount\Base|\PHPUnit_Framework_MockObject_MockObject - */ - protected $amountMock; + protected $linksBlock; /** * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */ - protected $salableItemMock; + protected $productMock; /** * @var \Magento\Framework\Pricing\PriceInfoInterface|\PHPUnit_Framework_MockObject_MockObject @@ -62,49 +52,58 @@ class LinksTest extends \PHPUnit_Framework_TestCase */ protected $layout; + /** + * @var \Magento\Core\Helper\Data | \PHPUnit_Framework_MockObject_MockObject + */ + protected $coreHelper; + public function setUp() { $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); - $contextMock = $this->getMock('Magento\Catalog\Block\Product\Context', [], [], '', false, false); - - $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); - $this->linkPriceMock = $this->getMock('Magento\Downloadable\Pricing\Price\LinkPrice', [], [], '', false); - $this->salableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); - $this->amountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); - $this->linkMock = $this->getMock('Magento\Downloadable\Model\Link', [], [], '', false); $this->layout = $this->getMock('Magento\Framework\View\Layout', [], [], '', false); + $contextMock = $this->getMock('Magento\Catalog\Block\Product\Context', [], [], '', false, false); $contextMock->expects($this->once()) ->method('getLayout') ->will($this->returnValue($this->layout)); - $data = [ - 'product' => $this->salableItemMock - ]; + $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $this->productMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->productMock->expects($this->any()) + ->method('getPriceInfo') + ->will($this->returnValue($this->priceInfoMock)); + $this->coreHelper = $this->getMock('Magento\Core\Helper\Data', [], [], '', false); $this->linksBlock = $objectManager->getObject( 'Magento\Downloadable\Block\Catalog\Product\Links', [ 'context' => $contextMock, - 'data' => $data + 'coreData' => $this->coreHelper, + 'data' => [ + 'product' => $this->productMock + ] ] ); } public function testGetLinkPrice() { + $linkPriceMock = $this->getMock('Magento\Downloadable\Pricing\Price\LinkPrice', [], [], '', false); + $amountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); + $linkMock = $this->getMock('Magento\Downloadable\Model\Link', [], [], '', false); + $priceCode = 'link_price'; $arguments = []; $expectedHtml = 'some html'; - $this->salableItemMock->expects($this->any()) + $this->productMock->expects($this->any()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfoMock)); $this->priceInfoMock->expects($this->any()) ->method('getPrice') ->with($this->equalTo($priceCode)) - ->will($this->returnValue($this->linkPriceMock)); - $this->linkPriceMock->expects($this->any()) + ->will($this->returnValue($linkPriceMock)); + $linkPriceMock->expects($this->any()) ->method('getLinkAmount') - ->with($this->linkMock) - ->will($this->returnValue($this->amountMock)); + ->with($linkMock) + ->will($this->returnValue($amountMock)); $priceBoxMock = $this->getMock('Magento\Framework\Pricing\Render', ['renderAmount'], [], '', false, false); @@ -115,11 +114,122 @@ class LinksTest extends \PHPUnit_Framework_TestCase $priceBoxMock->expects($this->once()) ->method('renderAmount') - ->with($this->amountMock, $this->linkPriceMock, $this->salableItemMock, $arguments) + ->with($amountMock, $linkPriceMock, $this->productMock, $arguments) ->will($this->returnValue($expectedHtml)); - $result = $this->linksBlock->getLinkPrice($this->linkMock); + $result = $this->linksBlock->getLinkPrice($linkMock); $this->assertEquals($expectedHtml, $result); } + + public function testGetJsonConfig() + { + $regularPrice = 11.; + $finalPrice = 10.; + $price = 5.; + $oldPrice = 4.; + + $linkPrice = 3.; + $linkIncludeTaxPrice = 4.; + $linkExcludeTaxPrice = 3.; + + $linkId = 42; + + $config = [ + 'price' => $price, + 'oldPrice' => $oldPrice, + 'links' => [ + $linkId => [ + 'price' => $linkPrice, + 'oldPrice' => $linkPrice, + 'inclTaxPrice' => $linkIncludeTaxPrice, + 'exclTaxPrice' => $linkExcludeTaxPrice + ] + ] + ]; + + $linkAmountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); + $linkAmountMock->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($linkIncludeTaxPrice)); + $linkAmountMock->expects($this->once()) + ->method('getBaseAmount') + ->will($this->returnValue($linkExcludeTaxPrice)); + + $amountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); + $amountMock->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($finalPrice)); + + $typeInstanceMock = $this->getMock('Magento\Catalog\Model\Product\Type\Simple', ['getLinks'], [], '', false); + $typeInstanceMock->expects($this->once()) + ->method('getLinks') + ->will($this->returnValue([$this->getLinkMock($linkPrice, $linkId)])); + $this->productMock->expects($this->once()) + ->method('getTypeInstance') + ->will($this->returnValue($typeInstanceMock)); + + $regularPriceMock = $this->getMock('Magento\Catalog\Pricing\Price\RegularPrice', [], [], '', false); + $regularPriceMock->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($regularPrice)); + + $finalPriceMock = $this->getMock('Magento\Catalog\Pricing\Price\FinalPrice', [], [], '', false); + $finalPriceMock->expects($this->at(0)) + ->method('getAmount') + ->will($this->returnValue($amountMock)); + $finalPriceMock->expects($this->at(1)) + ->method('getCustomAmount') + ->with($linkPrice) + ->will($this->returnValue($linkAmountMock)); + + $this->coreHelper->expects($this->at(0)) + ->method('currency') + ->with($finalPrice, false, false) + ->will($this->returnValue($price)); + $this->coreHelper->expects($this->at(1)) + ->method('currency') + ->with($regularPrice, false, false) + ->will($this->returnValue($oldPrice)); + $this->coreHelper->expects($this->at(2)) + ->method('currency') + ->with($linkPrice, false, false) + ->will($this->returnValue($linkPrice)); + $this->coreHelper->expects($this->at(3)) + ->method('currency') + ->with($linkIncludeTaxPrice, false, false) + ->will($this->returnValue($linkIncludeTaxPrice)); + $this->coreHelper->expects($this->at(4)) + ->method('currency') + ->with($linkExcludeTaxPrice, false, false) + ->will($this->returnValue($linkExcludeTaxPrice)); + + $this->priceInfoMock->expects($this->at(0)) + ->method('getPrice') + ->with(FinalPrice::PRICE_CODE) + ->will($this->returnValue($finalPriceMock)); + $this->priceInfoMock->expects($this->at(1)) + ->method('getPrice') + ->with(RegularPrice::PRICE_CODE) + ->will($this->returnValue($regularPriceMock)); + $this->priceInfoMock->expects($this->at(2)) + ->method('getPrice') + ->with(FinalPrice::PRICE_CODE) + ->will($this->returnValue($finalPriceMock)); + + $this->assertEquals(json_encode($config), $this->linksBlock->getJsonConfig()); + } + + protected function getLinkMock($linkPrice, $linkId) + { + $linkMock = $this->getMock('Magento\Downloadable\Model\Link', ['getPrice', 'getId', '__wakeup'], [], '', false); + $linkMock->expects($this->any()) + ->method('getPrice') + ->will($this->returnValue($linkPrice)); + $linkMock->expects($this->any()) + ->method('getId') + ->will($this->returnValue($linkId)); + + return $linkMock; + } } \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Downloadable/Pricing/Price/LinkPriceTest.php b/dev/tests/unit/testsuite/Magento/Downloadable/Pricing/Price/LinkPriceTest.php index 722bee8f5bf..f1ce804d416 100644 --- a/dev/tests/unit/testsuite/Magento/Downloadable/Pricing/Price/LinkPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/Downloadable/Pricing/Price/LinkPriceTest.php @@ -43,7 +43,7 @@ class LinkPriceTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */ - protected $salableItemMock; + protected $saleableItemMock; /** * @var \Magento\Framework\Pricing\Adjustment\Calculator|\PHPUnit_Framework_MockObject_MockObject @@ -60,7 +60,7 @@ class LinkPriceTest extends \PHPUnit_Framework_TestCase */ protected function setUp() { - $this->salableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->saleableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); $this->amountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); $this->calculatorMock = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); $this->linkMock = $this->getMock( @@ -71,7 +71,7 @@ class LinkPriceTest extends \PHPUnit_Framework_TestCase false ); - $this->linkPrice = new LinkPrice($this->salableItemMock, 1, $this->calculatorMock); + $this->linkPrice = new LinkPrice($this->saleableItemMock, 1, $this->calculatorMock); } public function testGetLinkAmount() @@ -83,10 +83,10 @@ class LinkPriceTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($amount)); $this->linkMock->expects($this->once()) ->method('getProduct') - ->will($this->returnValue($this->salableItemMock)); + ->will($this->returnValue($this->saleableItemMock)); $this->calculatorMock->expects($this->once()) ->method('getAmount') - ->with($amount, $this->equalTo($this->salableItemMock)) + ->with($amount, $this->equalTo($this->saleableItemMock)) ->will($this->returnValue($amount)); $result = $this->linkPrice->getLinkAmount($this->linkMock); diff --git a/dev/tests/unit/testsuite/Magento/Eav/Model/Validator/Attribute/DataTest.php b/dev/tests/unit/testsuite/Magento/Eav/Model/Validator/Attribute/DataTest.php index 19784443b00..57c90106598 100644 --- a/dev/tests/unit/testsuite/Magento/Eav/Model/Validator/Attribute/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Eav/Model/Validator/Attribute/DataTest.php @@ -410,17 +410,6 @@ class DataTest extends \PHPUnit_Framework_TestCase return $attribute; } - /** - * @param \Magento\Eav\Model\Attribute\Data\AbstractData $dataModel - * @return \PHPUnit_Framework_MockObject_MockObject - */ - protected function _getFactoryMock($dataModel) - { - $factory = $this->getMockBuilder('Magento\Eav\Model\Attribute\Data')->setMethods(array('factory'))->getMock(); - $factory::staticExpects($this->once())->method('factory')->will($this->returnValue($dataModel)); - return $factory; - } - /** * @param boolean $returnValue * @param string|null $argument diff --git a/dev/tests/unit/testsuite/Magento/Framework/Autoload/IncludePathTest.php b/dev/tests/unit/testsuite/Magento/Framework/Autoload/IncludePathTest.php index e4e3b56b975..6ff364f46ad 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Autoload/IncludePathTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Autoload/IncludePathTest.php @@ -47,9 +47,9 @@ class IncludePathTest extends \PHPUnit_Framework_TestCase */ public function testGetFile($class, $expectedValue) { - $this->assertFalse(\Magento\Framework\Autoload\IncludePath::getFile($class)); - \Magento\Framework\Autoload\IncludePath::addIncludePath(__DIR__ . '/_files'); - $this->assertEquals($expectedValue, \Magento\Framework\Autoload\IncludePath::getFile($class)); + $this->assertFalse((new \Magento\Framework\Autoload\IncludePath())->getFile($class)); + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath(__DIR__ . '/_files'); + $this->assertEquals($expectedValue, (new \Magento\Framework\Autoload\IncludePath())->getFile($class)); } /** @@ -75,7 +75,7 @@ class IncludePathTest extends \PHPUnit_Framework_TestCase { $expectedIncludePath = str_replace('%include_path%', get_include_path(), $expectedIncludePath); $this->assertNotEquals($expectedIncludePath, get_include_path()); - \Magento\Framework\Autoload\IncludePath::addIncludePath($fixturePath, $prepend); + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath($fixturePath, $prepend); $this->assertEquals($expectedIncludePath, get_include_path()); } @@ -105,9 +105,9 @@ class IncludePathTest extends \PHPUnit_Framework_TestCase */ public function testLoad($class, $expectedValue) { - \Magento\Framework\Autoload\IncludePath::addIncludePath(__DIR__ . '/_files'); + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath(__DIR__ . '/_files'); $this->assertFalse(class_exists($class, false)); - \Magento\Framework\Autoload\IncludePath::load($class); + (new \Magento\Framework\Autoload\IncludePath())->load($class); if ($expectedValue) { $this->assertTrue(class_exists($class, false)); } else { diff --git a/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Adapter/ZendTest.php b/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Adapter/ZendTest.php index 31ea472efbe..c8ef9bfce1c 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Adapter/ZendTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Adapter/ZendTest.php @@ -52,7 +52,7 @@ class ZendTest extends \PHPUnit_Framework_TestCase /** * @return array */ - public static function proxyMethodDataProvider() + public function proxyMethodDataProvider() { return array( 'test' => array('test', array('record_id'), array('RECORD_ID'), 111), @@ -86,7 +86,7 @@ class ZendTest extends \PHPUnit_Framework_TestCase 'getBackend', array(), array(), - \PHPUnit_Framework_MockObject_Generator::getMock('Zend_Cache_Backend') + $this->getMock('Zend_Cache_Backend') ) ); } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/BareTest.php b/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/BareTest.php index 7b27fe097f4..c0811a6b72c 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/BareTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/BareTest.php @@ -44,7 +44,7 @@ class BareTest extends \PHPUnit_Framework_TestCase /** * @return array */ - public static function proxyMethodDataProvider() + public function proxyMethodDataProvider() { return array( array('test', array('record_id'), 111), @@ -52,8 +52,8 @@ class BareTest extends \PHPUnit_Framework_TestCase array('save', array('record_value', 'record_id', array('tag'), 555), true), array('remove', array('record_id'), true), array('clean', array(\Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG, array('tag')), true), - array('getBackend', array(), \PHPUnit_Framework_MockObject_Generator::getMock('Zend_Cache_Backend')), - array('getLowLevelFrontend', array(), \PHPUnit_Framework_MockObject_Generator::getMock('Zend_Cache_Core')) + array('getBackend', array(), $this->getMock('Zend_Cache_Backend')), + array('getLowLevelFrontend', array(), $this->getMock('Zend_Cache_Core')) ); } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/ProfilerTest.php b/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/ProfilerTest.php index 557ed00b74f..f7b281bec71 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/ProfilerTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Cache/Frontend/Decorator/ProfilerTest.php @@ -77,10 +77,10 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase /** * @return array */ - public static function proxyMethodDataProvider() + public function proxyMethodDataProvider() { $backend = new \Zend_Cache_Backend_BlackHole(); - $adaptee = \PHPUnit_Framework_MockObject_Generator::getMock('Zend_Cache_Core', array(), array(), '', false); + $adaptee = $this->getMock('Zend_Cache_Core', array(), array(), '', false); $lowLevelFrontend = new \Magento\Framework\Cache\Frontend\Adapter\Zend($adaptee); return array( diff --git a/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/EntityAbstractTest.php b/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/EntityAbstractTest.php index c86b2c41a29..a3007f30184 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/EntityAbstractTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/EntityAbstractTest.php @@ -299,7 +299,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase $this->returnValue(self::RESULT_DIRECTORY) ); - $autoloader->staticExpects( + $autoloader->expects( $this->at(0) )->method( 'getFile' @@ -309,7 +309,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase $this->returnValue($classExistsFirst) ); if ($classExistsFirst) { - $autoloader->staticExpects( + $autoloader->expects( $this->at(1) )->method( 'getFile' @@ -324,7 +324,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase if ($classExistsFirst) { $expectedInvocations = 2; } - $autoloader->staticExpects($this->exactly($expectedInvocations))->method('getFile'); + $autoloader->expects($this->exactly($expectedInvocations))->method('getFile'); $expectedInvocations = 1; if (!$classExistsFirst || $classExistsSecond) { diff --git a/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/IoTest.php b/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/IoTest.php index 78427a49813..581576c6a1e 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/IoTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Code/Generator/IoTest.php @@ -82,7 +82,7 @@ class IoTest extends \PHPUnit_Framework_TestCase '', false ); - $this->_autoLoaderMock->staticExpects( + $this->_autoLoaderMock->expects( $this->any() )->method( 'getFilePath' diff --git a/dev/tests/unit/testsuite/Magento/Framework/Code/GeneratorTest.php b/dev/tests/unit/testsuite/Magento/Framework/Code/GeneratorTest.php index 2ba5c382858..da89941b30f 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Code/GeneratorTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Code/GeneratorTest.php @@ -102,8 +102,8 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase */ public function testGenerateClass($className, $entityType) { - $this->_autoloader->staticExpects( - $this->once() + $this->_autoloader->expects( + $this->any() )->method( 'getFile' )->with( @@ -130,7 +130,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase */ public function testGenerateClassWithExistName($className, $entityType) { - $this->_autoloader->staticExpects( + $this->_autoloader->expects( $this->once() )->method( 'getFile' @@ -158,7 +158,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase public function testGenerateClassWithWrongName() { - $this->_autoloader->staticExpects($this->never())->method('getFile'); + $this->_autoloader->expects($this->never())->method('getFile'); $this->_model = new \Magento\Framework\Code\Generator($this->_autoloader, $this->_ioObjectMock); @@ -173,7 +173,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase */ public function testGenerateClassWithError() { - $this->_autoloader->staticExpects($this->once())->method('getFile')->will($this->returnValue(false)); + $this->_autoloader->expects($this->once())->method('getFile')->will($this->returnValue(false)); $this->_model = new \Magento\Framework\Code\Generator( $this->_autoloader, diff --git a/dev/tests/unit/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php b/dev/tests/unit/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php index b9b0ecffda3..5f6b5300fc7 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php @@ -93,8 +93,6 @@ class MysqlTest extends \PHPUnit_Framework_TestCase } /** - * Test result for bigint - * * @dataProvider bigintResultProvider */ public function testPrepareColumnValueForBigint($value, $expectedResult) @@ -124,12 +122,12 @@ class MysqlTest extends \PHPUnit_Framework_TestCase array(2147483647 + 1, '2147483648'), array(9223372036854775807 + 1, '9223372036854775808'), array(9223372036854775807, '9223372036854775807'), - array(9223372036854775807.3423424234, '9223372036854775807'), - array(2147483647 * pow(10, 10)+12, '21474836470000000012'), + array(9223372036854775807.3423424234, '9223372036854775808'), + array(2147483647 * pow(10, 10)+12, '21474836470000001024'), array(9223372036854775807 * pow(10, 10)+12, '92233720368547758080000000000'), array((0.099999999999999999999999995+0.2+0.3+0.4+0.5)*10, '15'), - array('21474836470000000012', '21474836470000000012'), - array(0x5468792130ABCDEF, '6082244480221302255') + array('21474836470000000012', '21474836470000001024'), + array(0x5468792130ABCDEF, '6082244480221302255'), ); } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/AbstractElementTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/AbstractElementTest.php new file mode 100644 index 00000000000..90d887b2cd5 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/AbstractElementTest.php @@ -0,0 +1,667 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\AbstractElement + */ +namespace Magento\Framework\Data\Form\Element; + +class AbstractElementTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Framework\Data\Form\Element\AbstractElement|\PHPUnit_Framework_MockObject_MockObject + */ + protected $_model; + + /** + * @var \Magento\Framework\Data\Form\Element\Factory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $_factoryMock; + + /** + * @var \Magento\Framework\Data\Form\Element\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $_collectionFactoryMock; + + /** + * @var \Magento\Framework\Escaper|\PHPUnit_Framework_MockObject_MockObject + */ + protected $_escaperMock; + + protected function setUp() + { + $this->_factoryMock = $this->getMock( + 'Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false + ); + $this->_collectionFactoryMock = $this->getMock( + 'Magento\Framework\Data\Form\Element\CollectionFactory', array(), array(), '', false + ); + $this->_escaperMock = $this->getMock('Magento\Framework\Escaper', array(), array(), '', false); + + $this->_model = $this->getMockForAbstractClass('Magento\Framework\Data\Form\Element\AbstractElement', array( + $this->_factoryMock, + $this->_collectionFactoryMock, + $this->_escaperMock + )); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::addElement() + */ + public function testAddElement() + { + $elementId = 11; + $elementMock = $this->getMockForAbstractClass( + 'Magento\Framework\Data\Form\Element\AbstractElement', array(), '', false, true, true, array('getId') + ); + $elementMock->expects($this->once()) + ->method('getId') + ->will($this->returnValue($elementId)); + + $formMock = $this->getMock( + 'Magento\Framework\Data\Form\AbstractForm', + array('checkElementId', 'addElementToCollection'), + array(), + '', + false + ); + $formMock->expects($this->once()) + ->method('checkElementId') + ->with($elementId); + $formMock->expects($this->once()) + ->method('addElementToCollection') + ->with($elementMock); + + $collectionMock = $this->getMock('Magento\Framework\Data\Form\Element\Collection', array(), array(), '', false); + + $this->_collectionFactoryMock->expects($this->any()) + ->method('create') + ->will($this->returnValue($collectionMock)); + + $this->_model->setForm($formMock); + $this->_model->addElement($elementMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlId() + */ + public function testGetHtmlId() + { + $htmlIdPrefix = '--'; + $htmlIdSuffix = ']]'; + $htmlId = 'some_id'; + + $formMock = $this->getMock( + 'Magento\Framework\Data\Form\AbstractForm', array('getHtmlIdPrefix', 'getHtmlIdSuffix'), array(), '', false + ); + $formMock->expects($this->any()) + ->method('getHtmlIdPrefix') + ->will($this->returnValue($htmlIdPrefix)); + $formMock->expects($this->any()) + ->method('getHtmlIdSuffix') + ->will($this->returnValue($htmlIdSuffix)); + + $this->_model->setId($htmlId); + $this->_model->setForm($formMock); + $this->assertEquals($htmlIdPrefix . $htmlId . $htmlIdSuffix, $this->_model->getHtmlId()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getName() + */ + public function testGetNameWithoutSuffix() + { + $formMock = $this->getMock( + 'Magento\Framework\Data\Form\AbstractForm', + array('getFieldNameSuffix', 'addSuffixToName'), + array(), + '', + false + ); + $formMock->expects($this->any()) + ->method('getFieldNameSuffix') + ->will($this->returnValue(null)); + $formMock->expects($this->never()) + ->method('addSuffixToName'); + + $this->_model->setForm($formMock); + $this->_model->getName(); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getName() + */ + public function testGetNameWithSuffix() + { + $returnValue = 'some_value'; + + $formMock = $this->getMock( + 'Magento\Framework\Data\Form\AbstractForm', + array('getFieldNameSuffix', 'addSuffixToName'), + array(), + '', + false + ); + $formMock->expects($this->once()) + ->method('getFieldNameSuffix') + ->will($this->returnValue(true)); + $formMock->expects($this->once()) + ->method('addSuffixToName') + ->will($this->returnValue($returnValue)); + + $this->_model->setForm($formMock); + + $this->assertEquals($returnValue, $this->_model->getName()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::removeField() + */ + public function testRemoveField() + { + $elementId = 'element_id'; + + $formMock = $this->getMock( + 'Magento\Framework\Data\Form\AbstractForm', array('removeField'), array(), '', false + ); + $formMock->expects($this->once()) + ->method('removeField') + ->with($elementId); + + $collectionMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\Collection', array('remove'), array(), '', false + ); + $collectionMock->expects($this->once()) + ->method('remove') + ->with($elementId); + + $this->_collectionFactoryMock->expects($this->any()) + ->method('create') + ->will($this->returnValue($collectionMock)); + + $this->_model->setForm($formMock); + $this->_model->removeField($elementId); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlAttributes() + */ + public function testGetHtmlAttributes() + { + $htmlAttributes = array( + 'type', + 'title', + 'class', + 'style', + 'onclick', + 'onchange', + 'disabled', + 'readonly', + 'tabindex', + 'placeholder' + ); + $this->assertEquals($htmlAttributes, $this->_model->getHtmlAttributes()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::addClass() + */ + public function testAddClass() + { + $oldClass = 'old_class'; + $newClass = 'new_class'; + $this->_model->addClass($oldClass); + $this->_model->addClass($newClass); + + $this->assertEquals(' ' . $oldClass . ' ' . $newClass, $this->_model->getClass()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::removeClass() + */ + public function testRemoveClass() + { + $oldClass = 'old_class'; + $newClass = 'new_class'; + $oneMoreClass = 'some_class'; + $this->_model->addClass($oldClass); + $this->_model->addClass($oneMoreClass); + $this->_model->addClass($newClass); + + $this->_model->removeClass($oneMoreClass); + + $this->assertEquals(' ' . $oldClass . ' ' . $newClass, $this->_model->getClass()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getEscapedValue() + */ + public function testGetEscapedValueWithoutFilter() + { + $this->_model->setValue('<a href="#hash_tag">my \'quoted\' string</a>'); + $this->assertEquals( + '<a href="#hash_tag">my \'quoted\' string</a>', $this->_model->getEscapedValue() + ); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getEscapedValue() + */ + public function testGetEscapedValueWithFilter() + { + $value = '<a href="#hash_tag">my \'quoted\' string</a>'; + $expectedValue = '<a href="#hash_tag">my \'quoted\' string</a>'; + + $filterMock = $this->getMock('Magento\Framework\Object', array('filter'), array(), '', false); + $filterMock->expects($this->once()) + ->method('filter') + ->with($value) + ->will($this->returnArgument(0)); + + $this->_model->setValueFilter($filterMock); + $this->_model->setValue($value); + $this->assertEquals($expectedValue, $this->_model->getEscapedValue()); + } + + /** + * @param array $initialData + * @param string $expectedValue + * @dataProvider getElementHtmlDataProvider + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getElementHtml() + */ + public function testGetElementHtml(array $initialData, $expectedValue) + { + $this->_model->setForm( + $this->getMock('Magento\Framework\Data\Form\AbstractForm', array(), array(), '', false) + ); + + $this->_model->setData($initialData); + $this->assertEquals($expectedValue, $this->_model->getElementHtml()); + } + + /** + * @param array $initialData + * @param string $expectedValue + * @dataProvider getLabelHtmlDataProvider + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getLabelHtml() + */ + public function testGetLabelHtml(array $initialData, $expectedValue) + { + $idSuffix = isset($initialData['id_suffix']) ? $initialData['id_suffix'] : null; + $this->_model->setData($initialData); + $this->_model->setForm( + $this->getMock('Magento\Framework\Data\Form\AbstractForm', array(), array(), '', false) + ); + $this->assertEquals($expectedValue, $this->_model->getLabelHtml($idSuffix)); + } + + /** + * @param array $initialData + * @param string $expectedValue + * @dataProvider testGetDefaultHtmlDataProvider + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getDefaultHtml() + */ + public function testGetDefaultHtml(array $initialData, $expectedValue) + { + $this->_model->setData($initialData); + $this->_model->setForm( + $this->getMock('Magento\Framework\Data\Form\AbstractForm', array(), array(), '', false) + ); + $this->assertEquals($expectedValue, $this->_model->getDefaultHtml()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml() + */ + public function testGetHtmlWithoutRenderer() + { + $this->_model->setRequired(true); + $this->_model->setForm( + $this->getMock('Magento\Framework\Data\Form\AbstractForm', array(), array(), '', false) + ); + $expectedHtml = '<span class="field-row">' . "\n" + . '<input id="" name="" data-ui-id="form-element-" value="" class=" required-entry"/></span>' . "\n"; + + $this->assertEquals($expectedHtml, $this->_model->getHtml()); + $this->assertEquals(' required-entry', $this->_model->getClass()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml() + */ + public function testGetHtmlWithRenderer() + { + $this->_model->setRequired(true); + + $expectedHtml = 'some-html'; + + $rendererMock = $this->getMockForAbstractClass( + 'Magento\Framework\Data\Form\Element\Renderer\RendererInterface' + ); + $rendererMock->expects($this->once()) + ->method('render') + ->with($this->_model) + ->will($this->returnValue($expectedHtml)); + $this->_model->setRenderer($rendererMock); + + $this->assertEquals($expectedHtml, $this->_model->getHtml()); + $this->assertEquals(' required-entry', $this->_model->getClass()); + } + + /** + * @param array $initialData + * @param string $expectedValue + * @dataProvider serializeDataProvider + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::serialize() + */ + public function testSerialize(array $initialData, $expectedValue) + { + $attributes = array(); + if (isset($initialData['attributes'])) { + $attributes = $initialData['attributes']; + unset($initialData['attributes']); + } + $this->_model->setData($initialData); + $this->assertEquals($expectedValue, $this->_model->serialize($attributes)); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId() + */ + public function testGetHtmlContainerIdWithoutId() + { + $this->_model->setForm( + $this->getMock('Magento\Framework\Data\Form\AbstractForm', array(), array(), '', false) + ); + $this->assertEquals('', $this->_model->getHtmlContainerId()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId() + */ + public function testGetHtmlContainerIdWithContainerId() + { + $containerId = 'some-id'; + $this->_model->setContainerId($containerId); + $this->_model->setForm( + $this->getMock('Magento\Framework\Data\Form\AbstractForm', array(), array(), '', false) + ); + $this->assertEquals($containerId, $this->_model->getHtmlContainerId()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId() + */ + public function testGetHtmlContainerIdWithFieldContainerIdPrefix() + { + $id = 'id'; + $prefix = 'prefix_'; + $formMock = $this->getMock( + 'Magento\Framework\Data\Form\AbstractForm', array('getFieldContainerIdPrefix'), array(), '', false + ); + $formMock->expects($this->once()) + ->method('getFieldContainerIdPrefix') + ->will($this->returnValue($prefix)); + + $this->_model->setId($id); + $this->_model->setForm($formMock); + $this->assertEquals($prefix . $id, $this->_model->getHtmlContainerId()); + } + + /** + * @param array $initialData + * @param string $expectedValue + * @dataProvider addElementValuesDataProvider + * @covers \Magento\Framework\Data\Form\Element\AbstractElement::addElementValues() + */ + public function testAddElementValues(array $initialData, $expectedValue) + { + $this->_escaperMock->expects($this->any()) + ->method('escapeHtml') + ->will($this->returnArgument(0)); + $this->_model->setValues($initialData['initial_values']); + $this->_model->addElementValues($initialData['add_values'], $initialData['overwrite']); + + $this->assertEquals($expectedValue, $this->_model->getValues()); + } + + /** + * @return array + */ + public function addElementValuesDataProvider() + { + return array( + array( + array( + 'initial_values' => array( + 'key_1' => 'value_1', + 'key_2' => 'value_2', + 'key_3' => 'value_3' + ), + 'add_values' => array( + 'key_1' => 'value_4', + 'key_2' => 'value_5', + 'key_3' => 'value_6', + 'key_4' => 'value_7' + ), + 'overwrite' => false + ), + array( + 'key_1' => 'value_1', + 'key_2' => 'value_2', + 'key_3' => 'value_3', + 'key_4' => 'value_7' + ) + ), + array( + array( + 'initial_values' => array( + 'key_1' => 'value_1', + 'key_2' => 'value_2', + 'key_3' => 'value_3' + ), + 'add_values' => array( + 'key_1' => 'value_4', + 'key_2' => 'value_5', + 'key_3' => 'value_6', + 'key_4' => 'value_7' + ), + 'overwrite' => true + ), + array( + 'key_1' => 'value_4', + 'key_2' => 'value_5', + 'key_3' => 'value_6', + 'key_4' => 'value_7' + ) + ) + ); + } + + /** + * @return array + */ + public function serializeDataProvider() + { + return array( + array( + array(), + '' + ), + array( + array( + 'attributes' => array('disabled'), + 'disabled' => true + ), + 'disabled="disabled"' + ), + array( + array( + 'attributes' => array('checked'), + 'checked' => true + ), + 'checked="checked"' + ), + array( + array( + 'data-locked' => 1, + 'attributes' => array('attribute_1') + ), + 'data-locked="1"' + ) + ); + } + + /** + * @return array + */ + public function testGetDefaultHtmlDataProvider() + { + return array( + array( + array(), + '<span class="field-row">' . "\n" + . '<input id="" name="" data-ui-id="form-element-" value="" /></span>' . "\n" + ), + array( + array('default_html' => 'some default html'), + 'some default html' + ), + array( + array( + 'label' => 'some label', + 'html_id' => 'html-id', + 'name' => 'some-name', + 'value' => 'some-value', + ), + '<span class="field-row">' . "\n" + . '<label class="label" for="html-id" data-ui-id="form-element-some-namelabel">' + . '<span>some label</span></label>' . "\n" + . '<input id="html-id" name="some-name" data-ui-id="form-element-some-name" value="some-value" />' + . '</span>' . "\n" + ), + array( + array( + 'label' => 'some label', + 'html_id' => 'html-id', + 'name' => 'some-name', + 'value' => 'some-value', + 'no_span' => true + ), + '<label class="label" for="html-id" data-ui-id="form-element-some-namelabel">' + . '<span>some label</span></label>' . "\n" + . '<input id="html-id" name="some-name" data-ui-id="form-element-some-name" value="some-value" />' + ), + ); + } + + /** + * @return array + */ + public function getLabelHtmlDataProvider() + { + return array( + array( + array(), + '' + ), + array( + array( + 'id_suffix' => 'suffix' + ), + '' + ), + array( + array( + 'label' => 'some-label', + 'html_id' => 'some-html-id' + ), + '<label class="label" for="some-html-id" data-ui-id="form-element-label">' + . '<span>some-label</span></label>' . "\n" + ), + array( + array( + 'id_suffix' => 'suffix', + 'label' => 'some-label', + 'html_id' => 'some-html-id' + ), + '<label class="label" for="some-html-idsuffix" data-ui-id="form-element-label">' + . '<span>some-label</span></label>' . "\n" + ), + ); + } + + /** + * @return array + */ + public function getElementHtmlDataProvider() + { + return array( + array( + array(), + '<input id="" name="" data-ui-id="form-element-" value="" />' + ), + array( + array( + 'html_id' => 'html-id', + 'name' => 'some-name', + 'value' => 'some-value' + ), + '<input id="html-id" name="some-name" data-ui-id="form-element-some-name" value="some-value" />' + ), + array( + array( + 'html_id' => 'html-id', + 'name' => 'some-name', + 'value' => 'some-value', + 'before_element_html' => 'some-html' + ), + '<label class="addbefore" for="html-id">some-html</label>' + . '<input id="html-id" name="some-name" data-ui-id="form-element-some-name" value="some-value" />' + ), + array( + array( + 'html_id' => 'html-id', + 'name' => 'some-name', + 'value' => 'some-value', + 'after_element_js' => 'some-js' + ), + '<input id="html-id" name="some-name" data-ui-id="form-element-some-name" value="some-value" />some-js' + ), + array( + array( + 'html_id' => 'html-id', + 'name' => 'some-name', + 'value' => 'some-value', + 'after_element_html' => 'some-html' + ), + '<input id="html-id" name="some-name" data-ui-id="form-element-some-name" value="some-value" />' + . '<label class="addafter" for="html-id">some-html</label>' + ) + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ButtonTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ButtonTest.php new file mode 100644 index 00000000000..0c2f46961d4 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ButtonTest.php @@ -0,0 +1,100 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Button + */ +namespace Magento\Framework\Data\Form\Element; + +class ButtonTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Button + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Button( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Button::__construct + */ + public function testConstruct() + { + $this->assertEquals('button', $this->_model->getType()); + $this->assertEquals('textfield', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Button::getHtmlAttributes + */ + public function testGetHtmlAttributes() + { + $this->assertEmpty( + array_diff( + array( + 'type', + 'title', + 'class', + 'style', + 'onclick', + 'onchange', + 'disabled', + 'readonly', + 'tabindex', + 'placeholder', + 'data-mage-init' + ), + $this->_model->getHtmlAttributes() + ) + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CheckboxTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CheckboxTest.php new file mode 100644 index 00000000000..55a59efde53 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CheckboxTest.php @@ -0,0 +1,102 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Checkbox + */ +namespace Magento\Framework\Data\Form\Element; + +class CheckboxTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Checkbox + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Checkbox( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Checkbox::__construct + */ + public function testConstruct() + { + $this->assertEquals('checkbox', $this->_model->getType()); + $this->assertEquals('checkbox', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Checkbox::getHtmlAttributes + */ + public function testGetHtmlAttributes() + { + $this->assertEmpty( + array_diff( + array('type', 'title', 'class', 'style', 'checked', 'onclick', 'onchange', 'disabled', 'tabindex'), + $this->_model->getHtmlAttributes() + ) + ); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Checkbox::getElementHtml + */ + public function testGetElementHtml() + { + $this->_model->setIsChecked(false); + $html = $this->_model->getElementHtml(); + $this->assertContains('type="checkbox"', $html); + $this->assertNotContains('checked="checked"', $html); + $this->_model->setIsChecked(true); + $html = $this->_model->getElementHtml(); + $this->assertContains('checked="checked"', $html); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CollectionFactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CollectionFactoryTest.php new file mode 100644 index 00000000000..e540ae0705b --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/CollectionFactoryTest.php @@ -0,0 +1,66 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\CollectionFactory + */ +namespace Magento\Framework\Data\Form\Element; + +class CollectionFactoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\CollectionFactory + */ + protected $_model; + + protected function setUp() + { + $objectManagerMock = $this->getMock( + 'Magento\Framework\ObjectManager\ObjectManager', + array('create'), + array(), + '', + false + ); + $collectionMock = $this->getMock('Magento\Framework\Data\Form\Element\Collection', array(), array(), '', false); + $objectManagerMock->expects($this->once())->method('create')->will($this->returnValue($collectionMock)); + $this->_model = new \Magento\Framework\Data\Form\Element\CollectionFactory($objectManagerMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\CollectionFactory::create + */ + public function testCreate() + { + $this->assertInstanceOf('Magento\Framework\Data\Form\Element\Collection', $this->_model->create(array())); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ColumnTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ColumnTest.php new file mode 100644 index 00000000000..1bd1ffd22ca --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ColumnTest.php @@ -0,0 +1,74 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Column + */ +namespace Magento\Framework\Data\Form\Element; + +class ColumnTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Column + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Column( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Column::__construct + */ + public function testConstruct() + { + $this->assertEquals('column', $this->_model->getType()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/FileTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/FileTest.php new file mode 100644 index 00000000000..f86b8592398 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/FileTest.php @@ -0,0 +1,75 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\File + */ +namespace Magento\Framework\Data\Form\Element; + +class FileTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\File + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\File( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\File::__construct + */ + public function testConstruct() + { + $this->assertEquals('file', $this->_model->getType()); + $this->assertEquals('file', $this->_model->getExtType()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/HiddenTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/HiddenTest.php new file mode 100644 index 00000000000..010c282bc25 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/HiddenTest.php @@ -0,0 +1,87 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Hidden + */ +namespace Magento\Framework\Data\Form\Element; + +class HiddenTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Hidden + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Hidden( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Hidden::__construct + */ + public function testConstruct() + { + $this->assertEquals('hidden', $this->_model->getType()); + $this->assertEquals('hiddenfield', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Hidden::getDefaultHtml + */ + public function testGetDefaultHtml() + { + $html = $this->_model->getDefaultHtml(); + $this->assertContains('<input', $html); + $this->assertContains('type="hidden"', $html); + $this->_model->setDefaultHtml('testhtml'); + $this->assertEquals('testhtml', $this->_model->getDefaultHtml()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImageTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImageTest.php new file mode 100644 index 00000000000..5a739a696a9 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImageTest.php @@ -0,0 +1,113 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Image + */ +namespace Magento\Framework\Data\Form\Element; + +class ImageTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Image + */ + protected $_image; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $urlBuilderMock = $this->getMock('\Magento\Framework\Url', array(), array(), '', false); + $this->_image = new \Magento\Framework\Data\Form\Element\Image( + $factoryMock, + $collectionFactoryMock, + $escaperMock, + $urlBuilderMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_image->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Image::__construct + */ + public function testConstruct() + { + $this->assertEquals('file', $this->_image->getType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Image::getName + */ + public function testGetName() + { + $this->_image->setName('image_name'); + $this->assertEquals('image_name', $this->_image->getName()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Image::getElementHtml + */ + public function testGetElementHtmlWithoutValue() + { + $html = $this->_image->getElementHtml(); + $this->assertContains('class="input-file"', $html); + $this->assertContains('<input', $html); + $this->assertContains('type="file"', $html); + $this->assertContains('value=""', $html); + $this->assertNotContains('</a>', $html); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Image::getElementHtml + */ + public function testGetElementHtmlWithValue() + { + $this->_image->setValue('test_value'); + $html = $this->_image->getElementHtml(); + $this->assertContains('class="input-file"', $html); + $this->assertContains('<input', $html); + $this->assertContains('type="file"', $html); + $this->assertContains('value="test_value"', $html); + $this->assertContains('<a href="test_value" onclick="imagePreview(\'_image\'); return false;"', $html); + $this->assertContains('<input type="checkbox"', $html); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImagefileTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImagefileTest.php new file mode 100644 index 00000000000..56a30d645d2 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ImagefileTest.php @@ -0,0 +1,74 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Imagefile + */ +namespace Magento\Framework\Data\Form\Element; + +class ImagefileTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Imagefile + */ + protected $_imagefile; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_imagefile = new \Magento\Framework\Data\Form\Element\Imagefile( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Imagefile::__construct + */ + public function testConstruct() + { + $this->assertEquals('file', $this->_imagefile->getType()); + $this->assertEquals('imagefile', $this->_imagefile->getExtType()); + $this->assertFalse($this->_imagefile->getAutosubmit()); + $this->assertFalse($this->_imagefile->getData('autoSubmit')); + + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LabelTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LabelTest.php new file mode 100644 index 00000000000..82f3889a590 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LabelTest.php @@ -0,0 +1,83 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Label + */ +namespace Magento\Framework\Data\Form\Element; + +class LabelTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Label + */ + protected $_label; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_label = new \Magento\Framework\Data\Form\Element\Label( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Label::__construct + */ + public function testConstruct() + { + $this->assertEquals('label', $this->_label->getType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Label::getElementHtml + */ + public function testGetElementHtml() + { + $this->_label->setValue('Label Text'); + $html = $this->_label->getElementHtml(); + $this->assertContains("<div class=\"control-value\">Label Text", $html); + $this->_label->setBold(true); + $html = $this->_label->getElementHtml(); + $this->assertContains("<div class=\"control-value special\">Label Text", $html); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LinkTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LinkTest.php new file mode 100644 index 00000000000..25760cabb5d --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/LinkTest.php @@ -0,0 +1,134 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Link + */ +namespace Magento\Framework\Data\Form\Element; + +class LinkTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Link + */ + protected $_link; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_link = new \Magento\Framework\Data\Form\Element\Link( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_link->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Link::__construct + */ + public function testConstruct() + { + $this->assertEquals('link', $this->_link->getType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Link::getElementHtml + */ + public function testGetElementHtml() + { + $this->_link->setBeforeElementHtml('link_before'); + $this->_link->setAfterElementHtml('link_after'); + $this->_link->setId('link_id'); + $this->_link->setData('ui_id', 'ui_id'); + $this->_link->setValue('Link Text'); + $html = $this->_link->getElementHtml(); + $this->assertEquals( + "link_before<a id=\"link_id\" data-ui-id=\"form-element-\">Link Text</a>\nlink_after", + $html + ); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Link::getHtmlAttributes + */ + public function testGetHtmlAttributes() + { + $this->assertEmpty( + array_diff( + array( + 'charset', + 'coords', + 'href', + 'hreflang', + 'rel', + 'rev', + 'name', + 'shape', + 'target', + 'accesskey', + 'class', + 'dir', + 'lang', + 'style', + 'tabindex', + 'title', + 'xml:lang', + 'onblur', + 'onclick', + 'ondblclick', + 'onfocus', + 'onmousedown', + 'onmousemove', + 'onmouseout', + 'onmouseover', + 'onmouseup', + 'onkeydown', + 'onkeypress', + 'onkeyup' + ), + $this->_link->getHtmlAttributes() + ) + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/NoteTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/NoteTest.php new file mode 100644 index 00000000000..0375358e9f2 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/NoteTest.php @@ -0,0 +1,91 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Note + */ +namespace Magento\Framework\Data\Form\Element; + +class NoteTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Note + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Note( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Note::__construct + */ + public function testConstruct() + { + $this->assertEquals('note', $this->_model->getType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Note::getElementHtml + */ + public function testGetElementHtml() + { + $this->_model->setBeforeElementHtml('note_before'); + $this->_model->setAfterElementHtml('note_after'); + $this->_model->setId('note_id'); + $this->_model->setData('ui_id', 'ui_id'); + $this->_model->setValue('Note Text'); + $html = $this->_model->getElementHtml(); + $this->assertEquals( + "note_before<div id=\"note_id\" class=\"control-value\"></div>note_after", + $html + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ObscureTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ObscureTest.php new file mode 100644 index 00000000000..222a9981823 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ObscureTest.php @@ -0,0 +1,111 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Obscure + */ +namespace Magento\Framework\Data\Form\Element; + +class ObscureTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Obscure + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Obscure( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Obscure::__construct + */ + public function testConstruct() + { + $this->assertEquals('password', $this->_model->getType()); + $this->assertEquals('textfield', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Obscure::getEscapedValue + */ + public function testGetEscapedValue() + { + $this->_model->setValue('Obscure Text'); + $this->assertContains('value="******"', $this->_model->getElementHtml()); + $this->_model->setValue(''); + $this->assertContains('value=""', $this->_model->getElementHtml()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Obscure::getHtmlAttributes + */ + public function testGetHtmlAttributes() + { + $this->assertEmpty( + array_diff( + array( + 'type', + 'title', + 'class', + 'style', + 'onclick', + 'onchange', + 'onkeyup', + 'disabled', + 'readonly', + 'maxlength', + 'tabindex' + ), + $this->_model->getHtmlAttributes() + ) + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/PasswordTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/PasswordTest.php new file mode 100644 index 00000000000..4656dea8440 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/PasswordTest.php @@ -0,0 +1,85 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Password + */ +namespace Magento\Framework\Data\Form\Element; + +class PasswordTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Password + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Obscure( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Password::__construct + */ + public function testConstruct() + { + $this->assertEquals('password', $this->_model->getType()); + $this->assertEquals('textfield', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Password::getHtml + */ + public function testGetHtml() + { + $html = $this->_model->getHtml(); + $this->assertContains('type="password"', $html); + $this->assertTrue(preg_match('/class=\".*input-text.*\"/i', $html) > 0); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/RadioTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/RadioTest.php new file mode 100644 index 00000000000..a06171e64c7 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/RadioTest.php @@ -0,0 +1,75 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Radio + */ +namespace Magento\Framework\Data\Form\Element; + +class RadioTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Radio + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Radio( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Radio::__construct + */ + public function testConstruct() + { + $this->assertEquals('radio', $this->_model->getType()); + $this->assertEquals('radio', $this->_model->getExtType()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ResetTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ResetTest.php new file mode 100644 index 00000000000..a4860a0302b --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/ResetTest.php @@ -0,0 +1,75 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Reset + */ +namespace Magento\Framework\Data\Form\Element; + +class ResetTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Reset + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Reset( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Reset::__construct + */ + public function testConstruct() + { + $this->assertEquals('text', $this->_model->getType()); + $this->assertEquals('textfield', $this->_model->getExtType()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/SubmitTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/SubmitTest.php new file mode 100644 index 00000000000..b9f84bd3071 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/SubmitTest.php @@ -0,0 +1,85 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Submit + */ +namespace Magento\Framework\Data\Form\Element; + +class SubmitTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Submit + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Submit( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Submit::__construct + */ + public function testConstruct() + { + $this->assertEquals('submit', $this->_model->getType()); + $this->assertEquals('submit', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Submit::getHtml + */ + public function testGetHtml() + { + $html = $this->_model->getHtml(); + $this->assertContains('type="submit"', $html); + $this->assertTrue(preg_match('/class=\".*submit.*\"/i', $html) > 0); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextTest.php new file mode 100644 index 00000000000..0a986e75067 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextTest.php @@ -0,0 +1,111 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Text + */ +namespace Magento\Framework\Data\Form\Element; + +class TextTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Text + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Text( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Text::__construct + */ + public function testConstruct() + { + $this->assertEquals('text', $this->_model->getType()); + $this->assertEquals('textfield', $this->_model->getExtType()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Text::getHtml + */ + public function testGetHtml() + { + $html = $this->_model->getHtml(); + $this->assertContains('type="text"', $html); + $this->assertTrue(preg_match('/class=\".*input-text.*\"/i', $html) > 0); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Text::getHtmlAttributes + */ + public function testGetHtmlAttributes() + { + $this->assertEmpty( + array_diff( + array( + 'type', + 'title', + 'class', + 'style', + 'onclick', + 'onchange', + 'onkeyup', + 'disabled', + 'readonly', + 'maxlength', + 'tabindex', + 'placeholder' + ), + $this->_model->getHtmlAttributes() + ) + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextareaTest.php b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextareaTest.php new file mode 100644 index 00000000000..f00acd6e1de --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Data/Form/Element/TextareaTest.php @@ -0,0 +1,114 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Data + * @subpackage integration_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +/** + * Tests for \Magento\Framework\Data\Form\Element\Textarea + */ +namespace Magento\Framework\Data\Form\Element; + +class TextareaTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Framework\Data\Form\Element\Textarea + */ + protected $_model; + + protected function setUp() + { + $factoryMock = $this->getMock('\Magento\Framework\Data\Form\Element\Factory', array(), array(), '', false); + $collectionFactoryMock = $this->getMock( + '\Magento\Framework\Data\Form\Element\CollectionFactory', + array(), + array(), + '', + false + ); + $escaperMock = $this->getMock('\Magento\Framework\Escaper', array(), array(), '', false); + $this->_model = new \Magento\Framework\Data\Form\Element\Textarea( + $factoryMock, + $collectionFactoryMock, + $escaperMock + ); + $formMock = new \Magento\Framework\Object(); + $formMock->getHtmlIdPrefix('id_prefix'); + $formMock->getHtmlIdPrefix('id_suffix'); + $this->_model->setForm($formMock); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Textarea::__construct + */ + public function testConstruct() + { + $this->assertEquals('textarea', $this->_model->getType()); + $this->assertEquals('textarea', $this->_model->getExtType()); + $this->assertEquals(2, $this->_model->getRows()); + $this->assertEquals(15, $this->_model->getCols()); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Textarea::getElementHtml + */ + public function testGetElementHtml() + { + $html = $this->_model->getElementHtml(); + $this->assertContains('</textarea>', $html); + $this->assertContains('rows="2"', $html); + $this->assertContains('cols="15"', $html); + $this->assertTrue(preg_match('/class=\".*textarea.*\"/i', $html) > 0); + } + + /** + * @covers \Magento\Framework\Data\Form\Element\Textarea::getHtmlAttributes + */ + public function testGetHtmlAttributes() + { + $this->assertEmpty( + array_diff( + array( + 'title', + 'class', + 'style', + 'onclick', + 'onchange', + 'rows', + 'cols', + 'readonly', + 'disabled', + 'onkeyup', + 'tabindex' + ), + $this->_model->getHtmlAttributes() + ) + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CalculatorTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CalculatorTest.php index 0b48e4bb7ed..f5a00d64213 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CalculatorTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CalculatorTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -48,6 +51,12 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase $this->model = new \Magento\Framework\Pricing\Adjustment\Calculator($this->amountFactoryMock); } + public function tearDown() + { + $this->model = null; + $this->amountFactoryMock = null; + } + /** * Test getAmount() */ @@ -58,10 +67,10 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase $newAmount = 15; $taxAdjustmentCode = 'tax'; $weeeAdjustmentCode = 'weee'; - $adjust = 5; + $adjustment = 5; $expectedAdjustments = [ - $taxAdjustmentCode => $adjust, - $weeeAdjustmentCode => $adjust + $taxAdjustmentCode => $adjustment, + $weeeAdjustmentCode => $adjustment ]; $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product') @@ -81,7 +90,7 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase $taxAdjustmentMock->expects($this->once()) ->method('extractAdjustment') ->with($this->equalTo($amount), $this->equalTo($productMock)) - ->will($this->returnValue($adjust)); + ->will($this->returnValue($adjustment)); $weeeAdjustmentMock = $this->getMockBuilder('Magento\Weee\Pricing\Adjustment') ->disableOriginalConstructor() @@ -126,4 +135,73 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase $result = $this->model->getAmount($amount, $productMock); $this->assertInstanceOf('Magento\Framework\Pricing\Amount\AmountInterface', $result); } + + public function testGetAmountExclude() + { + $amount = 10; + $taxAdjustmentCode = 'tax'; + $weeeAdjustmentCode = 'weee'; + $adjustment = 5; + $expectedAdjustments = []; + + $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product') + ->disableOriginalConstructor() + ->setMethods(['getPriceInfo', '__wakeup']) + ->getMock(); + + $taxAdjustmentMock = $this->getMockBuilder('Magento\Tax\Pricing\Adjustment') + ->disableOriginalConstructor() + ->getMock(); + $taxAdjustmentMock->expects($this->once()) + ->method('getAdjustmentCode') + ->will($this->returnValue($taxAdjustmentCode)); + $taxAdjustmentMock->expects($this->once()) + ->method('isIncludedInBasePrice') + ->will($this->returnValue(true)); + $taxAdjustmentMock->expects($this->once()) + ->method('extractAdjustment') + ->with($this->equalTo($amount), $this->equalTo($productMock)) + ->will($this->returnValue($adjustment)); + + $weeeAdjustmentMock = $this->getMockBuilder('Magento\Weee\Pricing\Adjustment') + ->disableOriginalConstructor() + ->getMock(); + $weeeAdjustmentMock->expects($this->once()) + ->method('getAdjustmentCode') + ->will($this->returnValue($weeeAdjustmentCode)); + $weeeAdjustmentMock->expects($this->once()) + ->method('isIncludedInBasePrice') + ->will($this->returnValue(false)); + $weeeAdjustmentMock->expects($this->once()) + ->method('isIncludedInDisplayPrice') + ->with($this->equalTo($productMock)) + ->will($this->returnValue(true)); + $weeeAdjustmentMock->expects($this->never()) + ->method('applyAdjustment'); + + $adjustments = [$taxAdjustmentMock, $weeeAdjustmentMock]; + + $priceInfoMock = $this->getMockBuilder('\Magento\Framework\Pricing\PriceInfoInterface') + ->disableOriginalConstructor() + //->setMethods(['getPriceInfo']) + ->getMock(); + $priceInfoMock->expects($this->any()) + ->method('getAdjustments') + ->will($this->returnValue($adjustments)); + + $productMock->expects($this->any()) + ->method('getPriceInfo') + ->will($this->returnValue($priceInfoMock)); + + $amountBaseMock = $this->getMockBuilder('Magento\Framework\Pricing\Amount\Base') + ->disableOriginalConstructor() + ->getMock(); + + $this->amountFactoryMock->expects($this->once()) + ->method('create') + ->with($this->equalTo($amount), $this->equalTo($expectedAdjustments)) + ->will($this->returnValue($amountBaseMock)); + $result = $this->model->getAmount($amount, $productMock, true); + $this->assertInstanceOf('Magento\Framework\Pricing\Amount\AmountInterface', $result); + } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CollectionTest.php index 0ed7b9423a5..53b12cafda2 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/CollectionTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/FactoryTest.php index 147567a2552..93bfb30ad02 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/FactoryTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -69,8 +72,8 @@ class FactoryTest extends \PHPUnit_Framework_TestCase { $objectManager = $this->getMock( 'Magento\Framework\ObjectManager\ObjectManager', - array('create'), - array(), + ['create'], + [], '', false ); diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/PoolTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/PoolTest.php index 9bfe424bbb6..00d2b79593e 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/PoolTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Adjustment/PoolTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -40,7 +43,7 @@ class PoolTest extends \PHPUnit_Framework_TestCase 'adj5' => ['className' => 'adj5_class'], ]; - /** @var $adjustmentFactory \Magento\Framework\Pricing\Adjustment\Factory */ + /** @var Factory|\PHPUnit_Framework_MockObject_MockObject $adjustmentFactory */ $adjustmentFactory = $this->getMockBuilder('Magento\Framework\Pricing\Adjustment\Factory') ->disableOriginalConstructor() ->setMethods(['create']) diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Amount/BaseTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Amount/BaseTest.php index ab824503118..9adc6ec6b04 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Amount/BaseTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Amount/BaseTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/AbstractPriceTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/AbstractPriceTest.php new file mode 100644 index 00000000000..d478d29d4a9 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/AbstractPriceTest.php @@ -0,0 +1,127 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +/** + * Class RegularPriceTest + */ +class AbstractPriceTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var AbstractPrice + */ + protected $price; + + /** + * @var \Magento\Framework\Pricing\PriceInfoInterface |\PHPUnit_Framework_MockObject_MockObject + */ + protected $priceInfoMock; + + /** + * @var \Magento\Framework\Pricing\Amount\Base |\PHPUnit_Framework_MockObject_MockObject + */ + protected $amountMock; + + /** + * @var \Magento\Framework\Pricing\Object\SaleableInterface |\PHPUnit_Framework_MockObject_MockObject + */ + protected $saleableItemMock; + + /** + * @var \Magento\Framework\Pricing\Adjustment\Calculator |\PHPUnit_Framework_MockObject_MockObject + */ + protected $calculatorMock; + + /** + * Test setUp + */ + protected function setUp() + { + $qty = 1; + $this->saleableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $this->amountMock = $this->getMock('Magento\Framework\Pricing\Amount', [], [], '', false); + $this->calculatorMock = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); + + $this->saleableItemMock->expects($this->once()) + ->method('getPriceInfo') + ->will($this->returnValue($this->priceInfoMock)); + $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->price = $objectManager->getObject( + 'Magento\Framework\Pricing\Price\Stub', + [ + 'saleableItem' => $this->saleableItemMock, + 'quantity' => $qty, + 'calculator' => $this->calculatorMock + ] + ); + } + + /** + * Test method testGetDisplayValue + */ + public function testGetAmount() + { + $priceValue = $this->price->getValue(); + $amountValue = 88; + $this->calculatorMock->expects($this->once()) + ->method('getAmount') + ->with($this->equalTo($priceValue)) + ->will($this->returnValue($amountValue)); + $this->assertEquals($amountValue, $this->price->getAmount()); + } + + /** + * Test method getPriceType + */ + public function testGetPriceCode() + { + $this->assertEquals(AbstractPrice::PRICE_CODE, $this->price->getPriceCode()); + } + + public function testGetCustomAmount() + { + $exclude = false; + $amount = 21.0; + $customAmount = 42.0; + $this->calculatorMock->expects($this->once()) + ->method('getAmount') + ->with($amount, $this->saleableItemMock, $exclude) + ->will($this->returnValue($customAmount)); + + $this->assertEquals($customAmount, $this->price->getCustomAmount($amount, $exclude)); + } + + public function testGetCustomAmountDefault() + { + $customAmount = 42.0; + $this->calculatorMock->expects($this->once()) + ->method('getAmount') + ->with($this->price->getValue(), $this->saleableItemMock, null) + ->will($this->returnValue($customAmount)); + + $this->assertEquals($customAmount, $this->price->getCustomAmount()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/CollectionTest.php new file mode 100644 index 00000000000..e1252270c6f --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/CollectionTest.php @@ -0,0 +1,121 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +/** + * Test for class Collection + */ +class CollectionTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Framework\Pricing\Price\Collection + */ + protected $collection; + + /** + * @var \Magento\Framework\Pricing\Price\Pool + */ + protected $pool; + + /** + * @var \Magento\Framework\Pricing\Price\PriceInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $priceMock; + + /** + * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $saleableItemMock; + + /** + * @var \Magento\Framework\Pricing\Price\Factory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $factoryMock; + + /** + * @var float + */ + protected $quantity; + + /** + * Test setUp + */ + public function setUp() + { + $this->pool = new Pool( + [ + 'regular_price' => 'RegularPrice', + 'special_price' => 'SpecialPrice', + 'group_price' => 'GroupPrice' + ] + ); + + $this->saleableItemMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + $this->priceMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Price\PriceInterface'); + $this->factoryMock = $this->getMock('Magento\Framework\Pricing\Price\Factory', [], [], '', false); + + $this->collection = new Collection( + $this->saleableItemMock, + $this->factoryMock, + $this->pool, + $this->quantity + ); + } + + /** + * Test get method + */ + public function testGet() + { + $this->factoryMock->expects($this->once()) + ->method('create') + ->with( + $this->equalTo($this->saleableItemMock), + $this->equalTo('RegularPrice'), + $this->quantity + ) + ->will($this->returnValue($this->priceMock)); + $this->assertEquals($this->priceMock, $this->collection->get('regular_price')); + } + + /** + * Test current method + */ + public function testCurrent() + { + $this->factoryMock->expects($this->once()) + ->method('create') + ->with( + $this->equalTo($this->saleableItemMock), + $this->equalTo($this->pool->current()), + $this->quantity + ) + ->will($this->returnValue($this->priceMock)); + $this->assertEquals($this->priceMock, $this->collection->current()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/FactoryTest.php index 382c8e23835..89a315563bf 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/FactoryTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -56,41 +59,40 @@ class FactoryTest extends \PHPUnit_Framework_TestCase $quantity = 2.2; $className = 'Magento\Framework\Pricing\Price\PriceInterface'; $priceMock = $this->getMock($className); - $salableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); + $saleableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); $arguments = []; - $argumentsResult = array_merge($arguments, ['salableItem' => $salableItem, 'quantity' => $quantity]); + $argumentsResult = array_merge($arguments, ['saleableItem' => $saleableItem, 'quantity' => $quantity]); $this->objectManagerMock->expects($this->once()) ->method('create') ->with($className, $argumentsResult) ->will($this->returnValue($priceMock)); - $this->assertEquals($priceMock, $this->model->create($salableItem, $className, $quantity, $arguments)); + $this->assertEquals($priceMock, $this->model->create($saleableItem, $className, $quantity, $arguments)); } + /** + * @codingStandardsIgnoreStart + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage Magento\Framework\Pricing\PriceInfo\Base doesn't implement \Magento\Framework\Pricing\Price\PriceInterface + * @codingStandardsIgnoreEnd + */ public function testCreateWithException() { - $this->setExpectedException( - 'InvalidArgumentException', - sprintf( - 'Magento\Framework\Pricing\PriceInfo\Base doesn\'t implement %s', - '\Magento\Framework\Pricing\Price\PriceInterface' - ) - ); $quantity = 2.2; $className = 'Magento\Framework\Pricing\PriceInfo\Base'; $priceMock = $this->getMockBuilder($className)->disableOriginalConstructor()->getMock(); - $salableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); + $saleableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); $arguments = []; - $argumentsResult = array_merge($arguments, ['salableItem' => $salableItem, 'quantity' => $quantity]); + $argumentsResult = array_merge($arguments, ['saleableItem' => $saleableItem, 'quantity' => $quantity]); $this->objectManagerMock->expects($this->once()) ->method('create') ->with($className, $argumentsResult) ->will($this->returnValue($priceMock)); - $this->model->create($salableItem, $className, $quantity, $arguments); + $this->model->create($saleableItem, $className, $quantity, $arguments); } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/PoolTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/PoolTest.php new file mode 100644 index 00000000000..6858599eac0 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/PoolTest.php @@ -0,0 +1,120 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +/** + * Test for Pool + */ +class PoolTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Framework\Pricing\Price\Pool + */ + protected $pool; + + /** + * @var array + */ + protected $prices; + + /** + * @var array + */ + protected $target; + + /** + * \Iterator + */ + protected $targetPool; + + /** + * Test setUp + */ + public function setUp() + { + $this->prices = [ + 'regular_price' => 'RegularPrice', + 'special_price' => 'SpecialPrice' + ]; + $this->target = [ + 'group_price' => 'TargetGroupPrice', + 'regular_price' => 'TargetRegularPrice' + ]; + $this->targetPool = new Pool($this->target); + $this->pool = new Pool($this->prices, $this->targetPool); + } + + /** + * test mergedConfiguration + */ + public function testMergedConfiguration() + { + $expected = new Pool([ + 'regular_price' => 'RegularPrice', + 'special_price' => 'SpecialPrice', + 'group_price' => 'TargetGroupPrice' + ]); + $this->assertEquals($expected, $this->pool); + } + + /** + * Test get method + */ + public function testGet() + { + $this->assertEquals('RegularPrice', $this->pool->get('regular_price')); + $this->assertEquals('SpecialPrice', $this->pool->get('special_price')); + $this->assertEquals('TargetGroupPrice', $this->pool->get('group_price')); + } + + /** + * Test abilities of ArrayAccess interface + */ + public function testArrayAccess() + { + $this->assertEquals('RegularPrice', $this->pool['regular_price']); + $this->assertEquals('SpecialPrice', $this->pool['special_price']); + $this->assertEquals('TargetGroupPrice', $this->pool['group_price']); + $this->pool['fake_price'] = 'FakePrice'; + $this->assertEquals('FakePrice', $this->pool['fake_price']); + $this->assertTrue(isset($this->pool['fake_price'])); + unset($this->pool['fake_price']); + $this->assertFalse(isset($this->pool['fake_price'])); + $this->assertNull($this->pool['fake_price']); + } + + /** + * Test abilities of Iterator interface + */ + public function testIterator() + { + foreach ($this->pool as $code => $class) { + $this->assertEquals($this->pool[$code], $class); + } + } +} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/Stub.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/Stub.php new file mode 100644 index 00000000000..2be7d1988ea --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Price/Stub.php @@ -0,0 +1,46 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Pricing + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +/** + * Class Stub for testing abstract class AbstractPrice + * + * @package Magento\Catalog\Pricing\Price + */ +class Stub extends AbstractPrice +{ + /** + * Get price value + * + * @return float + */ + public function getValue() + { + $examplePrice = 77.0; + return $examplePrice; + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceCompositeTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceCompositeTest.php deleted file mode 100644 index 7c77bf7b51d..00000000000 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceCompositeTest.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Framework\Pricing; - -use Magento\Framework\Pricing\Price\Factory as PriceFactory; -use Magento\Catalog\Pricing\Price\FinalPriceInterface; -use Magento\Catalog\Pricing\Price\GroupPriceInterface; -use Magento\Catalog\Pricing\Price\SpecialPriceInterface; - -/** - * Test class for \Magento\Framework\Pricing\PriceComposite - */ -class PriceCompositeTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var PriceComposite - */ - protected $model; - - /** - * @var PriceFactory|\PHPUnit_Framework_MockObject_MockObject - */ - protected $priceFactory; - - /** - * @var array - */ - protected $metadata; - - public function setUp() - { - $this->priceFactory = $this->getMockBuilder('Magento\Framework\Pricing\Price\Factory') - ->disableOriginalConstructor() - ->getMock(); - - $this->metadata = array( - FinalPriceInterface::PRICE_TYPE_FINAL => ['class' => 'Class\For\FinalPrice'], - GroupPriceInterface::PRICE_TYPE_GROUP => ['class' => 'Class\For\GroupPrice'], - SpecialPriceInterface::PRICE_TYPE_SPECIAL => ['class' => 'Class\For\SpecialPrice'] - ); - - $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); - $this->model = $objectManager->getObject('Magento\Framework\Pricing\PriceComposite', array( - 'priceFactory' => $this->priceFactory, - 'metadata' => $this->metadata - )); - } - - public function testGetPriceCodes() - { - $expectedCodes = [ - FinalPriceInterface::PRICE_TYPE_FINAL, - GroupPriceInterface::PRICE_TYPE_GROUP, - SpecialPriceInterface::PRICE_TYPE_SPECIAL - ]; - $this->assertEquals($expectedCodes, $this->model->getPriceCodes()); - } - - public function testGetMetadata() - { - $this->assertEquals($this->metadata, $this->model->getMetadata()); - } - - public function testCreatePriceObject() - { - $saleable = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); - $priceCode = FinalPriceInterface::PRICE_TYPE_FINAL; - $quantity = 2.4; - - $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); - - $this->priceFactory->expects($this->once()) - ->method('create') - ->with($saleable, $this->metadata[$priceCode]['class'], $quantity) - ->will($this->returnValue($price)); - - $this->assertEquals($price, $this->model->createPriceObject($saleable, $priceCode, $quantity)); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage wrong_price is not registered in prices list - */ - public function testCreatePriceObjectWithException() - { - $saleable = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface'); - $priceCode = 'wrong_price'; - $quantity = 2.4; - - $this->model->createPriceObject($saleable, $priceCode, $quantity); - } -} diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/BaseTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/BaseTest.php index 5491e1780b0..10af59566ad 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/BaseTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/BaseTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -30,14 +33,9 @@ namespace Magento\Framework\Pricing\PriceInfo; class BaseTest extends \PHPUnit_Framework_TestCase { /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\Object\SaleableInterface + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\Price\Collection */ - protected $saleableItem; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\PriceComposite - */ - protected $prices; + protected $priceCollection; /** * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\Adjustment\Collection @@ -45,24 +43,13 @@ class BaseTest extends \PHPUnit_Framework_TestCase protected $adjustmentCollection; /** - * @var float - */ - protected $quantity; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\Amount\AmountFactory - */ - protected $amountFactory; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject|Base + * @var Base */ protected $model; public function setUp() { - $this->saleableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface', [], [], '', false); - $this->prices = $this->getMock('Magento\Framework\Pricing\PriceComposite', [], [], '', false); + $this->priceCollection = $this->getMock('Magento\Framework\Pricing\Price\Collection', [], [], '', false); $this->adjustmentCollection = $this->getMock( 'Magento\Framework\Pricing\Adjustment\Collection', [], @@ -70,50 +57,35 @@ class BaseTest extends \PHPUnit_Framework_TestCase '', false ); - $this->amountFactory = $this->getMock('Magento\Framework\Pricing\Amount\AmountFactory', [], [], '', false); - $this->quantity = 3.; - $this->model = new Base( - $this->saleableItem, - $this->prices, - $this->adjustmentCollection, - $this->amountFactory, - $this->quantity - ); + $this->model = new Base($this->priceCollection, $this->adjustmentCollection); } /** - * @covers \Magento\Framework\Pricing\PriceInfo\Base::__construct - * @covers \Magento\Framework\Pricing\PriceInfo\Base::initPrices - * @covers \Magento\Framework\Pricing\PriceInfo\Base::getPrices + * test method getPrices() */ public function testGetPrices() { - $this->prices->expects($this->once()) - ->method('getPriceCodes') - ->will($this->returnValue(['test1', 'test2'])); - $this->prices->expects($this->at(1))->method('createPriceObject') - ->with($this->saleableItem, 'test1', $this->quantity)->will($this->returnValue('1')); - $this->prices->expects($this->at(2))->method('createPriceObject') - ->with($this->saleableItem, 'test2', $this->quantity)->will($this->returnValue('2')); - $this->assertEquals(['test1' => '1', 'test2' => '2'], $this->model->getPrices()); + $this->assertEquals($this->priceCollection, $this->model->getPrices()); } /** - * @covers \Magento\Framework\Pricing\PriceInfo\Base::__construct - * @covers \Magento\Framework\Pricing\PriceInfo\Base::getPrice + * @param $entryParams + * @param $createCount * @dataProvider providerGetPrice */ public function testGetPrice($entryParams, $createCount) { - list($priceCode, $quantity) = array_values(reset($entryParams)); - $this->prices->expects($this->exactly($createCount))->method('createPriceObject') - ->with($this->saleableItem, $priceCode, $quantity ? : $this->quantity)->will( - $this->returnValue('basePrice') - ); + $priceCode = current(array_values(reset($entryParams))); + + $this->priceCollection + ->expects($this->exactly($createCount)) + ->method('get') + ->with($this->equalTo($priceCode)) + ->will($this->returnValue('basePrice')); foreach ($entryParams as $params) { - list($priceCode, $quantity) = array_values($params); - $this->assertEquals('basePrice', $this->model->getPrice($priceCode, $quantity)); + list($priceCode) = array_values($params); + $this->assertEquals('basePrice', $this->model->getPrice($priceCode)); } } @@ -127,20 +99,20 @@ class BaseTest extends \PHPUnit_Framework_TestCase return [ 'case with empty quantity' => [ 'entryParams' => [ - ['priceCode' => 'testCode', 'quantity' => null] + ['priceCode' => 'testCode'] ], 'createCount' => 1 ], 'case with existing price' => [ 'entryParams' => [ - ['priceCode' => 'testCode', 'quantity' => null], - ['priceCode' => 'testCode', 'quantity' => null] + ['priceCode' => 'testCode'], + ['priceCode' => 'testCode'] ], - 'createCount' => 1 + 'createCount' => 2 ], 'case with quantity' => [ 'entryParams' => [ - ['priceCode' => 'testCode', 'quantity' => 2.] + ['priceCode' => 'testCode'] ], 'createCount' => 1 ], @@ -166,28 +138,4 @@ class BaseTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue('adjustment')); $this->assertEquals('adjustment', $this->model->getAdjustment('test1')); } - - /** - * @covers \Magento\Framework\Pricing\PriceInfo\Base::getPricesIncludedInBase - */ - public function testGetPricesIncludedInBase() - { - $this->prices->expects($this->once()) - ->method('getMetadata') - ->will( - $this->returnValue( - [ - 'test1' => ['class' => 'class1', 'include_in_base_price' => false], - 'test2' => ['class' => 'class2', 'include_in_base_price' => true] - ] - ) - ); - - $priceModelMock = $this->getMock('Magento\Catalog\Pricing\Price\SpecialPrice', [], [], '', false); - $priceModelMock->expects($this->once())->method('getValue')->will($this->returnValue(2.5)); - $this->prices->expects($this->at(1))->method('createPriceObject') - ->with($this->saleableItem, 'test2', $this->quantity)->will($this->returnValue($priceModelMock)); - - $this->assertSame([$priceModelMock], $this->model->getPricesIncludedInBase()); - } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/FactoryTest.php index 47c03f501aa..3952b8f7975 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/PriceInfo/FactoryTest.php @@ -18,115 +18,158 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ namespace Magento\Framework\Pricing\PriceInfo; +use Magento\Framework\Pricing\PriceInfo\Factory; + /** * Test class for \Magento\Framework\Pricing\PriceInfo\Factory */ class FactoryTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\TestFramework\Helper\ObjectManager + * @var \Magento\Framework\ObjectManager\ObjectManager|\PHPUnit_Framework_MockObject_MockObject */ - protected $objectManager; - - public function setUp() - { - $this->objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); - } + protected $objectManagerMock; /** - * @dataProvider priceInfoClassesProvider + * @var array */ - public function testCreate($types, $type, $expected) - { - $priceInfoFactory = $this->preparePriceInfoFactory( - $expected, - $types - ); + protected $types; - $productMock = $this->getMock( - 'Magento\Catalog\Model\Product', - ['getTypeId', 'getQty', '__wakeup'], - [], - '', - false - ); - - $productMock->expects($this->any()) - ->method('getTypeId') - ->will($this->returnValue($type)); + /** + * @var \Magento\Framework\Pricing\PriceInfo\Factory + */ + protected $factory; - $productMock->expects($this->any()) - ->method('getQty') - ->will($this->returnValue(1)); + /** + * @var \Magento\Framework\Pricing\Price\Collection|\PHPUnit_Framework_MockObject_MockObject + */ + protected $pricesMock; - $this->assertInstanceOf( - $expected, - $priceInfoFactory->create($productMock) - ); - } + /** + * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $saleableItemMock; /** - * @param string $priceInfoInterface - * @param array $types - * @return object + * @var \Magento\Framework\Pricing\PriceInfoInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected function preparePriceInfoFactory($priceInfoInterface, $types = []) - { - return $this->objectManager->getObject( - 'Magento\Framework\Pricing\PriceInfo\Factory', - [ - 'types' => $types, - 'objectManager' => $this->prepareObjectManager($priceInfoInterface) - ] - ); - } + protected $priceInfoMock; /** - * @param string $priceInfoInterface - * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\ObjectManager\ObjectManager + * SetUp test */ - protected function prepareObjectManager($priceInfoInterface) + public function setUp() { - $objectManager = $this->getMock('Magento\Framework\ObjectManager\ObjectManager', ['create'], [], '', false); - $objectManager->expects($this->any()) - ->method('create') - ->will($this->returnValue($this->getMockForAbstractClass($priceInfoInterface))); - return $objectManager; + $this->objectManagerMock = $this->getMock( + 'Magento\Framework\ObjectManager\ObjectManager', + [], + [], + '', + false + ); + $this->pricesMock = $this->getMock( + 'Magento\Framework\Pricing\Price\Collection', + [], + [], + '', + false + ); + $this->saleableItemMock = $this->getMockForAbstractClass( + 'Magento\Framework\Pricing\Object\SaleableInterface', + [], + '', + false, + true, + true, + ['getQty'] + ); + $this->priceInfoMock = $this->getMockForAbstractClass( + 'Magento\Framework\Pricing\PriceInfoInterface', + [], + '', + false, + true, + true, + [] + ); + $this->types = [ + 'default' => [ + 'infoClass' => 'Price\PriceInfo\Default', + 'prices' => 'Price\Collection\Default' + ], + 'configurable' => [ + 'infoClass' => 'Price\PriceInfo\Configurable', + 'prices' => 'Price\Collection\Configurable' + ], + ]; + $this->factory = new Factory($this->types, $this->objectManagerMock); } - /** - * @return array - */ - public function priceInfoClassesProvider() + public function createPriceInfoDataProvider() { return [ [ - ['new_type' => 'Magento\Framework\Pricing\PriceInfo\Base'], - 'new_type', - 'Magento\Framework\Pricing\PriceInfoInterface' + 'simple', + 1, + 'Price\PriceInfo\Default', + 'Price\Collection\Default' ], [ - [], - 'unknown', - 'Magento\Framework\Pricing\PriceInfoInterface' + 'configurable', + 2, + 'Price\PriceInfo\Configurable', + 'Price\Collection\Configurable' ] ]; } /** - * @expectedException \InvalidArgumentException + * @param $typeId + * @param $quantity + * @param $infoClass + * @param $prices + * @dataProvider createPriceInfoDataProvider */ - public function testCreateWithException() + public function testCreate($typeId, $quantity, $infoClass, $prices) { - $invalidPriceInfoInterface = 'Magento\Framework\Object'; - $priceInfoFactory = $this->preparePriceInfoFactory($invalidPriceInfoInterface); - $priceInfoFactory->create( - $this->getMock('Magento\Catalog\Model\Product', ['__wakeup'], [], '', false) - ); + $this->saleableItemMock->expects($this->once()) + ->method('getTypeId') + ->will($this->returnValue($typeId)); + $this->saleableItemMock->expects($this->once()) + ->method('getQty') + ->will($this->returnValue($quantity)); + + $this->objectManagerMock->expects($this->exactly(2)) + ->method('create') + ->will($this->returnValueMap( + [ + [ + $prices, + [ + 'saleableItem' => $this->saleableItemMock, + 'quantity' => $quantity + ], + $this->pricesMock + ], + [ + $infoClass, + [ + 'saleableItem' => $this->saleableItemMock, + 'quantity' => $quantity, + 'prices' => $this->pricesMock + ], + $this->priceInfoMock + ] + ] + )); + $this->assertEquals($this->priceInfoMock, $this->factory->create($this->saleableItemMock, [])); } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AbstractAdjustmentTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AbstractAdjustmentTest.php index 8d2319099a3..2ab2ea9ca02 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AbstractAdjustmentTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AbstractAdjustmentTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -29,26 +32,36 @@ namespace Magento\Framework\Pricing\Render; class AbstractAdjustmentTest extends \PHPUnit_Framework_TestCase { /** - * @var Amount + * @var AbstractAdjustment | \PHPUnit_Framework_MockObject_MockObject */ protected $model; /** - * @var \Magento\Framework\Pricing\PriceCurrencyInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Pricing\PriceCurrencyInterface | \PHPUnit_Framework_MockObject_MockObject */ protected $priceCurrency; + /** + * @var array + */ + protected $data; + public function setUp() { $this->priceCurrency = $this->getMock('Magento\Framework\Pricing\PriceCurrencyInterface'); + $this->data = ['argument_one' => 1]; $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); $constructorArgs = $objectManager->getConstructArguments( 'Magento\Framework\Pricing\Render\AbstractAdjustment', - array('priceCurrency' => $this->priceCurrency) + array( + 'priceCurrency' => $this->priceCurrency, + 'data' => $this->data + ) ); $this->model = $this->getMockBuilder('Magento\Framework\Pricing\Render\AbstractAdjustment') ->setConstructorArgs($constructorArgs) + ->setMethods(['getData', 'setData', 'apply']) ->getMockForAbstractClass(); } @@ -67,4 +80,122 @@ class AbstractAdjustmentTest extends \PHPUnit_Framework_TestCase $this->assertEquals($result, $this->model->convertAndFormatCurrency($amount, $includeContainer, $precision)); } + + public function testRender() + { + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false); + $arguments = ['argument_two' => 2]; + $mergedArguments = ['argument_one' => 1, 'argument_two' => 2]; + + $this->model->expects($this->at(0)) + ->method('getData') + ->will($this->returnValue($this->data)); + $this->model->expects($this->at(1)) + ->method('setData') + ->with($mergedArguments); + $this->model->expects($this->at(2)) + ->method('apply'); + $this->model->expects($this->at(3)) + ->method('setData') + ->with($this->data); + + $this->model->render($amountRender, $arguments); + } + + public function testGetAmountRender() + { + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false); + $this->model->expects($this->at(0)) + ->method('getData') + ->will($this->returnValue($this->data)); + $this->model->render($amountRender); + $this->assertEquals($amountRender, $this->model->getAmountRender()); + } + + public function testGetPriceType() + { + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false); + $price = $this->getMockForAbstractClass('Magento\Framework\Pricing\Price\PriceInterface'); + $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + $priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $priceCode = 'regular_price'; + + $amountRender->expects($this->once()) + ->method('getSaleableItem') + ->will($this->returnValue($sealableItem)); + $sealableItem->expects($this->once()) + ->method('getPriceInfo') + ->will($this->returnValue($priceInfo)); + $priceInfo->expects($this->once()) + ->method('getPrice') + ->with($priceCode) + ->will($this->returnValue($price)); + + $this->model->expects($this->at(0)) + ->method('getData') + ->will($this->returnValue($this->data)); + $this->model->render($amountRender); + $this->assertEquals($price, $this->model->getPriceType($priceCode)); + } + + public function testGetPrice() + { + $price = 100; + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false); + $amountRender->expects($this->once()) + ->method('getPrice') + ->with() + ->will($this->returnValue($price)); + + $this->model->expects($this->at(0)) + ->method('getData') + ->will($this->returnValue($this->data)); + $this->model->render($amountRender); + $this->assertEquals($price, $this->model->getPrice()); + } + + public function testGetSealableItem() + { + $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false); + $amountRender->expects($this->once()) + ->method('getSaleableItem') + ->with() + ->will($this->returnValue($sealableItem)); + + $this->model->expects($this->at(0)) + ->method('getData') + ->will($this->returnValue($this->data)); + $this->model->render($amountRender); + $this->assertEquals($sealableItem, $this->model->getSaleableItem()); + } + + public function testGetAdjustment() + { + $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false); + $adjustment = $this->getMockForAbstractClass('Magento\Framework\Pricing\Adjustment\AdjustmentInterface'); + $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + $priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $adjustmentCode = 'tax'; + + $amountRender->expects($this->once()) + ->method('getSaleableItem') + ->will($this->returnValue($sealableItem)); + $sealableItem->expects($this->once()) + ->method('getPriceInfo') + ->will($this->returnValue($priceInfo)); + $priceInfo->expects($this->once()) + ->method('getAdjustment') + ->with($adjustmentCode) + ->will($this->returnValue($adjustment)); + + $this->model->expects($this->at(0)) + ->method('getData') + ->will($this->returnValue($this->data)); + $this->model->expects($this->once()) + ->method('getAdjustmentCode') + ->will($this->returnValue($adjustmentCode)); + $this->model->render($amountRender); + $this->assertEquals($adjustment, $this->model->getAdjustment()); + } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AmountTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AmountTest.php index 949c0c05588..fc6ac2d63ee 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AmountTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/AmountTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -56,6 +59,11 @@ class AmountTest extends \PHPUnit_Framework_TestCase */ protected $saleableItemMock; + /** + * @var \Magento\Framework\Pricing\Amount\AmountInterface | \PHPUnit_Framework_MockObject_MockObject + */ + protected $amount; + /** * @var PriceInterface|\PHPUnit_Framework_MockObject_MockObject */ @@ -87,6 +95,9 @@ class AmountTest extends \PHPUnit_Framework_TestCase ); $this->layout = $this->getMock('Magento\Framework\View\Layout', [], [], '', false); + $this->amount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $this->saleableItemMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + $this->priceMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Price\PriceInterface'); $eventManager = $this->getMock('Magento\Framework\Event\ManagerStub', [], [], '', false); $config = $this->getMock('Magento\Store\Model\Store\Config', [], [], '', false); @@ -112,7 +123,10 @@ class AmountTest extends \PHPUnit_Framework_TestCase [ 'context' => $context, 'priceCurrency' => $this->priceCurrency, - 'rendererPool' => $this->rendererPool + 'rendererPool' => $this->rendererPool, + 'amount' => $this->amount, + 'saleableItem' => $this->saleableItemMock, + 'price' => $this->priceMock ] ); } @@ -133,16 +147,116 @@ class AmountTest extends \PHPUnit_Framework_TestCase $this->assertEquals($result, $this->model->convertAndFormatCurrency($amount, $includeContainer, $precision)); } + /** + * Test case for getAdjustmentRenders method through toHtml() + */ + public function testToHtmlSkipAdjustments() + { + $this->model->setData('skip_adjustments', true); + $this->rendererPool->expects($this->never()) + ->method('getAdjustmentRenders'); + + $this->model->toHtml(); + } + /** * Test case for getAdjustmentRenders method through toHtml() */ public function testToHtmlGetAdjustmentRenders() { - $adjustmentRender = []; + $data = ['key1' => 'data1', 'css_classes' => 'class1 class2']; + $expectedData = [ + 'key1' => 'data1', + 'css_classes' => 'class1 class2', + 'module_name' => null, + 'adjustment_css_classes' => 'class1 class2 render1 render2' + ]; + + $this->model->setData($data); + + $adjustmentRender1 = $this->getAdjustmentRenderMock($expectedData); + $adjustmentRender2 = $this->getAdjustmentRenderMock($expectedData); + $adjustmentRenders = ['render1' => $adjustmentRender1, 'render2' => $adjustmentRender2]; + $this->rendererPool->expects($this->once()) + ->method('getAdjustmentRenders') + ->will($this->returnValue($adjustmentRenders)); + + $this->model->toHtml(); + } + + public function testGetDisplayValueExiting() + { + $displayValue = 5.99; + $this->model->setDisplayValue($displayValue); + $this->assertEquals($displayValue, $this->model->getDisplayValue()); + } + + public function testGetDisplayValue() + { + $amountValue = 100.99; + $this->amount->expects($this->once()) + ->method('getValue') + ->will($this->returnValue($amountValue)); + $this->assertEquals($amountValue, $this->model->getDisplayValue()); + } + + public function testGetAmount() + { + $this->assertEquals($this->amount, $this->model->getAmount()); + } + + public function testGetSealableItem() + { + $this->assertEquals($this->saleableItemMock, $this->model->getSaleableItem()); + } + + public function testGetPrice() + { + $this->assertEquals($this->priceMock, $this->model->getPrice()); + } + + public function testAdjustmentsHtml() + { + $adjustmentHtml1 = 'adjustment_1_html'; + $adjustmentHtml2 = 'adjustment_2_html'; + $data = ['key1' => 'data1', 'css_classes' => 'class1 class2']; + $expectedData = [ + 'key1' => 'data1', + 'css_classes' => 'class1 class2', + 'module_name' => null, + 'adjustment_css_classes' => 'class1 class2 render1 render2' + ]; + + $this->model->setData($data); + + $this->assertFalse($this->model->hasAdjustmentsHtml()); + + $adjustmentRender1 = $this->getAdjustmentRenderMock($expectedData, $adjustmentHtml1, 'adjustment_code1'); + $adjustmentRender2 = $this->getAdjustmentRenderMock($expectedData, $adjustmentHtml2, 'adjustment_code2'); + $adjustmentRenders = ['render1' => $adjustmentRender1, 'render2' => $adjustmentRender2]; $this->rendererPool->expects($this->once()) ->method('getAdjustmentRenders') - ->will($this->returnValue($adjustmentRender)); + ->will($this->returnValue($adjustmentRenders)); $this->model->toHtml(); + + $this->assertTrue($this->model->hasAdjustmentsHtml()); + + $this->assertEquals($adjustmentHtml1 . $adjustmentHtml2, $this->model->getAdjustmentsHtml()); + } + + protected function getAdjustmentRenderMock($data = [], $html = '', $code = 'adjustment_code') + { + $adjustmentRender = $this->getMockForAbstractClass( + 'Magento\Framework\Pricing\Render\AdjustmentRenderInterface' + ); + $adjustmentRender->expects($this->once()) + ->method('render') + ->with($this->model, $data) + ->will($this->returnValue($html)); + $adjustmentRender->expects($this->any()) + ->method('getAdjustmentCode') + ->will($this->returnValue($code)); + return $adjustmentRender; } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/LayoutTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/LayoutTest.php index f209c01f159..4174071558f 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/LayoutTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/LayoutTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/PriceBoxTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/PriceBoxTest.php index 0a5371a40a8..b7542075753 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/PriceBoxTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/PriceBoxTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -103,15 +106,15 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase /** * @param array $data - * @param string $priceType + * @param string $priceCode * @param array $cssClasses * @dataProvider toHtmlDataProvider */ - public function testToHtml($data, $priceType, $cssClasses) + public function testToHtml($data, $priceCode, $cssClasses) { $this->price->expects($this->once()) - ->method('getPriceType') - ->will($this->returnValue($priceType)); + ->method('getPriceCode') + ->will($this->returnValue($priceCode)); $priceBox = $this->objectManager->getObject('Magento\Framework\Pricing\Render\PriceBox', array( 'context' => $this->context, @@ -129,12 +132,12 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase return array( array( 'data' => [], - 'price_type' => 'test_price', + 'price_code' => 'test_price', 'css_classes' => 'price-test_price' ), array( 'data' => ['css_classes' => 'some_css_class'], - 'price_type' => 'test_price', + 'price_code' => 'test_price', 'css_classes' => 'some_css_class price-test_price' )); } @@ -152,21 +155,20 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase public function testGetPriceType() { $priceCode = 'test_price'; - $quantity = 1.; $price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface'); $priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfoInterface'); $priceInfo->expects($this->once()) ->method('getPrice') - ->with($priceCode, $quantity) + ->with($priceCode) ->will($this->returnValue($price)); $this->saleable->expects($this->once()) ->method('getPriceInfo') ->will($this->returnValue($priceInfo)); - $this->assertEquals($price, $this->model->getPriceType($priceCode, $quantity)); + $this->assertEquals($price, $this->model->getPriceType($priceCode)); } public function testRenderAmount() @@ -190,4 +192,59 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase $this->assertEquals($resultHtml, $this->model->renderAmount($amount, $arguments)); } + + public function testGetPriceIdHasDataPriceId() + { + $priceId = 'data_price_id'; + $this->model->setData('price_id', $priceId); + $this->assertEquals($priceId, $this->model->getPriceId()); + } + + /** + * @dataProvider getPriceIdProvider + * @param string $prefix + * @param string $suffix + * @param string $defaultPrefix + * @param string $defaultSuffix + */ + public function testGetPriceId($prefix, $suffix, $defaultPrefix, $defaultSuffix) + { + $priceId = 'price_id'; + $this->saleable->expects($this->once()) + ->method('getId') + ->will($this->returnValue($priceId)); + + if (!empty($prefix)) { + $this->model->setData('price_id_prefix', $prefix); + $expectedPriceId = $prefix . $priceId; + } else { + $expectedPriceId = $defaultPrefix . $priceId; + } + if (!empty($suffix)) { + $this->model->setData('price_id_suffix', $suffix); + $expectedPriceId = $expectedPriceId . $suffix; + } else { + $expectedPriceId = $expectedPriceId . $defaultSuffix; + } + + $this->assertEquals($expectedPriceId, $this->model->getPriceId($defaultPrefix, $defaultSuffix)); + } + + public function getPriceIdProvider() + { + return [ + ['prefix', 'suffix', 'default_prefix', 'default_suffix'], + ['prefix', 'suffix', 'default_prefix', ''], + ['prefix', 'suffix', '', 'default_suffix'], + ['prefix', '', 'default_prefix', 'default_suffix'], + ['', 'suffix', 'default_prefix', 'default_suffix'], + ['', '', 'default_prefix', 'default_suffix'], + ['prefix', 'suffix', '', ''] + ]; + } + + public function testGetRendererPool() + { + $this->assertEquals($this->rendererPool, $this->model->getRendererPool()); + } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/RendererPoolTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/RendererPoolTest.php index e066f510368..5d584727f49 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/RendererPoolTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/Render/RendererPoolTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -273,7 +276,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($type)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $testedClass = $this->createTestedEntity($data); @@ -311,7 +314,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($type)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\Template\Context') @@ -366,7 +369,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($type)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $blockMock = $this->getMockBuilder('Magento\Framework\Pricing\Render\Amount') @@ -407,7 +410,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($typeId)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $code = 'test_code'; @@ -433,7 +436,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($typeId)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $code = 'test_code'; @@ -482,7 +485,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($typeId)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $blockMock = $this->getMockBuilder('Magento\Framework\View\Element\Template') @@ -535,7 +538,7 @@ class RendererPoolTest extends \PHPUnit_Framework_TestCase ->method('getTypeId') ->will($this->returnValue($type)); $this->priceMock->expects($this->once()) - ->method('getPriceType') + ->method('getPriceCode') ->will($this->returnValue($priceCode)); $blockMock = $this->getMockBuilder('Magento\Framework\Pricing\Render\Amount') diff --git a/dev/tests/unit/testsuite/Magento/Framework/Pricing/RenderTest.php b/dev/tests/unit/testsuite/Magento/Framework/Pricing/RenderTest.php index 5bcae14ab0b..49f234f22ef 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Pricing/RenderTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Pricing/RenderTest.php @@ -18,6 +18,9 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing + * @subpackage unit_tests * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -218,4 +221,18 @@ class RenderTest extends \PHPUnit_Framework_TestCase $result = $this->model->renderAmount($this->amount, $this->price, $this->saleableItem, $arguments); $this->assertEquals($expectedResult, $result); } + + /** + * @expectedException \RuntimeException + * @expectedExceptionMessage Wrong Price Rendering layout configuration. Factory block is missed + */ + public function testAmountRenderNoRenderPool() + { + $this->priceLayout->expects($this->once()) + ->method('getBlock') + ->with('render.product.prices') + ->will($this->returnValue(false)); + + $this->model->renderAmount($this->amount, $this->price, $this->saleableItem); + } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/ProfilerTest.php b/dev/tests/unit/testsuite/Magento/Framework/ProfilerTest.php index c3f65d50af3..e965ede1037 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/ProfilerTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/ProfilerTest.php @@ -217,7 +217,7 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase public function testClearTimer() { $driver = $this->_getDriverMock(); - $driver->expects($this->once())->method('clear')->with('timer'); + $driver->expects($this->at(0))->method('clear')->with('timer'); \Magento\Framework\Profiler::add($driver); \Magento\Framework\Profiler::clear('timer'); diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Design/Fallback/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Design/Fallback/FactoryTest.php index e4a76de7c7c..6d82b49df06 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Design/Fallback/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Design/Fallback/FactoryTest.php @@ -161,7 +161,8 @@ class FactoryTest extends \PHPUnit_Framework_TestCase array( '/area/current_theme_path/namespace_module', '/area/parent_theme_path/namespace_module', - '/namespace/module/view/area' + '/namespace/module/view/area', + '/namespace/module/view/base' ) ), 'non-modular' => array( @@ -214,7 +215,8 @@ class FactoryTest extends \PHPUnit_Framework_TestCase '/area/parent_theme_path/i18n/en_US/namespace_module', '/area/parent_theme_path/namespace_module', '/namespace/module/view/area/i18n/en_US', - '/namespace/module/view/area' + '/namespace/module/view/area', + '/namespace/module/view/base' ) ), 'modular non-localized' => array( @@ -222,7 +224,8 @@ class FactoryTest extends \PHPUnit_Framework_TestCase array( '/area/current_theme_path/namespace_module', '/area/parent_theme_path/namespace_module', - '/namespace/module/view/area' + '/namespace/module/view/area', + '/namespace/module/view/base' ) ), 'non-modular localized' => array( diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Design/FileResolution/Strategy/Fallback/CachingProxyTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Design/FileResolution/Strategy/Fallback/CachingProxyTest.php index b3a532f370f..372c5b1c378 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Design/FileResolution/Strategy/Fallback/CachingProxyTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Design/FileResolution/Strategy/Fallback/CachingProxyTest.php @@ -87,7 +87,7 @@ class CachingProxyTest extends \PHPUnit_Framework_TestCase false ); - $this->themeModel = \PHPUnit_Framework_MockObject_Generator::getMock( + $this->themeModel = $this->getMock( 'Magento\Core\Model\Theme', array(), array(), @@ -206,9 +206,9 @@ class CachingProxyTest extends \PHPUnit_Framework_TestCase * * @return array */ - public static function proxyMethodsDataProvider() + public function proxyMethodsDataProvider() { - $themeModel = \PHPUnit_Framework_MockObject_Generator::getMock( + $themeModel = $this->getMock( 'Magento\Core\Model\Theme', array(), array(), diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/FactoryTest.php index 873f336384e..ce8e6177f68 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/FactoryTest.php @@ -45,16 +45,21 @@ class FactoryTest extends \PHPUnit_Framework_TestCase { $theme = $this->getMockForAbstractClass('Magento\Framework\View\Design\ThemeInterface'); $file = new \Magento\Framework\View\Layout\File(__FILE__, 'Fixture_Module', $theme); - $this->_objectManager->expects( - $this->once() - )->method( - 'create' - )->with( - 'Magento\Framework\View\Layout\File', - $this->identicalTo(array('filename' => __FILE__, 'module' => 'Fixture_Module', 'theme' => $theme)) - )->will( - $this->returnValue($file) - ); - $this->assertSame($file, $this->_model->create(__FILE__, 'Fixture_Module', $theme)); + $isBase = true; + $this->_objectManager->expects($this->once()) + ->method('create') + ->with( + 'Magento\Framework\View\Layout\File', + $this->identicalTo( + array( + 'filename' => __FILE__, + 'module' => 'Fixture_Module', + 'theme' => $theme, + 'isBase' => $isBase + ) + ) + ) + ->will($this->returnValue($file)); + $this->assertSame($file, $this->_model->create(__FILE__, 'Fixture_Module', $theme, $isBase)); } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/BaseTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/BaseTest.php index 070735b2fdc..2857d02078d 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/BaseTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/BaseTest.php @@ -21,107 +21,111 @@ * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Framework\View\Layout\File\Source; -use Magento\Framework\Filesystem\Directory\Read; -use Magento\Framework\View\Layout\File\Factory; +namespace Magento\Framework\View\Layout\File\Source; +/** + * Class for testing Magento\View\Layout\File\Source\Base + */ class BaseTest extends \PHPUnit_Framework_TestCase { /** - * @var Base + * @var \Magento\Framework\View\Layout\File\Source\Base|\PHPUnit_Framework_MockObject_MockObject */ - private $model; + protected $class; /** - * @var Read | \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Filesystem\Directory\ReadInterface|\PHPUnit_Framework_MockObject_MockObject */ - private $directory; + protected $modulesDirectoryMock; /** - * @var Factory | \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\View\Layout\File\Factory|\PHPUnit_Framework_MockObject_MockObject */ - private $fileFactory; + protected $fileFactoryMock; - protected function setUp() + /** + * Set up mocks + */ + public function setUp() { - $this->directory = $this->getMock('Magento\Framework\Filesystem\Directory\Read', array(), array(), '', false); - $filesystem = $this->getMock( + $filesystemMock = $this->getMock( 'Magento\Framework\App\Filesystem', - array('getDirectoryRead', '__wakeup'), - array(), + ['getDirectoryRead', 'getAbsolutePath'], + [], '', false ); - $filesystem->expects( - $this->once() - )->method( - 'getDirectoryRead' - )->with( - \Magento\Framework\App\Filesystem::MODULES_DIR - )->will( - $this->returnValue($this->directory) + $this->fileFactoryMock = $this->getMock('Magento\Framework\View\Layout\File\Factory', [], [], '', false); + $this->modulesDirectoryMock = $this->getMock( + 'Magento\Framework\Filesystem\Directory\ReadInterface', + [], + [], + '', + false ); - $this->fileFactory = $this->getMock('Magento\Framework\View\Layout\File\Factory', array(), array(), '', false); - $this->model = new Base($filesystem, $this->fileFactory); + $filesystemMock->expects($this->once()) + ->method('getDirectoryRead') + ->will($this->returnValue($this->modulesDirectoryMock)); + + $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->class = $objectManager->getObject( + 'Magento\Framework\View\Layout\File\Source\Base', + [ + 'filesystem' => $filesystemMock, + 'fileFactory' => $this->fileFactoryMock + ] + ); } /** - * @param array $files - * @param string $filePath - * - * @dataProvider dataProvider + * Test for method getFiles */ - public function testGetFiles($files, $filePath) + public function testGetFiles() { - $theme = $this->getMockForAbstractClass('Magento\Framework\View\Design\ThemeInterface'); - $theme->expects($this->once())->method('getArea')->will($this->returnValue('area')); + $fileName = 'somefile.xml'; + $fileRightPath = '/namespace/module/view/base/layout/' . $fileName; + $themeFileRightPath = '/namespace/module/view/area_code/layout/' . $fileName; + $fileWrongPath = '/namespace/module/view/' . $fileName; + $themeFileWrongPath = '/namespace/module/view/area_code/' . $fileName; + $areaCode = 'area_code'; + $sharedFiles = [ + $fileRightPath, + $fileWrongPath, + ]; + $themeFiles = [ + $themeFileRightPath, + $themeFileWrongPath, + ]; + $themeMock = $this->getMock('Magento\Framework\View\Design\ThemeInterface', [], [], '', false); - $handlePath = 'code/Module/%s/view/area/layout/%s.xml'; - $returnKeys = array(); - foreach ($files as $file) { - $returnKeys[] = sprintf($handlePath, $file['module'], $file['handle']); - } + $this->modulesDirectoryMock->expects($this->any()) + ->method('search') + ->will($this->returnValueMap( + [ + ["*/*/view/base/layout/*.xml", null, $sharedFiles], + ["*/*/view/$areaCode/layout/*.xml", null, $themeFiles], + ] + )); + $this->modulesDirectoryMock->expects($this->any()) + ->method('getAbsolutePath') + ->will($this->returnArgument(0)); + $themeMock->expects($this->once()) + ->method('getArea') + ->will($this->returnValue($areaCode)); - $this->directory->expects($this->once())->method('search')->will($this->returnValue($returnKeys)); - $this->directory->expects($this->any())->method('getAbsolutePath')->will($this->returnArgument(0)); + $this->fileFactoryMock->expects($this->at(0)) + ->method('create') + ->with($this->equalTo($fileRightPath), $this->equalTo('namespace_module')) + ->will($this->returnValue($fileRightPath)); + $this->fileFactoryMock->expects($this->at(1)) + ->method('create') + ->with($this->equalTo($themeFileRightPath), $this->equalTo('namespace_module')) + ->will($this->returnValue($themeFileRightPath)); - $checkResult = array(); - foreach ($files as $key => $file) { - $moduleName = 'Module_' . $file['module']; - $checkResult[$key] = new \Magento\Framework\View\Layout\File($file['handle'] . '.xml', $moduleName, $theme); - - $this->fileFactory->expects( - $this->at($key) - )->method( - 'create' - )->with( - sprintf($handlePath, $file['module'], $file['handle']), - $moduleName - )->will( - $this->returnValue($checkResult[$key]) - ); - } - - $this->assertSame($checkResult, $this->model->getFiles($theme, $filePath)); - } - - /** - * @return array - */ - public function dataProvider() - { - return array( - array( - array( - array('handle' => '1', 'module' => 'One'), - array('handle' => '2', 'module' => 'One'), - array('handle' => '3', 'module' => 'Two') - ), - '*' - ), - array(array(array('handle' => 'preset/4', 'module' => 'Four')), 'preset/4') - ); + $expected = [$fileRightPath, $themeFileRightPath]; + $result = $this->class->getFiles($themeMock); + $this->assertEquals($expected, $result); } } diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/BaseTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/BaseTest.php index da3be7dd3ed..f1bb3872e36 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/BaseTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/BaseTest.php @@ -89,16 +89,10 @@ class BaseTest extends \PHPUnit_Framework_TestCase $checkResult = array(); foreach ($files as $key => $file) { $checkResult[$key] = new \Magento\Framework\View\Layout\File($file['handle'] . '.xml', $file['module']); - $this->fileFactory->expects( - $this->at($key) - )->method( - 'create' - )->with( - sprintf($handlePath, $file['module'], $file['handle']), - $file['module'] - )->will( - $this->returnValue($checkResult[$key]) - ); + $this->fileFactory->expects($this->at($key)) + ->method('create') + ->with(sprintf($handlePath, $file['module'], $file['handle']), $file['module']) + ->will($this->returnValue($checkResult[$key])); } $this->assertSame($checkResult, $this->model->getFiles($theme, $filePath)); diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/ThemeTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/ThemeTest.php index e43c5e86708..660b29e3007 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/ThemeTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/File/Source/Override/ThemeTest.php @@ -86,18 +86,16 @@ class ThemeTest extends \PHPUnit_Framework_TestCase $fileOne = new \Magento\Framework\View\Layout\File('1.xml', 'Module_One', $parentTheme); $fileTwo = new \Magento\Framework\View\Layout\File('2.xml', 'Module_Two', $grandparentTheme); - $this->_fileFactory->expects( - $this->exactly(2) - )->method( - 'create' - )->will( - $this->returnValueMap( - array( - array($filePathOne, 'Module_One', $parentTheme, $fileOne), - array($filePathTwo, 'Module_Two', $grandparentTheme, $fileTwo) + $this->_fileFactory->expects($this->exactly(2)) + ->method('create') + ->will( + $this->returnValueMap( + array( + array($filePathOne, 'Module_One', $parentTheme, false, $fileOne), + array($filePathTwo, 'Module_Two', $grandparentTheme, false, $fileTwo) + ) ) - ) - ); + ); $this->assertSame(array($fileOne, $fileTwo), $this->_model->getFiles($theme)); } diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/FileTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/FileTest.php index 008f9a4f389..88ff925e863 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/Layout/FileTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/Layout/FileTest.php @@ -38,7 +38,7 @@ class FileTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_theme = $this->getMockForAbstractClass('Magento\Framework\View\Design\ThemeInterface'); - $this->_model = new \Magento\Framework\View\Layout\File(__FILE__, 'Fixture_TestModule', $this->_theme); + $this->_model = new \Magento\Framework\View\Layout\File(__FILE__, 'Fixture_TestModule', $this->_theme, true); } public function testGetFilename() @@ -65,7 +65,7 @@ class FileTest extends \PHPUnit_Framework_TestCase { $this->_theme->expects($this->once())->method('getFullPath')->will($this->returnValue('theme_name')); $this->assertSame( - 'theme:theme_name|module:Fixture_TestModule|file:FileTest.php', + 'base|theme:theme_name|module:Fixture_TestModule|file:FileTest.php', $this->_model->getFileIdentifier() ); } diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/UrlTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/UrlTest.php index afab68b1f23..94d43aa6517 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/View/UrlTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/View/UrlTest.php @@ -119,9 +119,9 @@ class UrlTest extends \PHPUnit_Framework_TestCase /** * @return array */ - public static function getViewFileUrlProductionModeDataProvider() + public function getViewFileUrlProductionModeDataProvider() { - $usualTheme = \PHPUnit_Framework_MockObject_Generator::getMock( + $usualTheme = $this->getMock( 'Magento\Framework\View\Design\ThemeInterface', array(), array(), diff --git a/dev/tests/unit/testsuite/Magento/GoogleAdwords/Model/Config/Source/LanguageTest.php b/dev/tests/unit/testsuite/Magento/GoogleAdwords/Model/Config/Source/LanguageTest.php deleted file mode 100644 index fb03364a428..00000000000 --- a/dev/tests/unit/testsuite/Magento/GoogleAdwords/Model/Config/Source/LanguageTest.php +++ /dev/null @@ -1,190 +0,0 @@ -<?php -namespace Magento\GoogleAdwords\Model\Config\Source; - -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - * @SuppressWarnings(PHPMD.LongVariable) - */ -class LanguageTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_helperMock; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_localeMock; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_localeModelMock; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_uppercaseFilterMock; - - /** - * @var \Magento\GoogleAdwords\Model\Config\Source\Language - */ - protected $_model; - - protected function setUp() - { - $this->_helperMock = $this->getMock('Magento\GoogleAdwords\Helper\Data', array(), array(), '', false); - $this->_localeMock = $this->getMock('Zend_Locale', array(), array(), '', false); - $this->_localeModelMock = $this->getMock( - 'Magento\Framework\Locale\ResolverInterface', - array(), - array(), - '', - false - ); - $this->_localeModelMock->expects( - $this->once() - )->method( - 'getLocale' - )->will( - $this->returnValue($this->_localeMock) - ); - $this->_uppercaseFilterMock = $this->getMock( - 'Magento\GoogleAdwords\Model\Filter\UppercaseTitle', - array(), - array(), - '', - false - ); - - $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); - $this->_model = $objectManager->getObject( - 'Magento\GoogleAdwords\Model\Config\Source\Language', - array( - 'localeResolver' => $this->_localeModelMock, - 'helper' => $this->_helperMock, - 'uppercaseFilter' => $this->_uppercaseFilterMock - ) - ); - } - - public function testToOptionArray() - { - $languageCodes = array('languageCode1', 'languageCode2'); - $langToLocalesMap = array('languageCode1' => 'localeCode1', 'languageCode2' => 'localeCode2'); - $expectedLanguages = array( - array( - 'value' => 'languageCode1', - 'label' => 'TranslationForSpecifiedLanguage1 / translationForDefaultLanguage1 (languageCode1)' - ), - array( - 'value' => 'languageCode2', - 'label' => 'TranslationForSpecifiedLanguage2 / translationForDefaultLanguage2 (languageCode2)' - ) - ); - - $this->_helperMock->expects( - $this->once() - )->method( - 'getLanguageCodes' - )->will( - $this->returnValue($languageCodes) - ); - $this->_helperMock->expects($this->atLeastOnce())->method('convertLanguageCodeToLocaleCode')->will( - $this->returnCallback( - function ($languageCode) use ($langToLocalesMap) { - return $langToLocalesMap[$languageCode]; - } - ) - ); - - $localeMock = $this->_localeMock; - $localeMock::staticExpects( - $this->at(0) - )->method( - 'getTranslation' - )->with( - 'localeCode1', - 'language', - 'languageCode1' - )->will( - $this->returnValue('translationForSpecifiedLanguage1') - ); - - $localeMock::staticExpects( - $this->at(1) - )->method( - 'getTranslation' - )->with( - 'localeCode1', - 'language' - )->will( - $this->returnValue('translationForDefaultLanguage1') - ); - - $localeMock::staticExpects( - $this->at(2) - )->method( - 'getTranslation' - )->with( - 'localeCode2', - 'language', - 'languageCode2' - )->will( - $this->returnValue('translationForSpecifiedLanguage2') - ); - - $localeMock::staticExpects( - $this->at(3) - )->method( - 'getTranslation' - )->with( - 'localeCode2', - 'language' - )->will( - $this->returnValue('translationForDefaultLanguage2') - ); - - $this->_uppercaseFilterMock->expects( - $this->at(0) - )->method( - 'filter' - )->with( - 'translationForSpecifiedLanguage1' - )->will( - $this->returnValue('TranslationForSpecifiedLanguage1') - ); - - $this->_uppercaseFilterMock->expects( - $this->at(1) - )->method( - 'filter' - )->with( - 'translationForSpecifiedLanguage2' - )->will( - $this->returnValue('TranslationForSpecifiedLanguage2') - ); - - $this->assertEquals($expectedLanguages, $this->_model->toOptionArray()); - } -} diff --git a/dev/tests/unit/testsuite/Magento/GroupedProduct/Block/Product/View/Type/GroupedTest.php b/dev/tests/unit/testsuite/Magento/GroupedProduct/Block/Product/View/Type/GroupedTest.php index 34f79e375a1..9beb7e0ff88 100644 --- a/dev/tests/unit/testsuite/Magento/GroupedProduct/Block/Product/View/Type/GroupedTest.php +++ b/dev/tests/unit/testsuite/Magento/GroupedProduct/Block/Product/View/Type/GroupedTest.php @@ -45,16 +45,6 @@ class GroupedTest extends \PHPUnit_Framework_TestCase */ protected $configuredValueMock; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $blockMock; - - /** - * @var string - */ - protected $defaultTemplate = 'product/view/tierprices.phtml'; - protected function setUp() { $helper = new \Magento\TestFramework\Helper\ObjectManager($this); @@ -88,23 +78,11 @@ class GroupedTest extends \PHPUnit_Framework_TestCase '', false ); - // mocks for getTierPriceHtml method - $methods = array( - 'setTemplate', - 'setProduct', - 'setListClass', - 'setShowDetailedPrice', - 'setCanDisplayQty', - 'toHtml' - ); - $this->blockMock = $this->getMock('Magento\Catalog\Block\Product\Price', $methods, array(), '', false); $layout = $this->getMock('Magento\Framework\View\LayoutInterface'); - $layout->expects($this->any())->method('createBlock')->will($this->returnValue($this->blockMock)); $this->groupedView = $helper->getObject( 'Magento\GroupedProduct\Block\Product\View\Type\Grouped', array( - 'data' => array('product' => $this->productMock, 'tier_price_template' => $this->defaultTemplate), - 'priceBlockTypes' => array('product_id' => array('block' => $this->blockMock)), + 'data' => array('product' => $this->productMock), 'layout' => $layout ) ); @@ -184,64 +162,4 @@ class GroupedTest extends \PHPUnit_Framework_TestCase $this->groupedView->setPreconfiguredValue(); } - /** - * @param null|PHPUnit_Framework_MockObject_MockObject $price - * @dataProvider getTierPriceHtmlDataProvider - */ - public function testGetTierPriceHtml($price) - { - $this->productMock->expects($this->any())->method('getTypeId')->will($this->returnValue('product_id')); - $this->blockMock->expects( - $this->once() - )->method( - 'setTemplate' - )->with( - $this->defaultTemplate - )->will( - $this->returnValue($this->blockMock) - ); - $this->blockMock->expects( - $this->once() - )->method( - 'setProduct' - )->with( - $this->productMock - )->will( - $this->returnValue($this->blockMock) - ); - $this->blockMock->expects( - $this->once() - )->method( - 'setListClass' - )->with( - 'tier prices grouped items' - )->will( - $this->returnValue($this->blockMock) - ); - $this->blockMock->expects( - $this->once() - )->method( - 'setShowDetailedPrice' - )->with( - false - )->will( - $this->returnValue($this->blockMock) - ); - $this->blockMock->expects( - $this->once() - )->method( - 'setCanDisplayQty' - )->with( - false - )->will( - $this->returnValue($this->blockMock) - ); - $this->blockMock->expects($this->once())->method('toHtml')->will($this->returnValue('expected')); - $this->assertEquals('expected', $this->groupedView->getTierPriceHtml($price)); - } - - public function getTierPriceHtmlDataProvider() - { - return array('if_use_default_value_for_method' => array(null), 'if_pice_exist' => array($this->productMock)); - } } diff --git a/dev/tests/unit/testsuite/Magento/GroupedProduct/Pricing/Price/FinalPriceTest.php b/dev/tests/unit/testsuite/Magento/GroupedProduct/Pricing/Price/FinalPriceTest.php index a0d8f021457..59e72c8710e 100644 --- a/dev/tests/unit/testsuite/Magento/GroupedProduct/Pricing/Price/FinalPriceTest.php +++ b/dev/tests/unit/testsuite/Magento/GroupedProduct/Pricing/Price/FinalPriceTest.php @@ -34,93 +34,101 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase */ protected $finalPrice; - /** - * @var \Magento\GroupedProduct\Model\Product\Type\Grouped|\PHPUnit_Framework_MockObject_MockObject - */ - protected $typeInstanceMock; - /** * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */ - protected $salableItemMock; + protected $saleableItemMock; /** * @var \Magento\Framework\Pricing\Adjustment\Calculator|\PHPUnit_Framework_MockObject_MockObject */ protected $calculatorMock; - /** - * @var \Magento\Framework\Pricing\PriceInfo\Base|\PHPUnit_Framework_MockObject_MockObject - */ - protected $priceInfoMock; - - /** - * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject - */ - protected $productMock; - - /** - * @var \Magento\Framework\Pricing\Amount\AmountInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $amountMock; - - /** - * @var \Magento\Catalog\Pricing\Price\FinalPrice|\PHPUnit_Framework_MockObject_MockObject - */ - protected $priceTypeMock; - /** * Setup */ public function setUp() { - $this->salableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); - $this->productMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); - $this->amountMock = $this->getMock('Magento\Framework\Pricing\Amount\Base', [], [], '', false); + $this->saleableItemMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); $this->calculatorMock = $this->getMock('Magento\Framework\Pricing\Adjustment\Calculator', [], [], '', false); - $this->priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); - $this->typeInstanceMock = $this->getMock('Magento\GroupedProduct\Model\Product\Type\Grouped', - [], [], '', false); - $this->priceTypeMock = $this->getMock('Magento\Catalog\Pricing\Price\FinalPrice', [], [], '', false); $this->finalPrice = new \Magento\GroupedProduct\Pricing\Price\FinalPrice ( - $this->salableItemMock, + $this->saleableItemMock, + null, $this->calculatorMock ); } public function testGetMinProduct() { - $valueMap = [ - [90], - [70] - ]; - $this->salableItemMock->expects($this->once()) + $product1 = $this->getProductMock(10); + $product2 = $this->getProductMock(20); + + $typeInstanceMock = $this->getMock( + 'Magento\GroupedProduct\Model\Product\Type\Grouped', + [], + [], + '', + false + ); + $typeInstanceMock->expects($this->once()) + ->method('getAssociatedProducts') + ->with($this->equalTo($this->saleableItemMock)) + ->will($this->returnValue([$product1, $product2])); + + $this->saleableItemMock->expects($this->once()) ->method('getTypeInstance') - ->will($this->returnValue($this->typeInstanceMock)); + ->will($this->returnValue($typeInstanceMock)); + + $this->assertEquals($product1, $this->finalPrice->getMinProduct()); + } - $this->typeInstanceMock->expects($this->once()) + public function testGetValue() + { + $product1 = $this->getProductMock(10); + $product2 = $this->getProductMock(20); + + $typeInstanceMock = $this->getMock( + 'Magento\GroupedProduct\Model\Product\Type\Grouped', + [], + [], + '', + false + ); + $typeInstanceMock->expects($this->once()) ->method('getAssociatedProducts') - ->with($this->equalTo($this->salableItemMock)) - ->will($this->returnValue([$this->productMock, $this->productMock])); + ->with($this->equalTo($this->saleableItemMock)) + ->will($this->returnValue([$product1, $product2])); - $this->productMock->expects($this->exactly(2)) - ->method('setQty') - ->with($this->equalTo(\Magento\Framework\Pricing\PriceInfoInterface::PRODUCT_QUANTITY_DEFAULT)); + $this->saleableItemMock->expects($this->once()) + ->method('getTypeInstance') + ->will($this->returnValue($typeInstanceMock)); - $this->productMock->expects($this->exactly(2)) - ->method('getPriceInfo') - ->will($this->returnValue($this->priceInfoMock)); + $this->assertEquals(10, $this->finalPrice->getValue()); + } - $this->priceInfoMock->expects($this->exactly(2)) + protected function getProductMock($price) + { + $priceTypeMock = $this->getMock('Magento\Catalog\Pricing\Price\FinalPrice', [], [], '', false); + $priceTypeMock->expects($this->any()) + ->method('getValue') + ->will($this->returnValue($price)); + + $priceInfoMock = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false); + $priceInfoMock->expects($this->any()) ->method('getPrice') - ->with($this->equalTo(\Magento\Catalog\Pricing\Price\FinalPriceInterface::PRICE_TYPE_FINAL)) - ->will($this->returnValue($this->priceTypeMock)); + ->with($this->equalTo(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE)) + ->will($this->returnValue($priceTypeMock)); - $this->priceTypeMock->expects($this->exactly(2)) - ->method('getValue') - ->will($this->returnValueMap($valueMap)); - $this->assertEquals($this->finalPrice->getMinProduct(), $this->productMock); + $productMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false); + $productMock->expects($this->any()) + ->method('setQty') + ->with($this->equalTo(\Magento\Framework\Pricing\PriceInfoInterface::PRODUCT_QUANTITY_DEFAULT)); + $productMock->expects($this->any()) + ->method('getPriceInfo') + ->will($this->returnValue($priceInfoMock)); + + return $productMock; } } diff --git a/dev/tests/unit/testsuite/Magento/PageCache/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/PageCache/Model/ObserverTest.php index ea6301b5cf1..a24398ce6f4 100644 --- a/dev/tests/unit/testsuite/Magento/PageCache/Model/ObserverTest.php +++ b/dev/tests/unit/testsuite/Magento/PageCache/Model/ObserverTest.php @@ -110,7 +110,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase false, true, true, - array('getTtl', 'isScopePrivate', 'getNameInLayout', 'getUrl') + array('getData', 'isScopePrivate', 'getNameInLayout', 'getUrl') ); $this->_transport = new \Magento\Framework\Object(array('output' => 'test output html')); $this->_observerObject = $this->getMock('\Magento\Store\Model\Store', array(), array(), '', false); @@ -158,14 +158,13 @@ class ObserverTest extends \PHPUnit_Framework_TestCase ); if ($varnishIsEnabled) { - $this->_blockMock->setTtl($blockTtl); - $this->_blockMock->expects( - $this->any() - )->method( - 'getUrl' - )->will( - $this->returnValue('page_cache/block/wrapesi/with/handles/and/other/stuff') - ); + $this->_blockMock->expects($this->once()) + ->method('getData') + ->with('ttl') + ->will($this->returnValue($blockTtl)); + $this->_blockMock->expects($this->any()) + ->method('getUrl') + ->will($this->returnValue('page_cache/block/wrapesi/with/handles/and/other/stuff')); } if ($scopeIsPrivate) { $this->_blockMock->expects( diff --git a/dev/tests/unit/testsuite/Magento/Paypal/Model/IpnTest.php b/dev/tests/unit/testsuite/Magento/Paypal/Model/IpnTest.php index 5fd842f57db..4f34b2077d6 100644 --- a/dev/tests/unit/testsuite/Magento/Paypal/Model/IpnTest.php +++ b/dev/tests/unit/testsuite/Magento/Paypal/Model/IpnTest.php @@ -96,6 +96,9 @@ class IpnTest extends \PHPUnit_Framework_TestCase $testMethod = new \ReflectionMethod('Magento\Paypal\Model\Ipn', '_registerPaymentAuthorization'); $testMethod->setAccessible(true); + $this->markTestIncomplete( + 'MAGETWO-23755: "Fatal error: Using $this when not in object context" is observed under PHPUnit4' + ); $testMethod->invoke($this->_ipn); } diff --git a/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/CategoryTest.php b/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/CategoryTest.php new file mode 100644 index 00000000000..4ecf1663791 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/CategoryTest.php @@ -0,0 +1,147 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Rss\Block\Catalog; + +/** + * Test for rendering price html in rss templates + * + * @package Magento\Rss\Block\Catalog + */ +class CategoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Rss\Block\Catalog\Category + */ + protected $block; + + /** + * @var \Magento\Catalog\Helper\Image + */ + protected $imageHelperMock; + + /** + * Set up mock objects for tested class + */ + public function setUp() + { + $templateContextMock = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false); + $this->imageHelperMock = $this->getMock('Magento\Catalog\Helper\Image', [], [], '', false); + $eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false); + $requestMock = $this->getMock('Magento\Framework\App\RequestInterface', [], [], '', false); + + $templateContextMock->expects($this->once()) + ->method('getEventManager') + ->will($this->returnValue($eventManagerMock)); + $templateContextMock->expects($this->once()) + ->method('getRequest') + ->will($this->returnValue($requestMock)); + + $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->block = $objectManager->getObject( + 'Magento\Rss\Block\Catalog\Category', + [ + 'context' => $templateContextMock, + 'imageHelper' => $this->imageHelperMock, + ] + ); + } + + /** + * Test for method addNewItemXmlCallback + */ + public function testAddNewItemXmlCallback() + { + $priceHtmlForTest = '<div class="price">Price is 10 for example</div>'; + $productMock = $this->getMock( + 'Magento\Catalog\Model\Product', + ['getProductUrl', 'getDescription', 'getAllowedInRss', 'getName', '__wakeup'], + [], + '', + false + ); + $rssObjMock = $this->getMock('Magento\Rss\Model\Rss', [], [], '', false); + $layoutMock = $this->getMockForAbstractClass( + 'Magento\Framework\View\LayoutInterface', + [], + '', + true, + true, + true, + ['getBlock'] + ); + $priceRendererMock = $this->getMock('Magento\Framework\Pricing\Render', ['render'], [], '', false); + $productTitle = 'Product title'; + $productUrl = '<a href="http://product.url">Product Url</a>'; + $imgThumbSrc = 'http://source-for-thumbnail'; + $productDescription = 'Product description'; + $description = '<table><tr><td><a href="' . $productUrl . '"><img src="' . $imgThumbSrc . + '" border="0" align="left" height="75" width="75"></a></td><td style="text-decoration:none;">' . + $productDescription . $priceHtmlForTest . '</td></tr></table>'; + + $productMock->expects($this->exactly(2)) + ->method('getProductUrl') + ->will($this->returnValue($productUrl)); + $productMock->expects($this->once()) + ->method('getDescription') + ->will($this->returnValue($productDescription)); + $productMock->expects($this->any()) + ->method('getAllowedInRss') + ->will($this->returnValue(true)); + $productMock->expects($this->once()) + ->method('getName') + ->will($this->returnValue($productTitle)); + $this->imageHelperMock->expects($this->once()) + ->method('init') + ->will($this->returnSelf()); + $this->imageHelperMock->expects($this->once()) + ->method('resize') + ->will($this->returnValue($imgThumbSrc)); + $layoutMock->expects($this->once()) + ->method('getBlock') + ->will($this->returnValue($priceRendererMock)); + $priceRendererMock->expects($this->once()) + ->method('render') + ->will($this->returnValue($priceHtmlForTest)); + + $expectedData = [ + 'title' => $productTitle, + 'link' => $productUrl, + 'description' => $description + ]; + $rssObjMock->expects($this->once()) + ->method('_addEntry') + ->with($expectedData) + ->will($this->returnSelf()); + + + $args = [ + 'product' => $productMock, + 'rssObj' => $rssObjMock + ]; + + $this->block->setLayout($layoutMock); + $this->assertNull($this->block->addNewItemXmlCallback($args)); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/NewCatalogTest.php b/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/NewCatalogTest.php new file mode 100644 index 00000000000..bb580235022 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/NewCatalogTest.php @@ -0,0 +1,149 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Rss\Block\Catalog; + +/** + * Test for rendering price html in rss templates + * + * @package Magento\Rss\Block\Catalog + */ +class NewCatalogTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Rss\Block\Catalog\NewCatalog + */ + protected $block; + + /** + * @var \Magento\Catalog\Helper\Image + */ + protected $imageHelperMock; + + /** + * Set up mock objects for tested class + */ + public function setUp() + { + $templateContextMock = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false); + $this->imageHelperMock = $this->getMock('Magento\Catalog\Helper\Image', [], [], '', false); + + $eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false); + $requestMock = $this->getMock('Magento\Framework\App\RequestInterface', [], [], '', false); + + $templateContextMock->expects($this->once()) + ->method('getEventManager') + ->will($this->returnValue($eventManagerMock)); + $templateContextMock->expects($this->once()) + ->method('getRequest') + ->will($this->returnValue($requestMock)); + + $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->block = $objectManager->getObject( + 'Magento\Rss\Block\Catalog\NewCatalog', + [ + 'context' => $templateContextMock, + 'imageHelper' => $this->imageHelperMock, + ] + ); + } + + /** + * Test for method addNewItemXmlCallback + */ + public function testAddNewItemXmlCallback() + { + $priceHtmlForTest = '<div class="price">Price is 10 for example</div>'; + $productMock = $this->getMock( + 'Magento\Catalog\Model\Product', + ['getProductUrl', 'getDescription', 'getAllowedInRss', 'getName', '__wakeup'], + [], + '', + false + ); + $rssObjMock = $this->getMock('Magento\Rss\Model\Rss', [], [], '', false); + $layoutMock = $this->getMockForAbstractClass( + 'Magento\Framework\View\LayoutInterface', + [], + '', + true, + true, + true, + ['getBlock'] + ); + $priceRendererMock = $this->getMock('Magento\Framework\Pricing\Render', ['render'], [], '', false); + $productTitle = 'Product title'; + $productUrl = '<a href="http://product.url">Product Url</a>'; + $imgThumbSrc = 'http://source-for-thumbnail'; + $productDescription = 'Product description'; + $description = '<table><tr><td><a href="' . $productUrl . '"><img src="' . $imgThumbSrc . + '" border="0" align="left" height="75" width="75"></a></td><td style="text-decoration:none;">' . + $productDescription . $priceHtmlForTest . '</td></tr></table>'; + + $productMock->expects($this->exactly(2)) + ->method('getProductUrl') + ->will($this->returnValue($productUrl)); + $productMock->expects($this->once()) + ->method('getDescription') + ->will($this->returnValue($productDescription)); + $productMock->expects($this->any()) + ->method('getAllowedInRss') + ->will($this->returnValue(true)); + $productMock->expects($this->once()) + ->method('getName') + ->will($this->returnValue($productTitle)); + $this->imageHelperMock->expects($this->once()) + ->method('init') + ->will($this->returnSelf()); + $this->imageHelperMock->expects($this->once()) + ->method('resize') + ->will($this->returnValue($imgThumbSrc)); + $layoutMock->expects($this->once()) + ->method('getBlock') + ->will($this->returnValue($priceRendererMock)); + $priceRendererMock->expects($this->once()) + ->method('render') + ->will($this->returnValue($priceHtmlForTest)); + + $expectedData = [ + 'title' => $productTitle, + 'link' => $productUrl, + 'description' => $description + ]; + $rssObjMock->expects($this->once()) + ->method('_addEntry') + ->with($expectedData) + ->will($this->returnSelf()); + + + $args = [ + 'product' => $productMock, + 'rssObj' => $rssObjMock, + 'row' => '' + ]; + + $this->block->setLayout($layoutMock); + $this->assertNull($this->block->addNewItemXmlCallback($args)); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/SpecialTest.php b/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/SpecialTest.php new file mode 100644 index 00000000000..bb3d6b308a7 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Rss/Block/Catalog/SpecialTest.php @@ -0,0 +1,271 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Rss\Block\Catalog; + +use \Magento\Framework\Pricing\PriceCurrencyInterface; + +/** + * Test for rendering price html in rss templates + * + * @package Magento\Rss\Block\Catalog + */ +class SpecialTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Rss\Block\Catalog\Special + */ + protected $block; + + /** + * @var \Magento\Catalog\Helper\Image + */ + protected $imageHelperMock; + + /** + * @var \Magento\Store\Model\Store + */ + protected $storeMock; + + /** + * @var \Magento\Catalog\Model\ProductFactory + */ + protected $productFactoryMock; + + /** + * @var \Magento\Rss\Model\RssFactory + */ + protected $rssFactoryMock; + + /** + * @var \Magento\Framework\Model\Resource\Iterator + */ + protected $resourceIteratorMock; + + /** + * @var \Magento\Catalog\Helper\Data + */ + protected $catalogHelperMock; + + /** + * @var \Magento\Framework\Pricing\PriceCurrencyInterface + */ + protected $priceCurrencyMock; + + /** + * Set up mock objects for tested class + * + * @return void + */ + public function setUp() + { + $templateContextMock = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false); + $this->catalogHelperMock = $this->getMock('Magento\Catalog\Helper\Data', [], [], '', false); + $this->priceCurrencyMock = $this->getMockForAbstractClass( + 'Magento\Framework\Pricing\PriceCurrencyInterface', + [], + '', + true, + true, + true, + ['convertAndFormat'] + ); + $this->rssFactoryMock = $this->getMock('Magento\Rss\Model\RssFactory', ['create'], [], '', false); + $this->productFactoryMock = $this->getMock('Magento\Catalog\Model\ProductFactory', ['create'], [], '', false); + $this->resourceIteratorMock = $this->getMock('Magento\Framework\Model\Resource\Iterator', [], [], '', false); + $this->imageHelperMock = $this->getMock('Magento\Catalog\Helper\Image', [], [], '', false); + + $eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false); + $requestMock = $this->getMock('Magento\Framework\App\RequestInterface', [], [], '', false); + $storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface'); + $urlBuilderMock = $this->getMock('Magento\Framework\UrlInterface', [], [], '', false); + $this->storeMock = $this->getMock('Magento\Store\Model\Store', [], [], '', false); + $scopeConfigMock = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface', [], [], '', false); + $cacheStateMock = $this->getMock('Magento\Framework\App\Cache\StateInterface', [], [], '', false); + + $templateContextMock->expects($this->any()) + ->method('getRequest') + ->will($this->returnValue($requestMock)); + $templateContextMock->expects($this->any()) + ->method('getScopeConfig') + ->will($this->returnValue($scopeConfigMock)); + $templateContextMock->expects($this->any()) + ->method('getCacheState') + ->will($this->returnValue($cacheStateMock)); + $templateContextMock->expects($this->any()) + ->method('getEventManager') + ->will($this->returnValue($eventManagerMock)); + $templateContextMock->expects($this->any()) + ->method('getUrlBuilder') + ->will($this->returnValue($urlBuilderMock)); + $templateContextMock->expects($this->any()) + ->method('getStoreManager') + ->will($this->returnValue($storeManagerMock)); + $storeManagerMock->expects($this->any()) + ->method('getStore') + ->will($this->returnValue($this->storeMock)); + $this->storeMock->expects($this->any()) + ->method('getId') + ->will($this->returnValue(0)); + + $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->block = $objectManager->getObject( + 'Magento\Rss\Block\Catalog\Special', + [ + 'context' => $templateContextMock, + 'catalogData' => $this->catalogHelperMock, + 'priceCurrency' => $this->priceCurrencyMock, + 'productFactory' => $this->productFactoryMock, + 'rssFactory' => $this->rssFactoryMock, + 'resourceIterator' => $this->resourceIteratorMock, + 'imageHelper' => $this->imageHelperMock, + ] + ); + } + + /** + * Test for method _toHtml + * + * @return void + */ + public function testToHtml() + { + $productMock = $this->getMock( + 'Magento\Catalog\Model\Product', + ['getProductUrl', 'getDescription', 'getAllowedPriceInRss', 'getName', '__wakeup', 'getResourceCollection'], + [], + '', + false + ); + $productCollectionMock = $this->getMock( + 'Magento\Catalog\Model\Resource\Product\CollectionFactory', + ['addPriceDataFieldFilter', 'addPriceData', 'addAttributeToSelect', 'addAttributeToSort', 'getSelect'], + [], + '', + false + ); + $rssObjMock = $this->getMock('Magento\Rss\Model\Rss', [], [], '', false); + $productUrl = '<a href="http://product.url">Product Url</a>'; + $imgThumbSrc = 'http://source-for-thumbnail'; + $productTitle = 'Product title'; + $basePriceFormatted = '<span class="price">$10.00</span>'; + $finalPriceFormatted = '<span class="price">$20.00</span>'; + $productDescription = '<table><tr>' . + '<td><a href="' . $productUrl . '"><img src="' . $imgThumbSrc . + '" alt="" border="0" align="left" height="75" width="75" /></a></td>' . + '<td style="text-decoration:none;"><p>Price: ' . $basePriceFormatted . ' Special Price: ' . + $finalPriceFormatted . '</p></td></tr></table>'; + $expectedData = [ + 'title' => $productTitle, + 'link' => $productUrl, + 'description' => $productDescription + ]; + $expectedResult = new \Magento\Framework\Object(['rss_feed' => '<xml>Feed of the rss</xml>']); + + $this->addMocks(); + $this->productFactoryMock->expects($this->once()) + ->method('create') + ->will($this->returnValue($productMock)); + $productMock->expects($this->once()) + ->method('getResourceCollection') + ->will($this->returnValue($productCollectionMock)); + $productCollectionMock->expects($this->once()) + ->method('addPriceDataFieldFilter') + ->will($this->returnSelf()); + $productCollectionMock->expects($this->once()) + ->method('addPriceData') + ->will($this->returnSelf()); + $productCollectionMock->expects($this->once()) + ->method('addAttributeToSelect') + ->will($this->returnSelf()); + $productCollectionMock->expects($this->once()) + ->method('addAttributeToSort') + ->will($this->returnSelf()); + $this->rssFactoryMock->expects($this->once()) + ->method('create') + ->will($this->returnValue($rssObjMock)); + $productMock->expects($this->exactly(2)) + ->method('getProductUrl') + ->will($this->returnValue($productUrl)); + $this->imageHelperMock->expects($this->once()) + ->method('resize') + ->will($this->returnValue($imgThumbSrc)); + $productMock->expects($this->any()) + ->method('getAllowedPriceInRss') + ->will($this->returnValue(true)); + $productMock->expects($this->once()) + ->method('getName') + ->will($this->returnValue($productTitle)); + $this->priceCurrencyMock->expects($this->exactly(2)) + ->method('convertAndFormat') + ->will($this->returnValueMap( + [ + [10, true, PriceCurrencyInterface::DEFAULT_PRECISION, null, null, $basePriceFormatted], + [20, true, PriceCurrencyInterface::DEFAULT_PRECISION, null, null, $finalPriceFormatted], + ] + ) + ); + $rssObjMock->expects($this->once()) + ->method('_addEntry') + ->with($expectedData) + ->will($this->returnSelf()); + $rssObjMock->expects($this->once()) + ->method('createRssXml') + ->will($this->returnValue($expectedResult)); + $this->assertEquals($expectedResult, $this->block->toHtml()); + } + + /** + * Additional function to break up mocks initialization + * + * @return void + */ + protected function addMocks() + { + + $resIteratorcallback = function () { + $arguments = func_get_args(); + $arguments[2]['results'] = [ + ['use_special' => false, 'price' => 10, 'final_price' => 20] + ]; + }; + + $this->storeMock->expects($this->once()) + ->method('getWebsiteId') + ->will($this->returnValue(0)); + $this->storeMock->expects($this->once()) + ->method('getFrontendName') + ->will($this->returnValue('store name')); + + $this->catalogHelperMock->expects($this->once()) + ->method('canApplyMsrp') + ->will($this->returnValue(false)); + $this->resourceIteratorMock->expects($this->once()) + ->method('walk') + ->will($this->returnCallback($resIteratorcallback)); + $this->imageHelperMock->expects($this->once()) + ->method('init') + ->will($this->returnSelf()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Rss/Block/WishlistTest.php b/dev/tests/unit/testsuite/Magento/Rss/Block/WishlistTest.php new file mode 100644 index 00000000000..55fc7279aae --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Rss/Block/WishlistTest.php @@ -0,0 +1,404 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Rss\Block; + +/** + * Test for rendering price html in rss templates + * + * @package Magento\Rss\Block + */ +class WishlistTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Rss\Block\Catalog\Category + */ + protected $block; + + /** + * @var \Magento\Catalog\Model\ProductFactory + */ + protected $productFactoryMock; + + /** + * @var \Magento\Rss\Model\RssFactory + */ + protected $rssFactoryMock; + + /** + * @var \Magento\UrlInterface + */ + protected $urlBuilderMock; + + /** + * @var \Magento\Core\Helper\Data + */ + protected $coreHelperMock; + + /** + * @var \Magento\Wishlist\Helper\Data + */ + protected $wishlistHelperMock; + + /** + * @var \Magento\Framework\App\Config\ScopeConfigInterface + */ + protected $storeConfigMock; + + /** + * @var \Magento\Catalog\Helper\Image + */ + protected $imageHelperMock; + + /** + * @var \Magento\Catalog\Helper\Output + */ + protected $catalogOutputMock; + + /** + * Set up mock objects for tested class + * + * @return void + */ + public function setUp() + { + $templateContextMock = $this->getMock('Magento\Catalog\Block\Product\Context', [], [], '', false); + $this->coreHelperMock = $this->getMock('Magento\Core\Helper\Data', [], [], '', false); + $this->catalogOutputMock = $this->getMock('Magento\Catalog\Helper\Output', [], [], '', false); + $wishlistFactoryMock = $this->getMock('Magento\Wishlist\Model\WishlistFactory', [], [], '', false); + $this->rssFactoryMock = $this->getMock('Magento\Rss\Model\RssFactory', ['create'], [], '', false); + $eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false); + $cacheStateMock = $this->getMock('Magento\Framework\App\Cache\StateInterface', [], [], '', false); + $this->productFactoryMock = $this->getMock( + 'Magento\Catalog\Model\ProductFactory', + ['create', '__wakeup'], + [], + '', + false + ); + $this->wishlistHelperMock = $this->getMock( + 'Magento\Wishlist\Helper\Data', + ['getWishlist', 'getCustomer', 'getCustomerName'], + [], + '', + false + ); + $this->urlBuilderMock = $this->getMockForAbstractClass( + 'Magento\Framework\UrlInterface', + [], + '', + true, + true, + true, + ['getUrl'] + ); + $this->storeConfigMock = $this->getMockForAbstractClass( + 'Magento\Framework\App\Config\ScopeConfigInterface', + [], + '', + true, + true, + true, + ['getConfig'] + ); + $this->imageHelperMock = $this->getMock('Magento\Catalog\Helper\Image', [], [], '', false); + + $templateContextMock->expects($this->once()) + ->method('getEventManager') + ->will($this->returnValue($eventManagerMock)); + $templateContextMock->expects($this->once()) + ->method('getCacheState') + ->will($this->returnValue($cacheStateMock)); + $templateContextMock->expects($this->once()) + ->method('getImageHelper') + ->will($this->returnValue($this->imageHelperMock)); + $templateContextMock->expects($this->once()) + ->method('getWishlistHelper') + ->will($this->returnValue($this->wishlistHelperMock)); + $templateContextMock->expects($this->once()) + ->method('getScopeConfig') + ->will($this->returnValue($this->storeConfigMock)); + $templateContextMock->expects($this->once()) + ->method('getUrlBuilder') + ->will($this->returnValue($this->urlBuilderMock)); + + $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->block = $objectManager->getObject( + 'Magento\Rss\Block\Wishlist', + [ + 'context' => $templateContextMock, + 'productFactory' => $this->productFactoryMock, + 'coreData' => $this->coreHelperMock, + 'wishlistFactory' => $wishlistFactoryMock, + 'rssFactory' => $this->rssFactoryMock, + 'outputHelper' => $this->catalogOutputMock + ] + ); + } + + /** + * Test for method _toHtml + */ + public function testToHtml() + { + $wishlistId = 1; + $customerName = 'Customer Name'; + $title = "$customerName's Wishlist"; + $rssObjMock = $this->getMock('Magento\Rss\Model\Rss', [], [], '', false); + $wishlistModelMock = $this->getMock( + 'Magento\Wishlist\Model\Wishlist', + ['getId', '__wakeup', 'getCustomerId', 'getItemCollection'], + [], + '', + false + ); + $customerServiceMock = $this->getMock('Magento\Customer\Service\V1\Data\Customer', [], [], '', false); + $wishlistSharingUrl = 'wishlist/shared/index/1'; + $locale = 'en_US'; + $productUrl = 'http://product.url/'; + $productName = 'Product name'; + $expectedHeaders = [ + 'title' => $title, + 'description' => $title, + 'link' => $wishlistSharingUrl, + 'charset' => 'UTF-8', + 'language' => $locale + ]; + + + $this->rssFactoryMock->expects($this->once()) + ->method('create') + ->will($this->returnValue($rssObjMock)); + $this->wishlistHelperMock->expects($this->once()) + ->method('getWishlist') + ->will($this->returnValue($wishlistModelMock)); + $this->wishlistHelperMock->expects($this->once()) + ->method('getCustomer') + ->will($this->returnValue($customerServiceMock)); + $this->wishlistHelperMock->expects($this->once()) + ->method('getCustomerName') + ->will($this->returnValue($customerName)); + $wishlistModelMock->expects($this->once()) + ->method('getId') + ->will($this->returnValue($wishlistId)); + $this->urlBuilderMock->expects($this->once()) + ->method('getUrl') + ->will($this->returnValue($wishlistSharingUrl)); + $this->storeConfigMock->expects($this->any()) + ->method('getValue') + ->will($this->returnValueMap( + [ + [ + 'advanced/modules_disable_output/Magento_Rss', + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + null, + null + ], + [ + 'general/locale/code', + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + null, + $locale + ] + ] + ) + ); + + $staticArgs = [ + 'productName' => $productName, + 'productUrl' => $productUrl + ]; + $description = $this->processWishlistItemDescription($wishlistModelMock, $staticArgs); + $expectedEntry = [ + 'title' => $productName, + 'link' => $productUrl, + 'description' => $description + ]; + $rssString = ''; + + $rssObjMock->expects($this->once()) + ->method('_addHeader') + ->with($expectedHeaders) + ->will($this->returnSelf()); + $rssObjMock->expects($this->once()) + ->method('_addEntry') + ->with($expectedEntry); + $rssObjMock->expects($this->once()) + ->method('createRssXml') + ->will($this->returnValue($rssString)); + + $this->assertEquals($rssString, $this->block->toHtml()); + } + + /** + * Additional function to process forming description for wishlist item + * + * @param \Magento\Wishlist\Model\Wishlist $wishlistModelMock + * @param array $staticArgs + * @return string + */ + protected function processWishlistItemDescription($wishlistModelMock, $staticArgs) + { + $imgThumbSrc = 'http://source-for-thumbnail'; + $priceHtmlForTest = '<div class="price">Price is 10 for example</div>'; + $productDescription = 'Product description'; + $productShortDescription = 'Product short description'; + + $wishlistItem = $this->getMock('Magento\Wishlist\Model\Item', [], [], '', false); + $wishlistItemsCollection = [ + $wishlistItem + ]; + $productMock = $this->getMock( + 'Magento\Catalog\Model\Product', + [ + 'getAllowedInRss', + 'getAllowedPriceInRss', + 'getDescription', + 'getShortDescription', + 'getName', + 'getVisibleInSiteVisibilities', + 'getUrlModel', + '__wakeup' + ], + [], + '', + false + ); + $urlModelMock = $this->getMock('Magento\Catalog\Model\Product\Url', [], [], '', false); + $layoutMock = $this->getMockForAbstractClass( + 'Magento\Framework\View\LayoutInterface', + [], + '', + true, + true, + true, + ['getBlock'] + ); + + $wishlistModelMock->expects($this->once()) + ->method('getItemCollection') + ->will($this->returnValue($wishlistItemsCollection)); + $wishlistItem->expects($this->once()) + ->method('getProduct') + ->will($this->returnValue($productMock)); + $productMock->expects($this->once()) + ->method('getUrlModel') + ->will($this->returnValue($urlModelMock)); + $productMock->expects($this->once()) + ->method('getAllowedPriceInRss') + ->will($this->returnValue($urlModelMock)); + $urlModelMock->expects($this->once()) + ->method('getUrl') + ->will($this->returnValue($staticArgs['productUrl'])); + $productMock->expects($this->once()) + ->method('getName') + ->will($this->returnValue($staticArgs['productName'])); + $productMock->expects($this->once()) + ->method('getAllowedInRss') + ->will($this->returnValue(true)); + $productMock->expects($this->once()) + ->method('getVisibleInSiteVisibilities') + ->will($this->returnValue(true)); + $this->imageHelperMock->expects($this->once()) + ->method('init') + ->will($this->returnSelf()); + $this->imageHelperMock->expects($this->once()) + ->method('resize') + ->will($this->returnValue($imgThumbSrc)); + $priceRendererMock = $this->getMock('Magento\Framework\Pricing\Render', ['render'], [], '', false); + + $layoutMock->expects($this->once()) + ->method('getBlock') + ->will($this->returnValue($priceRendererMock)); + $priceRendererMock->expects($this->once()) + ->method('render') + ->will($this->returnValue($priceHtmlForTest)); + $productMock->expects($this->any()) + ->method('getDescription') + ->will($this->returnValue($productDescription)); + $productMock->expects($this->any()) + ->method('getShortDescription') + ->will($this->returnValue($productShortDescription)); + $this->catalogOutputMock->expects($this->any()) + ->method('productAttribute') + ->will($this->returnArgument(1)); + + $this->block->setLayout($layoutMock); + $description = '<table><tr><td><a href="' . $staticArgs['productUrl'] . '"><img src="' . $imgThumbSrc . + '" border="0" align="left" height="75" width="75"></a></td><td style="text-decoration:none;">' . + $productShortDescription . '<p>' . $priceHtmlForTest . '</p><p>Comment: ' . $productDescription . '<p>' . + '</td></tr></table>'; + + return $description; + } + + /** + * Test for method _toHtml for the case, when wishlist is absent + */ + public function testToHtmlWithoutWishlist() + { + $url = 'http://base.url/index'; + $rssString = '<xml>Some empty xml</xml>'; + $rssObjMock = $this->getMock('Magento\Rss\Model\Rss', [], [], '', false); + $customerServiceMock = $this->getMock('Magento\Customer\Service\V1\Data\Customer', [], [], '', false); + $wishlistModelMock = $this->getMock( + 'Magento\Wishlist\Model\Wishlist', + ['getId', '__wakeup', 'getCustomerId'], + [], + '', + false + ); + $expectedHeaders = [ + 'title' => __('We cannot retrieve the wish list.'), + 'description' => __('We cannot retrieve the wish list.'), + 'link' => $url, + 'charset' => 'UTF-8' + ]; + + $this->rssFactoryMock->expects($this->once()) + ->method('create') + ->will($this->returnValue($rssObjMock)); + $this->wishlistHelperMock->expects($this->once()) + ->method('getWishlist') + ->will($this->returnValue($wishlistModelMock)); + $wishlistModelMock->expects($this->once()) + ->method('getId') + ->will($this->returnValue(false)); + $this->urlBuilderMock->expects($this->once()) + ->method('getUrl') + ->will($this->returnValue($url)); + $this->wishlistHelperMock->expects($this->once()) + ->method('getCustomer') + ->will($this->returnValue($customerServiceMock)); + $rssObjMock->expects($this->once()) + ->method('_addHeader') + ->with($expectedHeaders) + ->will($this->returnSelf()); + $rssObjMock->expects($this->once()) + ->method('createRssXml') + ->will($this->returnValue($rssString)); + + $this->assertEquals($rssString, $this->block->toHtml()); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php b/dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php index db247adb1ff..afb5d98498f 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php @@ -79,16 +79,32 @@ class OrderTest extends \PHPUnit_Framework_TestCase $this->getMock('\Magento\Framework\App\Action\Title', array('__wakeup', 'add'), array(), '', false); $viewMock = $this->getMockForAbstractClass('\Magento\Framework\App\ViewInterface'); + /** + * @TODO: + * - Methods of object under test MUST NOT be mocked + * - Protected properties MUST NOT be set from outside, inject via context passed to constructor instead + */ $this->_controllerMock = $this->getMockBuilder( - '\Magento\Sales\Controller\Adminhtml\Stub\Order' + '\Magento\Sales\Controller\Adminhtml\Order' )->disableOriginalConstructor()->setMethods( array('__wakeup', '_initOrder', '_initAction', '__', 'renderLayout', '_redirect') )->getMock(); $this->_controllerMock->expects($this->any())->method('__')->will($this->returnArgument(0)); - $this->_controllerMock->_title = $titleMock; - $this->_controllerMock->_view = $viewMock; - $this->_controllerMock->messageManager = $this->_messageMock; + $reflectionProperty = new \ReflectionProperty('\Magento\Sales\Controller\Adminhtml\Order', '_title'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->_controllerMock, $titleMock); + $reflectionProperty->setAccessible(false); + + $reflectionProperty = new \ReflectionProperty('\Magento\Sales\Controller\Adminhtml\Order', '_view'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->_controllerMock, $viewMock); + $reflectionProperty->setAccessible(false); + + $reflectionProperty = new \ReflectionProperty('\Magento\Sales\Controller\Adminhtml\Order', 'messageManager'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->_controllerMock, $this->_messageMock); + $reflectionProperty->setAccessible(false); } /** diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Quote/ItemTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Quote/ItemTest.php index 73bc9bc7ab8..c9e41f6ce4b 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Model/Quote/ItemTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Quote/ItemTest.php @@ -36,12 +36,12 @@ class ItemTest extends \PHPUnit_Framework_TestCase private $localeFormat; /** - * @var \Magento\Model\Context + * @var \Magento\Framework\Model\Context */ private $modelContext; /** - * @var \Magento\Event\ManagerInterface + * @var \Magento\Framework\Event\ManagerInterface */ private $eventDispatcher; @@ -81,7 +81,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase ->setMethods(['getEventDispatcher']) ->getMock(); - $this->eventDispatcher = $this->getMockBuilder('Magento\Event\ManagerInterface') + $this->eventDispatcher = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface') ->disableOriginalConstructor() ->setMethods(['dispatch']) ->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Store/Model/Storage/DbTest.php b/dev/tests/unit/testsuite/Magento/Store/Model/Storage/DbTest.php index 01ffe65308f..5afae729e73 100644 --- a/dev/tests/unit/testsuite/Magento/Store/Model/Storage/DbTest.php +++ b/dev/tests/unit/testsuite/Magento/Store/Model/Storage/DbTest.php @@ -190,7 +190,7 @@ class DbTest extends \PHPUnit_Framework_TestCase $websiteCode = 'website_code'; $groupId = 1; $storeId = 1; - $storeCode = \Magento\Store\Model\Store::DEFAULT_CODE; + $storeCode = 'store_code'; $websiteCollection = $this->getMock('\Magento\Store\Model\Resource\Website\Collection', array(), array(), '', false, false); $websiteCollection->expects($this->any())->method('setLoadDefault')->with(true); @@ -266,7 +266,6 @@ class DbTest extends \PHPUnit_Framework_TestCase $this->prepareMockForReinit(); $this->_model->reinitStores(); $this->assertSame($this->_storeMock, $this->_model->getStore(true)); - } public function testReinitStores() @@ -294,7 +293,7 @@ class DbTest extends \PHPUnit_Framework_TestCase $this->_model->reinitStores(); $this->assertSame($expected, $this->_model->getStores()); - $expected = array(\Magento\Store\Model\Store::DEFAULT_CODE => $this->_storeMock); + $expected = array('store_code' => $this->_storeMock); $this->assertSame($expected, $this->_model->getStores(false, true)); } diff --git a/dev/tests/unit/testsuite/Magento/Tax/Pricing/AdjustmentTest.php b/dev/tests/unit/testsuite/Magento/Tax/Pricing/AdjustmentTest.php index ff9dd0242fd..74ea74b8a90 100644 --- a/dev/tests/unit/testsuite/Magento/Tax/Pricing/AdjustmentTest.php +++ b/dev/tests/unit/testsuite/Magento/Tax/Pricing/AdjustmentTest.php @@ -24,49 +24,46 @@ namespace Magento\Tax\Pricing; -use Magento\Tax\Helper\Data as TaxHelper; use Magento\Framework\Pricing\Object\SaleableInterface; class AdjustmentTest extends \PHPUnit_Framework_TestCase { + /** + * @var Adjustment + */ + protected $adjustment; + + /** + * @var \Magento\Tax\Helper\Data | \PHPUnit_Framework_MockObject_MockObject + */ + protected $taxHelper; + + /** + * @var int + */ + protected $sortOrder = 5; + + public function setUp() + { + $this->taxHelper = $this->getMock('Magento\Tax\Helper\Data', [], [], '', false); + $this->adjustment = new Adjustment($this->taxHelper, $this->sortOrder); + } + public function testGetAdjustmentCode() { - // Instantiate/mock objects - /** @var TaxHelper $taxHelper */ - $taxHelper = $this->getMockBuilder('Magento\Tax\Helper\Data')->disableOriginalConstructor() - ->setMethods(array()) - ->getMock(); - $model = new Adjustment($taxHelper); - - // Run tested method - $code = $model->getAdjustmentCode(); - - // Check expectations - $this->assertNotEmpty($code); + $this->assertEquals(Adjustment::ADJUSTMENT_CODE, $this->adjustment->getAdjustmentCode()); } /** - * @param bool $isPriceIncludesTax + * @param bool $expectedResult * @dataProvider isIncludedInBasePriceDataProvider */ - public function testIsIncludedInBasePrice($isPriceIncludesTax) + public function testIsIncludedInBasePrice($expectedResult) { - // Instantiate/mock objects - /** @var TaxHelper|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $taxHelper = $this->getMockBuilder('Magento\Tax\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('priceIncludesTax')) - ->getMock(); - $model = new Adjustment($taxHelper); - - // Avoid execution of irrelevant functionality - $taxHelper->expects($this->any())->method('priceIncludesTax')->will($this->returnValue($isPriceIncludesTax)); - - // Run tested method - $result = $model->isIncludedInBasePrice(); - - // Check expectations - $this->assertInternalType('bool', $result); - $this->assertEquals($isPriceIncludesTax, $result); + $this->taxHelper->expects($this->once()) + ->method('priceIncludesTax') + ->will($this->returnValue($expectedResult)); + $this->assertEquals($expectedResult, $this->adjustment->isIncludedInBasePrice()); } public function isIncludedInBasePriceDataProvider() @@ -79,27 +76,16 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testIsIncludedInDisplayPrice($displayPriceIncludingTax, $displayBothPrices, $expectedResult) { - // Instantiate/mock objects - /** @var TaxHelper|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $taxHelper = $this->getMockBuilder('Magento\Tax\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('displayPriceIncludingTax', 'displayBothPrices')) - ->getMock(); - - // Avoid execution of irrelevant functionality - $taxHelper->expects($this->any()) + $this->taxHelper->expects($this->once()) ->method('displayPriceIncludingTax') ->will($this->returnValue($displayPriceIncludingTax)); - $taxHelper->expects($this->any()) - ->method('displayBothPrices') - ->will($this->returnValue($displayBothPrices)); + if (!$displayPriceIncludingTax) { + $this->taxHelper->expects($this->once()) + ->method('displayBothPrices') + ->will($this->returnValue($displayBothPrices)); + } - $model = new Adjustment($taxHelper); - // Run tested method - $result = $model->isIncludedInDisplayPrice(); - - // Check expectations - $this->assertInternalType('bool', $result); - $this->assertEquals($expectedResult, $result); + $this->assertEquals($expectedResult, $this->adjustment->isIncludedInDisplayPrice()); } /** @@ -124,30 +110,17 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testExtractAdjustment($isPriceIncludesTax, $amount, $price, $expectedResult) { - // Instantiate/mock objects - /** @var TaxHelper|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $taxHelper = $this->getMockBuilder('Magento\Tax\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('priceIncludesTax', 'getPrice')) - ->getMock(); - /** @var SaleableInterface|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $object = $this->getMockBuilder('Magento\Framework\Pricing\Object\SaleableInterface')->getMock(); - $model = new Adjustment($taxHelper); + $object = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); - // Avoid execution of irrelevant functionality - $taxHelper->expects($this->any()) + $this->taxHelper->expects($this->any()) ->method('priceIncludesTax') ->will($this->returnValue($isPriceIncludesTax)); - $taxHelper->expects($this->any()) + $this->taxHelper->expects($this->any()) ->method('getPrice') ->with($object, $amount) ->will($this->returnValue($price)); - // Run tested method - $result = $model->extractAdjustment($amount, $object); - - // Check expectations - $this->assertInternalType('float', $result); - $this->assertEquals($expectedResult, $result); + $this->assertEquals($expectedResult, $this->adjustment->extractAdjustment($amount, $object)); } public function extractAdjustmentDataProvider() @@ -169,30 +142,17 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testApplyAdjustment($isPriceIncludesTax, $amount, $price, $expectedResult) { - // Instantiate/mock objects - /** @var TaxHelper|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $taxHelper = $this->getMockBuilder('Magento\Tax\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('priceIncludesTax', 'getPrice')) - ->getMock(); - /** @var SaleableInterface|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ $object = $this->getMockBuilder('Magento\Framework\Pricing\Object\SaleableInterface')->getMock(); - $model = new Adjustment($taxHelper); - // Avoid execution of irrelevant functionality - $taxHelper->expects($this->any()) + $this->taxHelper->expects($this->any()) ->method('priceIncludesTax') ->will($this->returnValue($isPriceIncludesTax)); - $taxHelper->expects($this->any()) + $this->taxHelper->expects($this->any()) ->method('getPrice') ->with($object, $amount, !$isPriceIncludesTax) ->will($this->returnValue($price)); - // Run tested method - $result = $model->applyAdjustment($amount, $object); - - // Check expectations - $this->assertInternalType('float', $result); - $this->assertEquals($expectedResult, $result); + $this->assertEquals($expectedResult, $this->adjustment->applyAdjustment($amount, $object)); } /** @@ -207,20 +167,26 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase ]; } - public function testIsExcludedWith() + /** + * @dataProvider isExcludedWithDataProvider + * @param string $adjustmentCode + * @param bool $expectedResult + */ + public function testIsExcludedWith($adjustmentCode, $expectedResult) { - $adjustmentCode = 'some_random_adjustment_code123'; - - // Instantiate/mock objects - /** @var TaxHelper|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $taxHelper = $this->getMockBuilder('Magento\Tax\Helper\Data')->disableOriginalConstructor()->getMock(); - $model = new Adjustment($taxHelper); + $this->assertEquals($expectedResult, $this->adjustment->isExcludedWith($adjustmentCode)); + } - // Run tested method - $result = $model->isExcludedWith($adjustmentCode); + public function isExcludedWithDataProvider() + { + return [ + [Adjustment::ADJUSTMENT_CODE, true], + ['not_tax', false] + ]; + } - // Check expectations - $this->assertInternalType('bool', $result); - $this->assertFalse($result); + public function testGetSortOrder() + { + $this->assertEquals($this->sortOrder, $this->adjustment->getSortOrder()); } } diff --git a/dev/tests/unit/testsuite/Magento/Tax/Pricing/Price/Plugin/AttributePriceTest.php b/dev/tests/unit/testsuite/Magento/Tax/Pricing/Price/Plugin/AttributePriceTest.php new file mode 100644 index 00000000000..106743426db --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Tax/Pricing/Price/Plugin/AttributePriceTest.php @@ -0,0 +1,175 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Tax\Pricing\Price\Plugin; + +/** + * Class AttributePrice + * + * @package Magento\Tax\Pricing\Price\Plugin + */ +class AttributePriceTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Magento\Tax\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */ + protected $taxHelperMock; + + /** @var \Magento\Tax\Model\Calculation|\PHPUnit_Framework_MockObject_MockObject */ + protected $calculationMock; + + /** @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */ + protected $productMock; + + /** @var \Magento\Framework\Pricing\PriceInfo\Base|\PHPUnit_Framework_MockObject_MockObject */ + protected $priceInfoMock; + + /** @var \Magento\Tax\Pricing\Adjustment|\PHPUnit_Framework_MockObject_MockObject */ + protected $adjustmentMock; + + /** @var \Magento\Tax\Pricing\Price\Plugin\AttributePrice */ + protected $plugin; + + /** @var \Magento\Object|\PHPUnit_Framework_MockObject_MockObject */ + protected $rateRequestMock; + + /** @var \Magento\ConfigurableProduct\Pricing\Price\AttributePrice|\PHPUnit_Framework_MockObject_MockObject */ + protected $attributePriceMock; + + /** + * Test setup + */ + public function setUp() + { + $this->taxHelperMock = $this->getMock( + 'Magento\Tax\Helper\Data', + ['displayPriceIncludingTax', 'displayBothPrices'], + [], + '', + false, + false + ); + $this->calculationMock = $this->getMock( + 'Magento\Tax\Model\Calculation', + ['getRate', 'getRateRequest', '__wakeup'], + [], + '', + false, + false + ); + $this->productMock = $this->getMock( + 'Magento\Catalog\Model\Product', + ['__wakeup', 'getTaxClassId', 'getPriceInfo'], + [], + '', + false, + false + ); + $this->priceInfoMock = $this->getMock( + 'Magento\Framework\Pricing\PriceInfo\Base', + ['getAdjustment'], + [], + '', + false, + false + ); + $this->adjustmentMock = $this->getMock( + 'Magento\Tax\Pricing\Adjustment', + ['isIncludedInBasePrice'], + [], + '', + false, + false + ); + $this->rateRequestMock = $this->getMock( + 'Magento\Object', + ['setProductClassId', '__wakeup'], + [], + '', + false, + false + ); + $this->attributePriceMock = $this->getMock( + 'Magento\ConfigurableProduct\Pricing\Price\AttributePrice', + [], + [], + '', + false, + false + ); + + $this->plugin = new \Magento\Tax\Pricing\Price\Plugin\AttributePrice( + $this->taxHelperMock, + $this->calculationMock + ); + + + } + + /** + * test for method afterPrepareAdjustmentConfig + */ + public function testAfterPrepareAdjustmentConfig() + { + $this->productMock->expects($this->once()) + ->method('getTaxClassId') + ->will($this->returnValue('tax-class-id')); + $this->calculationMock->expects($this->exactly(2)) + ->method('getRateRequest') + ->will($this->returnValue($this->rateRequestMock)); + $this->calculationMock->expects($this->exactly(2)) + ->method('getRate') + ->with($this->equalTo($this->rateRequestMock)) + ->will($this->returnValue(99.10)); + $this->productMock->expects($this->once()) + ->method('getPriceInfo') + ->will($this->returnValue($this->priceInfoMock)); + $this->priceInfoMock->expects($this->once()) + ->method('getAdjustment') + ->with($this->equalTo(\Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE)) + ->will($this->returnValue($this->adjustmentMock)); + $this->adjustmentMock->expects($this->once()) + ->method('isIncludedInBasePrice') + ->will($this->returnValue(true)); + $this->taxHelperMock->expects($this->once()) + ->method('displayPriceIncludingTax') + ->will($this->returnValue(true)); + $this->taxHelperMock->expects($this->once()) + ->method('displayBothPrices') + ->will($this->returnValue(true)); + + $expected = [ + 'product' => $this->productMock, + 'defaultTax' => 99.10, + 'currentTax' => 99.10, + 'includeTax' => true, + 'showIncludeTax' => true, + 'showBothPrices' => true + ]; + + $this->assertEquals($expected, $this->plugin->afterPrepareAdjustmentConfig($this->attributePriceMock, [ + 'product' => $this->productMock, + 'defaultTax' => 0, + 'currentTax' => 0 + ])); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Tax/Pricing/Render/AdjustmentTest.php b/dev/tests/unit/testsuite/Magento/Tax/Pricing/Render/AdjustmentTest.php index 1050a4d3333..34febddc002 100644 --- a/dev/tests/unit/testsuite/Magento/Tax/Pricing/Render/AdjustmentTest.php +++ b/dev/tests/unit/testsuite/Magento/Tax/Pricing/Render/AdjustmentTest.php @@ -36,14 +36,14 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase /** * Price currency model mock * - * @var \Magento\Directory\Model\PriceCurrency + * @var \Magento\Directory\Model\PriceCurrency | \PHPUnit_Framework_MockObject_MockObject */ protected $priceCurrencyMock; /** * Price helper mock * - * @var \Magento\Tax\Helper\Data + * @var \Magento\Tax\Helper\Data | \PHPUnit_Framework_MockObject_MockObject */ protected $taxHelperMock; @@ -104,7 +104,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testGetAdjustmentCode() { - $this->assertEquals(\Magento\Tax\Pricing\Adjustment::CODE, $this->model->getAdjustmentCode()); + $this->assertEquals(\Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE, $this->model->getAdjustmentCode()); } /** @@ -292,4 +292,93 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expectedResult, $result); } + + public function testGetHtmlExcluding() + { + $arguments = []; + $totalDisplayValue = 10.0; + $taxAdjustment = 2.0; + $displayValue = 8.0; + + $amountRender = $this->getMockForAbstractClass('Magento\Framework\Pricing\Render\AmountRenderInterface'); + $amountMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $amountMock->expects($this->once()) + ->method('getAdjustmentAmount') + ->with(\Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE) + ->will($this->returnValue($taxAdjustment)); + + $this->taxHelperMock->expects($this->once()) + ->method('displayBothPrices') + ->will($this->returnValue(false)); + $this->taxHelperMock->expects($this->once()) + ->method('displayPriceExcludingTax') + ->will($this->returnValue(true)); + + $amountRender->expects($this->at(0)) + ->method('getDisplayValue') + ->will($this->returnValue($totalDisplayValue)); + $amountRender->expects($this->at(1)) + ->method('getAmount') + ->will($this->returnValue($amountMock)); + $amountRender->expects($this->at(2)) + ->method('setDisplayValue') + ->with($displayValue); + + $this->model->render($amountRender, $arguments); + } + + public function testGetHtmlBoth() + { + $arguments = []; + $totalDisplayValue = 10.0; + $taxAdjustment = 2.0; + $displayValue = 8.0; + $this->model->setZone(\Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW); + + $amountRender = $this->getMock( + 'Magento\Framework\Pricing\Render\Amount', + [ + 'setPriceDisplayLabel', + 'setPriceId', + 'getSaleableItem', + 'getDisplayValue', + 'getAmount', + 'setDisplayValue' + ], + [], + '', + false + ); + $amountMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface'); + $amountMock->expects($this->once()) + ->method('getAdjustmentAmount') + ->with(\Magento\Tax\Pricing\Adjustment::ADJUSTMENT_CODE) + ->will($this->returnValue($taxAdjustment)); + $product = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + $product->expects($this->once()) + ->method('getId'); + + $this->taxHelperMock->expects($this->once()) + ->method('displayBothPrices') + ->will($this->returnValue(true)); + + $amountRender->expects($this->at(0)) + ->method('setPriceDisplayLabel'); + $amountRender->expects($this->at(1)) + ->method('getSaleableItem') + ->will($this->returnValue($product)); + $amountRender->expects($this->at(2)) + ->method('setPriceId'); + $amountRender->expects($this->at(3)) + ->method('getDisplayValue') + ->will($this->returnValue($totalDisplayValue)); + $amountRender->expects($this->at(4)) + ->method('getAmount') + ->will($this->returnValue($amountMock)); + $amountRender->expects($this->at(5)) + ->method('setDisplayValue') + ->with($displayValue); + + $this->model->render($amountRender, $arguments); + } } diff --git a/dev/tests/unit/testsuite/Magento/Usps/Model/CarrierTest.php b/dev/tests/unit/testsuite/Magento/Usps/Model/CarrierTest.php index 442dc537751..3c1021d7132 100644 --- a/dev/tests/unit/testsuite/Magento/Usps/Model/CarrierTest.php +++ b/dev/tests/unit/testsuite/Magento/Usps/Model/CarrierTest.php @@ -165,8 +165,10 @@ class CarrierTest extends \PHPUnit_Framework_TestCase $this->returnValue(file_get_contents(__DIR__ . '/_files/success_usps_response_rates.xml')) ); // for setRequest - $request_params = include __DIR__ . '/_files/rates_request_data.php'; - $request = $this->_helper->getObject('Magento\Sales\Model\Quote\Address\RateRequest', $request_params); + $request = $this->_helper->getObject( + 'Magento\Sales\Model\Quote\Address\RateRequest', + require __DIR__ . '/_files/rates_request_data.php' + ); $this->assertNotEmpty($this->_model->collectRates($request)->getAllRates()); } @@ -180,8 +182,10 @@ class CarrierTest extends \PHPUnit_Framework_TestCase )->will( $this->returnValue(file_get_contents(__DIR__ . '/_files/success_usps_response_return_shipment.xml')) ); - $request_params = include __DIR__ . '/_files/return_shipment_request_data.php'; - $request = $this->_helper->getObject('Magento\Shipping\Model\Shipment\ReturnShipment', $request_params); + $request = $this->_helper->getObject( + 'Magento\Shipping\Model\Shipment\ReturnShipment', + require __DIR__ . '/_files/return_shipment_request_data.php' + ); $this->assertNotEmpty($this->_model->returnOfShipment($request)->getInfo()[0]['tracking_number']); } diff --git a/dev/tests/unit/testsuite/Magento/Weee/Pricing/AdjustmentTest.php b/dev/tests/unit/testsuite/Magento/Weee/Pricing/AdjustmentTest.php index 0edb70d9d4e..9e711679a93 100644 --- a/dev/tests/unit/testsuite/Magento/Weee/Pricing/AdjustmentTest.php +++ b/dev/tests/unit/testsuite/Magento/Weee/Pricing/AdjustmentTest.php @@ -29,34 +29,35 @@ use Magento\Framework\Pricing\Object\SaleableInterface; class AdjustmentTest extends \PHPUnit_Framework_TestCase { + /** + * @var Adjustment + */ + protected $adjustment; + + /** + * @var \Magento\Weee\Helper\Data | \PHPUnit_Framework_MockObject_MockObject + */ + protected $weeeHelper; + + /** + * @var int + */ + protected $sortOrder = 5; + + public function setUp() + { + $this->weeeHelper = $this->getMock('Magento\Weee\Helper\Data', [], [], '', false); + $this->adjustment = new Adjustment($this->weeeHelper, $this->sortOrder); + } + public function testGetAdjustmentCode() { - // Instantiate/mock objects - /** @var WeeeHelper $weeHelper */ - $weeHelper = $this->getMockBuilder('Magento\Weee\Helper\Data')->disableOriginalConstructor() - ->setMethods(array()) - ->getMock(); - $model = new Adjustment($weeHelper); - - // Run tested method - $code = $model->getAdjustmentCode(); - - // Check expectations - $this->assertNotEmpty($code); + $this->assertEquals(Adjustment::ADJUSTMENT_CODE, $this->adjustment->getAdjustmentCode()); } public function testIsIncludedInBasePrice() { - // Instantiate/mock objects - /** @var WeeeHelper|\PHPUnit_Framework_MockObject_MockObject $weeeHelper */ - $weeeHelper = $this->getMockBuilder('Magento\Weee\Helper\Data')->disableOriginalConstructor()->getMock(); - $model = new Adjustment($weeeHelper); - - // Run tested method - $result = $model->isIncludedInBasePrice(); - - // Check expectations - $this->assertInternalType('bool', $result); + $this->assertFalse($this->adjustment->isIncludedInBasePrice()); } /** @@ -64,34 +65,17 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testIsIncludedInDisplayPrice($expectedResult) { - // Instantiate/mock objects - /** @var WeeeHelper|\PHPUnit_Framework_MockObject_MockObject $weeeHelper */ - $weeeHelper = $this->getMockBuilder('Magento\Weee\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('typeOfDisplay')) - ->getMock(); - $model = new Adjustment($weeeHelper); - - // Avoid execution of irrelevant functionality - $weeeHelper->expects($this->any()) + $displayTypes = [ + \Magento\Weee\Model\Tax::DISPLAY_INCL, + \Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, + \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL + ]; + $this->weeeHelper->expects($this->any()) ->method('typeOfDisplay') - ->with( - $this->equalTo( - [ - \Magento\Weee\Model\Tax::DISPLAY_INCL, - \Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, - \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, - 4 - ] - ) - ) + ->with($displayTypes) ->will($this->returnValue($expectedResult)); - // Run tested method - $result = $model->isIncludedInDisplayPrice(); - - // Check expectations - $this->assertInternalType('bool', $result); - $this->assertEquals($expectedResult, $result); + $this->assertEquals($expectedResult, $this->adjustment->isIncludedInDisplayPrice()); } /** @@ -109,26 +93,14 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testExtractAdjustment($amount, $expectedResult) { - // Instantiate/mock objects - /** @var WeeeHelper|\PHPUnit_Framework_MockObject_MockObject $weeeHelper */ - $weeeHelper = $this->getMockBuilder('Magento\Weee\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('getAmount')) - ->getMock(); - /** @var SaleableInterface|\PHPUnit_Framework_MockObject_MockObject $saleableItem */ - $saleableItem = $this->getMockBuilder('Magento\Framework\Pricing\Object\SaleableInterface')->getMock(); - $model = new Adjustment($weeeHelper); - - // Avoid execution of irrelevant functionality - $weeeHelper->expects($this->any()) + $saleableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + + $this->weeeHelper->expects($this->any()) ->method('getAmount') + ->with($saleableItem) ->will($this->returnValue($amount)); - // Run tested method - $result = $model->extractAdjustment('anything_here', $saleableItem); - - // Check expectations - $this->assertInternalType('float', $result); - $this->assertEquals($expectedResult, $result); + $this->assertEquals($expectedResult, $this->adjustment->extractAdjustment($amount, $saleableItem)); } /** @@ -150,26 +122,13 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testApplyAdjustment($amount, $amountOld, $expectedResult) { - // Instantiate/mock objects - /** @var WeeeHelper|\PHPUnit_Framework_MockObject_MockObject $weeeHelper */ - $weeeHelper = $this->getMockBuilder('Magento\Weee\Helper\Data')->disableOriginalConstructor() - ->setMethods(array('getAmount')) - ->getMock(); - /** @var SaleableInterface|\PHPUnit_Framework_MockObject_MockObject $taxHelper */ - $object = $this->getMockBuilder('Magento\Framework\Pricing\Object\SaleableInterface')->getMock(); - $model = new Adjustment($weeeHelper); - - // Avoid execution of irrelevant functionality - $weeeHelper->expects($this->any()) + $object = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface'); + + $this->weeeHelper->expects($this->any()) ->method('getAmount') ->will($this->returnValue($amountOld)); - // Run tested method - $result = $model->applyAdjustment($amount, $object); - - // Check expectations - $this->assertInternalType('float', $result); - $this->assertEquals($expectedResult, $result); + $this->assertEquals($expectedResult, $this->adjustment->applyAdjustment($amount, $object)); } /** @@ -184,20 +143,44 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase ]; } - public function testIsExcludedWith() + /** + * @dataProvider isExcludedWithDataProvider + * @param string $adjustmentCode + * @param bool $expectedResult + */ + public function testIsExcludedWith($adjustmentCode, $expectedResult) { - $adjustmentCode = 'some_random_adjustment_code123'; + $this->assertEquals($expectedResult, $this->adjustment->isExcludedWith($adjustmentCode)); + } - // Instantiate/mock objects - /** @var WeeeHelper|\PHPUnit_Framework_MockObject_MockObject $weeeHelper */ - $weeeHelper = $this->getMockBuilder('Magento\Weee\Helper\Data')->disableOriginalConstructor()->getMock(); - $model = new Adjustment($weeeHelper); + public function isExcludedWithDataProvider() + { + return [ + ['weee', true], + ['tax', true], + ['not_tax_and_not_weee', false] + ]; + } - // Run tested method - $result = $model->isExcludedWith($adjustmentCode); + /** + * @dataProvider getSortOrderProvider + * @param bool $isTaxable + * @param int $expectedResult + */ + public function testGetSortOrder($isTaxable, $expectedResult) + { + $this->weeeHelper->expects($this->any()) + ->method('isTaxable') + ->will($this->returnValue($isTaxable)); + + $this->assertEquals($expectedResult, $this->adjustment->getSortOrder()); + } - // Check expectations - $this->assertInternalType('bool', $result); - $this->assertFalse($result); + public function getSortOrderProvider() + { + return [ + [true, $this->sortOrder], + [false, -1] + ]; } } diff --git a/dev/tests/unit/testsuite/Magento/Weee/Pricing/Render/AdjustmentTest.php b/dev/tests/unit/testsuite/Magento/Weee/Pricing/Render/AdjustmentTest.php index 0b75a622ed6..ca5c52ed5b9 100644 --- a/dev/tests/unit/testsuite/Magento/Weee/Pricing/Render/AdjustmentTest.php +++ b/dev/tests/unit/testsuite/Magento/Weee/Pricing/Render/AdjustmentTest.php @@ -103,7 +103,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase */ public function testGetAdjustmentCode() { - $this->assertEquals(\Magento\Weee\Pricing\Adjustment::CODE, $this->model->getAdjustmentCode()); + $this->assertEquals(\Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE, $this->model->getAdjustmentCode()); } /** diff --git a/dev/tools/Magento/Tools/Dependency/generate/bootstrap.php b/dev/tools/Magento/Tools/Dependency/generate/bootstrap.php index feed42696b7..88d4e6ed57b 100644 --- a/dev/tools/Magento/Tools/Dependency/generate/bootstrap.php +++ b/dev/tools/Magento/Tools/Dependency/generate/bootstrap.php @@ -25,10 +25,6 @@ define('BP', realpath(__DIR__ . '/../../../../../../') . '/'); require_once BP . 'app/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath( - array( - BP . 'dev/tests/static/framework', - BP . 'dev/tools', - BP . '/lib' - ) +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath( + array(BP . 'dev/tests/static/framework', BP . 'dev/tools', BP . '/lib') ); diff --git a/dev/tools/Magento/Tools/Di/compiler.php b/dev/tools/Magento/Tools/Di/compiler.php index 00ed524ed74..c9e9cfb26c4 100644 --- a/dev/tools/Magento/Tools/Di/compiler.php +++ b/dev/tools/Magento/Tools/Di/compiler.php @@ -49,7 +49,7 @@ try { $opt->parse(); $generationDir = $opt->getOption('generation') ? $opt->getOption('generation') : $rootDir . '/var/generation'; - \Magento\Framework\Autoload\IncludePath::addIncludePath($generationDir); + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath($generationDir); $diDir = $opt->getOption('di') ? $opt->getOption('di') : $rootDir . '/var/di'; $compiledFile = $diDir . '/definitions.php'; diff --git a/dev/tools/Magento/Tools/Di/entity_generator.php b/dev/tools/Magento/Tools/Di/entity_generator.php index 9e04221f156..84ab6640ec8 100644 --- a/dev/tools/Magento/Tools/Di/entity_generator.php +++ b/dev/tools/Magento/Tools/Di/entity_generator.php @@ -73,7 +73,7 @@ try { exit($example); } -\Magento\Framework\Autoload\IncludePath::addIncludePath($generationDir); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath($generationDir); //reinit generator with correct generation path $io = new \Magento\Framework\Code\Generator\Io(new \Magento\Framework\Filesystem\Driver\File(), null, $generationDir); diff --git a/dev/tools/Magento/Tools/Layout/xmlUpdater.php b/dev/tools/Magento/Tools/Layout/xmlUpdater.php index 385577a07dd..89c4522dd41 100644 --- a/dev/tools/Magento/Tools/Layout/xmlUpdater.php +++ b/dev/tools/Magento/Tools/Layout/xmlUpdater.php @@ -26,7 +26,7 @@ $basePath = realpath(__DIR__ . '/../../../../../'); require_once $basePath . '/app/autoload.php'; require __DIR__ . '/Formatter.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(array($basePath . '/lib')); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath(array($basePath . '/lib')); try { $opt = new \Zend_Console_Getopt( diff --git a/dev/tools/Magento/Tools/Migration/Acl/db.php b/dev/tools/Magento/Tools/Migration/Acl/db.php index 85f3bdf9403..abf7626b4b3 100644 --- a/dev/tools/Magento/Tools/Migration/Acl/db.php +++ b/dev/tools/Magento/Tools/Migration/Acl/db.php @@ -26,7 +26,7 @@ $rootDir = realpath(__DIR__ . '/../../../..'); require $rootDir . '/app/autoload.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(array($rootDir . '/lib', $rootDir . '/dev')); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath(array($rootDir . '/lib', $rootDir . '/dev')); $defaultReportFile = 'report.log'; try { diff --git a/dev/tools/Magento/Tools/Migration/system_config.php b/dev/tools/Magento/Tools/Migration/system_config.php index 0229cb8465e..0a75b4414ad 100644 --- a/dev/tools/Magento/Tools/Migration/system_config.php +++ b/dev/tools/Magento/Tools/Migration/system_config.php @@ -23,7 +23,6 @@ * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ - use Magento\Framework\Autoload\IncludePath; use Magento\Tools\Migration\System\Configuration\Formatter; use Magento\Tools\Migration\System\Configuration\Generator; @@ -40,7 +39,7 @@ use Magento\Tools\Migration\System\Configuration\Logger as Logger; $rootDir = realpath(__DIR__ . '../../../../../../'); require __DIR__ . '/../../../../../app/autoload.php'; -IncludePath::addIncludePath(array($rootDir . '/lib', $rootDir . '/dev/tools')); +(new IncludePath())->addIncludePath(array($rootDir . '/lib', $rootDir . '/dev')); $defaultReportFile = 'report.log'; try { diff --git a/dev/tools/Magento/Tools/View/generator.php b/dev/tools/Magento/Tools/View/generator.php index 6146d28c124..cc7d2193f93 100644 --- a/dev/tools/Magento/Tools/View/generator.php +++ b/dev/tools/Magento/Tools/View/generator.php @@ -28,7 +28,7 @@ */ require __DIR__ . '/../../../../../app/bootstrap.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(__DIR__ . '/../../../'); +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath(__DIR__ . '/../../../'); /** * Command line usage help diff --git a/dev/tools/bootstrap.php b/dev/tools/bootstrap.php index 7dc8a7ab85e..851c4dd51fd 100644 --- a/dev/tools/bootstrap.php +++ b/dev/tools/bootstrap.php @@ -23,7 +23,7 @@ */ require_once __DIR__ . '/../../app/autoload.php'; define('BP', __DIR__ . '/../..'); -\Magento\Framework\Autoload\IncludePath::addIncludePath( +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath( array( BP . '/app/code', BP . '/lib', diff --git a/dev/tools/layout/xml-updater.php b/dev/tools/layout/xml-updater.php index d8f78e3b800..6179cb4edb6 100644 --- a/dev/tools/layout/xml-updater.php +++ b/dev/tools/layout/xml-updater.php @@ -26,7 +26,7 @@ $basePath = realpath(__DIR__ . '/../../../'); require_once $basePath . '/app/autoload.php'; require __DIR__ . '/Formatter.php'; -\Magento\Framework\Autoload\IncludePath::addIncludePath(array( +(new \Magento\Framework\Autoload\IncludePath())->addIncludePath(array( $basePath . '/lib', )); diff --git a/lib/Magento/Framework/App/Http.php b/lib/Magento/Framework/App/Http.php index 7b580f0c9b4..7048fd52ddf 100644 --- a/lib/Magento/Framework/App/Http.php +++ b/lib/Magento/Framework/App/Http.php @@ -144,7 +144,7 @@ class Http implements \Magento\Framework\AppInterface } } require_once $this->_filesystem->getPath(Filesystem::PUB_DIR) . '/errors/report.php'; - $processor = new \Error_Processor($this->_response); + $processor = new \Magento\Framework\Error\Processor($this->_response); $processor->saveReport($reportData); $this->_response = $processor->processReport(); } diff --git a/lib/Magento/Framework/App/ObjectManagerFactory.php b/lib/Magento/Framework/App/ObjectManagerFactory.php index 7e4db4d5e85..583e8b40dca 100644 --- a/lib/Magento/Framework/App/ObjectManagerFactory.php +++ b/lib/Magento/Framework/App/ObjectManagerFactory.php @@ -73,7 +73,7 @@ class ObjectManagerFactory ) ? $arguments[Filesystem::PARAM_APP_DIRS] : array(); $directoryList = new DirectoryList($rootDir, $directories); - \Magento\Framework\Autoload\IncludePath::addIncludePath( + (new \Magento\Framework\Autoload\IncludePath())->addIncludePath( array($directoryList->getDir(Filesystem::GENERATION_DIR)) ); diff --git a/lib/Magento/Framework/AppInterface.php b/lib/Magento/Framework/AppInterface.php index 27d31ec50a9..aa8866c27a1 100644 --- a/lib/Magento/Framework/AppInterface.php +++ b/lib/Magento/Framework/AppInterface.php @@ -35,7 +35,7 @@ interface AppInterface /** * Magento version */ - const VERSION = '2.0.0.0-dev75'; + const VERSION = '2.0.0.0-dev76'; /** * Launch application diff --git a/lib/Magento/Framework/Autoload/IncludePath.php b/lib/Magento/Framework/Autoload/IncludePath.php index 2fe513e6caf..9c01fcad1a0 100644 --- a/lib/Magento/Framework/Autoload/IncludePath.php +++ b/lib/Magento/Framework/Autoload/IncludePath.php @@ -38,9 +38,9 @@ class IncludePath * @param string $class * @return string|bool */ - public static function getFile($class) + public function getFile($class) { - $relativePath = self::getFilePath($class); + $relativePath = $this->getFilePath($class); return stream_resolve_include_path($relativePath); } @@ -51,7 +51,7 @@ class IncludePath * @param string $class * @return string */ - public static function getFilePath($class) + public function getFilePath($class) { if (strpos($class, self::NS_SEPARATOR) !== false) { $class = ltrim(str_replace(self::NS_SEPARATOR, '_', $class), '_'); @@ -66,7 +66,7 @@ class IncludePath * @param bool $prepend Whether to prepend paths or to append them * @return void */ - public static function addIncludePath($path, $prepend = true) + public function addIncludePath($path, $prepend = true) { $includePathExtra = implode(PATH_SEPARATOR, (array)$path); $includePath = get_include_path(); @@ -85,9 +85,9 @@ class IncludePath * @param string $class * @return void */ - public static function load($class) + public function load($class) { - $file = self::getFile($class); + $file = $this->getFile($class); if ($file) { include $file; } diff --git a/lib/Magento/Framework/Code/Generator.php b/lib/Magento/Framework/Code/Generator.php index 9f0804de25e..058a23f7ed9 100644 --- a/lib/Magento/Framework/Code/Generator.php +++ b/lib/Magento/Framework/Code/Generator.php @@ -107,7 +107,7 @@ class Generator // check if file already exists $autoloader = $this->_autoloader; - if ($autoloader::getFile($className)) { + if ($autoloader->getFile($className)) { return self::GENERATION_SKIP; } diff --git a/lib/Magento/Framework/Code/Generator/Autoloader.php b/lib/Magento/Framework/Code/Generator/Autoloader.php index e8701863f41..c98b83ac674 100644 --- a/lib/Magento/Framework/Code/Generator/Autoloader.php +++ b/lib/Magento/Framework/Code/Generator/Autoloader.php @@ -48,7 +48,7 @@ class Autoloader { if (!class_exists($className)) { if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS === $this->_generator->generateClass($className)) { - \Magento\Framework\Autoload\IncludePath::load($className); + (new \Magento\Framework\Autoload\IncludePath())->load($className); } } } diff --git a/lib/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/Magento/Framework/Code/Generator/EntityAbstract.php index c57eb698c7f..6f1cb6c1f62 100644 --- a/lib/Magento/Framework/Code/Generator/EntityAbstract.php +++ b/lib/Magento/Framework/Code/Generator/EntityAbstract.php @@ -288,13 +288,13 @@ abstract class EntityAbstract $filePath = stream_resolve_include_path(str_replace('_', '/', $controllerPath) . '.php'); $isSourceClassValid = !empty($filePath); } else { - $isSourceClassValid = $autoloader::getFile($sourceClassName); + $isSourceClassValid = $autoloader->getFile($sourceClassName); } if (!$isSourceClassValid) { $this->_addError('Source class ' . $sourceClassName . ' doesn\'t exist.'); return false; - } elseif ($autoloader::getFile($resultClassName)) { + } elseif ($autoloader->getFile($resultClassName)) { $this->_addError('Result class ' . $resultClassName . ' already exists.'); return false; } elseif (!$this->_ioObject->makeGenerationDirectory()) { diff --git a/lib/Magento/Framework/Code/Generator/Io.php b/lib/Magento/Framework/Code/Generator/Io.php index 57ff61a71d0..5f4e0c85fe3 100644 --- a/lib/Magento/Framework/Code/Generator/Io.php +++ b/lib/Magento/Framework/Code/Generator/Io.php @@ -107,7 +107,7 @@ class Io public function getResultFileName($className) { $autoloader = $this->_autoloader; - $resultFileName = $autoloader::getFilePath($className); + $resultFileName = $autoloader->getFilePath($className); return $this->_generationDirectory . $resultFileName; } diff --git a/lib/Magento/Framework/Data/Form/Element/Label.php b/lib/Magento/Framework/Data/Form/Element/Label.php index 94fda10b579..5308d0b3d1c 100644 --- a/lib/Magento/Framework/Data/Form/Element/Label.php +++ b/lib/Magento/Framework/Data/Form/Element/Label.php @@ -59,8 +59,7 @@ class Label extends \Magento\Framework\Data\Form\Element\AbstractElement public function getElementHtml() { $html = $this->getBold() ? '<div class="control-value special">' : '<div class="control-value">'; - $html .= $this->getEscapedValue(); - $html .= $this->getBold() ? '</div>' : '</div>'; + $html .= $this->getEscapedValue() . '</div>'; $html .= $this->getAfterElementHtml(); return $html; } diff --git a/lib/Magento/Framework/Data/Form/Element/Note.php b/lib/Magento/Framework/Data/Form/Element/Note.php index 91667b72ea9..e4d7448632d 100644 --- a/lib/Magento/Framework/Data/Form/Element/Note.php +++ b/lib/Magento/Framework/Data/Form/Element/Note.php @@ -58,8 +58,13 @@ class Note extends AbstractElement */ public function getElementHtml() { - $html = '<div id="' . $this->getHtmlId() . '" class="control-value">' . $this->getText() . '</div>'; - $html .= $this->getAfterElementHtml(); + $html = $this->getBeforeElementHtml() + . '<div id="' + . $this->getHtmlId() + . '" class="control-value">' + . $this->getText() + . '</div>' + . $this->getAfterElementHtml(); return $html; } } diff --git a/lib/Magento/Framework/Filesystem/File/ReadFactory.php b/lib/Magento/Framework/Filesystem/File/ReadFactory.php index 83860377a33..c3cef19a6cf 100644 --- a/lib/Magento/Framework/Filesystem/File/ReadFactory.php +++ b/lib/Magento/Framework/Filesystem/File/ReadFactory.php @@ -50,7 +50,8 @@ class ReadFactory */ public function create($path, $protocol = null, DriverInterface $driver = null) { - $driver = $protocol ? $this->driverFactory->get($protocol, get_class($driver)) : $driver; + $driverClassName = is_null($driver) ? null : get_class($driver); + $driver = $protocol ? $this->driverFactory->get($protocol, $driverClassName) : $driver; return new \Magento\Framework\Filesystem\File\Read($path, $driver); } } diff --git a/lib/Magento/Framework/Less/File/Source/Base.php b/lib/Magento/Framework/Less/File/Source/Base.php index 42b50514f72..2f03cd47f09 100644 --- a/lib/Magento/Framework/Less/File/Source/Base.php +++ b/lib/Magento/Framework/Less/File/Source/Base.php @@ -79,7 +79,7 @@ class Base implements SourceInterface continue; } $moduleFull = "{$matches['namespace']}_{$matches['module']}"; - $result[] = $this->fileFactory->create($filename, $moduleFull, $theme); + $result[] = $this->fileFactory->create($filename, $moduleFull); } return $result; } diff --git a/lib/Magento/Framework/Less/File/Source/Theme.php b/lib/Magento/Framework/Less/File/Source/Theme.php index bf2f648195a..8f76b7c0fc0 100644 --- a/lib/Magento/Framework/Less/File/Source/Theme.php +++ b/lib/Magento/Framework/Less/File/Source/Theme.php @@ -75,7 +75,7 @@ class Theme implements SourceInterface if (!preg_match($pattern, $filename, $matches)) { continue; } - $result[] = $this->fileFactory->create($filename, $matches['moduleName'], $theme); + $result[] = $this->fileFactory->create($filename, $matches['moduleName']); } return $result; diff --git a/lib/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php b/lib/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php index a5398106eb7..456c5ba99bf 100644 --- a/lib/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php +++ b/lib/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Adjustment/Calculator.php b/lib/Magento/Framework/Pricing/Adjustment/Calculator.php index ae19f544514..3c71b2e50f3 100644 --- a/lib/Magento/Framework/Pricing/Adjustment/Calculator.php +++ b/lib/Magento/Framework/Pricing/Adjustment/Calculator.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -46,6 +48,9 @@ class Calculator implements CalculatorInterface } /** + * Retrieve Amount object based on given float amount, product and exclude option. + * It is possible to pass "true" or adjustment code to exclude all or specific adjustment from an amount. + * * @param float|string $amount * @param SaleableInterface $saleableItem * @param null|bool|string $exclude diff --git a/lib/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php b/lib/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php index c7dca4ea6af..1ce2dee55f8 100644 --- a/lib/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php +++ b/lib/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Adjustment/Collection.php b/lib/Magento/Framework/Pricing/Adjustment/Collection.php index 7c0f33fdadb..7bc6a43b27e 100644 --- a/lib/Magento/Framework/Pricing/Adjustment/Collection.php +++ b/lib/Magento/Framework/Pricing/Adjustment/Collection.php @@ -18,14 +18,14 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ namespace Magento\Framework\Pricing\Adjustment; -use Magento\Framework\Pricing\Adjustment\AdjustmentInterface; - /** * Adjustment collection model */ diff --git a/lib/Magento/Framework/Pricing/Adjustment/Factory.php b/lib/Magento/Framework/Pricing/Adjustment/Factory.php index 107a8d7f8b5..8192001c7d4 100644 --- a/lib/Magento/Framework/Pricing/Adjustment/Factory.php +++ b/lib/Magento/Framework/Pricing/Adjustment/Factory.php @@ -56,12 +56,12 @@ class Factory */ public function create($className, array $arguments = []) { - $price = $this->objectManager->create($className, $arguments); - if (!$price instanceof AdjustmentInterface) { + $adjustment = $this->objectManager->create($className, $arguments); + if (!$adjustment instanceof AdjustmentInterface) { throw new \InvalidArgumentException( $className . ' doesn\'t implement \Magento\Framework\Pricing\Adjustment\AdjustmentInterface' ); } - return $price; + return $adjustment; } } diff --git a/lib/Magento/Framework/Pricing/Adjustment/Pool.php b/lib/Magento/Framework/Pricing/Adjustment/Pool.php index dd6a7733b44..64d94aa307e 100644 --- a/lib/Magento/Framework/Pricing/Adjustment/Pool.php +++ b/lib/Magento/Framework/Pricing/Adjustment/Pool.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Amount/AmountInterface.php b/lib/Magento/Framework/Pricing/Amount/AmountInterface.php index d8140403a2a..c84698ac19d 100644 --- a/lib/Magento/Framework/Pricing/Amount/AmountInterface.php +++ b/lib/Magento/Framework/Pricing/Amount/AmountInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Amount/Base.php b/lib/Magento/Framework/Pricing/Amount/Base.php index 02876f2c2b8..1b3b2f0bcfd 100644 --- a/lib/Magento/Framework/Pricing/Amount/Base.php +++ b/lib/Magento/Framework/Pricing/Amount/Base.php @@ -173,11 +173,9 @@ class Base implements AmountInterface { $this->baseAmount = $this->amount; $this->totalAdjustmentAmount = 0.; - if ($this->adjustmentAmounts) { - foreach ($this->adjustmentAmounts as $amount) { - $this->baseAmount -= $amount; - $this->totalAdjustmentAmount += $amount; - } + foreach ($this->adjustmentAmounts as $amount) { + $this->baseAmount -= $amount; + $this->totalAdjustmentAmount += $amount; } } } diff --git a/lib/Magento/Framework/Pricing/Object/SaleableInterface.php b/lib/Magento/Framework/Pricing/Object/SaleableInterface.php index ab93e715a4c..5e9a6ac8fe3 100644 --- a/lib/Magento/Framework/Pricing/Object/SaleableInterface.php +++ b/lib/Magento/Framework/Pricing/Object/SaleableInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -25,28 +27,35 @@ namespace Magento\Framework\Pricing\Object; /** - * //@TODO Templates invoke methods that are not defined in the interface: - * getProductUrl(): - * /app\code\Magento\Catalog\view\frontend\product\price\final_price.phtml - * /app\code\Magento\Catalog\view\frontend\product\price\msrp_item.phtml - * - * getId() - /app\code\Magento\Catalog\view\frontend\product\price\final_price.phtml - * getMsrp() - /app\code\Magento\Catalog\view\frontend\product\price\msrp_item.phtml + * Interface SaleableInterface */ interface SaleableInterface { /** + * Returns PriceInfo container of saleable item + * * @return \Magento\Framework\Pricing\PriceInfoInterface */ public function getPriceInfo(); /** + * Returns type identifier of saleable item + * * @return string */ public function getTypeId(); /** + * Returns identifier of saleable item + * * @return int */ public function getId(); + + /** + * Returns quantity of saleable item + * + * @return float + */ + public function getQty(); } diff --git a/lib/Magento/Framework/Pricing/Price/AbstractPrice.php b/lib/Magento/Framework/Pricing/Price/AbstractPrice.php new file mode 100644 index 00000000000..d00f8f38eb2 --- /dev/null +++ b/lib/Magento/Framework/Pricing/Price/AbstractPrice.php @@ -0,0 +1,134 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Framework\Pricing\Amount\AmountInterface; +use Magento\Framework\Pricing\Adjustment\CalculatorInterface; +use Magento\Framework\Pricing\PriceInfoInterface; + +/** + * Class AbstractPrice + * Should be the base for creating any Price type class + */ +abstract class AbstractPrice implements PriceInterface +{ + /** + * Default price type + */ + const PRICE_CODE = 'abstract_price'; + + /** + * @var AmountInterface + */ + protected $amount; + + /** + * @var \Magento\Framework\Pricing\Adjustment\Calculator + */ + protected $calculator; + + /** + * @var SaleableInterface + */ + protected $product; + + /** + * @var string + */ + protected $priceType; + + /** + * @var float + */ + protected $quantity; + + /** + * @var PriceInfoInterface + */ + protected $priceInfo; + + /** + * @var bool|float + */ + protected $value; + + /** + * @param SaleableInterface $saleableItem + * @param float $quantity + * @param CalculatorInterface $calculator + */ + public function __construct( + SaleableInterface $saleableItem, + $quantity, + CalculatorInterface $calculator + ) { + $this->product = $saleableItem; + $this->quantity = $quantity; + $this->calculator = $calculator; + $this->priceInfo = $saleableItem->getPriceInfo(); + } + + /** + * Get price value + * + * @return float|bool + */ + abstract public function getValue(); + + /** + * Get Price Amount object + * + * @return AmountInterface + */ + public function getAmount() + { + if (null === $this->amount) { + $this->amount = $this->calculator->getAmount($this->getValue(), $this->product); + } + return $this->amount; + } + + /** + * @param float $amount + * @param null|bool|string $exclude + * @return AmountInterface|bool|float + */ + public function getCustomAmount($amount = null, $exclude = null) + { + $amount = (null === $amount) ? $this->getValue() : $amount; + return $this->calculator->getAmount($amount, $this->product, $exclude); + } + + /** + * Get price type code + * + * @return string + */ + public function getPriceCode() + { + return static::PRICE_CODE; + } +} diff --git a/lib/Magento/Framework/Pricing/Price/BasePriceProviderInterface.php b/lib/Magento/Framework/Pricing/Price/BasePriceProviderInterface.php new file mode 100644 index 00000000000..00634ae0f48 --- /dev/null +++ b/lib/Magento/Framework/Pricing/Price/BasePriceProviderInterface.php @@ -0,0 +1,35 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category Magento + * @package Magento_Pricing + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +/** + * Interface BasePriceProviderInterface + */ +interface BasePriceProviderInterface +{ + +} diff --git a/lib/Magento/Framework/Pricing/Price/Collection.php b/lib/Magento/Framework/Pricing/Price/Collection.php new file mode 100644 index 00000000000..ba2cb3af39e --- /dev/null +++ b/lib/Magento/Framework/Pricing/Price/Collection.php @@ -0,0 +1,149 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +use \Magento\Framework\ObjectManager; +use \Magento\Framework\Pricing\Object\SaleableInterface; + +/** + * Class Collection + */ +class Collection implements \Iterator +{ + /** + * @var Pool + */ + protected $pool; + + /** + * @var \Magento\Framework\Pricing\Object\SaleableInterface + */ + protected $saleableItem; + + /** + * @var \Magento\Framework\Pricing\Price\Factory + */ + protected $priceFactory; + + /** + * @var float + */ + protected $quantity; + + /** + * @var array + */ + protected $contains; + + /** + * @var array + */ + protected $excludes; + + /** + * Constructor + * + * @param SaleableInterface $saleableItem + * @param Factory $priceFactory + * @param Pool $pool + * @param float $quantity + */ + public function __construct( + SaleableInterface $saleableItem, + Factory $priceFactory, + Pool $pool, + $quantity + ) { + $this->saleableItem = $saleableItem; + $this->priceFactory = $priceFactory; + $this->pool = $pool; + $this->quantity = $quantity; + } + + /** + * Reset the Collection to the first element + * + * @return mixed|void + */ + public function rewind() + { + return $this->pool->rewind(); + } + + /** + * Return the current element + * + * @return \Magento\Framework\Pricing\Price\PriceInterface + */ + public function current() + { + return $this->get($this->key()); + } + + /** + * Return the key of the current element + * + * @return string + */ + public function key() + { + return $this->pool->key(); + } + + /** + * Move forward to next element + * + * @return mixed|void + */ + public function next() + { + return $this->pool->next(); + } + + /** + * Checks if current position is valid + * + * @return bool + */ + public function valid() + { + return $this->pool->valid(); + } + + /** + * Returns price model by code + * + * @param string $code + * @return PriceInterface + */ + public function get($code) + { + return $this->priceFactory->create( + $this->saleableItem, + $this->pool[$code], + $this->quantity + ); + } +} diff --git a/lib/Magento/Framework/Pricing/Price/Factory.php b/lib/Magento/Framework/Pricing/Price/Factory.php index 0fb0056269c..22897b2d173 100644 --- a/lib/Magento/Framework/Pricing/Price/Factory.php +++ b/lib/Magento/Framework/Pricing/Price/Factory.php @@ -51,16 +51,16 @@ class Factory /** * Create Price object for particular product * - * @param SaleableInterface $salableItem + * @param SaleableInterface $saleableItem * @param string $className * @param float $quantity * @param array $arguments * @throws \InvalidArgumentException * @return \Magento\Framework\Pricing\Price\PriceInterface */ - public function create(SaleableInterface $salableItem, $className, $quantity, array $arguments = []) + public function create(SaleableInterface $saleableItem, $className, $quantity, array $arguments = []) { - $arguments['salableItem'] = $salableItem; + $arguments['saleableItem'] = $saleableItem; $arguments['quantity'] = $quantity; $price = $this->objectManager->create($className, $arguments); if (!$price instanceof PriceInterface) { diff --git a/lib/Magento/Framework/Pricing/Price/Pool.php b/lib/Magento/Framework/Pricing/Price/Pool.php new file mode 100644 index 00000000000..c42c39a3873 --- /dev/null +++ b/lib/Magento/Framework/Pricing/Price/Pool.php @@ -0,0 +1,162 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@magentocommerce.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Framework\Pricing\Price; + +/** + * Class Pool + */ +class Pool implements \Iterator, \ArrayAccess +{ + /** + * @var \Magento\Framework\Pricing\Price\PriceInterface[] + */ + protected $prices; + + /** + * @param array $prices + * @param \Iterator $target + */ + public function __construct( + array $prices, + \Iterator $target = null + ) { + $this->prices = $prices; + foreach ($target ?: [] as $code => $class) { + if (empty($this->prices[$code])) { + $this->prices[$code] = $class; + } + } + } + + /** + * Reset the Collection to the first element + * + * @return mixed + */ + public function rewind() + { + return reset($this->prices); + } + + /** + * Return the current element + * + * @return mixed + */ + public function current() + { + return current($this->prices); + } + + /** + * Return the key of the current element + * + * @return string + */ + public function key() + { + return key($this->prices); + } + + /** + * Move forward to next element + * + * @return mixed + */ + public function next() + { + return next($this->prices); + } + + /** + * Checks if current position is valid + * + * @return bool + */ + public function valid() + { + return (bool)$this->key(); + } + + /** + * Returns price class by code + * + * @param string $code + * @return string + */ + public function get($code) + { + return $this->prices[$code]; + } + + /** + * The value to set. + * + * @param string $offset + * @param string $value + * @return void + */ + public function offsetSet($offset, $value) + { + if (is_null($offset)) { + $this->prices[] = $value; + } else { + $this->prices[$offset] = $value; + } + } + + /** + * The return value will be casted to boolean if non-boolean was returned. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->prices[$offset]); + } + + /** + * The offset to unset. + * + * @param string $offset + * @return void + */ + public function offsetUnset($offset) + { + unset($this->prices[$offset]); + } + + /** + * The offset to retrieve. + * + * @param string $offset + * @return string + */ + public function offsetGet($offset) + { + return isset($this->prices[$offset]) ? $this->prices[$offset] : null; + } +} diff --git a/lib/Magento/Framework/Pricing/Price/PriceInterface.php b/lib/Magento/Framework/Pricing/Price/PriceInterface.php index f38b6973ae5..066d65fd877 100644 --- a/lib/Magento/Framework/Pricing/Price/PriceInterface.php +++ b/lib/Magento/Framework/Pricing/Price/PriceInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -36,7 +38,7 @@ interface PriceInterface * * @return string */ - public function getPriceType(); + public function getPriceCode(); /** * Get price value diff --git a/lib/Magento/Framework/Pricing/PriceComposite.php b/lib/Magento/Framework/Pricing/PriceComposite.php deleted file mode 100644 index e9a9f9b771e..00000000000 --- a/lib/Magento/Framework/Pricing/PriceComposite.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - */ - -namespace Magento\Framework\Pricing; - -use Magento\Framework\Pricing\Object\SaleableInterface; -use Magento\Framework\Pricing\Price\Factory as PriceFactory; -use Magento\Framework\Pricing\Price\PriceInterface; - -/** - * Composite price model - */ -class PriceComposite -{ - /** - * @var PriceFactory - */ - protected $priceFactory; - - /** - * @var array - */ - protected $metadata; - - /** - * @param PriceFactory $priceFactory - * @param array $metadata - */ - public function __construct(PriceFactory $priceFactory, array $metadata = []) - { - $this->priceFactory = $priceFactory; - $this->metadata = $metadata; - } - - /** - * @return array - */ - public function getPriceCodes() - { - return array_keys($this->metadata); - } - - /** - * Returns metadata for prices - * - * @return array - */ - public function getMetadata() - { - return $this->metadata; - } - - /** - * @param SaleableInterface $salableItem - * @param string $priceCode - * @param float $quantity - * @return PriceInterface - * @throws \InvalidArgumentException - */ - public function createPriceObject(SaleableInterface $salableItem, $priceCode, $quantity) - { - if (!isset($this->metadata[$priceCode])) { - throw new \InvalidArgumentException($priceCode . ' is not registered in prices list'); - } - $className = $this->metadata[$priceCode]['class']; - return $this->priceFactory->create($salableItem, $className, $quantity); - } -} diff --git a/lib/Magento/Framework/Pricing/PriceCurrencyInterface.php b/lib/Magento/Framework/Pricing/PriceCurrencyInterface.php index 621bc80d65d..91a446753b3 100644 --- a/lib/Magento/Framework/Pricing/PriceCurrencyInterface.php +++ b/lib/Magento/Framework/Pricing/PriceCurrencyInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/PriceInfo/Base.php b/lib/Magento/Framework/Pricing/PriceInfo/Base.php index 00e4645b03a..18751c3f389 100644 --- a/lib/Magento/Framework/Pricing/PriceInfo/Base.php +++ b/lib/Magento/Framework/Pricing/PriceInfo/Base.php @@ -24,33 +24,23 @@ namespace Magento\Framework\Pricing\PriceInfo; -use Magento\Framework\Pricing\Amount\AmountFactory; use Magento\Framework\Pricing\PriceInfoInterface; -use Magento\Framework\Pricing\PriceComposite; use Magento\Framework\Pricing\Price\PriceInterface; use Magento\Framework\Pricing\Adjustment\Collection; use Magento\Framework\Pricing\Adjustment\AdjustmentInterface; -use Magento\Framework\Pricing\Object\SaleableInterface; +use Magento\Framework\Pricing\Price\Collection as PriceCollection; /** + * Class Base * Price info base model + * @package Magento\Framework\Pricing\PriceInfo */ class Base implements PriceInfoInterface { /** - * @var SaleableInterface + * @var PriceCollection */ - protected $saleableItem; - - /** - * @var PriceComposite - */ - protected $prices; - - /** - * @var PriceInterface[] - */ - protected $priceInstances; + protected $priceCollection; /** * @var Collection @@ -58,85 +48,36 @@ class Base implements PriceInfoInterface protected $adjustmentCollection; /** - * @var float - */ - protected $quantity; - - /** - * @var AmountFactory - */ - protected $amountFactory; - - /** - * @param SaleableInterface $saleableItem - * @param PriceComposite $prices + * @param PriceCollection $prices * @param Collection $adjustmentCollection - * @param AmountFactory $amountFactory - * @param float $quantity */ public function __construct( - SaleableInterface $saleableItem, - PriceComposite $prices, - Collection $adjustmentCollection, - AmountFactory $amountFactory, - $quantity = self::PRODUCT_QUANTITY_DEFAULT + PriceCollection $prices, + Collection $adjustmentCollection ) { - $this->saleableItem = $saleableItem; - $this->prices = $prices; $this->adjustmentCollection = $adjustmentCollection; - $this->amountFactory = $amountFactory; - $this->quantity = $quantity; + $this->priceCollection = $prices; } /** - * @return PriceInterface[] + * Returns array of prices + * + * @return PriceCollection */ public function getPrices() { - // check if all prices initialized - $this->initPrices(); - return $this->priceInstances; + return $this->priceCollection; } /** - * Init price types + * Returns price by code * - * @return $this - */ - protected function initPrices() - { - $prices = $this->prices->getPriceCodes(); - foreach ($prices as $code) { - if (!isset($this->priceInstances[$code])) { - $this->priceInstances[$code] = $this->prices->createPriceObject( - $this->saleableItem, - $code, - $this->quantity - ); - } - } - return $this; - } - - /** * @param string $priceCode - * @param float|null $quantity * @return PriceInterface */ - public function getPrice($priceCode, $quantity = null) + public function getPrice($priceCode) { - if (!isset($this->priceInstances[$priceCode]) && $quantity === null) { - $this->priceInstances[$priceCode] = $this->prices->createPriceObject( - $this->saleableItem, - $priceCode, - $this->quantity - ); - return $this->priceInstances[$priceCode]; - } elseif (isset($this->priceInstances[$priceCode]) && $quantity === null) { - return $this->priceInstances[$priceCode]; - } else { - return $this->prices->createPriceObject($this->saleableItem, $priceCode, $quantity); - } + return $this->priceCollection->get($priceCode); } /** @@ -160,23 +101,4 @@ class Base implements PriceInfoInterface { return $this->adjustmentCollection->getItemByCode($adjustmentCode); } - - /** - * Returns prices included in base price - * - * @return array - */ - public function getPricesIncludedInBase() - { - $prices = []; - foreach ($this->prices->getMetadata() as $code => $price) { - if (isset($price['include_in_base_price']) && $price['include_in_base_price']) { - $priceModel = $this->getPrice($code, $this->quantity); - if ($priceModel->getValue() !== false) { - $prices[] = $priceModel; - } - } - } - return $prices; - } } diff --git a/lib/Magento/Framework/Pricing/PriceInfo/Factory.php b/lib/Magento/Framework/Pricing/PriceInfo/Factory.php index 09ad85628bd..753af9fb19a 100644 --- a/lib/Magento/Framework/Pricing/PriceInfo/Factory.php +++ b/lib/Magento/Framework/Pricing/PriceInfo/Factory.php @@ -27,6 +27,7 @@ */ namespace Magento\Framework\Pricing\PriceInfo; +use Magento\Framework\ObjectManager; use Magento\Framework\Pricing\Object\SaleableInterface; /** @@ -34,11 +35,6 @@ use Magento\Framework\Pricing\Object\SaleableInterface; */ class Factory { - /** - * Default Price Info class - */ - const DEFAULT_PRICE_INFO_CLASS = 'Magento\Framework\Pricing\PriceInfoInterface'; - /** * List of Price Info classes by product types * @@ -49,7 +45,7 @@ class Factory /** * Object Manager * - * @var \Magento\Framework\ObjectManager + * @var ObjectManager */ protected $objectManager; @@ -59,8 +55,10 @@ class Factory * @param array $types * @param \Magento\Framework\ObjectManager $objectManager */ - public function __construct(array $types, \Magento\Framework\ObjectManager $objectManager) - { + public function __construct( + array $types, + ObjectManager $objectManager + ) { $this->types = $types; $this->objectManager = $objectManager; } @@ -76,19 +74,33 @@ class Factory public function create(SaleableInterface $saleableItem, array $arguments = []) { $type = $saleableItem->getTypeId(); - $className = isset($this->types[$type]) ? $this->types[$type] : self::DEFAULT_PRICE_INFO_CLASS; - $arguments['saleableItem'] = $saleableItem; - if ($saleableItem->getQty()) { - $arguments['quantity'] = $saleableItem->getQty(); + if (isset($this->types[$type]['infoClass'])) { + $priceInfo = $this->types[$type]['infoClass']; + } else { + $priceInfo = $this->types['default']['infoClass']; } - $priceInfo = $this->objectManager->create($className, $arguments); - if (!$priceInfo instanceof \Magento\Framework\Pricing\PriceInfoInterface) { - throw new \InvalidArgumentException( - $className . ' doesn\'t implement \Magento\Framework\Pricing\PriceInfoInterface' - ); + if (isset($this->types[$type]['prices'])) { + $priceCollection = $this->types[$type]['prices']; + } else { + $priceCollection = $this->types['default']['prices']; } - return $priceInfo; + + $arguments['saleableItem'] = $saleableItem; + $quantity = $saleableItem->getQty(); + if ($quantity) { + $arguments['quantity'] = $quantity; + } + + $arguments['prices'] = $this->objectManager->create( + $priceCollection, + [ + 'saleableItem' => $arguments['saleableItem'], + 'quantity' => $quantity + ] + ); + + return $this->objectManager->create($priceInfo, $arguments); } } diff --git a/lib/Magento/Framework/Pricing/PriceInfoInterface.php b/lib/Magento/Framework/Pricing/PriceInfoInterface.php index 7f29615106a..247b0cd9e7d 100644 --- a/lib/Magento/Framework/Pricing/PriceInfoInterface.php +++ b/lib/Magento/Framework/Pricing/PriceInfoInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -38,30 +40,32 @@ interface PriceInfoInterface const PRODUCT_QUANTITY_DEFAULT = 1.; /** + * Returns array of prices + * * @return PriceInterface[] */ public function getPrices(); /** + * Returns price by code + * * @param string $priceCode - * @param float|null $quantity * @return PriceInterface */ - public function getPrice($priceCode, $quantity = null); + public function getPrice($priceCode); /** + * Get all registered adjustments + * * @return AdjustmentInterface[] */ public function getAdjustments(); /** + * Get adjustment by code + * * @param string $adjustmentCode * @return AdjustmentInterface */ public function getAdjustment($adjustmentCode); - - /** - * @return PriceInterface[] - */ - public function getPricesIncludedInBase(); } diff --git a/lib/Magento/Framework/Pricing/Render.php b/lib/Magento/Framework/Pricing/Render.php index 03f9efb022b..dbd6f5048b4 100644 --- a/lib/Magento/Framework/Pricing/Render.php +++ b/lib/Magento/Framework/Pricing/Render.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -113,14 +115,7 @@ class Render extends AbstractBlock // obtain concrete Price Render $priceRender = $rendererPool->createPriceRender($priceCode, $saleableItem, $useArguments); - if ($priceRender) { - //@TODO PriceBoxRenderInterface does not contain toHtml() method - $result = $priceRender->toHtml(); - } else { - $result = ''; - } - // return rendered output - return $result; + return $priceRender->toHtml(); } /** @@ -149,12 +144,6 @@ class Render extends AbstractBlock // obtain concrete Amount Render $amountRender = $rendererPool->createAmountRender($amount, $saleableItem, $price, $useArguments); - if ($amountRender) { - $result = $amountRender->toHtml(); - } else { - $result = ''; - } - // return rendered output - return $result; + return $amountRender->toHtml(); } } diff --git a/lib/Magento/Framework/Pricing/Render/AbstractAdjustment.php b/lib/Magento/Framework/Pricing/Render/AbstractAdjustment.php index 6da9aeb97f0..3fe9d92e2c9 100644 --- a/lib/Magento/Framework/Pricing/Render/AbstractAdjustment.php +++ b/lib/Magento/Framework/Pricing/Render/AbstractAdjustment.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -63,7 +65,7 @@ abstract class AbstractAdjustment extends Template implements AdjustmentRenderIn /** * @param AmountRenderInterface $amountRender * @param array $arguments - * @return void + * @return string */ public function render(AmountRenderInterface $amountRender, array $arguments = []) { @@ -136,7 +138,7 @@ abstract class AbstractAdjustment extends Template implements AdjustmentRenderIn } /** - * @return void + * @return string */ abstract protected function apply(); } diff --git a/lib/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php b/lib/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php index 24a38d99cd0..b263114a961 100644 --- a/lib/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php +++ b/lib/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Render/Amount.php b/lib/Magento/Framework/Pricing/Render/Amount.php index fd8e5d68b84..0c48a142024 100644 --- a/lib/Magento/Framework/Pricing/Render/Amount.php +++ b/lib/Magento/Framework/Pricing/Render/Amount.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -67,7 +69,7 @@ class Amount extends Template implements AmountRenderInterface protected $rendererPool; /** - * @var float + * @var AmountInterface */ protected $amount; @@ -152,16 +154,6 @@ class Amount extends Template implements AmountRenderInterface return $this->price; } - /** - * @param string $code - * @param string $html - * @return void - */ - public function addAdjustmentHtml($code, $html) - { - $this->adjustmentsHtml[$code] = $html; - } - /** * @return bool */ @@ -183,10 +175,9 @@ class Amount extends Template implements AmountRenderInterface */ protected function _toHtml() { - // apply Price Adjustment Renders if available $adjustmentRenders = $this->getApplicableAdjustmentRenders(); if ($adjustmentRenders) { - $this->applyAdjustments($adjustmentRenders); + $this->adjustmentsHtml = $this->getAdjustments($adjustmentRenders); } $html = parent::_toHtml(); return $html; @@ -199,11 +190,7 @@ class Amount extends Template implements AmountRenderInterface */ protected function getApplicableAdjustmentRenders() { - if (!$this->hasSkipAdjustments()) { - return $this->getAdjustmentRenders(); - } else { - return []; - } + return (!$this->hasSkipAdjustments()) ? $this->getAdjustmentRenders() : []; } /** @@ -216,15 +203,20 @@ class Amount extends Template implements AmountRenderInterface /** * @param AdjustmentRenderInterface[] $adjustmentRenders - * @return void + * @return array */ - protected function applyAdjustments($adjustmentRenders) + protected function getAdjustments($adjustmentRenders) { $this->setAdjustmentCssClasses($adjustmentRenders); $data = $this->getData(); + $adjustments = []; foreach ($adjustmentRenders as $adjustmentRender) { - $adjustmentRender->render($this, $data); + $html = $adjustmentRender->render($this, $data); + if (trim($html)) { + $adjustments[$adjustmentRender->getAdjustmentCode()] = $html; + } } + return $adjustments; } /** diff --git a/lib/Magento/Framework/Pricing/Render/AmountRenderInterface.php b/lib/Magento/Framework/Pricing/Render/AmountRenderInterface.php index 1bbf8a69bbd..87e60dc7a0e 100644 --- a/lib/Magento/Framework/Pricing/Render/AmountRenderInterface.php +++ b/lib/Magento/Framework/Pricing/Render/AmountRenderInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -63,13 +65,6 @@ interface AmountRenderInterface */ public function getPrice(); - /** - * @param string $code - * @param string $html - * @return void - */ - public function addAdjustmentHtml($code, $html); - /** * @return string */ diff --git a/lib/Magento/Framework/Pricing/Render/Layout.php b/lib/Magento/Framework/Pricing/Render/Layout.php index 5c8b9662ce6..08e0d2a988f 100644 --- a/lib/Magento/Framework/Pricing/Render/Layout.php +++ b/lib/Magento/Framework/Pricing/Render/Layout.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Render/PriceBox.php b/lib/Magento/Framework/Pricing/Render/PriceBox.php index a7752d0fb85..f068656ba3c 100644 --- a/lib/Magento/Framework/Pricing/Render/PriceBox.php +++ b/lib/Magento/Framework/Pricing/Render/PriceBox.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -78,7 +80,7 @@ class PriceBox extends Template implements PriceBoxRenderInterface protected function _toHtml() { $cssClasses = $this->hasData('css_classes') ? explode(' ', $this->getData('css_classes')) : []; - $cssClasses[] = 'price-' . $this->getPrice()->getPriceType(); + $cssClasses[] = 'price-' . $this->getPrice()->getPriceCode(); $this->setData('css_classes', implode(' ', $cssClasses)); return parent::_toHtml(); } @@ -88,7 +90,6 @@ class PriceBox extends Template implements PriceBoxRenderInterface */ public function getSaleableItem() { - // @todo move to abstract pricing block return $this->saleableItem; } @@ -97,7 +98,6 @@ class PriceBox extends Template implements PriceBoxRenderInterface */ public function getPrice() { - // @todo move to abstract pricing block return $this->price; } @@ -114,16 +114,8 @@ class PriceBox extends Template implements PriceBoxRenderInterface return $this->getData('price_id'); } $priceId = $this->saleableItem->getId(); - if ($this->hasData('price_id_prefix')) { - $prefix = $this->getData('price_id_prefix') . $priceId; - } else { - $prefix = $defaultPrefix; - } - if ($this->hasData('price_id_suffix')) { - $suffix = $this->getData('price_id_suffix'); - } else { - $suffix = $defaultSuffix; - } + $prefix = $this->hasData('price_id_prefix') ? $this->getData('price_id_prefix') : $defaultPrefix; + $suffix = $this->hasData('price_id_suffix') ? $this->getData('price_id_suffix') : $defaultSuffix; $priceId = $prefix . $priceId . $suffix; return $priceId; } @@ -132,12 +124,11 @@ class PriceBox extends Template implements PriceBoxRenderInterface * Retrieve price object of given type and quantity * * @param string $priceCode - * @param float|null $quantity * @return PriceInterface */ - public function getPriceType($priceCode, $quantity = null) + public function getPriceType($priceCode) { - return $this->saleableItem->getPriceInfo()->getPrice($priceCode, $quantity); + return $this->saleableItem->getPriceInfo()->getPrice($priceCode); } /** diff --git a/lib/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php b/lib/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php index 9948e167255..0a5c98d87ec 100644 --- a/lib/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php +++ b/lib/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php @@ -18,6 +18,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * + * @category Magento + * @package Magento_Pricing * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ diff --git a/lib/Magento/Framework/Pricing/Render/RendererPool.php b/lib/Magento/Framework/Pricing/Render/RendererPool.php index d7363e793cc..eb56815362d 100644 --- a/lib/Magento/Framework/Pricing/Render/RendererPool.php +++ b/lib/Magento/Framework/Pricing/Render/RendererPool.php @@ -126,7 +126,7 @@ class RendererPool extends AbstractBlock $renderClassName = self::AMOUNT_RENDERER_DEFAULT; if ($price) { - $priceCode = $price->getPriceType(); + $priceCode = $price->getPriceCode(); // implement class resolving fallback $pattern = [ $type . '/prices/' . $priceCode . '/amount_render_class', @@ -172,7 +172,7 @@ class RendererPool extends AbstractBlock public function getAdjustmentRenders(SaleableInterface $saleableItem = null, PriceInterface $price = null) { $itemType = is_null($saleableItem) ? 'default' : $saleableItem->getTypeId(); - $priceType = is_null($price) ? 'default' : $price->getPriceType(); + $priceType = is_null($price) ? 'default' : $price->getPriceCode(); $fallbackPattern = [ "{$itemType}/adjustments/{$priceType}", diff --git a/lib/Magento/Framework/Url.php b/lib/Magento/Framework/Url.php index a25696eb57c..a87fac692ba 100644 --- a/lib/Magento/Framework/Url.php +++ b/lib/Magento/Framework/Url.php @@ -560,9 +560,8 @@ class Url extends \Magento\Framework\Object implements \Magento\Framework\UrlInt 'controller_name' )->unsetData( 'action_name' - )->unsetData( - 'secure' ); + $this->_queryParamsResolver->unsetData('secure'); return $this->setData('route_name', $data); } @@ -607,7 +606,8 @@ class Url extends \Magento\Framework\Object implements \Magento\Framework\UrlInt if ($this->_getData('controller_name') == $data) { return $this; } - $this->unsetData('route_path')->unsetData('action_name')->unsetData('secure'); + $this->unsetData('route_path')->unsetData('action_name'); + $this->_queryParamsResolver->unsetData('secure'); return $this->setData('controller_name', $data); } @@ -635,7 +635,9 @@ class Url extends \Magento\Framework\Object implements \Magento\Framework\UrlInt return $this; } $this->unsetData('route_path'); - return $this->setData('action_name', $data)->unsetData('secure'); + $this->setData('action_name', $data); + $this->_queryParamsResolver->unsetData('secure'); + return $this; } /** diff --git a/lib/Magento/Framework/View/Design/Fallback/Factory.php b/lib/Magento/Framework/View/Design/Fallback/Factory.php index b3ce86e3aad..34b815f43c7 100644 --- a/lib/Magento/Framework/View/Design/Fallback/Factory.php +++ b/lib/Magento/Framework/View/Design/Fallback/Factory.php @@ -79,7 +79,8 @@ class Factory new Composite( array( new Theme(new Simple("{$themesDir}/<area>/<theme_path>/<namespace>_<module>")), - new Simple("{$modulesDir}/<namespace>/<module>/view/<area>") + new Simple("{$modulesDir}/<namespace>/<module>/view/<area>"), + new Simple("{$modulesDir}/<namespace>/<module>/view/base") ) ) ); @@ -123,7 +124,8 @@ class Factory ) ), new Simple("{$modulesDir}/<namespace>/<module>/view/<area>/i18n/<locale>", array('locale')), - new Simple("{$modulesDir}/<namespace>/<module>/view/<area>") + new Simple("{$modulesDir}/<namespace>/<module>/view/<area>"), + new Simple("{$modulesDir}/<namespace>/<module>/view/base") ) ) ); diff --git a/lib/Magento/Framework/View/Layout/File.php b/lib/Magento/Framework/View/Layout/File.php index 8f2c6388fcb..7d4def29ba3 100644 --- a/lib/Magento/Framework/View/Layout/File.php +++ b/lib/Magento/Framework/View/Layout/File.php @@ -51,6 +51,13 @@ class File */ protected $theme; + /** + * Base flag + * + * @var string + */ + protected $isBase; + /** * Identifier * @@ -64,12 +71,14 @@ class File * @param string $filename * @param string $module * @param ThemeInterface $theme + * @param bool $isBase */ - public function __construct($filename, $module, ThemeInterface $theme = null) + public function __construct($filename, $module, ThemeInterface $theme = null, $isBase = false) { $this->filename = $filename; $this->module = $module; $this->theme = $theme; + $this->isBase = $isBase; } /** @@ -130,8 +139,9 @@ class File public function getFileIdentifier() { if (null === $this->identifier) { - $theme = $this->getTheme() ? 'theme:' . $this->theme->getFullPath() : 'base'; - $this->identifier = $theme . '|module:' . $this->getModule() . '|file:' . $this->getName(); + $theme = $this->getTheme() ? ('|theme:' . $this->theme->getFullPath()) : ''; + $this->identifier = ($this->isBase ? 'base' : '') + . $theme . '|module:' . $this->getModule() . '|file:' . $this->getName(); } return $this->identifier; } diff --git a/lib/Magento/Framework/View/Layout/File/Factory.php b/lib/Magento/Framework/View/Layout/File/Factory.php index bae2b991fdc..cc5c65ab5d5 100644 --- a/lib/Magento/Framework/View/Layout/File/Factory.php +++ b/lib/Magento/Framework/View/Layout/File/Factory.php @@ -54,13 +54,14 @@ class Factory * @param string $filename * @param string $module * @param ThemeInterface|null $theme + * @param bool $isBase * @return \Magento\Framework\View\Layout\File */ - public function create($filename, $module, ThemeInterface $theme = null) + public function create($filename, $module, ThemeInterface $theme = null, $isBase = false) { return $this->objectManager->create( 'Magento\Framework\View\Layout\File', - array('filename' => $filename, 'module' => $module, 'theme' => $theme) + array('filename' => $filename, 'module' => $module, 'theme' => $theme, 'isBase' => $isBase) ); } } diff --git a/lib/Magento/Framework/View/Layout/File/Source/Base.php b/lib/Magento/Framework/View/Layout/File/Source/Base.php index ee0d12ddf93..0a01eeab412 100644 --- a/lib/Magento/Framework/View/Layout/File/Source/Base.php +++ b/lib/Magento/Framework/View/Layout/File/Source/Base.php @@ -69,13 +69,24 @@ class Base implements SourceInterface */ public function getFiles(ThemeInterface $theme, $filePath = '*') { + $result = []; $namespace = $module = '*'; + $sharedFiles = $this->modulesDirectory->search("{$namespace}/{$module}/view/base/layout/{$filePath}.xml"); + + $filePathPtn = strtr(preg_quote($filePath), array('\*' => '[^/]+')); + $pattern = "#(?<namespace>[^/]+)/(?<module>[^/]+)/view/base/layout/" . $filePathPtn . "\.xml$#i"; + foreach ($sharedFiles as $file) { + $filename = $this->modulesDirectory->getAbsolutePath($file); + if (!preg_match($pattern, $filename, $matches)) { + continue; + } + $moduleFull = "{$matches['namespace']}_{$matches['module']}"; + $result[] = $this->fileFactory->create($filename, $moduleFull, null, true); + } $area = $theme->getArea(); - $files = $this->modulesDirectory->search("{$namespace}/{$module}/view/{$area}/layout/{$filePath}.xml"); - $result = array(); - $filePath = strtr(preg_quote($filePath), array('\*' => '[^/]+')); - $pattern = "#(?<namespace>[^/]+)/(?<module>[^/]+)/view/{$area}/layout/" . $filePath . "\.xml$#i"; - foreach ($files as $file) { + $themeFiles = $this->modulesDirectory->search("{$namespace}/{$module}/view/{$area}/layout/{$filePath}.xml"); + $pattern = "#(?<namespace>[^/]+)/(?<module>[^/]+)/view/{$area}/layout/" . $filePathPtn . "\.xml$#i"; + foreach ($themeFiles as $file) { $filename = $this->modulesDirectory->getAbsolutePath($file); if (!preg_match($pattern, $filename, $matches)) { continue; diff --git a/lib/Magento/Framework/View/Layout/PageType/Config/Converter.php b/lib/Magento/Framework/View/Layout/PageType/Config/Converter.php index c6d6838f1c5..7761f12080f 100644 --- a/lib/Magento/Framework/View/Layout/PageType/Config/Converter.php +++ b/lib/Magento/Framework/View/Layout/PageType/Config/Converter.php @@ -30,7 +30,7 @@ class Converter implements \Magento\Framework\Config\ConverterInterface */ public function convert($source) { - $page_types = array(); + $pageTypes = array(); $xpath = new \DOMXPath($source); /** @var $widget \DOMNode */ @@ -42,8 +42,8 @@ class Converter implements \Magento\Framework\Config\ConverterInterface $pageArray = array("id" => $id, "label" => $label); - $page_types[$id] = $pageArray; + $pageTypes[$id] = $pageArray; } - return $page_types; + return $pageTypes; } } diff --git a/pub/cron.php b/pub/cron.php index 0d9152273bc..659ceeeca74 100644 --- a/pub/cron.php +++ b/pub/cron.php @@ -27,7 +27,6 @@ */ use Magento\Store\Model\StoreManager; - require dirname(__DIR__) . '/app/bootstrap.php'; umask(0); $params = array(StoreManager::PARAM_RUN_CODE => 'admin', \Magento\Store\Model\Store::CUSTOM_ENTRY_POINT_PARAM => true); diff --git a/pub/errors/404.php b/pub/errors/404.php index 369fd46b7ae..5fc9c46f398 100644 --- a/pub/errors/404.php +++ b/pub/errors/404.php @@ -27,7 +27,7 @@ require_once __DIR__ . '/../../app/bootstrap.php'; require_once 'processor.php'; -$processor = new Error_Processor( +$processor = new \Magento\Framework\Error\Processor( new \Magento\Framework\App\Response\Http( new \Magento\Framework\Stdlib\Cookie(), new \Magento\Framework\App\Http\Context() diff --git a/pub/errors/503.php b/pub/errors/503.php index 1561cda35b3..ca2046d9608 100644 --- a/pub/errors/503.php +++ b/pub/errors/503.php @@ -27,7 +27,7 @@ require_once __DIR__ . '/../../app/bootstrap.php'; require_once 'processor.php'; -$processor = new Error_Processor( +$processor = new \Magento\Framework\Error\Processor( new \Magento\Framework\App\Response\Http( new \Magento\Framework\Stdlib\Cookie(), new \Magento\Framework\App\Http\Context() diff --git a/pub/errors/noCache.php b/pub/errors/noCache.php index 318bfcd15ca..60994773b1e 100644 --- a/pub/errors/noCache.php +++ b/pub/errors/noCache.php @@ -26,7 +26,7 @@ require_once 'processor.php'; -$processor = new Error_Processor( +$processor = new \Magento\Framework\Error\Processor( new \Magento\Framework\App\Response\Http( new \Magento\Framework\Stdlib\Cookie(), new \Magento\Framework\App\Http\Context() diff --git a/pub/errors/processor.php b/pub/errors/processor.php index a3939406d20..0aef2466f9a 100644 --- a/pub/errors/processor.php +++ b/pub/errors/processor.php @@ -23,11 +23,12 @@ * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ +namespace Magento\Framework\Error; /** * Error processor */ -class Error_Processor +class Processor { const MAGE_ERRORS_LOCAL_XML = 'local.xml'; const MAGE_ERRORS_DESIGN_XML = 'design.xml'; @@ -133,7 +134,7 @@ class Error_Processor /** * Internal config object * - * @var stdClass + * @var \stdClass */ protected $_config; @@ -280,6 +281,7 @@ class Error_Processor /** * Retrieve base URL * + * @param bool $param * @return string */ public function getBaseUrl($param = false) @@ -320,6 +322,8 @@ class Error_Processor /** * Prepare config data + * + * @return void */ protected function _prepareConfig() { @@ -327,7 +331,7 @@ class Error_Processor $design = $this->_loadXml(self::MAGE_ERRORS_DESIGN_XML); //initial settings - $config = new stdClass(); + $config = new \stdClass(); $config->action = ''; $config->subject = 'Store Debug Information'; $config->email_address = ''; @@ -448,6 +452,7 @@ class Error_Processor * Set report data * * @param array $reportData + * @return void */ protected function _setReportData($reportData) { @@ -468,6 +473,7 @@ class Error_Processor * Create report * * @param array $reportData + * @return void */ public function saveReport($reportData) { @@ -500,6 +506,7 @@ class Error_Processor * Get report * * @param int $reportId + * @return void */ public function loadReport($reportId) { @@ -516,6 +523,7 @@ class Error_Processor /** * Send report * + * @return void */ public function sendReport() { @@ -575,8 +583,10 @@ class Error_Processor */ protected function _validate() { - $email = preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/', - $this->postData['email']); + $email = preg_match( + '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/', + $this->postData['email'] + ); return ($this->postData['firstName'] && $this->postData['lastName'] && $email); } @@ -584,9 +594,10 @@ class Error_Processor * Skin setter * * @param string $value - * @param stdClass $config + * @param \stdClass $config + * @return void */ - protected function _setSkin($value, stdClass $config = null) + protected function _setSkin($value, \stdClass $config = null) { if (preg_match('/^[a-z0-9_]+$/i', $value) && is_dir($this->_indexDir . self::ERROR_DIR . '/' . $value)) { if (!$config) { @@ -602,6 +613,8 @@ class Error_Processor /** * Set current report URL from current params + * + * @return void */ protected function _setReportUrl() { diff --git a/pub/errors/report.php b/pub/errors/report.php index 21c1ec99823..d272a6082e4 100644 --- a/pub/errors/report.php +++ b/pub/errors/report.php @@ -27,7 +27,7 @@ require_once __DIR__ . '/../../app/bootstrap.php'; require_once 'processor.php'; -$processor = new Error_Processor( +$processor = new \Magento\Framework\Error\Processor( new \Magento\Framework\App\Response\Http( new \Magento\Framework\Stdlib\Cookie(), new \Magento\Framework\App\Http\Context() diff --git a/pub/get.php b/pub/get.php index a4b687bc128..f79a6602b0f 100644 --- a/pub/get.php +++ b/pub/get.php @@ -84,11 +84,14 @@ if (empty($mediaDirectory)) { } $entryPoint = new \Magento\Framework\App\EntryPoint\EntryPoint(dirname(__DIR__), $params); -$entryPoint->run('Magento\Core\App\Media', array( - 'request' => $request, - 'workingDirectory' => __DIR__, - 'mediaDirectory' => $mediaDirectory, - 'configCacheFile' => $configCacheFile, - 'isAllowed' => $isAllowed, - 'relativeFileName' => $relativeFilename, -)); +$entryPoint->run( + 'Magento\Core\App\Media', + array( + 'request' => $request, + 'workingDirectory' => __DIR__, + 'mediaDirectory' => $mediaDirectory, + 'configCacheFile' => $configCacheFile, + 'isAllowed' => $isAllowed, + 'relativeFileName' => $relativeFilename, + ) +); diff --git a/pub/lib/headjs/head.load.min.js b/pub/lib/headjs/head.load.min.js deleted file mode 100644 index e384332d8f3..00000000000 --- a/pub/lib/headjs/head.load.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * HeadJS The only script in your <HEAD> - * Author Tero Piirainen (tipiirai) - * Maintainer Robert Hoffmann (itechnology) - * License MIT / http://bit.ly/mit-license - * - * http://headjs.com - */ -(function(e,t){"use strict";function y(e){if(e._done)return;e(),e._done=1}function b(e){var t=e.split("/"),n=t[t.length-1],r=n.indexOf("?");return r!=-1?n.substring(0,r):n}function w(e){var t;if(typeof e=="object")for(var n in e)e[n]&&(t={name:n,url:e[n]});else t={name:b(e),url:e};var r=l[t.name];return r&&r.url===t.url?r:(l[t.name]=t,t)}function E(e,t){if(!e)return;typeof e=="object"&&(e=[].slice.call(e));for(var n=0;n<e.length;n++)t.call(e,e[n],n)}function S(e){return Object.prototype.toString.call(e)=="[object Function]"}function x(e){e=e||l;var t;for(var n in e){if(e.hasOwnProperty(n)&&e[n].state!=g)return!1;t=!0}return t}function T(e){e.state=d,E(e.onpreload,function(e){e.call()})}function N(e,n){e.state===t&&(e.state=v,e.onpreload=[],k({src:e.url,type:"cache"},function(){T(e)}))}function C(e,t){if(e.state==g)return t&&t();if(e.state==m)return p.ready(e.name,t);if(e.state==v)return e.onpreload.push(function(){C(e,t)});e.state=m,k(e.url,function(){e.state=g,t&&t(),E(f[e.name],function(e){y(e)}),x()&&o&&E(f.ALL,function(e){y(e)})})}function k(e,t){var r=n.createElement("script");r.type="text/"+(e.type||"javascript"),r.src=e.src||e,r.async=!1,r.onreadystatechange=r.onload=function(){var e=r.readyState;!t.done&&(!e||/loaded|complete/.test(e))&&(t.done=!0,t())},(n.body||i).appendChild(r)}function L(){o||(o=!0,E(u,function(e){y(e)}))}var n=e.document,r=e.navigator,i=n.documentElement,s,o,u=[],a=[],f={},l={},c=n.createElement("script").async===!0||"MozAppearance"in n.documentElement.style||e.opera,h=e.head_conf&&e.head_conf.head||"head",p=e[h]=e[h]||function(){p.ready.apply(null,arguments)},d=1,v=2,m=3,g=4;c?p.js=function(){var e=arguments,t=e[e.length-1],n={};return S(t)||(t=null),E(e,function(r,i){r!=t&&(r=w(r),n[r.name]=r,C(r,t&&i==e.length-2?function(){x(n)&&y(t)}:null))}),p}:p.js=function(){var e=arguments,t=[].slice.call(e,1),n=t[0];return s?(n?(E(t,function(e){S(e)||N(w(e))}),C(w(e[0]),S(n)?n:function(){p.js.apply(null,t)})):C(w(e[0])),p):(a.push(function(){p.js.apply(null,e)}),p)},p.ready=function(e,t){if(e==n)return o?y(t):u.push(t),p;S(e)&&(t=e,e="ALL");if(typeof e!="string"||!S(t))return p;var r=l[e];if(r&&r.state==g||e=="ALL"&&x()&&o)return y(t),p;var i=f[e];return i?i.push(t):i=f[e]=[t],p},p.ready(n,function(){x()&&E(f.ALL,function(e){y(e)}),p.feature&&p.feature("domloaded",!0)});if(e.addEventListener)n.addEventListener("DOMContentLoaded",L,!1),e.addEventListener("load",L,!1);else if(e.attachEvent){n.attachEvent("onreadystatechange",function(){n.readyState==="complete"&&L()});var A=1;try{A=e.frameElement}catch(O){}!A&&i.doScroll&&function(){try{i.doScroll("left"),L()}catch(e){setTimeout(arguments.callee,1);return}}(),e.attachEvent("onload",L)}!n.readyState&&n.addEventListener&&(n.readyState="loading",n.addEventListener("DOMContentLoaded",handler=function(){n.removeEventListener("DOMContentLoaded",handler,!1),n.readyState="complete"},!1)),setTimeout(function(){s=!0,E(a,function(e){e()})},300)})(window); -- GitLab