diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
index a97293547e132..d654504a41e5c 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
@@ -19,20 +19,12 @@
-
+
\ No newline at end of file
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js
new file mode 100644
index 0000000000000..f3f6a5fb1a123
--- /dev/null
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js
@@ -0,0 +1,24 @@
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+*/
+
+define([
+ 'jquery',
+ 'Magento_Ui/js/modal/modal'
+], function ($) {
+ 'use strict';
+
+ return function (data, element) {
+ if (this.modal) {
+ this.modal.html($(element).html());
+ } else {
+ this.modal = $(element).modal({
+ modalClass: data.class,
+ type: 'popup',
+ buttons: []
+ });
+ }
+ this.modal.modal('openModal');
+ };
+});
diff --git a/app/code/Magento/Catalog/etc/adminhtml/menu.xml b/app/code/Magento/Catalog/etc/adminhtml/menu.xml
index aa910e6d5ade4..cfcce3a26cbec 100644
--- a/app/code/Magento/Catalog/etc/adminhtml/menu.xml
+++ b/app/code/Magento/Catalog/etc/adminhtml/menu.xml
@@ -12,7 +12,6 @@
-
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
index 89a4a2b07b40d..59009cc2d5637 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
@@ -10,6 +10,7 @@
use Magento\CatalogImportExport\Model\Import\Product\MediaGalleryProcessor;
use Magento\CatalogImportExport\Model\Import\Product\ImageTypeProcessor;
use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface;
+use Magento\CatalogInventory\Api\Data\StockItemInterface;
use Magento\CatalogImportExport\Model\StockItemImporterInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\ObjectManager;
@@ -2618,7 +2619,10 @@ private function _setStockUseConfigFieldsValues($rowData)
{
$useConfigFields = [];
foreach ($rowData as $key => $value) {
- $useConfigName = self::INVENTORY_USE_CONFIG_PREFIX . $key;
+ $useConfigName = $key === StockItemInterface::ENABLE_QTY_INCREMENTS
+ ? StockItemInterface::USE_CONFIG_ENABLE_QTY_INC
+ : self::INVENTORY_USE_CONFIG_PREFIX . $key;
+
if (isset($this->defaultStockData[$key])
&& isset($this->defaultStockData[$useConfigName])
&& !empty($value)
diff --git a/app/code/Magento/Customer/Block/Widget/Dob.php b/app/code/Magento/Customer/Block/Widget/Dob.php
index e456efbc605fa..1a1d5d81bf13d 100644
--- a/app/code/Magento/Customer/Block/Widget/Dob.php
+++ b/app/code/Magento/Customer/Block/Widget/Dob.php
@@ -127,7 +127,8 @@ protected function getFormFilter()
protected function applyOutputFilter($value)
{
$filter = $this->getFormFilter();
- if ($filter) {
+ if ($filter && $value) {
+ $value = date('Y-m-d', $this->getTime());
$value = $filter->outputFilter($value);
}
return $value;
diff --git a/app/code/Magento/Customer/view/frontend/templates/form/login.phtml b/app/code/Magento/Customer/view/frontend/templates/form/login.phtml
index 77e250c5de923..2d44dde215139 100644
--- a/app/code/Magento/Customer/view/frontend/templates/form/login.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/form/login.phtml
@@ -24,7 +24,7 @@
@@ -43,12 +43,3 @@
-
diff --git a/app/code/Magento/Customer/view/frontend/templates/form/register.phtml b/app/code/Magento/Customer/view/frontend/templates/form/register.phtml
index 43e4e92fd0904..6cdb8fc44f665 100644
--- a/app/code/Magento/Customer/view/frontend/templates/form/register.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/form/register.phtml
@@ -131,7 +131,7 @@
diff --git a/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js b/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js
index 3fc65c266e895..c1ca395e46cbb 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js
@@ -34,7 +34,7 @@ define([
/** Show login popup window */
showModal: function () {
- $(this.modalWindow).modal('openModal');
+ $(this.modalWindow).modal('openModal').trigger('contentUpdated');
}
};
});
diff --git a/app/code/Magento/Customer/view/frontend/web/js/trim-username.js b/app/code/Magento/Customer/view/frontend/web/js/trim-username.js
deleted file mode 100644
index 1b6aab6086853..0000000000000
--- a/app/code/Magento/Customer/view/frontend/web/js/trim-username.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-define([
- 'jquery'
-], function ($) {
- 'use strict';
-
- $.widget('mage.trimUsername', {
- options: {
- cache: {},
- formSelector: 'form',
- emailSelector: 'input[type="email"]'
- },
-
- /**
- * Widget initialization
- * @private
- */
- _create: function () {
- // We need to look outside the module for backward compatibility, since someone can already use the module.
- // @todo Narrow this selector in 2.3 so it doesn't accidentally finds the email field from the
- // newsletter email field or any other "email" field.
- this.options.cache.email = $(this.options.formSelector).find(this.options.emailSelector);
- this._bind();
- },
-
- /**
- * Event binding, will monitor change, keyup and paste events.
- * @private
- */
- _bind: function () {
- if (this.options.cache.email.length) {
- this._on(this.options.cache.email, {
- 'change': this._trimUsername,
- 'keyup': this._trimUsername,
- 'paste': this._trimUsername
- });
- }
- },
-
- /**
- * Trim username
- * @private
- */
- _trimUsername: function () {
- var username = this._getUsername().trim();
-
- this.options.cache.email.val(username);
- },
-
- /**
- * Get username value
- * @returns {*}
- * @private
- */
- _getUsername: function () {
- return this.options.cache.email.val();
- }
- });
-
- return $.mage.trimUsername;
-});
diff --git a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html
index 6b3a232cd3e39..ca4f8b4f03b13 100644
--- a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html
+++ b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html
@@ -60,6 +60,7 @@
id="customer-email"
type="email"
class="input-text"
+ data-mage-init='{"mage/trim-input":{}}'
data-bind="attr: {autocomplete: autocomplete}"
data-validate="{required:true, 'validate-email':true}">
diff --git a/app/code/Magento/Paypal/view/frontend/web/order-review.js b/app/code/Magento/Paypal/view/frontend/web/order-review.js
index 566c9c8da06dc..2155b52f4081b 100644
--- a/app/code/Magento/Paypal/view/frontend/web/order-review.js
+++ b/app/code/Magento/Paypal/view/frontend/web/order-review.js
@@ -108,7 +108,7 @@ define([
},
/**
- * trigger change for the update of shippping methods from server
+ * trigger change for the update of shipping methods from server
*/
_updateOrderHandler: function () {
$(this.options.shippingSelector).trigger('change');
@@ -297,7 +297,7 @@ define([
this._updateOrderSubmit(true);
this._toggleButton(this.options.updateOrderSelector, true);
- // form data and callBack updated based on the shippping Form element
+ // form data and callBack updated based on the shipping Form element
if (this.isShippingSubmitForm) {
formData = $(this.options.shippingSubmitFormSelector).serialize() + '&isAjax=true';
diff --git a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/Formatter.js b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/Formatter.js
index 0cbca75ec504b..5f05d3f3015ad 100644
--- a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/Formatter.js
+++ b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/Formatter.js
@@ -445,7 +445,7 @@
childCount = getChildCount(node);
// Remove empty nodes but only if there is multiple wrappers and they are not block
- // elements so never remove single since that would remove the currrent empty block element where the caret is at
+ // elements so never remove single since that would remove the current empty block element where the caret is at
if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {
dom.remove(node, 1);
return;
diff --git a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/dom/DOMUtils.js b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/dom/DOMUtils.js
index 783dbea1cacb9..eb8b4b7ab5d78 100644
--- a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/dom/DOMUtils.js
+++ b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/classes/dom/DOMUtils.js
@@ -1106,7 +1106,7 @@
/**
* Returns a unique id. This can be useful when generating elements on the fly.
- * This method will not check if the element allready exists.
+ * This method will not check if the element already exists.
*
* @method uniqueId
* @param {String} p Optional prefix to add infront of all ids defaults to "mce_".
diff --git a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_jquery_src.js b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_jquery_src.js
index b16d0e3ffdbb4..2daf1620a918e 100644
--- a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_jquery_src.js
+++ b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_jquery_src.js
@@ -14451,7 +14451,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
childCount = getChildCount(node);
// Remove empty nodes but only if there is multiple wrappers and they are not block
- // elements so never remove single since that would remove the currrent empty block element where the caret is at
+ // elements so never remove single since that would remove the current empty block element where the caret is at
if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {
dom.remove(node, 1);
return;
diff --git a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_prototype_src.js b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_prototype_src.js
index 1c7b76cf75c8b..44b3010b0adfd 100644
--- a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_prototype_src.js
+++ b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_prototype_src.js
@@ -15301,7 +15301,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
childCount = getChildCount(node);
// Remove empty nodes but only if there is multiple wrappers and they are not block
- // elements so never remove single since that would remove the currrent empty block element where the caret is at
+ // elements so never remove single since that would remove the current empty block element where the caret is at
if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {
dom.remove(node, 1);
return;
diff --git a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_src.js b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_src.js
index a1ce5c5d8c32f..46ba27e60f419 100644
--- a/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_src.js
+++ b/app/code/Magento/Tinymce3/view/base/web/tiny_mce/tiny_mce_src.js
@@ -15275,7 +15275,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
childCount = getChildCount(node);
// Remove empty nodes but only if there is multiple wrappers and they are not block
- // elements so never remove single since that would remove the currrent empty block element where the caret is at
+ // elements so never remove single since that would remove the current empty block element where the caret is at
if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {
dom.remove(node, 1);
return;
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/forms/_checkbox-radio.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/forms/_checkbox-radio.less
index 44b6a1568ef9b..82a6f7b2f19bd 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/forms/_checkbox-radio.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/forms/_checkbox-radio.less
@@ -87,7 +87,7 @@
.form-el-checkbox {
&:checked {
+ .form-label {
- &::before {
+ &:before {
content: @checkbox-icon__content;
font-family: @icons__font-family;
}
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_data-grid.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_data-grid.less
index 2e8f06c091265..283054e015fc5 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_data-grid.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_data-grid.less
@@ -22,8 +22,8 @@
vertical-align: middle;
width: @component-indicator__size;
- &::before,
- &::after {
+ &:before,
+ &:after {
background: @color-white;
display: block;
opacity: 0;
@@ -32,7 +32,7 @@
visibility: hidden;
}
- &::before {
+ &:before {
border: 1px solid @color-gray68;
border-radius: 1px;
box-shadow: 0 0 2px rgba(0,0,0,.4);
@@ -43,7 +43,7 @@
padding: 4px 5px;
}
- &::after {
+ &:after {
border-color: darken(@color-gray68, 8);
border-style: solid;
border-width: 1px 0 0 1px;
@@ -56,8 +56,8 @@
}
&:hover {
- &::before,
- &::after {
+ &:before,
+ &:after {
opacity: 1;
transition: opacity .2s linear;
visibility: visible;
@@ -115,7 +115,7 @@
&._tooltip {
background: transparent;
- margin: 0px 0px 8px 5px;
+ margin: 0 0 8px 5px;
a {
width: 21px;
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_authentication.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_authentication.less
index e1e23a9ffbb15..3fdd20e34e09a 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_authentication.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_authentication.less
@@ -25,6 +25,7 @@
padding: @block-auth__dropdown__padding;
}
}
+
.authentication-wrapper {
float: right;
margin-top: -1.5*@indent__xl;
@@ -94,7 +95,7 @@
padding-top: @indent__xl;
position: relative;
- &::before {
+ &:before {
.lib-css(height, @block-auth__or-label__size);
.lib-css(line-height, @block-auth__or-label__size - 2px);
.lib-css(margin, -(@block-auth__or-label__size/2 + 1px) 0 0 -(@block-auth__or-label__size / 2));
@@ -212,7 +213,7 @@
margin: 0;
padding: @indent__s 0 0 @indent__xl;
- &::before {
+ &:before {
left: 0;
top: 50%;
}
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
index 4e1156949de3a..3ce46a73a11c4 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
@@ -198,6 +198,7 @@
.payment-option-title {
.lib-css(padding-left, @checkout-payment-option-content__padding__xl);
}
+
.payment-option-content {
.payment-option-inner {
+ .actions-toolbar {
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping.less
index e7f0259fc9ce3..0a463a95e3182 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping.less
@@ -188,6 +188,7 @@
}
}
}
+
.row-error {
td {
border-top: none;
@@ -285,6 +286,7 @@
.lib-css(max-width, @checkout-shipping-address__max-width);
}
}
+
.table-checkout-shipping-method {
width: auto;
}
@@ -324,6 +326,7 @@
}
}
}
+
.table-checkout-shipping-method {
min-width: 500px;
}
diff --git a/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less
index d05bcec38cbed..03a474012cb0c 100644
--- a/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less
@@ -15,6 +15,7 @@
.actions-toolbar:not(:last-child) {
margin-bottom: @indent__xl;
}
+
.fieldset {
.nested {
.field:not(.choice) {
diff --git a/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less
index 1e5769f3d7396..66dbb30cb6712 100644
--- a/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less
@@ -9,7 +9,8 @@
& when (@media-common = true) {
.multicheckout {
- &.results, &.success {
+ &.results,
+ &.success {
h3 {
font-size: 1.6rem;
margin-bottom: @indent__base;
@@ -33,15 +34,18 @@
.shipping-list {
.shipping-item {
- margin-left:84px;
+ margin-left: 84px;
}
+
.shipping-label {
font-weight: @font-weight__bold;
margin-right: @indent__s;
}
+
.shipping-address {
font-weight: @font-weight__regular;
}
+
.error-block {
color: @color-red10;
@@ -49,6 +53,7 @@
font-weight: @font-weight__bold;
margin-right: @indent__s;
}
+
.error-description {
font-weight: @font-weight__regular;
}
@@ -62,10 +67,11 @@
.shipping-list {
.order-id {
- float:left;
+ float: left;
}
+
.shipping-item {
- margin-left:100px;
+ margin-left: 100px;
}
}
}
diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_shipping.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_shipping.less
index 512751df1cb35..d0ce87beb6ad3 100644
--- a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_shipping.less
+++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_shipping.less
@@ -296,6 +296,7 @@
}
}
}
+
.opc-wrapper {
.form-login,
.form-shipping-address {
@@ -307,6 +308,7 @@
padding-bottom: @indent__base;
}
}
+
.table-checkout-shipping-method {
width: auto;
}
@@ -346,6 +348,7 @@
}
}
}
+
.table-checkout-shipping-method {
min-width: 500px;
}
diff --git a/app/design/frontend/Magento/luma/Magento_InstantPurchase/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_InstantPurchase/web/css/source/_module.less
index 9877f6bbcea23..9ab5148a87264 100644
--- a/app/design/frontend/Magento/luma/Magento_InstantPurchase/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_InstantPurchase/web/css/source/_module.less
@@ -1,16 +1,21 @@
+// /**
+// * Copyright © Magento, Inc. All rights reserved.
+// * See COPYING.txt for license details.
+// */
+
& when (@media-common = true) {
- .box-tocart {
- .action.instant-purchase {
- &:extend(.abs-button-l all);
- &:extend(.abs-button-responsive all);
+ .box-tocart {
+ .action.instant-purchase {
+ &:extend(.abs-button-l all);
+ &:extend(.abs-button-responsive all);
- &:not(:last-child) {
- margin-bottom: 15px;
- }
+ &:not(:last-child) {
+ margin-bottom: 15px;
+ }
- vertical-align: top;
+ vertical-align: top;
+ }
}
- }
}
//
@@ -18,11 +23,11 @@
// _____________________________________________
.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
- .box-tocart {
- .action.instant-purchase {
- margin-bottom: 0;
- margin-right: 1%;
- width: 49%;
+ .box-tocart {
+ .action.instant-purchase {
+ margin-bottom: 0;
+ margin-right: 1%;
+ width: 49%;
+ }
}
- }
}
diff --git a/app/design/frontend/Magento/luma/Magento_Multishipping/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Multishipping/web/css/source/_module.less
index 03ff1fb09a3e4..7662c60734a1b 100644
--- a/app/design/frontend/Magento/luma/Magento_Multishipping/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Multishipping/web/css/source/_module.less
@@ -8,285 +8,291 @@
// _____________________________________________
& when (@media-common = true) {
- .multicheckout {
- &.results, &.success {
- h3 {
- font-size: 1.6rem;
- margin-bottom: @indent__base;
- margin-top: @indent__l;
- a {
- color: @text__color;
- &:hover {
- text-decoration: none;
- }
- }
- }
-
- ul.orders-list {
- list-style: none;
- padding-left: 0;
- }
-
- .orders-list {
- margin-top: @indent__m;
- padding-left: @indent__base - 4px;
-
- .shipping-list {
- .shipping-item {
- margin-left:84px;
- }
- .shipping-label {
- font-weight: @font-weight__bold;
- margin-right: @indent__s;
- }
- .shipping-address {
- font-weight: @font-weight__regular;
- }
- .error-block {
- color: @color-red10;
- .error-label {
- font-weight: @font-weight__bold;
- margin-right: @indent__s;
+ .multicheckout {
+ &.results,
+ &.success {
+ h3 {
+ font-size: 1.6rem;
+ margin-bottom: @indent__base;
+ margin-top: @indent__l;
+ a {
+ color: @text__color;
+ &:hover {
+ text-decoration: none;
+ }
}
- .error-description {
- font-weight: @font-weight__regular;
+ }
+
+ ul.orders-list {
+ list-style: none;
+ padding-left: 0;
+ }
+
+ .orders-list {
+ margin-top: @indent__m;
+ padding-left: @indent__base - 4px;
+
+ .shipping-list {
+ .shipping-item {
+ margin-left: 84px;
+ }
+
+ .shipping-label {
+ font-weight: @font-weight__bold;
+ margin-right: @indent__s;
+ }
+
+ .shipping-address {
+ font-weight: @font-weight__regular;
+ }
+
+ .error-block {
+ color: @color-red10;
+
+ .error-label {
+ font-weight: @font-weight__bold;
+ margin-right: @indent__s;
+ }
+
+ .error-description {
+ font-weight: @font-weight__regular;
+ }
+ }
}
- }
}
- }
- .orders-succeed {
- .orders-list {
- margin-top: 0;
+ .orders-succeed {
+ .orders-list {
+ margin-top: 0;
+
+ .shipping-list {
+ .order-id {
+ float: left;
+ }
+ .shipping-item {
+ margin-left: 100px;
+ }
+ }
+ }
+ }
+ }
- .shipping-list {
- .order-id {
- float:left;
- }
- .shipping-item {
- margin-left:100px;
- }
+ .title {
+ margin-bottom: @indent__l;
+
+ strong {
+ font-weight: @font-weight__regular;
}
- }
}
- }
- .title {
- margin-bottom: @indent__l;
+ .table-wrapper {
+ margin-bottom: 0;
- strong {
- font-weight: @font-weight__regular;
- }
- }
+ .action.delete {
+ display: inline-block;
+ }
+
+ .col {
+ .qty {
+ display: inline-block;
+
+ .input-text {
+ &:extend(.abs-input-qty all);
+ }
+ }
- .table-wrapper {
- margin-bottom: 0;
+ .label {
+ &:extend(.abs-visually-hidden all);
+ }
- .action.delete {
- display: inline-block;
- }
+ &.item {
+ .action.edit {
+ font-weight: @font-weight__regular;
+ margin-left: @indent__s;
+ }
+ }
+ }
- .col {
- .qty {
- display: inline-block;
+ .cart-price {
+ &:extend(.abs-checkout-cart-price all);
+ }
- .input-text {
- &:extend(.abs-input-qty all);
- }
+ .product-item-name {
+ &:extend(.abs-checkout-product-name all);
+ }
}
- .label {
- &:extend(.abs-visually-hidden all);
+ &:not(.address) {
+ .table-wrapper {
+ .product-item-name {
+ margin: 0;
+ }
+ }
}
- &.item {
- .action.edit {
- font-weight: @font-weight__regular;
- margin-left: @indent__s;
- }
+ > .actions-toolbar {
+ margin-top: @indent__xl;
}
- }
- .cart-price {
- &:extend(.abs-checkout-cart-price all);
- }
+ .actions-toolbar {
+ > .secondary {
+ display: block;
- .product-item-name {
- &:extend(.abs-checkout-product-name all);
- }
- }
+ .action {
+ margin-bottom: @indent__m;
- &:not(.address) {
- .table-wrapper {
- .product-item-name {
- margin: 0;
- }
- }
- }
+ &.back {
+ display: block;
+ margin-left: 0;
+ }
+ }
+ }
- > .actions-toolbar {
- margin-top: @indent__xl;
- }
+ > .primary {
+ margin-right: @indent__s;
+ }
+ }
- .actions-toolbar {
- > .secondary {
- display: block;
+ .action.primary {
+ &:extend(.abs-button-l all);
+ }
- .action {
- margin-bottom: @indent__m;
+ .item-options {
+ margin: @indent__s 0 0;
- &.back {
- display: block;
- margin-left: 0;
- }
+ &:extend(.abs-product-options-list all);
+ &:extend(.abs-add-clearfix all);
}
- }
- > .primary {
- margin-right: @indent__s;
- }
- }
+ &:extend(.abs-account-blocks all);
- .action.primary {
- &:extend(.abs-button-l all);
- }
+ .block {
+ &:extend(.abs-add-clearfix all);
- .item-options {
- margin: @indent__s 0 0;
-
- &:extend(.abs-product-options-list all);
- &:extend(.abs-add-clearfix all);
- }
+ .methods-shipping {
+ .item-content {
+ .fieldset {
+ > .legend {
+ &:extend(.abs-visually-hidden all);
+ }
- &:extend(.abs-account-blocks all);
+ > .legend + br {
+ &:extend(.abs-no-display all);
+ }
- .block {
- &:extend(.abs-add-clearfix all);
+ > .field {
+ &:before {
+ display: none;
+ }
- .methods-shipping {
- .item-content {
- .fieldset {
- > .legend {
- &:extend(.abs-visually-hidden all);
+ .control {
+ display: inline-block;
+ }
+ }
+ }
+ }
}
+ }
- > .legend + br {
- &:extend(.abs-no-display all);
- }
+ .block-title,
+ .block-content .title {
+ &:extend(.abs-account-title all);
+ border-bottom: @border-width__base solid @border-color__base;
+ padding-bottom: @indent__s;
- > .field {
- &:before {
- display: none;
- }
+ strong {
+ font-weight: @font-weight__regular;
- .control {
- display: inline-block;
- }
+ span {
+ .lib-css(color, @primary__color__light);
+ }
}
- }
}
- }
- }
-
- .block-title,
- .block-content .title {
- &:extend(.abs-account-title all);
- border-bottom: @border-width__base solid @border-color__base;
- padding-bottom: @indent__s;
-
- strong {
- font-weight: @font-weight__regular;
- span {
- .lib-css(color, @primary__color__light);
+ .block-content {
+ &:extend(.abs-add-clearfix all);
+ .title {
+ border-bottom: none;
+ padding-bottom: 0;
+ }
}
- }
- }
- .block-content {
- &:extend(.abs-add-clearfix all);
- .title {
- border-bottom: none;
- padding-bottom: 0;
- }
- }
+ &.order-review {
+ .block-title > strong {
+ .lib-font-size(24);
+ }
- &.order-review {
- .block-title > strong {
- .lib-font-size(24);
- }
+ .block-shipping {
+ .block-content:not(:last-child) {
+ margin-bottom: @indent__xl;
+ }
+ }
- .block-shipping {
- .block-content:not(:last-child) {
- margin-bottom: @indent__xl;
+ .error-description {
+ color: @color-red10;
+ font-weight: @font-weight__regular;
+ margin-bottom: @indent__s;
+ margin-top: -@indent__s;
+ }
}
- }
- .error-description {
- color: @color-red10;
- font-weight: @font-weight__regular;
- margin-bottom: @indent__s;
- margin-top: -@indent__s;
- }
- }
-
- .box-title {
- span {
- margin-right: @indent__s;
- }
+ .box-title {
+ span {
+ margin-right: @indent__s;
+ }
- > .action {
- margin: 0;
- }
- }
+ > .action {
+ margin: 0;
+ }
+ }
- .box-shipping-method {
- .price {
- font-weight: @font-weight__bold;
- }
- }
+ .box-shipping-method {
+ .price {
+ font-weight: @font-weight__bold;
+ }
+ }
- .box-billing-method {
- .fieldset {
- margin: 0;
+ .box-billing-method {
+ .fieldset {
+ margin: 0;
- .legend.box-title {
- margin: 0 0 @indent__xs;
+ .legend.box-title {
+ margin: 0 0 @indent__xs;
+ }
+ }
}
- }
- }
- .hidden {
- &:extend(.abs-no-display all);
- }
+ .hidden {
+ &:extend(.abs-no-display all);
+ }
- .checkout-review .grand.totals {
- .lib-font-size(@font-size__xl);
- margin-bottom: @indent__xl;
+ .checkout-review .grand.totals {
+ .lib-font-size(@font-size__xl);
+ margin-bottom: @indent__xl;
- .mark {
- font-weight: @font-weight__regular;
- }
+ .mark {
+ font-weight: @font-weight__regular;
+ }
+ }
}
- }
- [class^='multishipping-'] {
- .nav-sections,
- .nav-toggle {
- &:extend(.abs-no-display all);
- }
+ [class^='multishipping-'] {
+ .nav-sections,
+ .nav-toggle {
+ &:extend(.abs-no-display all);
+ }
- .logo {
- margin-left: 0;
+ .logo {
+ margin-left: 0;
+ }
}
- }
- .multishipping-checkout-success {
- .nav-sections {
- display: block;
+ .multishipping-checkout-success {
+ .nav-sections {
+ display: block;
+ }
}
- }
}
//
@@ -294,200 +300,200 @@
// _____________________________________________
.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
- .multicheckout {
- .data.table {
- .address {
- &:before {
- margin-bottom: @indent__xs;
+ .multicheckout {
+ .data.table {
+ .address {
+ &:before {
+ margin-bottom: @indent__xs;
+ }
+ }
}
- }
- }
-
- .product-item-name,
- .price-including-tax,
- .price-excluding-tax {
- display: inline-block;
- }
- .block-content .box {
- &:not(:last-child) {
- margin-bottom: @indent__xl;
- }
+ .product-item-name,
+ .price-including-tax,
+ .price-excluding-tax {
+ display: inline-block;
+ }
- &:last-child {
- margin-bottom: 0;
- }
- }
+ .block-content .box {
+ &:not(:last-child) {
+ margin-bottom: @indent__xl;
+ }
- &.order-review {
- .box-items {
- .data.table {
- thead {
- display: block;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
- tr {
- display: block;
+ &.order-review {
+ .box-items {
+ .data.table {
+ thead {
+ display: block;
+
+ tr {
+ display: block;
+ }
+
+ .col.item {
+ display: block;
+ padding: 0;
+ }
+ }
+ }
}
- .col.item {
- display: block;
- padding: 0;
+ .data.table {
+ &:extend(.abs-checkout-order-review all);
}
- }
}
- }
-
- .data.table {
- &:extend(.abs-checkout-order-review all);
- }
- }
- .actions-toolbar {
- .action {
- margin-bottom: @indent__m;
- }
+ .actions-toolbar {
+ .action {
+ margin-bottom: @indent__m;
+ }
- > .primary {
- margin-bottom: @indent__m;
- margin-right: 0;
- }
+ > .primary {
+ margin-bottom: @indent__m;
+ margin-right: 0;
+ }
+ }
}
- }
}
.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
- .multicheckout {
- .actions-toolbar {
- .column:not(.sidebar-main) & {
- &:extend(.abs-reset-left-margin-desktop-s all);
- }
+ .multicheckout {
+ .actions-toolbar {
+ .column:not(.sidebar-main) & {
+ &:extend(.abs-reset-left-margin-desktop-s all);
+ }
- .secondary {
- float: none;
- margin-top: 11px;
- text-align: right;
+ .secondary {
+ float: none;
+ margin-top: 11px;
+ text-align: right;
- .action {
- margin-left: @indent__s;
+ .action {
+ margin-left: @indent__s;
- &.back {
- display: block;
- float: left;
- }
+ &.back {
+ display: block;
+ float: left;
+ }
+ }
+ }
}
- }
- }
-
- .item-options {
- margin: @indent__base 0 0;
- }
-
- .block-content .box {
- margin-bottom: 0;
- }
- .block-shipping {
- .box {
- &:extend(.abs-add-box-sizing-desktop-s all);
- float: left;
- width: 25%;
- }
+ .item-options {
+ margin: @indent__base 0 0;
+ }
- .box-shipping-method {
- padding-left: @indent__m;
- padding-right: @indent__m;
- width: 50%;
+ .block-content .box {
+ margin-bottom: 0;
+ }
- .fieldset {
- .legend {
- &:extend(.abs-reset-left-margin-desktop-s all);
- }
+ .block-shipping {
+ .box {
+ &:extend(.abs-add-box-sizing-desktop-s all);
+ float: left;
+ width: 25%;
+ }
- .field {
- &:before {
- display: none;
+ .box-shipping-method {
+ padding-left: @indent__m;
+ padding-right: @indent__m;
+ width: 50%;
+
+ .fieldset {
+ .legend {
+ &:extend(.abs-reset-left-margin-desktop-s all);
+ }
+
+ .field {
+ &:before {
+ display: none;
+ }
+ }
+ }
}
- }
}
- }
- }
- .block-billing {
- &:extend(.abs-add-clearfix-desktop-s all);
- .box-billing-address {
- &:extend(.abs-add-box-sizing-desktop-s all);
- float: left;
- width: 25%;
- }
-
- .box-billing-method {
- &:extend(.abs-add-box-sizing-desktop-s all);
- float: left;
- padding-left: @indent__m;
- width: 50%;
- }
- }
+ .block-billing {
+ &:extend(.abs-add-clearfix-desktop-s all);
+ .box-billing-address {
+ &:extend(.abs-add-box-sizing-desktop-s all);
+ float: left;
+ width: 25%;
+ }
- &.form.address {
- .table-wrapper {
- .applicable {
- margin: 7px 0 0;
+ .box-billing-method {
+ &:extend(.abs-add-box-sizing-desktop-s all);
+ float: left;
+ padding-left: @indent__m;
+ width: 50%;
+ }
}
- }
- }
- &.order-review {
- .box-items {
- clear: left;
- float: none;
- padding-top: @indent__xl;
- width: auto;
- }
-
- .col.item {
- width: 75%;
- }
- }
+ &.form.address {
+ .table-wrapper {
+ .applicable {
+ margin: 7px 0 0;
+ }
+ }
+ }
- // Payment methods
- .methods-payment {
- .item-content > .fieldset {
- width: auto;
+ &.order-review {
+ .box-items {
+ clear: left;
+ float: none;
+ padding-top: @indent__xl;
+ width: auto;
+ }
- .field {
- &.cvv {
- display: inline-block;
- width: auto;
- }
+ .col.item {
+ width: 75%;
+ }
}
- }
- .fieldset > .field:not(.choice) {
- > .label {
- float: none;
- margin-bottom: 8px;
- text-align: left;
- width: auto;
- }
+ // Payment methods
+ .methods-payment {
+ .item-content > .fieldset {
+ width: auto;
+
+ .field {
+ &.cvv {
+ display: inline-block;
+ width: auto;
+ }
+ }
+ }
+
+ .fieldset > .field:not(.choice) {
+ > .label {
+ float: none;
+ margin-bottom: 8px;
+ text-align: left;
+ width: auto;
+ }
- &:not(.cvv) {
- .control {
- width: 100%;
- }
+ &:not(.cvv) {
+ .control {
+ width: 100%;
+ }
+ }
+ }
}
- }
}
- }
}
.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
- .multishipping-checkout-success {
- .nav-toggle {
- display: block;
- }
+ .multishipping-checkout-success {
+ .nav-toggle {
+ display: block;
+ }
- .logo {
- margin-left: @indent__xl;
+ .logo {
+ margin-left: @indent__xl;
+ }
}
- }
}
diff --git a/dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php b/dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php
new file mode 100644
index 0000000000000..c0a720229a00d
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php
@@ -0,0 +1,60 @@
+objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+ }
+
+ /**
+ * @magentoDataFixture Magento/Captcha/_files/failed_logins_backend.php
+ */
+ public function testLoginAttemptsRemovedAfterSuccessfulLogin()
+ {
+ $login = 'mageadmin';
+ $userFactory = $this->objectManager->get(UserFactory::class);
+ $captchaLogFactory = $this->objectManager->get(LogFactory::class);
+ $eventManager = $this->objectManager->get(ManagerInterface::class);
+
+ /** @var User $user */
+ $user = $userFactory->create();
+ $user->setUserName($login);
+
+ $eventManager->dispatch(
+ 'backend_auth_user_login_success',
+ ['user' => $user]
+ );
+
+ /**
+ * @var CaptchaLog $captchaLog
+ */
+ $captchaLog = $captchaLogFactory->create();
+
+ self::assertEquals(0, $captchaLog->countAttemptsByUserLogin($login));
+ }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php
new file mode 100644
index 0000000000000..7130cdfca57d7
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php
@@ -0,0 +1,17 @@
+get(LogFactory::class);
+
+/** @var Log $captchaLog */
+$captchaLog = $logFactory->create();
+$captchaLog->logAttempt('mageadmin');
diff --git a/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php
new file mode 100644
index 0000000000000..12a16027e1e5c
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php
@@ -0,0 +1,17 @@
+get(LogFactory::class);
+
+/** @var Log $captchaLog */
+$captchaLog = $logFactory->create();
+$captchaLog->deleteUserAttempts('mageadmin');
diff --git a/lib/web/mage/calendar.js b/lib/web/mage/calendar.js
index 51ee9b3a8891a..ac154b333801d 100644
--- a/lib/web/mage/calendar.js
+++ b/lib/web/mage/calendar.js
@@ -236,12 +236,14 @@
firstDay = parseInt(this._get(inst, 'firstDay'), 10);
firstDay = isNaN(firstDay) ? 0 : firstDay;
- for (row; row < numMonths[0]; row++) {
+ for (row = 0; row < numMonths[0]; row++) {
this.maxRows = 4;
- for (col; col < numMonths[1]; col++) {
+ for (col = 0; col < numMonths[1]; col++) {
selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ calender = '';
+
if (isMultiMonth) {
calender += '' + this._get(inst, 'weekHeader') + '' : '';
- for (dow; dow < 7; dow++) { // days of the week
+ for (dow = 0; dow < 7; dow++) { // days of the week
day = (dow + firstDay) % 7;
thead += '
= 5 ?
' class="ui-datepicker-week-end"' : '') + '>' +
@@ -289,7 +291,7 @@
this.maxRows = numRows;
printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
- for (dRow; dRow < numRows; dRow++) { // create date picker rows
+ for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
calender += ' | ';
tbody = !showWeek ? '' : '' +
this._get(inst, 'calculateWeek')(printDate) + ' | ';
diff --git a/lib/web/mage/trim-input.js b/lib/web/mage/trim-input.js
new file mode 100644
index 0000000000000..678192dcf61ac
--- /dev/null
+++ b/lib/web/mage/trim-input.js
@@ -0,0 +1,60 @@
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+ 'jquery'
+], function ($) {
+ 'use strict';
+
+ $.widget('mage.trimInput', {
+ options: {
+ cache: {}
+ },
+
+ /**
+ * Widget initialization
+ * @private
+ */
+ _create: function () {
+ this.options.cache.input = $(this.element);
+ this._bind();
+ },
+
+ /**
+ * Event binding, will monitor change, keyup and paste events.
+ * @private
+ */
+ _bind: function () {
+ if (this.options.cache.input.length) {
+ this._on(this.options.cache.input, {
+ 'change': this._trimInput,
+ 'keyup': this._trimInput,
+ 'paste': this._trimInput
+ });
+ }
+ },
+
+ /**
+ * Trim value
+ * @private
+ */
+ _trimInput: function () {
+ var input = this._getInputValue().trim();
+
+ this.options.cache.input.val(input);
+ },
+
+ /**
+ * Get input value
+ * @returns {*}
+ * @private
+ */
+ _getInputValue: function () {
+ return this.options.cache.input.val();
+ }
+ });
+
+ return $.mage.trimInput;
+});
diff --git a/lib/web/modernizr/modernizr.js b/lib/web/modernizr/modernizr.js
index 9b4f68aaaaaa9..0833cfb105cee 100644
--- a/lib/web/modernizr/modernizr.js
+++ b/lib/web/modernizr/modernizr.js
@@ -910,7 +910,7 @@ window.Modernizr = (function( window, document, undefined ) {
bool = inputElem.checkValidity && inputElem.checkValidity() === false;
} else {
- // If the upgraded input compontent rejects the :) text, we got a winner
+ // If the upgraded input component rejects the :) text, we got a winner
bool = inputElem.value != smile;
}
}
diff --git a/setup/src/Magento/Setup/Fixtures/OrdersFixture.php b/setup/src/Magento/Setup/Fixtures/OrdersFixture.php
index 1acad6dbc1787..9fbec3b3741b2 100644
--- a/setup/src/Magento/Setup/Fixtures/OrdersFixture.php
+++ b/setup/src/Magento/Setup/Fixtures/OrdersFixture.php
@@ -14,7 +14,7 @@
* Optionally generates inactive quotes for generated orders.
*
* Support the following format:
- *
+ *
* {bool}
*
*