From f8371ca655f958f5bb9d27edfec9b5dff6b59917 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 4 Sep 2015 13:45:24 +0300
Subject: [PATCH 001/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Remove js_config node from columns definition
- Add base column constructor to definitions
- Remove unused align property
---
 .../ui_component/product_listing.xml          |  54 ++-------
 .../ui_component/product_listing.xml          |   4 -
 .../ui_component/cms_block_listing.xml        |  41 +------
 .../ui_component/cms_page_listing.xml         |  70 ++----------
 .../product_attributes_listing.xml            |  44 ++------
 .../ui_component/customer_listing.xml         | 106 +-----------------
 .../ui_component/customer_online_grid.xml     |  55 ++-------
 .../product_attributes_listing.xml            |   5 +-
 .../sales_order_creditmemo_grid.xml           | 106 +++---------------
 .../ui_component/sales_order_grid.xml         |  92 ++-------------
 .../ui_component/sales_order_invoice_grid.xml |  89 ++-------------
 .../sales_order_shipment_grid.xml             |  84 +++-----------
 .../sales_order_view_creditmemo_grid.xml      | 106 +++---------------
 .../sales_order_view_invoice_grid.xml         |  90 +++------------
 .../sales_order_view_shipment_grid.xml        |  82 +++-----------
 .../view/base/ui_component/etc/definition.xml |   4 +-
 .../view/base/web/js/grid/columns/column.js   |   1 +
 .../base/web/js/grid/columns/multiselect.js   |   1 +
 18 files changed, 146 insertions(+), 888 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index 72d04010e15..f4b4889854e 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -294,7 +294,6 @@
                             <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -305,11 +304,8 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
                 </item>
@@ -317,13 +313,9 @@
         </column>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
@@ -331,16 +323,13 @@
         </column>
         <column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="altField" xsi:type="string">name</item>
                     <item name="has_preview" xsi:type="string">1</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Thumbnail</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -348,13 +337,9 @@
         </column>
         <column name="name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -363,12 +348,9 @@
         <column name="type_id">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Type</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Type</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
@@ -377,12 +359,9 @@
         <column name="attribute_set_id">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\AttributeSet\Options</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Set</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -390,12 +369,8 @@
         </column>
         <column name="sku">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -403,13 +378,9 @@
         </column>
         <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -418,13 +389,10 @@
         <column name="visibility">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Visibility</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Visibility</item>
                     <item name="sortOrder" xsi:type="number">80</item>
                 </item>
@@ -433,13 +401,10 @@
         <column name="status">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Attribute\Source\Status</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
@@ -448,13 +413,10 @@
         <column name="websites" class="Magento\Catalog\Ui\Component\Listing\Columns\Websites">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Store\Model\Resource\Website\Collection</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Websites</item>
                     <item name="sortOrder" xsi:type="number">100</item>
                 </item>
@@ -463,9 +425,9 @@
         <column name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="sortOrder" xsi:type="number">200</item>
                     <item name="dataType" xsi:type="string">actions</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
index a1a5c6af091..1596400be77 100644
--- a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
@@ -42,13 +42,9 @@
     <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns">
         <column name="qty">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/sortable</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Quantity</item>
                     <item name="sortOrder" xsi:type="number">75</item>
                 </item>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index 4e24c44d820..ed0c9de0abd 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -10,7 +10,7 @@
         <item name="js_config" xsi:type="array">
             <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item>
             <item name="deps" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item>
-        </item>
+        </item>f
         <item name="spinner" xsi:type="string">cms_block_columns</item>
         <item name="buttons" xsi:type="array">
             <item name="add" xsi:type="array">
@@ -334,7 +334,6 @@
                             <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -345,33 +344,23 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">block_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="block_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="title">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
@@ -380,16 +369,12 @@
                         </item>
                     </item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
             </argument>
         </column>
         <column name="identifier">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
@@ -399,30 +384,22 @@
                         </item>
                     </item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Identifier</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Store View</item>
                 </item>
             </argument>
         </column>
         <column name="is_active">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="options" xsi:type="array">
                     <item name="disable" xsi:type="array">
                         <item name="value" xsi:type="string">0</item>
@@ -434,33 +411,27 @@
                     </item>
                 </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="creation_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="update_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Modified</item>
                 </item>
             </argument>
@@ -468,10 +439,10 @@
         <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">block_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index 03ea7269fcb..735ef78ca56 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -493,10 +493,8 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                     <item name="controlVisibility" xsi:type="boolean">false</item>
@@ -505,22 +503,15 @@
         </column>
         <column name="page_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="title">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
@@ -529,16 +520,12 @@
                         </item>
                     </item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
             </argument>
         </column>
         <column name="identifier">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
@@ -547,7 +534,6 @@
                         </item>
                     </item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">URL Key</item>
                 </item>
             </argument>
@@ -555,27 +541,20 @@
         <column name="page_layout">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Layout</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Store View</item>
                 </item>
             </argument>
@@ -583,50 +562,38 @@
         <column name="is_active">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\IsActive</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="creation_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="update_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Modified</item>
                 </item>
             </argument>
         </column>
         <column name="custom_theme_from">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="editor" xsi:type="string">date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom design from</item>
                     <item name="dateFormat" xsi:type="string">MMM d, y</item>
                     <item name="visible" xsi:type="boolean">false</item>
@@ -635,13 +602,10 @@
         </column>
         <column name="custom_theme_to">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="editor" xsi:type="string">date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom design to</item>
                     <item name="dateFormat" xsi:type="string">MMM d, y</item>
                     <item name="visible" xsi:type="boolean">false</item>
@@ -651,13 +615,10 @@
         <column name="custom_theme">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\Theme</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom Theme</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -666,13 +627,10 @@
         <column name="custom_root_template">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom Layout</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -680,13 +638,9 @@
         </column>
         <column name="meta_keywords">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Meta Keywords</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -694,13 +648,9 @@
         </column>
         <column name="meta_description">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Meta Description</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -709,11 +659,11 @@
         <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                     <item name="blockVisibility" xsi:type="boolean">true</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
index 9fce22c2a82..80d2ac0964f 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -213,7 +213,6 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -224,37 +223,26 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">attribute_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
-                    <item name="controlVisibility" xsi:type="string">false</item>
                 </item>
             </argument>
         </column>
         <column name="attribute_code">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Code</item>
                 </item>
             </argument>
         </column>
         <column name="frontend_label">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                 </item>
             </argument>
@@ -262,12 +250,9 @@
         <column name="is_required">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Required</item>
                 </item>
             </argument>
@@ -275,12 +260,9 @@
         <column name="is_user_defined">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">System</item>
                 </item>
             </argument>
@@ -288,12 +270,9 @@
         <column name="is_visible">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Visible</item>
                 </item>
             </argument>
@@ -301,12 +280,9 @@
         <column name="is_global">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Attribute\Source\Scopes</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Scope</item>
                 </item>
             </argument>
@@ -314,12 +290,9 @@
         <column name="is_searchable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Searchable</item>
                 </item>
             </argument>
@@ -327,12 +300,9 @@
         <column name="is_comparable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Comparable</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index 89ce8a5f2d8..ea4d0359f08 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -370,10 +370,8 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="sortOrder" xsi:type="number">10</item>
@@ -382,14 +380,9 @@
         </column>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -397,13 +390,8 @@
         </column>
         <column name="name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -411,13 +399,8 @@
         </column>
         <column name="email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
@@ -425,13 +408,9 @@
         </column>
         <column name="group_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -439,13 +418,8 @@
         </column>
         <column name="billing_telephone">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Phone</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -453,13 +427,9 @@
         </column>
         <column name="billing_postcode">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ZIP</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -467,12 +437,8 @@
         </column>
         <column name="billing_country_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Country</item>
                     <item name="sortOrder" xsi:type="number">80</item>
                 </item>
@@ -480,13 +446,9 @@
         </column>
         <column name="billing_region">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">State/Province</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
@@ -494,13 +456,10 @@
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Since</item>
                     <item name="sortOrder" xsi:type="number">100</item>
                 </item>
@@ -508,12 +467,9 @@
         </column>
         <column name="website_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Web Site</item>
                     <item name="sortOrder" xsi:type="number">110</item>
                 </item>
@@ -521,14 +477,11 @@
         </column>
         <column name="last_visit_at" >
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Last Logged In</item>
                     <item name="sortOrder" xsi:type="number">120</item>
                 </item>
@@ -536,14 +489,10 @@
         </column>
         <column name="confirmation">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Confirmed email</item>
                     <item name="sortOrder" xsi:type="number">130</item>
                 </item>
@@ -551,14 +500,10 @@
         </column>
         <column name="created_in">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Account Created in</item>
                     <item name="sortOrder" xsi:type="number">140</item>
                 </item>
@@ -566,13 +511,9 @@
         </column>
         <column name="billing_full">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                     <item name="sortOrder" xsi:type="number">150</item>
                 </item>
@@ -580,13 +521,9 @@
         </column>
         <column name="shipping_full">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                     <item name="sortOrder" xsi:type="number">160</item>
                 </item>
@@ -594,14 +531,11 @@
         </column>
         <column name="dob">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Date Of Birth</item>
                     <item name="sortOrder" xsi:type="number">170</item>
                 </item>
@@ -609,14 +543,10 @@
         </column>
         <column name="taxvat">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
                     <item name="sortOrder" xsi:type="number">180</item>
                 </item>
@@ -624,13 +554,9 @@
         </column>
         <column name="gender" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Gender</item>
                     <item name="sortOrder" xsi:type="number">190</item>
                 </item>
@@ -638,13 +564,9 @@
         </column>
         <column name="billing_street">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="sortOrder" xsi:type="number">200</item>
                 </item>
@@ -652,14 +574,10 @@
         </column>
         <column name="billing_city">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
                     <item name="sortOrder" xsi:type="number">210</item>
                 </item>
@@ -667,14 +585,10 @@
         </column>
         <column name="billing_fax">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
                     <item name="sortOrder" xsi:type="number">220</item>
                 </item>
@@ -682,14 +596,10 @@
         </column>
         <column name="billing_vat_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
                     <item name="sortOrder" xsi:type="number">230</item>
                 </item>
@@ -697,14 +607,10 @@
         </column>
         <column name="billing_company">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
                     <item name="sortOrder" xsi:type="number">240</item>
                 </item>
@@ -713,10 +619,10 @@
         <column name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
index dbeef97b319..6dca92beb9b 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
@@ -218,9 +218,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -231,120 +236,82 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">visitor_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="customer_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="firstname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">First Name</item>
                 </item>
             </argument>
         </column>
         <column name="lastname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Last Name</item>
                 </item>
             </argument>
         </column>
         <column name="email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="remote_addr">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">IP Address</item>
                 </item>
             </argument>
         </column>
         <column name="first_visit_at">
-            <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
+            <argument name="data" xsi:type="array">                
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Session Start Time</item>
                 </item>
             </argument>
         </column>
         <column name="last_visit_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Last Activity</item>
                 </item>
             </argument>
         </column>
         <column name="visitor_type" class="Magento\Customer\Ui\Component\Listing\Column\Online\Type">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Type</item>
                 </item>
             </argument>
         </column>
         <column name="last_url">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Last URL</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
index 916c8ae10a1..d205ef1988d 100644
--- a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -26,12 +26,9 @@
         <column name="is_filterable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
index 36733ffa619..4d838aa0944 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
@@ -519,9 +519,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -532,282 +537,199 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
             </argument>
         </column>
         <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
                 </item>
             </argument>
         </column>
         <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
                 </item>
             </argument>
@@ -815,10 +737,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index b0caec31484..fefac94d88a 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -518,9 +518,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -531,243 +536,170 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">desc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchase Point</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchase Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item>
                 </item>
             </argument>
         </column>
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item>
                 </item>
             </argument>
         </column>
         <column name="status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="total_refunded" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Total Refunded</item>
                 </item>
             </argument>
@@ -775,10 +707,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
index 41d7a1d0f2a..94adb041f2a 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
@@ -420,9 +420,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -433,232 +438,162 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
@@ -666,10 +601,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
index 80d389a4172..5e880cf71c8 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
@@ -371,9 +371,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -384,207 +389,146 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="total_qty">
-            <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+            <argument name="data" xsi:type="array">               
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
         </column>
         <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -592,10 +536,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
index 035e2dbc57e..bb6eba32c92 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
@@ -464,9 +464,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -477,282 +482,199 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
             </argument>
         </column>
         <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
                 </item>
             </argument>
         </column>
         <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
                 </item>
             </argument>
@@ -760,10 +682,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
index 38493a5be26..faf52b87b26 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
@@ -423,9 +423,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -436,232 +441,163 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
@@ -669,10 +605,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index 0c019005f02..b5932cc18fa 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -369,9 +369,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -382,207 +387,146 @@
         </argument>
         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="total_qty">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
         </column>
         <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
         <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -590,10 +534,10 @@
         <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
                     <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
                     <item name="filterable" xsi:type="boolean">false</item>
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index ff5a64d1ab8..5caf6ed693d 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -39,7 +39,6 @@
             <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
                 <item name="displayArea" xsi:type="string">dataGridFilters</item>
-
             </item>
         </argument>
     </filterSearch>
@@ -112,6 +111,9 @@
     <column class="Magento\Ui\Component\Listing\Columns\Column">
         <argument name="data" xsi:type="array">
             <item name="state_prefix" xsi:type="string">columns</item>
+            <item name="js_config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+            </item>
         </argument>
     </column>
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
index 06ee7dea8c3..b0f457497ea 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
@@ -15,6 +15,7 @@ define([
             headerTmpl: 'ui/grid/columns/text',
             bodyTmpl: 'ui/grid/cells/text',
             disableAction: false,
+            controlVisibility: true,
             sortable: true,
             sorting: false,
             visible: true,
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
index acaa95915ee..6ae8354a0af 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
@@ -13,6 +13,7 @@ define([
         defaults: {
             headerTmpl: 'ui/grid/columns/multiselect',
             bodyTmpl: 'ui/grid/cells/multiselect',
+            controlVisibility: false,
             sortable: false,
             menuVisible: false,
             excludeMode: false,
-- 
GitLab


From 8b5f521a847cef0ee45dd0369e512c77e6bf49a5 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 4 Sep 2015 14:17:07 +0300
Subject: [PATCH 002/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Migrate to new filters declaration on cms pages and cms blocks
---
 .../ui_component/cms_block_listing.xml        | 135 +--------
 .../ui_component/cms_page_listing.xml         | 270 +-----------------
 .../view/base/web/js/grid/filters/filters.js  | 165 ++++++++++-
 3 files changed, 185 insertions(+), 385 deletions(-)

diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index ed0c9de0abd..17f7d7c7a42 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -10,7 +10,7 @@
         <item name="js_config" xsi:type="array">
             <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item>
             <item name="deps" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item>
-        </item>f
+        </item>
         <item name="spinner" xsi:type="string">cms_block_columns</item>
         <item name="buttons" xsi:type="array">
             <item name="add" xsi:type="array">
@@ -86,6 +86,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -100,51 +101,6 @@
                     </item>
                 </item>
             </argument>
-            <filterRange name="block_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">block_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="title">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">title</item>
-                        <item name="label" xsi:type="string" translate="true">Title</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="identifier">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">identifier</item>
-                        <item name="label" xsi:type="string" translate="true">Identifier</item>
-                    </item>
-                </argument>
-            </filterInput>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</argument>
@@ -157,87 +113,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterSelect name="is_active">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                        <item name="dataScope" xsi:type="string">is_active</item>
-                        <item name="options" xsi:type="array">
-                            <item name="disable" xsi:type="array">
-                                <item name="value" xsi:type="string">0</item>
-                                <item name="label" xsi:type="string" translate="true">Disabled</item>
-                            </item>
-                            <item name="enable" xsi:type="array">
-                                <item name="value" xsi:type="string">1</item>
-                                <item name="label" xsi:type="string" translate="true">Enabled</item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="creation_time"  class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">creation_time</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="update_time" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">update_time</item>
-                        <item name="label" xsi:type="string" translate="true">Modified</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -353,6 +228,7 @@
         <column name="block_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
@@ -368,6 +244,7 @@
                             <item name="required-entry" xsi:type="boolean">true</item>
                         </item>
                     </item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
@@ -383,6 +260,7 @@
                             <item name="required-entry" xsi:type="boolean">true</item>
                         </item>
                     </item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Identifier</item>
                 </item>
@@ -411,6 +289,7 @@
                     </item>
                 </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -421,6 +300,7 @@
         <column name="creation_time">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
@@ -430,6 +310,7 @@
         <column name="update_time">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Modified</item>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index 735ef78ca56..ea9cd1d93d4 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -86,6 +86,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -100,63 +101,6 @@
                     </item>
                 </item>
             </argument>
-            <filterRange name="page_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">page_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="title">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">title</item>
-                        <item name="label" xsi:type="string" translate="true">Title</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="identifier">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">identifier</item>
-                        <item name="label" xsi:type="string" translate="true">URL Key</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="page_layout">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">page_layout</item>
-                        <item name="label" xsi:type="string" translate="true">Layout</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</argument>
@@ -169,205 +113,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterSelect name="is_active">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_active</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                        <item name="options" xsi:type="array">
-                            <item name="disable" xsi:type="array">
-                                <item name="value" xsi:type="string">0</item>
-                                <item name="label" xsi:type="string" translate="true">Disabled</item>
-                            </item>
-                            <item name="enable" xsi:type="array">
-                                <item name="value" xsi:type="string">1</item>
-                                <item name="label" xsi:type="string" translate="true">Published</item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="creation_time" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">creation_time</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="update_time" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">update_time</item>
-                        <item name="label" xsi:type="string" translate="true">Modified</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="custom_theme_from" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_theme_from</item>
-                        <item name="label" xsi:type="string" translate="true">Custom design from</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="custom_theme_to" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_theme_to</item>
-                        <item name="label" xsi:type="string" translate="true">Custom design to</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterSelect name="custom_theme">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\Theme</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_theme</item>
-                        <item name="label" xsi:type="string" translate="true">Custom Theme</item>
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="custom_root_template">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_root_template</item>
-                        <item name="label" xsi:type="string" translate="true">Custom Layout</item>
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="meta_keywords">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">meta_keywords</item>
-                        <item name="label" xsi:type="string" translate="true">Meta Keywords</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="meta_description">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">meta_description</item>
-                        <item name="label" xsi:type="string" translate="true">Meta Description</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="page_layout">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                        <item name="dataScope" xsi:type="string">page_layout</item>
-                        <item name="label" xsi:type="string" translate="true">Layout</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -504,6 +249,7 @@
         <column name="page_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
@@ -513,6 +259,7 @@
         <column name="title">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
                         <item name="validation" xsi:type="array">
@@ -527,6 +274,7 @@
         <column name="identifier">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
                         <item name="validation" xsi:type="array">
@@ -542,6 +290,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -563,6 +312,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\IsActive</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -573,6 +323,7 @@
         <column name="creation_time">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
@@ -582,6 +333,7 @@
         <column name="update_time">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Modified</item>
@@ -591,6 +343,7 @@
         <column name="custom_theme_from">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="editor" xsi:type="string">date</item>
                     <item name="dataType" xsi:type="string">date</item>
@@ -603,6 +356,7 @@
         <column name="custom_theme_to">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="editor" xsi:type="string">date</item>
                     <item name="dataType" xsi:type="string">date</item>
@@ -616,6 +370,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\Theme</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -626,6 +381,7 @@
         </column>
         <column name="custom_root_template">
             <argument name="data" xsi:type="array">
+                <item name="filter" xsi:type="string">select</item>
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
@@ -639,6 +395,7 @@
         <column name="meta_keywords">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Meta Keywords</item>
@@ -649,6 +406,7 @@
         <column name="meta_description">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Meta Description</item>
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index b0eca130b00..92e8920a72b 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -43,13 +43,73 @@ define([
             filters: {
                 placeholder: true
             },
+            templates: {
+                filters: {
+                    base: {
+                        parent: '${ $.$data.filters.name }',
+                        name: '${ $.$data.column.index }',
+                        provider: '${ $.$data.filters.name }',
+                        dataScope: 'filters.${ $.$data.column.index }',
+                        label: '${ $.$data.column.label }',
+                        imports: {
+                            visible: '${ $.$data.column.name }:visible'
+                        }
+                    },
+                    text: {
+                        component: 'Magento_Ui/js/form/element/abstract',
+                        template: 'ui/grid/filters/elements/input'
+                    },
+                    select: {
+                        component: 'Magento_Ui/js/form/element/ui-select',
+                        template: 'ui/grid/filters/elements/ui-select',
+                        options: '${ JSON.stringify($.$data.column.options) }'
+                    },
+                    dateRange: {
+                        component: 'Magento_Ui/js/grid/filters/group',
+                        childDefaults: {
+                            component: 'Magento_Ui/js/form/element/date',
+                            provider: '${ $.parent }.${ $.name }',
+                            dateFormat: 'MM/dd/YYYY',
+                            template: 'ui/grid/filters/elements/date'
+                        },
+                        children: {
+                            from: {
+                                label: 'from',
+                                dataScope: 'from'
+                            },
+                            to: {
+                                label: 'to',
+                                dataScope: 'to'
+                            }
+                        }
+                    },
+                    textRange: {
+                        component: 'Magento_Ui/js/grid/filters/group',
+                        childDefaults: {
+                            component: 'Magento_Ui/js/form/element/abstract',
+                            provider: '${ $.parent }.${ $.name }',
+                            template: 'ui/grid/filters/elements/input'
+                        },
+                        children: {
+                            from: {
+                                label: 'from',
+                                dataScope: 'from'
+                            },
+                            to: {
+                                label: 'to',
+                                dataScope: 'to'
+                            }
+                        }
+                    }
+                }
+            },
             chipsConfig: {
                 name: '${ $.name }_chips',
                 provider: '${ $.chipsConfig.name }',
                 component: 'Magento_Ui/js/grid/filters/chips'
             },
             listens: {
-                active: 'extractPreviews',
+                active: 'updatePreviews',
                 applied: 'cancel extractActive'
             },
             links: {
@@ -58,7 +118,11 @@ define([
             exports: {
                 applied: '${ $.provider }:params.filters'
             },
+            imports: {
+                'onColumnsUpdate': '${ $.columnsProvider }:elems'
+            },
             modules: {
+                columns: '${ $.columnsProvider }',
                 chips: '${ $.chipsConfig.provider }'
             }
         },
@@ -105,6 +169,17 @@ define([
             return this;
         },
 
+        /**
+         *
+         * @param {Object} filter
+         * @returns {Filters} Chainable.
+         */
+        initFilter: function (filter) {
+            layout([filter]);
+
+            return this;
+        },
+
         /**
          * Called when another element was added to current component.
          *
@@ -117,6 +192,17 @@ define([
             return this;
         },
 
+        /**
+         *
+         * @param {String} index
+         * @returns {Filter|Undefined}
+         */
+        getFilter: function (index) {
+            return this.elems.findWhere({
+                index: index
+            });
+        },
+
         /**
          * Clears filters data.
          *
@@ -157,6 +243,72 @@ define([
             return this;
         },
 
+        /**
+         *
+         * @param {Column} column
+         * @returns {Object}
+         */
+        buildFilter: function (column) {
+            var filters = this.templates.filters,
+                filter  = column.filter;
+
+            if (_.isObject(filter) && filter.filterType) {
+                filter = utils.extend({}, filters[filter.filterType], filter);
+            } else if (_.isString(filter)) {
+                filter = filters[filter];
+            }
+
+            filter = utils.extend({}, filters.base, filter);
+            filter = utils.template(filter, {
+                filters: this,
+                column: column
+            }, true, true);
+
+            return filter;
+        },
+
+        /**
+         *
+         * @param {Column} column
+         * @returns {Filters} Chainable
+         */
+        createFilter: function (column) {
+            var index = column.index,
+                filter;
+
+            if (!column.filter || this.getFilter(index)) {
+                return this;
+            }
+
+            filter = this.buildFilter(column);
+
+            this.initFilter(filter);
+
+            return this;
+        },
+
+        /**
+         *
+         * @returns {Filters} Chainable
+         */
+        updateFilters: function () {
+            var columns = this.columns().elems(),
+                filters = [],
+                filter;
+
+            columns.forEach(function (column) {
+                filter = this.getFilter(column.index);
+
+                if (filter) {
+                    filters.push(filter);
+                }
+            }, this);
+
+            this.insertChild(filters);
+
+            return this;
+        },
+
         /**
          * Tells wether filters pannel should be opened.
          *
@@ -213,12 +365,21 @@ define([
          * @param {Array} filters - Filters to be processed.
          * @returns {Filters} Chainable.
          */
-        extractPreviews: function (filters) {
+        updatePreviews: function (filters) {
             var previews = filters.map(extractPreview);
 
             this.previews(_.compact(previews));
 
             return this;
+        },
+
+        /**
+         *
+         */
+        onColumnsUpdate: function (columns) {
+            columns.forEach(this.createFilter, this);
+
+            this.updateFilters();
         }
     });
 });
-- 
GitLab


From 62f52e60f87e8416b9337f4e30ee58a85db8c68c Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 4 Sep 2015 18:55:50 +0300
Subject: [PATCH 003/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Apply new declaration on Orders and Invoices
---
 .../Catalog/Ui/Component/ColumnFactory.php    |   1 -
 .../ui_component/sales_order_grid.xml         | 311 ++----------------
 .../ui_component/sales_order_invoice_grid.xml | 283 ++--------------
 .../view/base/web/js/grid/filters/filters.js  |   6 +-
 4 files changed, 60 insertions(+), 541 deletions(-)

diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
index 85eaaf679f0..154580539cc 100644
--- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
+++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
@@ -53,7 +53,6 @@ class ColumnFactory
         $config = array_merge([
             'label' => __($attribute->getDefaultFrontendLabel()),
             'dataType' => $this->getDataType($attribute),
-            'align' => 'left',
             'add_field' => true,
             'visible' => $attribute->getIsVisibleInGrid(),
         ], $config);
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index fefac94d88a..fd2ef59f37a 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -91,6 +91,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -105,14 +106,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                    </item>
-                </argument>
-            </filterInput>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -125,274 +118,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterRange name="created_at"  class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Purchase Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_name</item>
-                        <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">status</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="total_refunded">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">total_refunded</item>
-                        <item name="label" xsi:type="string" translate="true">Total Refunded</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -546,6 +271,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">desc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
@@ -565,6 +291,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Purchase Date</item>
@@ -574,6 +301,7 @@
         <column name="billing_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
@@ -582,6 +310,7 @@
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
@@ -590,6 +319,7 @@
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item>
                 </item>
@@ -598,16 +328,19 @@
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item>
                 </item>
             </argument>
         </column>
-        <column name="status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="status">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
@@ -615,6 +348,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -625,6 +359,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -635,6 +370,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
@@ -644,17 +380,21 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
@@ -662,6 +402,7 @@
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
@@ -671,6 +412,7 @@
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
@@ -680,17 +422,21 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -698,6 +444,7 @@
         <column name="total_refunded" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Total Refunded</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
index 94adb041f2a..1af1f08e6e6 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
@@ -83,6 +83,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -97,104 +98,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -207,157 +110,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -448,6 +200,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
@@ -457,6 +210,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Invoice Date</item>
@@ -466,6 +220,7 @@
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
@@ -474,6 +229,7 @@
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
@@ -482,16 +238,19 @@
         <column name="billing_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
@@ -499,6 +258,7 @@
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
@@ -518,6 +278,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -528,6 +289,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -538,6 +300,7 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
@@ -547,26 +310,33 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -574,6 +344,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
@@ -583,6 +354,7 @@
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
@@ -592,6 +364,7 @@
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 92e8920a72b..9b8b0ebfabe 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -49,7 +49,7 @@ define([
                         parent: '${ $.$data.filters.name }',
                         name: '${ $.$data.column.index }',
                         provider: '${ $.$data.filters.name }',
-                        dataScope: 'filters.${ $.$data.column.index }',
+                        dataScope: '${ $.$data.column.index }',
                         label: '${ $.$data.column.label }',
                         imports: {
                             visible: '${ $.$data.column.name }:visible'
@@ -68,7 +68,7 @@ define([
                         component: 'Magento_Ui/js/grid/filters/group',
                         childDefaults: {
                             component: 'Magento_Ui/js/form/element/date',
-                            provider: '${ $.parent }.${ $.name }',
+                            provider: '${ $.provider }',
                             dateFormat: 'MM/dd/YYYY',
                             template: 'ui/grid/filters/elements/date'
                         },
@@ -87,7 +87,7 @@ define([
                         component: 'Magento_Ui/js/grid/filters/group',
                         childDefaults: {
                             component: 'Magento_Ui/js/form/element/abstract',
-                            provider: '${ $.parent }.${ $.name }',
+                            provider: '${ $.provider }',
                             template: 'ui/grid/filters/elements/input'
                         },
                         children: {
-- 
GitLab


From cf7dc141a6b7ac8f986ab0804887da9a2e607aca Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 4 Sep 2015 19:11:48 +0300
Subject: [PATCH 004/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Migrate to new format on product attributes
---
 .../product_attributes_listing.xml            | 97 ++-----------------
 .../product_attributes_listing.xml            | 18 +---
 2 files changed, 11 insertions(+), 104 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
index 80d2ac0964f..0edccf93535 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -67,6 +67,7 @@
                     <item name="links" xsi:type="array">
                         <item name="applied" xsi:type="string">not-save-filter</item>
                     </item>
+                    <item name="columnsProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -81,94 +82,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="attribute_code">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">attribute_code</item>
-                        <item name="label" xsi:type="string" translate="true">Attribute Code</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="frontend_label">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">frontend_label</item>
-                        <item name="label" xsi:type="string" translate="true">Attribute Label</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="is_required">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_required</item>
-                        <item name="label" xsi:type="string" translate="true">Required</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_user_defined">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_user_defined</item>
-                        <item name="label" xsi:type="string" translate="true">System</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_visible">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_visible</item>
-                        <item name="label" xsi:type="string" translate="true">Visible</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_global">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Attribute\Source\Scopes</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_global</item>
-                        <item name="label" xsi:type="string" translate="true">Scope</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_searchable">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_searchable</item>
-                        <item name="label" xsi:type="string" translate="true">Searchable</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_comparable">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_comparable</item>
-                        <item name="label" xsi:type="string" translate="true">Comparable</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <paging name="listing_paging">
             <argument name="data" xsi:type="array">
@@ -233,6 +146,7 @@
         <column name="attribute_code">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Code</item>
@@ -242,6 +156,7 @@
         <column name="frontend_label">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                 </item>
@@ -251,6 +166,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Required</item>
@@ -261,6 +177,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">System</item>
@@ -271,6 +188,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Visible</item>
@@ -281,6 +199,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Attribute\Source\Scopes</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Scope</item>
@@ -291,6 +210,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Searchable</item>
@@ -301,6 +221,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Comparable</item>
diff --git a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
index d205ef1988d..81487126084 100644
--- a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -6,27 +6,13 @@
  */
 -->
 <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Ui/etc/ui_configuration.xsd">
-    <container name="listing_top">
-        <filters name="listing_filters">
-            <filterSelect name="is_filterable">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_filterable</item>
-                        <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-        </filters>
-    </container>
+    <container name="listing_top"></container>
     <columns name="product_attributes_columns">
         <column name="is_filterable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item>
-- 
GitLab


From 41f05fb013c84f96b4cbe38c2fc93241995cf5ab Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 7 Sep 2015 13:32:24 +0300
Subject: [PATCH 005/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Change filters definition on 'Credit memos' and' Shipments' listings
---
 .../sales_order_creditmemo_grid.xml           | 389 ++----------------
 .../sales_order_shipment_grid.xml             | 223 ++--------
 2 files changed, 60 insertions(+), 552 deletions(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
index 4d838aa0944..302b87e9fe3 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
@@ -83,6 +83,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -97,145 +98,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Credit Memo #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Refunded</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -248,215 +110,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="adjustment_positive">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">adjustment_positive</item>
-                        <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="adjustment_negative">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">adjustment_negative</item>
-                        <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="order_base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -547,6 +200,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
@@ -555,6 +209,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
@@ -564,6 +219,7 @@
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
@@ -572,6 +228,7 @@
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
@@ -581,16 +238,19 @@
         <column name="billing_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
@@ -598,6 +258,7 @@
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
@@ -605,10 +266,12 @@
         </column>
         <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
@@ -627,6 +290,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -637,6 +301,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -647,6 +312,7 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
@@ -656,26 +322,33 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -683,6 +356,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
@@ -692,6 +366,7 @@
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
@@ -701,6 +376,7 @@
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
@@ -710,6 +386,7 @@
         <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
@@ -719,6 +396,7 @@
         <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
@@ -728,6 +406,7 @@
         <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
index 5e880cf71c8..23f01b82821 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
@@ -83,6 +83,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -97,133 +98,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Shipment #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Ship Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="shipping_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_name</item>
-                        <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="total_qty">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">total_qty</item>
-                        <item name="label" xsi:type="string" translate="true">Total Quantity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -236,70 +110,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -399,6 +209,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
@@ -408,6 +219,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Ship Date</item>
@@ -417,6 +229,7 @@
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
@@ -425,6 +238,7 @@
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
@@ -434,6 +248,7 @@
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
@@ -442,17 +257,20 @@
         <column name="total_qty">
             <argument name="data" xsi:type="array">               
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
@@ -471,6 +289,7 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
@@ -480,17 +299,21 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
@@ -498,6 +321,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -508,6 +332,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -515,11 +340,14 @@
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -527,6 +355,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-- 
GitLab


From 1c75b90e6aabdc1f2c07fd585063e0315af90c93 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 7 Sep 2015 15:09:04 +0300
Subject: [PATCH 006/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Change declaration on sales views pages
- Change declaration on products listing (except for custom attributes)
---
 .../Catalog/Ui/Component/ColumnFactory.php    |  11 +-
 .../ui_component/product_listing.xml          | 103 +-----
 .../sales_order_view_creditmemo_grid.xml      | 333 ++----------------
 .../sales_order_view_invoice_grid.xml         | 284 ++-------------
 .../sales_order_view_shipment_grid.xml        | 223 ++----------
 5 files changed, 106 insertions(+), 848 deletions(-)

diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
index 154580539cc..001facb345a 100644
--- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
+++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
@@ -60,15 +60,20 @@ class ColumnFactory
         if ($attribute->usesSource()) {
             $config['options'] = $attribute->getSource()->getAllOptions();
         }
+        
+        if ($attribute->getIsFilterableInGrid()) {
+
+        }
+        
+        $config['component'] = $this->getJsComponent($config['dataType']);
+        
         $arguments = [
             'data' => [
-                'js_config' => [
-                    'component' => $this->getJsComponent($config['dataType']),
-                ],
                 'config' => $config,
             ],
             'context' => $context,
         ];
+        
         return $this->componentFactory->create($columnName, 'column', $arguments);
     }
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index f4b4889854e..e42a9732d9d 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -61,9 +61,10 @@
                 </item>
             </argument>
         </container>
-        <filters name="listing_filters" class="Magento\Catalog\Ui\Component\Listing\Filters">
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">product_listing.product_listing.product_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -78,99 +79,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">name</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="type_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Type</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">type_id</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Type</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="attribute_set_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\AttributeSet\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">attribute_set_id</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Attribute Set</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="sku">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">sku</item>
-                        <item name="label" xsi:type="string" translate="true">SKU</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="price">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">price</item>
-                        <item name="label" xsi:type="string" translate="true">Price</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="visibility">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Visibility</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">visibility</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Visibility</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">status</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -338,6 +246,7 @@
         <column name="name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
@@ -349,6 +258,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Type</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Type</item>
@@ -360,6 +270,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\AttributeSet\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Set</item>
@@ -370,6 +281,7 @@
         <column name="sku">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
                     <item name="sortOrder" xsi:type="number">60</item>
@@ -379,6 +291,7 @@
         <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
@@ -390,6 +303,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Visibility</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -402,6 +316,7 @@
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Attribute\Source\Status</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
index bb6eba32c92..9fcd25c569f 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
@@ -86,6 +86,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -100,145 +101,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Credit Memo</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Refunded</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -251,157 +113,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="order_base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -480,7 +191,7 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
@@ -492,6 +203,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
@@ -500,6 +212,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
@@ -509,6 +222,7 @@
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
@@ -517,6 +231,7 @@
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
@@ -526,16 +241,19 @@
         <column name="billing_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
@@ -543,6 +261,7 @@
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
@@ -550,10 +269,12 @@
         </column>
         <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
@@ -572,6 +293,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -582,6 +304,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -592,6 +315,7 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
@@ -601,26 +325,33 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -628,6 +359,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
@@ -637,6 +369,7 @@
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
@@ -646,6 +379,7 @@
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
@@ -655,6 +389,7 @@
         <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
@@ -664,6 +399,7 @@
         <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
@@ -673,6 +409,7 @@
         <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
index faf52b87b26..a252cc1b3ef 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
@@ -86,6 +86,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -100,104 +101,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -210,157 +113,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -451,6 +203,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
@@ -460,6 +213,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Invoice Date</item>
@@ -469,6 +223,7 @@
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
@@ -477,7 +232,7 @@
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
@@ -486,16 +241,19 @@
         <column name="billing_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
@@ -503,6 +261,7 @@
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
@@ -522,6 +281,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -532,6 +292,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -542,6 +303,7 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
@@ -551,26 +313,33 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -578,6 +347,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
@@ -587,6 +357,7 @@
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
@@ -596,6 +367,7 @@
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index b5932cc18fa..14662cf099e 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -86,6 +86,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns</item>
                     <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
@@ -100,133 +101,6 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Shipment #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Ship Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="shipping_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_name</item>
-                        <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="total_qty">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">total_qty</item>
-                        <item name="label" xsi:type="string" translate="true">Total Quantity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
@@ -239,70 +113,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
@@ -397,6 +207,7 @@
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
@@ -406,6 +217,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Ship Date</item>
@@ -415,6 +227,7 @@
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
@@ -423,6 +236,7 @@
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
@@ -432,6 +246,7 @@
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
@@ -440,17 +255,20 @@
         <column name="total_qty">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
@@ -469,6 +287,7 @@
         <column name="customer_name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
@@ -478,17 +297,21 @@
         <column name="customer_email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
@@ -496,6 +319,7 @@
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -506,6 +330,7 @@
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
@@ -513,11 +338,14 @@
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
@@ -525,6 +353,7 @@
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-- 
GitLab


From c1750d1984e5d229c2c852c70ad94362efb8470a Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 7 Sep 2015 15:58:51 +0300
Subject: [PATCH 007/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Remove old filter declaration from Catalog Inventory
---
 .../ui_component/product_listing.xml          | 34 +------------------
 1 file changed, 1 insertion(+), 33 deletions(-)

diff --git a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
index 1596400be77..7d795608ee3 100644
--- a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
@@ -6,43 +6,11 @@
  */
 -->
 <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Ui/etc/ui_configuration.xsd">
-    <container name="listing_top">
-        <filters name="listing_filters" class="Magento\Catalog\Ui\Component\Listing\Filters">
-            <filterRange name="qty">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">qty</item>
-                        <item name="label" xsi:type="string" translate="true">Quantity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-        </filters>
-    </container>
     <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns">
         <column name="qty">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Quantity</item>
-- 
GitLab


From 6fa4995ecd5fe16fc79616cf4a171213694eddf6 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Tue, 18 Aug 2015 19:37:55 +0300
Subject: [PATCH 008/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

---
 .../Controller/Adminhtml/Block/MassDelete.php |   9 +-
 .../Controller/Adminhtml/Page/MassDelete.php  |   9 +-
 .../Adminhtml/AbstractMassDeleteTest.php      |  68 +++++++++++
 .../Adminhtml/Block/MassDeleteTest.php        | 114 ++++++++++++++++++
 .../Adminhtml/Page/MassDeleteTest.php         | 114 ++++++++++++++++++
 5 files changed, 306 insertions(+), 8 deletions(-)
 create mode 100644 app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php
 create mode 100644 app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
 create mode 100644 app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php

diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
index d9a8c044873..42319679b92 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
@@ -47,12 +47,13 @@ class MassDelete extends \Magento\Backend\App\Action
     public function execute()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
-
-        foreach ($collection as $item) {
-            $item->delete();
+        $deletedBlocks = 0;
+        foreach ($collection as $block) {
+            $block->delete();
+            $deletedBlocks++;
         }
 
-        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $collection->getSize()));
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $deletedBlocks));
 
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
index e5cfcf22966..e699a3a480e 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
@@ -46,12 +46,13 @@ class MassDelete extends \Magento\Backend\App\Action
     public function execute()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
-
-        foreach ($collection as $item) {
-            $item->delete();
+        $deletedPages = 0;
+        foreach ($collection as $page) {
+            $page->delete();
+            $deletedPages++;
         }
 
-        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $collection->getSize()));
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $deletedPages));
 
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php
new file mode 100644
index 00000000000..0668edee3be
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Controller\Adminhtml;
+
+use Magento\Framework\Controller\ResultFactory;
+
+abstract class AbstractMassDeleteTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
+     */
+    protected $objectManager;
+
+    /**
+     * @var \Magento\Backend\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $contextMock;
+
+    /**
+     * @var \Magento\Framework\Controller\ResultFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultFactoryMock;
+
+    /**
+     * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirectMock;
+
+    /**
+     * @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $messageManagerMock;
+
+    /**
+     * @var \Magento\Ui\Component\MassAction\Filter|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $filterMock;
+
+    protected function setUp()
+    {
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->messageManagerMock = $this->getMock('Magento\Framework\Message\ManagerInterface', [], [], '', false);
+
+        $this->resultFactoryMock = $this->getMockBuilder('Magento\Framework\Controller\ResultFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultRedirectMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultFactoryMock->expects($this->any())
+            ->method('create')
+            ->with(ResultFactory::TYPE_REDIRECT, [])
+            ->willReturn($this->resultRedirectMock);
+
+        $this->contextMock = $this->getMock('\Magento\Backend\App\Action\Context', [], [], '', false);
+
+        $this->filterMock = $this->getMockBuilder('Magento\Ui\Component\MassAction\Filter')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManagerMock);
+        $this->contextMock->expects($this->any())->method('getResultFactory')->willReturn($this->resultFactoryMock);
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
new file mode 100644
index 00000000000..7db8d7b28ca
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Block;
+
+use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassDeleteTest;
+
+class MassDeleteTest extends AbstractMassDeleteTest
+{
+    /**
+     * @var \Magento\Cms\Controller\Adminhtml\Block\MassDelete
+     */
+    protected $massDeleteController;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $collectionFactoryMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $blockCollectionMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $headerBlockCollectionMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $footerBlockCollectionMock;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->collectionFactoryMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Block\CollectionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+
+        $this->blockCollectionMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Block\Collection',
+            ['delete'],
+            [],
+            '',
+            false
+        );
+
+        $this->headerBlockCollectionMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Block\Collection',
+            ['delete'],
+            [],
+            '',
+            false
+        );
+
+        $this->footerBlockCollectionMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Block\Collection',
+            ['delete'],
+            [],
+            '',
+            false
+        );
+
+        $this->massDeleteController = $this->objectManager->getObject(
+            'Magento\Cms\Controller\Adminhtml\Block\MassDelete',
+            [
+                'context' => $this->contextMock,
+                'filter' => $this->filterMock,
+                'collectionFactory' => $this->collectionFactoryMock
+            ]
+        );
+    }
+
+    public function testMassDeleteAction()
+    {
+        $deletedBlocks = 2;
+
+        $collection = [
+            $this->headerBlockCollectionMock,
+            $this->footerBlockCollectionMock
+        ];
+
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->blockCollectionMock);
+
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->blockCollectionMock)
+            ->willReturn($collection);
+
+        $this->headerBlockCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
+        $this->footerBlockCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been deleted.', $deletedBlocks));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
+
+        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
new file mode 100644
index 00000000000..0bc28b3c52a
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Page;
+
+use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassDeleteTest;
+
+class MassDeleteTest extends AbstractMassDeleteTest
+{
+    /**
+     * @var \Magento\Cms\Controller\Adminhtml\Page\MassDelete
+     */
+    protected $massDeleteController;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $collectionFactoryMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $homePageCollectionMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $welcomePageCollectionMock;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->collectionFactoryMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+
+        $this->pageCollectionMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\Collection',
+            ['delete'],
+            [],
+            '',
+            false
+        );
+
+        $this->homePageCollectionMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\Collection',
+            ['delete'],
+            [],
+            '',
+            false
+        );
+
+        $this->welcomePageCollectionMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\Collection',
+            ['delete'],
+            [],
+            '',
+            false
+        );
+
+        $this->massDeleteController = $this->objectManager->getObject(
+            'Magento\Cms\Controller\Adminhtml\Page\MassDelete',
+            [
+                'context' => $this->contextMock,
+                'filter' => $this->filterMock,
+                'collectionFactory' => $this->collectionFactoryMock
+            ]
+        );
+    }
+
+    public function testMassDeleteAction()
+    {
+        $deletedPages = 2;
+
+        $collection = [
+            $this->homePageCollectionMock,
+            $this->welcomePageCollectionMock
+        ];
+
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
+
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($collection);
+
+        $this->homePageCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
+        $this->welcomePageCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been deleted.', $deletedPages));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
+
+        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
+    }
+}
-- 
GitLab


From 4d5a2abcce5c8a4642bb65c9a96be455f1d743ac Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Wed, 19 Aug 2015 12:52:06 +0300
Subject: [PATCH 009/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Unit tests updated;
---
 .../Adminhtml/Block/MassDeleteTest.php        | 63 +++++--------------
 .../Adminhtml/Page/MassDeleteTest.php         | 63 +++++--------------
 2 files changed, 34 insertions(+), 92 deletions(-)

diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
index 7db8d7b28ca..f27016e49d4 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -19,21 +19,6 @@ class MassDeleteTest extends AbstractMassDeleteTest
      */
     protected $collectionFactoryMock;
 
-    /**
-     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $blockCollectionMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $headerBlockCollectionMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $footerBlockCollectionMock;
-
     protected function setUp()
     {
         parent::setUp();
@@ -46,30 +31,6 @@ class MassDeleteTest extends AbstractMassDeleteTest
             false
         );
 
-        $this->blockCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Block\Collection',
-            ['delete'],
-            [],
-            '',
-            false
-        );
-
-        $this->headerBlockCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Block\Collection',
-            ['delete'],
-            [],
-            '',
-            false
-        );
-
-        $this->footerBlockCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Block\Collection',
-            ['delete'],
-            [],
-            '',
-            false
-        );
-
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Block\MassDelete',
             [
@@ -85,20 +46,17 @@ class MassDeleteTest extends AbstractMassDeleteTest
         $deletedBlocks = 2;
 
         $collection = [
-            $this->headerBlockCollectionMock,
-            $this->footerBlockCollectionMock
+            $this->getBlockMock(),
+            $this->getBlockMock()
         ];
 
-        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->blockCollectionMock);
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->getBlockMock());
 
         $this->filterMock->expects($this->once())
             ->method('getCollection')
-            ->with($this->blockCollectionMock)
+            ->with($this->getBlockMock())
             ->willReturn($collection);
 
-        $this->headerBlockCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
-        $this->footerBlockCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
-
         $this->messageManagerMock->expects($this->once())
             ->method('addSuccess')
             ->with(__('A total of %1 record(s) have been deleted.', $deletedBlocks));
@@ -111,4 +69,17 @@ class MassDeleteTest extends AbstractMassDeleteTest
 
         $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
     }
+
+    /**
+     * Create Cms Block Collection Mock
+     *
+     * @return \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getBlockMock()
+    {
+        $blockMock = $this->getMock('Magento\Cms\Model\Resource\Block\Collection', ['delete'], [], '', false);
+        $blockMock->expects($this->any())->method('delete')->willReturn(true);
+
+        return $blockMock;
+    }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index 0bc28b3c52a..f768a6480e6 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -19,21 +19,6 @@ class MassDeleteTest extends AbstractMassDeleteTest
      */
     protected $collectionFactoryMock;
 
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCollectionMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $homePageCollectionMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $welcomePageCollectionMock;
-
     protected function setUp()
     {
         parent::setUp();
@@ -46,30 +31,6 @@ class MassDeleteTest extends AbstractMassDeleteTest
             false
         );
 
-        $this->pageCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
-            ['delete'],
-            [],
-            '',
-            false
-        );
-
-        $this->homePageCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
-            ['delete'],
-            [],
-            '',
-            false
-        );
-
-        $this->welcomePageCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
-            ['delete'],
-            [],
-            '',
-            false
-        );
-
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDelete',
             [
@@ -85,20 +46,17 @@ class MassDeleteTest extends AbstractMassDeleteTest
         $deletedPages = 2;
 
         $collection = [
-            $this->homePageCollectionMock,
-            $this->welcomePageCollectionMock
+            $this->getPageMock(),
+            $this->getPageMock()
         ];
 
-        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->getPageMock());
 
         $this->filterMock->expects($this->once())
             ->method('getCollection')
-            ->with($this->pageCollectionMock)
+            ->with($this->getPageMock())
             ->willReturn($collection);
 
-        $this->homePageCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
-        $this->welcomePageCollectionMock->expects($this->exactly(1))->method('delete')->willReturn(true);
-
         $this->messageManagerMock->expects($this->once())
             ->method('addSuccess')
             ->with(__('A total of %1 record(s) have been deleted.', $deletedPages));
@@ -111,4 +69,17 @@ class MassDeleteTest extends AbstractMassDeleteTest
 
         $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
     }
+
+    /**
+     * Create Cms Page Collection Mock
+     *
+     * @return \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getPageMock()
+    {
+        $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', ['delete'], [], '', false);
+        $pageMock->expects($this->any())->method('delete')->willReturn(true);
+
+        return $pageMock;
+    }
 }
-- 
GitLab


From 8833dbec27cb205acf587fa828790d1c970a5fa4 Mon Sep 17 00:00:00 2001
From: Yuri Kovsher <ikovsher@ebay.com>
Date: Fri, 21 Aug 2015 13:20:17 +0300
Subject: [PATCH 010/420] MAGETWO-41916: Production Mode does not Work for
 Authorize.net

---
 .../Authorizenet/etc/adminhtml/system.xml     | 25 +++++++++++--------
 app/code/Magento/Authorizenet/etc/config.xml  |  2 ++
 2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/app/code/Magento/Authorizenet/etc/adminhtml/system.xml b/app/code/Magento/Authorizenet/etc/adminhtml/system.xml
index 591d0951e2d..cfff3a92745 100644
--- a/app/code/Magento/Authorizenet/etc/adminhtml/system.xml
+++ b/app/code/Magento/Authorizenet/etc/adminhtml/system.xml
@@ -44,45 +44,48 @@
                 <field id="cgi_url" translate="label" type="text" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Gateway URL</label>
                 </field>
-                <field id="currency" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="cgi_url_td" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0">
+                    <label>Transaction Details Url</label>
+                </field>
+                <field id="currency" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Accepted Currency</label>
                     <source_model>Magento\Config\Model\Config\Source\Locale\Currency</source_model>
                 </field>
-                <field id="debug" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="debug" translate="label" type="select" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Debug</label>
                     <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                 </field>
-                <field id="email_customer" translate="label" type="select" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="email_customer" translate="label" type="select" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Email Customer</label>
                     <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                 </field>
-                <field id="merchant_email" translate="label" type="text" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="merchant_email" translate="label" type="text" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Merchant's Email</label>
                     <validate>validate-email</validate>
                 </field>
-                <field id="cctypes" translate="label" type="multiselect" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="cctypes" translate="label" type="multiselect" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Credit Card Types</label>
                     <source_model>Magento\Authorizenet\Model\Source\Cctype</source_model>
                 </field>
-                <field id="useccv" translate="label" type="select" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="useccv" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Credit Card Verification</label>
                     <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                 </field>
-                <field id="allowspecific" translate="label" type="allowspecific" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="allowspecific" translate="label" type="allowspecific" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Payment from Applicable Countries</label>
                     <source_model>Magento\Payment\Model\Config\Source\Allspecificcountries</source_model>
                 </field>
-                <field id="specificcountry" translate="label" type="multiselect" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="specificcountry" translate="label" type="multiselect" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Payment from Specific Countries</label>
                     <source_model>Magento\Directory\Model\Config\Source\Country</source_model>
                 </field>
-                <field id="min_order_total" translate="label" type="text" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="min_order_total" translate="label" type="text" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Minimum Order Total</label>
                 </field>
-                <field id="max_order_total" translate="label" type="text" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="max_order_total" translate="label" type="text" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Maximum Order Total</label>
                 </field>
-                <field id="sort_order" translate="label" type="text" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="0">
+                <field id="sort_order" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>Sort Order</label>
                     <frontend_class>validate-number</frontend_class>
                 </field>
diff --git a/app/code/Magento/Authorizenet/etc/config.xml b/app/code/Magento/Authorizenet/etc/config.xml
index a620f157b10..d672c305df3 100644
--- a/app/code/Magento/Authorizenet/etc/config.xml
+++ b/app/code/Magento/Authorizenet/etc/config.xml
@@ -30,6 +30,8 @@
                 <place_order_url>authorizenet/directpost_payment/place</place_order_url>
                 <cgi_url_test_mode>https://test.authorize.net/gateway/transact.dll</cgi_url_test_mode>
                 <cgi_url>https://secure.authorize.net/gateway/transact.dll</cgi_url>
+                <cgi_url_td_test_mode>https://apitest.authorize.net/xml/v1/request.api</cgi_url_td_test_mode>
+                <cgi_url_td>https://api2.authorize.net/xml/v1/request.api</cgi_url_td>
             </authorizenet_directpost>
         </payment>
     </default>
-- 
GitLab


From 05561f977dd45a11ff6220b3798b1350ef14c85c Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Tue, 25 Aug 2015 19:23:36 +0300
Subject: [PATCH 011/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Unit tests updated;
---
 .../Controller/Adminhtml/Block/MassDeleteTest.php   | 13 ++++++++++---
 .../Controller/Adminhtml/Page/MassDeleteTest.php    | 13 ++++++++++---
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
index f27016e49d4..467295679e9 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -19,6 +19,11 @@ class MassDeleteTest extends AbstractMassDeleteTest
      */
     protected $collectionFactoryMock;
 
+    /**
+     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $blockCollectionMock;
+
     protected function setUp()
     {
         parent::setUp();
@@ -31,6 +36,8 @@ class MassDeleteTest extends AbstractMassDeleteTest
             false
         );
 
+        $this->blockCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Block\Collection', [], [], '', false);
+
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Block\MassDelete',
             [
@@ -50,11 +57,11 @@ class MassDeleteTest extends AbstractMassDeleteTest
             $this->getBlockMock()
         ];
 
-        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->getBlockMock());
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->blockCollectionMock);
 
         $this->filterMock->expects($this->once())
             ->method('getCollection')
-            ->with($this->getBlockMock())
+            ->with($this->blockCollectionMock)
             ->willReturn($collection);
 
         $this->messageManagerMock->expects($this->once())
@@ -78,7 +85,7 @@ class MassDeleteTest extends AbstractMassDeleteTest
     protected function getBlockMock()
     {
         $blockMock = $this->getMock('Magento\Cms\Model\Resource\Block\Collection', ['delete'], [], '', false);
-        $blockMock->expects($this->any())->method('delete')->willReturn(true);
+        $blockMock->expects($this->once())->method('delete')->willReturn(true);
 
         return $blockMock;
     }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index f768a6480e6..923d4dcfc1a 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -19,6 +19,11 @@ class MassDeleteTest extends AbstractMassDeleteTest
      */
     protected $collectionFactoryMock;
 
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
     protected function setUp()
     {
         parent::setUp();
@@ -31,6 +36,8 @@ class MassDeleteTest extends AbstractMassDeleteTest
             false
         );
 
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDelete',
             [
@@ -50,11 +57,11 @@ class MassDeleteTest extends AbstractMassDeleteTest
             $this->getPageMock()
         ];
 
-        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->getPageMock());
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
         $this->filterMock->expects($this->once())
             ->method('getCollection')
-            ->with($this->getPageMock())
+            ->with($this->pageCollectionMock)
             ->willReturn($collection);
 
         $this->messageManagerMock->expects($this->once())
@@ -78,7 +85,7 @@ class MassDeleteTest extends AbstractMassDeleteTest
     protected function getPageMock()
     {
         $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', ['delete'], [], '', false);
-        $pageMock->expects($this->any())->method('delete')->willReturn(true);
+        $pageMock->expects($this->once())->method('delete')->willReturn(true);
 
         return $pageMock;
     }
-- 
GitLab


From 406e289ece8a0f9c6ab9a4278e3f3f9d3f277dec Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Wed, 26 Aug 2015 12:19:07 +0300
Subject: [PATCH 012/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Updated logic for deleted pages and blocks count;
- Unit tests updated;
---
 .../Cms/Controller/Adminhtml/Block/MassDelete.php     |  6 +++---
 .../Cms/Controller/Adminhtml/Page/MassDelete.php      |  6 +++---
 .../Controller/Adminhtml/Block/MassDeleteTest.php     | 11 ++++++++---
 .../Unit/Controller/Adminhtml/Page/MassDeleteTest.php | 11 ++++++++---
 4 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
index 42319679b92..6004e737bb0 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
@@ -47,13 +47,13 @@ class MassDelete extends \Magento\Backend\App\Action
     public function execute()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
-        $deletedBlocks = 0;
+        $collectionSize = $collection->getSize();
+
         foreach ($collection as $block) {
             $block->delete();
-            $deletedBlocks++;
         }
 
-        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $deletedBlocks));
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $collectionSize));
 
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
index e699a3a480e..6505b7e6b7d 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
@@ -46,13 +46,13 @@ class MassDelete extends \Magento\Backend\App\Action
     public function execute()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
-        $deletedPages = 0;
+        $collectionSize = $collection->getSize();
+
         foreach ($collection as $page) {
             $page->delete();
-            $deletedPages++;
         }
 
-        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $deletedPages));
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $collectionSize));
 
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
index 467295679e9..f19d0c23d1d 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -50,7 +50,7 @@ class MassDeleteTest extends AbstractMassDeleteTest
 
     public function testMassDeleteAction()
     {
-        $deletedBlocks = 2;
+        $deletedBlocksCount = 2;
 
         $collection = [
             $this->getBlockMock(),
@@ -62,11 +62,16 @@ class MassDeleteTest extends AbstractMassDeleteTest
         $this->filterMock->expects($this->once())
             ->method('getCollection')
             ->with($this->blockCollectionMock)
-            ->willReturn($collection);
+            ->willReturn($this->blockCollectionMock);
+
+        $this->blockCollectionMock->expects($this->once())->method('getSize')->willReturn($deletedBlocksCount);
+        $this->blockCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
 
         $this->messageManagerMock->expects($this->once())
             ->method('addSuccess')
-            ->with(__('A total of %1 record(s) have been deleted.', $deletedBlocks));
+            ->with(__('A total of %1 record(s) have been deleted.', $deletedBlocksCount));
         $this->messageManagerMock->expects($this->never())->method('addError');
 
         $this->resultRedirectMock->expects($this->once())
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index 923d4dcfc1a..e728187acbc 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -50,7 +50,7 @@ class MassDeleteTest extends AbstractMassDeleteTest
 
     public function testMassDeleteAction()
     {
-        $deletedPages = 2;
+        $deletedPagesCount = 2;
 
         $collection = [
             $this->getPageMock(),
@@ -62,11 +62,16 @@ class MassDeleteTest extends AbstractMassDeleteTest
         $this->filterMock->expects($this->once())
             ->method('getCollection')
             ->with($this->pageCollectionMock)
-            ->willReturn($collection);
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($deletedPagesCount);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
 
         $this->messageManagerMock->expects($this->once())
             ->method('addSuccess')
-            ->with(__('A total of %1 record(s) have been deleted.', $deletedPages));
+            ->with(__('A total of %1 record(s) have been deleted.', $deletedPagesCount));
         $this->messageManagerMock->expects($this->never())->method('addError');
 
         $this->resultRedirectMock->expects($this->once())
-- 
GitLab


From 85968e6bd122184a286fed2ff3b26565348e281b Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Fri, 28 Aug 2015 16:50:25 +0300
Subject: [PATCH 013/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Changed success message for mass enable and mass disable actions;
- Unit tests added;
---
 .../Controller/Adminhtml/Page/MassDisable.php |   2 +-
 .../Controller/Adminhtml/Page/MassEnable.php  |   2 +-
 ...eteTest.php => AbstractMassActionTest.php} |   2 +-
 .../Adminhtml/Block/MassDeleteTest.php        |   4 +-
 .../Adminhtml/Page/MassDeleteTest.php         |   4 +-
 .../Adminhtml/Page/MassDisableTest.php        | 103 ++++++++++++++++++
 .../Adminhtml/Page/MassEnableTest.php         | 103 ++++++++++++++++++
 7 files changed, 213 insertions(+), 7 deletions(-)
 rename app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/{AbstractMassDeleteTest.php => AbstractMassActionTest.php} (97%)
 create mode 100644 app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
 create mode 100644 app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php

diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
index e572618c623..e3d39c9a6f2 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
@@ -52,7 +52,7 @@ class MassDisable extends \Magento\Backend\App\Action
             $item->save();
         }
 
-        $this->messageManager->addSuccess(__('A total of %1 record(s) have been updated.', $collection->getSize()));
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been disabled.', $collection->getSize()));
 
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
index b8f4a693069..a6c7415d9d5 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
@@ -52,7 +52,7 @@ class MassEnable extends \Magento\Backend\App\Action
             $item->save();
         }
 
-        $this->messageManager->addSuccess(__('A total of %1 record(s) have been updated.', $collection->getSize()));
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been enabled.', $collection->getSize()));
 
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
similarity index 97%
rename from app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php
rename to app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
index 0668edee3be..83802f3515b 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
@@ -7,7 +7,7 @@ namespace Magento\Cms\Test\Unit\Controller\Adminhtml;
 
 use Magento\Framework\Controller\ResultFactory;
 
-abstract class AbstractMassDeleteTest extends \PHPUnit_Framework_TestCase
+abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
index f19d0c23d1d..2910d63641d 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -5,9 +5,9 @@
  */
 namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Block;
 
-use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassDeleteTest;
+use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassActionTest;
 
-class MassDeleteTest extends AbstractMassDeleteTest
+class MassDeleteTest extends AbstractMassActionTest
 {
     /**
      * @var \Magento\Cms\Controller\Adminhtml\Block\MassDelete
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index e728187acbc..6f87c8bca31 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -5,9 +5,9 @@
  */
 namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Page;
 
-use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassDeleteTest;
+use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassActionTest;
 
-class MassDeleteTest extends AbstractMassDeleteTest
+class MassDeleteTest extends AbstractMassActionTest
 {
     /**
      * @var \Magento\Cms\Controller\Adminhtml\Page\MassDelete
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
new file mode 100644
index 00000000000..1eddcf295be
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Page;
+
+use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassActionTest;
+
+class MassDisableTest extends AbstractMassActionTest
+{
+    /**
+     * @var \Magento\Cms\Controller\Adminhtml\Page\MassDisable
+     */
+    protected $massDisableController;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $collectionFactoryMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->collectionFactoryMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
+        $this->massDisableController = $this->objectManager->getObject(
+            'Magento\Cms\Controller\Adminhtml\Page\MassDisable',
+            [
+                'context' => $this->contextMock,
+                'filter' => $this->filterMock,
+                'collectionFactory' => $this->collectionFactoryMock
+            ]
+        );
+    }
+
+    public function testMassDisableAction()
+    {
+        $disabledPagesCount = 2;
+
+        $collection = [
+            $this->getPageMock(),
+            $this->getPageMock()
+        ];
+
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
+
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($disabledPagesCount);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been disabled.', $disabledPagesCount));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
+
+        $this->assertSame($this->resultRedirectMock, $this->massDisableController->execute());
+    }
+
+    /**
+     * Create Cms Page Collection Mock
+     *
+     * @return \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getPageMock()
+    {
+        $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection',
+            ['setIsActive', 'save'],
+            [],
+            '',
+            false
+        );
+        $pageMock->expects($this->once())->method('setIsActive')->with(false)->willReturn(true);
+        $pageMock->expects($this->once())->method('save')->willReturn(true);
+
+        return $pageMock;
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
new file mode 100644
index 00000000000..d40a15e4069
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Page;
+
+use Magento\Cms\Test\Unit\Controller\Adminhtml\AbstractMassActionTest;
+
+class MassEnableTest extends AbstractMassActionTest
+{
+    /**
+     * @var \Magento\Cms\Controller\Adminhtml\Page\MassEnable
+     */
+    protected $massEnableController;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $collectionFactoryMock;
+
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->collectionFactoryMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
+        $this->massEnableController = $this->objectManager->getObject(
+            'Magento\Cms\Controller\Adminhtml\Page\MassEnable',
+            [
+                'context' => $this->contextMock,
+                'filter' => $this->filterMock,
+                'collectionFactory' => $this->collectionFactoryMock
+            ]
+        );
+    }
+
+    public function testMassEnableAction()
+    {
+        $enabledPagesCount = 2;
+
+        $collection = [
+            $this->getPageMock(),
+            $this->getPageMock()
+        ];
+
+        $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
+
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($enabledPagesCount);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been enabled.', $enabledPagesCount));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
+
+        $this->assertSame($this->resultRedirectMock, $this->massEnableController->execute());
+    }
+
+    /**
+     * Create Cms Page Collection Mock
+     *
+     * @return \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getPageMock()
+    {
+        $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection',
+            ['setIsActive', 'save'],
+            [],
+            '',
+            false
+        );
+        $pageMock->expects($this->once())->method('setIsActive')->with(true)->willReturn(true);
+        $pageMock->expects($this->once())->method('save')->willReturn(true);
+
+        return $pageMock;
+    }
+}
-- 
GitLab


From 93ca0a23cb4c4b340900b75ab096c4e93d1356d0 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Fri, 28 Aug 2015 16:58:20 +0300
Subject: [PATCH 014/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Code style updated;
---
 .../Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php    | 3 ++-
 .../Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
index 1eddcf295be..7bc2ee03ecf 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
@@ -89,7 +89,8 @@ class MassDisableTest extends AbstractMassActionTest
      */
     protected function getPageMock()
     {
-        $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection',
+        $pageMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\Collection',
             ['setIsActive', 'save'],
             [],
             '',
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
index d40a15e4069..2fbef8db334 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
@@ -89,7 +89,8 @@ class MassEnableTest extends AbstractMassActionTest
      */
     protected function getPageMock()
     {
-        $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection',
+        $pageMock = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\Collection',
             ['setIsActive', 'save'],
             [],
             '',
-- 
GitLab


From 1de00758a8c8c0b6dd85df4de530642d20f59fd8 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 28 Aug 2015 18:34:28 +0300
Subject: [PATCH 015/420] MAGETWO-42092: CMS page preview not works when
 changing store view

---
 .../Magento/Backend/Block/Store/Switcher.php  | 19 ++++++++++++++
 .../adminhtml/templates/store/switcher.phtml  | 25 ++++++++++++++++---
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Store/Switcher.php b/app/code/Magento/Backend/Block/Store/Switcher.php
index a224e2a3b40..80617c52ac3 100644
--- a/app/code/Magento/Backend/Block/Store/Switcher.php
+++ b/app/code/Magento/Backend/Block/Store/Switcher.php
@@ -87,6 +87,11 @@ class Switcher extends \Magento\Backend\Block\Template
      */
     protected $_storeFactory;
 
+    /**
+     * @var bool
+     */
+    protected $isUsingIframe = false;
+
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
@@ -558,4 +563,18 @@ class Switcher extends \Magento\Backend\Block\Template
         }
         return $html;
     }
+
+    /**
+     * @param $state
+     */
+    public function setUseIframe($state = false) {
+        $this->isUsingIframe = (bool) $state;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isUsingIframe() {
+        return $this->isUsingIframe;
+    }
 }
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
index a2f94b3563c..f1e457f0367 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
@@ -30,7 +30,8 @@
             class="admin__action-dropdown"
             data-mage-init='{"dropdown":{}}'
             data-toggle="dropdown"
-            aria-haspopup="true">
+            aria-haspopup="true"
+            id="store-change-button">
             <?php echo $block->getCurrentSelectionName() ?>
         </button>
         <ul class="dropdown-menu" data-role="stores-list">
@@ -168,15 +169,33 @@ require(['jquery'], function(jQuery){
             };
             scopeSwitcherHandler(switcherParams);
         } else {
-            var url = '<?php echo $block->getSwitchUrl() ?>' + scopeParams;
+
             <?php if ($block->getUseConfirm()): ?>
             if (confirm("<?php echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>")) {
-                setLocation(url);
+                reload();
             } else {
                 obj.value = '<?php echo $block->getStoreId() ?>';
             }
             <?php else: ?>
+                reload();
+            <?php endif; ?>
+        }
+
+        function reload() {
+            <?php if (!$block->isUsingIframe()): ?>
+            var url = '<?php echo $block->getSwitchUrl() ?>' + scopeParams;
             setLocation(url);
+            <?php else: ?>
+            jQuery('#preview_selected_store').val(scopeId);
+            jQuery('#preview_form').submit();
+
+            jQuery('.store-switcher .dropdown-menu li a').each(function() {
+                var $this = jQuery(this);
+
+                if ($this.data('role') === 'store-view-id' && $this.data('value') == scopeId) {
+                    jQuery('#store-change-button').html($this.text());
+                }
+            });
             <?php endif; ?>
         }
     }
-- 
GitLab


From c3cdd0475edb0acaed6c4bb994220c3e9dc44810 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 28 Aug 2015 19:08:10 +0300
Subject: [PATCH 016/420] MAGETWO-42092: CMS page preview not works when
 changing store view

---
 app/code/Magento/Backend/Block/Store/Switcher.php | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Store/Switcher.php b/app/code/Magento/Backend/Block/Store/Switcher.php
index 80617c52ac3..965d61cd1e3 100644
--- a/app/code/Magento/Backend/Block/Store/Switcher.php
+++ b/app/code/Magento/Backend/Block/Store/Switcher.php
@@ -565,16 +565,20 @@ class Switcher extends \Magento\Backend\Block\Template
     }
 
     /**
-     * @param $state
+     * @param bool $state
+     * @return $this
      */
-    public function setUseIframe($state = false) {
+    public function setUseIframe($state = false)
+    {
         $this->isUsingIframe = (bool) $state;
+        return $this;
     }
 
     /**
      * @return bool
      */
-    public function isUsingIframe() {
+    public function isUsingIframe()
+    {
         return $this->isUsingIframe;
     }
 }
-- 
GitLab


From 108a3e7fafefb00f8658c495e46da6fb6ca74eb8 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 31 Aug 2015 10:29:33 +0300
Subject: [PATCH 017/420] MAGETWO-42092: CMS page preview not works when
 changing store view

---
 .../Magento/Backend/Block/Store/Switcher.php  | 20 ++++---------------
 .../adminhtml/templates/store/switcher.phtml  |  2 ++
 2 files changed, 6 insertions(+), 16 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Store/Switcher.php b/app/code/Magento/Backend/Block/Store/Switcher.php
index 965d61cd1e3..cd74d82aa46 100644
--- a/app/code/Magento/Backend/Block/Store/Switcher.php
+++ b/app/code/Magento/Backend/Block/Store/Switcher.php
@@ -87,11 +87,6 @@ class Switcher extends \Magento\Backend\Block\Template
      */
     protected $_storeFactory;
 
-    /**
-     * @var bool
-     */
-    protected $isUsingIframe = false;
-
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
@@ -564,21 +559,14 @@ class Switcher extends \Magento\Backend\Block\Template
         return $html;
     }
 
-    /**
-     * @param bool $state
-     * @return $this
-     */
-    public function setUseIframe($state = false)
-    {
-        $this->isUsingIframe = (bool) $state;
-        return $this;
-    }
-
     /**
      * @return bool
      */
     public function isUsingIframe()
     {
-        return $this->isUsingIframe;
+        if ($this->hasData('is_using_iframe')) {
+            return (bool) $this->getData('is_using_iframe');
+        }
+        return false;
     }
 }
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
index f1e457f0367..ef976880242 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
@@ -196,6 +196,8 @@ require(['jquery'], function(jQuery){
                     jQuery('#store-change-button').html($this.text());
                 }
             });
+
+            jQuery('#store-change-button').click();
             <?php endif; ?>
         }
     }
-- 
GitLab


From 0967105fb8d9a80dca123874beb1bed3d24da690 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 31 Aug 2015 11:28:55 +0300
Subject: [PATCH 018/420] MAGETWO-42092: CMS page preview not works when
 changing store view

---
 app/code/Magento/Backend/Block/Store/Switcher.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Backend/Block/Store/Switcher.php b/app/code/Magento/Backend/Block/Store/Switcher.php
index cd74d82aa46..106a1fd4f1d 100644
--- a/app/code/Magento/Backend/Block/Store/Switcher.php
+++ b/app/code/Magento/Backend/Block/Store/Switcher.php
@@ -560,12 +560,14 @@ class Switcher extends \Magento\Backend\Block\Template
     }
 
     /**
+     * Return iframe usage status
+     *
      * @return bool
      */
     public function isUsingIframe()
     {
         if ($this->hasData('is_using_iframe')) {
-            return (bool) $this->getData('is_using_iframe');
+            return (bool)$this->getData('is_using_iframe');
         }
         return false;
     }
-- 
GitLab


From 884be6e84f5a205827c306e4f1cf9a6431a0cfae Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 31 Aug 2015 13:16:57 +0300
Subject: [PATCH 019/420] MAGETWO-42092: CMS page preview not works when
 changing store view

---
 app/code/Magento/Backend/Block/Store/Switcher.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Backend/Block/Store/Switcher.php b/app/code/Magento/Backend/Block/Store/Switcher.php
index 106a1fd4f1d..8cf98be294f 100644
--- a/app/code/Magento/Backend/Block/Store/Switcher.php
+++ b/app/code/Magento/Backend/Block/Store/Switcher.php
@@ -560,7 +560,7 @@ class Switcher extends \Magento\Backend\Block\Template
     }
 
     /**
-     * Return iframe usage status
+     * Get whether iframe is being used
      *
      * @return bool
      */
-- 
GitLab


From ce104eafb2b15f4e73f0d51dd1ef5ad8f9bf391c Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Mon, 31 Aug 2015 17:46:17 +0300
Subject: [PATCH 020/420] MAGETWO-42096: The widgets are not rendered on the
 cms preview page

---
 .../Magento/Widget/Model/Template/Filter.php  |  15 +-
 .../Widget/Model/Template/FilterEmulate.php   |  20 ++
 .../Unit/Model/Template/FilterEmulateTest.php |  59 ++++
 .../Test/Unit/Model/Template/FilterTest.php   | 265 +++++++++++++++++-
 app/code/Magento/Widget/etc/adminhtml/di.xml  |   6 +
 5 files changed, 349 insertions(+), 16 deletions(-)
 create mode 100644 app/code/Magento/Widget/Model/Template/FilterEmulate.php
 create mode 100644 app/code/Magento/Widget/Test/Unit/Model/Template/FilterEmulateTest.php

diff --git a/app/code/Magento/Widget/Model/Template/Filter.php b/app/code/Magento/Widget/Model/Template/Filter.php
index a07bdd85de4..d2a9f11772d 100644
--- a/app/code/Magento/Widget/Model/Template/Filter.php
+++ b/app/code/Magento/Widget/Model/Template/Filter.php
@@ -73,12 +73,12 @@ class Filter extends \Magento\Cms\Model\Template\Filter
     }
 
     /**
-     * Generate widget
+     * General method for generate widget
      *
      * @param string[] $construction
      * @return string
      */
-    public function widgetDirective($construction)
+    public function generateWidget($construction)
     {
         $params = $this->getParameters($construction[2]);
 
@@ -114,6 +114,17 @@ class Filter extends \Magento\Cms\Model\Template\Filter
         return $widget->toHtml();
     }
 
+    /**
+     * Generate widget
+     *
+     * @param string[] $construction
+     * @return string
+     */
+    public function widgetDirective($construction)
+    {
+        return $this->generateWidget($construction);
+    }
+
     /**
      * Retrieve media file URL directive
      *
diff --git a/app/code/Magento/Widget/Model/Template/FilterEmulate.php b/app/code/Magento/Widget/Model/Template/FilterEmulate.php
new file mode 100644
index 00000000000..9c7aefc55af
--- /dev/null
+++ b/app/code/Magento/Widget/Model/Template/FilterEmulate.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Widget\Model\Template;
+
+class FilterEmulate extends Filter
+{
+    /**
+     * Generate widget with emulation frontend area
+     *
+     * @param string[] $construction
+     * @return string
+     */
+    public function widgetDirective($construction)
+    {
+        return $this->_appState->emulateAreaCode('frontend', [$this, 'generateWidget'], [$construction]);
+    }
+}
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterEmulateTest.php b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterEmulateTest.php
new file mode 100644
index 00000000000..7a9115f5c4c
--- /dev/null
+++ b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterEmulateTest.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Widget\Test\Unit\Model\Template;
+
+use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class FilterEmulateTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManagerHelper
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Widget\Model\Template\FilterEmulate
+     */
+    protected $filterEmulate;
+
+    /**
+     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $appStateMock;
+
+    /**
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->appStateMock = $this->getMock('Magento\Framework\App\State', [], [], '', false);
+
+        $this->filterEmulate = $this->objectManagerHelper->getObject(
+            'Magento\Widget\Model\Template\FilterEmulate',
+            ['appState' => $this->appStateMock]
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testWidgetDirective()
+    {
+        $result = 'some text';
+        $construction = [
+            '{{widget type="Widget\\Link" anchor_text="Test" template="block.phtml" id_path="p/1"}}',
+            'widget',
+            ' type="" anchor_text="Test" template="block.phtml" id_path="p/1"'
+        ];
+
+        $this->appStateMock->expects($this->once())
+            ->method('emulateAreaCode')
+            ->with('frontend', [$this->filterEmulate, 'generateWidget'], [$construction])
+            ->willReturn($result);
+        $this->assertSame($result, $this->filterEmulate->widgetDirective($construction));
+    }
+}
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
index 82c845cfe85..3398f84b604 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
@@ -5,32 +5,269 @@
  */
 namespace Magento\Widget\Test\Unit\Model\Template;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 use Magento\Store\Model\StoreManagerInterface;
 
 class FilterTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var \Magento\Widget\Model\Template\Filter
+     */
+    protected $filter;
+
+    /**
+     * @var ObjectManagerHelper
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeMock;
+
+    /**
+     * @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManagerMock;
+
+    /**
+     * @var \Magento\Widget\Model\Resource\Widget|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $widgetResourceMock;
+
+    /**
+     * @var \Magento\Widget\Model\Widget|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $widgetMock;
+
+    /**
+     * @var \Magento\Framework\View\LayoutInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $layoutMock;
+
+    /**
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->storeMock = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
+        $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false);
+        $this->widgetResourceMock = $this->getMock('Magento\Widget\Model\Resource\Widget', [], [], '', false);
+        $this->widgetMock = $this->getMock('Magento\Widget\Model\Widget', [], [], '', false);
+        $this->layoutMock = $this->getMock('Magento\Framework\View\LayoutInterface', [], [], '', false);
+
+        $this->filter = $this->objectManagerHelper->getObject(
+            'Magento\Widget\Model\Template\Filter',
+            [
+                'storeManager' => $this->storeManagerMock,
+                'widgetResource' => $this->widgetResourceMock,
+                'widget' => $this->widgetMock,
+                'layout' => $this->layoutMock
+            ]
+        );
+    }
+
+    /**
+     * @param array $construction
+     * @param string $name
+     * @param string $type
+     * @param int $preConfigId
+     * @param array $params
+     * @param array $preconfigure
+     * @param string $widgetXml
+     * @param \Magento\Widget\Block\BlockInterface|null $widgetBlock
+     * @param string $expectedResult
+     * @return void
+     * @dataProvider generateWidgetDataProvider
+     */
+    public function testGenerateWidget(
+        $construction,
+        $name,
+        $type,
+        $preConfigId,
+        $params,
+        $preconfigure,
+        $widgetXml,
+        $widgetBlock,
+        $expectedResult
+    ) {
+        $this->generalForGenerateWidget($name, $type, $preConfigId, $params, $preconfigure, $widgetXml, $widgetBlock);
+        $this->assertSame($expectedResult, $this->filter->generateWidget($construction));
+    }
+
+    /**
+     * @param array $construction
+     * @param string $name
+     * @param string $type
+     * @param int $preConfigId
+     * @param array $params
+     * @param array $preconfigure
+     * @param string $widgetXml
+     * @param \Magento\Widget\Block\BlockInterface|null $widgetBlock
+     * @param string $expectedResult
+     * @return void
+     * @dataProvider generateWidgetDataProvider
+     */
+    public function testWidgetDirective(
+        $construction,
+        $name,
+        $type,
+        $preConfigId,
+        $params,
+        $preconfigure,
+        $widgetXml,
+        $widgetBlock,
+        $expectedResult
+    ) {
+        $this->generalForGenerateWidget($name, $type, $preConfigId, $params, $preconfigure, $widgetXml, $widgetBlock);
+        $this->assertSame($expectedResult, $this->filter->widgetDirective($construction));
+    }
+
+    /**
+     * @return array
+     */
+    public function generateWidgetDataProvider()
+    {
+        return [
+            [
+                'construction' => [
+                    '{{widget type="Widget\\Link" anchor_text="Test" template="block.phtml" id_path="p/1"}}',
+                    'widget',
+                    ' type="" anchor_text="Test" template="block.phtml" id_path="p/1"'
+                ],
+                'name' => null,
+                'type' => 'Widget\Link',
+                'preConfigId' => null,
+                'params' => ['id' => ''],
+                'preconfigure' => [],
+                'widgetXml' => '',
+                'widgetBlock' => null,
+                'expectedResult' => ''
+            ],
+            [
+                'construction' => [
+                    '{{widget type="Widget\\Link" anchor_text="Test" template="block.phtml" id_path="p/1"}}',
+                    'widget',
+                    ' type="" id="1" anchor_text="Test" template="block.phtml" id_path="p/1"'
+                ],
+                'name' => null,
+                'type' => null,
+                'preConfigId' => 1,
+                'params' => ['id' => '1'],
+                'preconfigure' => ['widget_type' => '', 'parameters' => ''],
+                'widgetXml' => null,
+                'widgetBlock' => null,
+                'expectedResult' => ''
+            ],
+            [
+                'construction' => [
+                    '{{widget type="Widget\\Link" anchor_text="Test" template="block.phtml" id_path="p/1"}}',
+                    'widget',
+                    ' type="" name="testName" id="1" anchor_text="Test" template="block.phtml" id_path="p/1"'
+                ],
+                'name' => 'testName',
+                'type' => 'Widget\Link',
+                'preConfigId' => 1,
+                'params' => ['id' => '1'],
+                'preconfigure' => ['widget_type' => "Widget\\Link", 'parameters' => ['id' => '1']],
+                'widgetXml' => 'some xml',
+                'widgetBlock' => $this->getBlockMock('widget text'),
+                'expectedResult' => 'widget text'
+            ],
+            [
+                'construction' => [
+                    '{{widget type="Widget\\Link" anchor_text="Test" template="block.phtml" id_path="p/1"}}',
+                    'widget',
+                    ' type="Widget\\Link" name="testName" anchor_text="Test" template="block.phtml" id_path="p/1"'
+                ],
+                'name' => 'testName',
+                'type' => 'Widget\Link',
+                'preConfigId' => null,
+                'params' => [
+                    'type' => 'Widget\Link',
+                    'name' => 'testName',
+                    'anchor_text' => 'Test',
+                    'template' => 'block.phtml',
+                    'id_path' => 'p/1'
+                ],
+                'preconfigure' => [],
+                'widgetXml' => 'some xml',
+                'widgetBlock' => $this->getBlockMock('widget text'),
+                'expectedResult' => 'widget text'
+            ],
+        ];
+    }
+
+    /**
+     * @param string $name
+     * @param string $type
+     * @param int $preConfigId
+     * @param array $params
+     * @param array $preconfigure
+     * @param string $widgetXml
+     * @param \Magento\Widget\Block\BlockInterface|null $widgetBlock
+     * @return void
+     * @dataProvider generateWidgetDataProvider
+     */
+    protected function generalForGenerateWidget(
+        $name,
+        $type,
+        $preConfigId,
+        $params,
+        $preconfigure,
+        $widgetXml,
+        $widgetBlock
+    ) {
+        $this->widgetResourceMock->expects($this->any())
+            ->method('loadPreconfiguredWidget')
+            ->with($preConfigId)
+            ->willReturn($preconfigure);
+        $this->widgetMock->expects($this->any())
+            ->method('getWidgetByClassType')
+            ->with($type)
+            ->willReturn($widgetXml);
+        $this->layoutMock->expects($this->any())
+            ->method('createBlock')
+            ->with($type, $name, ['data' => $params])
+            ->willReturn($widgetBlock);
+    }
+
+    /**
+     * @param string $returnedResult
+     * @return \Magento\Widget\Block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getBlockMock($returnedResult = '')
+    {
+        /** @var \Magento\Widget\Block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject $blockMock */
+        $blockMock = $this->getMockBuilder('Magento\Widget\Block\BlockInterface')
+            ->setMethods(['toHtml'])
+            ->getMockForAbstractClass();
+        $blockMock->expects($this->any())
+            ->method('toHtml')
+            ->willReturn($returnedResult);
+
+        return $blockMock;
+    }
+
+    /**
+     * @return void
+     */
     public function testMediaDirective()
     {
         $image = 'wysiwyg/VB.png';
         $construction = ['{{media url="' . $image . '"}}', 'media', ' url="' . $image . '"'];
         $baseUrl = 'http://localhost/pub/media/';
 
-        /** @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject $storeMock */
-        $storeMock = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
-        $storeMock->expects($this->once())->method('getBaseUrl')->with(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)
+        $this->storeMock->expects($this->once())
+            ->method('getBaseUrl')
+            ->with(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)
             ->willReturn($baseUrl);
+        $this->storeManagerMock->expects($this->once())
+            ->method('getStore')
+            ->willReturn($this->storeMock);
 
-        /** @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject $storeManagerMock */
-        $storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false);
-        $storeManagerMock->expects($this->once())->method('getStore')->will($this->returnValue($storeMock));
-
-        /** @var \Magento\Widget\Model\Template\Filter $filter */
-        $filter = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))
-            ->getObject(
-                'Magento\Widget\Model\Template\Filter',
-                ['storeManager' => $storeManagerMock]
-            );
-        $result = $filter->mediaDirective($construction);
+        $result = $this->filter->mediaDirective($construction);
         $this->assertEquals($baseUrl . $image, $result);
     }
 }
diff --git a/app/code/Magento/Widget/etc/adminhtml/di.xml b/app/code/Magento/Widget/etc/adminhtml/di.xml
index 723a652e454..52d47c1c939 100644
--- a/app/code/Magento/Widget/etc/adminhtml/di.xml
+++ b/app/code/Magento/Widget/etc/adminhtml/di.xml
@@ -14,4 +14,10 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Cms\Model\Template\FilterProvider">
+        <arguments>
+            <argument name="pageFilter" xsi:type="string">Magento\Widget\Model\Template\FilterEmulate</argument>
+            <argument name="blockFilter" xsi:type="string">Magento\Widget\Model\Template\FilterEmulate</argument>
+        </arguments>
+    </type>
 </config>
-- 
GitLab


From 2e2913541e63c99edf4044343cc9238670022817 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Mon, 31 Aug 2015 18:57:33 +0300
Subject: [PATCH 021/420] MAGETWO-42096: The widgets are not rendered on the
 cms preview page

---
 .../Magento/Widget/Test/Unit/Model/Template/FilterTest.php    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
index 3398f84b604..77921c4b219 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
@@ -52,10 +52,10 @@ class FilterTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->storeMock = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
-        $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false);
+        $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
         $this->widgetResourceMock = $this->getMock('Magento\Widget\Model\Resource\Widget', [], [], '', false);
         $this->widgetMock = $this->getMock('Magento\Widget\Model\Widget', [], [], '', false);
-        $this->layoutMock = $this->getMock('Magento\Framework\View\LayoutInterface', [], [], '', false);
+        $this->layoutMock = $this->getMock('Magento\Framework\View\LayoutInterface');
 
         $this->filter = $this->objectManagerHelper->getObject(
             'Magento\Widget\Model\Template\Filter',
-- 
GitLab


From e25c028994ececd158f371f5d2740dd546959402 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Mon, 31 Aug 2015 19:27:18 +0300
Subject: [PATCH 022/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Abstract unit test class updated;
---
 .../Adminhtml/AbstractMassActionTest.php      | 44 +++++++++++++++++++
 .../Adminhtml/Page/MassDeleteTest.php         | 35 ++-------------
 .../Adminhtml/Page/MassDisableTest.php        | 35 ++-------------
 .../Adminhtml/Page/MassEnableTest.php         | 35 ++-------------
 4 files changed, 53 insertions(+), 96 deletions(-)

diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
index 83802f3515b..db1bd0b3053 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
@@ -39,6 +39,11 @@ abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
      */
     protected $filterMock;
 
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
     protected function setUp()
     {
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -56,6 +61,8 @@ abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
             ->with(ResultFactory::TYPE_REDIRECT, [])
             ->willReturn($this->resultRedirectMock);
 
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
         $this->contextMock = $this->getMock('\Magento\Backend\App\Action\Context', [], [], '', false);
 
         $this->filterMock = $this->getMockBuilder('Magento\Ui\Component\MassAction\Filter')
@@ -65,4 +72,41 @@ abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManagerMock);
         $this->contextMock->expects($this->any())->method('getResultFactory')->willReturn($this->resultFactoryMock);
     }
+
+    /**
+     * @param string $message
+     * @param int $size
+     */
+    protected function processMassAction($message, $size)
+    {
+        $collection = [
+            $this->getPageMock(),
+            $this->getPageMock()
+        ];
+
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($size);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__($message, $size));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
+    }
+
+    /**
+     * @return \Magento\Cms\Model\Resource\Page\Collection
+     */
+    abstract protected function getPageMock();
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index 6f87c8bca31..915fff29b5c 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -19,11 +19,6 @@ class MassDeleteTest extends AbstractMassActionTest
      */
     protected $collectionFactoryMock;
 
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCollectionMock;
-
     protected function setUp()
     {
         parent::setUp();
@@ -36,8 +31,6 @@ class MassDeleteTest extends AbstractMassActionTest
             false
         );
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
-
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDelete',
             [
@@ -50,34 +43,12 @@ class MassDeleteTest extends AbstractMassActionTest
 
     public function testMassDeleteAction()
     {
-        $deletedPagesCount = 2;
-
-        $collection = [
-            $this->getPageMock(),
-            $this->getPageMock()
-        ];
+        $size = 2;
+        $message = 'A total of %1 record(s) have been deleted.';
 
         $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
-        $this->filterMock->expects($this->once())
-            ->method('getCollection')
-            ->with($this->pageCollectionMock)
-            ->willReturn($this->pageCollectionMock);
-
-        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($deletedPagesCount);
-        $this->pageCollectionMock->expects($this->once())
-            ->method('getIterator')
-            ->willReturn(new \ArrayIterator($collection));
-
-        $this->messageManagerMock->expects($this->once())
-            ->method('addSuccess')
-            ->with(__('A total of %1 record(s) have been deleted.', $deletedPagesCount));
-        $this->messageManagerMock->expects($this->never())->method('addError');
-
-        $this->resultRedirectMock->expects($this->once())
-            ->method('setPath')
-            ->with('*/*/')
-            ->willReturnSelf();
+        $this->processMassAction($message, $size);
 
         $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
     }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
index 7bc2ee03ecf..c8fd29b239c 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
@@ -19,11 +19,6 @@ class MassDisableTest extends AbstractMassActionTest
      */
     protected $collectionFactoryMock;
 
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCollectionMock;
-
     protected function setUp()
     {
         parent::setUp();
@@ -36,8 +31,6 @@ class MassDisableTest extends AbstractMassActionTest
             false
         );
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
-
         $this->massDisableController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDisable',
             [
@@ -50,34 +43,12 @@ class MassDisableTest extends AbstractMassActionTest
 
     public function testMassDisableAction()
     {
-        $disabledPagesCount = 2;
-
-        $collection = [
-            $this->getPageMock(),
-            $this->getPageMock()
-        ];
+        $size = 2;
+        $message = 'A total of %1 record(s) have been disabled.';
 
         $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
-        $this->filterMock->expects($this->once())
-            ->method('getCollection')
-            ->with($this->pageCollectionMock)
-            ->willReturn($this->pageCollectionMock);
-
-        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($disabledPagesCount);
-        $this->pageCollectionMock->expects($this->once())
-            ->method('getIterator')
-            ->willReturn(new \ArrayIterator($collection));
-
-        $this->messageManagerMock->expects($this->once())
-            ->method('addSuccess')
-            ->with(__('A total of %1 record(s) have been disabled.', $disabledPagesCount));
-        $this->messageManagerMock->expects($this->never())->method('addError');
-
-        $this->resultRedirectMock->expects($this->once())
-            ->method('setPath')
-            ->with('*/*/')
-            ->willReturnSelf();
+        $this->processMassAction($message, $size);
 
         $this->assertSame($this->resultRedirectMock, $this->massDisableController->execute());
     }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
index 2fbef8db334..bdf289dcc33 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
@@ -19,11 +19,6 @@ class MassEnableTest extends AbstractMassActionTest
      */
     protected $collectionFactoryMock;
 
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCollectionMock;
-
     protected function setUp()
     {
         parent::setUp();
@@ -36,8 +31,6 @@ class MassEnableTest extends AbstractMassActionTest
             false
         );
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
-
         $this->massEnableController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassEnable',
             [
@@ -50,34 +43,12 @@ class MassEnableTest extends AbstractMassActionTest
 
     public function testMassEnableAction()
     {
-        $enabledPagesCount = 2;
-
-        $collection = [
-            $this->getPageMock(),
-            $this->getPageMock()
-        ];
+        $size = 2;
+        $message = 'A total of %1 record(s) have been enabled.';
 
         $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
-        $this->filterMock->expects($this->once())
-            ->method('getCollection')
-            ->with($this->pageCollectionMock)
-            ->willReturn($this->pageCollectionMock);
-
-        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($enabledPagesCount);
-        $this->pageCollectionMock->expects($this->once())
-            ->method('getIterator')
-            ->willReturn(new \ArrayIterator($collection));
-
-        $this->messageManagerMock->expects($this->once())
-            ->method('addSuccess')
-            ->with(__('A total of %1 record(s) have been enabled.', $enabledPagesCount));
-        $this->messageManagerMock->expects($this->never())->method('addError');
-
-        $this->resultRedirectMock->expects($this->once())
-            ->method('setPath')
-            ->with('*/*/')
-            ->willReturnSelf();
+        $this->processMassAction($message, $size);
 
         $this->assertSame($this->resultRedirectMock, $this->massEnableController->execute());
     }
-- 
GitLab


From 1496d119b60036d95e2cf79030e49b61159aed3a Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Mon, 31 Aug 2015 20:01:39 +0300
Subject: [PATCH 023/420] MAGETWO-41501: Wrong success mass delete message on
 cms pages and blocks

- Unit tests updated;
---
 .../Adminhtml/AbstractMassActionTest.php      | 44 -------------------
 .../Adminhtml/Page/MassDeleteTest.php         | 35 +++++++++++++--
 .../Adminhtml/Page/MassDisableTest.php        | 35 +++++++++++++--
 .../Adminhtml/Page/MassEnableTest.php         | 35 +++++++++++++--
 4 files changed, 96 insertions(+), 53 deletions(-)

diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
index db1bd0b3053..83802f3515b 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/AbstractMassActionTest.php
@@ -39,11 +39,6 @@ abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
      */
     protected $filterMock;
 
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCollectionMock;
-
     protected function setUp()
     {
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -61,8 +56,6 @@ abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
             ->with(ResultFactory::TYPE_REDIRECT, [])
             ->willReturn($this->resultRedirectMock);
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
-
         $this->contextMock = $this->getMock('\Magento\Backend\App\Action\Context', [], [], '', false);
 
         $this->filterMock = $this->getMockBuilder('Magento\Ui\Component\MassAction\Filter')
@@ -72,41 +65,4 @@ abstract class AbstractMassActionTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManagerMock);
         $this->contextMock->expects($this->any())->method('getResultFactory')->willReturn($this->resultFactoryMock);
     }
-
-    /**
-     * @param string $message
-     * @param int $size
-     */
-    protected function processMassAction($message, $size)
-    {
-        $collection = [
-            $this->getPageMock(),
-            $this->getPageMock()
-        ];
-
-        $this->filterMock->expects($this->once())
-            ->method('getCollection')
-            ->with($this->pageCollectionMock)
-            ->willReturn($this->pageCollectionMock);
-
-        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($size);
-        $this->pageCollectionMock->expects($this->once())
-            ->method('getIterator')
-            ->willReturn(new \ArrayIterator($collection));
-
-        $this->messageManagerMock->expects($this->once())
-            ->method('addSuccess')
-            ->with(__($message, $size));
-        $this->messageManagerMock->expects($this->never())->method('addError');
-
-        $this->resultRedirectMock->expects($this->once())
-            ->method('setPath')
-            ->with('*/*/')
-            ->willReturnSelf();
-    }
-
-    /**
-     * @return \Magento\Cms\Model\Resource\Page\Collection
-     */
-    abstract protected function getPageMock();
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index 915fff29b5c..6f87c8bca31 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -19,6 +19,11 @@ class MassDeleteTest extends AbstractMassActionTest
      */
     protected $collectionFactoryMock;
 
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
     protected function setUp()
     {
         parent::setUp();
@@ -31,6 +36,8 @@ class MassDeleteTest extends AbstractMassActionTest
             false
         );
 
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDelete',
             [
@@ -43,12 +50,34 @@ class MassDeleteTest extends AbstractMassActionTest
 
     public function testMassDeleteAction()
     {
-        $size = 2;
-        $message = 'A total of %1 record(s) have been deleted.';
+        $deletedPagesCount = 2;
+
+        $collection = [
+            $this->getPageMock(),
+            $this->getPageMock()
+        ];
 
         $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
-        $this->processMassAction($message, $size);
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($deletedPagesCount);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been deleted.', $deletedPagesCount));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
 
         $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
     }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
index c8fd29b239c..7bc2ee03ecf 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
@@ -19,6 +19,11 @@ class MassDisableTest extends AbstractMassActionTest
      */
     protected $collectionFactoryMock;
 
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
     protected function setUp()
     {
         parent::setUp();
@@ -31,6 +36,8 @@ class MassDisableTest extends AbstractMassActionTest
             false
         );
 
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
         $this->massDisableController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDisable',
             [
@@ -43,12 +50,34 @@ class MassDisableTest extends AbstractMassActionTest
 
     public function testMassDisableAction()
     {
-        $size = 2;
-        $message = 'A total of %1 record(s) have been disabled.';
+        $disabledPagesCount = 2;
+
+        $collection = [
+            $this->getPageMock(),
+            $this->getPageMock()
+        ];
 
         $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
-        $this->processMassAction($message, $size);
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($disabledPagesCount);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been disabled.', $disabledPagesCount));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
 
         $this->assertSame($this->resultRedirectMock, $this->massDisableController->execute());
     }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
index bdf289dcc33..2fbef8db334 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
@@ -19,6 +19,11 @@ class MassEnableTest extends AbstractMassActionTest
      */
     protected $collectionFactoryMock;
 
+    /**
+     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageCollectionMock;
+
     protected function setUp()
     {
         parent::setUp();
@@ -31,6 +36,8 @@ class MassEnableTest extends AbstractMassActionTest
             false
         );
 
+        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+
         $this->massEnableController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassEnable',
             [
@@ -43,12 +50,34 @@ class MassEnableTest extends AbstractMassActionTest
 
     public function testMassEnableAction()
     {
-        $size = 2;
-        $message = 'A total of %1 record(s) have been enabled.';
+        $enabledPagesCount = 2;
+
+        $collection = [
+            $this->getPageMock(),
+            $this->getPageMock()
+        ];
 
         $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->pageCollectionMock);
 
-        $this->processMassAction($message, $size);
+        $this->filterMock->expects($this->once())
+            ->method('getCollection')
+            ->with($this->pageCollectionMock)
+            ->willReturn($this->pageCollectionMock);
+
+        $this->pageCollectionMock->expects($this->once())->method('getSize')->willReturn($enabledPagesCount);
+        $this->pageCollectionMock->expects($this->once())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($collection));
+
+        $this->messageManagerMock->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('A total of %1 record(s) have been enabled.', $enabledPagesCount));
+        $this->messageManagerMock->expects($this->never())->method('addError');
+
+        $this->resultRedirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
 
         $this->assertSame($this->resultRedirectMock, $this->massEnableController->execute());
     }
-- 
GitLab


From 27b4225c20967ce5c89a8d896412ce933f1f0e24 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Tue, 25 Aug 2015 16:59:59 +0300
Subject: [PATCH 024/420] MAGETWO-40794: Widget not displaying after secondary
 creating widget

---
 app/code/Magento/Customer/Block/CustomerData.php         | 9 +++++++++
 .../view/frontend/templates/js/customer-data.phtml       | 1 +
 .../Customer/view/frontend/web/js/customer-data.js       | 7 +++++++
 3 files changed, 17 insertions(+)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 60f5a10b917..f7b0c252b3f 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -29,4 +29,13 @@ class CustomerData extends \Magento\Framework\View\Element\Template
     {
         return $this->getUrl($route, ['_secure' => $this->getRequest()->isSecure()]);
     }
+
+    /**
+     * Get sections that can not be cached on client-side
+     *
+     * @return array
+     */
+    public function getMutableSections() {
+        return ['banner'];
+    }
 }
diff --git a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
index 0be4fef69c4..f1f3a5e4f9d 100644
--- a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
@@ -13,6 +13,7 @@
         '*' => ['Magento_Customer/js/customer-data' => [
             'sectionLoadUrl' => $block->getCustomerDataUrl('customer/section/load'),
             'cookieLifeTime' => $block->getCookieLifeTime(),
+            'mutableSections' => $block->getMutableSections(),
         ]],
     ]);
 ?>
diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index f76913fee60..6025aefc640 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -33,6 +33,12 @@ define([
         }
     };
 
+    var invalidateCacheBySections = function(settings) {
+        if (settings.mutableSections && _.intersection(storage.keys(), settings.mutableSections).length > 0) {
+            storage.removeAll();
+        }
+    }
+
     var dataProvider = {
         getFromStorage: function (sectionNames) {
             var result = {};
@@ -129,6 +135,7 @@ define([
             options = settings;
             invalidateCacheBySessionTimeOut(settings);
             invalidateCacheByCloseCookieSession();
+            invalidateCacheBySections(settings);
             customerData.init();
         }
     };
-- 
GitLab


From b78bdad57087ece3ae7828aadb583872d73a136c Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Tue, 25 Aug 2015 17:42:52 +0300
Subject: [PATCH 025/420] MAGETWO-40794: Widget not displaying after secondary
 creating widget

---
 app/code/Magento/Customer/Block/CustomerData.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index f7b0c252b3f..6aa592171ee 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -35,7 +35,8 @@ class CustomerData extends \Magento\Framework\View\Element\Template
      *
      * @return array
      */
-    public function getMutableSections() {
+    public function getMutableSections()
+    {
         return ['banner'];
     }
 }
-- 
GitLab


From 23a3735e58b35756f3c02f93f474c2752e67e3ae Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 31 Aug 2015 13:23:52 +0300
Subject: [PATCH 026/420] MAGETWO-40794: Widget not displaying after secondary
 creating widget

---
 app/code/Magento/Customer/Block/CustomerData.php | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 6aa592171ee..00281e9a142 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -31,12 +31,19 @@ class CustomerData extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * Get sections that can not be cached on client-side
+     * Get sections that can not be cached on frontend-side
      *
      * @return array
      */
-    public function getMutableSections()
+    public function getNotCachedSections() {
+        return $this->nonCachedSections;
+    }
+
+    /**
+     * @return array
+     */
+    public function getNonCachedSectionKeys()
     {
-        return ['banner'];
+        return array_keys($this->nonCachedSections);
     }
 }
-- 
GitLab


From c9256af23de4e7ff0112bf420a2d94e15ee7223f Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 31 Aug 2015 13:29:57 +0300
Subject: [PATCH 027/420] MAGETWO-40794: Widget not displaying after secondary
 creating widget

---
 app/code/Magento/Customer/Block/CustomerData.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 00281e9a142..50246705f98 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -35,7 +35,8 @@ class CustomerData extends \Magento\Framework\View\Element\Template
      *
      * @return array
      */
-    public function getNotCachedSections() {
+    public function getNotCachedSections()
+    {
         return $this->nonCachedSections;
     }
 
-- 
GitLab


From 810f13a0d3307098f7fda4e69e00b06d4b30b51d Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Tue, 1 Sep 2015 18:08:33 +0300
Subject: [PATCH 028/420] MAGETWO-40794: Widget not displaying after secondary
 creating widget

---
 .../Magento/Customer/Block/CustomerData.php   | 23 +++++++++++++++++++
 .../frontend/templates/js/customer-data.phtml |  2 +-
 .../view/frontend/web/js/customer-data.js     | 11 +++++----
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 50246705f98..66d4043f152 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -7,6 +7,27 @@ namespace Magento\Customer\Block;
 
 class CustomerData extends \Magento\Framework\View\Element\Template
 {
+    /**
+     * Sections that can not be cached on frontend-side
+     *
+     * @var array
+     */
+    protected $nonCachedSections = [];
+
+    /**
+     * @param \Magento\Framework\View\Element\Template\Context $context
+     * @param array $data
+     * @param array $nonCachedSections
+     */
+    public function __construct(
+        \Magento\Framework\View\Element\Template\Context $context,
+        array $data = [],
+        array $nonCachedSections = []
+    ) {
+        $this->nonCachedSections = $nonCachedSections;
+        parent::__construct($context, $data);
+    }
+
     /**
      * Get CookieLifeTime
      * @return null|string scopeCode
@@ -41,6 +62,8 @@ class CustomerData extends \Magento\Framework\View\Element\Template
     }
 
     /**
+     * Get keys of sections that can not be cached on frontend-side
+     *
      * @return array
      */
     public function getNonCachedSectionKeys()
diff --git a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
index f1f3a5e4f9d..9d609676551 100644
--- a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
@@ -13,7 +13,7 @@
         '*' => ['Magento_Customer/js/customer-data' => [
             'sectionLoadUrl' => $block->getCustomerDataUrl('customer/section/load'),
             'cookieLifeTime' => $block->getCookieLifeTime(),
-            'mutableSections' => $block->getMutableSections(),
+            'nonCachedSections' => $block->getNonCachedSectionKeys(),
         ]],
     ]);
 ?>
diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index 6025aefc640..726fa0816d7 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -23,6 +23,8 @@ define([
             storage.removeAll();
             var date = new Date(Date.now() + parseInt(options.cookieLifeTime, 10) * 1000);
             $.localStorage.set('mage-cache-timeout', date);
+        } else {
+            invalidateNonCachedSections(options);
         }
     };
 
@@ -33,10 +35,10 @@ define([
         }
     };
 
-    var invalidateCacheBySections = function(settings) {
-        if (settings.mutableSections && _.intersection(storage.keys(), settings.mutableSections).length > 0) {
-            storage.removeAll();
-        }
+    var invalidateNonCachedSections = function(options) {
+        _.each(options.nonCachedSections, function (sectionName) {
+            storageInvalidation.set(sectionName, true);
+        });
     }
 
     var dataProvider = {
@@ -135,7 +137,6 @@ define([
             options = settings;
             invalidateCacheBySessionTimeOut(settings);
             invalidateCacheByCloseCookieSession();
-            invalidateCacheBySections(settings);
             customerData.init();
         }
     };
-- 
GitLab


From 353bf43827176e3f289837bde4e7660489685e90 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 7 Sep 2015 19:47:32 +0300
Subject: [PATCH 029/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Move configuration duplicates to definitions
---
 .../ui_component/product_listing.xml          |  14 +-
 .../ui_component/cms_block_listing.xml        |  16 +--
 .../ui_component/cms_page_listing.xml         |  22 +--
 .../product_attributes_listing.xml            |   9 +-
 .../ui_component/customer_listing.xml         |  31 +----
 .../ui_component/customer_online_grid.xml     | 125 ++----------------
 .../sales_order_creditmemo_grid.xml           |  15 +--
 .../ui_component/sales_order_grid.xml         |  17 +--
 .../ui_component/sales_order_invoice_grid.xml |  15 +--
 .../sales_order_shipment_grid.xml             |  15 +--
 .../sales_order_view_creditmemo_grid.xml      |  15 +--
 .../sales_order_view_invoice_grid.xml         |  13 --
 .../sales_order_view_shipment_grid.xml        |  13 --
 .../view/base/ui_component/etc/definition.xml |  41 +++---
 .../view/base/web/js/grid/columns/actions.js  |   2 +
 .../base/web/js/grid/columns/multiselect.js   |   1 +
 16 files changed, 51 insertions(+), 313 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index e42a9732d9d..8279c622fb9 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -40,11 +40,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">product_listing</item>
                     </item>
                 </item>
@@ -65,8 +61,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">product_listing.product_listing.product_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -74,7 +68,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">product_listing.product_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">product_listing.product_listing.product_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -100,7 +94,6 @@
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">product_listing.product_listing.product_columns.ids</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -159,7 +152,6 @@
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -344,10 +336,6 @@
                     <item name="sortOrder" xsi:type="number">200</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index 17f7d7c7a42..08e16f49546 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -48,11 +48,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">cms_block_listing</item>
                     </item>
                 </item>
@@ -72,8 +68,6 @@
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -87,8 +81,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -96,7 +88,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -118,7 +110,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">block_id</item>
                 </item>
             </argument>
@@ -156,7 +147,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -321,13 +311,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">block_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index ea9cd1d93d4..adb855f7adf 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -48,11 +48,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">cms_page_listing</item>
                     </item>
                 </item>
@@ -72,8 +68,6 @@
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -87,8 +81,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -96,7 +88,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -118,7 +110,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                 </item>
             </argument>
@@ -174,7 +165,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -227,7 +217,6 @@
                             <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -240,9 +229,7 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">page_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
@@ -381,9 +368,9 @@
         </column>
         <column name="custom_root_template">
             <argument name="data" xsi:type="array">
-                <item name="filter" xsi:type="string">select</item>
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -418,14 +405,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">page_id</item>
-                    <item name="blockVisibility" xsi:type="boolean">true</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
index 0edccf93535..aab49bb9e10 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -40,11 +40,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">product_attributes_listing</item>
                     </item>
                 </item>
@@ -68,8 +64,6 @@
                         <item name="applied" xsi:type="string">not-save-filter</item>
                     </item>
                     <item name="columnsProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -77,7 +71,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns:${ $.index }.visible</item>
                         </item>
                     </item>
                 </item>
@@ -91,7 +85,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index ea4d0359f08..b384a9becc0 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -48,11 +48,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">customer_listing</item>
                     </item>
                 </item>
@@ -79,8 +75,6 @@
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">customer_listing.customer_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -93,8 +87,7 @@
         <filters name="listing_filters" class="Magento\Customer\Ui\Component\Listing\Filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">customer_listing.customer_listing.customer_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -102,7 +95,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">customer_listing.customer_listing.customer_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -316,7 +309,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -359,7 +351,6 @@
                             <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -373,7 +364,6 @@
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
             </argument>
@@ -409,7 +399,6 @@
         <column name="group_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="sortOrder" xsi:type="number">50</item>
@@ -428,7 +417,6 @@
         <column name="billing_postcode">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">ZIP</item>
                     <item name="sortOrder" xsi:type="number">70</item>
@@ -447,7 +435,6 @@
         <column name="billing_region">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">State/Province</item>
                     <item name="sortOrder" xsi:type="number">90</item>
@@ -458,7 +445,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Customer Since</item>
                     <item name="sortOrder" xsi:type="number">100</item>
@@ -479,7 +465,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Last Logged In</item>
@@ -490,7 +475,6 @@
         <column name="confirmation">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Confirmed email</item>
@@ -501,7 +485,6 @@
         <column name="created_in">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Account Created in</item>
@@ -533,7 +516,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Date Of Birth</item>
@@ -544,7 +526,6 @@
         <column name="taxvat">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
@@ -575,7 +556,6 @@
         <column name="billing_city">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
@@ -586,7 +566,6 @@
         <column name="billing_fax">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
@@ -597,7 +576,6 @@
         <column name="billing_vat_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
@@ -608,7 +586,6 @@
         <column name="billing_company">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
@@ -620,13 +597,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
index 6dca92beb9b..23e313066ac 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
@@ -40,11 +40,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">customer_online_grid</item>
                     </item>
                 </item>
@@ -64,8 +60,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -73,107 +68,11 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterRange name="customer_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="firstname">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">firstname</item>
-                        <item name="label" xsi:type="string" translate="true">First Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="lastname">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">lastname</item>
-                        <item name="label" xsi:type="string" translate="true">Last Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">email</item>
-                        <item name="label" xsi:type="string" translate="true">Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="last_visit_at"  class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">last_visit_at</item>
-                        <item name="label" xsi:type="string" translate="true">Last Activity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterSelect name="visitor_type">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">visitor_type</item>
-                        <item name="label" xsi:type="string" translate="true">Type</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <paging name="listing_paging">
             <argument name="data" xsi:type="array">
@@ -183,7 +82,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -234,19 +132,12 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
-            <argument name="data" xsi:type="array">
-                <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="indexField" xsi:type="string">visitor_id</item>
-                </item>
-            </argument>
-        </column>
         <column name="customer_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="dataType" xsi:type="string">text</item>
+                    <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
@@ -254,6 +145,7 @@
         <column name="firstname">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">First Name</item>
                 </item>
@@ -262,6 +154,7 @@
         <column name="lastname">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Last Name</item>
                 </item>
@@ -270,6 +163,7 @@
         <column name="email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
@@ -294,6 +188,7 @@
         <column name="last_visit_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Last Activity</item>
                 </item>
@@ -301,9 +196,11 @@
         </column>
         <column name="visitor_type" class="Magento\Customer\Ui\Component\Listing\Column\Online\Type">
             <argument name="data" xsi:type="array">
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Type</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
index 302b87e9fe3..7e95b7ea028 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
@@ -40,11 +40,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_creditmemo_grid</item>
                     </item>
                 </item>
@@ -84,8 +80,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -93,7 +87,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns:${ $.index }.visible</item>
                         </item>
                     </item>
                 </item>
@@ -115,7 +109,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -137,7 +130,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -192,7 +184,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -417,13 +408,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index fd2ef59f37a..b8ca3f8f1fb 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -34,7 +34,7 @@
             </argument>
         </argument>
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
             </item>
         </argument>
@@ -48,11 +48,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_grid</item>
                     </item>
                 </item>
@@ -92,8 +88,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -101,7 +95,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -123,7 +117,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -208,7 +201,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -263,7 +255,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -455,13 +446,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
index 1af1f08e6e6..2ec25de2dd6 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
@@ -40,11 +40,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_invoice_grid</item>
                     </item>
                 </item>
@@ -84,8 +80,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -93,7 +87,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -115,7 +109,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -137,7 +130,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -192,7 +184,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -375,13 +366,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
index 23f01b82821..9f511674271 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
@@ -40,11 +40,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_shipment_grid</item>
                     </item>
                 </item>
@@ -84,8 +80,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -93,7 +87,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -115,7 +109,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -146,7 +139,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -201,7 +193,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -366,13 +357,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
index 9fcd25c569f..fd70f752bf6 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
@@ -43,11 +43,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_view_creditmemo_grid</item>
                     </item>
                 </item>
@@ -87,8 +83,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -96,7 +90,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
@@ -118,7 +112,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -140,7 +133,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -195,7 +187,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -420,13 +411,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
index a252cc1b3ef..e32957516d2 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
@@ -43,11 +43,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_view_invoice_grid</item>
                     </item>
                 </item>
@@ -87,8 +83,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -118,7 +112,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -140,7 +133,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -195,7 +187,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -378,13 +369,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index 14662cf099e..76a5d32c3a0 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -43,11 +43,7 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_view_shipment_grid</item>
                     </item>
                 </item>
@@ -87,8 +83,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -118,7 +112,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="actions" xsi:type="array">
                         <item name="pdfshipments_order" xsi:type="array">
                         </item>
@@ -144,7 +137,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -199,7 +191,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -364,13 +355,9 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index 5caf6ed693d..77c98fd98f0 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -12,7 +12,7 @@
             <item name="template" xsi:type="string">templates/listing/default</item>
             <item name="save_parameters_in_session" xsi:type="string">1</item>
             <item name="client_root" xsi:type="string">mui/index/render</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">uiComponent</item>
             </item>
         </argument>
@@ -20,17 +20,19 @@
 
     <paging class="Magento\Ui\Component\Paging">
         <argument name="data" xsi:type="array">
-            <item name="template" xsi:type="string">templates/paging/default</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/paging</item>
+                <item name="displayArea" xsi:type="string">bottom</item>
             </item>
         </argument>
     </paging>
 
     <filters class="Magento\Ui\Component\Filters">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/filters</item>
+                <item name="displayArea" xsi:type="string">dataGridFilters</item>
+                <item name="dataScope" xsi:type="string">filters</item>
             </item>
         </argument>
     </filters>
@@ -51,7 +53,7 @@
     </filterSelect>
     <filterRange class="Magento\Ui\Component\Filters\Type\Range">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/group</item>
             </item>
         </argument>
@@ -72,7 +74,7 @@
     </filterDate>
     <container class="Magento\Ui\Component\Container">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">uiComponent</item>
             </item>
             <item name="template" xsi:type="string">templates/container/default</item>
@@ -80,22 +82,22 @@
     </container>
     <massaction class="Magento\Ui\Component\MassAction">
         <argument name="data" xsi:type="array">
-            <item name="template" xsi:type="string">templates/listingcontainer/massaction/default</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/massactions</item>
+                <item name="displayArea" xsi:type="string">bottom</item>
             </item>
         </argument>
     </massaction>
     <actions class="Magento\Ui\Component\Control\Action">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
             </item>
         </argument>
     </actions>
     <action class="Magento\Ui\Component\Action">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">uiComponent</item>
             </item>
         </argument>
@@ -103,7 +105,7 @@
 
     <columns class="Magento\Ui\Component\Listing\Columns">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/listing</item>
             </item>
         </argument>
@@ -111,13 +113,13 @@
     <column class="Magento\Ui\Component\Listing\Columns\Column">
         <argument name="data" xsi:type="array">
             <item name="state_prefix" xsi:type="string">columns</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                <item name="dataType" xsi:type="string">text</item>
             </item>
         </argument>
     </column>
 
-
     <form class="Magento\Ui\Component\Form">
         <argument name="data" xsi:type="array">
             <item name="js_config" xsi:type="array">
@@ -281,15 +283,20 @@
     <!-- bookmark -->
     <bookmark class="Magento\Ui\Component\Bookmark">
         <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
+                <item name="displayArea" xsi:type="string">dataGridActions</item>
+                <item name="storageConfig" xsi:type="array">
+                    <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
+                    <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
+                </item>
+            </item>
         </argument>
     </bookmark>
     <exportButton class="Magento\Ui\Component\ExportButton">
         <argument name="data" xsi:type="array">
-            <item name="template" xsi:type="string">templates/export/button</item>
-            <item name="js_config" xsi:type="array">
-                <item name="component" xsi:type="string">Magento_Ui/js/grid/export</item>
-            </item>
             <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/export</item>
                 <item name="displayArea" xsi:type="string">dataGridActions</item>
                 <item name="options" xsi:type="array">
                     <item name="cvs" xsi:type="array">
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
index d4ccf416ed4..0993629dcbc 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
@@ -14,6 +14,8 @@ define([
     return Column.extend({
         defaults: {
             bodyTmpl: 'ui/grid/cells/actions',
+            sortable: false,
+            draggable: false,
             actions: [],
             rows: [],
             templates: {
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
index 6ae8354a0af..c57057a19b8 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
@@ -15,6 +15,7 @@ define([
             bodyTmpl: 'ui/grid/cells/multiselect',
             controlVisibility: false,
             sortable: false,
+            draggable: false,
             menuVisible: false,
             excludeMode: false,
             allSelected: false,
-- 
GitLab


From c9c41320b9e97d9e93543498599bb1cfcc15ee16 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 7 Sep 2015 20:11:28 +0300
Subject: [PATCH 030/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Rename data provider config node
---
 .../Sales/view/adminhtml/ui_component/sales_order_grid.xml      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index b8ca3f8f1fb..c9cbb330884 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -34,7 +34,7 @@
             </argument>
         </argument>
         <argument name="data" xsi:type="array">
-            <item name="config" xsi:type="array">
+            <item name="js_config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
             </item>
         </argument>
-- 
GitLab


From 8cc27a5ef628adb68b4d479c16cc5efee9815de3 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Tue, 8 Sep 2015 14:47:36 +0300
Subject: [PATCH 031/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Add 'actions' and 'selections' columns definitions
- Add component definition
- Use dataType="text" by default
---
 .../ui_component/product_listing.xml          | 22 ++++---------
 .../ui_component/product_listing.xml          |  1 -
 .../ui_component/cms_block_listing.xml        | 21 ++++--------
 .../ui_component/cms_page_listing.xml         | 22 ++++---------
 .../product_attributes_listing.xml            | 11 +++----
 .../ui_component/customer_listing.xml         | 32 +++---------------
 .../ui_component/customer_online_grid.xml     | 20 ++---------
 .../sales_order_creditmemo_grid.xml           | 33 ++++---------------
 .../ui_component/sales_order_grid.xml         | 30 ++++-------------
 .../ui_component/sales_order_invoice_grid.xml | 28 ++++------------
 .../sales_order_shipment_grid.xml             | 26 ++++-----------
 .../sales_order_view_creditmemo_grid.xml      | 33 ++++---------------
 .../sales_order_view_invoice_grid.xml         | 28 ++++------------
 .../sales_order_view_shipment_grid.xml        | 26 ++++-----------
 app/code/Magento/Ui/etc/ui_components.xsd     | 27 +++++++++++++++
 app/code/Magento/Ui/etc/ui_configuration.xsd  |  5 +++
 app/code/Magento/Ui/etc/ui_definition.xsd     |  3 ++
 .../view/base/ui_component/etc/definition.xml | 25 ++++++++++++++
 18 files changed, 134 insertions(+), 259 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index 8279c622fb9..33bc5f9c1f7 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -46,7 +46,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
@@ -56,7 +56,7 @@
                     </item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -202,19 +202,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
@@ -229,7 +227,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="altField" xsi:type="string">name</item>
                     <item name="has_preview" xsi:type="string">1</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Thumbnail</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -240,7 +237,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -274,7 +270,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -285,7 +280,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -329,15 +323,13 @@
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions">
+        <actionsColumn name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
+                    <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">200</item>
-                    <item name="dataType" xsi:type="string">actions</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
index 7d795608ee3..354885b27f4 100644
--- a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
@@ -12,7 +12,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Quantity</item>
                     <item name="sortOrder" xsi:type="number">75</item>
                 </item>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index 08e16f49546..dea2edc64ff 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -54,7 +54,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -64,7 +64,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -186,7 +186,6 @@
                     <item name="indexField" xsi:type="string">block_id</item>
                     <item name="clientConfig" xsi:type="array">
                         <item name="saveUrl" xsi:type="string">cms/block/inlineEdit</item>
-                        <item name="validateUrl" xsi:type="string">/path/to</item>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
@@ -207,19 +206,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">block_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="block_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
@@ -235,7 +232,6 @@
                         </item>
                     </item>
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
             </argument>
@@ -251,7 +247,6 @@
                         </item>
                     </item>
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Identifier</item>
                 </item>
             </argument>
@@ -261,7 +256,6 @@
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Store View</item>
                 </item>
             </argument>
@@ -307,15 +301,12 @@
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions">
+        <actionsColumn name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">block_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index adb855f7adf..30fc75eb0bd 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -54,7 +54,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -64,7 +64,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -225,19 +225,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="page_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
@@ -253,7 +251,6 @@
                             <item name="required-entry" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
             </argument>
@@ -268,7 +265,6 @@
                             <item name="validate-identifier" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">URL Key</item>
                 </item>
             </argument>
@@ -290,7 +286,6 @@
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Store View</item>
                 </item>
             </argument>
@@ -384,7 +379,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Meta Keywords</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -395,21 +389,17 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Meta Description</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions">
+        <actionsColumn name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">page_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
index aab49bb9e10..da7279dde3e 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -46,7 +46,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
@@ -56,7 +56,7 @@
                     </item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -127,20 +127,18 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">attribute_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="attribute_code">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Code</item>
                 </item>
@@ -150,7 +148,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index b384a9becc0..5a4b3dd0538 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -359,19 +359,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">20</item>
@@ -381,7 +379,6 @@
         <column name="name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -390,7 +387,6 @@
         <column name="email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
@@ -399,7 +395,6 @@
         <column name="group_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -408,7 +403,6 @@
         <column name="billing_telephone">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Phone</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -417,7 +411,6 @@
         <column name="billing_postcode">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">ZIP</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -426,7 +419,6 @@
         <column name="billing_country_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Country</item>
                     <item name="sortOrder" xsi:type="number">80</item>
                 </item>
@@ -435,7 +427,6 @@
         <column name="billing_region">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">State/Province</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
@@ -455,7 +446,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Web Site</item>
                     <item name="sortOrder" xsi:type="number">110</item>
                 </item>
@@ -476,7 +466,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Confirmed email</item>
                     <item name="sortOrder" xsi:type="number">130</item>
                 </item>
@@ -486,7 +475,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Account Created in</item>
                     <item name="sortOrder" xsi:type="number">140</item>
                 </item>
@@ -496,7 +484,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                     <item name="sortOrder" xsi:type="number">150</item>
                 </item>
@@ -506,7 +493,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                     <item name="sortOrder" xsi:type="number">160</item>
                 </item>
@@ -527,7 +513,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
                     <item name="sortOrder" xsi:type="number">180</item>
                 </item>
@@ -537,7 +522,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Gender</item>
                     <item name="sortOrder" xsi:type="number">190</item>
                 </item>
@@ -547,7 +531,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="sortOrder" xsi:type="number">200</item>
                 </item>
@@ -557,7 +540,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
                     <item name="sortOrder" xsi:type="number">210</item>
                 </item>
@@ -567,7 +549,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
                     <item name="sortOrder" xsi:type="number">220</item>
                 </item>
@@ -577,7 +558,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
                     <item name="sortOrder" xsi:type="number">230</item>
                 </item>
@@ -587,21 +567,17 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
                     <item name="sortOrder" xsi:type="number">240</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
+        <actionsColumn name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
index 23e313066ac..e98e11b77e9 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
@@ -46,7 +46,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -56,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -116,14 +116,6 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="fieldAction" xsi:type="array">
-                        <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.actions</item>
-                        <item name="target" xsi:type="string">applyAction</item>
-                        <item name="params" xsi:type="array">
-                            <item name="0" xsi:type="string">view</item>
-                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
-                        </item>
-                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -136,7 +128,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
@@ -146,7 +137,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">First Name</item>
                 </item>
             </argument>
@@ -155,7 +145,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Last Name</item>
                 </item>
             </argument>
@@ -164,7 +153,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -172,7 +160,6 @@
         <column name="remote_addr">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">IP Address</item>
                 </item>
             </argument>
@@ -194,7 +181,7 @@
                 </item>
             </argument>
         </column>
-        <column name="visitor_type" class="Magento\Customer\Ui\Component\Listing\Column\Online\Type">
+        <column name="visitor_type">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</item>
                 <item name="config" xsi:type="array">
@@ -208,7 +195,6 @@
         <column name="last_url">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Last URL</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
index 7e95b7ea028..54c97e065c4 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
@@ -46,7 +46,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -56,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -180,19 +180,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
             </argument>
@@ -211,7 +209,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
@@ -230,7 +227,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
@@ -250,12 +246,11 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
@@ -273,7 +268,6 @@
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
@@ -284,7 +278,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -295,7 +288,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -305,7 +297,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -315,7 +306,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -349,7 +339,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -359,7 +348,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
@@ -369,7 +357,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
                 </item>
             </argument>
@@ -379,7 +366,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
                 </item>
             </argument>
@@ -389,7 +375,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
                 </item>
             </argument>
@@ -399,20 +384,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index c9cbb330884..dbdd8594cd5 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -54,7 +54,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -64,7 +64,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -251,19 +251,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">desc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
@@ -274,7 +272,6 @@
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchase Point</item>
                 </item>
             </argument>
@@ -293,7 +290,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
@@ -302,7 +298,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
@@ -311,7 +306,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item>
                 </item>
             </argument>
@@ -320,7 +314,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item>
                 </item>
             </argument>
@@ -342,7 +335,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -353,7 +345,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -363,7 +354,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -373,7 +363,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Email</item>
                 </item>
             </argument>
@@ -395,7 +384,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
@@ -405,7 +393,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
@@ -415,7 +402,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -437,20 +423,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Total Refunded</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderActions">
+        <actionsColumn name="actions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
index 2ec25de2dd6..11cedb7de24 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
@@ -46,7 +46,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -56,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -180,19 +180,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
                 </item>
@@ -212,7 +210,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
             </argument>
@@ -230,7 +227,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
@@ -250,7 +246,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
             </argument>
@@ -261,7 +256,6 @@
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
@@ -272,7 +266,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -283,7 +276,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -293,7 +285,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -303,7 +294,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -337,7 +327,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -347,7 +336,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
@@ -357,20 +345,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
index 9f511674271..5a6d5b51736 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
@@ -46,7 +46,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -56,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -189,19 +189,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
                 </item>
@@ -221,7 +219,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
@@ -240,7 +237,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
@@ -249,7 +245,6 @@
             <argument name="data" xsi:type="array">               
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
@@ -272,7 +267,6 @@
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
@@ -282,7 +276,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -292,7 +285,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -315,7 +307,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -326,7 +317,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -348,20 +338,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
index fd70f752bf6..c7d137a1501 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
@@ -49,7 +49,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -59,7 +59,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -183,19 +183,17 @@
                 </item>
             </item>
         </argument>
-         <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
             </argument>
@@ -214,7 +212,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
@@ -233,7 +230,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
@@ -253,12 +249,11 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
@@ -276,7 +271,6 @@
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
@@ -287,7 +281,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -298,7 +291,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -308,7 +300,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -318,7 +309,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -352,7 +342,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -362,7 +351,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
@@ -372,7 +360,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
                 </item>
             </argument>
@@ -382,7 +369,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
                 </item>
             </argument>
@@ -392,7 +378,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
                 </item>
             </argument>
@@ -402,20 +387,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
index e32957516d2..2e4ac95b8ee 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
@@ -49,7 +49,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -59,7 +59,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -183,19 +183,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
                 </item>
@@ -215,7 +213,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
             </argument>
@@ -233,7 +230,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
@@ -253,7 +249,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
             </argument>
@@ -264,7 +259,6 @@
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
@@ -275,7 +269,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -286,7 +279,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -296,7 +288,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -306,7 +297,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -340,7 +330,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
@@ -350,7 +339,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
@@ -360,20 +348,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index 76a5d32c3a0..f9b77990788 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -49,7 +49,7 @@
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -59,7 +59,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -187,19 +187,17 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
                 </item>
@@ -219,7 +217,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
@@ -238,7 +235,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
@@ -247,7 +243,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">textRange</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
@@ -270,7 +265,6 @@
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
@@ -280,7 +274,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
@@ -290,7 +283,6 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
@@ -313,7 +305,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
@@ -324,7 +315,6 @@
                     <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
@@ -346,20 +336,16 @@
                 <item name="config" xsi:type="array">
                     <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Ui/etc/ui_components.xsd b/app/code/Magento/Ui/etc/ui_components.xsd
index 79c3c684786..0dce99e31b6 100644
--- a/app/code/Magento/Ui/etc/ui_components.xsd
+++ b/app/code/Magento/Ui/etc/ui_components.xsd
@@ -114,6 +114,33 @@
             <xs:extension base="input"/>
         </xs:complexContent>
     </xs:complexType>
+    <xs:complexType name="component">
+        <xs:complexContent>
+            <xs:extension base="ui_element">
+                <xs:choice minOccurs="0" maxOccurs="unbounded">
+                    <xs:group ref="configurable"/>
+                </xs:choice>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="actionsColumn">
+        <xs:complexContent>
+            <xs:extension base="ui_element">
+                <xs:choice minOccurs="0" maxOccurs="unbounded">
+                    <xs:group ref="configurable"/>
+                </xs:choice>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="selectionsColumn">
+        <xs:complexContent>
+            <xs:extension base="ui_element">
+                <xs:choice minOccurs="0" maxOccurs="unbounded">
+                    <xs:group ref="configurable"/>
+                </xs:choice>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
     <xs:complexType name="container">
         <xs:complexContent>
             <xs:extension base="ui_element">
diff --git a/app/code/Magento/Ui/etc/ui_configuration.xsd b/app/code/Magento/Ui/etc/ui_configuration.xsd
index 2cf581c0e9b..9cdf1056494 100644
--- a/app/code/Magento/Ui/etc/ui_configuration.xsd
+++ b/app/code/Magento/Ui/etc/ui_configuration.xsd
@@ -34,6 +34,9 @@
                     <xs:element type="argumentType" name="argument"/>
                     <xs:element type="bookmark" name="bookmark"/>
                     <xs:element name="filterSearch" type="filterSearch" />
+                    <xs:element name="component" type="component" />
+                    <xs:element name="actionsColumn" type="actionsColumn" />
+                    <xs:element name="selectionsColumn" type="selectionsColumn" />
                     <xs:element type="exportButton" name="exportButton"/>
                 </xs:choice>
             </xs:extension>
@@ -80,6 +83,8 @@
             <xs:extension base="columns">
                 <xs:choice minOccurs="0" maxOccurs="unbounded">
                     <xs:element name="column" type="column" />
+                    <xs:element name="actionsColumn" type="actionsColumn" />
+                    <xs:element name="selectionsColumn" type="selectionsColumn" />
                 </xs:choice>
             </xs:extension>
         </xs:complexContent>
diff --git a/app/code/Magento/Ui/etc/ui_definition.xsd b/app/code/Magento/Ui/etc/ui_definition.xsd
index 75b710a0e8b..90a1f245af7 100644
--- a/app/code/Magento/Ui/etc/ui_definition.xsd
+++ b/app/code/Magento/Ui/etc/ui_definition.xsd
@@ -53,6 +53,9 @@
             <xs:element type="bookmark" name="bookmark"/>
             <xs:element type="exportButton" name="exportButton"/>
             <xs:element type="action" name="action"/>
+            <xs:element name="component" type="component" />
+            <xs:element name="actionsColumn" type="actionsColumn" />
+            <xs:element name="selectionsColumn" type="selectionsColumn" />
         </xs:all>
     </xs:complexType>
     <!-- Custom configuration -->
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index 77c98fd98f0..88c55fb5aa9 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -119,6 +119,31 @@
             </item>
         </argument>
     </column>
+    <actionsColumn class="Magento\Ui\Component\Listing\Columns\Column">
+        <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
+                <item name="dataType" xsi:type="string">actions</item>
+                <item name="label" xsi:type="string" translate="true">Action</item>
+            </item>
+        </argument>
+    </actionsColumn>
+    <selectionsColumn class="Magento\Ui\Component\MassAction\Columns\Column">
+        <argument name="data" xsi:type="array">
+            <item name="state_prefix" xsi:type="string">columns</item>
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
+            </item>
+        </argument>
+    </selectionsColumn>
+
+    <component class="Magento\Ui\Component\Container">
+        <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">uiComponent</item>
+            </item>
+        </argument>
+    </component>
 
     <form class="Magento\Ui\Component\Form">
         <argument name="data" xsi:type="array">
-- 
GitLab


From 48c34c8f87eaa844a7519275ed3807642f7a782a Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Tue, 8 Sep 2015 14:59:54 +0300
Subject: [PATCH 032/420] MAGETWO-38562: PHP - Customer - Inline editing

---
 .../Customer/Controller/Adminhtml/Index/InlineEdit.php        | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php
index 2ac1295ba00..f97c48b0ebc 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php
@@ -10,6 +10,9 @@ use Magento\Customer\Ui\Component\Listing\AttributeRepository;
 use Magento\Customer\Api\Data\CustomerInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class InlineEdit extends \Magento\Backend\App\Action
 {
     /** @var CustomerInterface */
@@ -54,7 +57,6 @@ class InlineEdit extends \Magento\Backend\App\Action
         parent::__construct($context);
     }
 
-
     /**
      * @return \Magento\Framework\Controller\Result\Json
      */
-- 
GitLab


From e55a041d0e5b8efeba437ceb430d2ea2289b9de0 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Tue, 8 Sep 2015 15:54:59 +0300
Subject: [PATCH 033/420] MAGETWO-35926: PHP - CMS - Apply Multi Select in
 Filters

---
 .../ui_component/customer_listing.xml         | 174 ++++++++++++++++--
 1 file changed, 161 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index 5a4b3dd0538..0f2cb4d1a53 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -48,7 +48,11 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
+                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
+                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
+                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">customer_listing</item>
                     </item>
                 </item>
@@ -75,6 +79,8 @@
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
+                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">customer_listing.customer_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -87,7 +93,8 @@
         <filters name="listing_filters" class="Magento\Customer\Ui\Component\Listing\Filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="columnsProvider" xsi:type="string">customer_listing.customer_listing.customer_columns</item>
+                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
+                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -95,7 +102,7 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">customer_listing.customer_listing.customer_columns.${ $.index }:visible</item>
+                            <item name="visible" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
                         </item>
                     </item>
                 </item>
@@ -300,6 +307,18 @@
                     </argument>
                 </argument>
             </action>
+            <action name="edit">
+                <argument name="data" xsi:type="array">
+                    <item name="config" xsi:type="array">
+                        <item name="type" xsi:type="string">edit</item>
+                        <item name="label" xsi:type="string" translate="true">Edit</item>
+                        <item name="callback" xsi:type="array">
+                            <item name="provider" xsi:type="string">customer_listing.customer_listing.customer_columns_editor</item>
+                            <item name="target" xsi:type="string">editSelected</item>
+                        </item>
+                    </item>
+                </argument>
+            </action>
         </massaction>
         <paging name="listing_paging">
             <argument name="data" xsi:type="array">
@@ -309,6 +328,7 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
+                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -342,15 +362,26 @@
                     <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
+                <item name="editorConfig" xsi:type="array">
+                    <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
+                    <item name="enabled" xsi:type="boolean">true</item>
+                    <item name="indexField" xsi:type="string">entity_id</item>
+                    <item name="clientConfig" xsi:type="array">
+                        <item name="saveUrl" xsi:type="string">customer/index/inlineEdit</item>
+                        <item name="validateUrl" xsi:type="string">/path/to</item>
+                        <item name="validateBeforeSave" xsi:type="boolean">false</item>
+                    </item>
+                </item>
                 <item name="childDefaults" xsi:type="array">
                     <item name="fieldAction" xsi:type="array">
-                        <item name="provider" xsi:type="string">customer_listing.customer_listing.customer_columns.actions</item>
-                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="provider" xsi:type="string">customer_listing.customer_listing.customer_columns_editor</item>
+                        <item name="target" xsi:type="string">startEdit</item>
                         <item name="params" xsi:type="array">
-                            <item name="0" xsi:type="string">edit</item>
-                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                            <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
+                            <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
+                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -363,6 +394,7 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
+                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
             </argument>
@@ -371,6 +403,7 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="sorting" xsi:type="string">asc</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -379,6 +412,8 @@
         <column name="name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -387,14 +422,25 @@
         <column name="email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="array">
+                        <item name="editorType" xsi:type="string">text</item>
+                    </item>
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
             </argument>
         </column>
-        <column name="group_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
+        <column name="group_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="array">
+                        <item name="editorType" xsi:type="string">select</item>
+                    </item>
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="dataType" xsi:type="string">select</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -403,6 +449,9 @@
         <column name="billing_telephone">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Phone</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -411,14 +460,19 @@
         <column name="billing_postcode">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ZIP</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
             </argument>
         </column>
-        <column name="billing_country_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
+        <column name="billing_country_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Country</item>
                     <item name="sortOrder" xsi:type="number">80</item>
                 </item>
@@ -427,6 +481,8 @@
         <column name="billing_region">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">State/Province</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
@@ -435,16 +491,21 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Customer Since</item>
                     <item name="sortOrder" xsi:type="number">100</item>
                 </item>
             </argument>
         </column>
-        <column name="website_id" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
+        <column name="website_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="array">
+                        <item name="editorType" xsi:type="string">select</item>
+                    </item>
+                    <item name="dataType" xsi:type="string">select</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="label" xsi:type="string" translate="true">Web Site</item>
                     <item name="sortOrder" xsi:type="number">110</item>
@@ -454,7 +515,7 @@
         <column name="last_visit_at" >
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Last Logged In</item>
@@ -465,6 +526,7 @@
         <column name="confirmation">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Confirmed email</item>
                     <item name="sortOrder" xsi:type="number">130</item>
@@ -474,6 +536,7 @@
         <column name="created_in">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Account Created in</item>
                     <item name="sortOrder" xsi:type="number">140</item>
@@ -493,6 +556,8 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                     <item name="sortOrder" xsi:type="number">160</item>
                 </item>
@@ -500,10 +565,15 @@
         </column>
         <column name="dob">
             <argument name="data" xsi:type="array">
-                <item name="config" xsi:type="array">
+                <item name="js_config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                </item>
+                <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">date</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Date Of Birth</item>
                     <item name="sortOrder" xsi:type="number">170</item>
                 </item>
@@ -511,17 +581,30 @@
         </column>
         <column name="taxvat">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
                     <item name="sortOrder" xsi:type="number">180</item>
                 </item>
             </argument>
         </column>
-        <column name="gender" class="Magento\Customer\Ui\Component\Listing\Column\AttributeColumn">
+        <column name="gender">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                </item>
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">select</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Gender</item>
                     <item name="sortOrder" xsi:type="number">190</item>
                 </item>
@@ -529,8 +612,13 @@
         </column>
         <column name="billing_street">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="sortOrder" xsi:type="number">200</item>
                 </item>
@@ -538,8 +626,15 @@
         </column>
         <column name="billing_city">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
                     <item name="sortOrder" xsi:type="number">210</item>
                 </item>
@@ -547,8 +642,15 @@
         </column>
         <column name="billing_fax">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
                     <item name="sortOrder" xsi:type="number">220</item>
                 </item>
@@ -556,8 +658,15 @@
         </column>
         <column name="billing_vat_id">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
                     <item name="sortOrder" xsi:type="number">230</item>
                 </item>
@@ -565,13 +674,52 @@
         </column>
         <column name="billing_company">
             <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
                 <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
                     <item name="sortOrder" xsi:type="number">240</item>
                 </item>
             </argument>
         </column>
+        <column name="billing_firstname">
+            <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
+                <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
+                    <item name="label" xsi:type="string" translate="true">Billing Firstname</item>
+                    <item name="sortOrder" xsi:type="number">250</item>
+                </item>
+            </argument>
+        </column>
+        <column name="billing_lastname">
+            <argument name="data" xsi:type="array">
+                <item name="js_config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                </item>
+                <item name="config" xsi:type="array">
+                    <item name="editor" xsi:type="string">text</item>
+                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="visible" xsi:type="boolean">false</item>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="align" xsi:type="string">left</item>
+                    <item name="label" xsi:type="string" translate="true">Billing Lastname</item>
+                    <item name="sortOrder" xsi:type="number">260</item>
+                </item>
+            </argument>
+        </column>
         <actionsColumn name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-- 
GitLab


From dc3a536dc2dc1bbbb6034192d26808939a697fb4 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Tue, 8 Sep 2015 17:02:28 +0300
Subject: [PATCH 034/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Apply filters on customer grid
- Add class to actions column
---
 .../ui_component/cms_page_listing.xml         |   1 -
 .../ui_component/customer_listing.xml         | 267 ++----------------
 .../ui_component/sales_order_grid.xml         |   2 +-
 3 files changed, 26 insertions(+), 244 deletions(-)

diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index 30fc75eb0bd..24c3b2bd936 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -204,7 +204,6 @@
                     <item name="indexField" xsi:type="string">page_id</item>
                     <item name="clientConfig" xsi:type="array">
                         <item name="saveUrl" xsi:type="string">cms/page/inlineEdit</item>
-                        <item name="validateUrl" xsi:type="string">/path/to</item>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index 0f2cb4d1a53..c9282b6cead 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -48,17 +48,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">customer_listing</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -68,7 +64,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -79,8 +75,6 @@
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">customer_listing.customer_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -90,11 +84,10 @@
                 </item>
             </argument>
         </filterSearch>
-        <filters name="listing_filters" class="Magento\Customer\Ui\Component\Listing\Filters">
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">customer_listing.customer_listing.customer_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -102,154 +95,17 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">customer_listing.customer_listing.customer_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterRange name="entity_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">entity_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">name</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">email</item>
-                        <item name="label" xsi:type="string" translate="true">Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Model\Config\Source\Group\Multiselect</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Group</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_telephone">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_telephone</item>
-                        <item name="label" xsi:type="string" translate="true">Phone</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="billing_postcode">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_postcode</item>
-                        <item name="label" xsi:type="string" translate="true">ZIP</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="billing_country_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Directory\Model\Resource\Country\Collection</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_country_id</item>
-                        <item name="label" xsi:type="string" translate="true">Country</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_region">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_region</item>
-                        <item name="label" xsi:type="string" translate="true">State/Province</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Since</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterSelect name="website_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Website</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">website_id</item>
-                        <item name="label" xsi:type="string" translate="true">Website</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -328,7 +184,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -368,7 +223,6 @@
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="clientConfig" xsi:type="array">
                         <item name="saveUrl" xsi:type="string">customer/index/inlineEdit</item>
-                        <item name="validateUrl" xsi:type="string">/path/to</item>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
@@ -381,7 +235,6 @@
                             <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -394,7 +247,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
             </argument>
@@ -402,8 +254,8 @@
         <column name="entity_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -412,8 +264,7 @@
         <column name="name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -422,11 +273,8 @@
         <column name="email">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="array">
-                        <item name="editorType" xsi:type="string">text</item>
-                    </item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
+                    <item name="editor" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
@@ -435,12 +283,10 @@
         <column name="group_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="array">
-                        <item name="editorType" xsi:type="string">select</item>
-                    </item>
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="editor" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -449,9 +295,8 @@
         <column name="billing_telephone">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Phone</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -460,10 +305,8 @@
         <column name="billing_postcode">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ZIP</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -472,6 +315,8 @@
         <column name="billing_country_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Country</item>
                     <item name="sortOrder" xsi:type="number">80</item>
@@ -481,8 +326,7 @@
         <column name="billing_region">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">State/Province</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
@@ -491,7 +335,7 @@
         <column name="created_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Customer Since</item>
                     <item name="sortOrder" xsi:type="number">100</item>
@@ -501,21 +345,19 @@
         <column name="website_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="array">
-                        <item name="editorType" xsi:type="string">select</item>
-                    </item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="label" xsi:type="string" translate="true">Web Site</item>
                     <item name="sortOrder" xsi:type="number">110</item>
                 </item>
             </argument>
         </column>
-        <column name="last_visit_at" >
+        <column name="last_visit_at">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Last Logged In</item>
@@ -526,7 +368,6 @@
         <column name="confirmation">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Confirmed email</item>
                     <item name="sortOrder" xsi:type="number">130</item>
@@ -536,7 +377,6 @@
         <column name="created_in">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Account Created in</item>
                     <item name="sortOrder" xsi:type="number">140</item>
@@ -556,8 +396,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                     <item name="sortOrder" xsi:type="number">160</item>
                 </item>
@@ -565,15 +403,10 @@
         </column>
         <column name="dob">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="string">date</item>
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Date Of Birth</item>
                     <item name="sortOrder" xsi:type="number">170</item>
                 </item>
@@ -581,15 +414,9 @@
         </column>
         <column name="taxvat">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
                     <item name="sortOrder" xsi:type="number">180</item>
                 </item>
@@ -597,14 +424,11 @@
         </column>
         <column name="gender">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Gender</item>
                     <item name="sortOrder" xsi:type="number">190</item>
                 </item>
@@ -612,13 +436,8 @@
         </column>
         <column name="billing_street">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="sortOrder" xsi:type="number">200</item>
                 </item>
@@ -626,15 +445,9 @@
         </column>
         <column name="billing_city">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
                     <item name="sortOrder" xsi:type="number">210</item>
                 </item>
@@ -642,15 +455,9 @@
         </column>
         <column name="billing_fax">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
                     <item name="sortOrder" xsi:type="number">220</item>
                 </item>
@@ -658,15 +465,9 @@
         </column>
         <column name="billing_vat_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
                     <item name="sortOrder" xsi:type="number">230</item>
                 </item>
@@ -674,15 +475,9 @@
         </column>
         <column name="billing_company">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
                     <item name="sortOrder" xsi:type="number">240</item>
                 </item>
@@ -690,15 +485,9 @@
         </column>
         <column name="billing_firstname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Firstname</item>
                     <item name="sortOrder" xsi:type="number">250</item>
                 </item>
@@ -706,15 +495,9 @@
         </column>
         <column name="billing_lastname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Lastname</item>
                     <item name="sortOrder" xsi:type="number">260</item>
                 </item>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index dbdd8594cd5..9edbbaf780f 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -427,7 +427,7 @@
                 </item>
             </argument>
         </column>
-        <actionsColumn name="actions">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-- 
GitLab


From e29d2452ad95f207fcfb180c8f4fc23f968a19b5 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Tue, 8 Sep 2015 19:30:44 +0300
Subject: [PATCH 035/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Change declaration on Associated Products
---
 ...onfigurable_associated_product_listing.xml | 106 ++----------------
 .../view/base/ui_component/customer_form.xml  |   8 +-
 app/code/Magento/Ui/etc/ui_components.xsd     |  12 +-
 3 files changed, 12 insertions(+), 114 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index aee041d2b5b..83132d42f7b 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -40,31 +40,18 @@
         <filters name="listing_filters" class="Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns</item>
                     <item name="links" xsi:type="array">
                         <item name="applied" xsi:type="string">not-save-filter</item>
                     </item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
-                    <item name="storageConfig" xsi:type="array">
-                        <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.bookmarks</item>
-                        <item name="namespace" xsi:type="string">current.filters</item>
-                    </item>
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">name</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
             <filterSelect name="attribute_set_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\AttributeSet\Options</argument>
@@ -77,43 +64,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="sku">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">sku</item>
-                        <item name="label" xsi:type="string" translate="true">SKU</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="price">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">price</item>
-                        <item name="label" xsi:type="string" translate="true">Price</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
             <filterSelect name="status">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument>
@@ -131,11 +81,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.ids</item>
-                    <item name="storageConfig" xsi:type="array">
-                        <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.bookmarks</item>
-                        <item name="namespace" xsi:type="string">current.paging</item>
-                    </item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
                             <item name="value" xsi:type="number">20</item>
@@ -165,10 +110,6 @@
     <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns">
         <argument name="data" xsi:type="array">
             <item name="config" xsi:type="array">
-                <item name="storageConfig" xsi:type="array">
-                    <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.bookmarks</item>
-                    <item name="namespace" xsi:type="string">current</item>
-                </item>
                 <item name="childDefaults" xsi:type="array">
                     <item name="fieldAction" xsi:type="array">
                         <item name="provider" xsi:type="string">configurableVariations</item>
@@ -177,36 +118,21 @@
                             <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="storageConfig" xsi:type="array">
-                        <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.bookmarks</item>
-                        <item name="root" xsi:type="string">columns.${ $.index }</item>
-                        <item name="namespace" xsi:type="string">current.${ $.storageConfig.root}</item>
-                    </item>
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
@@ -214,16 +140,12 @@
         </column>
         <column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="altField" xsi:type="string">name</item>
                     <item name="has_preview" xsi:type="string">1</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Thumbnail</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -231,13 +153,9 @@
         </column>
         <column name="name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -245,12 +163,8 @@
         </column>
         <column name="sku">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -258,13 +172,9 @@
         </column>
         <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
diff --git a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
index 4a4305c82fd..e540414d377 100644
--- a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
+++ b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
@@ -120,10 +120,8 @@
         <container name="container_group">
             <argument name="data" xsi:type="array">
                 <item name="type" xsi:type="string">group</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="required" xsi:type="boolean">true</item>
                     <item name="dataScope" xsi:type="boolean">false</item>
@@ -351,10 +349,8 @@
         <container name="street_container">
             <argument name="data" xsi:type="array">
                 <item name="type" xsi:type="string">group</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="required" xsi:type="boolean">true</item>
                     <item name="dataScope" xsi:type="string">street</item>
diff --git a/app/code/Magento/Ui/etc/ui_components.xsd b/app/code/Magento/Ui/etc/ui_components.xsd
index 0dce99e31b6..f431c3ae0c7 100644
--- a/app/code/Magento/Ui/etc/ui_components.xsd
+++ b/app/code/Magento/Ui/etc/ui_components.xsd
@@ -125,20 +125,12 @@
     </xs:complexType>
     <xs:complexType name="actionsColumn">
         <xs:complexContent>
-            <xs:extension base="ui_element">
-                <xs:choice minOccurs="0" maxOccurs="unbounded">
-                    <xs:group ref="configurable"/>
-                </xs:choice>
-            </xs:extension>
+           <xs:extension base="column"/>
         </xs:complexContent>
     </xs:complexType>
     <xs:complexType name="selectionsColumn">
         <xs:complexContent>
-            <xs:extension base="ui_element">
-                <xs:choice minOccurs="0" maxOccurs="unbounded">
-                    <xs:group ref="configurable"/>
-                </xs:choice>
-            </xs:extension>
+            <xs:extension base="column"/>
         </xs:complexContent>
     </xs:complexType>
     <xs:complexType name="container">
-- 
GitLab


From a9574a468ca7bbaadf38bc65ac8d464b06147926 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Tue, 8 Sep 2015 20:31:29 +0300
Subject: [PATCH 036/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Remove unnecessary page sizes
---
 .../Catalog/Ui/Component/ColumnFactory.php    |  4 ----
 ...onfigurable_associated_product_listing.xml | 22 -------------------
 2 files changed, 26 deletions(-)

diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
index 001facb345a..58de2b262c8 100644
--- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
+++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
@@ -61,10 +61,6 @@ class ColumnFactory
             $config['options'] = $attribute->getSource()->getAllOptions();
         }
         
-        if ($attribute->getIsFilterableInGrid()) {
-
-        }
-        
         $config['component'] = $this->getJsComponent($config['dataType']);
         
         $arguments = [
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index 83132d42f7b..b497b3b385f 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -81,28 +81,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.ids</item>
-                    <item name="options" xsi:type="array">
-                        <item name="20" xsi:type="array">
-                            <item name="value" xsi:type="number">20</item>
-                            <item name="label" xsi:type="string" translate="true">20</item>
-                        </item>
-                        <item name="30" xsi:type="array">
-                            <item name="value" xsi:type="number">30</item>
-                            <item name="label" xsi:type="string" translate="true">30</item>
-                        </item>
-                        <item name="50" xsi:type="array">
-                            <item name="value" xsi:type="number">50</item>
-                            <item name="label" xsi:type="string" translate="true">50</item>
-                        </item>
-                        <item name="100" xsi:type="array">
-                            <item name="value" xsi:type="number">100</item>
-                            <item name="label" xsi:type="string" translate="true">100</item>
-                        </item>
-                        <item name="200" xsi:type="array">
-                            <item name="value" xsi:type="number">200</item>
-                            <item name="label" xsi:type="string" translate="true">200</item>
-                        </item>
-                    </item>
                 </item>
             </argument>
         </paging>
-- 
GitLab


From c80ad5af85c29ccb6322d289d69caf98f9273323 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 9 Sep 2015 11:50:26 +0300
Subject: [PATCH 037/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../catalog/product/composite/configure.js    | 42 ++++---------------
 1 file changed, 9 insertions(+), 33 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
index 648632e2aac..1461078d6b6 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
@@ -6,7 +6,8 @@ define([
     "jquery",
     "jquery/ui",
     "mage/translate",
-    "prototype"
+    "prototype",
+    'Magento_Ui/js/modal/modal'
 ], function(jQuery){
 
 window.ProductConfigure = Class.create();
@@ -41,45 +42,20 @@ ProductConfigure.prototype = {
      * Initialize object
      */
     initialize: function() {
-        this._initWindowElements();
         var self = this;
-        this.dialog = jQuery('#product_composite_configure').dialog({
-            autoOpen: false,
+
+        this.dialog = jQuery('#product_composite_configure').modal({
             title: jQuery.mage.__('Configure Product'),
-            modal: true,
-            minWidth: 500,
-            width: '75%',
-            dialogClass: 'popup-window',
-            position: {
-                my: 'left top',
-                at: 'center top',
-                of: 'body'
-            },
-            open: function () {
-                jQuery(this).addClass('magento_message').css('max-height', '500px');
-                jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-            },
-            close: function() {
-                jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-            },
+            type: 'slide',
             buttons: [{
                 text: jQuery.mage.__('OK'),
                 'class': 'action-primary',
-                click: function() {
+                click: function () {
                     self.onConfirmBtn();
                 }
-            }, {
-                id: "product_composite_configure_form_cancel",
-                text: "Cancel",
-                'class': 'action-close',
-                click: function() {
-                    jQuery(this).dialog("close");
-                }
             }]
         });
+        this._initWindowElements();
     },
 
     /**
@@ -440,7 +416,7 @@ ProductConfigure.prototype = {
      * Show configuration window
      */
     _showWindow: function() {
-        this.dialog.dialog('open');
+        this.dialog.modal('openModal');
         //this._toggleSelectsExceptBlock(false);
 
         if (Object.isFunction(this.showWindowCallback[this.current.listType])) {
@@ -472,7 +448,7 @@ ProductConfigure.prototype = {
      * Close configuration window
      */
     _closeWindow: function() {
-        this.dialog.dialog('close');
+        this.dialog.modal('closeModal');
         //this.blockWindow.style.display = 'none';
         //this.clean('window');
     },
-- 
GitLab


From ced0f0093097127c73aef3357685de2948435b6d Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Wed, 9 Sep 2015 13:19:40 +0300
Subject: [PATCH 038/420] MAGETWO-32170: [Vanilla] Gallery Widget on
 Configurable Product

---
 .../Catalog/Block/Product/View/Gallery.php    |  39 +-
 app/code/Magento/Catalog/Model/Product.php    |   1 +
 .../Magento/Catalog/Model/Product/Image.php   |   3 +
 .../templates/product/view/gallery.phtml      |  35 +-
 .../Block/Product/View/Type/Configurable.php  |   1 +
 .../ConfigurableProduct/Helper/Data.php       |  55 ++-
 .../Model/Product/Type/Configurable.php       |   6 +-
 .../view/frontend/web/js/configurable.js      | 237 +++++++-----
 .../frontend/Magento/blank/etc/view.xml       |  55 ++-
 app/design/frontend/Magento/luma/etc/view.xml |  55 ++-
 .../Magento/Framework/Config/View.php         |  37 +-
 .../Magento/Framework/Config/etc/view.xsd     |  17 +-
 lib/web/mage/gallery/gallery.js               | 352 ++++++++----------
 13 files changed, 525 insertions(+), 368 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index f8b77d46d3c..4be631e6182 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -12,6 +12,7 @@
 namespace Magento\Catalog\Block\Product\View;
 
 use Magento\Framework\Data\Collection;
+use Magento\Framework\Json\EncoderInterface;
 
 class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
 {
@@ -20,6 +21,22 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
      */
     protected $configView;
 
+    /**
+     * @var \Magento\Framework\Json\EncoderInterface
+     */
+    protected $jsonEncoder;
+
+    public function __construct(
+        \Magento\Catalog\Block\Product\Context $context,
+        \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
+        EncoderInterface $jsonEncoder,
+        array $data = []
+    )
+    {
+        $this->jsonEncoder = $jsonEncoder;
+        parent::__construct($context, $arrayUtils, $data);
+    }
+
     /**
      * Retrieve collection of gallery images
      *
@@ -56,6 +73,26 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
         return $images;
     }
 
+    /**
+     * Return magnifier options
+     *
+     * @return string
+     */
+    public function getMagnifier()
+    {
+        return $this->jsonEncoder->encode($this->getVar('magnifier'));
+    }
+
+    /**
+     * Return breakpoints options
+     *
+     * @return string
+     */
+    public function getBreakpoints()
+    {
+        return $this->jsonEncoder->encode($this->getVar('breakpoints'));
+    }
+
     /**
      * Retrieve product images in JSON format
      *
@@ -128,4 +165,4 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
         }
         return $this->configView;
     }
-}
+}
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index dd0f5ec4ead..d83299c1cdd 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -18,6 +18,7 @@ use Magento\Framework\Api\Data\ImageContentInterface;
  * Catalog product model
  *
  * @method Product setHasError(bool $value)
+ * @method \Magento\Catalog\Model\Resource\Product getResource()
  * @method null|bool getHasError()
  * @method Product setAssociatedProductIds(array $productIds)
  * @method array getAssociatedProductIds()
diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php
index f669b73ca51..87af2b3c815 100644
--- a/app/code/Magento/Catalog/Model/Product/Image.php
+++ b/app/code/Magento/Catalog/Model/Product/Image.php
@@ -19,6 +19,9 @@ use Magento\Store\Model\Store;
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ * @method string getFile()
+ * @method string getLabel()
+ * @method string getPosition()
  */
 class Image extends \Magento\Framework\Model\AbstractModel
 {
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 3089c2cf50f..9ab7c65ab91 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -16,21 +16,14 @@
         ".gallery-placeholder": {
             "mage/gallery/gallery": {
                 "mixins":["magnifier/magnify"],
-                "magnifierOpts": {
-                    "enabled": <?php echo $block->getVar("magnifier:enabled"); ?>,
-                    "eventType": "<?php echo $block->getVar("magnifier:action"); ?>",
-                    "width": "<?php echo $block->getVar("magnifier:width"); ?>",
-                    "height": "<?php echo $block->getVar("magnifier:height"); ?>",
-                    "top": "<?php echo $block->getVar("magnifier:top"); ?>",
-                    "left": "<?php echo $block->getVar("magnifier:left"); ?>"
-                },
+                "magnifierOpts": <?php echo $block->getMagnifier(); ?>,
                 "data": <?php echo $block->getGalleryImagesJson(); ?>,
                 "options": {
-                    "nav": "<?php echo $block->getVar("gallery:navigation"); ?>",
-                    "loop": <?php echo $block->getVar("gallery:loop"); ?>,
-                    "keyboard": <?php echo $block->getVar("gallery:keyboard"); ?>,
-                    "arrows": <?php echo $block->getVar("gallery:arrows"); ?>,
-                    "showCaption": <?php echo $block->getVar("gallery:show_caption"); ?>,
+                    "nav": "<?php echo $block->getVar("gallery/navigation"); ?>",
+                    "loop": <?php echo $block->getVar("gallery/loop"); ?>,
+                    "keyboard": <?php echo $block->getVar("gallery/keyboard"); ?>,
+                    "arrows": <?php echo $block->getVar("gallery/arrows"); ?>,
+                    "showCaption": <?php echo $block->getVar("gallery/show_caption"); ?>,
                     "width": <?php echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "thumbwidth": <?php echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "thumbheight": <?php echo $block->getImageAttribute('product_page_image_small', 'height')
@@ -38,21 +31,7 @@
                     "height": <?php echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
                 },
-                "breakpoints": {
-                    "mobile": {
-                        "conditions": {
-                            "max-width": "767px"
-                        },
-                        "options": {
-                            "options": {
-                                "nav": "dots"
-                            },
-                            "magnifierOpts": {
-                                "enabled": false
-                            }
-                        }
-                    }
-                }
+                "breakpoints": <?php echo $block->getBreakpoints(); ?>
             }
         }
     }
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 b67361c4fcc..14973a48c11 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
@@ -198,6 +198,7 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
             'productId' => $currentProduct->getId(),
             'chooseText' => __('Choose an Option...'),
             'images' => isset($options['images']) ? $options['images'] : [],
+            'index' => isset($options['index']) ? $options['index'] : [],
         ];
 
         if ($currentProduct->hasPreconfiguredValues() && !empty($attributesData['defaultValues'])) {
diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php
index bfd993d7541..45302ad89f8 100644
--- a/app/code/Magento/ConfigurableProduct/Helper/Data.php
+++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php
@@ -30,6 +30,42 @@ class Data
         $this->imageHelper = $imageHelper;
     }
 
+    /**
+     * Retrieve collection of gallery images
+     *
+     * @param \Magento\Catalog\Api\Data\ProductInterface $product
+     * @return \Magento\Catalog\Model\Product\Image[]|null
+     */
+    public function getGalleryImages(\Magento\Catalog\Api\Data\ProductInterface $product)
+    {
+        $images = $product->getMediaGalleryImages();
+        if ($images instanceof \Magento\Framework\Data\Collection) {
+            foreach ($images as &$image) {
+                /** @var $image \Magento\Catalog\Model\Product\Image */
+                $image->setData(
+                    'small_image_url',
+                    $this->imageHelper->init($product, 'product_page_image_small')
+                        ->setImageFile($image->getFile())
+                        ->getUrl()
+                );
+                $image->setData(
+                    'medium_image_url',
+                    $this->imageHelper->init($product, 'product_page_image_medium')
+                        ->setImageFile($image->getFile())
+                        ->getUrl()
+                );
+                $image->setData(
+                    'large_image_url',
+                    $this->imageHelper->init($product, 'product_page_image_large')
+                        ->setImageFile($image->getFile())
+                        ->getUrl()
+                );
+            }
+        }
+
+        return $images;
+    }
+
     /**
      * Get Options for Configurable Product Options
      *
@@ -42,16 +78,27 @@ class Data
         $options = [];
         foreach ($allowedProducts as $product) {
             $productId = $product->getId();
+            $images = $this->getGalleryImages($product);
+            if ($images) {
+                foreach ($images as $image) {
+                    $options['images'][$productId][] =
+                        [
+                            'thumb' => $image->getData('small_image_url'),
+                            'img' => $image->getData('medium_image_url'),
+                            'original' => $image->getData('large_image_url'),
+                            'caption' => $image->getLabel(),
+                            'position' => $image->getPosition(),
+                            'isMain' => $image->getFile() == $product->getImage(),
+                        ];
+                }
+            }
             foreach ($this->getAllowAttributes($currentProduct) as $attribute) {
                 $productAttribute = $attribute->getProductAttribute();
                 $productAttributeId = $productAttribute->getId();
                 $attributeValue = $product->getData($productAttribute->getAttributeCode());
 
                 $options[$productAttributeId][$attributeValue][] = $productId;
-                $imageUrl = (!$product->getImage() || $product->getImage() === 'no_selection')
-                    ? $this->imageHelper->init($currentProduct, 'product_page_image_large')->getUrl()
-                    : $this->imageHelper->init($product, 'product_page_image_large')->getUrl();
-                $options['images'][$productAttributeId][$attributeValue][$productId] = $imageUrl;
+                $options['index'][$productId][$productAttributeId] = $attributeValue;
             }
         }
         return $options;
diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
index 4c8c10f0147..d6c5da4b6e7 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
@@ -440,7 +440,9 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
             }
 
             $usedProducts = [];
-            $collection = $this->getUsedProductCollection($product)->addAttributeToSelect('*')
+            $collection = $this->getUsedProductCollection($product)
+                ->addAttributeToSelect('*')
+                ->addAttributeToSelect('media_gallery')
                 ->addFilterByRequiredOptions()
                 ->setStoreId($product->getStoreId());
 
@@ -454,6 +456,8 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
             }
 
             foreach ($collection as $item) {
+                /** @var \Magento\Catalog\Model\Product $item */
+                $item->getResource()->getAttribute('media_gallery')->getBackend()->afterLoad($item);
                 $usedProducts[] = $item;
             }
 
diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index b793612a5eb..f4dc170bbb3 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -4,14 +4,14 @@
  */
 /*jshint browser:true jquery:true*/
 define([
-    "jquery",
-    "underscore",
-    "mage/template",
-    "priceUtils",
-    "priceBox",
-    "jquery/ui",
-    "jquery/jquery.parsequery"
-], function($, _, mageTemplate, utils){
+    'jquery',
+    'underscore',
+    'mage/template',
+    'priceUtils',
+    'priceBox',
+    'jquery/ui',
+    'jquery/jquery.parsequery'
+], function ($, _, mageTemplate) {
 
     $.widget('mage.configurable', {
         options: {
@@ -21,13 +21,16 @@ define([
             state: {},
             priceFormat: {},
             optionTemplate: '<%- data.label %>' +
-                            '<% if (data.finalPrice.value) { %>' +
-                                ' <%- data.finalPrice.formatted %>' +
-                            '<% } %>',
-            mediaGallerySelector: '[data-role=media-gallery]'
+            '<% if (data.finalPrice.value) { %>' +
+            ' <%- data.finalPrice.formatted %>' +
+            '<% } %>',
+            mediaGallerySelector: '[data-gallery-role=gallery]'
         },
-
-        _create: function() {
+        /**
+         * Creates widget
+         * @private
+         */
+        _create: function () {
             // Initial setting of various option values
             this._initializeOptions();
 
@@ -51,14 +54,14 @@ define([
          * Initialize tax configuration, initial settings, and options values.
          * @private
          */
-        _initializeOptions: function() {
+        _initializeOptions: function () {
             var priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option');
 
-            if(priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.optionTemplate) {
+            if (priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.optionTemplate) {
                 this.options.optionTemplate = priceBoxOptions.priceConfig.optionTemplate;
             }
 
-            if(priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.priceFormat) {
+            if (priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.priceFormat) {
                 this.options.priceFormat = priceBoxOptions.priceConfig.priceFormat;
             }
             this.options.optionTemplate = mageTemplate(this.options.optionTemplate);
@@ -70,8 +73,8 @@ define([
             this.options.values = this.options.spConfig.defaultValues || {};
             this.options.parentImage = $('[data-role=base-image-container] img').attr('src');
 
-            this.initialGalleryImages = $(this.options.mediaGallerySelector).data('mageGallery')
-                ? $(this.options.mediaGallerySelector).gallery('option', 'images')
+            this.initialGalleryImages = $(this.options.mediaGallerySelector).data('mageGallery') ?
+                $(this.options.mediaGallerySelector).gallery('option', 'images')
                 : [];
             this.inputSimpleProduct = this.element.find(this.options.selectSimpleProduct);
         },
@@ -81,11 +84,13 @@ define([
          * initialized inputs values.
          * @private
          */
-        _overrideDefaults: function() {
+        _overrideDefaults: function () {
             var hashIndex = window.location.href.indexOf('#');
+
             if (hashIndex !== -1) {
                 this._parseQueryParams(window.location.href.substr(hashIndex + 1));
             }
+
             if (this.options.spConfig.inputsInitialized) {
                 this._setValuesByAttribute();
             }
@@ -94,12 +99,15 @@ define([
         /**
          * Parse query parameters from a query string and set options values based on the
          * key value pairs of the parameters.
-         * @param queryString URL query string containing query parameters.
+         * @param {*} queryString - URL query string containing query parameters.
          * @private
          */
-        _parseQueryParams: function(queryString) {
-            var queryParams = $.parseQuery({query: queryString});
-            $.each(queryParams, $.proxy(function(key, value) {
+        _parseQueryParams: function (queryString) {
+            var queryParams = $.parseQuery({
+                query: queryString
+            });
+
+            $.each(queryParams, $.proxy(function (key, value) {
                 this.options.values[key] = value;
             }, this));
         },
@@ -109,9 +117,9 @@ define([
          * identifier.
          * @private
          */
-        _setValuesByAttribute: function() {
+        _setValuesByAttribute: function () {
             this.options.values = {};
-            $.each(this.options.settings, $.proxy(function(index, element) {
+            $.each(this.options.settings, $.proxy(function (index, element) {
                 if (element.value) {
                     var attributeId = element.id.replace(/[a-z]*/, '');
                     this.options.values[attributeId] = element.value;
@@ -123,8 +131,8 @@ define([
          * Set up .on('change') events for each option element to configure the option.
          * @private
          */
-        _setupChangeEvents: function() {
-            $.each(this.options.settings, $.proxy(function(index, element) {
+        _setupChangeEvents: function () {
+            $.each(this.options.settings, $.proxy(function (index, element) {
                 $(element).on('change', this, this._configure);
             }, this));
         },
@@ -134,9 +142,10 @@ define([
          * attribute identifier. Set the state based on the attribute identifier.
          * @private
          */
-        _fillState: function() {
-            $.each(this.options.settings, $.proxy(function(index, element) {
+        _fillState: function () {
+            $.each(this.options.settings, $.proxy(function (index, element) {
                 var attributeId = element.id.replace(/[a-z]*/, '');
+
                 if (attributeId && this.options.spConfig.attributes[attributeId]) {
                     element.config = this.options.spConfig.attributes[attributeId];
                     element.attributeId = attributeId;
@@ -150,10 +159,10 @@ define([
          * an option's list of selections as needed or disable an option's setting.
          * @private
          */
-        _setChildSettings: function() {
-            var childSettings   = [],
-                settings        = this.options.settings,
-                index           = settings.length,
+        _setChildSettings: function () {
+            var childSettings = [],
+                settings = this.options.settings,
+                index = settings.length,
                 option;
 
             while (index--) {
@@ -164,9 +173,9 @@ define([
                     (option.disabled = true);
 
                 _.extend(option, {
-                    childSettings:  childSettings.slice(),
-                    prevSetting:    settings[index - 1],
-                    nextSetting:    settings[index + 1]
+                    childSettings: childSettings.slice(),
+                    prevSetting: settings[index - 1],
+                    nextSetting: settings[index + 1]
                 });
 
                 childSettings.push(option);
@@ -178,11 +187,11 @@ define([
          * the option, which sets its state, and initializes the option's choices, etc.
          * @private
          */
-        _configureForValues: function() {
+        _configureForValues: function () {
             if (this.options.values) {
-                this.options.settings.each($.proxy(function(index, element) {
+                this.options.settings.each($.proxy(function (index, element) {
                     var attributeId = element.attributeId;
-                    element.value = (typeof(this.options.values[attributeId]) === 'undefined') ?
+                    element.value = (typeof (this.options.values[attributeId]) === 'undefined') ?
                         '' :
                         this.options.values[attributeId];
                     this._configureElement(element);
@@ -193,9 +202,9 @@ define([
         /**
          * Event handler for configuring an option.
          * @private
-         * @param event Event triggered to configure an option.
+         * @param {Object} event - Event triggered to configure an option.
          */
-        _configure: function(event) {
+        _configure: function (event) {
             event.data._configureElement(this);
         },
 
@@ -203,11 +212,12 @@ define([
          * Configure an option, initializing it's state and enabling related options, which
          * populates the related option's selection and resets child option selections.
          * @private
-         * @param element The element associated with a configurable option.
+         * @param {*} element - The element associated with a configurable option.
          */
-        _configureElement: function(element) {
+        _configureElement: function (element) {
             if (element.value) {
                 this.options.state[element.config.id] = element.value;
+
                 if (element.nextSetting) {
                     element.nextSetting.disabled = false;
                     this._fillSelect(element.nextSetting);
@@ -215,8 +225,7 @@ define([
                 } else {
                     this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]);
                 }
-            }
-            else {
+            } else {
                 this._resetChildren(element);
             }
             this._reloadPrice();
@@ -228,38 +237,41 @@ define([
          * @private
          */
         _changeProductImage: function () {
-            var images = this.options.spConfig.images,
-                imagesArray = null,
-                galleryElement = $(this.options.mediaGallerySelector);
-            $.each(this.options.settings, function (k, v) {
-                var selectValue = parseInt(v.value, 10),
-                    attributeId = v.id.replace(/[a-z]*/, '');
-                if (selectValue > 0 && attributeId) {
-                    if (!imagesArray) {
-                        imagesArray = images[attributeId][selectValue];
-                    } else {
-                        var intersectedArray = {};
-                        $.each(imagesArray, function (productId) {
-                            if (images[attributeId][selectValue][productId]) {
-                                intersectedArray[productId] = images[attributeId][selectValue][productId];
-                            }
-                        });
-                        imagesArray = intersectedArray;
+            var state = (function () {
+                    var p,
+                        state = JSON.stringify(this.options.state);
+
+                    for (p in this.options.spConfig.index) {
+
+                        if (JSON.stringify(this.options.spConfig.index[p]) === state) {
+                            return p;
+                        }
                     }
-                }
-            });
 
-            var result = [];
-            $.each(imagesArray || {}, function (k, v) {
-                result.push({
-                    small: v,
-                    medium: v,
-                    large: v
-                });
-            });
+                    return false;
+                }.bind(this)()),
+                option = (function () {
+                    return this.options.state[state] ? this.options.state[state] : false;
+                }.bind(this)()),
+                images,
+                galleryObject = $(this.options.mediaGallerySelector).data('gallery');
+
+            if (state && state !== this.options.previousState) {
+                this.options.previousState = state;
+                images = this.options.spConfig.images[state];
+            }
 
-            if (galleryElement.length && galleryElement.data('mageGallery')) {
-                galleryElement.gallery('option', 'images', result.length > 0 ? result : this.initialGalleryImages);
+            if (galleryObject) {
+
+                if (!this.options.initialState) {
+                    this.options.initialState = galleryObject.returnCurrentImages();
+                }
+
+                if (images) {
+                    galleryObject.updateData(images);
+                } else if (!option) {
+                    galleryObject.updateData(this.options.initialState);
+                }
             }
         },
 
@@ -267,13 +279,14 @@ define([
          * For a given option element, reset all of its selectable options. Clear any selected
          * index, disable the option choice, and reset the option's state if necessary.
          * @private
-         * @param element The element associated with a configurable option.
+         * @param {*} element - The element associated with a configurable option.
          */
-        _resetChildren: function(element) {
+        _resetChildren: function (element) {
             if (element.childSettings) {
                 for (var i = 0; i < element.childSettings.length; i++) {
                     element.childSettings[i].selectedIndex = 0;
                     element.childSettings[i].disabled = true;
+
                     if (element.config) {
                         this.options.state[element.config.id] = false;
                     }
@@ -284,25 +297,32 @@ define([
         /**
          * Populates an option's selectable choices.
          * @private
-         * @param element Element associated with a configurable option.
+         * @param {*} element - Element associated with a configurable option.
          */
-        _fillSelect: function(element) {
+        _fillSelect: function (element) {
             var attributeId = element.id.replace(/[a-z]*/, ''),
-                options = this._getAttributeOptions(attributeId);
+                options = this._getAttributeOptions(attributeId),
+                prevConfig,
+                index = 1,
+                allowedProducts,
+                i,
+                j;
+
             this._clearSelect(element);
             element.options[0] = new Option('', '');
             element.options[0].innerHTML = this.options.spConfig.chooseText;
+            prevConfig = false;
 
-            var prevConfig = false;
             if (element.prevSetting) {
                 prevConfig = element.prevSetting.options[element.prevSetting.selectedIndex];
             }
+
             if (options) {
-                var index = 1;
-                for (var i = 0; i < options.length; i++) {
-                    var allowedProducts = [];
+                for (i = 0; i < options.length; i++) {
+                    allowedProducts = [];
+
                     if (prevConfig) {
-                        for (var j = 0; j < options[i].products.length; j++) {
+                        for (j = 0; j < options[i].products.length; j++) {
                             // prevConfig.config can be undefined
                             if (prevConfig.config &&
                                 prevConfig.config.allowedProducts &&
@@ -313,12 +333,15 @@ define([
                     } else {
                         allowedProducts = options[i].products.slice(0);
                     }
+
                     if (allowedProducts.length > 0) {
                         options[i].allowedProducts = allowedProducts;
                         element.options[index] = new Option(this._getOptionLabel(options[i]), options[i].id);
+
                         if (typeof options[i].price !== 'undefined') {
                             element.options[index].setAttribute('price', options[i].prices);
                         }
+
                         element.options[index].config = options[i];
                         index++;
                     }
@@ -330,20 +353,19 @@ define([
          * Generate the label associated with a configurable option. This includes the option's
          * label or value and the option's price.
          * @private
-         * @param option A single choice among a group of choices for a configurable option.
-         * @param selOption Current selected option.
+         * @param {*} option - A single choice among a group of choices for a configurable option.
          * @return {String} The option label with option value and price (e.g. Black +1.99)
          */
-        _getOptionLabel: function(option, selOption) {
+        _getOptionLabel: function (option) {
             return option.label;
         },
 
         /**
          * Removes an option's selections.
          * @private
-         * @param element The element associated with a configurable option.
+         * @param {*} element - The element associated with a configurable option.
          */
-        _clearSelect: function(element) {
+        _clearSelect: function (element) {
             for (var i = element.options.length - 1; i >= 0; i--) {
                 element.remove(i);
             }
@@ -352,10 +374,10 @@ define([
         /**
          * Retrieve the attribute options associated with a specific attribute Id.
          * @private
-         * @param attributeId The id of the attribute whose configurable options are sought.
+         * @param {Number} attributeId - The id of the attribute whose configurable options are sought.
          * @return {Object} Object containing the attribute options.
          */
-        _getAttributeOptions: function(attributeId) {
+        _getAttributeOptions: function (attributeId) {
             if (this.options.spConfig.attributes[attributeId]) {
                 return this.options.spConfig.attributes[attributeId].options;
             }
@@ -364,38 +386,47 @@ define([
         /**
          * Reload the price of the configurable product incorporating the prices of all of the
          * configurable product's option selections.
-         * @private
-         * @return {Number} The price of the configurable product including selected options.
          */
-        _reloadPrice: function() {
+        _reloadPrice: function () {
             $(this.options.priceHolderSelector).trigger('updatePrice', this._getPrices());
         },
-
+        /**
+         * Get product various prices
+         * @returns {{}}
+         * @private
+         */
         _getPrices: function () {
             var prices = {},
                 elements = _.toArray(this.options.settings);
 
-            _.each(elements, function(element) {
+            _.each(elements, function (element) {
                 var selected = element.options[element.selectedIndex],
                     config = selected && selected.config;
 
-                prices[element.attributeId] = config && config.allowedProducts.length === 1
-                    ? this._calculatePrice(config)
+                prices[element.attributeId] = config && config.allowedProducts.length === 1 ?
+                    this._calculatePrice(config)
                     : {};
             }, this);
 
             return prices;
         },
-
+        /**
+         * Returns pracies for configured products
+         *
+         * @param {*} config - Products configuration
+         * @returns {*}
+         * @private
+         */
         _calculatePrice: function (config) {
-            var displayPrices = $(this.options.priceHolderSelector).priceBox('option').prices;
-            var newPrices = this.options.spConfig.optionPrices[_.first(config.allowedProducts)];
+            var displayPrices = $(this.options.priceHolderSelector).priceBox('option').prices,
+                newPrices = this.options.spConfig.optionPrices[_.first(config.allowedProducts)];
 
             _.each(displayPrices, function (price, code) {
                 if (newPrices[code]) {
-                    displayPrices[code].amount =  newPrices[code].amount - displayPrices[code].amount
+                    displayPrices[code].amount = newPrices[code].amount - displayPrices[code].amount
                 }
             });
+
             return displayPrices;
         }
 
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 897a3c54b3b..50693074218 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -180,18 +180,51 @@
     <vars module="Magento_Catalog">
 
         <!-- New gallery and magnifier theme settings -->
-        <var name="gallery:navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
-        <var name="gallery:loop">true</var> <!-- Gallery navigation loop (true/false) -->
-        <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
-        <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery">
+            <var name="navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+            <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
+            <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
+            <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
+            <var name="show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        </var>
 
-        <var name="magnifier:top"></var> <!-- Top position of magnifier -->
-        <var name="magnifier:left"></var> <!-- Left position of magnifier -->
-        <var name="magnifier:width"></var> <!-- Width of magnifier block -->
-        <var name="magnifier:height"></var> <!-- Height of magnifier block -->
-        <var name="magnifier:action">hover</var> <!-- Action that atcivates zoom (hover/click) -->
-        <var name="magnifier:enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
+        <var name="magnifier">
+            <var name="top"></var> <!-- Top position of magnifier -->
+            <var name="left"></var> <!-- Left position of magnifier -->
+            <var name="width"></var> <!-- Width of magnifier block -->
+            <var name="height"></var> <!-- Height of magnifier block -->
+            <var name="action">hover</var> <!-- Action that atcivates zoom (hover/click) -->
+            <var name="enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
+        </var>
+
+        <var name="breakpoints">
+            <var name="mobile">
+                <var name="conditions">
+                    <var name="max-width">767px</var>
+                </var>
+                <var name="options">
+                    <var name="options">
+                        <var name="nav">dots</var>
+                    </var>
+                    <var name="magnifierOpts">
+                        <var name="enabled">false</var>
+                    </var>
+                </var>
+            </var>
+            <var name="desktop">
+                <var name="conditions">
+                    <var name="max-width">768px</var>
+                </var>
+                <var name="options">
+                    <var name="options">
+                        <var name="nav">thumbs</var>
+                    </var>
+                    <var name="magnifierOpts">
+                        <var name="enabled">true</var>
+                    </var>
+                </var>
+            </var>
+        </var>
         <!-- end -->
 
         <var name="product_small_image_sidebar_size">100</var>  <!-- Override for small product image -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 573f628d526..ed9439f3381 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -184,18 +184,51 @@
     <vars module="Magento_Catalog">
 
         <!-- New gallery and magnifier theme settings -->
-        <var name="gallery:navigation">dots</var> <!-- Gallery navigation style (false/thumbs/dots) -->
-        <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) -->
-        <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
-        <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery">
+            <var name="navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+            <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
+            <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
+            <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
+            <var name="show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        </var>
 
-        <var name="magnifier:top"></var> <!-- Top position of magnifier -->
-        <var name="magnifier:left"></var> <!-- Right position of magnifier -->
-        <var name="magnifier:width"></var> <!-- Width of magnifier block -->
-        <var name="magnifier:height"></var> <!-- Height of magnifier block -->
-        <var name="magnifier:action">click</var> <!-- Action that atcivates zoom (hover/click) -->
-        <var name="magnifier:enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
+        <var name="magnifier">
+            <var name="top"></var> <!-- Top position of magnifier -->
+            <var name="left"></var> <!-- Left position of magnifier -->
+            <var name="width"></var> <!-- Width of magnifier block -->
+            <var name="height"></var> <!-- Height of magnifier block -->
+            <var name="action">hover</var> <!-- Action that atcivates zoom (hover/click) -->
+            <var name="enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
+        </var>
+
+        <var name="breakpoints">
+            <var name="mobile">
+                <var name="conditions">
+                    <var name="max-width">767px</var>
+                </var>
+                <var name="options">
+                    <var name="options">
+                        <var name="nav">dots</var>
+                    </var>
+                    <var name="magnifierOpts">
+                        <var name="enabled">false</var>
+                    </var>
+                </var>
+            </var>
+            <var name="desktop">
+                <var name="conditions">
+                    <var name="max-width">768px</var>
+                </var>
+                <var name="options">
+                    <var name="options">
+                        <var name="nav">thumbs</var>
+                    </var>
+                    <var name="magnifierOpts">
+                        <var name="enabled">true</var>
+                    </var>
+                </var>
+            </var>
+        </var>
         <!-- end -->
 
         <var name="product_small_image_sidebar_size">100</var>  <!-- Override for small product image -->
diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index 3221b201c99..fb294bbbd0e 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -36,12 +36,7 @@ class View extends \Magento\Framework\Config\AbstractXml
             switch ($childNode->tagName) {
                 case 'vars':
                     $moduleName = $childNode->getAttribute('module');
-                    /** @var $varNode \DOMElement */
-                    foreach ($childNode->getElementsByTagName('var') as $varNode) {
-                        $varName = $varNode->getAttribute('name');
-                        $varValue = $varNode->nodeValue;
-                        $result[$childNode->tagName][$moduleName][$varName] = $varValue;
-                    }
+                    $result[$childNode->tagName][$moduleName] = $this->parseVarElement($childNode);
                     break;
                 case 'images':
                     $moduleName = $childNode->getAttribute('module');
@@ -70,6 +65,24 @@ class View extends \Magento\Framework\Config\AbstractXml
         return $result;
     }
 
+    /**
+     * @param \DOMElement $node
+     * @return string|[]
+     */
+    protected function parseVarElement(\DOMElement $node)
+    {
+        if ($node->getElementsByTagName('var')->length) {
+            $result = [];
+            foreach ($node->getElementsByTagName('var') as $varNode) {
+                $varName = $varNode->getAttribute('name');
+                $result[$varName] = $this->parseVarElement($varNode);
+            }
+        } else {
+            $result = $node->nodeValue;
+        }
+        return $result;
+    }
+
     /**
      * Get a list of variables in scope of specified module
      *
@@ -88,11 +101,19 @@ class View extends \Magento\Framework\Config\AbstractXml
      *
      * @param string $module
      * @param string $var
-     * @return string|false
+     * @return string|false|array
      */
     public function getVarValue($module, $var)
     {
-        return isset($this->_data['vars'][$module][$var]) ? $this->_data['vars'][$module][$var] : false;
+        $value = $this->_data['vars'][$module];
+        foreach (explode('/', $var) as $node) {
+            if (is_array($value) && isset($value[$node])) {
+                $value = $value[$node];
+            } else {
+                return false;
+            }
+        }
+        return $value;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Config/etc/view.xsd b/lib/internal/Magento/Framework/Config/etc/view.xsd
index a9fb9593b25..0f6c53c1cc3 100644
--- a/lib/internal/Magento/Framework/Config/etc/view.xsd
+++ b/lib/internal/Magento/Framework/Config/etc/view.xsd
@@ -12,15 +12,7 @@
                 <xs:element name="vars" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
-                            <xs:element name="var" maxOccurs="unbounded">
-                                <xs:complexType>
-                                    <xs:simpleContent>
-                                        <xs:extension base="xs:string">
-                                            <xs:attribute name="name" type="xs:string" use="required"/>
-                                        </xs:extension>
-                                    </xs:simpleContent>
-                                </xs:complexType>
-                            </xs:element>
+                            <xs:element name="var" type="varType" maxOccurs="unbounded"/>
                         </xs:sequence>
                         <xs:attribute name="module" type="xs:string" use="required"/>
                     </xs:complexType>
@@ -38,6 +30,13 @@
             <xs:field xpath="@module"/>
         </xs:unique>
     </xs:element>
+    <xs:complexType name="varType" mixed="true">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="var" type="varType"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:string" use="required"/>
+        <xs:attribute name="value" type="xs:string"/>
+    </xs:complexType>
     <xs:complexType name="imagesType">
         <xs:sequence>
             <xs:element name="image" maxOccurs="unbounded">
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9f81daba85b..e81d584239e 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -7,93 +7,47 @@ define([
     'fotorama/fotorama',
     'underscore',
     'matchMedia',
-    'text!mage/gallery/gallery.html',
-    'Magento_Ui/js/lib/class'
-], function ($, fotorama, _, mediaCheck, template, Class) {
+    'text!mage/gallery/gallery.html'
+], function ($, fotorama, _, mediaCheck, template) {
     'use strict';
 
-    return Class.extend({
+    return function (config, element) {
 
-        defaults: {
-            settings: {},
-            config: {},
-            startConfig: {}
-        },
+        var triggeredBreakpoints = 0,
+            settings = {},
+            isTouchEnabled,
+            initGallery,
+            setupBreakpoints,
+            initApi,
+            initConfig = {};
 
-        /**
-         * Checks if device has touch interface.
-         * @return {Boolean} The result of searching touch events on device.
-         */
-        isTouchEnabled: (function () {
-            return 'ontouchstart' in document.documentElement;
-        })(),
-
-        /**
-         * Initializes gallery.
-         * @param {Object} config - Gallery configuration.
-         * @param {String} element - String selector of gallery DOM element.
-         */
-        initialize: function (config, element) {
-            this._super();
-
-            this.config = config;
-
-            this.settings = {
-                $element: $(element),
-                currentConfig: config,
-                defaultConfig: _.clone(config),
-                fullscreenConfig: _.clone(config.fullscreen),
-                breakpoints: config.breakpoints,
-                activeBreakpoint: {},
-                fotoramaApi: null,
-                isFullscreen: false,
-                api: null
-            };
+        config.options.ratio = config.options.width / config.options.height;
+        config.options.height = null;
 
-            config.options.ratio = config.options.width / config.options.height;
-            config.options.height = null;
-            config.options.allowfullscreen = false;
+        settings = {
+            $element: $(element),
+            currentConfig: config.options,
+            defaultConfig: config.options,
+            breakpoints: config.breakpoints,
+            fotoramaApi: null,
+            api: null
+        };
 
-            $.extend(true, this.startConfig, config);
-
-            this.initGallery();
-            this.initApi();
-            this.setupBreakpoints();
-            this.initFullscreenSettings();
-        },
+        $.extend(true, initConfig, config);
 
         /**
-         * Gallery fullscreen settings.
+         * Checks if device has touch interface.
+         * @return {Boolean} The result of searching touch events on device.
          */
-        initFullscreenSettings: function () {
-            var settings = this.settings;
-            settings.$element.on('fotorama:fullscreenenter', function () {
-                settings.api.updateOptions(settings.defaultConfig.options, true);
-                settings.api.updateOptions(settings.fullscreenConfig, true);
-
-                if (!_.isEqual(settings.activeBreakpoint, {})) {
-                    settings.api.updateOptions(settings.activeBreakpoint.options, true);
-                }
-                settings.isFullscreen = true;
-            });
-
-            settings.$element.on('fotorama:fullscreenexit', function () {
-                settings.api.updateOptions(settings.defaultConfig.options, true);
-
-                if (!_.isEqual(settings.activeBreakpoint, {})) {
-                    settings.api.updateOptions(settings.activeBreakpoint.options, true);
-                }
-                settings.isFullscreen = false;
-            });
-        },
+        isTouchEnabled = (function () {
+            return 'ontouchstart' in document.documentElement;
+        })();
 
         /**
          * Initializes gallery with configuration options.
          */
-        initGallery: function () {
+        initGallery = function () {
             var breakpoints = {},
-                settings = this.settings,
-                config = this.config,
                 mainImage;
 
             if (settings.breakpoints) {
@@ -111,7 +65,7 @@ define([
             _.extend(config, config.options);
             config.options = undefined;
 
-            if (this.isTouchEnabled) {
+            if (isTouchEnabled) {
                 config.arrows = false;
             }
 
@@ -126,26 +80,25 @@ define([
             config.breakpoints = null;
             config.startindex = mainImage;
             settings.currentConfig = config;
+            $.extend(true, settings.defaultConfig, config);
             settings.$element.html(template);
             settings.$element = $(settings.$element.children()[0]);
             settings.$element.fotorama(config);
             settings.fotoramaApi = settings.$element.data('fotorama');
-            $.extend(true, config, this.startConfig);
-        },
+            $.extend(true, config, initConfig);
+        };
 
         /**
          * Creates breakpoints for gallery.
+         * @param {Object} breakpoints - Object with keys as media queries and values as configurations.
          */
-        setupBreakpoints: function () {
-            var pairs,
-                settings = this.settings,
-                config = this.config,
-                startConfig = this.startConfig,
-                triggeredBreakpoints = 0;
-
-            if (_.isObject(settings.breakpoints)) {
-                pairs = _.pairs(settings.breakpoints);
+        setupBreakpoints = function (breakpoints) {
+            var pairs;
+
+            if (_.isObject(breakpoints)) {
+                pairs = _.pairs(breakpoints);
                 _.each(pairs, function (pair) {
+                    var initialized = 0;
                     mediaCheck({
                         media: pair[0],
 
@@ -154,139 +107,154 @@ define([
                          */
                         entry: function () {
                             triggeredBreakpoints++;
-                            $.extend(true, config, _.clone(startConfig));
+                            initialized = initialized < pairs.length ? initialized++ : initialized;
+                            settings.api.updateOptions(settings.defaultConfig, true);
+                            $.extend(true, config, initConfig);
 
                             settings.api.updateOptions(settings.defaultConfig.options, true);
+                            settings.currentConfig = settings.breakpoints[pair[0]];
+                            settings.api.updateOptions(settings.currentConfig.options, true);
 
-                            if (settings.isFullscreen) {
-                                settings.api.updateOptions(settings.fullscreenConfig, true);
-                            }
-                            settings.api.updateOptions(settings.breakpoints[pair[0]].options, true);
-                            $.extend(true, config, settings.breakpoints[pair[0]]);
-                            settings.activeBreakpoint = settings.breakpoints[pair[0]];
+                            $.extend(true, config, settings.currentConfig);
+                            settings.$element.trigger('gallery:updated', $('.fotorama-item').data('fotorama'));
                         },
 
                         /**
                          * Is triggered when breakpoint exits.
                          */
                         exit: function () {
-                            if (triggeredBreakpoints < 1) {
-                                $.extend(true, config, _.clone(startConfig));
-                                settings.api.updateOptions(settings.defaultConfig.options, true);
-
-                                if (settings.isFullscreen) {
-                                    settings.api.updateOptions(settings.fullscreenConfig, true);
-                                }
-                                settings.activeBreakpoint = {};
+                            triggeredBreakpoints = triggeredBreakpoints > 0 ? triggeredBreakpoints-- : 0;
+                            initialized = initialized < pairs.length ? initialized++ : initialized;
+
+                            if (!triggeredBreakpoints && initialized === pairs.length) {
+                                settings.currentConfig = settings.defaultConfig;
+                                settings.api.updateOptions(settings.currentConfig.options, true);
+                                $.extend(true, config, initConfig);
+                                settings.$element.trigger('gallery:updated', settings.fotoramaApi);
                             }
-                            triggeredBreakpoints--;
                         }
                     });
                 });
             }
-        },
+        };
 
         /**
          * Creates gallery's API.
          */
-        initApi: function () {
-            var settings = this.settings,
-                config = this.config,
-                api = {
-
-                    /**
-                     * Contains fotorama's API methods.
-                     */
-                    fotorama: settings.fotoramaApi,
-
-                    /**
-                     * Displays the last image on preview.
-                     */
-                    last: function () {
-                        this.fotorama.show('>>');
-                    },
-
-                    /**
-                     * Displays the first image on preview.
-                     */
-                    first: function () {
-                        this.fotorama.show('<<');
-                    },
-
-                    /**
-                     * Displays previous element on preview.
-                     */
-                    prev: function () {
-                        this.fotorama.show('<');
-                    },
-
-                    /**
-                     * Displays next element on preview.
-                     */
-                    next: function () {
-                        this.fotorama.show('>');
-                    },
-
-                    /**
-                     * Displays image with appropriate count number on preview.
-                     * @param {Number} index - Number of image that should be displayed.
-                     */
-                    seek: function (index) {
-                        if (_.isNumber(index) && index !== 0) {
-
-                            if (index > 0) {
-                                index -= 1;
-                            }
-                            this.fotorama.show(index);
+        initApi = function () {
+            var api = {
+
+                /**
+                 * Contains fotorama's API methods.
+                 */
+                fotorama: settings.fotoramaApi,
+
+                /**
+                 * Displays the last image on preview.
+                 */
+                last: function () {
+                    this.fotorama.show('>>');
+                },
+
+                /**
+                 * Displays the first image on preview.
+                 */
+                first: function () {
+                    this.fotorama.show('<<');
+                },
+
+                /**
+                 * Displays previous element on preview.
+                 */
+                prev: function () {
+                    this.fotorama.show('<');
+                },
+
+                /**
+                 * Displays next element on preview.
+                 */
+                next: function () {
+                    this.fotorama.show('>');
+                },
+
+                /**
+                 * Displays image with appropriate count number on preview.
+                 * @param {Number} index - Number of image that should be displayed.
+                 */
+                seek: function (index) {
+
+                    if (_.isNumber(index) && index !== 0) {
+
+                        if (index > 0) {
+                            index -= 1;
                         }
-                    },
-
-                    /**
-                     * Updates gallery with new set of options.
-                     * @param {Object} configuration - Standart gallery configuration object.
-                     * @param {Boolean} isInternal - Is this function called via breakpoints.
-                     */
-                    updateOptions: function (configuration, isInternal) {
-                        if (_.isObject(configuration)) {
-                            if (this.isTouchEnabled) {
-                                configuration.arrows = false;
-                            }
-                            configuration.click = false;
-                            configuration.breakpoints = null;
+                        this.fotorama.show(index);
+                    }
+                },
 
-                            if (!isInternal) {
-                                !_.isEqual(settings.activeBreakpoint, {}) ?
-                                    $.extend(true, settings.activeBreakpoint.options, configuration) :
+                /**
+                 * Updates gallery with new set of options.
+                 * @param {Object} configuration - Standart gallery configuration object.
+                 * @param {Boolean} isInternal - Is this function called via breakpoints.
+                 */
+                updateOptions: function (configuration, isInternal) {
 
-                                    settings.isFullscreen ?
-                                        $.extend(true, settings.fullscreenConfig, configuration) :
-                                        $.extend(true, settings.defaultConfig.options, configuration);
+                    if (_.isObject(configuration)) {
 
-                            }
-                            $.extend(true, settings.currentConfig.options, configuration);
-                            this.fotorama.setOptions(settings.currentConfig.options);
+                        if (isTouchEnabled) {
+                            configuration.arrows = false;
                         }
-                    },
-
-                    /**
-                     * Updates gallery with specific set of items.
-                     * @param {Array.<Object>} data - Set of gallery items to update.
-                     */
-                    updateData: function (data) {
-                        if (_.isArray(data)) {
-                            this.fotorama.load(data);
-                            $.extend(false, settings.defaultConfig, {
-                                data: data
-                            });
-                            $.extend(false, config, {
-                                data: data
-                            });
+                        configuration.click = false;
+                        setupBreakpoints(configuration.breakpoints);
+                        configuration.breakpoints = null;
+
+                        if (!isInternal) {
+                            $.extend(true, settings.currentConfig.options, configuration);
                         }
+                        this.fotorama.setOptions(settings.currentConfig.options);
                     }
-                };
+                },
+
+                /**
+                 * Updates gallery with specific set of items.
+                 * @param {Array.<Object>} data - Set of gallery items to update.
+                 */
+                updateData: function (data) {
+
+                    if (_.isArray(data)) {
+                        this.fotorama.load(data);
+                        $.extend(false, settings.defaultConfig, {
+                            data: data
+                        });
+                        $.extend(false, config, {
+                            data: data
+                        });
+                    }
+                },
+
+                /**Returns current images list
+                 *
+                 * @returns {*}
+                 */
+                returnCurrentImages: function () {
+                    var images = [];
+
+                    _.forEach(this.fotorama.data, function (item) {
+                        images.push({
+                            'img': item.img
+                        })
+                    });
+
+                    return images;
+                }
+            };
             settings.$element.data('gallery', api);
             settings.api = settings.$element.data('gallery');
             settings.$element.trigger('gallery:loaded');
-        }
-    });
+        };
+
+        initGallery();
+        initApi();
+        setupBreakpoints(settings.breakpoints);
+    };
 });
-- 
GitLab


From c09c01cc773ecaf566eacc2c333783ccb6a8cb6c Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Wed, 9 Sep 2015 18:13:26 +0300
Subject: [PATCH 039/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Move range filters creation
---
 .../view/base/ui_component/etc/definition.xml |   2 +-
 .../view/base/web/js/grid/editing/record.js   |   9 +-
 .../view/base/web/js/grid/filters/filters.js  | 160 +++++++++---------
 .../Ui/view/base/web/js/grid/filters/group.js |  37 ----
 .../Ui/view/base/web/js/grid/filters/range.js | 118 +++++++++++++
 .../Ui/view/base/web/js/grid/listing.js       |   2 +-
 .../web/templates/grid/filters/filters.html   |  17 +-
 .../module/components/_steps-wizard.less      |   4 -
 .../data-grid-header/_data-grid-pager.less    |   1 +
 .../filters/{group.test.js => range.test.js}  |   4 +-
 10 files changed, 214 insertions(+), 140 deletions(-)
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
 create mode 100644 app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
 rename dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/{group.test.js => range.test.js} (95%)

diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index 95bc732984c..1fb6abdb7a5 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -54,7 +54,7 @@
     <filterRange class="Magento\Ui\Component\Filters\Type\Range">
         <argument name="data" xsi:type="array">
             <item name="config" xsi:type="array">
-                <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/group</item>
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/range</item>
             </item>
         </argument>
     </filterRange>
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
index a6ba6aca19b..21b24b0873f 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
@@ -119,19 +119,18 @@ define([
             var fields = this.templates.fields,
                 field  = column.editor;
 
-            if (typeof field === 'object' && field.editorType) {
+            if (_.isObject(field) && field.editorType) {
                 field = utils.extend({}, fields[field.editorType], field);
-            } else if (typeof field == 'string') {
+            } else if (_.isString(field)) {
                 field = fields[field];
             }
 
             field = utils.extend({}, fields.base, field);
-            field = utils.template(field, {
+
+            return utils.template(field, {
                 record: this,
                 column: column
             }, true, true);
-
-            return field;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 9b8b0ebfabe..0025db4a190 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -65,41 +65,12 @@ define([
                         options: '${ JSON.stringify($.$data.column.options) }'
                     },
                     dateRange: {
-                        component: 'Magento_Ui/js/grid/filters/group',
-                        childDefaults: {
-                            component: 'Magento_Ui/js/form/element/date',
-                            provider: '${ $.provider }',
-                            dateFormat: 'MM/dd/YYYY',
-                            template: 'ui/grid/filters/elements/date'
-                        },
-                        children: {
-                            from: {
-                                label: 'from',
-                                dataScope: 'from'
-                            },
-                            to: {
-                                label: 'to',
-                                dataScope: 'to'
-                            }
-                        }
+                        component: 'Magento_Ui/js/grid/filters/range',
+                        rangeType: 'date'
                     },
                     textRange: {
-                        component: 'Magento_Ui/js/grid/filters/group',
-                        childDefaults: {
-                            component: 'Magento_Ui/js/form/element/abstract',
-                            provider: '${ $.provider }',
-                            template: 'ui/grid/filters/elements/input'
-                        },
-                        children: {
-                            from: {
-                                label: 'from',
-                                dataScope: 'from'
-                            },
-                            to: {
-                                label: 'to',
-                                dataScope: 'to'
-                            }
-                        }
+                        component: 'Magento_Ui/js/grid/filters/range',
+                        rangeType: 'text'
                     }
                 }
             },
@@ -110,7 +81,7 @@ define([
             },
             listens: {
                 active: 'updatePreviews',
-                applied: 'cancel extractActive'
+                applied: 'cancel updateActive'
             },
             links: {
                 applied: '${ $.storageConfig.path }'
@@ -136,7 +107,7 @@ define([
             this._super()
                 .initChips()
                 .cancel()
-                .extractActive();
+                .updateActive();
 
             return this;
         },
@@ -170,32 +141,43 @@ define([
         },
 
         /**
+         * Creates instance of a filter associated with the provided column.
          *
-         * @param {Object} filter
+         * @param {Column} column - Column component for which to create a filter.
          * @returns {Filters} Chainable.
          */
-        initFilter: function (filter) {
+        initFilter: function (column) {
+            var index = column.index,
+                filter;
+
+            if (!column.filter || this.getFilter(index)) {
+                return this;
+            }
+
+            filter = this.buildFilter(column);
+
             layout([filter]);
 
             return this;
         },
 
         /**
-         * Called when another element was added to current component.
+         * Called when another element was added to filters collection.
          *
          * @returns {Filters} Chainable.
          */
         initElement: function () {
             this._super()
-                .extractActive();
+                .updateActive();
 
             return this;
         },
 
         /**
+         * Returns instance of a filter found by provided index.
          *
-         * @param {String} index
-         * @returns {Filter|Undefined}
+         * @param {String} index - Index of a filter (e.g. 'title').
+         * @returns {Filter}
          */
         getFilter: function (index) {
             return this.elems.findWhere({
@@ -204,11 +186,32 @@ define([
         },
 
         /**
-         * Clears filters data.
+         * Returns an array of range filters.
          *
-         * @param {Object} [filter] - If provided, then only specified filter will be cleared.
-         *      Otherwise, clears all data.
+         * @returns {Array}
+         */
+        getRanges: function () {
+            return this.elems.filter(function (filter) {
+                return filter.isRange;
+            });
+        },
+
+        /**
+         * Returns an array of non-range filters.
          *
+         * @returns {Array}
+         */
+        getPlain: function () {
+            return this.elems.filter(function (filter) {
+                return !filter.isRange;
+            });
+        },
+
+        /**
+         * Clears filters data.
+         *
+         * @param {Object} [filter] - If provided, then only specified
+         *      filter will be cleared. Otherwise, clears all data.
          * @returns {Filters} Chainable.
          */
         clear: function (filter) {
@@ -244,60 +247,59 @@ define([
         },
 
         /**
+         * Sets provided data to filter components (without applying it).
          *
-         * @param {Column} column
-         * @returns {Object}
+         * @param {Object} data - Filters data.
+         * @param {Boolean} [partial=false] - Flag that defines whether
+         *      to completely replace current filters data or to extend it.
+         * @returns {Filters} Chainable.
          */
-        buildFilter: function (column) {
-            var filters = this.templates.filters,
-                filter  = column.filter;
+        setData: function (data, partial) {
+            var filters = partial ? this.filters : {};
 
-            if (_.isObject(filter) && filter.filterType) {
-                filter = utils.extend({}, filters[filter.filterType], filter);
-            } else if (_.isString(filter)) {
-                filter = filters[filter];
-            }
+            data = utils.extend({}, filters, data);
 
-            filter = utils.extend({}, filters.base, filter);
-            filter = utils.template(filter, {
-                filters: this,
-                column: column
-            }, true, true);
+            this.set('filters', data);
 
-            return filter;
+            return this;
         },
 
         /**
+         * Creates filter component configuration associated with the provided column.
          *
-         * @param {Column} column
-         * @returns {Filters} Chainable
+         * @param {Column} column - Column component whith a basic filter declaration.
+         * @returns {Object} Filters' configuration.
          */
-        createFilter: function (column) {
-            var index = column.index,
-                filter;
+        buildFilter: function (column) {
+            var filters = this.templates.filters,
+                filter  = column.filter,
+                type    = filters[filter.filterType];
 
-            if (!column.filter || this.getFilter(index)) {
-                return this;
+            if (_.isObject(filter) && type) {
+                filter = utils.extend({}, type, filter);
+            } else if (_.isString(filter)) {
+                filter = filters[filter];
             }
 
-            filter = this.buildFilter(column);
-
-            this.initFilter(filter);
+            filter = utils.extend({}, filters.base, filter);
 
-            return this;
+            return utils.template(filter, {
+                filters: this,
+                column: column
+            }, true, true);
         },
 
         /**
+         * Sorts filters by associated columns positions.
          *
          * @returns {Filters} Chainable
          */
-        updateFilters: function () {
+        resortByColumns: function () {
             var columns = this.columns().elems(),
-                filters = [],
-                filter;
+                filters = [];
 
             columns.forEach(function (column) {
-                filter = this.getFilter(column.index);
+                var filter = this.getFilter(column.index);
 
                 if (filter) {
                     filters.push(filter);
@@ -353,7 +355,7 @@ define([
          *
          * @returns {Filters} Chainable.
          */
-        extractActive: function () {
+        updateActive: function () {
             this.active(this.elems.filter('hasData'));
 
             return this;
@@ -374,12 +376,14 @@ define([
         },
 
         /**
+         * Listener of the columns provider children array changes.
          *
+         * @param {Array} columns - Current columns list.
          */
         onColumnsUpdate: function (columns) {
-            columns.forEach(this.createFilter, this);
+            columns.forEach(this.initFilter, this);
 
-            this.updateFilters();
+            this.resortByColumns();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
deleted file mode 100644
index 405436d7353..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'underscore',
-    'Magento_Ui/js/form/components/group'
-], function (_, Group) {
-    'use strict';
-
-    return Group.extend({
-        defaults: {
-            template: 'ui/grid/filters/elements/group',
-            isGroup: true
-        },
-
-        reset: function () {
-            this.elems.each('reset');
-
-            return this;
-        },
-
-        clear: function () {
-            this.elems.each('clear');
-
-            return this;
-        },
-
-        hasData: function () {
-            return this.elems.some('hasData');
-        },
-
-        getPreview: function () {
-            return this.elems.map('getPreview');
-        }
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
new file mode 100644
index 00000000000..1c9c04705b0
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
@@ -0,0 +1,118 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'underscore',
+    'uiLayout',
+    'mageUtils',
+    'Magento_Ui/js/form/components/group'
+], function (_, layout, utils, Group) {
+    'use strict';
+
+    return Group.extend({
+        defaults: {
+            template: 'ui/grid/filters/elements/group',
+            isRange: true,
+            templates: {
+                base: {
+                    parent: '${ $.$data.group.name }',
+                    provider: '${ $.$data.group.provider }'
+                },
+                date: {
+                    component: 'Magento_Ui/js/form/element/date',
+                    template: 'ui/grid/filters/elements/date',
+                    dateFormat: 'MM/dd/YYYY'
+                },
+                text: {
+                    component: 'Magento_Ui/js/form/element/abstract',
+                    template: 'ui/grid/filters/elements/input'
+                },
+                ranges: {
+                    from: {
+                        label: 'from',
+                        dataScope: 'from'
+                    },
+                    to: {
+                        label: 'to',
+                        dataScope: 'to'
+                    }
+                }
+            }
+        },
+
+        /**
+         * Initializes range component.
+         *
+         * @returns {Range} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initChildren();
+
+            return this;
+        },
+
+        /**
+         * Creates instances of child components.
+         *
+         * @returns {Range} Chainable.
+         */
+        initChildren: function () {
+            var children = this.buildChildren();
+
+            layout(children);
+
+            return this;
+        },
+
+        /**
+         * Creates configuration for the child components.
+         *
+         * @returns {Object}
+         */
+        buildChildren: function () {
+            var templates   = this.templates,
+                typeTmpl    = templates[this.rangeType],
+                tmpl        = utils.extend({}, templates.base, typeTmpl),
+                children    = {};
+
+            _.each(templates.ranges, function (range, key) {
+                children[key] = utils.extend({}, tmpl, range);
+            });
+
+            return utils.template(children, {
+                group: this
+            }, true, true);
+        },
+
+        /**
+         * Clears childrens data.
+         *
+         * @returns {Range} Chainable.
+         */
+        clear: function () {
+            this.elems.each('clear');
+
+            return this;
+        },
+
+        /**
+         * Checks if some children has data.
+         *
+         * @returns {Boolean}
+         */
+        hasData: function () {
+            return this.elems.some('hasData');
+        },
+
+        /**
+         * Returns an array of child components previews.
+         *
+         * @returns {Array}
+         */
+        getPreview: function () {
+            return this.elems.map('getPreview');
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
index 2713816a168..de3ac330d7c 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
@@ -39,7 +39,7 @@ define([
                 divsAttrParams: {
                     'data-cl-elem': 'shadow-div'
                 },
-                enabled: true
+                enabled: false
             },
             imports: {
                 rows: '${ $.provider }:data.items'
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
index e81c1fd1dbf..2fbcebdc168 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
@@ -28,18 +28,11 @@
         <legend class="admin__filters-legend">
             <span data-bind="i18n: 'Advanced filter'"></span>
         </legend>
-        <!-- ko foreach: elems -->
-            <!-- ko if: $data.isGroup -->
-            <fieldset class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data)">
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            </fieldset>
-            <!-- /ko -->
-
-            <!-- ko ifnot: $data.isGroup -->
-            <div class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data)">
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            </div>
-            <!-- /ko -->
+        <!-- ko foreach: getRanges() -->
+            <fieldset class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data), template: getTemplate()"></fieldset>
+        <!-- /ko -->
+        <!-- ko foreach: getPlain() -->
+            <div class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data), template: getTemplate()"></div>
         <!-- /ko -->
     </fieldset>
 
diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less
index d4d0f23d07a..7faca5b9d0d 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less
@@ -64,8 +64,4 @@
             margin: @indent__base 0;
         }
     }
-
-    .admin__data-grid-pager-wrap {
-        float: right;
-    }
 }
diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less
index a30087cb5a6..ec5761b7b2a 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less
@@ -17,6 +17,7 @@
 
 .admin__data-grid-pager-wrap {
     text-align: right;
+    float: right;
 }
 
 .admin__data-grid-pager {
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
similarity index 95%
rename from dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
index 59e46e213d7..29267c110c5 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
@@ -5,11 +5,11 @@
 
 define([
     'underscore',
-    'Magento_Ui/js/grid/filters/group'
+    'Magento_Ui/js/grid/filters/range'
 ], function (_, Group) {
     'use strict';
 
-    describe('ui/js/grid/filters/filters', function () {
+    describe('ui/js/grid/filters/range', function () {
         var group;
 
         beforeEach(function () {
-- 
GitLab


From 78a54c8c79e27b4e866230ab202feb5f843f6a85 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 10 Sep 2015 10:23:24 +0300
Subject: [PATCH 040/420] MAGETWO-32170: [Vanilla] Gallery Widget on
 Configurable Product

---
 lib/web/mage/gallery/gallery.js | 366 ++++++++++++++++++--------------
 1 file changed, 206 insertions(+), 160 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index e81d584239e..9f7aa62bec7 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -7,47 +7,93 @@ define([
     'fotorama/fotorama',
     'underscore',
     'matchMedia',
-    'text!mage/gallery/gallery.html'
-], function ($, fotorama, _, mediaCheck, template) {
+    'text!mage/gallery/gallery.html',
+    'Magento_Ui/js/lib/class'
+], function ($, fotorama, _, mediaCheck, template, Class) {
     'use strict';
 
-    return function (config, element) {
+    return Class.extend({
 
-        var triggeredBreakpoints = 0,
-            settings = {},
-            isTouchEnabled,
-            initGallery,
-            setupBreakpoints,
-            initApi,
-            initConfig = {};
-
-        config.options.ratio = config.options.width / config.options.height;
-        config.options.height = null;
-
-        settings = {
-            $element: $(element),
-            currentConfig: config.options,
-            defaultConfig: config.options,
-            breakpoints: config.breakpoints,
-            fotoramaApi: null,
-            api: null
-        };
-
-        $.extend(true, initConfig, config);
+        defaults: {
+            settings: {},
+            config: {},
+            startConfig: {}
+        },
 
         /**
          * Checks if device has touch interface.
          * @return {Boolean} The result of searching touch events on device.
          */
-        isTouchEnabled = (function () {
+        isTouchEnabled: (function () {
             return 'ontouchstart' in document.documentElement;
-        })();
+        })(),
+
+        /**
+         * Initializes gallery.
+         * @param {Object} config - Gallery configuration.
+         * @param {String} element - String selector of gallery DOM element.
+         */
+        initialize: function (config, element) {
+            this._super();
+
+            this.config = config;
+
+            this.settings = {
+                $element: $(element),
+                currentConfig: config,
+                defaultConfig: _.clone(config),
+                fullscreenConfig: _.clone(config.fullscreen),
+                breakpoints: config.breakpoints,
+                activeBreakpoint: {},
+                fotoramaApi: null,
+                isFullscreen: false,
+                api: null
+            };
+
+            config.options.ratio = config.options.width / config.options.height;
+            config.options.height = null;
+            config.options.allowfullscreen = false;
+
+            $.extend(true, this.startConfig, config);
+
+            this.initGallery();
+            this.initApi();
+            this.setupBreakpoints();
+            this.initFullscreenSettings();
+        },
+
+        /**
+         * Gallery fullscreen settings.
+         */
+        initFullscreenSettings: function () {
+            var settings = this.settings;
+            settings.$element.on('fotorama:fullscreenenter', function () {
+                settings.api.updateOptions(settings.defaultConfig.options, true);
+                settings.api.updateOptions(settings.fullscreenConfig, true);
+
+                if (!_.isEqual(settings.activeBreakpoint, {})) {
+                    settings.api.updateOptions(settings.activeBreakpoint.options, true);
+                }
+                settings.isFullscreen = true;
+            });
+
+            settings.$element.on('fotorama:fullscreenexit', function () {
+                settings.api.updateOptions(settings.defaultConfig.options, true);
+
+                if (!_.isEqual(settings.activeBreakpoint, {})) {
+                    settings.api.updateOptions(settings.activeBreakpoint.options, true);
+                }
+                settings.isFullscreen = false;
+            });
+        },
 
         /**
          * Initializes gallery with configuration options.
          */
-        initGallery = function () {
+        initGallery: function () {
             var breakpoints = {},
+                settings = this.settings,
+                config = this.config,
                 mainImage;
 
             if (settings.breakpoints) {
@@ -55,7 +101,7 @@ define([
                     var conditions;
                     _.each(_.pairs(breakpoint.conditions), function (pair) {
                         conditions = conditions ? conditions + ' and (' + pair[0] + ': ' + pair[1] + ')' :
-                            '(' + pair[0] + ': ' + pair[1] + ')';
+                        '(' + pair[0] + ': ' + pair[1] + ')';
                     });
                     breakpoints[conditions] = breakpoint.options;
                 });
@@ -65,7 +111,7 @@ define([
             _.extend(config, config.options);
             config.options = undefined;
 
-            if (isTouchEnabled) {
+            if (this.isTouchEnabled) {
                 config.arrows = false;
             }
 
@@ -80,25 +126,26 @@ define([
             config.breakpoints = null;
             config.startindex = mainImage;
             settings.currentConfig = config;
-            $.extend(true, settings.defaultConfig, config);
             settings.$element.html(template);
             settings.$element = $(settings.$element.children()[0]);
             settings.$element.fotorama(config);
             settings.fotoramaApi = settings.$element.data('fotorama');
-            $.extend(true, config, initConfig);
-        };
+            $.extend(true, config, this.startConfig);
+        },
 
         /**
          * Creates breakpoints for gallery.
-         * @param {Object} breakpoints - Object with keys as media queries and values as configurations.
          */
-        setupBreakpoints = function (breakpoints) {
-            var pairs;
-
-            if (_.isObject(breakpoints)) {
-                pairs = _.pairs(breakpoints);
+        setupBreakpoints: function () {
+            var pairs,
+                settings = this.settings,
+                config = this.config,
+                startConfig = this.startConfig,
+                triggeredBreakpoints = 0;
+
+            if (_.isObject(settings.breakpoints)) {
+                pairs = _.pairs(settings.breakpoints);
                 _.each(pairs, function (pair) {
-                    var initialized = 0;
                     mediaCheck({
                         media: pair[0],
 
@@ -107,154 +154,153 @@ define([
                          */
                         entry: function () {
                             triggeredBreakpoints++;
-                            initialized = initialized < pairs.length ? initialized++ : initialized;
-                            settings.api.updateOptions(settings.defaultConfig, true);
-                            $.extend(true, config, initConfig);
+                            $.extend(true, config, _.clone(startConfig));
 
                             settings.api.updateOptions(settings.defaultConfig.options, true);
-                            settings.currentConfig = settings.breakpoints[pair[0]];
-                            settings.api.updateOptions(settings.currentConfig.options, true);
 
-                            $.extend(true, config, settings.currentConfig);
-                            settings.$element.trigger('gallery:updated', $('.fotorama-item').data('fotorama'));
+                            if (settings.isFullscreen) {
+                                settings.api.updateOptions(settings.fullscreenConfig, true);
+                            }
+                            settings.api.updateOptions(settings.breakpoints[pair[0]].options, true);
+                            $.extend(true, config, settings.breakpoints[pair[0]]);
+                            settings.activeBreakpoint = settings.breakpoints[pair[0]];
                         },
 
                         /**
                          * Is triggered when breakpoint exits.
                          */
                         exit: function () {
-                            triggeredBreakpoints = triggeredBreakpoints > 0 ? triggeredBreakpoints-- : 0;
-                            initialized = initialized < pairs.length ? initialized++ : initialized;
-
-                            if (!triggeredBreakpoints && initialized === pairs.length) {
-                                settings.currentConfig = settings.defaultConfig;
-                                settings.api.updateOptions(settings.currentConfig.options, true);
-                                $.extend(true, config, initConfig);
-                                settings.$element.trigger('gallery:updated', settings.fotoramaApi);
+                            if (triggeredBreakpoints < 1) {
+                                $.extend(true, config, _.clone(startConfig));
+                                settings.api.updateOptions(settings.defaultConfig.options, true);
+
+                                if (settings.isFullscreen) {
+                                    settings.api.updateOptions(settings.fullscreenConfig, true);
+                                }
+                                settings.activeBreakpoint = {};
                             }
+                            triggeredBreakpoints--;
                         }
                     });
                 });
             }
-        };
+        },
 
         /**
          * Creates gallery's API.
          */
-        initApi = function () {
-            var api = {
-
-                /**
-                 * Contains fotorama's API methods.
-                 */
-                fotorama: settings.fotoramaApi,
-
-                /**
-                 * Displays the last image on preview.
-                 */
-                last: function () {
-                    this.fotorama.show('>>');
-                },
-
-                /**
-                 * Displays the first image on preview.
-                 */
-                first: function () {
-                    this.fotorama.show('<<');
-                },
-
-                /**
-                 * Displays previous element on preview.
-                 */
-                prev: function () {
-                    this.fotorama.show('<');
-                },
-
-                /**
-                 * Displays next element on preview.
-                 */
-                next: function () {
-                    this.fotorama.show('>');
-                },
-
-                /**
-                 * Displays image with appropriate count number on preview.
-                 * @param {Number} index - Number of image that should be displayed.
-                 */
-                seek: function (index) {
-
-                    if (_.isNumber(index) && index !== 0) {
-
-                        if (index > 0) {
-                            index -= 1;
+        initApi: function () {
+            var settings = this.settings,
+                config = this.config,
+                api = {
+
+                    /**
+                     * Contains fotorama's API methods.
+                     */
+                    fotorama: settings.fotoramaApi,
+
+                    /**
+                     * Displays the last image on preview.
+                     */
+                    last: function () {
+                        this.fotorama.show('>>');
+                    },
+
+                    /**
+                     * Displays the first image on preview.
+                     */
+                    first: function () {
+                        this.fotorama.show('<<');
+                    },
+
+                    /**
+                     * Displays previous element on preview.
+                     */
+                    prev: function () {
+                        this.fotorama.show('<');
+                    },
+
+                    /**
+                     * Displays next element on preview.
+                     */
+                    next: function () {
+                        this.fotorama.show('>');
+                    },
+
+                    /**
+                     * Displays image with appropriate count number on preview.
+                     * @param {Number} index - Number of image that should be displayed.
+                     */
+                    seek: function (index) {
+                        if (_.isNumber(index) && index !== 0) {
+
+                            if (index > 0) {
+                                index -= 1;
+                            }
+                            this.fotorama.show(index);
                         }
-                        this.fotorama.show(index);
-                    }
-                },
-
-                /**
-                 * Updates gallery with new set of options.
-                 * @param {Object} configuration - Standart gallery configuration object.
-                 * @param {Boolean} isInternal - Is this function called via breakpoints.
-                 */
-                updateOptions: function (configuration, isInternal) {
+                    },
+
+                    /**
+                     * Updates gallery with new set of options.
+                     * @param {Object} configuration - Standart gallery configuration object.
+                     * @param {Boolean} isInternal - Is this function called via breakpoints.
+                     */
+                    updateOptions: function (configuration, isInternal) {
+                        if (_.isObject(configuration)) {
+                            if (this.isTouchEnabled) {
+                                configuration.arrows = false;
+                            }
+                            configuration.click = false;
+                            configuration.breakpoints = null;
 
-                    if (_.isObject(configuration)) {
+                            if (!isInternal) {
+                                !_.isEqual(settings.activeBreakpoint, {}) ?
+                                    $.extend(true, settings.activeBreakpoint.options, configuration) :
 
-                        if (isTouchEnabled) {
-                            configuration.arrows = false;
-                        }
-                        configuration.click = false;
-                        setupBreakpoints(configuration.breakpoints);
-                        configuration.breakpoints = null;
+                                    settings.isFullscreen ?
+                                        $.extend(true, settings.fullscreenConfig, configuration) :
+                                        $.extend(true, settings.defaultConfig.options, configuration);
 
-                        if (!isInternal) {
+                            }
                             $.extend(true, settings.currentConfig.options, configuration);
+                            this.fotorama.setOptions(settings.currentConfig.options);
                         }
-                        this.fotorama.setOptions(settings.currentConfig.options);
-                    }
-                },
-
-                /**
-                 * Updates gallery with specific set of items.
-                 * @param {Array.<Object>} data - Set of gallery items to update.
-                 */
-                updateData: function (data) {
-
-                    if (_.isArray(data)) {
-                        this.fotorama.load(data);
-                        $.extend(false, settings.defaultConfig, {
-                            data: data
-                        });
-                        $.extend(false, config, {
-                            data: data
+                    },
+
+                    /**
+                     * Updates gallery with specific set of items.
+                     * @param {Array.<Object>} data - Set of gallery items to update.
+                     */
+                    updateData: function (data) {
+                        if (_.isArray(data)) {
+                            this.fotorama.load(data);
+                            $.extend(false, settings.defaultConfig, {
+                                data: data
+                            });
+                            $.extend(false, config, {
+                                data: data
+                            });
+                        }
+                    },
+
+                    /**Returns curent images list
+                     *
+                     * @return {Array}
+                     */
+                    returnCurrentImages: function () {
+                        var images = [];
+
+                        _.forEach(this.fotorama.data, function (item) {
+                            images.push({
+                                'img': item.img
+                            })
                         });
                     }
-                },
-
-                /**Returns current images list
-                 *
-                 * @returns {*}
-                 */
-                returnCurrentImages: function () {
-                    var images = [];
-
-                    _.forEach(this.fotorama.data, function (item) {
-                        images.push({
-                            'img': item.img
-                        })
-                    });
-
-                    return images;
-                }
-            };
+                };
             settings.$element.data('gallery', api);
             settings.api = settings.$element.data('gallery');
             settings.$element.trigger('gallery:loaded');
-        };
-
-        initGallery();
-        initApi();
-        setupBreakpoints(settings.breakpoints);
-    };
+        }
+    });
 });
-- 
GitLab


From b2596432abff86ef4a8a5996324670564710d689 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Thu, 10 Sep 2015 16:38:25 +0300
Subject: [PATCH 041/420] MAGETWO-3592: PHP - CMS - Apply Multi Select in
 Filters

---
 .../ui_component/cms_block_listing.xml        |  2 +-
 .../ui_component/cms_page_listing.xml         |  2 +-
 .../ui_component/customer_listing.xml         |  2 +-
 .../Magento/Ui/Component/Listing/Columns.php  | 20 +------------------
 4 files changed, 4 insertions(+), 22 deletions(-)

diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index ecc4c44b7ce..5722a3fbf72 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -163,7 +163,7 @@
                     <item name="enabled" xsi:type="boolean">true</item>
                     <item name="indexField" xsi:type="string">block_id</item>
                     <item name="clientConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="string">cms/block/inlineEdit</item>
+                        <item name="saveUrl" xsi:type="url" path="cms/block/inlineEdit"/>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index 88f61af9da3..9421069dd62 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -181,7 +181,7 @@
                     <item name="enabled" xsi:type="boolean">true</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                     <item name="clientConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="string">cms/page/inlineEdit</item>
+                        <item name="saveUrl" xsi:type="url" path="cms/page/inlineEdit"/>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index 660ba38c3c4..c467751948f 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -200,7 +200,7 @@
                     <item name="enabled" xsi:type="boolean">true</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="clientConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="string">customer/index/inlineEdit</item>
+                        <item name="saveUrl" xsi:type="url" path="customer/index/inlineEdit"/>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
diff --git a/app/code/Magento/Ui/Component/Listing/Columns.php b/app/code/Magento/Ui/Component/Listing/Columns.php
index b0f3142b920..29eaf63f6ba 100644
--- a/app/code/Magento/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Ui/Component/Listing/Columns.php
@@ -44,25 +44,7 @@ class Columns extends AbstractComponent
                 }
             }
         }
-        $this->buildUrlsForInlineEditing();
-        parent::prepare();
-    }
 
-    /**
-     * Build urls for inline editing
-     *
-     * @return void
-     */
-    protected function buildUrlsForInlineEditing()
-    {
-        $config = $this->getConfiguration();
-        if (isset($config['editorConfig']) && isset($config['editorConfig']['clientConfig'])) {
-            foreach ($config['editorConfig']['clientConfig'] as $key => &$value) {
-                if (in_array($key, ['saveUrl', 'validateUrl'])) {
-                    $value = $this->getContext()->getUrl($value);
-                }
-            }
-        }
-        $this->setData('config', $config);
+        parent::prepare();
     }
 }
-- 
GitLab


From 5d1ac7fc6a7072511dd0617d267279156741a97f Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Thu, 10 Sep 2015 17:28:02 +0300
Subject: [PATCH 042/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../web/catalog/product-attributes.js         | 111 +++++++++---------
 .../product/attribute/new/created.phtml       |   2 +-
 2 files changed, 55 insertions(+), 58 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
index f4624937f02..06df40c13a8 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
@@ -4,8 +4,9 @@
  */
 define([
     'jquery',
+    'underscore',
     'jquery/ui'
-], function ($) {
+], function ($, _) {
     'use strict';
 
     $.widget('mage.productAttributes', {
@@ -15,74 +16,70 @@ define([
             });
         },
 
-        _prepareUrl: function () {
-            var name = $('[data-role=product-attribute-search]').val();
+        _initModal: function() {
+            var self = this;
 
-            return this.options.url +
-                (/\?/.test(this.options.url) ? '&' : '?') +
-                'set=' + $('#attribute_set_id').val() +
-                '&attribute[frontend_label]=' +
-                window.encodeURIComponent(name);
-        },
-
-        _showPopup: function (event) {
-            var wrapper,
-                iframe;
-
-            wrapper = $('<div id="create_new_attribute"/>').appendTo('body').dialog({
-                // ToDo: refactor to a sliding panel
+            this.modal = $('<div id="create_new_attribute"/>').modal({
                 title: 'New Attribute',
-                width: '75%',
-                minHeight: 650,
-                modal: true,
-                resizable: false,
-                resizeStop: function () {
-                    iframe.height($(this).outerHeight() + 'px');
-                    iframe.width($(this).outerWidth() + 'px');
+                modalClass: 'AAAAA',
+                type: 'slide',
+                buttons: [],
+                opened: function () {
+                    self.iframe = $('<iframe id="create_new_attribute_container">').attr({
+                        src: self._prepareUrl(event),
+                        frameborder: 0
+                    });
+                    self.modal.append(self.iframe);
+                    self._changeIframeSize();
+                    $(window).off().on('resize', _.debounce(self._changeIframeSize.bind(self), 400));
                 },
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+                closed: function () {
+                    var doc = self.iframe.get(0).document;
 
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-                },
-                close: function () {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+                    if (doc && $.isFunction(doc.execCommand)) {
+                        //IE9 break script loading but not execution on iframe removing
+                        doc.execCommand('stop');
+                        self.iframe.remove();
+                    }
+                    self.modal.data('modal').modal.remove()
                 }
             });
+        },
 
-            iframe = $('<iframe id="create_new_attribute_container">').attr({
-                src: this._prepareUrl(event),
-                frameborder: 0,
-                style: 'position:absolute;top:58px;left:0px;right:0px;bottom:0px'
-            });
+        _getHeight: function () {
+            var modal = this.modal.data('modal').modal,
+                modalHead = modal.find('header'),
+                modalHeadHeight = modalHead.outerHeight(),
+                modalHeight = modal.outerHeight(),
+                modalContentPadding = this.modal.parent().outerHeight() - this.modal.parent().height();
 
-            iframe.on('load', function () {
-                $(this).css({
-                    height: wrapper.outerHeight() + 'px',
-                    width: wrapper.outerWidth() + 'px'
-                });
-            });
+            return modalHeight - modalHeadHeight - modalContentPadding;
+        },
 
-            wrapper.append(iframe);
+        _getWidth: function () {
+            return this.modal.width();
+        },
 
-            wrapper.on('dialogclose', function () {
-                var dialog = this,
-                    doc = iframe.get(0).document;
+        _changeIframeSize: function () {
+            this.modal.parent().outerHeight(this._getHeight());
+            this.iframe.outerHeight(this._getHeight());
+            this.iframe.outerWidth(this._getWidth());
 
-                if (doc && $.isFunction(doc.execCommand)) {
-                    //IE9 break script loading but not execution on iframe removing
-                    doc.execCommand('stop');
-                    iframe.remove();
-                }
+        },
 
-                $(dialog).remove();
-            });
+        _prepareUrl: function () {
+            var name = $('[data-role=product-attribute-search]').val();
+
+            return this.options.url +
+                (/\?/.test(this.options.url) ? '&' : '?') +
+                'set=' + $('#attribute_set_id').val() +
+                '&attribute[frontend_label]=' +
+                window.encodeURIComponent(name);
+        },
+
+        _showPopup: function () {
+            this._initModal();
+            this.modal.modal('openModal');
         }
     });
 
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml
index c92d432da68..a24357f2bce 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml
@@ -15,7 +15,7 @@
     } else {
         $('[data-form=edit-product]').trigger('changeAttributeSet', set);
     }
-    $('#create_new_attribute').dialog('close');
+    $('#create_new_attribute').modal('closeModal');
 
 })(window.parent.jQuery);
 </script>
-- 
GitLab


From 049f9f4590b7ce37cc1579533bb953198f69e77a Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Thu, 10 Sep 2015 17:34:44 +0300
Subject: [PATCH 043/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../templates/catalog/wysiwyg/js.phtml        | 68 +++++++++----------
 lib/web/mage/adminhtml/browser.js             | 58 +++++++---------
 2 files changed, 56 insertions(+), 70 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
index dec1418fba3..0b66f070b51 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
@@ -5,15 +5,15 @@
  */
 
 // @codingStandardsIgnoreFile
-
 ?>
 <script>
 require([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/modal",
     "prototype",
     "mage/adminhtml/events"
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, modal){
 
 //<![CDATA[
 
@@ -21,6 +21,7 @@ Window.keepMultiModalWindow = true;
 var catalogWysiwygEditor = {
     overlayShowEffectOptions : null,
     overlayHideEffectOptions : null,
+    modal: null,
     open : function(editorUrl, elementId) {
         if (editorUrl && elementId) {
            jQuery.ajax({
@@ -32,43 +33,40 @@ var catalogWysiwygEditor = {
                 showLoader: true,
                 dataType: 'html',
                 success: function(data, textStatus, transport) {
-                    try {
-                        this.openDialogWindow(data, elementId);
-                    } catch(e) {
-                        alert(e.message);
-                    }
+                    this.openDialogWindow(data, elementId);
                 }.bind(this)
             });
         }
     },
-    openDialogWindow : function(content, elementId) {
-        this.overlayShowEffectOptions = Windows.overlayShowEffectOptions;
-        this.overlayHideEffectOptions = Windows.overlayHideEffectOptions;
-        Windows.overlayShowEffectOptions = {duration:0};
-        Windows.overlayHideEffectOptions = {duration:0};
-        tinyMCE.editors[elementId].save();
-        Dialog.confirm(content, {
-            draggable:true,
-            resizable:true,
-            closable:true,
-            className:"magento",
-            windowClassName:"popup-window",
-            title:'WYSIWYG Editor',
-            width:950,
-            height:555,
-            recenterAuto:false,
-            hideEffect:Element.hide,
-            showEffect:Element.show,
-            id:"catalog-wysiwyg-editor",
-            buttonClass:"form-button",
-            okLabel:"Submit",
-            ok: this.okDialogWindow.bind(this),
-            cancel: this.closeDialogWindow.bind(this),
-            onClose: this.closeDialogWindow.bind(this),
-            firedElementId: elementId
-        });
+    openDialogWindow : function(data, elementId) {
+        var self = this;
+
+        if (this.modal) {
+            this.modal.html(jQuery(data).html());
+        } else {
+            this.modal = jQuery(data).modal({
+                title: 'WYSIWYG Editor',
+                modalClass: 'magento',
+                type: 'slide',
+                firedElementId: elementId,
+                buttons: [{
+                    text: 'Submit',
+                    click: function () {
+                        self.okDialogWindow(this);
+                    }
+                }, {
+                    text: 'Cancel',
+                    click: function () {
+                        self.closeDialogWindow(this);
+                    }
+                }],
+                close: function () {
+                    self.closeDialogWindow(this);
+                }
+            });
+        }
+        this.modal.modal('openModal');
         $(elementId + '_editor').value = $(elementId).value;
-        content.evalScripts.bind(content).defer();
     },
     okDialogWindow : function(dialogWindow) {
         if (dialogWindow.options.firedElementId) {
@@ -104,7 +102,7 @@ var catalogWysiwygEditor = {
            tinyMCE.execCommand('mceRemoveControl', true, wysiwygObj.id);
         }
 
-        dialogWindow.close();
+        dialogWindow.closeModal();
         Windows.overlayShowEffectOptions = this.overlayShowEffectOptions;
         Windows.overlayHideEffectOptions = this.overlayHideEffectOptions;
     }
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index 2abf3a9b022..5b801e3bd20 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -6,6 +6,7 @@
 define([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/modal",
     "jquery/ui",
     "jquery/jstree/jquery.jstree",
     "mage/mage"
@@ -27,44 +28,31 @@ define([
         },
         openDialog: function(url, width, height, title, options) {
             var windowId = this.windowId,
-                content = '<div class="popup-window magento_message" id="' + windowId + '"></div>';
-            $(content).dialog($.extend({
-                autoOpen: true,
-                title: title || 'Insert File...',
-                modal: true,
-                resizable: false,
-                width: width || 1000,
-                height: height || 600,
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function() {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+                content = '<div class="popup-window magento_message" "id="' + windowId + '"></div>',
+                self = this;
 
-                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35;
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
+            if (this.modal) {
+                this.modal.html($(content).html());
+            } else {
+                this.modal = $(content).modal({
+                    title:  title || 'Insert File...',
+                    modalClass: 'magento',
+                    type: 'slide'
+                });
+            }
+            this.modal.modal('openModal');
+            $.ajax({
+                url: url,
+                type: 'get',
+                context: $(this),
+                showLoader: true
 
-                    $.ajax({
-                        url: url,
-                        type: 'get',
-                        context: $(this),
-                        showLoader: true
-                    }).done(function(data) {
-                        this.html(data).trigger('contentUpdated');
-                    });
-                },
-                close: function(event, ui) {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                    $(this).dialog('destroy');
-                    $('#' + windowId).remove();
-                }
-            }, options));
+            }).done(function(data) {
+                self.modal.html(data).trigger('contentUpdated');
+            });
         },
-        closeDialog: function(win) {
-            win = win || window;
-            win.jQuery('#' + this.windowId).dialog('close');
+        closeDialog: function() {
+            this.modal.modal('closeModal');
         }
     };
 
-- 
GitLab


From d4c9eb50f16d4dfc8af21a9345bfc7734fc74719 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Thu, 10 Sep 2015 18:12:40 +0300
Subject: [PATCH 044/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/web/js/custom-options.js   | 121 +++++++-----------
 1 file changed, 48 insertions(+), 73 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index b7a16ce3db8..ae0c4e07298 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -7,12 +7,14 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'useDefault',
     'collapsable',
     'mage/translate',
-    'mage/backend/validation'
-], function ($, mageTemplate) {
+    'mage/backend/validation',
+    'Magento_Ui/js/modal/modal'
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.customOptions', {
@@ -120,90 +122,63 @@ define([
                     var importContainer = $('#import-container'),
                         widget = this;
 
-                    importContainer.dialog({
+                    importContainer.modal({
                         title: $.mage.__('Select Product'),
-                        autoOpen: false,
-                        minWidth: 980,
-                        width: '75%',
-                        modal: true,
-                        resizable: true,
-                        position: {
-                            my: 'left top',
-                            at: 'center top',
-                            of: 'body'
-                        },
-                        create: function (event, ui) {
-                            $(document).on('click', '#productGrid_massaction-form button', function () {
-                                $('#import-custom-options-apply-button').trigger('click', 'massActionTrigger');
+                        type: 'slide',
+                        opened: function () {
+                            $(document).off().on('click', '#productGrid_massaction-form button', function () {
+                                $('.import-custom-options-apply-button').trigger('click', 'massActionTrigger');
                             });
                         },
-                        open: function () {
-                            $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                            var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 135;
-                            $(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                            $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
-                        },
-                        close: function () {
-                            $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                        },
-                        buttons: [
-                            {
-                                text: $.mage.__('Import'),
-                                id: 'import-custom-options-apply-button',
-                                'class': 'action-primary action-import',
-                                click: function (event, massActionTrigger) {
-                                    var request = [];
-                                    $(this).find('input[name=product]:checked').map(function () {
-                                        request.push(this.value);
-                                    });
-
-                                    if (request.length === 0) {
-                                        if (!massActionTrigger) {
-                                            alert($.mage.__('Please select items.'));
-                                        }
+                        buttons: [{
+                            text: $.mage.__('Import'),
+                            'class': 'action-primary action-import import-custom-options-apply-button',
+                            click: function (event, massActionTrigger) {
+                                var request = [];
+
+                                $(this.element).find('input[name=product]:checked').map(function () {
+                                    request.push(this.value);
+                                });
 
-                                        return;
+                                if (request.length === 0) {
+                                    if (!massActionTrigger) {
+                                        alert({
+                                            content: $.mage.__('Please select items.')
+                                        });
                                     }
 
-                                    $.post(widget.options.customOptionsUrl, {
-                                        'products[]': request,
-                                        form_key: widget.options.formKey
-                                    }, function ($data) {
-                                        $.parseJSON($data).each(function (el) {
-                                            el.id = widget.getFreeOptionId(el.id);
-                                            el.option_id = el.id;
-
-                                            if (typeof el.optionValues !== 'undefined') {
-                                                for (var i = 0; i < el.optionValues.length; i++) {
-                                                    el.optionValues[i].option_id = el.id;
-                                                }
+                                    return;
+                                }
+
+                                $.post(widget.options.customOptionsUrl, {
+                                    'products[]': request,
+                                    form_key: widget.options.formKey
+                                }, function ($data) {
+                                    $.parseJSON($data).each(function (el) {
+                                        el.id = widget.getFreeOptionId(el.id);
+                                        el.option_id = el.id;
+
+                                        if (typeof el.optionValues !== 'undefined') {
+                                            for (var i = 0; i < el.optionValues.length; i++) {
+                                                el.optionValues[i].option_id = el.id;
                                             }
-                                            //Adding option
-                                            widget.addOption(el);
-                                            //Will save new option on server side
-                                            $('#product_option_' + el.id + '_option_id').val(0);
-                                            $('#option_' + el.id + ' input[name$="option_type_id]"]').val(-1);
-                                        });
-                                        importContainer.dialog('close');
+                                        }
+                                        //Adding option
+                                        widget.addOption(el);
+                                        //Will save new option on server side
+                                        $('#product_option_' + el.id + '_option_id').val(0);
+                                        $('#option_' + el.id + ' input[name$="option_type_id]"]').val(-1);
                                     });
-                                }
-                            },
-                            {
-                                text: $.mage.__('Cancel'),
-                                id: 'import-custom-options-close-button',
-                                'class': 'action-close',
-                                click: function () {
-                                    $(this).dialog('close');
-                                }
-                            }]
+                                    importContainer.modal('closeModal');
+                                });
+                            }
+                        }]
                     });
                     importContainer.load(
                         this.options.productGridUrl,
                         {form_key: this.options.formKey},
                         function () {
-                            importContainer.dialog('open');
+                            importContainer.modal('openModal');
                         }
                     );
                 },
-- 
GitLab


From 5578e12c5686ea9f3561d2e347251895f794a9ad Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Thu, 10 Sep 2015 20:17:52 +0300
Subject: [PATCH 045/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../Variable/view/adminhtml/web/variables.js  | 52 ++++++-------------
 lib/web/mage/adminhtml/wysiwyg/widget.js      | 36 ++++---------
 2 files changed, 28 insertions(+), 60 deletions(-)

diff --git a/app/code/Magento/Variable/view/adminhtml/web/variables.js b/app/code/Magento/Variable/view/adminhtml/web/variables.js
index 2b71f6bc50c..20292ecdf3c 100644
--- a/app/code/Magento/Variable/view/adminhtml/web/variables.js
+++ b/app/code/Magento/Variable/view/adminhtml/web/variables.js
@@ -3,10 +3,12 @@
  * See COPYING.txt for license details.
  */
 define([
-    "jquery",
-    "jquery/ui",
-    "prototype"
-], function(jQuery){
+    'jquery',
+    'mage/translate',
+    'Magento_Ui/js/modal/modal',
+    'jquery/ui',
+    'prototype',
+], function(jQuery, $t){
 
 window.Variables = {
     textareaElementId: null,
@@ -50,43 +52,23 @@ window.Variables = {
             this.openDialogWindow(this.variablesContent);
         }
     },
-    openDialogWindow: function(variablesContent) {
+    openDialogWindow: function (variablesContent) {
         var windowId = this.dialogWindowId;
-        jQuery('body').append('<div id="' + windowId + '">'+ Variables.variablesContent +'</div>');
-        jQuery('#' + windowId).dialog({
-            autoOpen:   false,
-            title:      "Insert Variable...",
-            modal:      true,
-            resizable:  false,
-            minWidth:   500,
-            width:      '75%',
-            position: {
-                my: 'left top',
-                at: 'center top',
-                of: 'body'
-            },
-            open: function () {
-                jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-            },
-            close: function(event, ui) {
-                jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                jQuery(this).dialog('destroy');
-                jQuery('#' + windowId).remove();
+        jQuery('<div id="' + windowId + '">' + Variables.variablesContent + '</div>').modal({
+            title: $t('Insert Variable...'),
+            type: 'slide',
+            buttons: [],
+            closed: function (e, modal) {
+                modal.modal.remove();
             }
         });
 
-        jQuery('#' + windowId).dialog('open');
+        jQuery('#' + windowId).modal('openModal');
 
         variablesContent.evalScripts.bind(variablesContent).defer();
     },
-    closeDialogWindow: function(window) {
-        var windowId = this.dialogWindowId;
-        if(jQuery('#' + windowId).length){
-            jQuery('#' + windowId).dialog('close');
-        }
+    closeDialogWindow: function() {
+        jQuery('#' + this.dialogWindowId).modal('closeModal');
     },
     prepareVariableRow: function(varValue, varLabel) {
         var value = (varValue).replace(/"/g, '&quot;').replace(/'/g, '\\&#39;');
@@ -95,7 +77,7 @@ window.Variables = {
     },
     insertVariable: function(value) {
         var windowId = this.dialogWindowId;
-        jQuery('#' + windowId).dialog('close');
+        jQuery('#' + windowId).modal('closeModal');
         var textareaElm = $(this.textareaElementId);
         if (textareaElm) {
             var scrollPos = textareaElm.scrollTop;
diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index 363da71f2d9..38960d90591 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -11,7 +11,8 @@ define([
     "mage/mage",
     "mage/validation",
     "mage/adminhtml/events",
-    "prototype"
+    "prototype",
+    'Magento_Ui/js/modal/modal'
 ], function(jQuery, tinyMCE){
 
     var widgetTools = {
@@ -51,39 +52,24 @@ define([
                 return
             }
             var oThis = this;
-            this.dialogWindow = jQuery('<div/>').dialog({
-                autoOpen:   false,
-                title:      jQuery.mage.__('Insert Frontend App...'),
-                modal:      true,
-                resizable:  false,
-                width:      '75%',
-                dialogClass: 'popup-window',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
+            this.dialogWindow = jQuery('<div/>').modal({
+                title: jQuery.mage.__('Insert Frontend App...'),
+                type: 'slide',
+                buttons: [],
+                opened: function () {
                     var dialog = jQuery(this).addClass('loading magento_message')
                     new Ajax.Updater($(this), widgetUrl, {evalScripts: true, onComplete: function () {
                             dialog.removeClass('loading');
                         }
                     });
-                    jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                    jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                 },
-                close: function(event, ui) {
-                    jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                    jQuery(this).dialog('destroy').remove();
+                closed: function (e, modal) {
+                    modal.modal.remove();
                     oThis.dialogOpened = false;
                 }
             });
             this.dialogOpened = true;
-            this.dialogWindow.dialog('open');
+            this.dialogWindow.modal('openModal');
         }
     };
 
@@ -257,7 +243,7 @@ define([
                         onComplete: function(transport) {
                             try {
                                 widgetTools.onAjaxSuccess(transport);
-                                widgetTools.dialogWindow.dialog('close');
+                                widgetTools.dialogWindow.modal('closeModal');
 
                                 if (typeof(tinyMCE) != "undefined" && tinyMCE.activeEditor) {
                                     tinyMCE.activeEditor.focus();
-- 
GitLab


From 2ea12f14235c09904cc4a5f0960aa369368ddade Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 11 Sep 2015 13:21:05 +0300
Subject: [PATCH 046/420] MAGETWO-42479: Refactor all entries modal windows

---
 lib/web/mage/adminhtml/wysiwyg/widget.js | 40 ++++++------------------
 1 file changed, 10 insertions(+), 30 deletions(-)

diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index 38960d90591..ea4d602dc96 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -363,44 +363,24 @@ define([
         },
 
         openDialogWindow: function(content) {
-            this.dialogWindow = jQuery('<div/>').dialog({
-                autoOpen:   false,
-                title:      this.config.buttons.open,
-                modal:      true,
-                resizable:  false,
-                width:      '75%',
-                dialogClass: 'popup-window',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
+            this.dialogWindow = jQuery('<div/>').modal({
+                title: this.config.buttons.open,
+                type: 'slide',
+                buttons: [],
+                opened: function () {
                     jQuery(this).addClass('magento_message');
-
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() - 30;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                    jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                 },
-                close: function(event, ui) {
-                    jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                    jQuery(this).dialog('destroy').remove();
+                closed: function(e, modal) {
+                    modal.modal.remove();
+                    this.dialogWindow = null;
                 }
             });
 
-            this.dialogWindow.dialog('open').append(content);
+            this.dialogWindow.modal('openModal').append(content);
         },
 
         closeDialogWindow: function(dialogWindow) {
-            if (!dialogWindow) {
-                dialogWindow = this.dialogWindow;
-            }
-            if (dialogWindow) {
-                this.dialogWindow.dialog('destroy').remove();
-            }
-            this.dialogWindow = null;
+            dialogWindow.modal('closeModal');
         },
 
         getElementValue: function(value) {
-- 
GitLab


From 983ba8e8a350e56aef67d4bfe6cb2195a29a8ba8 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Fri, 11 Sep 2015 13:35:25 +0300
Subject: [PATCH 047/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/web/js/bundle-product.js   | 90 +++++++------------
 .../templates/catalog/wysiwyg/js.phtml        | 10 +--
 lib/web/mage/adminhtml/browser.js             |  3 +-
 3 files changed, 41 insertions(+), 62 deletions(-)

diff --git a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
index 5b6515db33f..0d9a60d6469 100644
--- a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
+++ b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
@@ -8,11 +8,12 @@
 /*global $H*/
 define([
     "jquery",
+    "Magento_Ui/js/modal/modal",
     "jquery/ui",
     "mage/translate",
     "Magento_Theme/js/sortable",
     "prototype"
-], function($){
+], function($, modal){
     'use strict';
 
     $.widget('mage.bundleProduct', {
@@ -113,61 +114,38 @@ define([
                         delete selectedProductList[$(this).val()];
                     }
                 });
-                $selectionGrid.dialog({
-                    title: $optionBox.find('input[name$="[title]"]').val() === '' ?
-                        $.mage.__('Add Products to New Option') :
-                        $.mage.__('Add Products to Option "%1"')
-                            .replace('%1',($('<div>').text($optionBox.find('input[name$="[title]"]').val()).html())),
-                    autoOpen: false,
-                    minWidth: 980,
-                    width: '75%',
-                    dialogClass: 'bundle',
-                    modal: true,
-                    resizable: true,
-                    buttons: [{
-                        text: $.mage.__('Add Selected Products'),
-                        'class': 'action-primary action-add',
-                        click: function() {
-                            $.each(selectedProductList, function() {
-                                window.bSelection.addRow(optionIndex, this);
-                            });
-                            bSelection.gridRemoval.each(
-                                function(pair) {
-                                    $optionBox.find('.col-sku').filter(function () {
-                                        return $.trim($(this).text()) === pair.key; // find row by SKU
-                                    }).closest('tr').find('button.delete').trigger('click');
-                                }
-                            );
-                            widget.refreshSortableElements();
-                            widget._updateSelectionsPositions.apply(widget.element);
-                            $selectionGrid.dialog('close');
-                        }
-                    }, {
-                        text: $.mage.__('Cancel'),
-                        'class': 'action-close',
-                        click: function() {
-                            $selectionGrid.dialog('close');
-                        }
-                    }],
-                    position: {
-                        my: 'left top',
-                        at: 'center top',
-                        of: 'body'
-                    },
-                    open: function () {
-                        $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                        var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45;
-                        $(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                        $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
-                    },
-                    close: function() {
-                        $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                        $(this).dialog('destroy');
-                    }
-                });
 
+                if (this.modal) {
+                    this.modal.html($selectionGrid.html());
+                } else {
+                    this.modal = $selectionGrid.modal({
+                        title: $optionBox.find('input[name$="[title]"]').val() === '' ?
+                            $.mage.__('Add Products to New Option') :
+                            $.mage.__('Add Products to Option "%1"')
+                                .replace('%1',($('<div>').text($optionBox.find('input[name$="[title]"]').val()).html())),
+                        modalClass: 'bundle',
+                        type: 'slide',
+                        buttons: [{
+                            text: $.mage.__('Add Selected Products'),
+                            'class': 'action-primary action-add',
+                            click: function () {
+                                $.each(selectedProductList, function() {
+                                    window.bSelection.addRow(optionIndex, this);
+                                });
+                                bSelection.gridRemoval.each(
+                                    function(pair) {
+                                        $optionBox.find('.col-sku').filter(function () {
+                                            return $.trim($(this).text()) === pair.key; // find row by SKU
+                                        }).closest('tr').find('button.delete').trigger('click');
+                                    }
+                                );
+                                widget.refreshSortableElements();
+                                widget._updateSelectionsPositions.apply(widget.element);
+                                widget.modal.modal('closeModal');
+                            }
+                        }]
+                    });
+                }
                 $.ajax({
                     url: bSelection.selectionSearchUrl,
                     dataType: 'html',
@@ -178,7 +156,7 @@ define([
                         form_key: FORM_KEY
                     },
                     success: function(data) {
-                        $selectionGrid.html(data).dialog('open');
+                        widget.modal.html(data).modal('openModal');
                     },
                     context: $('body'),
                     showLoader: true
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
index 0b66f070b51..2a95f42a28c 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
@@ -50,15 +50,15 @@ var catalogWysiwygEditor = {
                 type: 'slide',
                 firedElementId: elementId,
                 buttons: [{
-                    text: 'Submit',
-                    click: function () {
-                        self.okDialogWindow(this);
-                    }
-                }, {
                     text: 'Cancel',
                     click: function () {
                         self.closeDialogWindow(this);
                     }
+                },{
+                    text: 'Submit',
+                    click: function () {
+                        self.okDialogWindow(this);
+                    }
                 }],
                 close: function () {
                     self.closeDialogWindow(this);
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index 5b801e3bd20..68fe9233e81 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -37,7 +37,8 @@ define([
                 this.modal = $(content).modal({
                     title:  title || 'Insert File...',
                     modalClass: 'magento',
-                    type: 'slide'
+                    type: 'slide',
+                    buttons: []
                 });
             }
             this.modal.modal('openModal');
-- 
GitLab


From 9bf47df4268d4f491f12a01b39ac65f685a67628 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 11 Sep 2015 13:42:47 +0300
Subject: [PATCH 048/420] MAGETWO-42479: Refactor all entries modal windows

---
 lib/web/mage/adminhtml/wysiwyg/widget.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index ea4d602dc96..a037065f29e 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -362,7 +362,7 @@ define([
             );
         },
 
-        openDialogWindow: function(content) {
+        openDialogWindow: function (content) {
             this.dialogWindow = jQuery('<div/>').modal({
                 title: this.config.buttons.open,
                 type: 'slide',
@@ -370,7 +370,7 @@ define([
                 opened: function () {
                     jQuery(this).addClass('magento_message');
                 },
-                closed: function(e, modal) {
+                closed: function (e, modal) {
                     modal.modal.remove();
                     this.dialogWindow = null;
                 }
@@ -379,8 +379,8 @@ define([
             this.dialogWindow.modal('openModal').append(content);
         },
 
-        closeDialogWindow: function(dialogWindow) {
-            dialogWindow.modal('closeModal');
+        closeDialogWindow: function () {
+            this.dialogWindow.modal('closeModal').remove();
         },
 
         getElementValue: function(value) {
-- 
GitLab


From fc54ae7cf16c4cad0b1f53dfdfe3c1b874f80473 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 11 Sep 2015 13:45:35 +0300
Subject: [PATCH 049/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../templates/catalog/category/tree.phtml     | 948 ++++++++----------
 1 file changed, 445 insertions(+), 503 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index ade5b5af579..1a37b2eb2a1 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -16,536 +16,478 @@
     </div>
     <div class="tree-actions">
         <?php if ($block->getRoot()): ?>
-        <?php //echo $block->getCollapseButtonHtml() ?>
-        <?php //echo $block->getExpandButtonHtml() ?>
-        <a href="#"
-           onclick="tree.collapseTree(); return false;"><?php echo __('Collapse All'); ?></a>
-        <span class="separator">|</span> <a href="#"
-                                            onclick="tree.expandTree(); return false;"><?php echo __('Expand All'); ?></a>
+            <?php //echo $block->getCollapseButtonHtml() ?>
+            <?php //echo $block->getExpandButtonHtml() ?>
+            <a href="#"
+               onclick="tree.collapseTree(); return false;"><?php echo __('Collapse All'); ?></a>
+            <span class="separator">|</span> <a href="#"
+                                                onclick="tree.expandTree(); return false;"><?php echo __('Expand All'); ?></a>
         <?php endif; ?>
     </div>
-<?php if ($block->getRoot()): ?>
+    <?php if ($block->getRoot()): ?>
     <div class="tree-holder">
         <div id="tree-div" class="tree-wrapper"></div>
     </div>
 </div>
 
-<div data-id="information-dialog-tree" class="messages" style="display: none;">
-    <div class="message message-notice">
-       <div><?php echo __('This operation can take a long time'); ?></div>
+    <div data-id="information-dialog-tree" class="messages" style="display: none;">
+        <div class="message message-notice">
+            <div><?php echo __('This operation can take a long time'); ?></div>
+        </div>
     </div>
-</div>
-<!--[if IE]>
-<script id="ie-deferred-loader" defer="defer" src=""></script>
-<![endif]-->
-<script>
-var tree;
-require([
-    "jquery",
-    "jquery/ui",
-    "prototype",
-    "extjs/ext-tree-checkbox",
-    "mage/adminhtml/form",
-    "mage/translate"
-], function(jQuery){
-
-/**
- * Fix ext compatibility with prototype 1.6
- */
-Ext.lib.Event.getTarget = function (e) {
-    var ee = e.browserEvent || e;
-    return ee.target ? Event.element(ee) : null;
-};
-
-Ext.tree.TreePanel.Enhanced = function (el, config) {
-    Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
-};
-
-Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
-
-    loadTree:function (config, firstLoad) {
-        var parameters = config['parameters'];
-        var data = config['data'];
-
-        this.storeId = parameters['store_id'];
-
-        if (this.storeId != 0 && $('add_root_category_button')) {
-            $('add_root_category_button').hide();
-        }
-
-        if ((typeof parameters['root_visible']) != 'undefined') {
-            this.rootVisible = parameters['root_visible'] * 1;
-        }
-
-        var root = new Ext.tree.TreeNode(parameters);
-
-        this.nodeHash = {};
-        this.setRootNode(root);
-
-        if (firstLoad) {
-            this.addListener('click', this.categoryClick);
-            this.addListener('beforenodedrop', categoryMove.createDelegate(this));
-        }
-
-        this.loader.buildCategoryTree(root, data);
-        this.el.dom.innerHTML = '';
-        // render the tree
-        this.render();
-        if (parameters['expanded']) {
-            this.expandAll();
-        } else {
-            root.expand();
-        }
-
-        var selectedNode = this.getNodeById(parameters['category_id']);
-        if (selectedNode) {
-            this.currentNodeId = parameters['category_id'];
-        }
-        this.selectCurrentNode();
-
-        // Temporary solution will be replaced after refactoring of tree functionality
-        jQuery('body').off('tabsactivate.tree').on('tabsactivate.tree', jQuery.proxy(function (e, ui) {
-            this.activeTab = jQuery(ui.newTab).find('a').prop('id');
-        }, this))
-    },
-
-    request:function (url, params) {
-        if (!params) {
-            if (this.activeTab) {
-                var params = {active_tab_id:this.activeTab};
-            }
-            else {
-                var params = {};
-            }
-        }
-        if (!params.form_key) {
-            params.form_key = FORM_KEY;
-        }
-        var result = new Ajax.Request(
-                url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ),
-                {
-                    parameters:params,
-                    method:'post'
-                }
-        );
-
-        return result;
-    },
-
-    selectCurrentNode:function () {
-        if (this.currentNodeId) {
-            var selectedNode = this.getNodeById(this.currentNodeId);
-            if ((typeof selectedNode.attributes.path) != 'undefined') {
-                var path = selectedNode.attributes.path;
-                if (!this.storeId) {
-                    path = '0/' + path;
-                }
-                this.selectPath(path);
-            } else {
-                this.getSelectionModel().select(selectedNode);
-            }
-        }
-    },
-
-    collapseTree:function () {
-        this.collapseAll();
-
-        this.selectCurrentNode();
-
-        if (!this.collapsed) {
-            this.collapsed = true;
-            this.loader.dataUrl = '<?php echo $block->getLoadTreeUrl(false) ?>';
-            this.request(this.loader.dataUrl, false);
-        }
-    },
-
-    expandTree:function () {
-        this.expandAll();
-        if (this.collapsed) {
-            this.collapsed = false;
-            this.loader.dataUrl = '<?php echo $block->getLoadTreeUrl(true) ?>';
-            this.request(this.loader.dataUrl, false);
-        }
-    },
-
-    categoryClick:function (node, e) {
-        var url = this.buildUrl(node.id);
-
-        this.currentNodeId = node.id;
-        if (!this.useAjax) {
-            setLocation(url);
-            return;
-        }
-        if (this.activeTab) {
-            var params = {active_tab_id:this.activeTab};
-        }
-        updateContent(url, params);
-    },
-
-    buildUrl: function(id){
-        var urlExt = (this.storeId ? 'store/' + this.storeId + '/' : '') + 'id/' + id + '/';
-
-        return parseSidUrl(this.baseUrl, urlExt);
-    },
-
-    getBaseUrl: function(){
-        return this.baseUrl;
-    }
-});
-
-function reRenderTree(switcherParams) {
-    // re-render tree by store switcher
-    if (tree && switcherParams) {
-        var url;
-        if (switcherParams.useConfirm) {
-            if (!confirm("<?php echo __('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")) {
-                return false;
-            }
-        }
+    <!--[if IE]>
+    <script id="ie-deferred-loader" defer="defer" src=""></script>
+    <![endif]-->
+    <script>
+        var tree;
+        require([
+            "jquery",
+            'Magento_Ui/js/modal/modal',
+            "jquery/ui",
+            "prototype",
+            "extjs/ext-tree-checkbox",
+            "mage/adminhtml/form",
+            "mage/translate"
+        ], function (jQuery, modal) {
+
+            /**
+             * Fix ext compatibility with prototype 1.6
+             */
+            Ext.lib.Event.getTarget = function (e) {
+                var ee = e.browserEvent || e;
+                return ee.target ? Event.element(ee) : null;
+            };
 
-        if ($('add_root_category_button')) {
-            if (!switcherParams.scopeId) {
-                $('add_root_category_button').show();
-            }
-            else {
-                $('add_root_category_button').hide();
-            }
-        }
-
-        if (tree.useAjax) {
-            // retain current selected category id
-            url = tree.switchTreeUrl + switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
-            // load from cache
-            // load from ajax
-            // add form key
-            var params = {
-                form_key : FORM_KEY
+            Ext.tree.TreePanel.Enhanced = function (el, config) {
+                Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
             };
-            new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), {
-                parameters:params,
-                method:'post',
-                onComplete:function (transport) {
-                    var response = eval('(' + transport.responseText + ')');
-                    if (!response['parameters']) {
-                        return false;
+
+            Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
+
+                loadTree: function (config, firstLoad) {
+                    var parameters = config['parameters'];
+                    var data = config['data'];
+
+                    this.storeId = parameters['store_id'];
+
+                    if (this.storeId != 0 && $('add_root_category_button')) {
+                        $('add_root_category_button').hide();
                     }
 
-                    _renderNewTree(response, switcherParams.scopeParams);
+                    if ((typeof parameters['root_visible']) != 'undefined') {
+                        this.rootVisible = parameters['root_visible'] * 1;
+                    }
+
+                    var root = new Ext.tree.TreeNode(parameters);
+
+                    this.nodeHash = {};
+                    this.setRootNode(root);
+                    this.modal = modal;
+
+                    if (firstLoad) {
+                        this.addListener('click', this.categoryClick);
+                        this.addListener('beforenodedrop', categoryMove.bind(this));
+                    }
+
+                    this.loader.buildCategoryTree(root, data);
+                    this.el.dom.innerHTML = '';
+                    // render the tree
+                    this.render();
+                    if (parameters['expanded']) {
+                        this.expandAll();
+                    } else {
+                        root.expand();
+                    }
+
+                    var selectedNode = this.getNodeById(parameters['category_id']);
+                    if (selectedNode) {
+                        this.currentNodeId = parameters['category_id'];
+                    }
+                    this.selectCurrentNode();
+
+                    // Temporary solution will be replaced after refactoring of tree functionality
+                    jQuery('body').off('tabsactivate.tree').on('tabsactivate.tree', jQuery.proxy(function (e, ui) {
+                        this.activeTab = jQuery(ui.newTab).find('a').prop('id');
+                    }, this))
+                },
+
+                request: function (url, params) {
+                    if (!params) {
+                        if (this.activeTab) {
+                            var params = {active_tab_id: this.activeTab};
+                        }
+                        else {
+                            var params = {};
+                        }
+                    }
+                    if (!params.form_key) {
+                        params.form_key = FORM_KEY;
+                    }
+                    var result = new Ajax.Request(
+                        url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ),
+                        {
+                            parameters: params,
+                            method: 'post'
+                        }
+                    );
+
+                    return result;
+                },
+
+                selectCurrentNode: function () {
+                    if (this.currentNodeId) {
+                        var selectedNode = this.getNodeById(this.currentNodeId);
+                        if ((typeof selectedNode.attributes.path) != 'undefined') {
+                            var path = selectedNode.attributes.path;
+                            if (!this.storeId) {
+                                path = '0/' + path;
+                            }
+                            this.selectPath(path);
+                        } else {
+                            this.getSelectionModel().select(selectedNode);
+                        }
+                    }
+                },
+
+                collapseTree: function () {
+                    this.collapseAll();
+
+                    this.selectCurrentNode();
+
+                    if (!this.collapsed) {
+                        this.collapsed = true;
+                        this.loader.dataUrl = '<?php echo $block->getLoadTreeUrl(false) ?>';
+                        this.request(this.loader.dataUrl, false);
+                    }
+                },
+
+                expandTree: function () {
+                    this.expandAll();
+                    if (this.collapsed) {
+                        this.collapsed = false;
+                        this.loader.dataUrl = '<?php echo $block->getLoadTreeUrl(true) ?>';
+                        this.request(this.loader.dataUrl, false);
+                    }
+                },
+
+                categoryClick: function (node, e) {
+                    var url = this.buildUrl(node.id);
+
+                    this.currentNodeId = node.id;
+                    if (!this.useAjax) {
+                        setLocation(url);
+                        return;
+                    }
+                    if (this.activeTab) {
+                        var params = {active_tab_id: this.activeTab};
+                    }
+                    updateContent(url, params);
+                },
+
+                buildUrl: function (id) {
+                    var urlExt = (this.storeId ? 'store/' + this.storeId + '/' : '') + 'id/' + id + '/';
+
+                    return parseSidUrl(this.baseUrl, urlExt);
+                },
+
+                getBaseUrl: function () {
+                    return this.baseUrl;
                 }
             });
-        } else {
-            var baseUrl = '<?php echo $block->getEditUrl() ?>';
-            var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
-            url = parseSidUrl(baseUrl, urlExt);
-            setLocation(url);
-        }
-    }
-    // render default tree
-    else {
-        _renderNewTree();
-    }
-}
-
-function _renderNewTree(config, scopeParams) {
-    if (!config) {
-        var config = defaultLoadTreeParams;
-    }
-    if (tree) {
-        tree.purgeListeners();
-        tree.el.dom.innerHTML = '';
-    }
-    tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams);
-
-    tree.loadTree(config, true);
-
-    // try to select current category
-    var selectedNode = tree.getNodeById(config.parameters.category_id);
-    if (selectedNode) {
-        tree.currentNodeId = config.parameters.category_id;
-    }
-    tree.selectCurrentNode();
-
-    // update content area
-    var url = tree.editUrl;
-    if (scopeParams) {
-        url = url + scopeParams;
-    }
-    <?php if ($block->isClearEdit()): ?>
-        if (selectedNode) {
-            url = url + 'id/' + config.parameters.category_id;
-        }
-        <?php endif;?>
-    //updateContent(url); //commented since ajax requests replaced with http ones to load a category
-}
-
-jQuery(function () {
-    categoryLoader = new Ext.tree.TreeLoader({
-        dataUrl:'<?php echo $block->getLoadTreeUrl() ?>'
-    });
-
-    categoryLoader.processResponse = function(response, parent, callback) {
-        var config = JSON.parse(response.responseText);
-
-        this.buildCategoryTree(parent, config);
-
-        if (typeof callback == "function") {
-            callback(this, parent);
-        }
-    };
-
-    categoryLoader.buildCategoryTree = function (parent, config) {
-        if (!config) return null;
-
-        if (parent && config && config.length) {
-            for (var i = 0; i < config.length; i++) {
-                var node;
-                var _node = Object.clone(config[i]);
-                if (_node.children && !_node.children.length) {
-                    delete(_node.children);
-                    node = new Ext.tree.AsyncTreeNode(_node);
-                } else {
-                    node = new Ext.tree.TreeNode(config[i]);
+
+            function reRenderTree(switcherParams) {
+                // re-render tree by store switcher
+                if (tree && switcherParams) {
+                    var url;
+                    if (switcherParams.useConfirm) {
+                        if (!confirm("<?php echo __('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")) {
+                            return false;
+                        }
+                    }
+
+                    if ($('add_root_category_button')) {
+                        if (!switcherParams.scopeId) {
+                            $('add_root_category_button').show();
+                        }
+                        else {
+                            $('add_root_category_button').hide();
+                        }
+                    }
+
+                    if (tree.useAjax) {
+                        // retain current selected category id
+                        url = tree.switchTreeUrl + switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
+                        // load from cache
+                        // load from ajax
+                        // add form key
+                        var params = {
+                            form_key: FORM_KEY
+                        };
+                        new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), {
+                            parameters: params,
+                            method: 'post',
+                            onComplete: function (transport) {
+                                var response = eval('(' + transport.responseText + ')');
+                                if (!response['parameters']) {
+                                    return false;
+                                }
+
+                                _renderNewTree(response, switcherParams.scopeParams);
+                            }
+                        });
+                    } else {
+                        var baseUrl = '<?php echo $block->getEditUrl() ?>';
+                        var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
+                        url = parseSidUrl(baseUrl, urlExt);
+                        setLocation(url);
+                    }
                 }
-                parent.appendChild(node);
-                node.loader = node.getOwnerTree().loader;
-                if (_node.children) {
-                    this.buildCategoryTree(node, _node.children);
+                // render default tree
+                else {
+                    _renderNewTree();
                 }
             }
-        }
-    };
 
-    categoryLoader.buildHash = function (node) {
-        var hash = {};
+            function _renderNewTree(config, scopeParams) {
+                if (!config) {
+                    var config = defaultLoadTreeParams;
+                }
+                if (tree) {
+                    tree.purgeListeners();
+                    tree.el.dom.innerHTML = '';
+                }
+                tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams);
 
-        hash = this.toArray(node.attributes);
+                tree.loadTree(config, true);
 
-        if (node.childNodes.length > 0 || (node.loaded == false && node.loading == false)) {
-            hash['children'] = new Array;
+                // try to select current category
+                var selectedNode = tree.getNodeById(config.parameters.category_id);
+                if (selectedNode) {
+                    tree.currentNodeId = config.parameters.category_id;
+                }
+                tree.selectCurrentNode();
 
-            for (var i = 0, len = node.childNodes.length; i < len; i++) {
-                if (!hash['children']) {
-                    hash['children'] = new Array;
+                // update content area
+                var url = tree.editUrl;
+                if (scopeParams) {
+                    url = url + scopeParams;
+                }
+                <?php if ($block->isClearEdit()): ?>
+                if (selectedNode) {
+                    url = url + 'id/' + config.parameters.category_id;
                 }
-                hash['children'].push(this.buildHash(node.childNodes[i]));
+                <?php endif;?>
+                //updateContent(url); //commented since ajax requests replaced with http ones to load a category
             }
-        }
-
-        return hash;
-    };
-
-    categoryLoader.toArray = function (attributes) {
-        var data = {form_key:FORM_KEY};
-        for (var key in attributes) {
-            var value = attributes[key];
-            data[key] = value;
-        }
-
-        return data;
-    };
-
-    categoryLoader.on("beforeload", function (treeLoader, node) {
-        treeLoader.baseParams.id = node.attributes.id;
-        treeLoader.baseParams.store = node.attributes.store;
-        treeLoader.baseParams.form_key = FORM_KEY;
-    });
-
-    categoryLoader.on("load", function (treeLoader, node, config) {
-        //varienWindowOnload();
-    });
-
-    scopeSwitcherHandler = reRenderTree;
-
-    newTreeParams = {
-        animate:false,
-        loader:categoryLoader,
-        enableDD:true,
-        containerScroll:true,
-        selModel:new Ext.tree.CheckNodeMultiSelectionModel(),
-        rootVisible:'<?php echo $block->getRoot()->getIsVisible() ?>',
-        useAjax: <?php echo $block->getUseAjax() ?>,
-        switchTreeUrl:'<?php echo $block->getSwitchTreeUrl() ?>',
-        editUrl:'<?php echo $block->getEditUrl() ?>',
-        currentNodeId: <?php echo (int)$block->getCategoryId() ?>,
-        baseUrl: '<?php echo $block->getEditUrl() ?>'
-    };
-
-    defaultLoadTreeParams = {
-        parameters:{
-            text:'<?php echo htmlentities($block->getRoot()->getName()) ?>',
-            draggable:false,
-        allowDrop   : <?php if ($block->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>,
-            id: <?php echo (int)$block->getRoot()->getId() ?>,
-            expanded: <?php echo (int)$block->getIsWasExpanded() ?>,
-            store_id: <?php echo (int)$block->getStore()->getId() ?>,
-            category_id: <?php echo (int)$block->getCategoryId() ?>
-        },
-        data: <?php echo $block->getTreeJson() ?>
-    };
-
-    reRenderTree();
-});
-
-function addNew(url, isRoot) {
-    if (isRoot) {
-        tree.currentNodeId = tree.root.id;
-    }
-
-    if (/store\/\d+/.test(url)) {
-        url = url.replace(/store\/\d+/, "store/" + tree.storeId);
-    }
-    else {
-        url += "store/" + tree.storeId + "/";
-    }
-
-    url += 'parent/' + tree.currentNodeId;
-    updateContent(url);
-}
-
-var mageDialog = (function($) {
-    var self = {dialogOpened: false, callback: []};
-
-    self.callback = {ok: [], cancel: []};
-    self.createDialog = function () {
-        var onEvent = function (type, dialog) {
-            self.callback[type].forEach(function(call) {
-                call();
-            });
-            $(dialog).dialog( "close" );
-        };
-        var _resetState = function() {
-            self.dialogOpened = false;
-            self.callback = {ok: [], cancel: []};
-            delete self.dialog;
-        };
-        self.dialog = $('[data-id="information-dialog-category"]').dialog({
-            autoOpen:   false,
-            modal:      true,
-            dialogClass: 'popup-window ui-popup-message',
-            resizable: false,
-            width: '75%',
-            title: $.mage.__('Warning message'),
-            position: {
-                my: 'left top',
-                at: 'center top',
-                of: 'body'
-            },
-            buttons: [{
-                    text: $.mage.__('Ok'),
-                    'class': 'action-primary',
-                    click: function () {
-                        onEvent('ok', this);
+
+            jQuery(function () {
+                categoryLoader = new Ext.tree.TreeLoader({
+                    dataUrl: '<?php echo $block->getLoadTreeUrl() ?>'
+                });
+
+                categoryLoader.processResponse = function (response, parent, callback) {
+                    var config = JSON.parse(response.responseText);
+
+                    this.buildCategoryTree(parent, config);
+
+                    if (typeof callback == "function") {
+                        callback(this, parent);
+                    }
+                };
+
+                categoryLoader.buildCategoryTree = function (parent, config) {
+                    if (!config) return null;
+
+                    if (parent && config && config.length) {
+                        for (var i = 0; i < config.length; i++) {
+                            var node;
+                            var _node = Object.clone(config[i]);
+                            if (_node.children && !_node.children.length) {
+                                delete(_node.children);
+                                node = new Ext.tree.AsyncTreeNode(_node);
+                            } else {
+                                node = new Ext.tree.TreeNode(config[i]);
+                            }
+                            parent.appendChild(node);
+                            node.loader = node.getOwnerTree().loader;
+                            if (_node.children) {
+                                this.buildCategoryTree(node, _node.children);
+                            }
+                        }
+                    }
+                };
+
+                categoryLoader.buildHash = function (node) {
+                    var hash = {};
+
+                    hash = this.toArray(node.attributes);
+
+                    if (node.childNodes.length > 0 || (node.loaded == false && node.loading == false)) {
+                        hash['children'] = new Array;
+
+                        for (var i = 0, len = node.childNodes.length; i < len; i++) {
+                            if (!hash['children']) {
+                                hash['children'] = new Array;
+                            }
+                            hash['children'].push(this.buildHash(node.childNodes[i]));
+                        }
                     }
-                }, {
-                    text: $.mage.__('Cancel'),
-                    'class': 'action-close',
-                    click: function () {
-                        onEvent('cancel', this);
+
+                    return hash;
+                };
+
+                categoryLoader.toArray = function (attributes) {
+                    var data = {form_key: FORM_KEY};
+                    for (var key in attributes) {
+                        var value = attributes[key];
+                        data[key] = value;
                     }
+
+                    return data;
+                };
+
+                categoryLoader.on("beforeload", function (treeLoader, node) {
+                    treeLoader.baseParams.id = node.attributes.id;
+                    treeLoader.baseParams.store = node.attributes.store;
+                    treeLoader.baseParams.form_key = FORM_KEY;
+                });
+
+                categoryLoader.on("load", function (treeLoader, node, config) {
+                    //varienWindowOnload();
+                });
+
+                scopeSwitcherHandler = reRenderTree;
+
+                newTreeParams = {
+                    animate: false,
+                    loader: categoryLoader,
+                    enableDD: true,
+                    containerScroll: true,
+                    selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
+                    rootVisible: '<?php echo $block->getRoot()->getIsVisible() ?>',
+                    useAjax: <?php echo $block->getUseAjax() ?>,
+                    switchTreeUrl: '<?php echo $block->getSwitchTreeUrl() ?>',
+                    editUrl: '<?php echo $block->getEditUrl() ?>',
+                    currentNodeId: <?php echo (int)$block->getCategoryId() ?>,
+                    baseUrl: '<?php echo $block->getEditUrl() ?>'
+                };
+
+                defaultLoadTreeParams = {
+                    parameters: {
+                        text: '<?php echo htmlentities($block->getRoot()->getName()) ?>',
+                        draggable: false,
+                        allowDrop: <?php if ($block->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>,
+                        id: <?php echo (int)$block->getRoot()->getId() ?>,
+                        expanded: <?php echo (int)$block->getIsWasExpanded() ?>,
+                        store_id: <?php echo (int)$block->getStore()->getId() ?>,
+                        category_id: <?php echo (int)$block->getCategoryId() ?>
+                    },
+                    data: <?php echo $block->getTreeJson() ?>
+                };
+
+                reRenderTree();
+            });
+
+            function addNew(url, isRoot) {
+                if (isRoot) {
+                    tree.currentNodeId = tree.root.id;
                 }
-            ],
-            open: function () {
-                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-                self.dialogOpened = true;
-
-                var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                $(this).closest('.ui-dialog').css('margin-top', topMargin);
-            },
-            close: function(event, ui) {
-                $(this).dialog('destroy');
-                _resetState();
-            }
-        });
-    };
-
-    return {
-        onOk: function(call) {
-            self.callback.ok.push(call);
-            return this;
-        },
-        onCancel: function(call) {
-            self.callback.cancel.push(call);
-            return this;
-        },
-        show: function() {
-            if (self.dialog == undefined) {
-                self.createDialog();
-            }
-            if (self.dialogOpened ==  false) {
-                self.dialog.dialog('open');
-            }
-            return this;
-        }
-    };
-})(jQuery);
-
-function categoryMove(obj) {
-    var data = {id:obj.dropNode.id, form_key:FORM_KEY};
-
-    data.point = obj.point;
-    switch (obj.point) {
-        case 'above' :
-            data.pid = obj.target.parentNode.id;
-            data.paid = obj.dropNode.parentNode.id;
-            if (obj.target.previousSibling) {
-                data.aid = obj.target.previousSibling.id;
-            } else {
-                data.aid = 0;
-            }
-            break;
-        case 'below' :
-            data.pid = obj.target.parentNode.id;
-            data.aid = obj.target.id;
-            break;
-        case 'append' :
-            data.pid = obj.target.id;
-            data.paid = obj.dropNode.parentNode.id;
-            if (obj.target.lastChild) {
-                data.aid = obj.target.lastChild.id;
-            } else {
-                data.aid = 0;
-            }
-            break;
-        default :
-            obj.cancel = true;
-            return obj;
-    }
-
-    var pd = [];
-    for (var key in data) {
-        pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&");
-    }
-    pd.splice(pd.length - 1, 1);
-
-    mageDialog.onOk(function() {
-        (function($){
-            $.ajax({
-                url: '<?php echo $block->getMoveUrl() ?>',
-                method : 'POST',
-                data: pd.join(""),
-                showLoader: true
-            }).done(function(data) {
-                if (data.messages && data.messages.length > 0) {
-                    $('[name=category-edit-form] .messages').html(data.messages);
+
+                if (/store\/\d+/.test(url)) {
+                    url = url.replace(/store\/\d+/, "store/" + tree.storeId);
                 }
-                if (data.error) {
-                    reRenderTree();
-                } else {
-                    $(obj.tree.container.dom).trigger('categoryMove.tree');
+                else {
+                    url += "store/" + tree.storeId + "/";
                 }
-            }).fail(function(jqXHR, textStatus) {
-                if (window.console) {
-                    console.log(textStatus);
+
+                url += 'parent/' + tree.currentNodeId;
+                updateContent(url);
+            }
+
+            function categoryMove(obj) {
+                var data = {id: obj.dropNode.id, form_key: FORM_KEY};
+
+                data.point = obj.point;
+                switch (obj.point) {
+                    case 'above' :
+                        data.pid = obj.target.parentNode.id;
+                        data.paid = obj.dropNode.parentNode.id;
+                        if (obj.target.previousSibling) {
+                            data.aid = obj.target.previousSibling.id;
+                        } else {
+                            data.aid = 0;
+                        }
+                        break;
+                    case 'below' :
+                        data.pid = obj.target.parentNode.id;
+                        data.aid = obj.target.id;
+                        break;
+                    case 'append' :
+                        data.pid = obj.target.id;
+                        data.paid = obj.dropNode.parentNode.id;
+                        if (obj.target.lastChild) {
+                            data.aid = obj.target.lastChild.id;
+                        } else {
+                            data.aid = 0;
+                        }
+                        break;
+                    default :
+                        obj.cancel = true;
+                        return obj;
                 }
-                location.reload();
-            });
-        })(jQuery);
-    }).onCancel(function() {
-        reRenderTree();
-    }).show();
-}
-    window.addNew = addNew;
-
-});
-</script>
+
+                var pd = [];
+                for (var key in data) {
+                    pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&");
+                }
+                pd.splice(pd.length - 1, 1);
+
+                jQuery('[data-id="information-dialog-category"]').modal({
+                    type: 'popup',
+                    buttons: [{
+                        text: 'Ok',
+                        class: '',
+                        click: function () {
+                            (function ($) {
+                                $.ajax({
+                                    url: '<?php echo $block->getMoveUrl() ?>//',
+                                    method: 'POST',
+                                    data: pd.join(""),
+                                    showLoader: true
+                                }).done(function (data) {
+                                    if (data.messages && data.messages.length > 0) {
+                                        $('[name=category-edit-form] .messages').html(data.messages);
+                                    }
+                                    if (data.error) {
+                                        reRenderTree();
+                                    } else {
+                                        $(obj.tree.container.dom).trigger('categoryMove.tree');
+                                    }
+                                }).fail(function (jqXHR, textStatus) {
+                                    if (window.console) {
+                                        console.log(textStatus);
+                                    }
+                                    location.reload();
+                                });
+                            })(jQuery);
+                            this.closeModal();
+                        }
+
+                    }, {
+                        text: 'Cancel',
+                        class: '',
+                        click: function () {
+                            reRenderTree();
+                            this.closeModal();
+                        }
+                    }]
+
+                }).trigger('openModal');
+
+            }
+
+            window.addNew = addNew;
+
+        });
+    </script>
 <?php endif; ?>
-- 
GitLab


From 1030911cb760df1182618423a2cabc0f57c0e531 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:04:54 +0300
Subject: [PATCH 050/420] JS-153: Magnifier preview must be hidden, while start
 swiping or dragging

---
 lib/web/mage/gallery/gallery.html |  4 ++--
 lib/web/magnifier/magnify.js      | 40 +++++++++++++++++++++++++++----
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 6a9a3cfbe3c..69a196d86c6 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -8,13 +8,13 @@
     <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows">
         <div class="fotorama__stage">
             <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos">
-                <div class="fotorama__arr__arr"></div>
+                <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__stage__shaft" tabindex="0" data-gallery-role="stage-shaft">
             </div>
             <div class="fotorama__arr fotorama__arr--next fotorama__arr--disabled" tabindex="-1" role="button"
                  aria-label="Next">
-                <div class="fotorama__arr__arr"></div>
+                <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
         </div>
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index a30a827aabd..146c014b444 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -13,7 +13,9 @@ define([
         var isTouchEnabled = 'ontouchstart' in document.documentElement,
             gallerySelector = '[data-gallery-role="gallery"]',
             magnifierSelector = '[data-gallery-role="magnifier"]',
-            magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]';
+            magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]',
+            hideMagnifier,
+            behaveOnHover;
 
         if (isTouchEnabled) {
             $(element).on('fotorama:showend fotorama:load', function () {
@@ -23,8 +25,38 @@ define([
             return config;
         }
 
+        /**
+         * Hides magnifier preview and zoom blocks.
+         */
+        hideMagnifier = function () {
+            $(magnifierSelector).empty().hide();
+            $(magnifierZoomSelector).remove();
+        };
+
+        /**
+         * Hides magnifier on drag and while arrow click.
+         */
+        behaveOnHover = function (e, initPos) {
+            var pos = [e.pageX, e.pageY],
+                isArrow = $(e.target).data('gallery-role') === 'arrow',
+                isClick = initPos[0] ===  pos[0] && initPos[1] ===  pos[1];
+            if (isArrow || !isClick) {
+                hideMagnifier();
+            }
+        };
+
         if (config.magnifierOpts.eventType === 'click') {
             config.options.swipe = false;
+        } else if (config.magnifierOpts.eventType === 'hover') {
+            $(element).on('pointerdown mousedown MSPointerDown', function (e) {
+                var pos = [e.pageX, e.pageY];
+                $(element).on('mousemove pointermove MSPointerMove', function (ev) {
+                    navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
+                });
+                $(document).on('mouseup pointerup MSPointerUp', function () {
+                    $(element).off('mousemove pointermove MSPointerMove');
+                });
+            });
         }
 
         $.extend(config.magnifierOpts, {
@@ -48,15 +80,13 @@ define([
         });
 
         $(element).on('fotorama:showend fotorama:load', function (e, fotorama) {
-            $(magnifierSelector).empty().hide();
-            $(magnifierZoomSelector).remove();
+            hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('fotorama:show', function () {
-            $(magnifierSelector).empty().hide();
-            $(magnifierZoomSelector).remove();
+            hideMagnifier();
         });
 
         return config;
-- 
GitLab


From fc20660d3b079106c31e14ee8c8d56f0e642b0b7 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:13:45 +0300
Subject: [PATCH 051/420] JS-182: Magnifier doesn't appear on gallery arrows
 hover

---
 lib/web/magnifier/magnifier.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 3a31236832e..6e5a05cfd68 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -394,7 +394,7 @@
                         onThumbLeave();
                     }
                     handleEvents(e);
-                    isOverThumb = true;
+                    isOverThumb = inBounds;
                 }
             }).trigger('mouseover');
         }
@@ -564,6 +564,10 @@
 
             getMousePos();
 
+            if (gEventType === 'hover') {
+                isOverThumb = inBounds;
+            }
+
             if (inBounds && isOverThumb) {
                 $largeWrapper.removeClass(MagnifyCls.magnifyHidden);
                 move();
-- 
GitLab


From 1f1e43b79c77185e8117bf0e1119ea7762d8f5cd Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:23:41 +0300
Subject: [PATCH 052/420] JS-160: Erratic behaviour when changing slides

---
 lib/web/fotorama/fotorama.js | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 592f9d4cff0..7ae347e8dd7 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1573,17 +1573,9 @@ fotoramaVersion = '4.6.4';
 
         if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) {
             elPos = options.overPos;
-            onEndFn = function () {
-                slide($el, $.extend({}, options, {
-                    overPos: options.pos,
-                    time: Math.max(TRANSITION_DURATION, options.time / 2)
-                }));
-            };
         }
 
-        ////////console.time('var translate = $.extend');
         var translate = $.extend(getTranslate(elPos/*, options._001*/), options.width && {width: options.width});
-        ////////console.timeEnd('var translate = $.extend');
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
@@ -1591,9 +1583,7 @@ fotoramaVersion = '4.6.4';
         if (CSS3) {
             $el.css($.extend(getDuration(options.time), translate));
             if (options.time > 10) {
-                ////////console.time('afterTransition');
                 afterTransition($el, 'transform', onEndFn, options.time);
-                ////////console.timeEnd('afterTransition');
             } else {
                 onEndFn();
             }
-- 
GitLab


From 8885c3ea99c1106d09b82ecc381111c5c41429f0 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:49:16 +0300
Subject: [PATCH 053/420] JS-171: Implement enabling/disabling of full-screen
 mode

---
 .../templates/product/view/gallery.phtml      |  1 +
 .../frontend/Magento/blank/etc/view.xml       |  1 +
 app/design/frontend/Magento/luma/etc/view.xml |  3 +-
 lib/web/mage/gallery/gallery.js               |  2 +-
 lib/web/mage/gallery/gallery.less             | 32 ++++++++-----------
 5 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 3089c2cf50f..5c81ceb6209 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -30,6 +30,7 @@
                     "loop": <?php echo $block->getVar("gallery:loop"); ?>,
                     "keyboard": <?php echo $block->getVar("gallery:keyboard"); ?>,
                     "arrows": <?php echo $block->getVar("gallery:arrows"); ?>,
+                    "allowfullscreen": <?php echo $block->getVar("gallery:allowfullscreen"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:show_caption"); ?>,
                     "width": <?php echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "thumbwidth": <?php echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 897a3c54b3b..4c3a737ee7e 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -185,6 +185,7 @@
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 2795d84c168..4b3777ba944 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -188,7 +188,8 @@
         <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) -->
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:show_caption">true</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9f81daba85b..7eeed339a86 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -42,7 +42,7 @@ define([
                 $element: $(element),
                 currentConfig: config,
                 defaultConfig: _.clone(config),
-                fullscreenConfig: _.clone(config.fullscreen),
+                fullscreenConfig: _.clone(config.allowfullscreen),
                 breakpoints: config.breakpoints,
                 activeBreakpoint: {},
                 fotoramaApi: null,
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 9fd58e8b302..0e5d52ae073 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -58,16 +58,6 @@
     width: 100%;
 }
 
-.fotorama-image-reset {
-    border-radius: 0 !important;
-    box-shadow: none !important;
-    max-height: 99999px !important;
-    max-width: 99999px !important;
-    min-height: 0 !important;
-    min-width: 0 !important;
-    padding: 0 !important;
-}
-
 .fotorama-grab-cursor {
     cursor: move;
     cursor: -webkit-grab;
@@ -202,8 +192,7 @@
 }
 
 .fotorama--fullscreen {
-    &:extend(.fotorama-image-reset);
-    background: @color-black;
+    background: @color-white;
     bottom: 0 !important;
     float: none !important;
     height: 100% !important;
@@ -214,9 +203,8 @@
     top: 0 !important;
     width: 100% !important;
     z-index: @z-index-10 !important;
-    .fotorama__stage,
-    .fotorama__nav {
-        background: @color-black;
+    .fotorama__wrap {
+        max-width: 100% !important;
     }
 }
 
@@ -583,6 +571,14 @@
     &:extend(.fotorama-no-tap);
     cursor: pointer;
     position: absolute;
+}
+
+.fotorama__arr {
+    z-index: @z-index-9;
+
+}
+.fotorama__fullscreen-icon,
+.fotorama__video-close {
     z-index: @z-index-10;
 }
 
@@ -629,7 +625,7 @@
     right: 2px;
     top: 2px;
     width: @size-fotorama-block;
-    z-index: 20;
+    z-index: @z-index-10;
 }
 
 .fotorama__fullscreen-icon {
@@ -642,7 +638,7 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
-        background-position: (-@fotorama_fullscreen_button) (-@fotorama_fullscreen_button);
+        background-position: (-@size-fotorama-block) 0;
     }
 }
 
@@ -859,7 +855,7 @@
     overflow: hidden;
     position: absolute;
     top: 0;
-    z-index: @z-index-10;
+    z-index: @z-index-9;
 }
 
 .magnify-lens {
-- 
GitLab


From 634c32d50db5ceee61ccf90e122774f942c90c9a Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 9 Sep 2015 16:49:25 +0300
Subject: [PATCH 054/420] JS-175: Implement transition options support from
 theme level

---
 .../templates/product/view/gallery.phtml      |  6 +++
 .../frontend/Magento/blank/etc/view.xml       |  2 +
 app/design/frontend/Magento/luma/etc/view.xml |  2 +
 .../js/jasmine/assets/gallery/config.json     |  9 ++++-
 .../js/jasmine/tests/lib/mage/gallery.test.js | 37 ++++++++++++++++++-
 5 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 5c81ceb6209..a36f9bccf20 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -38,6 +38,12 @@
                         ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "height": <?php echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
+                    "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
+                    "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
+                },
+                "fullscreen": {
+                    "nav": "thumbs",
+                    "swipe": false
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 4c3a737ee7e..de5711efd7e 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,6 +186,8 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 4b3777ba944..518193199c5 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -190,6 +190,8 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
diff --git a/dev/tests/js/jasmine/assets/gallery/config.json b/dev/tests/js/jasmine/assets/gallery/config.json
index b3c8b8bc0b3..d1d8e94d7f2 100644
--- a/dev/tests/js/jasmine/assets/gallery/config.json
+++ b/dev/tests/js/jasmine/assets/gallery/config.json
@@ -59,12 +59,17 @@
         "arrows": "false",
         "thumbwidth": "90",
         "thumbheight": "90",
-        "ratio": "1"
+        "ratio": "1",
+        "allowfullscreen": true
+    },
+    "fullscreen": {
+        "nav": false
     },
     "breakpoints": {
         "alias": {
             "conditions": {
-                "min-width": "0px"
+                "min-width": "0px",
+                "max-width": "1px"
             },
             "options": {
                 "options": {
diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
index 3f076659b49..dd29ec79a64 100644
--- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
@@ -19,6 +19,7 @@ define([
         stageSelector = '[data-gallery-role="stage-shaft"]',
         navSelector = '[data-gallery-role="nav-frame"]',
         dotSelector = '[data-nav-type="dot"]',
+        navWrap = '[data-gallery-role="nav-wrap"]',
         dataToUpdate = [
             {
                 img: 'data:image/png;base64,' +
@@ -33,7 +34,16 @@ define([
                 img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' +
                 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII='
             }
-        ];
+        ],
+        waitsFor = function (test, fn) {
+            if (test()) {
+                fn();
+            } else {
+                setTimeout(function () {
+                    waitsFor(test, fn);
+                }, 10);
+            }
+        };
 
     gallery(magnifier(conf, body), body);
 
@@ -115,5 +125,30 @@ define([
         it('breakpoints override configs', function () {
             expect($('.fotorama__arr').css('display')).toBe('none');
         });
+
+        it('fullscreen enter', function (done) {
+            expect($(navWrap).css('display') === 'block').toBeTruthy();
+            galleryAPI.fotorama.requestFullScreen();
+
+            waitsFor(function () {
+                return $(navWrap).css('display') !== 'block';
+            }, function () {
+                expect($(navWrap).css('display') === 'none').toBeTruthy();
+                done();
+            });
+        });
+
+
+        it('fullscreen exit', function (done) {
+            expect($(navWrap).css('display') === 'none').toBeTruthy();
+            galleryAPI.fotorama.cancelFullScreen();
+
+            waitsFor(function () {
+                return $(navWrap).css('display') !== 'none';
+            }, function () {
+                expect($(navWrap).css('display') === 'block').toBeTruthy();
+                done();
+            });
+        });
     });
 });
-- 
GitLab


From 6b15356040a3a9d4150060732ad35929c4e7b24a Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 9 Sep 2015 17:34:32 +0300
Subject: [PATCH 055/420] JS-157: Implement drag for image on desktops

---
 .../templates/product/view/gallery.phtml      |   8 +-
 .../frontend/Magento/blank/etc/view.xml       |   9 +-
 app/design/frontend/Magento/luma/etc/view.xml |   8 ++
 lib/web/fotorama/fotorama.js                  |   2 +-
 lib/web/mage/gallery/gallery.js               |   5 +-
 lib/web/mage/gallery/gallery.less             |  15 ++
 lib/web/magnifier/magnifier.js                | 131 ++++++++++++++++++
 lib/web/magnifier/magnify.js                  |   5 +-
 8 files changed, 175 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index a36f9bccf20..024df1446a5 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -42,8 +42,12 @@
                     "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
                 },
                 "fullscreen": {
-                    "nav": "thumbs",
-                    "swipe": false
+                    "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
+                    "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
+                    "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
+                    "showCaption": <?php echo $block->getVar("gallery:fullscreen:show_caption"); ?>,
+                    "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
+                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index de5711efd7e..15a8191641f 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,9 +186,16 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+        <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
+        <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+        <var name="gallery:fullscreen:show_caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 518193199c5..df358d1629b 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -193,6 +193,14 @@
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+        <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
+        <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
+        <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+        <var name="gallery:fullscreen:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 7ae347e8dd7..5f34cd9820e 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -977,7 +977,7 @@ fotoramaVersion = '4.6.4';
 
             arrows: true,
             click: true,
-            swipe: true,
+            swipe: false,
             trackpad: false,
 
             shuffle: false,
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 7eeed339a86..ed4e12dde1f 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -36,6 +36,7 @@ define([
         initialize: function (config, element) {
             this._super();
 
+            config.options.swipe = true;
             this.config = config;
 
             this.settings = {
@@ -52,7 +53,6 @@ define([
 
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
-            config.options.allowfullscreen = false;
 
             $.extend(true, this.startConfig, config);
 
@@ -67,6 +67,9 @@ define([
          */
         initFullscreenSettings: function () {
             var settings = this.settings;
+
+            settings.fullscreenConfig.swipe = false;
+
             settings.$element.on('fotorama:fullscreenenter', function () {
                 settings.api.updateOptions(settings.defaultConfig.options, true);
                 settings.api.updateOptions(settings.fullscreenConfig, true);
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 0e5d52ae073..1f7eac04d2d 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -897,6 +897,21 @@
     }
 }
 
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0px;
+            bottom: 0px;
+            left: 0px;
+            right: 0px;
+        }
+    }
+}
+
 .fotorama__stage__frame {
     text-align: center;
     .fotorama__img {
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 6e5a05cfd68..acfd548bcca 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -578,6 +578,99 @@
             }
         }
 
+        function magnifierFullscreen () {
+            var isDragActive = false,
+                startX,
+                startY,
+                imagePosX,
+                imagePosY,
+                touch,
+                isTouchEnabled = 'ontouchstart' in document.documentElement;
+
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
+
+                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $imageContainer = $image.parent(),
+                    gallery = $('[data-gallery-role="gallery"]');
+
+                gallery.on('fotorama:fullscreenexit', function () {
+                    $thumb.css({
+                        'top': '',
+                        'left': ''
+                    });
+                });
+
+                $image.on(isTouchEnabled ? 'touchstart' : 'mousedown', function (e) {
+                    if (gallery.data('fotorama').fullScreen) {
+                        e.preventDefault();
+
+                        $image.css('cursor', 'move');
+                        imagePosY = $image.offset().top;
+                        imagePosX = $image.offset().left;
+
+                        if (isTouchEnabled) {
+                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                            e.clientX = touch.pageX;
+                            e.clientY = touch.pageY;
+                        }
+                        startX = e.clientX;
+                        startY = e.clientY;
+                        isDragActive = true;
+                    }
+                });
+
+                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove', function (e) {
+                    if (gallery.data('fotorama').fullScreen && isDragActive) {
+
+                        var top,
+                            left,
+                            startOffset = $image.offset();
+
+                        e.preventDefault();
+
+                        if (isTouchEnabled) {
+                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                            e.clientX = touch.pageX;
+                            e.clientY = touch.pageY;
+                        }
+                        top = +imagePosY + (e.clientY - startY);
+                        left = +imagePosX + (e.clientX - startX);
+
+                        if ($image.height() > $imageContainer.height()) {
+
+                            if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
+                                top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                            } else {
+                                top = ($imageContainer.offset().top < top) ? 0 : top;
+                            }
+                            $image.offset({
+                                'top': top
+                            });
+                        }
+
+                        if ($image.width() > $imageContainer.width()) {
+
+                            if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                                left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                            } else {
+                                left = ($imageContainer.offset().left < left) ? 0 : left;
+                            }
+                            $image.offset({
+                                'left': left
+                            });
+                        }
+                    }
+                });
+
+                $image.on(isTouchEnabled ? 'touchend' : 'mouseup', function (e) {
+                    if (gallery.data('fotorama').fullScreen) {
+                        isDragActive = false;
+                        $image.css('cursor', 'pointer');
+                    }
+                });
+            });
+        };
+
         function onScroll() {
 
             if (curThumb !== null) {
@@ -587,9 +680,47 @@
 
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
+
+            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+
+                var $image = $('[data-gallery-role="stage-shaft"] > [data-active="true"] > img'),
+                    $imageContainer = $image.parent(),
+                    top, left;
+
+                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
+                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                } else {
+                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
+                }
+
+                if (top !== undefined) {
+                    $image.css('top', top);
+                }
+
+                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
+                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                } else {
+                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
+                }
+
+                if (left !== undefined) {
+                    $image.css('left', left);
+                }
+
+                if ($image.width() < $imageContainer.width()) {
+                    $image.css('left', '');
+                }
+
+                if ($image.height() < $imageContainer.height()) {
+                    $image.css('top', '');
+                }
+            }
+
             _init($box, gOptions);
+
         });
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
+        magnifierFullscreen();
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 146c014b444..d6f7c9931f3 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -20,9 +20,8 @@ define([
         if (isTouchEnabled) {
             $(element).on('fotorama:showend fotorama:load', function () {
                 $(magnifierSelector).remove();
+                $(magnifierZoomSelector).remove();
             });
-
-            return config;
         }
 
         /**
@@ -79,7 +78,7 @@ define([
             }
         });
 
-        $(element).on('fotorama:showend fotorama:load', function (e, fotorama) {
+        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
-- 
GitLab


From a763b3534d5acd59385d38cc57b8c351042e8164 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 11 Sep 2015 14:20:47 +0300
Subject: [PATCH 056/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/templates/catalog/category/tree.phtml        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 1a37b2eb2a1..28d2fd4c94f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -251,7 +251,7 @@
             function _renderNewTree(config, scopeParams) {
                 if (!config) {
                     var config = defaultLoadTreeParams;
-                }
+                }Are you sure you want to delete this integration? You can't undo this action
                 if (tree) {
                     tree.purgeListeners();
                     tree.el.dom.innerHTML = '';
-- 
GitLab


From 32aac373e9008f4767d63d596c8142360f05b880 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 11 Sep 2015 15:10:15 +0300
Subject: [PATCH 057/420] MAGETWO-42150: Add ability to declare filter
 components inside of the column definition

- Remove filters sorting
---
 .../view/base/web/js/grid/filters/filters.js  | 80 +++++++------------
 1 file changed, 28 insertions(+), 52 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 0025db4a190..59dcb4c29d6 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -173,40 +173,6 @@ define([
             return this;
         },
 
-        /**
-         * Returns instance of a filter found by provided index.
-         *
-         * @param {String} index - Index of a filter (e.g. 'title').
-         * @returns {Filter}
-         */
-        getFilter: function (index) {
-            return this.elems.findWhere({
-                index: index
-            });
-        },
-
-        /**
-         * Returns an array of range filters.
-         *
-         * @returns {Array}
-         */
-        getRanges: function () {
-            return this.elems.filter(function (filter) {
-                return filter.isRange;
-            });
-        },
-
-        /**
-         * Returns an array of non-range filters.
-         *
-         * @returns {Array}
-         */
-        getPlain: function () {
-            return this.elems.filter(function (filter) {
-                return !filter.isRange;
-            });
-        },
-
         /**
          * Clears filters data.
          *
@@ -288,27 +254,39 @@ define([
                 column: column
             }, true, true);
         },
-
+    
         /**
-         * Sorts filters by associated columns positions.
+         * Returns instance of a filter found by provided index.
          *
-         * @returns {Filters} Chainable
+         * @param {String} index - Index of a filter (e.g. 'title').
+         * @returns {Filter}
          */
-        resortByColumns: function () {
-            var columns = this.columns().elems(),
-                filters = [];
-
-            columns.forEach(function (column) {
-                var filter = this.getFilter(column.index);
-
-                if (filter) {
-                    filters.push(filter);
-                }
-            }, this);
+        getFilter: function (index) {
+            return this.elems.findWhere({
+                index: index
+            });
+        },
 
-            this.insertChild(filters);
+        /**
+         * Returns an array of range filters.
+         *
+         * @returns {Array}
+         */
+        getRanges: function () {
+            return this.elems.filter(function (filter) {
+                return filter.isRange;
+            });
+        },
 
-            return this;
+        /**
+         * Returns an array of non-range filters.
+         *
+         * @returns {Array}
+         */
+        getPlain: function () {
+            return this.elems.filter(function (filter) {
+                return !filter.isRange;
+            });
         },
 
         /**
@@ -382,8 +360,6 @@ define([
          */
         onColumnsUpdate: function (columns) {
             columns.forEach(this.initFilter, this);
-
-            this.resortByColumns();
         }
     });
 });
-- 
GitLab


From 7824644c77dcd13c509a3dee44ef9be6b80a1eb0 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 11 Sep 2015 15:46:46 +0300
Subject: [PATCH 058/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/templates/rule/edit.phtml  | 74 ++++++-------------
 1 file changed, 22 insertions(+), 52 deletions(-)

diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
index 843c57903ca..3c103e553cf 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
@@ -11,23 +11,22 @@ require([
     "jquery",
     "jquery/ui",
     "jquery/editableMultiselect/js/jquery.multiselect",
-    "mage/mage"
+    "mage/mage",
+    'Magento_Ui/js/modal/modal'
 ], function($){
 
-    $.widget("adminhtml.dialogRates", $.ui.dialog, {
+    $.widget("adminhtml.dialogRates", $.mage.modal, {
         options: {
             itemRate: {},
             itemRateDefault: {}
         },
         _create: function() {
-            $.ui.dialog.prototype._create.apply(this);
+            this._super();
             this._getFormData(this.options.itemRateDefault);
         },
-        open: function() {
-            var zipIsRange = this.uiDialog.find('#zip_is_range');
-            if (this._trigger('beforeOpen', null, this) === false) {
-                return;
-            }
+        openModal: function() {
+            var zipIsRange = this.modal.find('#zip_is_range');
+
             this._applyItem(this.options.itemRateDefault);
             if (this.options.itemRate && !$.isEmptyObject(this.options.itemRate)) {
                 this._applyItem(this.options.itemRate);
@@ -35,13 +34,14 @@ require([
             zipIsRange.attr('checked', zipIsRange.val() == 1);
             zipIsRange.trigger('change');
             updater.update();
-            $.ui.dialog.prototype.open.apply(this);
+            this._super();
         },
-        close: function() {
-            $.ui.dialog.prototype.close.apply(this);
+        closeModal: function() {
+            this._super();
         },
         _applyItem: function(rate) {
-            var dialogElement = this.uiDialog;
+            var dialogElement = this.modal;
+
             $.each(rate, function(key, value) {
                 if (!value) {
                     value = '';
@@ -53,7 +53,7 @@ require([
             this._getFormData(this.options.itemRate);
         },
         _getFormData: function(data) {
-            $.each(this.uiDialog.find(':input'), function() {
+            $.each(this.modal.find(':input'), function() {
                 if (this.name) {
                     data[this.name] = this.value
                 }
@@ -191,7 +191,7 @@ require([
                     .on('click.mselectAdd', '.mselect-button-add', function () {
                         taxRateForm
                                 .dialogRates({itemRate: {}})
-                                .dialogRates('open');
+                                .dialogRates('openModal');
                     })
                     .on('click.mselect-checked', '.mselect-list-item input', function (event) {
                         var el = $(this),
@@ -203,42 +203,20 @@ require([
 
             taxRateForm.dialogRates({
                 title: '<?php echo __('Tax Rate'); ?>',
-                autoOpen: false,
+                type: 'slide',
                 id: '<?php echo $block->getJsId() ?>',
-                minWidth: 560,
-                modal: true,
-                dialogClass: 'tax-rate-popup',
-                resizable: false,
-                width: '75%',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    var topMargin;
-
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-                    topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 80;
-                    $(this).closest('.ui-dialog').css({
-                        top: '1%',
-                        position: 'absolute',
-                        left: '10%'
-                    });
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                    $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
-                },
-                close: function() {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+                modalClass: 'tax-rate-popup',
+                closed: function () {
+                    taxRateFormElement.data('validation').clearError();
                 },
                 buttons: [{
                     text: '<?php echo __('Save'); ?>',
-                    id: '<?php echo $block->getJsId('apply-button') ?>',
                     'class': 'action-save action-primary',
                     click: function() {
-                        $(this).dialogRates('updateItemRate');
-                        var itemRate = $(this).dialogRates('option').itemRate,
+                        this.updateItemRate();
+                        var itemRate = this.option('itemRate'),
                             itemRateData = $.extend({}, itemRate);
+
                         if (itemRateData.itemElement) {
                             delete itemRateData.itemElement;
                         }
@@ -270,7 +248,7 @@ require([
                                         taxRateField.find('option[value=""]:last')
                                             .val(itemRate.tax_calculation_rate_id);
                                     }
-                                    taxRateForm.dialogRates("close");
+                                    taxRateForm.dialogRates('closeModal');
                                 } else {
                                     if (result.error_message)
                                         alert(result.error_message);
@@ -285,14 +263,6 @@ require([
                         };
                         $.ajax(ajaxOptions);
                     }
-                }, {
-                    text: '<?php echo __('Cancel'); ?>',
-                    id: '<?php echo $block->getJsId('close-button') ?>',
-                    'class': 'action-close',
-                    click: function() {
-                        $(this).dialogRates("close");
-                        taxRateFormElement.data('validation').clearError();
-                    }
                 }]
             });
             $('.grid-loading-mask').hide();
-- 
GitLab


From 255e22e4afb471d3ba92559fbf51bec7df2a9c0c Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 11 Sep 2015 16:12:29 +0300
Subject: [PATCH 059/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../integration/popup_container.phtml         | 86 ++++++++++++-------
 1 file changed, 53 insertions(+), 33 deletions(-)

diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
index 8e9d1d18451..3f26feb2265 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
@@ -11,9 +11,10 @@
 <script>
 require([
     "jquery",
+    'Magento_Ui/js/modal/modal',
     "jquery/ui",
 	"Magento_Integration/js/integration"
-], function($){
+], function($, modal){
 
     window.integration = new Integration(
         '<?php echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
@@ -28,42 +29,61 @@ require([
      */
     $(function () {
         $('div#integrationGrid').on('click', 'button#delete', function (e) {
-            $('#integration-delete-container').dialog({
-                modal: true,
-                autoOpen: true,
-                resizable: false,
-                minHeight: 0,
-                width: '75%',
-                dialogClass: 'no-close ui-popup-message',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight();
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                },
-                close: function () {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                },
+            $('#integration-delete-container').modal({
+                type: 'popup',
                 buttons: [{
-                    text: $.mage.__('Delete'),
-                    'class': 'action-primary',
+                    text: 'Cancel',
+                    class: '',
                     click: function () {
-                        $(this).dialog("close");
-                        window.location.href = $(e.target).data('url');
+                        this.closeModal();
                     }
-                }, {
-                    text: $.mage.__('Cancel'),
-                    'class': 'action-close',
-                    click: function () {
-                        $(this).dialog('close');
+                },
+                    {
+                        text: 'Delete',
+                        class: '',
+                        click: function (e) {
+                            window.location.href = $(e.target).data('url');
+                        }
                     }
-                }]
-            });
+                ]
+            }).trigger('openModal');
+
+//            $('#integration-delete-container').dialog({
+//                modal: true,
+//                autoOpen: true,
+//                resizable: false,
+//                minHeight: 0,
+//                width: '75%',
+//                dialogClass: 'no-close ui-popup-message',
+//                position: {
+//                    my: 'left top',
+//                    at: 'center top',
+//                    of: 'body'
+//                },
+//                open: function () {
+//                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+//
+//                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight();
+//                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
+//                },
+//                close: function () {
+//                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+//                },
+//                buttons: [{
+//                    text: $.mage.__('Delete'),
+//                    'class': 'action-primary',
+//                    click: function () {
+//                        $(this).dialog("close");
+//                        window.location.href = $(e.target).data('url');
+//                    }
+//                }, {
+//                    text: $.mage.__('Cancel'),
+//                    'class': 'action-close',
+//                    click: function () {
+//                        $(this).dialog('close');
+//                    }
+//                }]
+//            });
             e.stopPropagation();
         });
     });
-- 
GitLab


From 7775e9b8a71de9205c79dceb2400d3c74fa76b40 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 11 Sep 2015 16:25:36 +0300
Subject: [PATCH 060/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../integration/popup_container.phtml         | 36 -------------------
 1 file changed, 36 deletions(-)

diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
index 3f26feb2265..2de7d391add 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
@@ -48,42 +48,6 @@ require([
                 ]
             }).trigger('openModal');
 
-//            $('#integration-delete-container').dialog({
-//                modal: true,
-//                autoOpen: true,
-//                resizable: false,
-//                minHeight: 0,
-//                width: '75%',
-//                dialogClass: 'no-close ui-popup-message',
-//                position: {
-//                    my: 'left top',
-//                    at: 'center top',
-//                    of: 'body'
-//                },
-//                open: function () {
-//                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-//
-//                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight();
-//                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
-//                },
-//                close: function () {
-//                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-//                },
-//                buttons: [{
-//                    text: $.mage.__('Delete'),
-//                    'class': 'action-primary',
-//                    click: function () {
-//                        $(this).dialog("close");
-//                        window.location.href = $(e.target).data('url');
-//                    }
-//                }, {
-//                    text: $.mage.__('Cancel'),
-//                    'class': 'action-close',
-//                    click: function () {
-//                        $(this).dialog('close');
-//                    }
-//                }]
-//            });
             e.stopPropagation();
         });
     });
-- 
GitLab


From aafe3ff5da7ab59b4651bff21d81236f62fe9ef2 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 11 Sep 2015 16:39:25 +0300
Subject: [PATCH 061/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/templates/integration/popup_container.phtml  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
index 2de7d391add..a7d284b7e78 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
@@ -41,7 +41,7 @@ require([
                     {
                         text: 'Delete',
                         class: '',
-                        click: function (e) {
+                        click: function () {
                             window.location.href = $(e.target).data('url');
                         }
                     }
-- 
GitLab


From 39ecfe2093298377ee6ce63daac1da4b75025a06 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 11 Sep 2015 18:11:28 +0300
Subject: [PATCH 062/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../integration/popup_container.phtml         | 64 ++++++++-----------
 1 file changed, 27 insertions(+), 37 deletions(-)

diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
index a7d284b7e78..f9dedb155fc 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
@@ -9,50 +9,40 @@
  */
 ?>
 <script>
-require([
-    "jquery",
-    'Magento_Ui/js/modal/modal',
-    "jquery/ui",
-	"Magento_Integration/js/integration"
-], function($, modal){
+    require([
+        "jquery",
+        'Magento_Ui/js/modal/confirm',
+        "jquery/ui",
+        "Magento_Integration/js/integration"
+    ], function ($, Confirm) {
 
-    window.integration = new Integration(
-        '<?php echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
-        '<?php echo $block->getUrl('*/*/tokensDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
-        '<?php echo $block->getUrl('*/*/tokensExchange', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
-        '<?php echo $block->getUrl('*/*'); ?>',
-        '<?php echo $block->getUrl('*/*/loginSuccessCallback'); ?>'
-    );
+        window.integration = new Integration(
+            '<?php echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
+            '<?php echo $block->getUrl('*/*/tokensDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
+            '<?php echo $block->getUrl('*/*/tokensExchange', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
+            '<?php echo $block->getUrl('*/*'); ?>',
+            '<?php echo $block->getUrl('*/*/loginSuccessCallback'); ?>'
+        );
 
-    /**
-     * Confirm dialog for delete integration action
-     */
-    $(function () {
-        $('div#integrationGrid').on('click', 'button#delete', function (e) {
-            $('#integration-delete-container').modal({
-                type: 'popup',
-                buttons: [{
-                    text: 'Cancel',
-                    class: '',
-                    click: function () {
-                        this.closeModal();
-                    }
-                },
-                    {
-                        text: 'Delete',
-                        class: '',
-                        click: function () {
+        /**
+         * Confirm dialog for delete integration action
+         */
+        $(function () {
+            $('div#integrationGrid').on('click', 'button#delete', function (e) {
+
+                new Confirm({
+                    title: 'Are you sure?',
+                    content: "Are you sure you want to delete this integration? You can't undo this action.",
+                    actions: {
+                        confirm: function () {
                             window.location.href = $(e.target).data('url');
                         }
                     }
-                ]
-            }).trigger('openModal');
-
-            e.stopPropagation();
+                });
+                e.stopPropagation();
+            });
         });
     });
-
-});
 </script>
 
 <div id="integration-popup-container" style="display: none;"></div>
-- 
GitLab


From 7a125ae72f6a62f8bee1ef9a17e0cab94cddddfc Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 11 Sep 2015 18:19:51 +0300
Subject: [PATCH 063/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/web/js/integration.js      | 68 ++++++-------------
 .../Ui/view/base/web/js/modal/modal.js        |  4 ++
 2 files changed, 26 insertions(+), 46 deletions(-)

diff --git a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
index 3e299ddf77e..0dd90489499 100644
--- a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
+++ b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
@@ -8,7 +8,8 @@
 define([
     "jquery",
     "jquery/ui",
-    "mage/translate"
+    "mage/translate",
+    'Magento_Ui/js/modal/modal'
 ], function($){
     "use strict";
 
@@ -168,12 +169,12 @@ define([
                         $('body').trigger('processStart');
                         //Check for window closed
                         window.location.reload();
-                        IdentityLogin.jqInfoDialog.dialog('close');
+                        IdentityLogin.jqInfoDialog.modal('closeModal');
                     }
                 } catch (e) {
                     //squash. In case Window closed without success callback, clear polling
                     if (IdentityLogin.win.closed) {
-                        IdentityLogin.jqInfoDialog.dialog('close');
+                        IdentityLogin.jqInfoDialog.modal('closeModal');
                         clearInterval(IdentityLogin.checker);
                     }
                     return;
@@ -217,53 +218,24 @@ define([
                     } catch (e) {
                         //This is expected if result is not json. Do nothing.
                     }
+
                     if (identityLinkUrl && consumerId && popupHtml) {
                         IdentityLogin.invokePopup(identityLinkUrl, consumerId, popup);
                     } else {
                         popupHtml = result;
                     }
 
+                    if (popup.length === 0){
+                        popup = $('<div/>');
+                    }
                     popup.html(popupHtml);
 
                     var buttons = [],
                         dialogProperties = {
                             title: title,
-                            modal: true,
-                            autoOpen: true,
-                            minHeight: 450,
-                            minWidth: 600,
-                            width: '75%',
+                            type: 'slide',
                             dialogClass: dialog == 'permissions' ? 'integration-dialog' : 'integration-dialog no-close',
-                            closeOnEscape: false,
-                            position: {
-                                my: 'left top',
-                                at: 'center top',
-                                of: 'body'
-                            },
-                            open: function () {
-                                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                                var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                                $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                            },
-                            close: function () {
-                                $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                            }
                         };
-                    if (dialog == 'permissions') {
-                        // We don't need this button in 'tokens' dialog, since if you got there - integration is
-                        // already activated and have necessary tokens
-                        buttons.push({
-                            text: $.mage.__('Cancel'),
-                            'class': 'action-close',
-                            click: function () {
-                                $(this).dialog('close');
-                            }
-                        });
-                    } else if (dialog == 'tokensExchange') {
-                        dialogProperties['minHeight'] = 150;
-                        dialogProperties['minWidth'] = 500;
-                    }
 
                     // Add confirmation button to the list of dialog buttons. okButton not set for tokenExchange dialog
                     if (okButton) {
@@ -273,7 +245,8 @@ define([
                     if (buttons.length > 0) {
                         dialogProperties['buttons'] = buttons
                     }
-                    popup.dialog(dialogProperties);
+                    popup.modal(dialogProperties);
+                    popup.modal('openModal');
                 },
                 error: function (jqXHR, status, error) {
                     alert($.mage.__('Sorry, something went wrong. Please try again later.'));
@@ -322,17 +295,20 @@ define([
                         permissions: {
                             text: (isReauthorize == '1') ? $.mage.__('Reauthorize') : $.mage.__('Allow'),
                             'class': 'action-primary',
-                            // This data is going to be used in the next dialog
-                            'data-row-id': integrationId,
-                            'data-row-name': integrationName,
-                            'data-row-dialog': (isTokenExchange == '1') ? 'tokensExchange' : 'tokens',
-                            'data-row-is-reauthorize': isReauthorize,
-                            'data-row-is-token-exchange': isTokenExchange,
+                            attr: {
+                                'data-row-id': integrationId,
+                                'data-row-name': integrationName,
+                                'data-row-dialog': (isTokenExchange == '1') ? 'tokensExchange' : 'tokens',
+                                'data-row-is-reauthorize': isReauthorize,
+                                'data-row-is-token-exchange': isTokenExchange
+                            },
                             click: function () {
                                 // Find the 'Allow' button and clone - it has all necessary data, but is going to be
                                 // destroyed along with the current dialog
-                                var ctx = $(this).parent().find('button.action-primary').clone(true);
-                                $(this).dialog('destroy');
+                                var ctx = this.modal.find('button.action-primary').clone(true);
+
+                                this.closeModal();
+                                this.modal.remove();
                                 // Make popup out of data we saved from 'Allow' button
                                 window.integration.popup.show(ctx);
                             }
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 84074ebf980..b1ef9210907 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -66,6 +66,7 @@ define([
             buttons: [{
                 text: $.mage.__('Ok'),
                 class: '',
+                attr: {},
 
                 /**
                  * Default action on button click
@@ -246,6 +247,9 @@ define([
             _.each(this.options.buttons, function (btn, key) {
                 var button = that.buttons[key];
 
+                if (btn.attr) {
+                    $(button).attr(btn.attr);
+                }
                 $(button).on('click', _.bind(btn.click, that));
             });
         },
-- 
GitLab


From e61c81aba24ba67cc81ff6a6b89010354c7208a4 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 11 Sep 2015 19:29:06 +0300
Subject: [PATCH 064/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../affected-attribute-set-selector/js.phtml  | 148 ++++++++----------
 1 file changed, 68 insertions(+), 80 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
index 4db2417ab52..fc7506ff4bf 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
@@ -16,7 +16,8 @@
 
     require([
         "jquery",
-        "jquery/ui"
+        "jquery/ui",
+        'Magento_Ui/js/modal/modal'
     ], function($){
         $form = $('#affected-attribute-set-form');
 
@@ -31,89 +32,76 @@
             id: 'new-variations-attribute-set-id'
         }));
 
-        $form
-            .dialog({
-                title: '<?php echo __('Choose Affected Product Template'); ?>',
-                autoOpen: false,
-                id: '<?php echo $block->getJsId() ?>',
-                width: '75%',
-                modal: true,
-                resizable: false,
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight();
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                },
-                close: function () {
-                    resetValidation();
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+        $form.modal({
+            title: '<?php echo __('Choose Affected Product Template'); ?>',
+            type: 'popup',
+            closed: function () {
+                resetValidation();
+            },
+            buttons: [{
+                text: '<?php echo __('Confirm'); ?>',
+                'class': 'action-primary',
+                attr: {
+                    'id': '<?php echo $block->getJsId('confirm-button') ?>'
                 },
-                buttons: [{
-                    text: '<?php echo __('Confirm'); ?>',
-                    id: '<?php echo $block->getJsId('confirm-button') ?>',
-                    'class': 'action-primary',
-                    click: function() {
-                        if ($form.find('input[name=affected-attribute-set]:checked').val() == 'current') {
-                            $('#new-variations-attribute-set-id').val($('#attribute_set_id').val());
-                            $form.dialog('close')
-                                .data('target').click();
-                            return;
-                        }
-
-                        $form.find('.messages .message.error').hide();
-                        if (!$form.find('form').validation().valid()) {
-                            $form.find('input[name=new-attribute-set-name]').focus();
-                            return false;
-                        }
-
-                        $.ajax({
-                            type: 'POST',
-                            url: '<?php echo $block->getAttributeSetCreationUrl()?>',
-                            data: {
-                                gotoEdit: 1,
-                                attribute_set_name: $form.find('input[name=new-attribute-set-name]').val(),
-                                skeleton_set: $('#attribute_set_id').val(),
-                                form_key: '<?php echo $block->getFormKey()?>',
-                                return_session_messages_only: 1
-                            },
-                            dataType: 'json',
-                            showLoader: true,
-                            context: $form
-                        })
-                            .success(function (data) {
-                                if (!data.error) {
-                                    $('#new-variations-attribute-set-id').val(data.id);
-                                    $form.dialog('close')
-                                        .data('target').click();
-                                } else {
-                                    $form.find('.messages .message.error').replaceWith($(data.messages).find('.message.error'));
-                                }
-                            });
+                click: function() {
+                    if ($form.find('input[name=affected-attribute-set]:checked').val() == 'current') {
+                        $('#new-variations-attribute-set-id').val($('#attribute_set_id').val());
+                        $form.modal('closeModal')
+                            .data('target').click();
+                        return;
+                    }
 
+                    $form.find('.messages .message.error').hide();
+                    if (!$form.find('form').validation().valid()) {
+                        $form.find('input[name=new-attribute-set-name]').focus();
                         return false;
                     }
-                },{
-                    text: '<?php echo __('Cancel'); ?>',
-                    id: '<?php echo $block->getJsId('close-button') ?>',
-                    'class': 'action-close',
-                    click: function() {
-                        $form.dialog('close');
-                    }
-                }]
-            })
-            .find('input[name=affected-attribute-set]').on('change', function() {
-                $('#affected-attribute-set-new-name-container')[$(this).val() == 'new' ? 'show' : 'hide']();
-                resetValidation();
-                if ($(this).val() == 'new') {
-                    $form.find('input[name=new-attribute-set-name]').focus();
+
+                    $.ajax({
+                        type: 'POST',
+                        url: '<?php echo $block->getAttributeSetCreationUrl()?>',
+                        data: {
+                            gotoEdit: 1,
+                            attribute_set_name: $form.find('input[name=new-attribute-set-name]').val(),
+                            skeleton_set: $('#attribute_set_id').val(),
+                            form_key: '<?php echo $block->getFormKey()?>',
+                            return_session_messages_only: 1
+                        },
+                        dataType: 'json',
+                        showLoader: true,
+                        context: $form
+                    })
+                        .success(function (data) {
+                            if (!data.error) {
+                                $('#new-variations-attribute-set-id').val(data.id);
+                                $form.modal('closeModal')
+                                    .data('target').click();
+                            } else {
+                                $form.find('.messages .message.error').replaceWith($(data.messages).find('.message.error'));
+                            }
+                        });
+
+                    return false;
                 }
-            });
+            },{
+                text: '<?php echo __('Cancel'); ?>',
+                'class': 'action-close',
+                attr: {
+                    'id': '<?php echo $block->getJsId('close-button') ?>'
+                },
+                click: function() {
+                    this.closeModal();
+                }
+            }]
+        })
+        .find('input[name=affected-attribute-set]').on('change', function() {
+            $('#affected-attribute-set-new-name-container')[$(this).val() == 'new' ? 'show' : 'hide']();
+            resetValidation();
+            if ($(this).val() == 'new') {
+                $form.find('input[name=new-attribute-set-name]').focus();
+            }
+        });
     });
     
     require([
@@ -168,7 +156,7 @@
 
             event.stopImmediatePropagation();
 
-            $form.data('target', event.target).dialog('open');
+            $form.data('target', event.target).modal('openModal');
         });
 
     });
-- 
GitLab


From ac8a7f8e5d24f5c8f037645047a97b43e8e18c68 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Sun, 13 Sep 2015 12:52:14 +0300
Subject: [PATCH 065/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/templates/catalog/category/tree.phtml   | 2 +-
 .../view/adminhtml/web/catalog/product-attributes.js       | 7 +++----
 .../Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php   | 2 +-
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 28d2fd4c94f..1a37b2eb2a1 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -251,7 +251,7 @@
             function _renderNewTree(config, scopeParams) {
                 if (!config) {
                     var config = defaultLoadTreeParams;
-                }Are you sure you want to delete this integration? You can't undo this action
+                }
                 if (tree) {
                     tree.purgeListeners();
                     tree.el.dom.innerHTML = '';
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
index 06df40c13a8..b48cfec50ea 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
@@ -16,17 +16,16 @@ define([
             });
         },
 
-        _initModal: function() {
+        _initModal: function () {
             var self = this;
 
             this.modal = $('<div id="create_new_attribute"/>').modal({
                 title: 'New Attribute',
-                modalClass: 'AAAAA',
                 type: 'slide',
                 buttons: [],
                 opened: function () {
                     self.iframe = $('<iframe id="create_new_attribute_container">').attr({
-                        src: self._prepareUrl(event),
+                        src: self._prepareUrl(),
                         frameborder: 0
                     });
                     self.modal.append(self.iframe);
@@ -41,7 +40,7 @@ define([
                         doc.execCommand('stop');
                         self.iframe.remove();
                     }
-                    self.modal.data('modal').modal.remove()
+                    self.modal.data('modal').modal.remove();
                 }
             });
         },
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
index 20688802c89..7f973d398b8 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
@@ -22,7 +22,7 @@ class Option extends Form
      *
      * @var string
      */
-    protected $searchGridBlock = "ancestor::body//div[contains(@style,'display: block') and @role='dialog']";
+    protected $searchGridBlock = "ancestor::body//aside[contains(@class,'_show') and @data-role='modal']";
 
     /**
      * Added product row
-- 
GitLab


From f678e417ad488206dac4ac259e54ea498490ff84 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 14 Sep 2015 09:48:34 +0300
Subject: [PATCH 066/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../Block/System/Messages.php                 |  7 +-
 .../templates/system/messages/popup.phtml     | 33 +++----
 .../view/adminhtml/web/system/notification.js | 14 ++-
 lib/web/mage/adminhtml/browser.js             | 96 ++++++++++++-------
 4 files changed, 81 insertions(+), 69 deletions(-)

diff --git a/app/code/Magento/AdminNotification/Block/System/Messages.php b/app/code/Magento/AdminNotification/Block/System/Messages.php
index 949ba575abe..4ba73969e8d 100644
--- a/app/code/Magento/AdminNotification/Block/System/Messages.php
+++ b/app/code/Magento/AdminNotification/Block/System/Messages.php
@@ -120,11 +120,8 @@ class Messages extends \Magento\Backend\Block\Template
         return $this->jsonHelper->jsonEncode(
             [
                 'systemMessageDialog' => [
-                    'autoOpen' => false,
-                    'width' => '75%',
-                    'modal' => true,
-                    'minHeight' => '0',
-                    'dialogClass' => 'ui-dialog-active ui-popup-message',
+                    'buttons' => [],
+                    'modalClass' => 'ui-dialog-active ui-popup-message',
                     'ajaxUrl' => $this->_getMessagesUrl()
                 ],
             ]
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 3652e763a1c..0c19d8be9d8 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
@@ -22,29 +22,18 @@
 <script>
 require([
     "jquery",
-    "jquery/ui"
+    "jquery/ui",
+    "Magento_Ui/js/modal/modal"
 ], function($){
-
-    $(function() {
-        $("#system_messages_list").dialog({
-            autoOpen: true,
-            resizable: false,
-            width: '75%',
-            modal: true,
-            minHeight: '0',
-            dialogClass: 'ui-popup-message',
-            position: {
-                my: 'left+12.5% top',
-                at: 'center top',
-                of: 'body'
-            },
-            open: function() {
-                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 10;
-                $(this).closest('.ui-dialog').css('margin-top', topMargin);
-            }
+    if (this.modal) {
+        this.modal.html($("#system_messages_list").html());
+    } else {
+        this.modal = $("#system_messages_list").modal({
+            modalClass: 'ui-popup-message',
+            type: 'popup',
+            buttons: []
         });
-    });
+    }
+    this.modal.modal('openModal');
 });
 </script>
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
index 95a228c6fa9..5cab64ddd03 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
@@ -5,11 +5,12 @@
 define([
     'jquery',
     'mage/template',
-    'jquery/ui'
+    'jquery/ui',
+    'Magento_Ui/js/modal/modal'
 ], function ($, mageTemplate) {
     'use strict';
 
-    $.widget('mage.systemMessageDialog', $.ui.dialog, {
+    $.widget('mage.systemMessageDialog', $.mage.modal, {
         options: {
             systemMessageTemplate:
                 '<% _.each(data.items, function(item) { %>' +
@@ -19,7 +20,7 @@ define([
                 '<% }); %>'
         },
 
-        open: function (severity) {
+        openModal: function (severity) {
             var superMethod = $.proxy(this._super, this);
 
             $.ajax({
@@ -47,16 +48,19 @@ define([
             }, this));
 
             return this;
+        },
+        closeModal: function () {
+            this._super();
         }
     });
 
     $(document).ready(function () {
         $('#system_messages .message-system-short .error').on('click', function () {
-            $('#message-system-all').systemMessageDialog('open', 1);
+            $('#message-system-all').systemMessageDialog('openModal', 1);
         });
 
         $('#system_messages .message-system-short .warning').on('click', function () {
-            $('#message-system-all').systemMessageDialog('open', 2);
+            $('#message-system-all').systemMessageDialog('openModal', 2);
         });
     });
 
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index 68fe9233e81..8d33b001ab2 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -6,11 +6,13 @@
 define([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/prompt",
+    "Magento_Ui/js/modal/confirm",
     "Magento_Ui/js/modal/modal",
     "jquery/ui",
     "jquery/jstree/jquery.jstree",
     "mage/mage"
-], function($, tinyMCE){
+], function($, tinyMCEm, prompt, confirm){
     
     MediabrowserUtility = {
         windowId: 'modal_dialog_message',
@@ -245,7 +247,10 @@ define([
         },
 
         newFolder: function() {
-            var folderName = prompt(this.options.newFolderPrompt, '');
+            var folderName = prompt({
+                content: this.options.newFolderPrompt
+            });
+            debugger;
             if (!folderName) {
                 return false;
             }
@@ -270,46 +275,63 @@ define([
         },
 
         deleteFolder: function() {
-            if (!confirm(this.options.deleteFolderConfirmationMessage)) {
-                return false;
-            }
+            var self = this;
 
-            return $.ajax({
-                url: this.options.deleteFolderUrl,
-                dataType: 'json',
-                data: {
-                    node: this.activeNode.id,
-                    store: this.options.storeId,
-                    form_key: FORM_KEY
-                },
-                context: this.element,
-                showLoader: true
-            }).done($.proxy(function(data) {
-                this.tree.jstree('refresh', this.activeNode.id);
-            }, this));
+            confirm({
+                content: this.options.deleteFolderConfirmationMessage,
+                actions: {
+                    confirm: function () {
+                        return $.ajax({
+                            url: self.options.deleteFolderUrl,
+                            dataType: 'json',
+                            data: {
+                                node: self.activeNode.id,
+                                store: self.options.storeId,
+                                form_key: FORM_KEY
+                            },
+                            context: self.element,
+                            showLoader: true
+                        }).done($.proxy(function(data) {
+                            self.tree.jstree('refresh', self.activeNode.id);
+                        }, this));
+                    },
+                    cancel: function () {
+                        return false;
+                    }
+                }
+            });
         },
 
         deleteFiles: function() {
-            if (!confirm(this.options.deleteFileConfirmationMessage)) {
-                return false;
-            }
-            var selectedFiles = this.element.find('[data-row=file].selected');
-            var ids = selectedFiles.map(function(index, file) {
-                return $(this).attr('id');
-            }).toArray();
+            var self = this;
 
-            return $.ajax({
-                url: this.options.deleteFilesUrl,
-                data: {
-                    files: ids,
-                    store: this.options.storeId,
-                    form_key: FORM_KEY
-                },
-                context: this.element,
-                showLoader: true
-            }).done($.proxy(function(data) {
-                this.reload();
-            }, this));
+            confirm({
+                content: this.options.deleteFileConfirmationMessage,
+                actions: {
+                    confirm: function () {
+                        var selectedFiles = self.element.find('[data-row=file].selected');
+                        var ids = selectedFiles.map(function(index, file) {
+                            return $(this).attr('id');
+                        }).toArray();
+
+                        return $.ajax({
+                            url: self.options.deleteFilesUrl,
+                            data: {
+                                files: ids,
+                                store: self.options.storeId,
+                                form_key: FORM_KEY
+                            },
+                            context: self.element,
+                            showLoader: true
+                        }).done($.proxy(function(data) {
+                            self.reload();
+                        }, this));
+                    },
+                    cancel: function () {
+                        return false;
+                    }
+                }
+            });
         },
 
         drawBreadcrumbs: function(data) {
-- 
GitLab


From f8c1e3b502e47219e7959fe4ad50702de5188eb8 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 14 Sep 2015 10:58:54 +0300
Subject: [PATCH 067/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../Ui/view/base/web/js/modal/prompt.js       | 70 +++++++++++++++++++
 lib/web/mage/adminhtml/browser.js             | 50 ++++++-------
 2 files changed, 96 insertions(+), 24 deletions(-)
 create mode 100644 app/code/Magento/Ui/view/base/web/js/modal/prompt.js

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
new file mode 100644
index 00000000000..60ea4e7f0c8
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -0,0 +1,70 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'underscore',
+    'jquery/ui',
+    'Magento_Ui/js/modal/modal',
+    'mage/translate'
+], function ($, _) {
+    'use strict';
+
+    $.widget('mage.prompt', $.mage.modal, {
+        options: {
+            modalClass: 'prompt',
+            promptField: '[data-role="promptField"]',
+            actions: {
+                always: function(){},
+                confirm: function(){},
+                cancel: function(){}
+            },
+            buttons: [{
+                text: $.mage.__('Cancel'),
+                class: 'action-tertiary',
+                click: function(){
+                    this.closeModal();
+                }
+            }, {
+                text: $.mage.__('OK'),
+                class: 'action-secondary',
+                click: function() {
+                    this.closeModal(true);
+                }
+            }]
+        },
+        _create: function() {
+            this._super();
+            this.modal.find(this.options.modalContent).append('<input value="" data-role="promptField" type="text"/>');
+            this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
+            this.openModal();
+        },
+        _remove: function() {
+            this.modal.remove();
+        },
+        openModal: function() {
+            return this._super();
+        },
+        closeModal: function(result) {
+            var value;
+
+            result = result || false;
+
+            if (result) {
+                value =  this.modal.find(this.options.promptField).val();
+                this.options.actions.confirm(value);
+            } else {
+                this.options.actions.cancel();
+            }
+            this.options.actions.always();
+            this.element.bind('confirmclosed', _.bind(this._remove, this));
+
+            return this._super();
+        }
+    });
+
+    return function (config) {
+        return $('<div></div>').html(config.content).prompt(config);
+    };
+});
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index 8d33b001ab2..05fa6f7fedd 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -247,31 +247,33 @@ define([
         },
 
         newFolder: function() {
-            var folderName = prompt({
-                content: this.options.newFolderPrompt
-            });
-            debugger;
-            if (!folderName) {
-                return false;
-            }
-            return $.ajax({
-                url: this.options.newFolderUrl,
-                dataType: 'json',
-                data: {
-                    name: folderName,
-                    node: this.activeNode.id,
-                    store: this.options.storeId,
-                    form_key: FORM_KEY
-                },
-                context: this.element,
-                showLoader: true
-            }).done($.proxy(function(data) {
-                if (data.error) {
-                    window.alert(data.message);
-                } else {
-                    this.tree.jstree('refresh',  this.element.find('[data-id="' + this.activeNode.id + '"]'));
+            var self = this;
+
+            prompt({
+                title: this.options.newFolderPrompt,
+                actions: {
+                    confirm: function (folderName) {
+                        return $.ajax({
+                            url: self.options.newFolderUrl,
+                            dataType: 'json',
+                            data: {
+                                name: folderName,
+                                node: self.activeNode.id,
+                                store: self.options.storeId,
+                                form_key: FORM_KEY
+                            },
+                            context: self.element,
+                            showLoader: true
+                        }).done($.proxy(function(data) {
+                            if (data.error) {
+                                window.alert(data.message);
+                            } else {
+                                self.tree.jstree('refresh',  self.element.find('[data-id="' + self.activeNode.id + '"]'));
+                            }
+                        }, this));
+                    }
                 }
-            }, this));
+            });
         },
 
         deleteFolder: function() {
-- 
GitLab


From b15d9507d529fa922b53ff5803545412e21c62bd Mon Sep 17 00:00:00 2001
From: Tibor Kotosz <tkotosz@inviqa.com>
Date: Fri, 4 Sep 2015 17:24:49 +0200
Subject: [PATCH 068/420] Fix invalid @method phpdoc to prevent prophecy
 mocking error

---
 .../Magento/Backend/Block/Widget/Button/Item.php | 12 ++++++------
 .../Block/Widget/Button/Toolbar/Container.php    |  4 ++--
 .../Product/Attribute/Edit/Tab/Options.php       |  2 +-
 app/code/Magento/Catalog/Model/Product.php       |  2 +-
 .../Model/Config/Backend/Address/Street.php      |  2 +-
 .../Block/Adminhtml/Shopcart/Abandoned/Grid.php  |  2 +-
 .../Adminhtml/Order/CreditmemoLoader.php         | 16 ++++++++--------
 .../Adminhtml/Order/ShipmentLoader.php           | 16 ++++++++--------
 .../Adminhtml/Wysiwyg/Files/Content/Files.php    |  2 +-
 9 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Widget/Button/Item.php b/app/code/Magento/Backend/Block/Widget/Button/Item.php
index a500f836312..73ed2c5f50e 100644
--- a/app/code/Magento/Backend/Block/Widget/Button/Item.php
+++ b/app/code/Magento/Backend/Block/Widget/Button/Item.php
@@ -7,12 +7,12 @@
 namespace Magento\Backend\Block\Widget\Button;
 
 /**
- * @method string getButtonKey
- * @method string getRegion
- * @method string getName
- * @method int getLevel
- * @method int getSortOrder
- * @method string getTitle
+ * @method string getButtonKey()
+ * @method string getRegion()
+ * @method string getName()
+ * @method int getLevel()
+ * @method int getSortOrder()
+ * @method string getTitle()
  */
 class Item extends \Magento\Framework\DataObject
 {
diff --git a/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php b/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php
index e7c199cf478..959ef806acf 100644
--- a/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php
+++ b/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php
@@ -9,8 +9,8 @@ namespace Magento\Backend\Block\Widget\Button\Toolbar;
 use Magento\Backend\Block\Widget\Button\ContextInterface;
 
 /**
- * @method \Magento\Backend\Block\Widget\Button\Item getButtonItem
- * @method ContextInterface getContext
+ * @method \Magento\Backend\Block\Widget\Button\Item getButtonItem()
+ * @method ContextInterface getContext()
  * @method ContextInterface setContext(ContextInterface $context)
  */
 class Container extends \Magento\Framework\View\Element\AbstractBlock
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php
index eabcac9f715..b08fdb85de1 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php
@@ -8,7 +8,7 @@
  * Product attribute add/edit form options tab
  *
  * @method \Magento\Catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Options setReadOnly(bool $value)
- * @method null|bool getReadOnly
+ * @method null|bool getReadOnly()
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index dd0f5ec4ead..26a6f10defd 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -23,7 +23,7 @@ use Magento\Framework\Api\Data\ImageContentInterface;
  * @method array getAssociatedProductIds()
  * @method Product setNewVariationsAttributeSetId(int $value)
  * @method int getNewVariationsAttributeSetId()
- * @method int getPriceType
+ * @method int getPriceType()
  * @method Resource\Product\Collection getCollection()
  * @method string getUrlKey()
  * @method Product setUrlKey(string $urlKey)
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
index 5870718e463..4f4c92edd0d 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
@@ -10,7 +10,7 @@ use Magento\Framework\App\Config\ScopeConfigInterface;
 /**
  * Line count config model for customer address street attribute
  *
- * @method string getWebsiteCode
+ * @method string getWebsiteCode()
  */
 class Street extends \Magento\Framework\App\Config\Value
 {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
index 04e370c9736..70abcd68459 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
@@ -8,7 +8,7 @@ namespace Magento\Reports\Block\Adminhtml\Shopcart\Abandoned;
 /**
  * Adminhtml abandoned shopping carts report grid block
  *
- * @method \Magento\Reports\Model\Resource\Quote\Collection getCollection
+ * @method \Magento\Reports\Model\Resource\Quote\Collection getCollection()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.DepthOfInheritance)
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php
index cf69855c148..5918bdb0326 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php
@@ -14,14 +14,14 @@ use \Magento\Sales\Model\Order\CreditmemoFactory;
  * Class CreditmemoLoader
  *
  * @package Magento\Sales\Controller\Adminhtml\Order
- * @method CreditmemoLoader setCreditmemoId
- * @method CreditmemoLoader setCreditmemo
- * @method CreditmemoLoader setInvoiceId
- * @method CreditmemoLoader setOrderId
- * @method int getCreditmemoId
- * @method string getCreditmemo
- * @method int getInvoiceId
- * @method int getOrderId
+ * @method CreditmemoLoader setCreditmemoId($id)
+ * @method CreditmemoLoader setCreditmemo($creditMemo)
+ * @method CreditmemoLoader setInvoiceId($id)
+ * @method CreditmemoLoader setOrderId($id)
+ * @method int getCreditmemoId()
+ * @method string getCreditmemo()
+ * @method int getInvoiceId()
+ * @method int getOrderId()
  */
 class CreditmemoLoader extends DataObject
 {
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php
index 6bbaac5a04d..c837623ac8f 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php
@@ -12,14 +12,14 @@ use Magento\Framework\DataObject;
  * Class ShipmentLoader
  *
  * @package Magento\Shipping\Controller\Adminhtml\Order
- * @method ShipmentLoader setOrderId
- * @method ShipmentLoader setShipmentId
- * @method ShipmentLoader setShipment
- * @method ShipmentLoader setTracking
- * @method int getOrderId
- * @method int getShipmentId
- * @method array getShipment
- * @method array getTracking
+ * @method ShipmentLoader setOrderId($id)
+ * @method ShipmentLoader setShipmentId($id)
+ * @method ShipmentLoader setShipment($shipment)
+ * @method ShipmentLoader setTracking($tracking)
+ * @method int getOrderId()
+ * @method int getShipmentId()
+ * @method array getShipment()
+ * @method array getTracking()
  */
 class ShipmentLoader extends DataObject
 {
diff --git a/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php b/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php
index 9b11f465787..1af3ea8e4bc 100644
--- a/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php
+++ b/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php
@@ -9,7 +9,7 @@
  *
  * @method
  *  \Magento\Theme\Block\Adminhtml\Wysiwyg\Files\Content\Files setStorage(\Magento\Theme\Model\Wysiwyg\Storage $storage)
- * @method \Magento\Theme\Model\Wysiwyg\Storage getStorage
+ * @method \Magento\Theme\Model\Wysiwyg\Storage getStorage()
  */
 namespace Magento\Theme\Block\Adminhtml\Wysiwyg\Files\Content;
 
-- 
GitLab


From d016df6ef1d6bd27e83fa6715c2aab6781c237b5 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 14 Sep 2015 16:21:25 +0300
Subject: [PATCH 069/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/web/js/bundle-product.js   | 65 +++++++++----------
 .../Adminhtml/Product/Composite/Configure.php |  2 +-
 .../Test/Page/Adminhtml/OrderCreateIndex.xml  |  2 +-
 3 files changed, 34 insertions(+), 35 deletions(-)

diff --git a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
index 0d9a60d6469..17db65ef272 100644
--- a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
+++ b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
@@ -81,7 +81,7 @@ define([
             var widget = this;
             this._on({'click .add-selection': function (event) {
                 var $optionBox = $(event.target).closest('.option-box'),
-                    $selectionGrid = $optionBox.find('.selection-search'),
+                    $selectionGrid = $optionBox.find('.selection-search').clone(),
                     optionIndex = $optionBox.attr('id').replace('bundle_option_', ''),
                     productIds = [],
                     productSkus = [],
@@ -115,37 +115,36 @@ define([
                     }
                 });
 
-                if (this.modal) {
-                    this.modal.html($selectionGrid.html());
-                } else {
-                    this.modal = $selectionGrid.modal({
-                        title: $optionBox.find('input[name$="[title]"]').val() === '' ?
-                            $.mage.__('Add Products to New Option') :
-                            $.mage.__('Add Products to Option "%1"')
-                                .replace('%1',($('<div>').text($optionBox.find('input[name$="[title]"]').val()).html())),
-                        modalClass: 'bundle',
-                        type: 'slide',
-                        buttons: [{
-                            text: $.mage.__('Add Selected Products'),
-                            'class': 'action-primary action-add',
-                            click: function () {
-                                $.each(selectedProductList, function() {
-                                    window.bSelection.addRow(optionIndex, this);
-                                });
-                                bSelection.gridRemoval.each(
-                                    function(pair) {
-                                        $optionBox.find('.col-sku').filter(function () {
-                                            return $.trim($(this).text()) === pair.key; // find row by SKU
-                                        }).closest('tr').find('button.delete').trigger('click');
-                                    }
-                                );
-                                widget.refreshSortableElements();
-                                widget._updateSelectionsPositions.apply(widget.element);
-                                widget.modal.modal('closeModal');
-                            }
-                        }]
-                    });
-                }
+                $selectionGrid.modal({
+                    title: $optionBox.find('input[name$="[title]"]').val() === '' ?
+                        $.mage.__('Add Products to New Option') :
+                        $.mage.__('Add Products to Option "%1"')
+                            .replace('%1',($('<div>').text($optionBox.find('input[name$="[title]"]').val()).html())),
+                    modalClass: 'bundle',
+                    type: 'slide',
+                    closed: function(e, modal) {
+                        modal.modal.remove();
+                    },
+                    buttons: [{
+                        text: $.mage.__('Add Selected Products'),
+                        'class': 'action-primary action-add',
+                        click: function () {
+                            $.each(selectedProductList, function() {
+                                window.bSelection.addRow(optionIndex, this);
+                            });
+                            bSelection.gridRemoval.each(
+                                function(pair) {
+                                    $optionBox.find('.col-sku').filter(function () {
+                                        return $.trim($(this).text()) === pair.key; // find row by SKU
+                                    }).closest('tr').find('button.delete').trigger('click');
+                                }
+                            );
+                            widget.refreshSortableElements();
+                            widget._updateSelectionsPositions.apply(widget.element);
+                            $selectionGrid.modal('closeModal');
+                        }
+                    }]
+                });
                 $.ajax({
                     url: bSelection.selectionSearchUrl,
                     dataType: 'html',
@@ -156,7 +155,7 @@ define([
                         form_key: FORM_KEY
                     },
                     success: function(data) {
-                        widget.modal.html(data).modal('openModal');
+                        $selectionGrid.html(data).modal('openModal');
                     },
                     context: $('body'),
                     showLoader: true
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php
index 6416c7c9c7a..9af022411c2 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php
@@ -44,7 +44,7 @@ class Configure extends AbstractConfigureBlock
      *
      * @var string
      */
-    protected $okButton = '.ui-button.action-primary';
+    protected $okButton = '.action-primary[data-role="action"]';
 
     /**
      * Backend abstract block.
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml
index 9ca28ac5ddd..cdfafdfa832 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml
@@ -13,6 +13,6 @@
     <block name="actionsBlock" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector"/>
     <block name="couponsBlock" class="Magento\Sales\Test\Block\Adminhtml\Order\Create\Coupons" locator="#order-coupons" strategy="css selector"/>
     <block name="customerActivitiesBlock" class="Magento\Sales\Test\Block\Adminhtml\Order\Create\CustomerActivities" locator=".customer-current-activity" strategy="css selector"/>
-    <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
+    <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@data-role='modal' and .//*[@id='product_composite_configure'] and contains(@class,'_show')]" strategy="xpath"/>
   </page>
 </config>
-- 
GitLab


From 2c00c1037dff96be377885b11262ed326873e4dd Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Mon, 14 Sep 2015 17:02:16 +0300
Subject: [PATCH 070/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Fixed styles for WYSIWYG add image
---
 .../adminhtml/templates/browser/content.phtml |   2 +-
 .../adminhtml/templates/browser/content.phtml |   2 +-
 .../css/source/components/_modals_extend.less | 203 +++++++++++++-----
 3 files changed, 156 insertions(+), 51 deletions(-)

diff --git a/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml
index 7838058ef1d..c325b7e9012 100644
--- a/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml
+++ b/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml
@@ -20,7 +20,7 @@
                 <div class="title"><?php echo $block->getHeaderText() ?></div>
             </div>
         </div>
-        <div id="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_images.uploader') ?></div>
+        <div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_images.uploader') ?></div>
         <div id="contents"></div>
     </div>
 </div>
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
index 771617e8286..6f815e72074 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
@@ -24,6 +24,6 @@
     </table>
 </div>
 
-<div id="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div>
+<div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div>
 <div id="contents"></div>
 <div id="contents-newfolder" class="no-display"><?php echo $block->getChildHtml('wysiwyg_files.newfolder') ?></div>
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 6575810401f..4b2349af7c5 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -26,62 +26,167 @@
 
 .modal-popup,
 .modal-slide {
-  .action-close {
-    color: @modal-action-close__color;
-    position: absolute;
-    right: 0;
-    top: 0;
-    &:active {
-      transform: none;
-      &:before {
-        font-size: @modal-action-close__active__font-size;
-      }
-    }
-    &:hover {
-      &:before {
-        color: @modal-action-close__hover__color;
-      }
-    }
-    &:before {
-      font-size: @modal-action-close__font-size;
-    }
-  }
+    .action-close {
+        color: @modal-action-close__color;
+        position: absolute;
+        right: 0;
+        top: 0;
+        &:active {
+            transform: none;
+            &:before {
+                font-size: @modal-action-close__active__font-size;
+            }
+        }
+        &:hover {
+            &:before {
+                color: @modal-action-close__hover__color;
+            }
+        }
+        &:before {
+            font-size: @modal-action-close__font-size;
+        }
+    }
 }
 
 .modal-popup {
-  .modal-title {
-    font-size: @modal-popup-title__font-size;
-    margin-right: @modal-popup-title__font-size + @modal-popup__padding + 1rem;
-  }
-  .action-close {
-    padding: @modal-popup__padding;
-    &:active {
-      padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-      padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-    }
-  }
+    .modal-title {
+        font-size: @modal-popup-title__font-size;
+        margin-right: @modal-popup-title__font-size + @modal-popup__padding + 1rem;
+    }
+    .action-close {
+        padding: @modal-popup__padding;
+        &:active {
+            padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+            padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+        }
+    }
 }
 
 .modal-slide {
-  .modal-title {
-    font-size: @modal-slide-title__font-size;
-    margin-right: @modal-slide-title__font-size + @modal-slide__padding + 1rem;
-  }
-  .action-close {
-    padding: @modal-slide-header__padding-vertical @modal-slide__padding;
-    &:active {
-      padding-top: @modal-slide-header__padding-vertical + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-      padding-right: @modal-slide__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-    }
-  }
-  .page-main-actions {
-    margin-top: @modal-slide-header__padding-vertical;
-    margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding;
-  }
+    .modal-title {
+        font-size: @modal-slide-title__font-size;
+        margin-right: @modal-slide-title__font-size + @modal-slide__padding + 1rem;
+    }
+    .action-close {
+        padding: @modal-slide-header__padding-vertical @modal-slide__padding;
+        &:active {
+            padding-top: @modal-slide-header__padding-vertical + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+            padding-right: @modal-slide__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+        }
+    }
+    .page-main-actions {
+        margin-top: @modal-slide-header__padding-vertical;
+        margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding;
+    }
+
+    .modal-content {
+        height: auto !important;
+        .buttons-set {
+            margin: 0 0 15px;
+            button {
+                margin-right: 4px;
+            }
+        }
+    }
+
+    .main-col,
+    .side-col {
+        float: left;
+        padding-bottom: 0;
+        &:after {
+            display: none;
+        }
+    }
+
+    .side-col {
+        width: 20%;
+    }
+
+    .main-col {
+        padding-right: 0;
+        width: 80%;
+    }
+
+    //
+    //  Block 'Insert File'
+    //  -----------------------------------------
+
+    .main-col {
+        .insert-title-inner {
+            &:extend(.abs-clearfix all);
+            border-bottom: 1px solid @color-gray68;
+            margin: 0 0 @indent__base;
+            padding-bottom: @indent__xs;
+        }
+        .insert-actions {
+            float: right;
+        }
+        .title {
+            font-size: @font-size__l;
+            padding-top: @indent__xs;
+        }
+    }
+
+    .contents-uploader {
+        margin: 0 0 @indent__base;
+    }
+
+    .fileinput-button {
+        cursor: pointer;
+        display: inline-block;
+        float: none;
+        vertical-align: middle;
+        span {
+            display: none;
+        }
+        input {
+            border: none;
+            -moz-transform: none;
+            opacity: 1;
+            position: static;
+        }
+    }
+
+    .breadcrumbs {
+        list-style: none;
+        padding-left: 0;
+        li {
+            display: inline-block;
+            margin: 0 @indent__xs @indent__xs 0;
+            &:after {
+                content: '';
+                margin: 0 @indent__xs 0 0;
+            }
+        }
+    }
+
+    .file-row {
+        border: 1px solid @color-gray68;
+        margin: @indent__xs 0;
+        padding: 2px;
+    }
+
+    .filecnt {
+        border: 1px solid @color-gray68;
+        display: inline-block;
+        margin: 0 @indent__xs 15px 0;
+        padding: 3px;
+        width: 100px;
+        overflow: hidden;
+        cursor: pointer;
+        &.selected {
+            border-color: @color-blue-dodger;
+        }
+        p {
+            text-align: center;
+        }
+    }
+
+
 }
 
 .modal-title {
-  font-weight: @font-weight__regular;
-  margin-bottom: 0;
-  min-height: 1em;
+    font-weight: @font-weight__regular;
+    margin-bottom: 0;
+    min-height: 1em;
 }
-- 
GitLab


From 31c7fdbb22e2cd1cc8f2c841780c59246724a268 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 15 Sep 2015 01:27:22 +0300
Subject: [PATCH 071/420] JS-50: Different configurations for Page and Full
 Screen Gallery Widget modes

---
 .../templates/product/view/gallery.phtml      |  13 +-
 .../frontend/Magento/blank/etc/view.xml       |   5 +-
 app/design/frontend/Magento/luma/etc/view.xml |   3 +-
 .../js/jasmine/tests/lib/mage/gallery.test.js |   2 +-
 lib/web/fotorama/fotorama.js                  | 239 +++++++++----
 lib/web/mage/gallery/gallery.html             |   4 +-
 lib/web/mage/gallery/gallery.js               |  22 +-
 lib/web/mage/gallery/gallery.less             | 324 +++++++++++++++---
 lib/web/magnifier/magnifier.js                |  54 +++
 lib/web/magnifier/magnify.js                  |   3 +-
 10 files changed, 548 insertions(+), 121 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 024df1446a5..7bf679228f9 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -29,15 +29,14 @@
                     "nav": "<?php echo $block->getVar("gallery:navigation"); ?>",
                     "loop": <?php echo $block->getVar("gallery:loop"); ?>,
                     "keyboard": <?php echo $block->getVar("gallery:keyboard"); ?>,
-                    "arrows": <?php echo $block->getVar("gallery:arrows"); ?>,
+                    "navdir": "<?php echo $block->getVar("gallery:navdir"); ?>",
                     "allowfullscreen": <?php echo $block->getVar("gallery:allowfullscreen"); ?>,
-                    "showCaption": <?php echo $block->getVar("gallery:show_caption"); ?>,
+                    "showCaption": <?php echo $block->getVar("gallery:caption"); ?>,
                     "width": <?php echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
-                    "thumbwidth": <?php echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
-                    "thumbheight": <?php echo $block->getImageAttribute('product_page_image_small', 'height')
-                        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
+                    "thumbwidth": 120,
+                    "thumbheight": 90,
                     "height": <?php echo $block->getImageAttribute('product_page_image_medium', 'height')
-                        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
+                        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
                     "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
                 },
@@ -45,7 +44,7 @@
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
                     "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
-                    "showCaption": <?php echo $block->getVar("gallery:fullscreen:show_caption"); ?>,
+                    "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
                     "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 15a8191641f..93815d880aa 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -184,15 +184,16 @@
         <var name="gallery:loop">true</var> <!-- Gallery navigation loop (true/false) -->
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
-        <var name="gallery:fullscreen:show_caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index df358d1629b..b5f49bfde17 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -190,6 +190,7 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
@@ -197,7 +198,7 @@
         <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
-        <var name="gallery:fullscreen:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:fullscreen:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
index dd29ec79a64..d762ca5fe9f 100644
--- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
@@ -138,7 +138,6 @@ define([
             });
         });
 
-
         it('fullscreen exit', function (done) {
             expect($(navWrap).css('display') === 'none').toBeTruthy();
             galleryAPI.fotorama.cancelFullScreen();
@@ -150,5 +149,6 @@ define([
                 done();
             });
         });
+
     });
 });
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 5f34cd9820e..d7f64c62bc1 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -5,7 +5,7 @@ fotoramaVersion = '4.6.4';
 (function (window, document, location, $, undefined) {
     "use strict";
     var _fotoramaClass = 'fotorama',
-        _fullscreenClass = 'fullscreen',
+        _fullscreenClass = 'fotorama__fullscreen',
 
         wrapClass = _fotoramaClass + '__wrap',
         wrapCss2Class = wrapClass + '--css2',
@@ -37,6 +37,9 @@ fotoramaVersion = '4.6.4';
         navClass = _fotoramaClass + '__nav',
         navWrapClass = navClass + '-wrap',
         navShaftClass = navClass + '__shaft',
+        navShaftVerticalClass = navWrapClass + '--vertical',
+        navShaftListClass = navWrapClass + '--list',
+        navShaftHorisontalClass = navWrapClass + '--horisontal',
         navDotsClass = navClass + '--dots',
         navThumbsClass = navClass + '--thumbs',
         navFrameClass = navClass + '__frame',
@@ -49,6 +52,8 @@ fotoramaVersion = '4.6.4';
         shadowsClass = shadowClass + 's',
         shadowsLeftClass = shadowsClass + '--left',
         shadowsRightClass = shadowsClass + '--right',
+        shadowsTopClass = shadowsClass + '--top',
+        shadowsBottomClass = shadowsClass + '--bottom',
 
         activeClass = _fotoramaClass + '__active',
         selectClass = _fotoramaClass + '__select',
@@ -482,7 +487,7 @@ fotoramaVersion = '4.6.4';
                 , n
 
             for (n in prop) el[n] = prop[n]
-            return el;
+            return el
         }
 
         /**
@@ -986,7 +991,8 @@ fotoramaVersion = '4.6.4';
 
             shadows: true,
             spinner: null,
-            showcaption: true
+            showcaption: true,
+            navdir: 'horisontal'
         },
 
         KEYBOARD_OPTIONS = {
@@ -1005,24 +1011,40 @@ fotoramaVersion = '4.6.4';
         return Math.max(isNaN(min) ? -Infinity : min, Math.min(isNaN(max) ? Infinity : max, value));
     }
 
-    function readTransform(css) {
-        return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ? 12 : 4];
+    function readTransform(css, dir) {
+        return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ?
+                (dir === 'vertical' ? 13: 12) : (dir === 'vertical' ? 5 : 4)
+                ]
     }
 
-    function readPosition($el) {
+    function readPosition($el, dir) {
         if (CSS3) {
-            return +readTransform($el.css('transform'));
+            return +readTransform($el.css('transform'), dir);
         } else {
-            return +$el.css('left').replace('px', '');
+            return +$el.css(dir === 'vertical' ? 'top': 'left').replace('px', '');
         }
     }
 
-    function getTranslate(pos/*, _001*/) {
+    function getTranslate(pos, direction) {
         var obj = {};
+
         if (CSS3) {
-            obj.transform = 'translate3d(' + (pos/* + (_001 ? 0.001 : 0)*/) + 'px,0,0)'; // 0.001 to remove Retina artifacts
+
+            switch (direction){
+                case 'vertical':
+                    obj.transform = 'translate3d(0, ' + (pos) + 'px,0)';
+                    break;
+                case 'list':
+                    //console.warn("transition not implemented");
+                    break;
+                default :
+                    obj.transform = 'translate3d(' + (pos) + 'px,0,0)';
+                    break;
+            }
         } else {
-            obj.left = pos;
+            direction === 'vertical' ?
+                obj.top = pos :
+                obj.left = pos;
         }
         return obj;
     }
@@ -1103,7 +1125,8 @@ fotoramaVersion = '4.6.4';
     }
 
 
-    function stop($el, left/*, _001*/) {
+    function stop($el, pos/*, _001*/) {
+        var dir = $el.navdir || 'horizontal';
         if ($el.length) {
             var elData = $el.data();
             if (CSS3) {
@@ -1113,12 +1136,12 @@ fotoramaVersion = '4.6.4';
             } else {
                 $el.stop();
             }
-            var lockedLeft = getNumber(left, function () {
-                return readPosition($el);
+            var lockedPos = getNumber(pos, function () {
+                return readPosition($el, dir);
             });
 
-            $el.css(getTranslate(lockedLeft/*, _001*/));//.width(); // `.width()` for reflow
-            return lockedLeft;
+            $el.css(getTranslate(lockedPos, dir/*, _001*/));//.width(); // `.width()` for reflow
+            return lockedPos;
         }
     }
 
@@ -1353,8 +1376,11 @@ fotoramaVersion = '4.6.4';
         }
     }
 
-    function findShadowEdge(pos, min, max) {
-        return min === max ? false : pos <= min ? 'left' : pos >= max ? 'right' : 'left right';
+    function findShadowEdge(pos, min, max, dir) {
+        return min === max ? false :
+            dir === 'vertical' ?
+                (pos <= min ? 'top' : pos >= max ? 'bottom' : 'top bottom') :
+                (pos <= min ? 'left' : pos >= max ? 'right' : 'left right');
     }
 
     function smartClick($el, fn, _options) {
@@ -1377,7 +1403,6 @@ fotoramaVersion = '4.6.4';
                 onMove: _options.onMove || noop,
                 onTouchEnd: _options.onTouchEnd || noop,
                 onEnd: function (result) {
-                    ////console.log('smartClick → result.moved', result.moved);
                     if (result.moved) return;
                     fn.call(this, startEvent);
                 }
@@ -1575,7 +1600,7 @@ fotoramaVersion = '4.6.4';
             elPos = options.overPos;
         }
 
-        var translate = $.extend(getTranslate(elPos/*, options._001*/), options.width && {width: options.width});
+        var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
@@ -1635,7 +1660,8 @@ fotoramaVersion = '4.6.4';
     var lastEvent,
         moveEventType,
         preventEvent,
-        preventEventTimeout;
+        preventEventTimeout,
+        dragDomEl;
 
     function extendEvent(e) {
         var touch = (e.touches || [])[0] || e;
@@ -1709,7 +1735,6 @@ fotoramaVersion = '4.6.4';
                     stopEvent(e);
                 }
             } else {
-                ////console.log('onMove e.preventDefault');
                 stopEvent(e);
                 (options.onMove || noop).call(el, e, {touch: touchFLAG});
             }
@@ -1786,11 +1811,12 @@ fotoramaVersion = '4.6.4';
                 .on('mousemove', onMove)
                 .on('mouseup', onEnd);
         }
-
-        $el.on('click', 'a', function (e) {
-            if (!Modernizr.touch) {
-                e.preventDefault();
-            }
+        if (Modernizr.touch) {
+            dragDomEl = 'a';
+        } else {
+            dragDomEl = 'div';
+        }
+        $el.on('click', dragDomEl, function (e) {
             tail.checked && stopEvent(e);
         });
 
@@ -1812,6 +1838,7 @@ fotoramaVersion = '4.6.4';
             min,
             max,
             snap,
+            dir = options.direction || 'horizontal',
             slowFLAG,
             controlFLAG,
             moved,
@@ -1819,9 +1846,10 @@ fotoramaVersion = '4.6.4';
 
         function startTracking(e, noStop) {
             tracked = true;
-            startCoo = coo = e._x;
+            startCoo = coo = (dir === 'vertical') ? e._y : e._x;
             startTime = e._now;
 
+
             moveTrack = [
                 [startTime, startCoo]
             ];
@@ -1834,7 +1862,9 @@ fotoramaVersion = '4.6.4';
         function onStart(e, result) {
             min = tail.min;
             max = tail.max;
-            snap = tail.snap;
+            snap = tail.snap,
+                dir = tail.direction||'horizontal',
+                $el.navdir = dir;
 
             slowFLAG = e.altKey;
             tracked = moved = false;
@@ -1851,14 +1881,13 @@ fotoramaVersion = '4.6.4';
                 if (!tracked) {
                     startTracking(e);
                 }
-
-                coo = e._x;
+                coo = (dir === 'vertical') ? e._y : e._x;
 
                 moveTrack.push([e._now, coo]);
 
                 moveElPos = startElPos - (startCoo - coo);
 
-                edge = findShadowEdge(moveElPos, min, max);
+                edge = findShadowEdge(moveElPos, min, max, dir);
 
                 if (moveElPos <= min) {
                     moveElPos = edgeResistance(moveElPos, min);
@@ -1867,7 +1896,7 @@ fotoramaVersion = '4.6.4';
                 }
 
                 if (!tail.noMove) {
-                    $el.css(getTranslate(moveElPos/*, options._001*/));
+                    $el.css(getTranslate(moveElPos, dir));
                     if (!moved) {
                         moved = true;
                         // only for mouse
@@ -1959,7 +1988,8 @@ fotoramaVersion = '4.6.4';
                 pos: moveElPos,
                 newPos: newPos,
                 overPos: overPos,
-                time: time
+                time: time,
+                dir:dir
             }));
         }
 
@@ -2118,7 +2148,11 @@ fotoramaVersion = '4.6.4';
             stageLeft = 0,
 
             fadeStack = [];
-        $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
+        if (Modernizr.touch) {
+            $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
+        } else {
+            $wrap[STAGE_FRAME_KEY] = $('<div class="' + stageFrameClass + '"></div>');
+        }
 
         $wrap[NAV_THUMB_FRAME_KEY] = $($.Fotorama.jst.thumb());
 
@@ -2160,6 +2194,25 @@ fotoramaVersion = '4.6.4';
             return o_keyboard[key] || that.fullScreen;
         }
 
+        function setStagePosition() {
+            if ($stage !== undefined) {
+
+                if (opts.navdir == 'vertical') {
+                    var padding = opts.thumbwidth + opts.thumbmargin;
+
+                    $stage.css('left', padding);
+                    $arrNext.css('right', padding);
+                    $wrap.css('width', $wrap.css('width') + padding);
+                    $stageShaft.css('max-width', $wrap.width() - padding);
+                } else {
+                    $stage.css('left', '');
+                    $arrNext.css('right', '');
+                    $wrap.css('width', $wrap.css('width') + padding);
+                    $stageShaft.css('max-width', '');
+                }
+            }
+        }
+
         function bindGlobalEvents(FLAG) {
             var keydownCommon = 'keydown.' + _fotoramaClass,
                 localStamp = _fotoramaClass + stamp,
@@ -2266,6 +2319,10 @@ fotoramaVersion = '4.6.4';
          * Options on the fly
          * */
         function setOptions() {
+            if (opts.nav === 'dots') {
+                opts.navdir = 'horizontal'
+            }
+
             that.options = opts = optionsToLowerCase(opts);
 
             o_fade = (opts.transition === 'crossfade' || opts.transition === 'dissolve');
@@ -2386,6 +2443,7 @@ fotoramaVersion = '4.6.4';
                 .removeClass(classes.remove.join(' '));
 
             lastOptions = $.extend({}, opts);
+            setStagePosition();
         }
 
         function normalizeIndex(index) {
@@ -2415,8 +2473,13 @@ fotoramaVersion = '4.6.4';
         }
 
         function setNavShaftMinMax() {
-            navShaftTouchTail.min = Math.min(0, measures.nw - $navShaft.width());
+
+            var isVerticalDir = (opts.navdir === 'vertical');
+            var param =  isVerticalDir ? $navShaft.height() : $navShaft.width();
+            var mainParam = isVerticalDir ? measures.h : measures.nw;
+            navShaftTouchTail.min = Math.min(0, mainParam - param);
             navShaftTouchTail.max = 0;
+            navShaftTouchTail.direction = opts.navdir;
             $navShaft.toggleClass(grabClass, !(navShaftTouchTail.noMove = navShaftTouchTail.min === navShaftTouchTail.max));
         }
 
@@ -2724,6 +2787,10 @@ fotoramaVersion = '4.6.4';
         }
 
         function thumbsDraw(pos, loadFLAG) {
+            if (opts.navdir === 'vertical') {
+                pos = pos - opts.thumbheight;
+            }
+
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
             var leftLimit = -pos,
@@ -2739,8 +2806,7 @@ fotoramaVersion = '4.6.4';
                             w: thisData.w
                         }
                     },
-                    specialMeasures = getSpecialMeasures(),
-                    dataFrame = data[eq] || {};
+                    specialMeasures = getSpecialMeasures();
 
                 specialMeasures.w = thisData.w;
 
@@ -2756,7 +2822,8 @@ fotoramaVersion = '4.6.4';
             if (!frameAppend[type]) {
 
                 var thumbsFLAG = type === 'nav' && o_navThumbs,
-                    left = 0;
+                    left = 0,
+                    top = 0;
 
                 $shaft.append(
                     $frames
@@ -2787,13 +2854,16 @@ fotoramaVersion = '4.6.4';
 
                             var $this = $(this),
                                 frameData = $this.data(),
-                                thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide;
-
+                                thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide,
+                                thumbheight = Math.round(o_thumbSide / frameData.data.thumbratio) || o_thumbSide2;
+                            frameData.t = top;
+                            frameData.h = thumbheight;
                             frameData.l = left;
                             frameData.w = thumbwidth;
 
                             $this.css({width: thumbwidth});
 
+                            top += thumbheight + opts.thumbmargin;
                             left += thumbwidth + opts.thumbmargin;
                         })
                 );
@@ -2830,29 +2900,43 @@ fotoramaVersion = '4.6.4';
         function getNavFrameBounds($navFrame) {
             var navFrameData = $navFrame.data(),
                 left,
-                width;
+                top,
+                width,
+                height;
 
             if (o_navThumbs) {
                 left = navFrameData.l;
+                top = navFrameData.t;
                 width = navFrameData.w;
+                height = navFrameData.h;
             } else {
                 left = $navFrame.position().left;
                 width = $navFrame.width();
             }
 
-            return {
+            var horizontalBounds = {
                 c: left + width / 2,
                 min: -left + opts.thumbmargin * 10,
                 max: -left + measures.w - width - opts.thumbmargin * 10
             };
+
+            var verticalBounds = {
+                c: top + height / 2,
+                min: -top + opts.thumbmargin * 10,
+                max: -top + measures.h - height - opts.thumbmargin * 10
+            };
+
+            return opts.navdir === 'vertical' ? verticalBounds : horizontalBounds;
         }
 
         function slideThumbBorder(time) {
             var navFrameData = activeFrame[navFrameKey].data();
             slide($thumbBorder, {
                 time: time * 1.2,
-                pos: navFrameData.l,
-                width: navFrameData.w
+                pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l),
+                width: navFrameData.w,
+                height: navFrameData.h,
+                direction: opts.navdir
             });
         }
 
@@ -2861,19 +2945,22 @@ fotoramaVersion = '4.6.4';
             if ($guessNavFrame) {
                 var overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max,
                     minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]),
-                    l = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
+                    boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
+                    boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
+                    l = (opts.navdir === 'vertical' ? boundTop : boundLeft),
                     pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max),
                     time = options.time * 1.1;
 
                 slide($navShaft, {
                     time: time,
                     pos: pos || 0,
+                    direction: opts.navdir,
                     onEnd: function () {
                         thumbsDraw(pos, true);
                     }
                 });
 
-                setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max));
+                setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
                 slideNavShaft.l = l;
             }
         }
@@ -3120,8 +3207,7 @@ fotoramaVersion = '4.6.4';
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
                     time: time,
-                    onEnd: onEnd/*,
-                     _001: true*/
+                    onEnd: onEnd
                 });
             } else {
                 var $activeFrame = activeFrame[STAGE_FRAME_KEY],
@@ -3264,11 +3350,11 @@ fotoramaVersion = '4.6.4';
             if (measureIsValid(width)) {
                 $stage.css({width: ''});
                 $stage.css({height: ''});
+                $stage.css({'line-height': ''});
                 $stageShaft.css({width: ''});
                 $stageShaft.css({height: ''});
                 $nav.css({width: ''});
                 $nav.css({height: ''});
-                $stage.css({'line-height': ''});
                 $wrap.css({minWidth: measures.minwidth || 0, maxWidth: measures.maxwidth || MAX_WIDTH});
 
                 width = measures.W = measures.w = $wrap.width();
@@ -3283,16 +3369,35 @@ fotoramaVersion = '4.6.4';
                 if (height) {
                     width = Math.round(width);
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
-
                     $stage.css({'width': width, 'height': height, 'line-height': height + 'px'});
 
-                    stageShaftReposition();
-
                     if (o_nav) {
-                        $nav
-                            .stop()
-                            .animate({width: measures.nw}, time);
+                        switch (opts.navdir) {
+                            case 'vertical':
+                                $navWrap.removeClass(navShaftHorisontalClass);
+                                $navWrap.removeClass(navShaftListClass);
+                                $navWrap.addClass(navShaftVerticalClass);
+                                $nav
+                                    .stop()
+                                    .animate({height: measures.h, width: opts.thumbwidth}, time);
+                                break;
+                            case 'list':
+                                $navWrap.removeClass(navShaftVerticalClass);
+                                $navWrap.removeClass(navShaftHorisontalClass);
+                                $navWrap.addClass(navShaftListClass);
+                                //console.warn("List not implemented");
+                                break;
+                            default:
+                                $navWrap.removeClass(navShaftVerticalClass);
+                                $navWrap.removeClass(navShaftListClass);
+                                $navWrap.addClass(navShaftHorisontalClass);
+                                $nav
+                                    .stop()
+                                    .animate({width: measures.nw}, time);
+                                break;
+                        }
 
+                        stageShaftReposition();
                         slideNavShaft({guessIndex: activeIndex, time: time, keep: true});
                         if (o_navThumbs && frameAppend.nav) slideThumbBorder(time);
                     }
@@ -3304,6 +3409,7 @@ fotoramaVersion = '4.6.4';
             }
 
             stageLeft = $stage.offset().left;
+            setStagePosition();
 
             return this;
         };
@@ -3322,6 +3428,7 @@ fotoramaVersion = '4.6.4';
         function setShadow($el, edge) {
             if (o_shadows) {
                 $el.removeClass(shadowsLeftClass + ' ' + shadowsRightClass);
+                $el.removeClass(shadowsTopClass + ' ' + shadowsBottomClass);
                 edge && !$videoPlaying && $el.addClass(edge.replace(/^|\s/g, ' ' + shadowsClass + '--'));
             }
         }
@@ -3492,7 +3599,9 @@ fotoramaVersion = '4.6.4';
             timeHigh: 1,
             friction: 2,
             select: '.' + selectClass + ', .' + selectClass + ' *',
-            $wrap: $stage
+            $wrap: $stage,
+            direction: 'horizontal'
+
         });
 
         navShaftTouchTail = moveOnTouch($navShaft, {
@@ -3519,10 +3628,11 @@ fotoramaVersion = '4.6.4';
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
+                        direction: opts.navdir,
                         onEnd: onEnd
                     });
                     thumbsDraw(result.newPos);
-                    o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max));
+                    o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
                 } else {
                     onEnd();
                 }
@@ -3530,7 +3640,8 @@ fotoramaVersion = '4.6.4';
             timeLow: .5,
             timeHigh: 2,
             friction: 5,
-            $wrap: $nav
+            $wrap: $nav,
+            direction: opts.navdir
         });
 
         stageWheelTail = wheel($stage, {
@@ -3547,8 +3658,8 @@ fotoramaVersion = '4.6.4';
                 onTouchStart();
                 onTouchEnd();
                 var newPos = stop($navShaft) + direction * .25;
-                $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max)));
-                o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max));
+                $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max), opts.navdir));
+                o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
                 navWheelTail.prevent = {'<': newPos >= navShaftTouchTail.max, '>': newPos <= navShaftTouchTail.min};
                 clearTimeout(navWheelTail.t);
                 navWheelTail.t = setTimeout(function () {
@@ -3567,7 +3678,7 @@ fotoramaVersion = '4.6.4';
                 }, 0);
             },
             function () {
-                //console.log("click");
+                ////console.log("click");
                 if (!hoverFLAG) return;
                 toggleControlsClass(!(hoverFLAG = false));
             }
@@ -3676,8 +3787,6 @@ fotoramaVersion = '4.6.4';
 
         reset();
     };
-
-
     $.fn.fotorama = function (opts) {
         return this.each(function () {
             var that = this,
@@ -3730,7 +3839,7 @@ fotoramaVersion = '4.6.4';
 
     $.Fotorama.jst.dots = function(v) {
         var __t, __p = '', __e = _.escape;
-        __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="dot" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
+        __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
         return __p
     };
 
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 69a196d86c6..473d784d22c 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -17,6 +17,8 @@
                 <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
+            <div class="fotorama__zoom-in"></div>
+            <div class="fotorama__zoom-out"></div>
         </div>
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
@@ -28,4 +30,4 @@
         </div>
     </div>
 </div>
-<div class="magnifier-preview" id="preview" data-gallery-role="magnifier"></div>
+<div class="magnifier-preview" data-gallery-role="magnifier" id="preview"></div>
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index ed4e12dde1f..b66c45363e4 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -34,6 +34,8 @@ define([
          * @param {String} element - String selector of gallery DOM element.
          */
         initialize: function (config, element) {
+            var fullscreenData = [];
+
             this._super();
 
             config.options.swipe = true;
@@ -43,14 +45,24 @@ define([
                 $element: $(element),
                 currentConfig: config,
                 defaultConfig: _.clone(config),
-                fullscreenConfig: _.clone(config.allowfullscreen),
+                fullscreenConfig: _.clone(config.fullscreen),
                 breakpoints: config.breakpoints,
                 activeBreakpoint: {},
                 fotoramaApi: null,
                 isFullscreen: false,
-                api: null
+                api: null,
+                data: _.clone(config.data),
+                fullscreenData: []
             };
 
+            _.each(_.clone(this.settings.data), function (item) {
+                fullscreenData.push({
+                    img: item.original,
+                    thumb: item.thumb
+                });
+            });
+            this.settings.fullscreenData = fullscreenData;
+
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
 
@@ -66,17 +78,20 @@ define([
          * Gallery fullscreen settings.
          */
         initFullscreenSettings: function () {
-            var settings = this.settings;
+            var settings = this.settings,
+                items = [];
 
             settings.fullscreenConfig.swipe = false;
 
             settings.$element.on('fotorama:fullscreenenter', function () {
+
                 settings.api.updateOptions(settings.defaultConfig.options, true);
                 settings.api.updateOptions(settings.fullscreenConfig, true);
 
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
+                settings.api.updateData(_.clone(settings.fullscreenData));
                 settings.isFullscreen = true;
             });
 
@@ -86,6 +101,7 @@ define([
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
+                settings.api.updateData(_.clone(settings.data));
                 settings.isFullscreen = false;
             });
         },
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 1f7eac04d2d..195dd5dec43 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -6,7 +6,6 @@
 @fotorama-duration-time: 0.3s;
 @fotorama-arw-size: 95px;
 @fotorama_close_size: 30px;
-@fotorama_fullscreen_button: 32px;
 @size-fotorama-block: 50px;
 
 @import '../../css/source/lib/_lib.less'; // Global lib
@@ -21,22 +20,21 @@
 }
 
 .translateX(@value) {
+    -webkit-transform: translateX(@value);
     -ms-transform: translateX(@value);
     -o-transform: translateX(@value);
-    -webkit-transform: translateX(@value);
     transform: translateX(@value);
 }
 
 .translateY(@value) {
+    -webkit-transform: translateY(@value);
     -ms-transform: translateY(@value);
     -o-transform: translateY(@value);
-    -webkit-transform: translateY(@value);
     transform: translateY(@value);
 }
 
-.translate3d(@x, @y, @z) {
-    -webkit-transform: translate3d(@x, @y, @z);
-    transform: translate3d(@x, @y, @z);
+.fotorama-shadow-gradient(@x, @y) {
+    background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at @x @y, rgba(0, 0, 0, 0.4), transparent);
 }
 
 .fotorama-inline-block(@va: middle) {
@@ -48,6 +46,86 @@
     vertical-align: @va;
 }
 
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        cursor: pointer;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        cursor: pointer;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
 .fotorama-stretch {
     bottom: 0;
     height: 100%;
@@ -682,7 +760,7 @@
     }
 
     .fotorama__wrap--css3 & {
-        .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
+        .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
     }
 
     .fotorama__wrap--video & {
@@ -707,6 +785,60 @@
     }
 }
 
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
 .fotorama__wrap--video {
     .fotorama__arr,
     .fotorama__fullscreen-icon {
@@ -735,24 +867,24 @@
 .fotorama__wrap--css3 {
     &.fotorama__wrap--no-controls.fotorama__wrap--slide.fotorama__wrap--toggle-arrows {
         .fotorama__fullscreen-icon:not(:focus) {
-            .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
+            .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
         }
         .fotorama__arr--prev:not(:focus) {
-            .translate3d(-@fotorama-arw-size * 1.5, 0, 0);
+            .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0);
         }
         .fotorama__arr--next:not(:focus) {
-            .translate3d(@fotorama-arw-size * 1.5, 0, 0);
+            .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0);
         }
     }
     &.fotorama__wrap--video {
         .fotorama__fullscreen-icon {
-            .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important;
+            .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important;
         }
         .fotorama__arr--prev {
-            .translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important;
+            .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important;
         }
         .fotorama__arr--next {
-            .translate3d(@fotorama-arw-size * 1.5, 0, 0) !important;
+            .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0) !important;
         }
     }
 }
@@ -773,34 +905,59 @@
     &:after {
         &:extend(.fotorama-gpu);
         background-repeat: no-repeat;
-        background-size: 1px 100%, 5px 100%;
-        bottom: 0;
         content: '';
         display: block;
-        height: auto;
         pointer-events: none;
         position: absolute;
         text-decoration: none;
-        top: 0;
-        width: 10px;
         z-index: 10;
     }
     &:before {
-        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 0 50%, rgba(0, 0, 0, 0.4), transparent);
-        background-position: 0 0, 0 0;
         left: -10px;
-    }
-    &.fotorama__shadows--left:before {
-        left: 0;
+        top: -10px;
     }
     &:after {
-        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.4), transparent);
-        background-position: 100% 0, 100% 0;
         right: -10px;
+        bottom: -10px;
     }
+    &.fotorama__shadows--left:before,
     &.fotorama__shadows--right:after {
+        top: 0;
+        bottom: 0;
+        background-size: 1px 100%, 5px 100%;
+        height: auto;
+        width: 10px;
+    }
+    &.fotorama__shadows--top:before,
+    &.fotorama__shadows--bottom:after {
+        left: 0;
+        right:0;
+        background-size: 100% 1px, 100% 5px ;
+        height:10px;
+        width:auto;
+    }
+    &.fotorama__shadows--left:before {
+        .fotorama-shadow-gradient(0, 50%);
+        background-position: 0 0, 0 0;
+        left: 0;
+    }
+
+    &.fotorama__shadows--right:after {
+        .fotorama-shadow-gradient(100%, 50%);
+        background-position: 100% 0, 100% 0;
         right: 0;
     }
+    &.fotorama__shadows--top:before {
+        .fotorama-shadow-gradient(50%, 0);
+        background-position: 0 0, 0 0;
+        top:0;
+
+    }
+    &.fotorama__shadows--bottom:after {
+        .fotorama-shadow-gradient(50%, 100%);
+        background-position: 0 100%, 0 100%;
+        bottom:0;
+    }
 }
 
 .fotorama--fullscreen .fotorama__stage,
@@ -897,21 +1054,6 @@
     }
 }
 
-.fotorama--fullscreen {
-    .fotorama__stage__frame {
-        .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0px;
-            bottom: 0px;
-            left: 0px;
-            right: 0px;
-        }
-    }
-}
-
 .fotorama__stage__frame {
     text-align: center;
     .fotorama__img {
@@ -930,3 +1072,105 @@
 .magnify-hidden {
     display: none;
 }
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+        }
+    }
+}
+
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+        }
+    }
+}
+
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+        }
+    }
+}
+
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index acfd548bcca..6a9f279d9e5 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -719,8 +719,62 @@
             _init($box, gOptions);
 
         });
+        function zoomIn(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                gallery = $('[data-gallery-role="gallery"]'),
+                imgOriginalSize = getImageSize($image[0].src),
+                setedResult = Math.round($image.width() + 10);
+            e.preventDefault();
+
+            if (setedResult >imgOriginalSize.rw) {
+                setedResult = imgOriginalSize.rw;
+            }
+            $image.css('width', setedResult);
+        }
+
+        function zoomOut(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                gallery = $('[data-gallery-role="gallery"]'),
+                imgOriginalSize = getImageSize($image[0].src),
+                setedResult = Math.round($image.width() - 10);
+            e.preventDefault();
+
+            if (setedResult < imgOriginalSize.rw/2) {
+                setedResult = imgOriginalSize.rw/2;
+            }
+            $image.css('width', setedResult);
+        }
+
+        /**
+         * Return width and height of original image
+         * @param src path for original image
+         * @returns {{rw: number, rh: number}}
+         */
+        function getImageSize(src) {
+            var img = new Image(),
+                imgSize = {
+                    rw: 0,
+                    rh: 0
+                };
+            img.src = src;
+            imgSize.rw = img.width;
+            imgSize.rh = img.height;
+            return imgSize;
+        }
+
+
+        function setEventOnce() {
+            $('.fotorama__zoom-in')
+                .off('click', zoomIn)
+                .on('click', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('click', zoomOut)
+                .on('click', zoomOut);
+        }
+
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
         magnifierFullscreen();
+        setEventOnce();
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index d6f7c9931f3..3544ad6b6c3 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -84,7 +84,8 @@ define([
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
-        $(element).on('fotorama:show', function () {
+        $(element).on('fotorama:show fotorama:fullscreenenter ', function () {
+           console.log('AAAAAA')
             hideMagnifier();
         });
 
-- 
GitLab


From 987cd9ce4e4d7b458f45c1c681083715b0fb354d Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 15 Sep 2015 11:18:16 +0300
Subject: [PATCH 072/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../adminhtml/templates/backup/dialogs.phtml  | 10 --
 lib/web/mage/adminhtml/backup.js              | 92 +++++++++++++++++--
 2 files changed, 82 insertions(+), 20 deletions(-)

diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index b8e7ba06b8b..87e5e91454e 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -93,11 +93,6 @@
                         </div>
                     </fieldset>
                 </form>
-
-                <div class="actions">
-                    <button type="button" class="action primary" data-mage-init='{"button":{"event":"submit","target":"#backup-form"}}'><?php /* @escapeNotVerified */ echo __('OK')?></button>
-                    <button type="button" class="action cancel" onclick="backup.hidePopups()"><?php /* @escapeNotVerified */ echo __('Cancel')?></button>
-                </div>
             </div>
         </div>
     </div>
@@ -158,11 +153,6 @@
                         </fieldset>
                     </div>
                 </form>
-
-                <div class="actions">
-                    <button type="button" class="action primary" data-mage-init='{"button":{"event":"submit","target":"#rollback-form"}}'><?php /* @escapeNotVerified */ echo __('OK')?></button>
-                    <button type="button" class="action cancel" onclick="backup.hidePopups()"><?php /* @escapeNotVerified */ echo __('Cancel')?></button>
-                </div>
             </div>
         </div>
     </div>
diff --git a/lib/web/mage/adminhtml/backup.js b/lib/web/mage/adminhtml/backup.js
index f8dde89519d..b37d9731076 100644
--- a/lib/web/mage/adminhtml/backup.js
+++ b/lib/web/mage/adminhtml/backup.js
@@ -4,6 +4,7 @@
  */
 define([
     "jquery",
+    "Magento_Ui/js/modal/modal",
     "mage/mage",
     "prototype"
 ], function(jQuery){
@@ -97,7 +98,6 @@ define([
         },
 
         submitBackup: function () {
-            this.hidePopups();
             var data = {
                 'type': this.type,
                 'maintenance_mode': $('backup_maintenance_mode').checked ? 1 : 0,
@@ -105,6 +105,8 @@ define([
                 'exclude_media': $('exclude_media').checked ? 1 : 0
             };
 
+            this.modal.modal('closeModal');
+
             new Ajax.Request(this.backupUrl, {
                 onSuccess: function(transport) {
                     this.processResponse(transport, 'backup-options');
@@ -160,17 +162,87 @@ define([
             data['type'] = this.type;
             return data;
         },
-
+        backupConfig: {
+            'backup-warning': {
+                title: jQuery.mage.__('Warning'),
+                content: function () {
+                    return jQuery('#backup-warning .message.message-warning').html();
+                },
+                actionOk: function () {
+                    this.modal.modal('closeModal');
+                    this.requestBackupOptions();
+                }
+            },
+            'rollback-warning': {
+                title: jQuery.mage.__('Warning'),
+                content: function () {
+                    return jQuery('#rollback-warning .message.message-warning').html();
+                },
+                actionOk: function () {
+                    this.modal.modal('closeModal');
+                    this.requestPassword();
+                }
+            },
+            'backup-options': {
+                title: jQuery.mage.__('Backup options'),
+                content: function () {
+                    return jQuery('#backup-options .popup-content').html();
+                },
+                actionOk: function () {
+                    this.modal.find('#backup-form').validation({
+                        submitHandler: jQuery.proxy(this.submitBackup, this)
+                    });
+                    this.modal.find('#backup-form').submit();
+                },
+                opened: function () {
+                    this.modal.find('*:hidden').show();
+                }
+            },
+            'rollback-request-password': {
+                title: jQuery.mage.__('Backup options'),
+                content: function () {
+                    return jQuery('#rollback-request-password .popup-content').html();
+                },
+                actionOk: function () {
+                    this.modal.find('#rollback-request-password').validation({
+                        submitHandler: jQuery.proxy(this.submitRollback, this)
+                    });
+                    this.modal.find('#rollback-request-password').submit();
+                },
+                opened: function () {
+                    this.modal.find('*:hidden').show();
+                }
+            }
+        },
         showPopup: function(divId) {
-            $(divId).show().setStyle({
-                'marginTop': -$(divId).getDimensions().height / 2 + 'px'
+            var self = this;
+
+            this.modal = jQuery('<div/>').html(this.backupConfig[divId].content()).modal({
+                modalClass: 'magento',
+                title: this.backupConfig[divId].title,
+                closed: function(e, modal){
+                    modal.modal.remove();
+                },
+                opened: function () {
+                    if (self.backupConfig[divId].opened) {
+                        self.backupConfig[divId].opened.call(self);
+                    }
+                },
+                buttons: [{
+                    text: jQuery.mage.__('Cancel'),
+                    'class': 'action cancel',
+                    click: function () {
+                        this.closeModal();
+                    }
+                }, {
+                    text: jQuery.mage.__('Ok'),
+                    'class': 'action primary',
+                    click: function () {
+                        self.backupConfig[divId].actionOk.call(self);
+                    }
+                }]
             });
-            var mask = $('popup-window-mask');
-            if (mask) {
-                $('popup-window-mask').setStyle({
-                    height: $('html-body').getHeight() + 'px'
-                }).show();
-            }
+            this.modal.modal('openModal');
         },
 
         hidePopups: function() {
-- 
GitLab


From 10efdbfc3c7164fe530a2f303e879d781764af78 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Tue, 15 Sep 2015 11:43:39 +0300
Subject: [PATCH 073/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Set styles as generic module
---
 .../css/source/components/_modals_extend.less | 83 ++-----------------
 .../modals_extend/_wysiwyg_images.less        | 74 +++++++++++++++++
 2 files changed, 80 insertions(+), 77 deletions(-)
 create mode 100644 app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 4b2349af7c5..186dcb8fdf1 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -80,7 +80,6 @@
     }
 
     .modal-content {
-        height: auto !important;
         .buttons-set {
             margin: 0 0 15px;
             button {
@@ -107,82 +106,6 @@
         width: 80%;
     }
 
-    //
-    //  Block 'Insert File'
-    //  -----------------------------------------
-
-    .main-col {
-        .insert-title-inner {
-            &:extend(.abs-clearfix all);
-            border-bottom: 1px solid @color-gray68;
-            margin: 0 0 @indent__base;
-            padding-bottom: @indent__xs;
-        }
-        .insert-actions {
-            float: right;
-        }
-        .title {
-            font-size: @font-size__l;
-            padding-top: @indent__xs;
-        }
-    }
-
-    .contents-uploader {
-        margin: 0 0 @indent__base;
-    }
-
-    .fileinput-button {
-        cursor: pointer;
-        display: inline-block;
-        float: none;
-        vertical-align: middle;
-        span {
-            display: none;
-        }
-        input {
-            border: none;
-            -moz-transform: none;
-            opacity: 1;
-            position: static;
-        }
-    }
-
-    .breadcrumbs {
-        list-style: none;
-        padding-left: 0;
-        li {
-            display: inline-block;
-            margin: 0 @indent__xs @indent__xs 0;
-            &:after {
-                content: '';
-                margin: 0 @indent__xs 0 0;
-            }
-        }
-    }
-
-    .file-row {
-        border: 1px solid @color-gray68;
-        margin: @indent__xs 0;
-        padding: 2px;
-    }
-
-    .filecnt {
-        border: 1px solid @color-gray68;
-        display: inline-block;
-        margin: 0 @indent__xs 15px 0;
-        padding: 3px;
-        width: 100px;
-        overflow: hidden;
-        cursor: pointer;
-        &.selected {
-            border-color: @color-blue-dodger;
-        }
-        p {
-            text-align: center;
-        }
-    }
-
-
 }
 
 .modal-title {
@@ -190,3 +113,9 @@
     margin-bottom: 0;
     min-height: 1em;
 }
+
+
+//
+//  Imports
+//  ---------------------------------------------
+@import 'modals_extend/_wysiwyg_images.less';
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less b/app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less
new file mode 100644
index 00000000000..ccf7b100864
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less
@@ -0,0 +1,74 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Wysiwyg images
+//  ---------------------------------------------
+
+.modal-slide {
+
+
+    //
+    //  Block 'Insert File'
+    //  -----------------------------------------
+
+    .main-col {
+        .insert-title-inner {
+            &:extend(.abs-clearfix all);
+            border-bottom: 1px solid @color-gray68;
+            margin: 0 0 @indent__base;
+            padding-bottom: @indent__xs;
+        }
+        .insert-actions {
+            float: right;
+        }
+        .title {
+            font-size: @font-size__l;
+            padding-top: @indent__xs;
+        }
+    }
+
+    .contents-uploader {
+        margin: 0 0 @indent__base;
+    }
+
+    .fileinput-button {
+        cursor: pointer;
+        display: inline-block;
+        float: none;
+        vertical-align: middle;
+        span {
+            display: none;
+        }
+        input {
+            border: none;
+            -moz-transform: none;
+            opacity: 1;
+            position: static;
+        }
+    }
+
+    .file-row {
+        border: 1px solid @color-gray68;
+        margin: @indent__xs 0;
+        padding: 2px;
+    }
+
+    .filecnt {
+        border: 1px solid @color-gray68;
+        display: inline-block;
+        margin: 0 @indent__xs 15px 0;
+        padding: 3px;
+        width: 100px;
+        overflow: hidden;
+        cursor: pointer;
+        &.selected {
+            border-color: @color-blue-dodger;
+        }
+        p {
+            text-align: center;
+        }
+    }
+}
\ No newline at end of file
-- 
GitLab


From 2c20e6555627d6eec8718b9ced8cf4261e56292e Mon Sep 17 00:00:00 2001
From: Siarhei Andreyeu <siarhei_andreyeu@epam.com>
Date: Tue, 15 Sep 2015 13:02:37 +0300
Subject: [PATCH 074/420] PV-5: General video settings

- added API key to admin
---
 .../ProductVideo/etc/adminhtml/system.xml     | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 app/code/Magento/ProductVideo/etc/adminhtml/system.xml

diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
new file mode 100644
index 00000000000..b295e662803
--- /dev/null
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../Config/etc/system_file.xsd">
+    <system>
+        <section id="catalog">
+            <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Product Video</label>
+                <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>YouTube API key</label>
+                </field>
+            </group>
+        </section>
+    </system>
+</config>
-- 
GitLab


From 36ea2788f6dc476e4b788efd9209c702da977ada Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Tue, 15 Sep 2015 14:09:11 +0300
Subject: [PATCH 075/420] MAGETWO-42480: Stabialize functional tests

---
 .../templates/catalog/category/tree.phtml     | 19 ++++++-------------
 .../adminhtml/web/order/create/scripts.js     |  2 +-
 2 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index ec212659d64..ad7979e4870 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -252,19 +252,12 @@
                 if (!config) {
                     var config = defaultLoadTreeParams;
                 }
-            });
-        } else {
-            var baseUrl = '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>';
-            var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
-            url = parseSidUrl(baseUrl, urlExt);
-            setLocation(url);
-        }
-    }
-    // render default tree
-    else {
-        _renderNewTree();
-    }
-}
+
+                if (tree) {
+                    tree.purgeListeners();
+                    tree.el.dom.innerHTML = '';
+                }
+                tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams);
 
                 tree.loadTree(config, true);
 
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index da408242575..938f24992aa 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -34,7 +34,7 @@ AdminOrder.prototype = {
         this.isOnlyVirtualProduct = false;
         this.excludedPaymentMethods = [];
         this.summarizePrice = true;
-        Event.observe(window, 'load',  (function(){
+        window.addEventListener('load',  (function(){
             this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
             this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
                 addControlButton: function(button){
-- 
GitLab


From 55e26cce339c21ba73bb4ece62b9309372cda932 Mon Sep 17 00:00:00 2001
From: Siarhei Andreyeu <siarhei_andreyeu@epam.com>
Date: Tue, 15 Sep 2015 16:19:55 +0300
Subject: [PATCH 076/420] PV-5: General video settings

- import youtube api key to backend
---
 .../Block/Adminhtml/Product/Edit/NewVideo.php | 16 +++++++++++++++
 .../Magento/ProductVideo/Helper/Media.php     | 20 ++++++++++++++++++-
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 70fbfe35d6b..fd0513dfe8c 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -12,6 +12,11 @@ use Magento\Framework\Data\Form\Element\Fieldset;
  */
 class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
 {
+    /**
+     * @var \Magento\ProductVideo\Helper\Media
+     */
+    protected $mediaHelper;
+
     /**
      * @var \Magento\Framework\Json\EncoderInterface
      */
@@ -19,6 +24,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
+     * @param \Magento\ProductVideo\Helper\Media $mediaHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
@@ -29,9 +35,11 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
+        \Magento\ProductVideo\Helper\Media $mediaHelper,
         array $data = []
     ) {
         parent::__construct($context, $registry, $formFactory, $data);
+        $this->mediaHelper = $mediaHelper;
         $this->jsonEncoder = $jsonEncoder;
         $this->setUseContainer(true);
     }
@@ -170,6 +178,11 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
         $this->setForm($form);
     }
 
+    /**
+     * Get html id
+     *
+     * @return mixed
+     */
     public function getHtmlId()
     {
         if (null === $this->getData('id')) {
@@ -179,6 +192,8 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     }
 
     /**
+     * Get widget options
+     *
      * @return string
      */
     public function getWidgetOptions()
@@ -188,6 +203,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
                 'saveVideoUrl' => $this->getUrl('catalog/product_gallery/upload'),
                 'saveRemoteVideoUrl' => $this->getUrl('product_video/product_gallery/retrieveImage'),
                 'htmlId' => $this->getHtmlId(),
+                'youTubeApiKey' => $this->mediaHelper->getYouTubeApiKey()
             ]
         );
     }
diff --git a/app/code/Magento/ProductVideo/Helper/Media.php b/app/code/Magento/ProductVideo/Helper/Media.php
index 023fdb28f78..6076e96ac99 100644
--- a/app/code/Magento/ProductVideo/Helper/Media.php
+++ b/app/code/Magento/ProductVideo/Helper/Media.php
@@ -7,6 +7,7 @@
 namespace Magento\ProductVideo\Helper;
 
 use Magento\Framework\App\Area;
+use Magento\Framework\App\Helper\Context;
 use Magento\Framework\View\ConfigInterface;
 use Magento\Framework\View\DesignInterface;
 
@@ -35,6 +36,11 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
      */
     const NODE_CONFIG_VIDEO_AUTO_RESTART = 'video_auto_restart';
 
+    /**
+     * Configuration path
+     */
+    const XML_PATH_YOUTUBE_API_KEY = 'catalog/product_video/youtube_api_key';
+
     /**
      * @var ConfigInterface
      */
@@ -55,14 +61,17 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * @param ConfigInterface $configInterface
      * @param DesignInterface $designInterface
+     * @param Context $context
      */
     public function __construct(
         ConfigInterface $configInterface,
-        DesignInterface $designInterface
+        DesignInterface $designInterface,
+        Context $context
     ) {
         $this->viewConfig = $configInterface;
         $this->currentTheme = $designInterface->getDesignTheme();
         $this->initConfig();
+        parent::__construct($context);
     }
 
     /**
@@ -123,4 +132,13 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
         );
     }
 
+    /**
+     * Retrieve YouTube API key
+     *
+     * @return string
+     */
+    public function getYouTubeApiKey()
+    {
+        return $this->scopeConfig->getValue(self::XML_PATH_YOUTUBE_API_KEY);
+    }
 }
-- 
GitLab


From 240286e31a7c08228ee7c9f2801d9d757de698f5 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 15 Sep 2015 16:34:17 +0300
Subject: [PATCH 077/420] MAGETWO-42479: Refactor all entries modal windows

---
 .../view/adminhtml/templates/system/messages/popup.phtml | 7 +++----
 .../Integration/view/adminhtml/web/js/integration.js     | 9 ++++++---
 app/code/Magento/Ui/view/base/web/js/modal/prompt.js     | 4 +---
 3 files changed, 10 insertions(+), 10 deletions(-)

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 f57500358c4..6bf89e17d48 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
@@ -9,7 +9,7 @@
 ?>
 <?php /** @var $block \Magento\AdminNotification\Block\System\Messages\UnreadMessagePopup */ ?>
 
-<div id="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
+<div id="system_messages_list" data-role="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
     <ul class="message-system-list">
         <?php foreach ($block->getUnreadMessages() as $message): ?>
             <li class="message message-warning <?php /* @escapeNotVerified */ echo $block->getItemClass($message);?>">
@@ -22,13 +22,12 @@
 <script>
 require([
     "jquery",
-    "jquery/ui",
     "Magento_Ui/js/modal/modal"
 ], function($){
     if (this.modal) {
-        this.modal.html($("#system_messages_list").html());
+        this.modal.html($('[data-role="system_messages_list"]').html());
     } else {
-        this.modal = $("#system_messages_list").modal({
+        this.modal = $('[data-role="system_messages_list"]').modal({
             modalClass: 'ui-popup-message',
             type: 'popup',
             buttons: []
diff --git a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
index 0dd90489499..c95ef6c671e 100644
--- a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
+++ b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
@@ -7,10 +7,11 @@
 /*global integration*/
 define([
     "jquery",
+    "Magento_Ui/js/modal/alert",
     "jquery/ui",
     "mage/translate",
-    'Magento_Ui/js/modal/modal'
-], function($){
+    "Magento_Ui/js/modal/modal"
+], function($, alert){
     "use strict";
 
     $.widget('mage.integration', {
@@ -81,7 +82,9 @@ define([
                     }
                 },
                 error: function (jqXHR, status, error) {
-                    alert($.mage.__('Sorry, something went wrong. Please try again later.'));
+                    alert({
+                        content: $.mage.__('Sorry, something went wrong. Please try again later.')
+                    });
                     window.console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText);
                 },
                 complete: function () {
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 60ea4e7f0c8..5013730502b 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'jquery',
     'underscore',
@@ -43,9 +44,6 @@ define([
         _remove: function() {
             this.modal.remove();
         },
-        openModal: function() {
-            return this._super();
-        },
         closeModal: function(result) {
             var value;
 
-- 
GitLab


From 73e3989daef06b7be6a6cd9414d573643fb84590 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 15 Sep 2015 18:14:41 +0300
Subject: [PATCH 078/420] MAGETWO-36504: UI popup for Cancel Order button

---
 lib/web/mage/adminhtml/globals.js | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/lib/web/mage/adminhtml/globals.js b/lib/web/mage/adminhtml/globals.js
index de0e06295e0..1933b73e0c7 100644
--- a/lib/web/mage/adminhtml/globals.js
+++ b/lib/web/mage/adminhtml/globals.js
@@ -2,7 +2,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([], function () {
+define([
+    'Magento_Ui/js/modal/confirm'
+], function (confirm) {
     'use strict';
 
     /**
@@ -20,10 +22,23 @@ define([], function () {
      * @returns {boolean}
      */
     window.deleteConfirm = function (message, url) {
-        if (confirm(message)) {
-            setLocation(url);
-        }
+        confirm({
+            content: message,
+            actions: {
+                confirm: function () {
+                    setLocation(url);
+                }
+            }
+        });
 
         return false;
     };
+
+    /**
+     * Helper for onclick action.
+     * @param {String} message
+     * @param {String} url
+     * @returns {boolean}
+     */
+    window.confirmSetLocation = window.deleteConfirm;
 });
-- 
GitLab


From 5ef22a8584e22279258a59cbc534c0370b207608 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 15 Sep 2015 18:41:22 +0300
Subject: [PATCH 079/420] JS-52: Zoom on Full Screen Mode

---
 .../templates/product/view/gallery.phtml      |  10 +-
 .../frontend/Magento/blank/etc/view.xml       |   5 +-
 app/design/frontend/Magento/luma/etc/view.xml |   2 +
 lib/web/fotorama/fotorama.js                  |  51 ++++++--
 lib/web/mage/gallery/gallery.js               |  16 +--
 lib/web/mage/gallery/gallery.less             |  68 +---------
 lib/web/magnifier/magnifier.js                | 116 +++++++++++++++---
 lib/web/magnifier/magnify.js                  |   3 +-
 8 files changed, 158 insertions(+), 113 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 7bf679228f9..2c598b2f5e4 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -22,7 +22,8 @@
                     "width": "<?php echo $block->getVar("magnifier:width"); ?>",
                     "height": "<?php echo $block->getVar("magnifier:height"); ?>",
                     "top": "<?php echo $block->getVar("magnifier:top"); ?>",
-                    "left": "<?php echo $block->getVar("magnifier:left"); ?>"
+                    "left": "<?php echo $block->getVar("magnifier:left"); ?>",
+                    "inc": "<?php echo $block->getVar("magnifier:fullscreenzoom"); ?>"
                 },
                 "data": <?php echo $block->getGalleryImagesJson(); ?>,
                 "options": {
@@ -30,11 +31,13 @@
                     "loop": <?php echo $block->getVar("gallery:loop"); ?>,
                     "keyboard": <?php echo $block->getVar("gallery:keyboard"); ?>,
                     "navdir": "<?php echo $block->getVar("gallery:navdir"); ?>",
+                    "arrows": <?php echo $block->getVar("gallery:arrows"); ?>,
                     "allowfullscreen": <?php echo $block->getVar("gallery:allowfullscreen"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:caption"); ?>,
                     "width": <?php echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
-                    "thumbwidth": 120,
-                    "thumbheight": 90,
+                    "thumbwidth": <?php echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
+                    "thumbheight": <?php echo $block->getImageAttribute('product_page_image_small', 'height')
+                        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "height": <?php echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
@@ -43,6 +46,7 @@
                 "fullscreen": {
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
                     "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
+                    "navdir": "<?php echo $block->getVar("gallery:fullscreen:navdir"); ?>",
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 93815d880aa..14f7695e7b3 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -181,7 +181,7 @@
 
         <!-- New gallery and magnifier theme settings -->
         <var name="gallery:navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
-        <var name="gallery:loop">true</var> <!-- Gallery navigation loop (true/false) -->
+        <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) -->
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
@@ -192,11 +192,14 @@
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
+        <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="magnifier:fullscreenzoom">20</var> <!-- Zoom for fullscreen -->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index b5f49bfde17..b2d2d21ad4d 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -199,9 +199,11 @@
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="magnifier:fullscreenzoom">5</var> <!-- Zoom for fullscreen (integer)-->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index d7f64c62bc1..453597325f4 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -2202,11 +2202,13 @@ fotoramaVersion = '4.6.4';
 
                     $stage.css('left', padding);
                     $arrNext.css('right', padding);
+                    $fullscreenIcon.css('right', padding);
                     $wrap.css('width', $wrap.css('width') + padding);
                     $stageShaft.css('max-width', $wrap.width() - padding);
                 } else {
                     $stage.css('left', '');
                     $arrNext.css('right', '');
+                    $fullscreenIcon.css('right', '');
                     $wrap.css('width', $wrap.css('width') + padding);
                     $stageShaft.css('max-width', '');
                 }
@@ -2319,7 +2321,7 @@ fotoramaVersion = '4.6.4';
          * Options on the fly
          * */
         function setOptions() {
-            if (opts.nav === 'dots') {
+            if (!opts.nav || opts.nav === 'dots') {
                 opts.navdir = 'horizontal'
             }
 
@@ -2787,14 +2789,20 @@ fotoramaVersion = '4.6.4';
         }
 
         function thumbsDraw(pos, loadFLAG) {
-            if (opts.navdir === 'vertical') {
-                pos = pos - opts.thumbheight;
-            }
+            var leftLimit,
+                rightLimit,
+                exceedLimit;
+
 
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
-            var leftLimit = -pos,
-                rightLimit = -pos + measures.nw;
+            leftLimit = -pos;
+            rightLimit = -pos + measures.nw;
+
+            if (opts.navdir === 'vertical') {
+                pos = pos - opts.thumbheight;
+                rightLimit = -pos + measures.h;
+            }
 
             $navThumbFrame.each(function () {
                 var $this = $(this),
@@ -2806,12 +2814,13 @@ fotoramaVersion = '4.6.4';
                             w: thisData.w
                         }
                     },
-                    specialMeasures = getSpecialMeasures();
-
-                specialMeasures.w = thisData.w;
+                    specialMeasures = getSpecialMeasures(),
+                    exceedLimit = opts.navdir === 'vertical' ?
+                        thisData.t > rightLimit : thisData.l > rightLimit;
+                    specialMeasures.w = thisData.w;
 
                 if (thisData.l + thisData.w < leftLimit
-                    || thisData.l > rightLimit
+                    || exceedLimit
                     || callFit(thisData.$img, specialMeasures)) return;
 
                 loadFLAG && loadImg([eq], 'navThumb', getSpecialMeasures);
@@ -3334,10 +3343,10 @@ fotoramaVersion = '4.6.4';
                 setFLAG = arguments[2];
 
             extendMeasures(!that.fullScreen ? optionsToLowerCase(options) : {
-                width: '100%',
+                width: $(window).width(),
                 maxwidth: null,
                 minwidth: null,
-                height: '100%',
+                height: $(window).height(),
                 maxheight: null,
                 minheight: null
             }, [measures, setFLAG || that.fullScreen || opts]);
@@ -3348,6 +3357,8 @@ fotoramaVersion = '4.6.4';
                 windowHeight = $WINDOW.height() - (o_nav ? $nav.height() : 0);
 
             if (measureIsValid(width)) {
+                $wrap.css({width: ''});
+                $wrap.css({height: ''});
                 $stage.css({width: ''});
                 $stage.css({height: ''});
                 $stage.css({'line-height': ''});
@@ -3371,6 +3382,22 @@ fotoramaVersion = '4.6.4';
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
                     $stage.css({'width': width, 'height': height, 'line-height': height + 'px'});
 
+                    if (opts.navdir === 'vertical' && !that.fullscreen) {
+                        $nav.width(opts.thumbwidth + opts.thumbmargin * 2);
+                    }
+
+                    if (opts.navdir === 'horizontal' && !that.fullscreen) {
+                        $nav.height(opts.thumbheight + opts.thumbmargin * 2);
+                    }
+
+                    if (opts.navdir === 'vertical' && that.fullScreen) {
+                        $stage.css('height', $(window).height());
+                    }
+
+                    if (opts.navdir === 'horizontal' && that.fullScreen) {
+                        $stage.css('height', $(window).height() - (opts.thumbheight + opts.thumbmargin * 2));
+                    }
+
                     if (o_nav) {
                         switch (opts.navdir) {
                             case 'vertical':
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index b66c45363e4..78c5b4b91a8 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -172,7 +172,6 @@ define([
                          * Is triggered when breakpoint enties.
                          */
                         entry: function () {
-                            triggeredBreakpoints++;
                             $.extend(true, config, _.clone(startConfig));
 
                             settings.api.updateOptions(settings.defaultConfig.options, true);
@@ -189,16 +188,13 @@ define([
                          * Is triggered when breakpoint exits.
                          */
                         exit: function () {
-                            if (triggeredBreakpoints < 1) {
-                                $.extend(true, config, _.clone(startConfig));
-                                settings.api.updateOptions(settings.defaultConfig.options, true);
-
-                                if (settings.isFullscreen) {
-                                    settings.api.updateOptions(settings.fullscreenConfig, true);
-                                }
-                                settings.activeBreakpoint = {};
+                            $.extend(true, config, _.clone(startConfig));
+                            settings.api.updateOptions(settings.defaultConfig.options, true);
+
+                            if (settings.isFullscreen) {
+                                settings.api.updateOptions(settings.fullscreenConfig, true);
                             }
-                            triggeredBreakpoints--;
+                            settings.activeBreakpoint = {};
                         }
                     });
                 });
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 195dd5dec43..05fb94cd6aa 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -1058,6 +1058,7 @@
     text-align: center;
     .fotorama__img {
         height: auto;
+        width: auto;
         max-height: 100%;
         max-width: 100%;
         vertical-align: middle;
@@ -1102,75 +1103,12 @@
             bottom: 0;
             left: 0;
             right: 0;
-        }
-    }
-}
-
 
-.fotorama__nav-wrap--vertical {
-    &.fotorama__nav-wrap {
-        display: inline-block;
-        position: absolute;
-        top: 0;
-        left: 0;
-    }
-
-    .fotorama__nav__shaft {
-        width: 100%;
-        background-color: white;
-        .fotorama__nav__frame--thumb {
-            display: block;
-            padding-bottom: inherit !important;
-        }
-    }
-}
-
-.fotorama--fullscreen {
-    .fotorama__stage__frame {
-        .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0;
-            bottom: 0;
-            left: 0;
-            right: 0;
         }
-    }
-}
 
-
-.fotorama__nav-wrap--vertical {
-    &.fotorama__nav-wrap {
-        display: inline-block;
-        position: absolute;
-        top: 0;
-        left: 0;
-    }
-
-    .fotorama__nav__shaft {
-        width: 100%;
-        background-color: white;
-        .fotorama__nav__frame--thumb {
-            display: block;
-            padding-bottom: inherit !important;
-        }
     }
 }
 
-.fotorama--fullscreen {
-    .fotorama__stage__frame {
-        .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0;
-            bottom: 0;
-            left: 0;
-            right: 0;
-        }
-    }
+body.fotorama__fullscreen {
+    overflow-y: hidden;
 }
-
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 6a9f279d9e5..294d1b4c651 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -187,7 +187,7 @@
             data[idx].lensH = data[idx].lensH > $thumb.height() ? $thumb.height() : data[idx].lensH;
             lens.css({
                 width: data[idx].lensW + 1 + 'px',
-                height: data[idx].lensH + 'px'
+                height: data[idx].lensH + 0.5 + 'px'
             });
         }
 
@@ -301,8 +301,8 @@
                     pos.l = pos.l <= 0 ? 0 : pos.l;
                     //pos.l = pos.l > 0 ? pos.l : pos.l;
                     curLens.css({
-                        left: pos.l + paddingX + 'px',
-                        top: pos.t + paddingY + 'px'
+                        left: pos.l + paddingX +'px',
+                        top: pos.t + paddingY + 1.75 + 'px'
                     });
 
                     if (lensbg) {
@@ -587,7 +587,7 @@
                 touch,
                 isTouchEnabled = 'ontouchstart' in document.documentElement;
 
-            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load fotorama:ready', function () {
 
                 var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                     $imageContainer = $image.parent(),
@@ -600,7 +600,32 @@
                     });
                 });
 
-                $image.on(isTouchEnabled ? 'touchstart' : 'mousedown', function (e) {
+                if (gallery.data('fotorama').fullScreen) {
+
+                    $('.fotorama__stage__frame .fotorama__img').each(function () {
+                        var image = new Image();
+                        image.src = $(this).attr("src");
+
+                        if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                            if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                                $(this).width($(this).parent().width());
+                                $(this).height('auto');
+                            } else {
+                                $(this).height($(this).parent().height());
+                                $(this).width('auto');
+                            }
+
+                            $(this).css({
+                                'top': '',
+                                'left': ''
+                            });
+                        }
+
+                    });
+                }
+
+                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDow', function (e) {
                     if (gallery.data('fotorama').fullScreen) {
                         e.preventDefault();
 
@@ -613,18 +638,23 @@
                             e.clientX = touch.pageX;
                             e.clientY = touch.pageY;
                         }
-                        startX = e.clientX;
-                        startY = e.clientY;
+                        startX = e.clientX || e.originalEvent.clientX;
+                        startY = e.clientY || e.originalEvent.clientY;
                         isDragActive = true;
                     }
                 });
 
-                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove', function (e) {
+
+
+                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
                     if (gallery.data('fotorama').fullScreen && isDragActive) {
 
                         var top,
                             left,
-                            startOffset = $image.offset();
+                            startOffset = $image.offset(),
+                            clientX = e.clientX || e.originalEvent.clientX,
+                            clientY = e.clientY || e.originalEvent.clientY;
+
 
                         e.preventDefault();
 
@@ -633,8 +663,8 @@
                             e.clientX = touch.pageX;
                             e.clientY = touch.pageY;
                         }
-                        top = +imagePosY + (e.clientY - startY);
-                        left = +imagePosX + (e.clientX - startX);
+                        top = +imagePosY + (clientY - startY);
+                        left = +imagePosX + (clientX - startX);
 
                         if ($image.height() > $imageContainer.height()) {
 
@@ -653,7 +683,7 @@
                             if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
                                 left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
                             } else {
-                                left = ($imageContainer.offset().left < left) ? 0 : left;
+                                left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
                             }
                             $image.offset({
                                 'left': left
@@ -662,7 +692,7 @@
                     }
                 });
 
-                $image.on(isTouchEnabled ? 'touchend' : 'mouseup', function (e) {
+                $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
                     if (gallery.data('fotorama').fullScreen) {
                         isDragActive = false;
                         $image.css('cursor', 'pointer');
@@ -678,9 +708,51 @@
             }
         }
 
+        if ($('.fotorama-item').data('fotorama').fullScreen) {
+            $('.fotorama__stage__frame .fotorama__img').each(function () {
+                var image = new Image();
+                image.src = $(this).attr("src");
+
+                if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                    if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                        $(this).width($(this).parent().width());
+                        $(this).height('');
+                    } else {
+                        $(this).height($(this).parent().height());
+                        $(this).width('');
+                    }
+                }
+            });
+        }
+
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
 
+            if ($('.fotorama-item').data('fotorama').fullScreen) {
+                $('.fotorama__stage__frame .fotorama__img').each(function () {
+                    var image = new Image();
+                    image.src = $(this).attr("src");
+
+                    if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                        if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                            $(this).width($(this).parent().width());
+                            $(this).height('');
+                        } else {
+                            $(this).height($(this).parent().height());
+                            $(this).width('');
+                        }
+                    }
+                });
+            }
+
+
+            _init($box, gOptions);
+
+        });
+
+        function checkFullscreenImagePosition() {
             if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
 
                 var $image = $('[data-gallery-role="stage-shaft"] > [data-active="true"] > img'),
@@ -715,10 +787,8 @@
                     $image.css('top', '');
                 }
             }
+        }
 
-            _init($box, gOptions);
-
-        });
         function zoomIn(e) {
             var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                 gallery = $('[data-gallery-role="gallery"]'),
@@ -729,7 +799,8 @@
             if (setedResult >imgOriginalSize.rw) {
                 setedResult = imgOriginalSize.rw;
             }
-            $image.css('width', setedResult);
+            $image.css({'width': setedResult, height: 'auto'});
+            checkFullscreenImagePosition();
         }
 
         function zoomOut(e) {
@@ -737,12 +808,15 @@
                 gallery = $('[data-gallery-role="gallery"]'),
                 imgOriginalSize = getImageSize($image[0].src),
                 setedResult = Math.round($image.width() - 10);
-            e.preventDefault();
+            if(e) {
+                e.preventDefault();
+            }
 
             if (setedResult < imgOriginalSize.rw/2) {
                 setedResult = imgOriginalSize.rw/2;
             }
-            $image.css('width', setedResult);
+            $image.css({'width': setedResult, height: 'auto'});
+            checkFullscreenImagePosition();
         }
 
         /**
@@ -774,7 +848,9 @@
 
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
-        magnifierFullscreen();
         setEventOnce();
+        //checkFullscreenImagePosition();
+        magnifierFullscreen();
+
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 3544ad6b6c3..cd96c0f6328 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -63,7 +63,7 @@ define([
             thumb: '.fotorama__img',
             largeWrapper: '[data-gallery-role="magnifier"]',
             height: config.magnifierOpts.height || function () {
-                return $('[data-active="true"]').width() / config.options.ratio;
+                return $('[data-active="true"]').height();
             },
             width: config.magnifierOpts.width || function () {
                 var productMedia = $(gallerySelector).parent().parent();
@@ -85,7 +85,6 @@ define([
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('fotorama:show fotorama:fullscreenenter ', function () {
-           console.log('AAAAAA')
             hideMagnifier();
         });
 
-- 
GitLab


From d7bfee080c90802b348c94513af6b9d6d6d89a4e Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 16 Sep 2015 15:17:27 +0300
Subject: [PATCH 080/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

---
 lib/web/fotorama/fotorama.js   | 13 ++----
 lib/web/magnifier/magnifier.js | 74 ++++++++++++++++------------------
 lib/web/magnifier/magnify.js   |  2 +-
 3 files changed, 40 insertions(+), 49 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 453597325f4..ef45700a3ed 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1035,7 +1035,6 @@ fotoramaVersion = '4.6.4';
                     obj.transform = 'translate3d(0, ' + (pos) + 'px,0)';
                     break;
                 case 'list':
-                    //console.warn("transition not implemented");
                     break;
                 default :
                     obj.transform = 'translate3d(' + (pos) + 'px,0,0)';
@@ -1909,15 +1908,12 @@ fotoramaVersion = '4.6.4';
         }
 
         function onEnd(result) {
-            //////console.time('moveontouch.js onEnd');
             if (tail.noSwipe && result.moved) return;
 
             if (!tracked) {
                 startTracking(result.startEvent, true);
             }
 
-            ////console.log('onEnd');
-
             result.touch || MS_POINTER || $el.removeClass(grabbingClass);
 
             endTime = $.now();
@@ -2294,7 +2290,7 @@ fotoramaVersion = '4.6.4';
             data = that.data = data || clone(opts.data) || getDataFromHtml($fotorama);
             size = that.size = data.length;
 
-            !ready.ok && opts.shuffle && shuffle(data);
+            ready.ok && opts.shuffle && shuffle(data);
 
             checkForVideo();
 
@@ -3412,7 +3408,6 @@ fotoramaVersion = '4.6.4';
                                 $navWrap.removeClass(navShaftVerticalClass);
                                 $navWrap.removeClass(navShaftHorisontalClass);
                                 $navWrap.addClass(navShaftListClass);
-                                //console.warn("List not implemented");
                                 break;
                             default:
                                 $navWrap.removeClass(navShaftVerticalClass);
@@ -3431,6 +3426,7 @@ fotoramaVersion = '4.6.4';
 
                     measuresSetFLAG = setFLAG || true;
 
+                    ready.ok = true;
                     ready();
                 }
             }
@@ -3705,7 +3701,6 @@ fotoramaVersion = '4.6.4';
                 }, 0);
             },
             function () {
-                ////console.log("click");
                 if (!hoverFLAG) return;
                 toggleControlsClass(!(hoverFLAG = false));
             }
@@ -3806,8 +3801,8 @@ fotoramaVersion = '4.6.4';
         });
 
         function ready() {
-            if (!ready.ok) {
-                ready.ok = true;
+            if (ready.ok) {
+                ready.ok = false;
                 triggerEvent('ready');
             }
         }
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 294d1b4c651..355321a00f5 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -116,42 +116,6 @@
             _init($box, options);
         };
 
-        /**
-         * Delete events and created block for magnify
-         *
-         */
-        that.destroy  = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.zoomIn = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.zoomOut = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.show = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.hide = function () {
-            console.warn("API not implemented.");
-        };
-
         function createLens(thumb) {
             if ($(thumb).siblings('.magnify-lens').length) {
                 return false;
@@ -587,8 +551,7 @@
                 touch,
                 isTouchEnabled = 'ontouchstart' in document.documentElement;
 
-            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load fotorama:ready', function () {
-
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
                 var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                     $imageContainer = $image.parent(),
                     gallery = $('[data-gallery-role="gallery"]');
@@ -849,8 +812,41 @@
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
         setEventOnce();
-        //checkFullscreenImagePosition();
         magnifierFullscreen();
 
+        $('.fotorama-item').on('fotorama:load', function () {
+            if (document.querySelector('.fotorama__stage').addEventListener) {
+                if ('onwheel' in document) {
+                    // IE9+, FF17+, Ch31+
+                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheel);
+                } else if ('onmousewheel' in document) {
+
+                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheel);
+                } else {
+                    // Firefox < 17
+                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheel);
+                }
+            } else { // IE8-
+                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheel);
+            }
+
+            function onWheel(e) {
+                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+                    e = e || window.event;
+
+
+                    var delta = e.deltaY || e.detail || e.wheelDelta;
+
+                    if (delta > 0) {
+                        zoomOut(e)
+                    } else {
+                        zoomIn(e)
+                    }
+
+                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
+                }
+            }
+        })
+
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index cd96c0f6328..c78f1705517 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -78,7 +78,7 @@ define([
             }
         });
 
-        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit', function (e, fotorama) {
+        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
-- 
GitLab


From aefc2f5c952bf679e663f3ef2ab62dfca29ade36 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Wed, 16 Sep 2015 16:04:33 +0300
Subject: [PATCH 081/420] MAGETWO-42478: Stabialize

-
---
 .../templates/product/view/gallery.phtml      |   4 +-
 .../view/frontend/web/js/configurable.js      | 106 +++++++++++-------
 lib/web/mage/gallery/gallery.js               |  34 +++---
 3 files changed, 83 insertions(+), 61 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 9ab7c65ab91..e0708dceabb 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -10,10 +10,10 @@
  * @var $block \Magento\Catalog\Block\Product\View\Gallery
  */
 ?>
-<div class="gallery-placeholder"></div>
+<div class="gallery-placeholder" data-gallery-role="gallery-placeholder"></div>
 <script type="text/x-magento-init">
     {
-        ".gallery-placeholder": {
+        "[data-gallery-role=gallery-placeholder]": {
             "mage/gallery/gallery": {
                 "mixins":["magnifier/magnify"],
                 "magnifierOpts": <?php echo $block->getMagnifier(); ?>,
diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index f4dc170bbb3..0f64cdd1a2d 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -12,6 +12,7 @@ define([
     'jquery/ui',
     'jquery/jquery.parsequery'
 ], function ($, _, mageTemplate) {
+    'use strict';
 
     $.widget('mage.configurable', {
         options: {
@@ -24,13 +25,17 @@ define([
             '<% if (data.finalPrice.value) { %>' +
             ' <%- data.finalPrice.formatted %>' +
             '<% } %>',
-            mediaGallerySelector: '[data-gallery-role=gallery]'
+            mediaGallerySelector: '[data-gallery-role=gallery-placeholder]',
+            mediaGalleryInitial: null
         },
+
         /**
          * Creates widget
          * @private
          */
         _create: function () {
+            this._setDefaults();
+
             // Initial setting of various option values
             this._initializeOptions();
 
@@ -50,6 +55,21 @@ define([
             this._configureForValues();
         },
 
+        /**
+         * Prepare Gallery state
+         *
+         * @private
+         */
+        _setDefaults: function () {
+            var options = this.options,
+                gallery = $(options.mediaGallerySelector);
+
+            gallery.on('gallery:loaded', function () {
+                var galleryObject = gallery.data('gallery');
+                options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+            });
+        },
+
         /**
          * Initialize tax configuration, initial settings, and options values.
          * @private
@@ -66,7 +86,7 @@ define([
             }
             this.options.optionTemplate = mageTemplate(this.options.optionTemplate);
 
-            this.options.settings = (this.options.spConfig.containerId) ?
+            this.options.settings = this.options.spConfig.containerId ?
                 $(this.options.spConfig.containerId).find(this.options.superSelector) :
                 $(this.options.superSelector);
 
@@ -120,8 +140,10 @@ define([
         _setValuesByAttribute: function () {
             this.options.values = {};
             $.each(this.options.settings, $.proxy(function (index, element) {
+                var attributeId;
+
                 if (element.value) {
-                    var attributeId = element.id.replace(/[a-z]*/, '');
+                    attributeId = element.id.replace(/[a-z]*/, '');
                     this.options.values[attributeId] = element.value;
                 }
             }, this));
@@ -191,9 +213,7 @@ define([
             if (this.options.values) {
                 this.options.settings.each($.proxy(function (index, element) {
                     var attributeId = element.attributeId;
-                    element.value = (typeof (this.options.values[attributeId]) === 'undefined') ?
-                        '' :
-                        this.options.values[attributeId];
+                    element.value = this.options.values[attributeId] || '';
                     this._configureElement(element);
                 }, this));
             }
@@ -215,6 +235,8 @@ define([
          * @param {*} element - The element associated with a configurable option.
          */
         _configureElement: function (element) {
+            this.simpleProduct = this._getSimpleProductId(element);
+
             if (element.value) {
                 this.options.state[element.config.id] = element.value;
 
@@ -237,40 +259,14 @@ define([
          * @private
          */
         _changeProductImage: function () {
-            var state = (function () {
-                    var p,
-                        state = JSON.stringify(this.options.state);
-
-                    for (p in this.options.spConfig.index) {
-
-                        if (JSON.stringify(this.options.spConfig.index[p]) === state) {
-                            return p;
-                        }
-                    }
-
-                    return false;
-                }.bind(this)()),
-                option = (function () {
-                    return this.options.state[state] ? this.options.state[state] : false;
-                }.bind(this)()),
-                images,
+            var images = this.options.spConfig.images[this.simpleProduct],
                 galleryObject = $(this.options.mediaGallerySelector).data('gallery');
 
-            if (state && state !== this.options.previousState) {
-                this.options.previousState = state;
-                images = this.options.spConfig.images[state];
-            }
-
             if (galleryObject) {
-
-                if (!this.options.initialState) {
-                    this.options.initialState = galleryObject.returnCurrentImages();
-                }
-
                 if (images) {
                     galleryObject.updateData(images);
-                } else if (!option) {
-                    galleryObject.updateData(this.options.initialState);
+                } else {
+                    galleryObject.updateData(this.options.mediaGalleryInitial);
                 }
             }
         },
@@ -283,13 +279,13 @@ define([
          */
         _resetChildren: function (element) {
             if (element.childSettings) {
-                for (var i = 0; i < element.childSettings.length; i++) {
-                    element.childSettings[i].selectedIndex = 0;
-                    element.childSettings[i].disabled = true;
+                _.each(element.childSettings, function (set) {
+                    set.selectedIndex = 0;
+                    set.disabled = true;
+                });
 
-                    if (element.config) {
-                        this.options.state[element.config.id] = false;
-                    }
+                if (element.config) {
+                    this.options.state[element.config.id] = false;
                 }
             }
         },
@@ -390,6 +386,7 @@ define([
         _reloadPrice: function () {
             $(this.options.priceHolderSelector).trigger('updatePrice', this._getPrices());
         },
+
         /**
          * Get product various prices
          * @returns {{}}
@@ -410,6 +407,7 @@ define([
 
             return prices;
         },
+
         /**
          * Returns pracies for configured products
          *
@@ -423,11 +421,35 @@ define([
 
             _.each(displayPrices, function (price, code) {
                 if (newPrices[code]) {
-                    displayPrices[code].amount = newPrices[code].amount - displayPrices[code].amount
+                    displayPrices[code].amount = newPrices[code].amount - displayPrices[code].amount;
                 }
             });
 
             return displayPrices;
+        },
+
+        /**
+         * _getState
+         *
+         * @private
+         */
+        _getSimpleProductId: function (element) {
+            //element.config
+            //element.value
+
+            var allOptions = element.config.options,
+                value = element.value,
+                config;
+
+            config = _.filter(allOptions, function(option) {
+                return option.id === value;
+            });
+
+            config = _.first(config);
+            console.log(config.allowedProducts);
+
+            return _.first(config.allowedProducts);
+
         }
 
     });
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9f7aa62bec7..ae2c8e468e8 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -127,9 +127,9 @@ define([
             config.startindex = mainImage;
             settings.currentConfig = config;
             settings.$element.html(template);
-            settings.$element = $(settings.$element.children()[0]);
-            settings.$element.fotorama(config);
-            settings.fotoramaApi = settings.$element.data('fotorama');
+            settings.$elementF = $(settings.$element.children()[0]);
+            settings.$elementF.fotorama(config);
+            settings.fotoramaApi = settings.$elementF.data('fotorama');
             $.extend(true, config, this.startConfig);
         },
 
@@ -203,28 +203,28 @@ define([
                      * Displays the last image on preview.
                      */
                     last: function () {
-                        this.fotorama.show('>>');
+                        settings.fotoramaApi.show('>>');
                     },
 
                     /**
                      * Displays the first image on preview.
                      */
                     first: function () {
-                        this.fotorama.show('<<');
+                        settings.fotoramaApi.show('<<');
                     },
 
                     /**
                      * Displays previous element on preview.
                      */
                     prev: function () {
-                        this.fotorama.show('<');
+                        settings.fotoramaApi.show('<');
                     },
 
                     /**
                      * Displays next element on preview.
                      */
                     next: function () {
-                        this.fotorama.show('>');
+                        settings.fotoramaApi.show('>');
                     },
 
                     /**
@@ -237,7 +237,7 @@ define([
                             if (index > 0) {
                                 index -= 1;
                             }
-                            this.fotorama.show(index);
+                            settings.fotoramaApi.show(index);
                         }
                     },
 
@@ -264,7 +264,7 @@ define([
 
                             }
                             $.extend(true, settings.currentConfig.options, configuration);
-                            this.fotorama.setOptions(settings.currentConfig.options);
+                            settings.fotoramaApi.setOptions(settings.currentConfig.options);
                         }
                     },
 
@@ -274,7 +274,7 @@ define([
                      */
                     updateData: function (data) {
                         if (_.isArray(data)) {
-                            this.fotorama.load(data);
+                            settings.fotoramaApi.load(data);
                             $.extend(false, settings.defaultConfig, {
                                 data: data
                             });
@@ -284,20 +284,20 @@ define([
                         }
                     },
 
-                    /**Returns curent images list
+                    /**
+                     * Returns current images list
                      *
-                     * @return {Array}
+                     * @returns {Array}
                      */
                     returnCurrentImages: function () {
                         var images = [];
 
-                        _.forEach(this.fotorama.data, function (item) {
-                            images.push({
-                                'img': item.img
-                            })
-                        });
+                        _(settings.fotoramaApi.data).each(images.push, images);
+
+                        return images;
                     }
                 };
+
             settings.$element.data('gallery', api);
             settings.api = settings.$element.data('gallery');
             settings.$element.trigger('gallery:loaded');
-- 
GitLab


From 3a45835e61f64da9c11fc73e931aa8c66e86e3d8 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Wed, 16 Sep 2015 17:22:00 +0300
Subject: [PATCH 082/420] MAGETWO-42439: Customer custom attribute of 'file'
 type isn't supported by UI Form Component

- Add support of file uploading
---
 app/code/Magento/Ui/etc/ui_definition.xsd     |  1 +
 .../view/base/ui_component/etc/definition.xml | 13 ++++-
 .../Ui/view/base/web/js/form/client.js        | 15 +-----
 .../view/base/web/js/form/element/abstract.js | 11 +++--
 .../Ui/view/base/web/js/form/element/media.js | 48 +++++++++++++++++++
 .../base/web/js/form/element/ui-select.js     | 13 ++---
 .../Magento/Ui/view/base/web/js/form/form.js  |  5 +-
 .../Ui/view/base/web/js/form/provider.js      | 32 ++++++++++---
 .../web/templates/form/element/media.html     |  3 +-
 lib/web/mage/utils/misc.js                    | 28 ++++++++---
 10 files changed, 126 insertions(+), 43 deletions(-)
 create mode 100644 app/code/Magento/Ui/view/base/web/js/form/element/media.js

diff --git a/app/code/Magento/Ui/etc/ui_definition.xsd b/app/code/Magento/Ui/etc/ui_definition.xsd
index 75b710a0e8b..a5eac2fd7db 100644
--- a/app/code/Magento/Ui/etc/ui_definition.xsd
+++ b/app/code/Magento/Ui/etc/ui_definition.xsd
@@ -48,6 +48,7 @@
             <xs:element type="dataTypeMedia" name="image"/>
             <xs:element type="dataTypeDate" name="date"/>
             <xs:element type="dataTypeEmail" name="email"/>
+            <xs:element type="dataTypeMedia" name="file"/>
             <xs:element type="nav" name="nav"/>
             <xs:element type="actions" name="actions"/>
             <xs:element type="bookmark" name="bookmark"/>
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index a3a7bd17d65..1ae97790525 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -212,7 +212,7 @@
     <image class="Magento\Ui\Component\Form\Element\DataType\Media">
         <argument name="data" xsi:type="array">
             <item name="js_config" xsi:type="array">
-                <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item>
+                <item name="component" xsi:type="string">Magento_Ui/js/form/element/media</item>
                 <item name="config" xsi:type="array">
                     <item name="template" xsi:type="string">ui/form/field</item>
                     <item name="elementTmpl" xsi:type="string">ui/form/element/media</item>
@@ -220,6 +220,17 @@
             </item>
         </argument>
     </image>
+    <file class="Magento\Ui\Component\Form\Element\DataType\Media">
+        <argument name="data" xsi:type="array">
+            <item name="js_config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/form/element/media</item>
+                <item name="config" xsi:type="array">
+                    <item name="template" xsi:type="string">ui/form/field</item>
+                    <item name="elementTmpl" xsi:type="string">ui/form/element/media</item>
+                </item>
+            </item>
+        </argument>
+    </file>
     <date class="Magento\Ui\Component\Form\Element\DataType\Date">
         <argument name="data" xsi:type="array">
             <item name="js_config" xsi:type="array">
diff --git a/app/code/Magento/Ui/view/base/web/js/form/client.js b/app/code/Magento/Ui/view/base/web/js/form/client.js
index 6c6bdbfcf30..7f5904ab432 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/client.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/client.js
@@ -15,7 +15,7 @@ define([
 
         data = utils.serialize(data);
 
-        data.form_key = FORM_KEY;
+        data.form_key = window.FORM_KEY;
 
         if (!url) {
             save.resolve();
@@ -52,15 +52,6 @@ define([
     }
 
     return Class.extend({
-        /**
-         * Initializes DataProvider instance.
-         * @param {Object} settings - Settings to initialize object with.
-         */
-        initialize: function (config) {
-            _.extend(this, config);
-
-            return this;
-        },
 
         /**
          * Assembles data and submits it using 'utils.submit' method
@@ -79,8 +70,6 @@ define([
 
             options = options || {};
 
-            data.form_key = FORM_KEY;
-
             if (!options.redirect) {
                 url += 'back/edit';
             }
@@ -88,7 +77,7 @@ define([
             utils.submit({
                 url: url,
                 data: data
-            });
+            }, options.attributes);
 
             return this;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
index b9efcbef944..807679106bb 100755
--- a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
@@ -18,7 +18,6 @@ define([
             focused: false,
             required: false,
             disabled: false,
-            tmpPath: 'ui/form/element/',
             tooltipTpl: 'ui/form/element/helper/tooltip',
             'input_type': 'input',
             placeholder: '',
@@ -78,14 +77,16 @@ define([
          * @returns {Abstract} Chainable.
          */
         initProperties: function () {
-            var uid = utils.uniqueid();
+            var uid     = utils.uniqueid(),
+                scope   = this.dataScope,
+                name    = scope.split('.').slice(1);
 
             this._super();
 
             _.extend(this, {
-                'uid': uid,
-                'noticeId': 'notice-' + uid,
-                'inputName': utils.serializeName(this.dataScope)
+                uid: uid,
+                noticeId: 'notice-' + uid,
+                inputName: utils.serializeName(name.join('.'))
             });
 
             return this;
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/media.js b/app/code/Magento/Ui/view/base/web/js/form/element/media.js
new file mode 100644
index 00000000000..31b610c481b
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/media.js
@@ -0,0 +1,48 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'mageUtils',
+    './abstract'
+], function (utils, Abstract) {
+    'use strict';
+
+    return Abstract.extend({
+        defaults: {
+            links: {
+                value: ''
+            }
+        },
+
+        /**
+         * Initializes file component.
+         *
+         * @returns {Media} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initFormId();
+
+            return this;
+        },
+
+        /**
+         * Defines form ID with which file input will be associated.
+         *
+         * @returns {Media} Chainable.
+         */
+        initFormId: function () {
+            var namespace;
+
+            if (this.formId) {
+                return this;
+            }
+
+            namespace   = this.name.split('.');
+            this.formId = namespace[0];
+
+            return this;
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
index 638f78341d6..f7fc12d5f1d 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
@@ -490,16 +490,11 @@ define([
          * @returns {String}
          */
         getPreview: function () {
-            var i = 0,
-                selected = this.getSelected(),
-                length = selected.length,
-                result = [];
-
-            for (i; i < length; i++) {
-                result.push(selected[i].label);
-            }
+            var selected = this.getSelected();
 
-            return result.join(', ');
+            return selected.map(function (option) {
+                return option.label;
+            }).join(', ');
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/form/form.js b/app/code/Magento/Ui/view/base/web/js/form/form.js
index 2a192c20c24..ad64e867403 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/form.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/form.js
@@ -76,7 +76,10 @@ define([
             });
 
             source.save({
-                redirect: redirect
+                redirect: redirect,
+                attributes: {
+                    id: this.namespace
+                }
             });
         },
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/provider.js b/app/code/Magento/Ui/view/base/web/js/form/provider.js
index 8b182d2b8f2..5587fe95f2b 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/provider.js
@@ -10,6 +10,20 @@ define([
     'use strict';
 
     return Component.extend({
+        defaults: {
+            clientConfig: {
+                urls: {
+                    save: '${ $.submit_url }',
+                    beforeSave: '${ $.validate_url }'
+                }
+            }
+        },
+
+        /**
+         * Initializes provider component.
+         *
+         * @returns {Provider} Chainable.
+         */
         initialize: function () {
             this._super()
                 .initClient();
@@ -17,17 +31,23 @@ define([
             return this;
         },
 
+        /**
+         * Initializes client component.
+         *
+         * @returns {Provider} Chainable.
+         */
         initClient: function () {
-            this.client = new Client({
-                urls: {
-                    beforeSave: this.validate_url,
-                    save: this.submit_url
-                }
-            });
+            this.client = new Client(this.clientConfig);
 
             return this;
         },
 
+        /**
+         * Saves currently available data.
+         *
+         * @param {Object} [options] - Addtitional request options.
+         * @returns {Provider} Chainable.
+         */
         save: function (options) {
             var data = this.get('data');
 
diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/media.html b/app/code/Magento/Ui/view/base/web/templates/form/element/media.html
index 64c9f82070d..627d6689262 100644
--- a/app/code/Magento/Ui/view/base/web/templates/form/element/media.html
+++ b/app/code/Magento/Ui/view/base/web/templates/form/element/media.html
@@ -12,6 +12,7 @@
         placeholder: placeholder,
         'aria-describedby': noticeId,
         id: uid,
-        disabled: disabled
+        disabled: disabled,
+        form: formId
     }"
 />
diff --git a/lib/web/mage/utils/misc.js b/lib/web/mage/utils/misc.js
index 8885679a61c..afbdf70ae45 100644
--- a/lib/web/mage/utils/misc.js
+++ b/lib/web/mage/utils/misc.js
@@ -7,7 +7,15 @@ define([
 ], function (_) {
     'use strict';
 
-    var map = {
+    var defaultAttributes,
+        map;
+
+    defaultAttributes = {
+        method: 'post',
+        enctype: 'multipart/form-data'
+    };
+
+    map = {
         'D': 'DDD',
         'dd': 'DD',
         'd': 'D',
@@ -106,15 +114,21 @@ define([
          * @param {Object} options - Options object that consists of
          *      a 'url' and 'data' properties.
          */
-        submit: function (options) {
-            var form = document.createElement('form'),
-                data = this.serialize(options.data),
+        submit: function (options, attrs) {
+            var form        = document.createElement('form'),
+                data        = this.serialize(options.data),
+                attributes  = _.extend({}, defaultAttributes, attrs || {}),
                 field;
 
-            data.form_key = FORM_KEY;
+            if (!attributes.action) {
+                attributes.action = options.url;
+            }
+
+            data.form_key = window.FORM_KEY;
 
-            form.setAttribute('action', options.url);
-            form.setAttribute('method', 'post');
+            _.each(attributes, function (value, name) {
+                form.setAttribute(name, value);
+            });
 
             _.each(data, function (value, name) {
                 field = document.createElement('input');
-- 
GitLab


From eff5137842d7ee8ceaf06df10acc7540676a1224 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Wed, 16 Sep 2015 18:43:12 +0300
Subject: [PATCH 083/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../catalog/product/attribute/form.phtml      |  7 +-
 .../adminhtml/templates/browser/content.phtml | 11 ---
 .../backend/web/css/source/_components.less   |  1 +
 .../backend/web/css/source/_forms.less        |  1 +
 .../source/components/_file-insertion.less    | 54 ++++++++++++++
 .../css/source/components/_modals_extend.less | 40 +++++++---
 .../web/css/source/components/_popups.less    |  3 +-
 .../modals_extend/_wysiwyg_images.less        | 74 -------------------
 .../web/css/source/forms/form-wysiwyg.less    | 15 ++++
 9 files changed, 105 insertions(+), 101 deletions(-)
 create mode 100644 app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
 delete mode 100644 app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less
 create mode 100644 app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
index 98f5a0a6505..8bc0b649753 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
@@ -13,14 +13,15 @@
  */
 ?>
 <?php /* @escapeNotVerified */ echo $block->getFormInitScripts() ?>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php /* @escapeNotVerified */ echo $block->getUiId('content-header') ?>>
+    <?php echo $block->getButtonsHtml('header') ?>
+</div>
+
 <form id="edit_form" class="admin__scope-old" action="<?php echo $block->escapeHtml($block->getSaveUrl()) ?>" method="post">
     <input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
     <?php echo $block->getChildHtml('form') ?>
 </form>
 
-<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php /* @escapeNotVerified */ echo $block->getUiId('content-header') ?>>
-    <?php echo $block->getButtonsHtml('header') ?>
-</div>
 
 <script>
 require(['jquery', "mage/mage"], function(jQuery){
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
index 76f1c808e3c..e2413267b89 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
@@ -13,17 +13,6 @@
 ?>
 <?php echo $block->getChildHtml('wysiwyg_files.js') ?>
 
-<div class="content-header skip-header" id="content_header">
-    <table>
-        <tr>
-            <td><h3 id="content_header_text"><?php /* @escapeNotVerified */ echo $block->getHeaderText() ?></h3></td>
-            <td class="form-buttons">
-                <?php echo $block->getButtonsHtml() ?>
-            </td>
-        </tr>
-    </table>
-</div>
-
 <div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div>
 <div id="contents"></div>
 <div id="contents-newfolder" class="no-display"><?php echo $block->getChildHtml('wysiwyg_files.newfolder') ?></div>
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_components.less b/app/design/adminhtml/Magento/backend/web/css/source/_components.less
index a9ee8f523cc..b376a1a2bd2 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_components.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_components.less
@@ -13,3 +13,4 @@
 @import 'components/_popups.less';
 @import 'components/_modals.less';
 @import 'components/_modals_extend.less';
+@import 'components/_file-insertion.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
index 2e18751ca49..7abfeb8ef90 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
@@ -7,3 +7,4 @@
 @import 'forms/_controls.less';
 @import 'forms/_fields.less';
 @import 'forms/_temp.less';
+@import 'forms/form-wysiwyg.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
new file mode 100644
index 00000000000..b1e17f9a69d
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -0,0 +1,54 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+
+//
+//  Block 'Insert File'
+//  _________________________________________
+
+.modal-slide {
+}
+
+.contents-uploader {
+    margin: 0 0 @indent__base;
+}
+
+.fileinput-button {
+    cursor: pointer;
+    display: inline-block;
+    float: none;
+    vertical-align: middle;
+    span {
+        display: none;
+    }
+    input {
+        border: none;
+        -moz-transform: none;
+        opacity: 1;
+        position: static;
+    }
+}
+
+.file-row {
+    border: 1px solid @color-gray68;
+    margin: @indent__xs 0;
+    padding: 2px;
+}
+
+.filecnt {
+    border: 1px solid @color-gray68;
+    cursor: pointer;
+    display: inline-block;
+    margin: 0 @indent__xs 15px 0;
+    overflow: hidden;
+    padding: 3px;
+    width: 100px;
+    &.selected {
+        border-color: @color-blue-dodger;
+    }
+    p {
+        text-align: center;
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 186dcb8fdf1..8f848d44d49 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -80,11 +80,28 @@
     }
 
     .modal-content {
-        .buttons-set {
-            margin: 0 0 15px;
-            button {
-                margin-right: 4px;
-            }
+
+    }
+
+    .magento_message {
+        padding: 0 @popup__padding__horizontal @popup__padding__vertical;
+        position: relative;
+    }
+
+    .main-col,
+    .magento_message {
+        .insert-title-inner {
+            &:extend(.abs-clearfix all);
+            border-bottom: 1px solid @color-gray68;
+            margin: 0 0 @indent__base;
+            padding-bottom: @indent__xs;
+        }
+        .insert-actions {
+            float: right;
+        }
+        .title {
+            font-size: @font-size__l;
+            padding-top: @indent__xs;
         }
     }
 
@@ -106,16 +123,15 @@
         width: 80%;
     }
 
+    .content-footer {
+        .form-buttons {
+            float: right;
+        }
+    }
 }
 
 .modal-title {
     font-weight: @font-weight__regular;
     margin-bottom: 0;
     min-height: 1em;
-}
-
-
-//
-//  Imports
-//  ---------------------------------------------
-@import 'modals_extend/_wysiwyg_images.less';
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
index 6586433b784..49b6c9e0849 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
@@ -389,7 +389,8 @@
 //  Attribute Popup
 //  _____________________________________________
 
-.attribute-popup-actions {
+
+.attribute-popup-actions { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel
     background: @color-white;
     border-top: 1px solid @color-gray68;
     bottom: 0;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less b/app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less
deleted file mode 100644
index ccf7b100864..00000000000
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/modals_extend/_wysiwyg_images.less
+++ /dev/null
@@ -1,74 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//  Wysiwyg images
-//  ---------------------------------------------
-
-.modal-slide {
-
-
-    //
-    //  Block 'Insert File'
-    //  -----------------------------------------
-
-    .main-col {
-        .insert-title-inner {
-            &:extend(.abs-clearfix all);
-            border-bottom: 1px solid @color-gray68;
-            margin: 0 0 @indent__base;
-            padding-bottom: @indent__xs;
-        }
-        .insert-actions {
-            float: right;
-        }
-        .title {
-            font-size: @font-size__l;
-            padding-top: @indent__xs;
-        }
-    }
-
-    .contents-uploader {
-        margin: 0 0 @indent__base;
-    }
-
-    .fileinput-button {
-        cursor: pointer;
-        display: inline-block;
-        float: none;
-        vertical-align: middle;
-        span {
-            display: none;
-        }
-        input {
-            border: none;
-            -moz-transform: none;
-            opacity: 1;
-            position: static;
-        }
-    }
-
-    .file-row {
-        border: 1px solid @color-gray68;
-        margin: @indent__xs 0;
-        padding: 2px;
-    }
-
-    .filecnt {
-        border: 1px solid @color-gray68;
-        display: inline-block;
-        margin: 0 @indent__xs 15px 0;
-        padding: 3px;
-        width: 100px;
-        overflow: hidden;
-        cursor: pointer;
-        &.selected {
-            border-color: @color-blue-dodger;
-        }
-        p {
-            text-align: center;
-        }
-    }
-}
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less
new file mode 100644
index 00000000000..aa55a49a6fd
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less
@@ -0,0 +1,15 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Wysiwyg form control styles
+//  ---------------------------------------------
+
+.buttons-set {
+    margin: 0 0 15px;
+    button {
+        margin-right: 4px;
+    }
+}
\ No newline at end of file
-- 
GitLab


From 06ee1f5e187c33fff16a1d6e754338d32fa25c76 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Thu, 17 Sep 2015 14:52:52 +0300
Subject: [PATCH 084/420] JS-185: Zoom buttons don't hide when picture size is
 small enough for full-screen mode

---
 lib/web/magnifier/magnifier.js | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 355321a00f5..2adcc955bac 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -542,6 +542,18 @@
             }
         }
 
+        function toggleZoomButtons($image) {
+            var image = new Image();
+            image.src = $image.attr("src");
+            if ( (image.height > $image.parent().height()) || (image.width > $image.parent().width()) ) {
+                $('.fotorama__zoom-in').show();
+                $('.fotorama__zoom-out').show();
+            } else {
+                $('.fotorama__zoom-in').hide();
+                $('.fotorama__zoom-out').hide();
+            }
+        }
+
         function magnifierFullscreen () {
             var isDragActive = false,
                 startX,
@@ -565,6 +577,8 @@
 
                 if (gallery.data('fotorama').fullScreen) {
 
+                    toggleZoomButtons($image);
+
                     $('.fotorama__stage__frame .fotorama__img').each(function () {
                         var image = new Image();
                         image.src = $(this).attr("src");
@@ -693,6 +707,7 @@
         $(window).resize(function() {
 
             if ($('.fotorama-item').data('fotorama').fullScreen) {
+
                 $('.fotorama__stage__frame .fotorama__img').each(function () {
                     var image = new Image();
                     image.src = $(this).attr("src");
@@ -708,6 +723,8 @@
                         }
                     }
                 });
+
+                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] img'));
             }
 
 
-- 
GitLab


From 512ab2e52f0489ba30afcc39503b3d90d625db05 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 17 Sep 2015 17:12:59 +0300
Subject: [PATCH 085/420] MAGETWO-42831: JS error "default is not defined" in
 some environment conditions

---
 lib/web/mage/cookies.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/web/mage/cookies.js b/lib/web/mage/cookies.js
index d30b49924a2..2b53a7a10ae 100644
--- a/lib/web/mage/cookies.js
+++ b/lib/web/mage/cookies.js
@@ -44,7 +44,7 @@
          * @return {Date|null} Calculated cookie expiration date or null if no lifetime provided.
          * @private
          */
-        function lifetimeToExpires(options) {
+        function lifetimeToExpires(options, defaults) {
             var expires,
                 lifetime;
 
@@ -71,7 +71,7 @@
                 secure;
 
             options = $.extend({}, this.defaults, options || {});
-            expires = lifetimeToExpires(options) || options.expires;
+            expires = lifetimeToExpires(options, this.defaults) || options.expires;
             path = options.path;
             domain = options.domain;
             secure = options.secure;
-- 
GitLab


From 0d90d7112c8fb1f15aa0f250b59c3ad7dd7b17a2 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 17 Sep 2015 17:22:54 +0300
Subject: [PATCH 086/420] MAGETWO-42831: JS error "default is not defined" in
 some environment conditions

---
 lib/web/mage/cookies.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/web/mage/cookies.js b/lib/web/mage/cookies.js
index 2b53a7a10ae..d4b98a23e64 100644
--- a/lib/web/mage/cookies.js
+++ b/lib/web/mage/cookies.js
@@ -52,6 +52,7 @@
 
             if (lifetime && lifetime > 0) {
                 expires = options.expires || new Date();
+                
                 return new Date(expires.getTime() + lifetime * 1000);
             }
 
-- 
GitLab


From ec8101f9a240c102a9ab02f77d041c7e46d58ee5 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Thu, 17 Sep 2015 19:01:55 +0300
Subject: [PATCH 087/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../form/renderer/fieldset/element.phtml      |  2 +-
 .../source/components/_file-insertion.less    | 33 +++++++++----------
 .../css/source/components/_modals_extend.less |  5 +--
 .../web/css/source/components/_popups.less    | 25 +++++++++-----
 .../Framework/Data/Form/Element/Editor.php    |  2 +-
 5 files changed, 35 insertions(+), 32 deletions(-)

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
index 824c0e92d6c..5d4ebd0ad27 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
@@ -37,7 +37,7 @@ $fieldAttributes = $fieldId . ' class="' . $fieldClass . '" '
         <?php else: ?>
             <?php echo $element->getLabelHtml() ?>
             <div class="admin__field-control control">
-                <?php /* @escapeNotVerified */ echo($addOn) ? '<div class="admin__field admin__field-option">' . $element->getElementHtml() . '</div>' : $element->getElementHtml(); ?>
+                <?php /* @escapeNotVerified */ echo($addOn) ? '<div class="admin__field">' . $element->getElementHtml() . '</div>' : $element->getElementHtml(); ?>
                 <?php /* @escapeNotVerified */ echo $note ?>
             </div>
         <?php endif; ?>
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
index b1e17f9a69d..ded39e78caf 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -8,29 +8,26 @@
 //  Block 'Insert File'
 //  _________________________________________
 
-.modal-slide {
-}
-
 .contents-uploader {
     margin: 0 0 @indent__base;
-}
-
-.fileinput-button {
-    cursor: pointer;
-    display: inline-block;
-    float: none;
-    vertical-align: middle;
-    span {
-        display: none;
-    }
-    input {
-        border: none;
-        -moz-transform: none;
-        opacity: 1;
-        position: static;
+    .fileinput-button {
+        cursor: pointer;
+        display: inline-block;
+        float: none;
+        vertical-align: middle;
+        span {
+            display: none;
+        }
+        input {
+            border: none;
+            -moz-transform: none;
+            opacity: 1;
+            position: static;
+        }
     }
 }
 
+
 .file-row {
     border: 1px solid @color-gray68;
     margin: @indent__xs 0;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 8f848d44d49..12c122edb51 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -67,6 +67,7 @@
         font-size: @modal-slide-title__font-size;
         margin-right: @modal-slide-title__font-size + @modal-slide__padding + 1rem;
     }
+
     .action-close {
         padding: @modal-slide-header__padding-vertical @modal-slide__padding;
         &:active {
@@ -79,10 +80,6 @@
         margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding;
     }
 
-    .modal-content {
-
-    }
-
     .magento_message {
         padding: 0 @popup__padding__horizontal @popup__padding__vertical;
         position: relative;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
index 49b6c9e0849..c11280a1b89 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
@@ -390,15 +390,24 @@
 //  _____________________________________________
 
 
+.catalog-product-attribute-edit {
+    .page-wrapper {
+        width: 100%;
+        .page-content {
+            padding-left: 0;
+        }
+    }
+}
+
 .attribute-popup-actions { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel
-    background: @color-white;
-    border-top: 1px solid @color-gray68;
-    bottom: 0;
-    left: 0;
-    padding: @popup__padding;
-    position: fixed;
-    right: 0;
-    top: auto !important;
+    &:extend(.abs-clearfix all);
+    background: @page-main-actions__background-color;
+    border-bottom: 1px solid @page-main-actions__border-color;
+    border-top: 1px solid @page-main-actions__border-color;
+    padding: @page-main-actions__padding;
+    &.page-actions {
+        float: none;
+    }
     &.fixed { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel
         background: @color-white !important;
         border-bottom: 0 !important;
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
index 730f5c2810f..25ec2f57616 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
@@ -385,7 +385,7 @@ class Editor extends Textarea
     protected function _wrapIntoContainer($html)
     {
         if (!$this->getConfig('use_container')) {
-            return $html;
+            return '<div class="admin__control-wysiwig">' .$html . '</div>';
         }
 
         $html = '<div id="editor' . $this->getHtmlId() . '"' . ($this->getConfig(
-- 
GitLab


From b0d47fa2fc57c342defc36d071a20b8154b081e6 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Thu, 17 Sep 2015 19:59:22 +0300
Subject: [PATCH 088/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Added wrapper and styles for wysiwyg module
---
 .../web/css/source/forms/form-wysiwyg.less        | 15 ++++++++++-----
 .../Framework/Data/Form/Element/Editor.php        |  2 +-
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less
index aa55a49a6fd..8ce2fedb661 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less
@@ -7,9 +7,14 @@
 //  Wysiwyg form control styles
 //  ---------------------------------------------
 
-.buttons-set {
-    margin: 0 0 15px;
-    button {
-        margin-right: 4px;
+.admin__control-wysiwig {
+    .buttons-set {
+        margin: 0 0 15px;
+        button {
+            margin-right: 4px;
+        }
     }
-}
\ No newline at end of file
+    textarea{
+        width: 100%;
+    }
+}
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
index 25ec2f57616..b4f5f29270d 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
@@ -392,7 +392,7 @@ class Editor extends Textarea
             'no_display'
         ) ? ' style="display:none;"' : '') . ($this->getConfig(
             'container_class'
-        ) ? ' class="' . $this->getConfig(
+        ) ? ' class="admin__control-wysiwig ' . $this->getConfig(
             'container_class'
         ) . '"' : '') . '>' . $html . '</div>';
 
-- 
GitLab


From a3a1db102da63b0dc8aea10cb2f101828d3ab227 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 18 Sep 2015 11:58:45 +0300
Subject: [PATCH 089/420] MAGETWO-32170: [Vanilla] Gallery Widget on
 Configurable Product

---
 .../view/frontend/web/js/configurable.js      | 80 +++++++++----------
 1 file changed, 36 insertions(+), 44 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index 0f64cdd1a2d..7baf45232b8 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -19,6 +19,7 @@ define([
             superSelector: '.super-attribute-select',
             selectSimpleProduct: '[name="selected_configurable_option"]',
             priceHolderSelector: '.price-box',
+            spConfig: {},
             state: {},
             priceFormat: {},
             optionTemplate: '<%- data.label %>' +
@@ -34,8 +35,6 @@ define([
          * @private
          */
         _create: function () {
-            this._setDefaults();
-
             // Initial setting of various option values
             this._initializeOptions();
 
@@ -55,48 +54,37 @@ define([
             this._configureForValues();
         },
 
-        /**
-         * Prepare Gallery state
-         *
-         * @private
-         */
-        _setDefaults: function () {
-            var options = this.options,
-                gallery = $(options.mediaGallerySelector);
-
-            gallery.on('gallery:loaded', function () {
-                var galleryObject = gallery.data('gallery');
-                options.mediaGalleryInitial = galleryObject.returnCurrentImages();
-            });
-        },
-
         /**
          * Initialize tax configuration, initial settings, and options values.
          * @private
          */
         _initializeOptions: function () {
-            var priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option');
+            var options = this.options,
+                gallery = $(options.mediaGallerySelector),
+                priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option').priceConfig || null;
 
-            if (priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.optionTemplate) {
-                this.options.optionTemplate = priceBoxOptions.priceConfig.optionTemplate;
+            if (priceBoxOptions && priceBoxOptions.optionTemplate) {
+                options.optionTemplate = priceBoxOptions.optionTemplate;
             }
 
-            if (priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.priceFormat) {
-                this.options.priceFormat = priceBoxOptions.priceConfig.priceFormat;
+            if (priceBoxOptions && priceBoxOptions.priceFormat) {
+                options.priceFormat = priceBoxOptions.priceFormat;
             }
-            this.options.optionTemplate = mageTemplate(this.options.optionTemplate);
+            options.optionTemplate = mageTemplate(options.optionTemplate);
+
+            options.settings = options.spConfig.containerId ?
+                $(options.spConfig.containerId).find(options.superSelector) :
+                $(options.superSelector);
 
-            this.options.settings = this.options.spConfig.containerId ?
-                $(this.options.spConfig.containerId).find(this.options.superSelector) :
-                $(this.options.superSelector);
+            options.values = options.spConfig.defaultValues || {};
+            options.parentImage = $('[data-role=base-image-container] img').attr('src');
 
-            this.options.values = this.options.spConfig.defaultValues || {};
-            this.options.parentImage = $('[data-role=base-image-container] img').attr('src');
+            this.inputSimpleProduct = this.element.find(options.selectSimpleProduct);
 
-            this.initialGalleryImages = $(this.options.mediaGallerySelector).data('mageGallery') ?
-                $(this.options.mediaGallerySelector).gallery('option', 'images')
-                : [];
-            this.inputSimpleProduct = this.element.find(this.options.selectSimpleProduct);
+            gallery.on('gallery:loaded', function () {
+                var galleryObject = gallery.data('gallery');
+                options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+            });
         },
 
         /**
@@ -190,9 +178,11 @@ define([
             while (index--) {
                 option = settings[index];
 
-                !index ?
-                    this._fillSelect(option) :
-                    (option.disabled = true);
+                if (index) {
+                    option.disabled = true;
+                } else {
+                    this._fillSelect(option);
+                }
 
                 _.extend(option, {
                     childSettings: childSettings.slice(),
@@ -362,7 +352,9 @@ define([
          * @param {*} element - The element associated with a configurable option.
          */
         _clearSelect: function (element) {
-            for (var i = element.options.length - 1; i >= 0; i--) {
+            var i;
+
+            for (i = element.options.length - 1; i >= 0; i--) {
                 element.remove(i);
             }
         },
@@ -429,26 +421,26 @@ define([
         },
 
         /**
-         * _getState
+         * Returns Simple product Id
+         *  depending on current selected option.
          *
          * @private
+         * @param {HTMLElement} element
+         * @returns {String|undefined}
          */
         _getSimpleProductId: function (element) {
-            //element.config
-            //element.value
-
             var allOptions = element.config.options,
                 value = element.value,
                 config;
 
-            config = _.filter(allOptions, function(option) {
+            config = _.filter(allOptions, function (option) {
                 return option.id === value;
             });
-
             config = _.first(config);
-            console.log(config.allowedProducts);
 
-            return _.first(config.allowedProducts);
+            return _.isEmpty(config) ?
+                undefined :
+                _.first(config.allowedProducts);
 
         }
 
-- 
GitLab


From 3732ae67387ccc9375780976ea4dcb004f922aee Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 21 Sep 2015 12:00:08 +0300
Subject: [PATCH 090/420] JS-52: Zoom on Full Screen Mode

---
 .../view/frontend/templates/product/view/gallery.phtml        | 3 +++
 app/design/frontend/Magento/blank/etc/view.xml                | 4 +++-
 app/design/frontend/Magento/luma/etc/view.xml                 | 2 ++
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 2c598b2f5e4..8767701ea37 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -49,6 +49,9 @@
                     "navdir": "<?php echo $block->getVar("gallery:fullscreen:navdir"); ?>",
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
+                    "thumbwidth": <?php echo $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
+                    "thumbheight": <?php echo $block->getVar("gallery:fullscreen:thumbheight")
+                        ?: $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
                     "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 14f7695e7b3..3983c7bc483 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -195,7 +195,9 @@
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
-        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in fullscreen(horizontal/vertical)  -->
+        <var name="gallery:fullscreen:thumbwidth">100</var> <!-- Width of thumbnails in fullscreen -->
+        <var name="gallery:fullscreen:thumbheight">100</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index b2d2d21ad4d..354455eaefc 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -200,6 +200,8 @@
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+        <var name="gallery:fullscreen:thumbwidth">150</var> <!-- Width of thumbnails in fullscreen -->
+        <var name="gallery:fullscreen:thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
-- 
GitLab


From d0bc1cd56c5e20c484735a91e5df850c9c1651f4 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 21 Sep 2015 12:11:02 +0300
Subject: [PATCH 091/420] JS-201: Implement preview buttons actions

---
 .../frontend/Magento/blank/etc/view.xml       |   2 +-
 lib/web/fotorama/fotorama.js                  | 108 +++++++++++++++++-
 2 files changed, 104 insertions(+), 6 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 3983c7bc483..6cd076e51d2 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,7 +186,7 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index ef45700a3ed..6f6e5b71371 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -89,6 +89,8 @@ fotoramaVersion = '4.6.4';
         verticalImageClass = _fotoramaClass + '_vertical_ratio';
     var JQUERY_VERSION = $ && $.fn.jquery.split('.');
 
+    var borderPos = 0;
+
     if (!JQUERY_VERSION
         || JQUERY_VERSION[0] < 1
         || (JQUERY_VERSION[0] == 1 && JQUERY_VERSION[1] < 8)) {
@@ -962,6 +964,7 @@ fotoramaVersion = '4.6.4';
             thumbheight: THUMB_SIZE,
             thumbmargin: MARGIN,
             thumbborderwidth: MARGIN,
+            areSlides: true,
 
             allowfullscreen: false, // true || 'native'
 
@@ -1598,14 +1601,59 @@ fotoramaVersion = '4.6.4';
         if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) {
             elPos = options.overPos;
         }
-
         var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
 
         if (CSS3) {
-            $el.css($.extend(getDuration(options.time), translate));
+
+            if (!options.thumb || !OPTIONS.areSlides) {
+
+                $el.css($.extend(getDuration(options.time), translate));
+            } else {
+    
+                if ($el.selector !== '.fotorama__nav-wrap .fotorama__nav .fotorama__nav__shaft') {
+                    $el.css($.extend(getDuration(options.time), translate));
+    
+                    if ($el.selector === ".fotorama__thumb-border") {
+                        var slideLength = 4,
+                            borderStep,
+                            slidePosition;
+                        
+                        if (options.navdir === 'vertical') {
+                            borderStep = options.thumb.height + options.thumb.margin;
+                            slideLength = 4;
+                            $('.fotorama__nav--thumbs').css('height', borderStep * slideLength);
+                        } else {
+                            borderStep = options.thumb.width + options.thumb.margin;
+                            slideLength = 4;
+                            $('.fotorama__nav--thumbs').css('width', borderStep * slideLength);
+                        }
+    
+                        if (((borderPos < options.pos) || (options.pos === 0)) && ((borderPos !== 0) || (options.pos <= borderStep))) {
+    
+                            if (Math.abs(Math.round(options.pos / borderStep)) % slideLength === 0) {
+                                slidePosition = - options.pos;
+                                shiftSlide(slidePosition, options, borderStep, slideLength);
+                            }
+                        } else {
+    
+                            if (Math.abs(Math.round(options.pos / borderStep)) % slideLength === slideLength - 1) {
+                                slidePosition = borderStep * (slideLength - 1) - options.pos;
+                                shiftSlide(slidePosition, options, borderStep, slideLength);
+                            } else {
+                                if (borderPos === 0) {
+                                    slidePosition = borderStep * ((options.pos / borderStep + 1) % slideLength - 1) - options.pos;
+                                    shiftSlide(slidePosition, options, borderStep, slideLength);
+                                }
+                            }  
+                        }
+                        borderPos = options.pos;                    
+                    }
+                }
+            }
+
             if (options.time > 10) {
                 afterTransition($el, 'transform', onEndFn, options.time);
             } else {
@@ -1613,9 +1661,17 @@ fotoramaVersion = '4.6.4';
             }
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
+            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);            
+            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
         }
     }
 
+    function shiftSlide(slidePosition, options, borderStep, slideLength) {
+        var translate1 = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
+        options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
+        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
+    }
+
     function fade($el1, $el2, $frames, options, fadeStack, chain) {
         var chainedFLAG = typeof chain !== 'undefined';
         if (!chainedFLAG) {
@@ -2789,7 +2845,6 @@ fotoramaVersion = '4.6.4';
                 rightLimit,
                 exceedLimit;
 
-
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
             leftLimit = -pos;
@@ -2941,7 +2996,15 @@ fotoramaVersion = '4.6.4';
                 pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l),
                 width: navFrameData.w,
                 height: navFrameData.h,
-                direction: opts.navdir
+                direction: opts.navdir,
+                thumb: {
+                    width: opts.thumbwidth,
+                    height: opts.thumbheight,
+                    margin: opts.thumbmargin,
+                    areSlides: opts.areSlides,
+                    measures: measures
+                },
+                measures: measures
             });
         }
 
@@ -2962,6 +3025,13 @@ fotoramaVersion = '4.6.4';
                     direction: opts.navdir,
                     onEnd: function () {
                         thumbsDraw(pos, true);
+                    },
+                    thumb: {
+                        width: opts.thumbwidth,
+                        height: opts.thumbheight,
+                        margin: opts.thumbmargin,
+                        areSlides: opts.areSlides,
+                        measures: measures
                     }
                 });
 
@@ -3114,6 +3184,27 @@ fotoramaVersion = '4.6.4';
 
         }
 
+        that.showSlide = function(index) {
+            if ((index > 0) && (index <= $navShaft.children().length - 1)) {
+                index --;
+                var borderStep = opts.navdir === 'vertical' ? 
+                        opts.thumbheight + opts.thumbmargin :
+                        borderStep = opts.thumbwidth + opts.thumbmargin,
+                    slideLength = 4,
+                    options = {
+                        time: opts.transitionduration,
+                        direction: opts.navdir,
+                        width: activeFrame[navFrameKey].data().w,
+                        width: activeFrame[navFrameKey].data().h,
+                        measures: measures
+                    },
+                    slidePosition;
+                slidePosition = -(index * borderStep * slideLength);
+                shiftSlide(slidePosition, options, borderStep, slideLength);
+                thumbsDraw(false, true);
+            }
+        }
+
         that.startAutoplay = function (interval) {
             if (that.autoplay) return this;
             pausedAutoplayFLAG = stoppedAutoplayFLAG = false;
@@ -3652,7 +3743,14 @@ fotoramaVersion = '4.6.4';
                         pos: result.newPos,
                         overPos: result.overPos,
                         direction: opts.navdir,
-                        onEnd: onEnd
+                        onEnd: onEnd,
+                        thumb: {
+                            width: opts.thumbwidth,
+                            height: opts.thumbheight,
+                            margin: opts.thumbmargin,
+                            areSlides: opts.areSlides,
+                            measures: measures
+                        }
                     });
                     thumbsDraw(result.newPos);
                     o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
-- 
GitLab


From 5637a5b76f13e073a915e8311b72039d42231543 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 21 Sep 2015 13:17:45 +0300
Subject: [PATCH 092/420] MAGETWO-42989: Implementation

---
 .../Ui/view/base/web/js/modal/modal.js        | 135 +++++++++++++++++-
 .../web/templates/modal/modal-custom.html     |   4 +-
 .../base/web/templates/modal/modal-popup.html |   4 +-
 .../base/web/templates/modal/modal-slide.html |   4 +-
 4 files changed, 142 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 84074ebf980..51bbb74abd6 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -10,9 +10,10 @@ define([
     'text!ui/template/modal/modal-popup.html',
     'text!ui/template/modal/modal-slide.html',
     'text!ui/template/modal/modal-custom.html',
+    'Magento_Ui/js/lib/key-codes',
     'jquery/ui',
     'mage/translate'
-], function ($, _, template, popupTpl, slideTpl, customTpl) {
+], function ($, _, template, popupTpl, slideTpl, customTpl, keyCodes) {
     'use strict';
 
     /**
@@ -44,6 +45,7 @@ define([
             type: 'popup',
             title: '',
             modalClass: '',
+            focus: '',
             popupTpl: popupTpl,
             slideTpl: slideTpl,
             customTpl: customTpl,
@@ -56,6 +58,9 @@ define([
             modalCloseBtn: '[data-role="closeBtn"]',
             modalContent: '[data-role="content"]',
             modalAction: '[data-role="action"]',
+            focusableScope: '[data-role="focusable-scope"]',
+            focusableStart: '[data-role="focusable-start"]',
+            focusableEnd: '[data-role="focusable-end"]',
             appendTo: 'body',
             wrapperClass: 'modals-wrapper',
             overlayClass: 'modals-overlay',
@@ -66,6 +71,7 @@ define([
             buttons: [{
                 text: $.mage.__('Ok'),
                 class: '',
+                attr: {},
 
                 /**
                  * Default action on button click
@@ -75,16 +81,56 @@ define([
                 }
             }]
         },
+        previosFocused: null,
+        keyeventHandlers: {
+
+            /**
+             * Tab key press handler,
+             * set focus to elements
+             */
+            tabKey: function () {
+                if (document.activeElement === this.modal.find(this.options.focusableStart)[0]) {
+                    this._setFocus('start');
+                }
+
+                if (document.activeElement === this.modal.find(this.options.focusableScope)[0] &&
+                    this.previosFocused === this.modal.find(this.options.modalCloseBtn)[0]) {
+                    this._setFocus('start');
+                }
+
+                if (document.activeElement === this.modal.find(this.options.focusableEnd)[0]) {
+                    this._setFocus('end');
+                }
+
+                this.previosFocused = document.activeElement;
+            },
+
+            /**
+             * Escape key press handler,
+             * close modal window
+             */
+            escapeKey: function () {
+                if (this.options.isOpen && this.modal.find(document.activeElement).length ||
+                    this.options.isOpen && this.modal[0] === document.activeElement) {
+                    this.closeModal();
+                }
+            }
+        },
 
         /**
          * Creates modal widget.
          */
         _create: function () {
+            _.bindAll(
+                this,
+                'keyeventSwitcher'
+            );
+
             this.options.transitionEvent = transitionEvent;
             this._createWrapper();
             this._renderModal();
             this._createButtons();
-
+            this._createFocusableElements();
             $(this.options.trigger).on('click', _.bind(this.toggleModal, this));
             this._on(this.modal.find(this.options.modalCloseBtn), {
                 'click': this.closeModal
@@ -95,6 +141,20 @@ define([
             });
         },
 
+        /**
+         * Create focusable scope in modal window.
+         * append to focusable scope element with start
+         * and element with end position
+         */
+        _createFocusableElements: function() {
+            var startFocusableTemplate = '<div data-role="focusable-start" tabindex="0"></div>',
+                endFocusableTemplate = '<div data-role="focusable-end" tabindex="0"></div>',
+                scopeFocusable = this.modal.find(this.options.focusableScope);
+
+            $(startFocusableTemplate).insertBefore(scopeFocusable);
+            $(endFocusableTemplate).insertAfter(scopeFocusable);
+        },
+
         /**
          * Returns element from modal node.
          * @return {Object} - element.
@@ -123,6 +183,18 @@ define([
             return elems.filter('.' + this.options.modalVisibleClass).length;
         },
 
+        /**
+         * Listener key events.
+         * Call handler function if it exists
+         */
+        keyeventSwitcher: function (event) {
+            var key = keyCodes[event.keyCode];
+
+            if (this.keyeventHandlers.hasOwnProperty(key)) {
+                this.keyeventHandlers[key].apply(this, arguments);
+            }
+        },
+
         /**
          * Toggle modal.
          * * @return {Element} - current element.
@@ -141,9 +213,12 @@ define([
          */
         openModal: function () {
             this.options.isOpen = true;
+            this.focussedElement = document.activeElement;
             this._createOverlay();
             this._setActive();
+            this._setKeyListener();
             this.modal.one(this.options.transitionEvent, _.bind(this._trigger, this, 'opened'));
+            this.modal.one(this.options.transitionEvent, _.bind(this._setFocus, this, 'end', 'opened'));
             this.modal.addClass(this.options.modalVisibleClass);
 
             if (!this.options.transitionEvent) {
@@ -153,6 +228,56 @@ define([
             return this.element;
         },
 
+        /**
+         * Set focus to element.
+         * @param {string} position - can be "start" and "end"
+         *      positions.
+         *      If position is "end" - sets focus to first
+         *      focusable element in modal window scope.
+         *      If position is "start" - sets focus to last
+         *      focusable element in modal window scope
+         *
+         *  @param {string} type - can be "opened" or false
+         *      If type is "opened" - looks to "this.options.focus"
+         *      property and sets focus
+         */
+        _setFocus: function (position, type) {
+            var focusableElements,
+                infelicity;
+
+            if (type === 'opened' && this.options.focus) {
+                if (typeof this.options.focus === 'object') {
+                    this.options.focus.focus();
+                } else if (this.options.focus !== 'none') {
+                    this.modal.find(this.options.focus).focus();
+                } else {
+                    this.modal.find(this.options.focusableScope).focus();
+                }
+            } else {
+                if (position === 'end') {
+                    this.modal.find(this.options.modalCloseBtn).focus();
+                } else if (position === 'start') {
+                    infelicity = 2; //Constant for find last focusable element
+                    focusableElements = this.modal.find(':focusable');
+                    focusableElements.eq(focusableElements.length - infelicity).focus();
+                }
+            }
+        },
+
+        /**
+         * Set keyup listener when modal is opened.
+         */
+        _setKeyListener: function () {
+            this.modal.bind('keyup', this.keyeventSwitcher);
+        },
+
+        /**
+         * Remove keyup listener when modal is closed.
+         */
+        _removeKeyListener: function () {
+            this.modal.unbind('keyup', this.keyeventSwitcher);
+        },
+
         /**
          * Close modal.
          * * @return {Element} - current element.
@@ -160,8 +285,11 @@ define([
         closeModal: function () {
             var that = this;
 
+            this._removeKeyListener();
             this.options.isOpen = false;
+            this.previosFocused = null;
             this.modal.one(this.options.transitionEvent, function () {
+                $(that.focussedElement).focus();
                 that._close();
             });
             this.modal.removeClass(this.options.modalVisibleClass);
@@ -246,6 +374,9 @@ define([
             _.each(this.options.buttons, function (btn, key) {
                 var button = that.buttons[key];
 
+                if (btn.attr) {
+                    $(button).attr(btn.attr);
+                }
                 $(button).on('click', _.bind(btn.click, that));
             });
         },
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
index 990630aa02b..11d623f2875 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
@@ -10,7 +10,9 @@
        <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
     data-type="<%= data.type %>">
-    <div class="modal-inner-wrap">
+    <div class="modal-inner-wrap"
+         data-role="focusable-scope"
+         tabindex="0">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
index 43ac20b2aeb..bd6b33e9cf6 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
@@ -11,7 +11,9 @@
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
     data-type="<%= data.type %>">
-    <div class="modal-inner-wrap">
+    <div class="modal-inner-wrap"
+         data-role="focusable-scope"
+         tabindex="0">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
index abffa457396..58381ad0f98 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
@@ -10,7 +10,9 @@
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
     data-type="<%= data.type %>">
-    <div class="modal-inner-wrap">
+    <div class="modal-inner-wrap"
+         data-role="focusable-scope"
+         tabindex="0">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
-- 
GitLab


From d520b2cd6bf5b88d715a321bba68cee920aa3f96 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 21 Sep 2015 13:56:07 +0300
Subject: [PATCH 093/420] MAGETWO-43091: Failed on Configurable with
 ColorSwatches

---
 .../view/frontend/web/js/configurable.js      |  2 +
 .../view/frontend/web/js/SwatchRenderer.js    | 47 ++++++++++++-------
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index 7baf45232b8..97c667e56cf 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -429,6 +429,8 @@ define([
          * @returns {String|undefined}
          */
         _getSimpleProductId: function (element) {
+            // TODO: Rewrite algorithm. It should return ID of
+            //        simple product based on selected options.
             var allOptions = element.config.options,
                 value = element.value,
                 config;
diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index c6feb68cd62..dfc5ef1fa64 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -694,7 +694,8 @@ define(["jquery", "jquery/ui"], function ($) {
          * @private
          */
         _ProductMediaCallback: function ($this, response) {
-            var $main = ($('body.catalog-product-view').size() > 0)
+            var isProductViewExist = $('body.catalog-product-view').size() > 0,
+                $main = isProductViewExist
                     ? $this.parents('.column.main')
                     : $this.parents('.product-item-info'),
                 $widget = this,
@@ -703,24 +704,38 @@ define(["jquery", "jquery/ui"], function ($) {
                     return e.hasOwnProperty('large') && e.hasOwnProperty('medium') && e.hasOwnProperty('small');
                 };
 
-            if ($widget._ObjectLength(response) > 0) {
-                if (support(response)) {
-                    images.push({large: response.large, medium: response.medium, small: response.small});
-                    if (response.hasOwnProperty('gallery')) {
-                        $.each(response.gallery, function () {
-                            if (!support(this) || response.large == this.large) {
-                                return;
-                            }
-                            images.push({large: this.large, medium: this.medium, small: this.small});
+            if ($widget._ObjectLength(response) < 1) {
+                return;
+            }
+
+            if (support(response)) {
+                images.push({
+                    large: response.large,
+                    img: response.medium,
+                    thumb: response.small
+                });
+
+                if (response.hasOwnProperty('gallery')) {
+                    $.each(response.gallery, function () {
+                        if (!support(this) || response.large == this.large) {
+                            return;
+                        }
+                        images.push({
+                            large: this.large,
+                            img: this.medium,
+                            thumb: this.small
                         });
-                    }
+                    });
                 }
+            }
 
-                if ($('body.catalog-product-view').size() > 0) {
-                    $main.find('[data-role=media-gallery]').gallery('option', 'images', images);
-                } else {
-                    $main.find('.product-image-photo').attr('src', images.shift().medium);
-                }
+            if (isProductViewExist) {
+                $main
+                    .find('[data-gallery-role=gallery-placeholder]')
+                    .data('gallery')
+                    .updateData(images);
+            } else {
+                $main.find('.product-image-photo').attr('src', images.shift().medium);
             }
         },
 
-- 
GitLab


From 045739167131c0de5870b02293f5b6a1f3ba3f67 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 21 Sep 2015 17:13:45 +0300
Subject: [PATCH 094/420] JS-192: Enhanced thumbnails support in
 configuration/theme

---
 .../templates/product/view/gallery.phtml      |  6 ++-
 .../frontend/Magento/blank/etc/view.xml       |  5 ++-
 app/design/frontend/Magento/luma/etc/view.xml |  2 +
 lib/web/fotorama/fotorama.js                  | 41 ++++++++-----------
 4 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 8767701ea37..f8987a2265e 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -41,7 +41,8 @@
                     "height": <?php echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
-                    "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
+                    "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>",
+                    "carouselNavigation": <?php echo $block->getVar("gallery:navigation:carousel"); ?>
                 },
                 "fullscreen": {
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
@@ -53,7 +54,8 @@
                     "thumbheight": <?php echo $block->getVar("gallery:fullscreen:thumbheight")
                         ?: $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
-                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
+                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>",
+                    "carouselNavigation": <?php echo $block->getVar("gallery:fullscreen:navigation:carousel"); ?>
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 6cd076e51d2..fe2d06fcdbc 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,20 +186,23 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:navigation:carousel">false</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:navdir">vertical</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in fullscreen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:thumbwidth">100</var> <!-- Width of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:thumbheight">100</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:fullscreen:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="magnifier:fullscreenzoom">20</var> <!-- Zoom for fullscreen -->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 354455eaefc..7c0bd016c0e 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -193,6 +193,7 @@
         <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
@@ -204,6 +205,7 @@
         <var name="gallery:fullscreen:thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:fullscreen:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="magnifier:fullscreenzoom">5</var> <!-- Zoom for fullscreen (integer)-->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 6f6e5b71371..8e9864d67f2 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -964,7 +964,7 @@ fotoramaVersion = '4.6.4';
             thumbheight: THUMB_SIZE,
             thumbmargin: MARGIN,
             thumbborderwidth: MARGIN,
-            areSlides: true,
+            carouselnavigation: true,
 
             allowfullscreen: false, // true || 'native'
 
@@ -1608,28 +1608,18 @@ fotoramaVersion = '4.6.4';
 
         if (CSS3) {
 
-            if (!options.thumb || !OPTIONS.areSlides) {
-
+            if (!options.thumb || !options.thumb.areSlides) {
                 $el.css($.extend(getDuration(options.time), translate));
             } else {
-    
                 if ($el.selector !== '.fotorama__nav-wrap .fotorama__nav .fotorama__nav__shaft') {
                     $el.css($.extend(getDuration(options.time), translate));
     
                     if ($el.selector === ".fotorama__thumb-border") {
                         var slideLength = 4,
-                            borderStep,
+                            borderStep = options.thumb.margin,
                             slidePosition;
                         
-                        if (options.navdir === 'vertical') {
-                            borderStep = options.thumb.height + options.thumb.margin;
-                            slideLength = 4;
-                            $('.fotorama__nav--thumbs').css('height', borderStep * slideLength);
-                        } else {
-                            borderStep = options.thumb.width + options.thumb.margin;
-                            slideLength = 4;
-                            $('.fotorama__nav--thumbs').css('width', borderStep * slideLength);
-                        }
+                        borderStep += options.navdir === 'vertical' ? options.thumb.height : options.thumb.width;
     
                         if (((borderPos < options.pos) || (options.pos === 0)) && ((borderPos !== 0) || (options.pos <= borderStep))) {
     
@@ -1662,14 +1652,18 @@ fotoramaVersion = '4.6.4';
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
             options.measures.nw = -slidePosition + borderStep * (slideLength - 1);            
-            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
+            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
         }
     }
 
     function shiftSlide(slidePosition, options, borderStep, slideLength) {
-        var translate1 = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
-        options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
-        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
+        var translate = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
+        if (options.direction === 'vertical') {
+            options.measures.h = -slidePosition + borderStep * (slideLength - 1);
+        } else {
+            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
+        }
+        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
     }
 
     function fade($el1, $el2, $frames, options, fadeStack, chain) {
@@ -2805,6 +2799,7 @@ fotoramaVersion = '4.6.4';
                     addNavFrameEvents(frame);
                     frameData.$wrap = $frame.children(':first');
 
+
                     $navThumbFrame = $navThumbFrame.add($frame);
                     if (dataFrame.video) {
                         frameData.$wrap.append($videoPlay.clone());
@@ -3001,7 +2996,7 @@ fotoramaVersion = '4.6.4';
                     width: opts.thumbwidth,
                     height: opts.thumbheight,
                     margin: opts.thumbmargin,
-                    areSlides: opts.areSlides,
+                    areSlides: opts.carouselnavigation,
                     measures: measures
                 },
                 measures: measures
@@ -3018,7 +3013,6 @@ fotoramaVersion = '4.6.4';
                     l = (opts.navdir === 'vertical' ? boundTop : boundLeft),
                     pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max),
                     time = options.time * 1.1;
-
                 slide($navShaft, {
                     time: time,
                     pos: pos || 0,
@@ -3030,7 +3024,7 @@ fotoramaVersion = '4.6.4';
                         width: opts.thumbwidth,
                         height: opts.thumbheight,
                         margin: opts.thumbmargin,
-                        areSlides: opts.areSlides,
+                        areSlides: opts.carouselnavigation,
                         measures: measures
                     }
                 });
@@ -3737,8 +3731,7 @@ fotoramaVersion = '4.6.4';
                     var target = result.$target.closest('.' + navFrameClass, $navShaft)[0];
                     target && onNavFrameClick.call(target, result.startEvent);
                 } else if (result.pos !== result.newPos) {
-                    pausedAutoplayFLAG = true;
-                    slide($navShaft, {
+                    pausedAutoplayFLAG = true;                    slide($navShaft, {
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
@@ -3748,7 +3741,7 @@ fotoramaVersion = '4.6.4';
                             width: opts.thumbwidth,
                             height: opts.thumbheight,
                             margin: opts.thumbmargin,
-                            areSlides: opts.areSlides,
+                            areSlides: opts.carouselnavigation,
                             measures: measures
                         }
                     });
-- 
GitLab


From 0e96d86cb18b6e9ba259de361dd53fc10cae7358 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 21 Sep 2015 17:46:33 +0300
Subject: [PATCH 095/420] MAGETWO-43132: Gallery missed placeholder image

---
 .../Catalog/Block/Product/View/Gallery.php      | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index 4be631e6182..dc8d204e76c 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -16,6 +16,11 @@ use Magento\Framework\Json\EncoderInterface;
 
 class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
 {
+    /**
+     * @var \Magento\Framework\View\Asset\Repository
+     */
+    protected $_assetRepo;
+
     /**
      * @var \Magento\Framework\Config\View
      */
@@ -29,11 +34,13 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
         \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
+        \Magento\Framework\View\Asset\Repository $assetRepo,
         EncoderInterface $jsonEncoder,
         array $data = []
     )
     {
         $this->jsonEncoder = $jsonEncoder;
+        $this->_assetRepo = $assetRepo;
         parent::__construct($context, $arrayUtils, $data);
     }
 
@@ -111,6 +118,16 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
                 'isMain' => $this->isMainImage($image),
             ];
         }
+        if(empty($imagesItems)) {
+            $imagesItems[] = [
+                'thumb' => $this->_assetRepo->getUrl('Magento_Catalog::images/product/placeholder/small_image.jpg'),
+                'img' => $this->_assetRepo->getUrl('Magento_Catalog::images/product/placeholder/image.jpg'),
+                'original' => $this->_assetRepo->getUrl('Magento_Catalog::images/product/placeholder/image.jpg'),
+                'caption' => '',
+                'position' => '0',
+                'isMain' => true,
+            ];
+        }
         return json_encode($imagesItems);
     }
 
-- 
GitLab


From 1501ecba4b77b44fd48b173f5648c003a7681431 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 21 Sep 2015 17:48:31 +0300
Subject: [PATCH 096/420] MAGETWO-42991: Fix unit tests

---
 .../Magento/Ui/base/js/modal/alert.test.js    | 27 +++++++++++++++++++
 .../Magento/Ui/base/js/modal/confirm.test.js  | 27 +++++++++++++++++++
 .../Magento/Ui/base/js/modal/modal.test.js    |  7 +++--
 3 files changed, 59 insertions(+), 2 deletions(-)
 create mode 100644 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
 create mode 100644 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js

diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
new file mode 100644
index 00000000000..d5f32f1e3b3
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
@@ -0,0 +1,27 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/alert'
+], function ($) {
+    'use strict';
+
+    describe('ui/js/modal/alert', function () {
+        var element = $('<div>some element</div>'),
+            alert = element.alert({});
+
+        it('Check for modal definition', function () {
+            expect(alert).toBeDefined();
+        });
+        it('Show/hide function check', function () {
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function(){
+            expect(alert.length).toEqual(1);
+        });
+    });
+});
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
new file mode 100644
index 00000000000..866bd215a45
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
@@ -0,0 +1,27 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/confirm'
+], function ($) {
+    'use strict';
+
+    describe('ui/js/modal/confirm', function () {
+        var element = $('<div>some element</div>'),
+            confirm = element.confirm({});
+
+        it('Check for modal definition', function () {
+            expect(confirm).toBeDefined();
+        });
+        it('Show/hide function check', function () {
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function(){
+            expect(confirm.length).toEqual(1);
+        });
+    });
+});
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
index 2b1496d56e2..ee0c8d2894f 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
@@ -17,8 +17,11 @@ define([
             expect(modal).toBeDefined();
         });
         it('Show/hide function check', function () {
-            expect(element.trigger('openDialog')).toBe(element);
-            expect(element.trigger('closeDialog')).toBe(element);
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function(){
+            expect($(modal).length).toEqual(1);
         });
     });
 });
-- 
GitLab


From 0facb917a65f4562045c3e069513eccbae0904a6 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 22 Sep 2015 10:27:35 +0300
Subject: [PATCH 097/420] MAGETWO-42991: Fix unit tests

---
 .../Magento/Ui/base/js/modal/prompt.test.js   | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js

diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
new file mode 100644
index 00000000000..e2783b2e49d
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
@@ -0,0 +1,27 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/prompt'
+], function ($) {
+    'use strict';
+
+    describe('ui/js/modal/prompt', function () {
+        var element = $('<div>some element</div>'),
+            prompt = element.prompt({});
+
+        it('Check for modal definition', function () {
+            expect(prompt).toBeDefined();
+        });
+        it('Show/hide function check', function () {
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function(){
+            expect(prompt.length).toEqual(1);
+        });
+    });
+});
-- 
GitLab


From b3ab9150db878aa3b8f4da8edf447ba1a082d138 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 22 Sep 2015 12:12:49 +0300
Subject: [PATCH 098/420] JS-203: Video container class add

---
 lib/web/fotorama/fotorama.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 8e9864d67f2..a075d11174c 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -79,6 +79,7 @@ fotoramaVersion = '4.6.4';
 
         htmlClass = _fotoramaClass + '__html',
 
+        videoContainerClass = _fotoramaClass + '-video-container',
         videoClass = _fotoramaClass + '__video',
         videoPlayClass = videoClass + '-play',
         videoCloseClass = videoClass + '-close',
@@ -2642,7 +2643,7 @@ fotoramaVersion = '4.6.4';
                         .addClass(imgClass + (fullFLAG ? ' ' + imgFullClass : ''))
                         .prependTo($frame);
 
-                    if ($frame.hasClass(stageFrameClass)) {
+                    if ($frame.hasClass(stageFrameClass) && !$frame.hasClass(videoContainerClass)) {
                         $frame.attr("href", $img.attr("src"));
                     }
 
-- 
GitLab


From ef3b517dca190f3bfae697443d1da91b3ea486c6 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 22 Sep 2015 13:22:06 +0300
Subject: [PATCH 099/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 lib/web/mage/adminhtml/backup.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/web/mage/adminhtml/backup.js b/lib/web/mage/adminhtml/backup.js
index b37d9731076..9a820297fdd 100644
--- a/lib/web/mage/adminhtml/backup.js
+++ b/lib/web/mage/adminhtml/backup.js
@@ -220,6 +220,7 @@ define([
             this.modal = jQuery('<div/>').html(this.backupConfig[divId].content()).modal({
                 modalClass: 'magento',
                 title: this.backupConfig[divId].title,
+                type: 'slide',
                 closed: function(e, modal){
                     modal.modal.remove();
                 },
-- 
GitLab


From 981e3fde688dcbbc0a8eaa8af120a726d6b5ad0d Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 22 Sep 2015 13:39:07 +0300
Subject: [PATCH 100/420] MAGETWO-43133: Create custom prompt widget

---
 app/code/Magento/Ui/view/base/web/js/modal/prompt.js | 2 --
 1 file changed, 2 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 5013730502b..3a5463172e1 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -47,8 +47,6 @@ define([
         closeModal: function(result) {
             var value;
 
-            result = result || false;
-
             if (result) {
                 value =  this.modal.find(this.options.promptField).val();
                 this.options.actions.confirm(value);
-- 
GitLab


From 599898a54fc38bb9a2c7b66ea31c6e745522327c Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 22 Sep 2015 20:25:28 +0300
Subject: [PATCH 101/420] JS-187: Implement drag event

---
 .../frontend/Magento/blank/etc/view.xml       |   4 +-
 lib/web/fotorama/fotorama.js                  | 113 ++++++++++++++----
 2 files changed, 89 insertions(+), 28 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index fe2d06fcdbc..40f9cd12af4 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,10 +186,10 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
-        <var name="gallery:navigation:carousel">false</var> <!-- Display navigation thumbs as carousel (true/false) -->
+        <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index a075d11174c..bce922827ea 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -43,6 +43,7 @@ fotoramaVersion = '4.6.4';
         navDotsClass = navClass + '--dots',
         navThumbsClass = navClass + '--thumbs',
         navFrameClass = navClass + '__frame',
+        navFrameThumbClass = navFrameClass + '--thumb',
 
         fadeClass = _fotoramaClass + '__fade',
         fadeFrontClass = fadeClass + '-front',
@@ -1616,6 +1617,7 @@ fotoramaVersion = '4.6.4';
                     $el.css($.extend(getDuration(options.time), translate));
     
                     if ($el.selector === ".fotorama__thumb-border") {
+
                         var slideLength = 4,
                             borderStep = options.thumb.margin,
                             slidePosition;
@@ -1652,7 +1654,7 @@ fotoramaVersion = '4.6.4';
             }
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
-            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);            
+            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
             $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
         }
     }
@@ -1888,7 +1890,7 @@ fotoramaVersion = '4.6.4';
             min,
             max,
             snap,
-            dir = options.direction || 'horizontal',
+            dir,
             slowFLAG,
             controlFLAG,
             moved,
@@ -1899,7 +1901,6 @@ fotoramaVersion = '4.6.4';
             startCoo = coo = (dir === 'vertical') ? e._y : e._x;
             startTime = e._now;
 
-
             moveTrack = [
                 [startTime, startCoo]
             ];
@@ -1913,8 +1914,8 @@ fotoramaVersion = '4.6.4';
             min = tail.min;
             max = tail.max;
             snap = tail.snap,
-                dir = tail.direction||'horizontal',
-                $el.navdir = dir;
+            dir = tail.direction || 'horizontal',
+            $el.navdir = dir;
 
             slowFLAG = e.altKey;
             tracked = moved = false;
@@ -1939,10 +1940,12 @@ fotoramaVersion = '4.6.4';
 
                 edge = findShadowEdge(moveElPos, min, max, dir);
 
-                if (moveElPos <= min) {
-                    moveElPos = edgeResistance(moveElPos, min);
-                } else if (moveElPos >= max) {
-                    moveElPos = edgeResistance(moveElPos, max);
+                if (!options.carouselnavigation) {
+                    if (moveElPos <= min) {
+                        moveElPos = edgeResistance(moveElPos, min);
+                    } else if (moveElPos >= max) {
+                        moveElPos = edgeResistance(moveElPos, max);
+                    }
                 }
 
                 if (!tail.noMove) {
@@ -2034,6 +2037,7 @@ fotoramaVersion = '4.6.4';
                 moved: result.moved || longTouchFLAG && snap,
                 pos: moveElPos,
                 newPos: newPos,
+                cooDiff: (startCoo - coo),
                 overPos: overPos,
                 time: time,
                 dir:dir
@@ -2150,6 +2154,7 @@ fotoramaVersion = '4.6.4';
             nextIndex,
             nextAutoplayIndex,
             startIndex,
+            slidesNumb,
 
             o_loop,
             o_nav,
@@ -2522,10 +2527,12 @@ fotoramaVersion = '4.6.4';
         }
 
         function setNavShaftMinMax() {
-
-            var isVerticalDir = (opts.navdir === 'vertical');
-            var param =  isVerticalDir ? $navShaft.height() : $navShaft.width();
-            var mainParam = isVerticalDir ? measures.h : measures.nw;
+            var isVerticalDir = (opts.navdir === 'vertical'),
+                measureToCalculate = opts.thumbmargin + $('.' + navFrameThumbClass).length * (
+                isVerticalDir ? opts.thumbheight : opts.thumbwidth + opts.thumbmargin),
+                param = (opts.carouselnavigation ? measureToCalculate :
+                    isVerticalDir ?  $navShaft.height(): $navShaft.width()),
+                mainParam = isVerticalDir ? measures.h : measures.nw;
             navShaftTouchTail.min = Math.min(0, mainParam - param);
             navShaftTouchTail.max = 0;
             navShaftTouchTail.direction = opts.navdir;
@@ -3184,7 +3191,7 @@ fotoramaVersion = '4.6.4';
                 index --;
                 var borderStep = opts.navdir === 'vertical' ? 
                         opts.thumbheight + opts.thumbmargin :
-                        borderStep = opts.thumbwidth + opts.thumbmargin,
+                        opts.thumbwidth + opts.thumbmargin,
                     slideLength = 4,
                     options = {
                         time: opts.transitionduration,
@@ -3459,6 +3466,8 @@ fotoramaVersion = '4.6.4';
 
                 height = height || (ratio && width / ratio);
 
+                slidesNumb = Math.floor($wrap.width()/opts.thumbwidth);
+
                 if (height) {
                     width = Math.round(width);
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
@@ -3712,6 +3721,57 @@ fotoramaVersion = '4.6.4';
             direction: 'horizontal'
 
         });
+        function slideDrag (pos, newPos,cooDiff) {
+            console.log(pos, newPos);
+            if (opts.carouselnavigation) {
+                var borderStep = opts.navdir === 'vertical' ?
+                    opts.thumbheight + opts.thumbmargin :
+                    opts.thumbwidth + opts.thumbmargin,
+                    slidePosition,
+                    options = {
+                        time: opts.transitionduration,
+                        direction: opts.navdir,
+                        width: activeFrame[navFrameKey].data().w,
+                        height: activeFrame[navFrameKey].data().h,
+                        measures: measures
+                    };
+
+                if (newPos !== 0 && pos < 0) {
+                    if(pos >= newPos) {
+                        console.log('>>')
+                        if (pos < navShaftTouchTail.min) {
+                            slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
+                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                        } else {
+                            slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb) - 1));
+                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                        }
+                    } else {
+                        console.log('<<')
+                        if (pos < navShaftTouchTail.min) {
+                            if(cooDiff < 0) {
+                                slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
+                                shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                            } else {
+                                slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb)- 1));
+                                shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                            }
+
+                        } else {
+                            slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
+                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                        }
+                    }
+                }
+
+                if (newPos === 0) {
+                    console.log('dont move')
+                    slidePosition = borderStep * ((newPos/ borderStep + 1) % slidesNumb - 1) - newPos;
+                    shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                }
+            }
+            slideDrag.slidePosition = slidePosition;
+        }
 
         navShaftTouchTail = moveOnTouch($navShaft, {
             onStart: onTouchStart,
@@ -3722,7 +3782,7 @@ fotoramaVersion = '4.6.4';
             onEnd: function (result) {
 
                 function onEnd() {
-                    slideNavShaft.l = result.newPos;
+                    slideNavShaft.l = opts.carouselnavigation ? slideDrag.slidePosition : result.newPos;
                     releaseAutoplay();
                     changeAutoplay();
                     thumbsDraw(result.newPos, true);
@@ -3732,23 +3792,23 @@ fotoramaVersion = '4.6.4';
                     var target = result.$target.closest('.' + navFrameClass, $navShaft)[0];
                     target && onNavFrameClick.call(target, result.startEvent);
                 } else if (result.pos !== result.newPos) {
-                    pausedAutoplayFLAG = true;                    slide($navShaft, {
+                    console.log('catch');
+                    opts.carouselnavigation && slideDrag(result.pos, result.newPos,result.cooDiff);
+                    pausedAutoplayFLAG = true;
+                    !opts.carouselnavigation && slide($navShaft, {
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
                         direction: opts.navdir,
-                        onEnd: onEnd,
-                        thumb: {
-                            width: opts.thumbwidth,
-                            height: opts.thumbheight,
-                            margin: opts.thumbmargin,
-                            areSlides: opts.carouselnavigation,
-                            measures: measures
-                        }
+                        onEnd: onEnd
                     });
-                    thumbsDraw(result.newPos);
+
+                    thumbsDraw(opts.carouselnavigation ? slideDrag.slidePosition : result.newPos, true);
                     o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
+
                 } else {
+                    console.log('else worked');
+                    opts.carouselnavigation &&slideDrag(result.pos, result.newPos,result.cooDiff);
                     onEnd();
                 }
             },
@@ -3756,7 +3816,8 @@ fotoramaVersion = '4.6.4';
             timeHigh: 2,
             friction: 5,
             $wrap: $nav,
-            direction: opts.navdir
+            direction: opts.navdir,
+            carouselnavigation: opts.carouselnavigation
         });
 
         stageWheelTail = wheel($stage, {
-- 
GitLab


From 9aa88eb7dc1024d6b453bef6e7e9b2f4c1a89bb6 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Wed, 23 Sep 2015 09:25:13 +0300
Subject: [PATCH 102/420] MAGETWO-42989: Implementation

---
 .../Ui/view/base/web/js/modal/modal.js        | 31 +++++--------------
 .../web/templates/modal/modal-custom.html     |  2 ++
 .../base/web/templates/modal/modal-popup.html |  2 ++
 .../base/web/templates/modal/modal-slide.html |  2 ++
 4 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 51bbb74abd6..575eb78a44d 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -82,7 +82,7 @@ define([
             }]
         },
         previosFocused: null,
-        keyeventHandlers: {
+        keyEventHandlers: {
 
             /**
              * Tab key press handler,
@@ -123,14 +123,13 @@ define([
         _create: function () {
             _.bindAll(
                 this,
-                'keyeventSwitcher'
+                'keyEventSwitcher'
             );
 
             this.options.transitionEvent = transitionEvent;
             this._createWrapper();
             this._renderModal();
             this._createButtons();
-            this._createFocusableElements();
             $(this.options.trigger).on('click', _.bind(this.toggleModal, this));
             this._on(this.modal.find(this.options.modalCloseBtn), {
                 'click': this.closeModal
@@ -141,20 +140,6 @@ define([
             });
         },
 
-        /**
-         * Create focusable scope in modal window.
-         * append to focusable scope element with start
-         * and element with end position
-         */
-        _createFocusableElements: function() {
-            var startFocusableTemplate = '<div data-role="focusable-start" tabindex="0"></div>',
-                endFocusableTemplate = '<div data-role="focusable-end" tabindex="0"></div>',
-                scopeFocusable = this.modal.find(this.options.focusableScope);
-
-            $(startFocusableTemplate).insertBefore(scopeFocusable);
-            $(endFocusableTemplate).insertAfter(scopeFocusable);
-        },
-
         /**
          * Returns element from modal node.
          * @return {Object} - element.
@@ -187,11 +172,11 @@ define([
          * Listener key events.
          * Call handler function if it exists
          */
-        keyeventSwitcher: function (event) {
+        keyEventSwitcher: function (event) {
             var key = keyCodes[event.keyCode];
 
-            if (this.keyeventHandlers.hasOwnProperty(key)) {
-                this.keyeventHandlers[key].apply(this, arguments);
+            if (this.keyEventHandlers.hasOwnProperty(key)) {
+                this.keyEventHandlers[key].apply(this, arguments);
             }
         },
 
@@ -268,14 +253,14 @@ define([
          * Set keyup listener when modal is opened.
          */
         _setKeyListener: function () {
-            this.modal.bind('keyup', this.keyeventSwitcher);
+            this.modal.bind('keyup', this.keyEventSwitcher);
         },
 
         /**
          * Remove keyup listener when modal is closed.
          */
         _removeKeyListener: function () {
-            this.modal.unbind('keyup', this.keyeventSwitcher);
+            this.modal.unbind('keyup', this.keyEventSwitcher);
         },
 
         /**
@@ -289,7 +274,6 @@ define([
             this.options.isOpen = false;
             this.previosFocused = null;
             this.modal.one(this.options.transitionEvent, function () {
-                $(that.focussedElement).focus();
                 that._close();
             });
             this.modal.removeClass(this.options.modalVisibleClass);
@@ -307,6 +291,7 @@ define([
         _close: function () {
             var trigger = _.bind(this._trigger, this, 'closed', this.modal);
 
+            $(that.focussedElement).focus();
             this._destroyOverlay();
             this._unsetActive();
             _.defer(trigger, this);
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
index 11d623f2875..3d83df47319 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
@@ -10,6 +10,7 @@
        <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
     data-type="<%= data.type %>">
+    <div data-role="focusable-start" tabindex="0"></div>
     <div class="modal-inner-wrap"
          data-role="focusable-scope"
          tabindex="0">
@@ -37,4 +38,5 @@
         </footer>
         <% } %>
     </div>
+    <div data-role="focusable-end" tabindex="0"></div>
 </aside>
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
index bd6b33e9cf6..52cf0807531 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
@@ -11,6 +11,7 @@
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
     data-type="<%= data.type %>">
+    <div data-role="focusable-start" tabindex="0"></div>
     <div class="modal-inner-wrap"
          data-role="focusable-scope"
          tabindex="0">
@@ -40,4 +41,5 @@
         </footer>
         <% } %>
     </div>
+    <div data-role="focusable-end" tabindex="0"></div>
 </aside>
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
index 58381ad0f98..42d8ae63a92 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
@@ -10,6 +10,7 @@
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
     data-type="<%= data.type %>">
+    <div data-role="focusable-start" tabindex="0"></div>
     <div class="modal-inner-wrap"
          data-role="focusable-scope"
          tabindex="0">
@@ -42,4 +43,5 @@
         </header>
         <div class="modal-content" data-role="content"></div>
     </div>
+    <div data-role="focusable-end" tabindex="0"></div>
 </aside>
-- 
GitLab


From dcab46a2f46a308aaa4eb641bebc8eb43b810e95 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Wed, 23 Sep 2015 10:03:56 +0300
Subject: [PATCH 103/420] MAGETWO-42989: Implementation

---
 app/code/Magento/Ui/view/base/web/js/modal/modal.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 575eb78a44d..6c868ae782c 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -291,7 +291,7 @@ define([
         _close: function () {
             var trigger = _.bind(this._trigger, this, 'closed', this.modal);
 
-            $(that.focussedElement).focus();
+            $(this.focussedElement).focus();
             this._destroyOverlay();
             this._unsetActive();
             _.defer(trigger, this);
-- 
GitLab


From e195ffb658b9a1a08c8d512eb2ebd50152af5ea7 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 23 Sep 2015 11:20:13 +0300
Subject: [PATCH 104/420] MAGETWO-42995: Stabilize functional tests

---
 .../view/adminhtml/templates/catalog/category/tree.phtml        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index ad7979e4870..791e4dbd96b 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -383,7 +383,7 @@
                         store_id: <?php /* @escapeNotVerified */ echo (int)$block->getStore()->getId() ?>,
                         category_id: <?php /* @escapeNotVerified */ echo (int)$block->getCategoryId() ?>
                     },
-                    data: <?php echo $block->getTreeJson() ?>
+                    data: <?php  /* @escapeNotVerified */ echo $block->getTreeJson() ?>
                 };
 
                 reRenderTree();
-- 
GitLab


From 85e6843333496fb64544f5c35a4627c1ca1b2eab Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:04:54 +0300
Subject: [PATCH 105/420] JS-153: Magnifier preview must be hidden, while start
 swiping or dragging

---
 lib/web/mage/gallery/gallery.html |  4 ++--
 lib/web/magnifier/magnify.js      | 40 +++++++++++++++++++++++++++----
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 6a9a3cfbe3c..69a196d86c6 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -8,13 +8,13 @@
     <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows">
         <div class="fotorama__stage">
             <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos">
-                <div class="fotorama__arr__arr"></div>
+                <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__stage__shaft" tabindex="0" data-gallery-role="stage-shaft">
             </div>
             <div class="fotorama__arr fotorama__arr--next fotorama__arr--disabled" tabindex="-1" role="button"
                  aria-label="Next">
-                <div class="fotorama__arr__arr"></div>
+                <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
         </div>
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index a30a827aabd..146c014b444 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -13,7 +13,9 @@ define([
         var isTouchEnabled = 'ontouchstart' in document.documentElement,
             gallerySelector = '[data-gallery-role="gallery"]',
             magnifierSelector = '[data-gallery-role="magnifier"]',
-            magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]';
+            magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]',
+            hideMagnifier,
+            behaveOnHover;
 
         if (isTouchEnabled) {
             $(element).on('fotorama:showend fotorama:load', function () {
@@ -23,8 +25,38 @@ define([
             return config;
         }
 
+        /**
+         * Hides magnifier preview and zoom blocks.
+         */
+        hideMagnifier = function () {
+            $(magnifierSelector).empty().hide();
+            $(magnifierZoomSelector).remove();
+        };
+
+        /**
+         * Hides magnifier on drag and while arrow click.
+         */
+        behaveOnHover = function (e, initPos) {
+            var pos = [e.pageX, e.pageY],
+                isArrow = $(e.target).data('gallery-role') === 'arrow',
+                isClick = initPos[0] ===  pos[0] && initPos[1] ===  pos[1];
+            if (isArrow || !isClick) {
+                hideMagnifier();
+            }
+        };
+
         if (config.magnifierOpts.eventType === 'click') {
             config.options.swipe = false;
+        } else if (config.magnifierOpts.eventType === 'hover') {
+            $(element).on('pointerdown mousedown MSPointerDown', function (e) {
+                var pos = [e.pageX, e.pageY];
+                $(element).on('mousemove pointermove MSPointerMove', function (ev) {
+                    navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
+                });
+                $(document).on('mouseup pointerup MSPointerUp', function () {
+                    $(element).off('mousemove pointermove MSPointerMove');
+                });
+            });
         }
 
         $.extend(config.magnifierOpts, {
@@ -48,15 +80,13 @@ define([
         });
 
         $(element).on('fotorama:showend fotorama:load', function (e, fotorama) {
-            $(magnifierSelector).empty().hide();
-            $(magnifierZoomSelector).remove();
+            hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('fotorama:show', function () {
-            $(magnifierSelector).empty().hide();
-            $(magnifierZoomSelector).remove();
+            hideMagnifier();
         });
 
         return config;
-- 
GitLab


From 1b7acfb90e377142f2fc5f734e92a35c3e5fba58 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:13:45 +0300
Subject: [PATCH 106/420] JS-182: Magnifier doesn't appear on gallery arrows
 hover

---
 lib/web/magnifier/magnifier.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 3a31236832e..6e5a05cfd68 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -394,7 +394,7 @@
                         onThumbLeave();
                     }
                     handleEvents(e);
-                    isOverThumb = true;
+                    isOverThumb = inBounds;
                 }
             }).trigger('mouseover');
         }
@@ -564,6 +564,10 @@
 
             getMousePos();
 
+            if (gEventType === 'hover') {
+                isOverThumb = inBounds;
+            }
+
             if (inBounds && isOverThumb) {
                 $largeWrapper.removeClass(MagnifyCls.magnifyHidden);
                 move();
-- 
GitLab


From bdab3ad82d929f59a85b3f25cefe5c456ee745d4 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:23:41 +0300
Subject: [PATCH 107/420] JS-160: Erratic behaviour when changing slides

---
 lib/web/fotorama/fotorama.js | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 592f9d4cff0..7ae347e8dd7 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1573,17 +1573,9 @@ fotoramaVersion = '4.6.4';
 
         if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) {
             elPos = options.overPos;
-            onEndFn = function () {
-                slide($el, $.extend({}, options, {
-                    overPos: options.pos,
-                    time: Math.max(TRANSITION_DURATION, options.time / 2)
-                }));
-            };
         }
 
-        ////////console.time('var translate = $.extend');
         var translate = $.extend(getTranslate(elPos/*, options._001*/), options.width && {width: options.width});
-        ////////console.timeEnd('var translate = $.extend');
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
@@ -1591,9 +1583,7 @@ fotoramaVersion = '4.6.4';
         if (CSS3) {
             $el.css($.extend(getDuration(options.time), translate));
             if (options.time > 10) {
-                ////////console.time('afterTransition');
                 afterTransition($el, 'transform', onEndFn, options.time);
-                ////////console.timeEnd('afterTransition');
             } else {
                 onEndFn();
             }
-- 
GitLab


From 8f28b8bdfdd9ddb10f9b1c9c7365dc921e6ae487 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 7 Sep 2015 16:49:16 +0300
Subject: [PATCH 108/420] JS-171: Implement enabling/disabling of full-screen
 mode

---
 .../templates/product/view/gallery.phtml      |  3 +-
 .../frontend/Magento/blank/etc/view.xml       |  3 +-
 app/design/frontend/Magento/luma/etc/view.xml |  3 +-
 lib/web/mage/gallery/gallery.js               |  2 +-
 lib/web/mage/gallery/gallery.less             | 32 ++++++++-----------
 5 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index e2ec81f81a8..dd7a93a1fdb 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -32,7 +32,8 @@
                     "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:loop"); ?>,
                     "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:keyboard"); ?>,
                     "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:arrows"); ?>,
-                    "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:showCaption"); ?>,
+                    "allowfullscreen": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:allowfullscreen"); ?>,
+                    "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:caption"); ?>,
                     "width": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "thumbwidth": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height')
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 4762130b122..8da258fc1a7 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -184,7 +184,8 @@
         <var name="gallery:loop">true</var> <!-- Gallery navigation loop (true/false) -->
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:showCaption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 57e50681c00..26deae4a1be 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -188,7 +188,8 @@
         <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) -->
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:showCaption">true</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9f81daba85b..7eeed339a86 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -42,7 +42,7 @@ define([
                 $element: $(element),
                 currentConfig: config,
                 defaultConfig: _.clone(config),
-                fullscreenConfig: _.clone(config.fullscreen),
+                fullscreenConfig: _.clone(config.allowfullscreen),
                 breakpoints: config.breakpoints,
                 activeBreakpoint: {},
                 fotoramaApi: null,
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 9fd58e8b302..0e5d52ae073 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -58,16 +58,6 @@
     width: 100%;
 }
 
-.fotorama-image-reset {
-    border-radius: 0 !important;
-    box-shadow: none !important;
-    max-height: 99999px !important;
-    max-width: 99999px !important;
-    min-height: 0 !important;
-    min-width: 0 !important;
-    padding: 0 !important;
-}
-
 .fotorama-grab-cursor {
     cursor: move;
     cursor: -webkit-grab;
@@ -202,8 +192,7 @@
 }
 
 .fotorama--fullscreen {
-    &:extend(.fotorama-image-reset);
-    background: @color-black;
+    background: @color-white;
     bottom: 0 !important;
     float: none !important;
     height: 100% !important;
@@ -214,9 +203,8 @@
     top: 0 !important;
     width: 100% !important;
     z-index: @z-index-10 !important;
-    .fotorama__stage,
-    .fotorama__nav {
-        background: @color-black;
+    .fotorama__wrap {
+        max-width: 100% !important;
     }
 }
 
@@ -583,6 +571,14 @@
     &:extend(.fotorama-no-tap);
     cursor: pointer;
     position: absolute;
+}
+
+.fotorama__arr {
+    z-index: @z-index-9;
+
+}
+.fotorama__fullscreen-icon,
+.fotorama__video-close {
     z-index: @z-index-10;
 }
 
@@ -629,7 +625,7 @@
     right: 2px;
     top: 2px;
     width: @size-fotorama-block;
-    z-index: 20;
+    z-index: @z-index-10;
 }
 
 .fotorama__fullscreen-icon {
@@ -642,7 +638,7 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
-        background-position: (-@fotorama_fullscreen_button) (-@fotorama_fullscreen_button);
+        background-position: (-@size-fotorama-block) 0;
     }
 }
 
@@ -859,7 +855,7 @@
     overflow: hidden;
     position: absolute;
     top: 0;
-    z-index: @z-index-10;
+    z-index: @z-index-9;
 }
 
 .magnify-lens {
-- 
GitLab


From fecbdcfc8317a7e5b38366ac6b7728d980e42200 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 9 Sep 2015 16:49:25 +0300
Subject: [PATCH 109/420] JS-175: Implement transition options support from
 theme level

---
 .../templates/product/view/gallery.phtml      |  6 +++
 .../frontend/Magento/blank/etc/view.xml       |  2 +
 app/design/frontend/Magento/luma/etc/view.xml |  2 +
 .../js/jasmine/assets/gallery/config.json     |  9 ++++-
 .../js/jasmine/tests/lib/mage/gallery.test.js | 37 ++++++++++++++++++-
 5 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index dd7a93a1fdb..ec8f67a70a3 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -40,6 +40,12 @@
                         ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
+                    "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
+                    "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
+                },
+                "fullscreen": {
+                    "nav": "thumbs",
+                    "swipe": false
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 8da258fc1a7..9375a531af2 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,6 +186,8 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 26deae4a1be..e6587fe25dc 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -190,6 +190,8 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
diff --git a/dev/tests/js/jasmine/assets/gallery/config.json b/dev/tests/js/jasmine/assets/gallery/config.json
index b3c8b8bc0b3..d1d8e94d7f2 100644
--- a/dev/tests/js/jasmine/assets/gallery/config.json
+++ b/dev/tests/js/jasmine/assets/gallery/config.json
@@ -59,12 +59,17 @@
         "arrows": "false",
         "thumbwidth": "90",
         "thumbheight": "90",
-        "ratio": "1"
+        "ratio": "1",
+        "allowfullscreen": true
+    },
+    "fullscreen": {
+        "nav": false
     },
     "breakpoints": {
         "alias": {
             "conditions": {
-                "min-width": "0px"
+                "min-width": "0px",
+                "max-width": "1px"
             },
             "options": {
                 "options": {
diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
index 3f076659b49..dd29ec79a64 100644
--- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
@@ -19,6 +19,7 @@ define([
         stageSelector = '[data-gallery-role="stage-shaft"]',
         navSelector = '[data-gallery-role="nav-frame"]',
         dotSelector = '[data-nav-type="dot"]',
+        navWrap = '[data-gallery-role="nav-wrap"]',
         dataToUpdate = [
             {
                 img: 'data:image/png;base64,' +
@@ -33,7 +34,16 @@ define([
                 img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' +
                 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII='
             }
-        ];
+        ],
+        waitsFor = function (test, fn) {
+            if (test()) {
+                fn();
+            } else {
+                setTimeout(function () {
+                    waitsFor(test, fn);
+                }, 10);
+            }
+        };
 
     gallery(magnifier(conf, body), body);
 
@@ -115,5 +125,30 @@ define([
         it('breakpoints override configs', function () {
             expect($('.fotorama__arr').css('display')).toBe('none');
         });
+
+        it('fullscreen enter', function (done) {
+            expect($(navWrap).css('display') === 'block').toBeTruthy();
+            galleryAPI.fotorama.requestFullScreen();
+
+            waitsFor(function () {
+                return $(navWrap).css('display') !== 'block';
+            }, function () {
+                expect($(navWrap).css('display') === 'none').toBeTruthy();
+                done();
+            });
+        });
+
+
+        it('fullscreen exit', function (done) {
+            expect($(navWrap).css('display') === 'none').toBeTruthy();
+            galleryAPI.fotorama.cancelFullScreen();
+
+            waitsFor(function () {
+                return $(navWrap).css('display') !== 'none';
+            }, function () {
+                expect($(navWrap).css('display') === 'block').toBeTruthy();
+                done();
+            });
+        });
     });
 });
-- 
GitLab


From a2cb6017efa9875bffdbaedad6d9f8178ed1b215 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 9 Sep 2015 17:34:32 +0300
Subject: [PATCH 110/420] JS-157: Implement drag for image on desktops

---
 .../templates/product/view/gallery.phtml      |   8 +-
 .../frontend/Magento/blank/etc/view.xml       |   9 +-
 app/design/frontend/Magento/luma/etc/view.xml |   8 ++
 lib/web/fotorama/fotorama.js                  |   2 +-
 lib/web/mage/gallery/gallery.js               |   5 +-
 lib/web/mage/gallery/gallery.less             |  15 ++
 lib/web/magnifier/magnifier.js                | 131 ++++++++++++++++++
 lib/web/magnifier/magnify.js                  |   5 +-
 8 files changed, 175 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index ec8f67a70a3..0c979222139 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -44,8 +44,12 @@
                     "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
                 },
                 "fullscreen": {
-                    "nav": "thumbs",
-                    "swipe": false
+                    "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
+                    "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
+                    "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
+                    "showCaption": <?php echo $block->getVar("gallery:fullscreen:show_caption"); ?>,
+                    "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
+                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 9375a531af2..f61618b4907 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,9 +186,16 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+        <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
+        <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+        <var name="gallery:fullscreen:show_caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index e6587fe25dc..c622504ac0e 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -193,6 +193,14 @@
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+        <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
+        <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
+        <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+        <var name="gallery:fullscreen:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+        <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 7ae347e8dd7..5f34cd9820e 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -977,7 +977,7 @@ fotoramaVersion = '4.6.4';
 
             arrows: true,
             click: true,
-            swipe: true,
+            swipe: false,
             trackpad: false,
 
             shuffle: false,
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 7eeed339a86..ed4e12dde1f 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -36,6 +36,7 @@ define([
         initialize: function (config, element) {
             this._super();
 
+            config.options.swipe = true;
             this.config = config;
 
             this.settings = {
@@ -52,7 +53,6 @@ define([
 
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
-            config.options.allowfullscreen = false;
 
             $.extend(true, this.startConfig, config);
 
@@ -67,6 +67,9 @@ define([
          */
         initFullscreenSettings: function () {
             var settings = this.settings;
+
+            settings.fullscreenConfig.swipe = false;
+
             settings.$element.on('fotorama:fullscreenenter', function () {
                 settings.api.updateOptions(settings.defaultConfig.options, true);
                 settings.api.updateOptions(settings.fullscreenConfig, true);
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 0e5d52ae073..1f7eac04d2d 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -897,6 +897,21 @@
     }
 }
 
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0px;
+            bottom: 0px;
+            left: 0px;
+            right: 0px;
+        }
+    }
+}
+
 .fotorama__stage__frame {
     text-align: center;
     .fotorama__img {
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 6e5a05cfd68..acfd548bcca 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -578,6 +578,99 @@
             }
         }
 
+        function magnifierFullscreen () {
+            var isDragActive = false,
+                startX,
+                startY,
+                imagePosX,
+                imagePosY,
+                touch,
+                isTouchEnabled = 'ontouchstart' in document.documentElement;
+
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
+
+                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $imageContainer = $image.parent(),
+                    gallery = $('[data-gallery-role="gallery"]');
+
+                gallery.on('fotorama:fullscreenexit', function () {
+                    $thumb.css({
+                        'top': '',
+                        'left': ''
+                    });
+                });
+
+                $image.on(isTouchEnabled ? 'touchstart' : 'mousedown', function (e) {
+                    if (gallery.data('fotorama').fullScreen) {
+                        e.preventDefault();
+
+                        $image.css('cursor', 'move');
+                        imagePosY = $image.offset().top;
+                        imagePosX = $image.offset().left;
+
+                        if (isTouchEnabled) {
+                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                            e.clientX = touch.pageX;
+                            e.clientY = touch.pageY;
+                        }
+                        startX = e.clientX;
+                        startY = e.clientY;
+                        isDragActive = true;
+                    }
+                });
+
+                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove', function (e) {
+                    if (gallery.data('fotorama').fullScreen && isDragActive) {
+
+                        var top,
+                            left,
+                            startOffset = $image.offset();
+
+                        e.preventDefault();
+
+                        if (isTouchEnabled) {
+                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                            e.clientX = touch.pageX;
+                            e.clientY = touch.pageY;
+                        }
+                        top = +imagePosY + (e.clientY - startY);
+                        left = +imagePosX + (e.clientX - startX);
+
+                        if ($image.height() > $imageContainer.height()) {
+
+                            if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
+                                top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                            } else {
+                                top = ($imageContainer.offset().top < top) ? 0 : top;
+                            }
+                            $image.offset({
+                                'top': top
+                            });
+                        }
+
+                        if ($image.width() > $imageContainer.width()) {
+
+                            if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                                left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                            } else {
+                                left = ($imageContainer.offset().left < left) ? 0 : left;
+                            }
+                            $image.offset({
+                                'left': left
+                            });
+                        }
+                    }
+                });
+
+                $image.on(isTouchEnabled ? 'touchend' : 'mouseup', function (e) {
+                    if (gallery.data('fotorama').fullScreen) {
+                        isDragActive = false;
+                        $image.css('cursor', 'pointer');
+                    }
+                });
+            });
+        };
+
         function onScroll() {
 
             if (curThumb !== null) {
@@ -587,9 +680,47 @@
 
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
+
+            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+
+                var $image = $('[data-gallery-role="stage-shaft"] > [data-active="true"] > img'),
+                    $imageContainer = $image.parent(),
+                    top, left;
+
+                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
+                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                } else {
+                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
+                }
+
+                if (top !== undefined) {
+                    $image.css('top', top);
+                }
+
+                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
+                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                } else {
+                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
+                }
+
+                if (left !== undefined) {
+                    $image.css('left', left);
+                }
+
+                if ($image.width() < $imageContainer.width()) {
+                    $image.css('left', '');
+                }
+
+                if ($image.height() < $imageContainer.height()) {
+                    $image.css('top', '');
+                }
+            }
+
             _init($box, gOptions);
+
         });
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
+        magnifierFullscreen();
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 146c014b444..d6f7c9931f3 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -20,9 +20,8 @@ define([
         if (isTouchEnabled) {
             $(element).on('fotorama:showend fotorama:load', function () {
                 $(magnifierSelector).remove();
+                $(magnifierZoomSelector).remove();
             });
-
-            return config;
         }
 
         /**
@@ -79,7 +78,7 @@ define([
             }
         });
 
-        $(element).on('fotorama:showend fotorama:load', function (e, fotorama) {
+        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
-- 
GitLab


From 95228e482516b5af2aa5aec1287d30ad85d8e64c Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 15 Sep 2015 01:27:22 +0300
Subject: [PATCH 111/420] JS-50: Different configurations for Page and Full
 Screen Gallery Widget modes

---
 .../templates/product/view/gallery.phtml      |   2 +-
 .../frontend/Magento/blank/etc/view.xml       |   3 +-
 app/design/frontend/Magento/luma/etc/view.xml |   3 +-
 .../js/jasmine/tests/lib/mage/gallery.test.js |   2 +-
 lib/web/fotorama/fotorama.js                  | 239 +++++++++----
 lib/web/mage/gallery/gallery.html             |   4 +-
 lib/web/mage/gallery/gallery.js               |  22 +-
 lib/web/mage/gallery/gallery.less             | 324 +++++++++++++++---
 lib/web/magnifier/magnifier.js                |  54 +++
 lib/web/magnifier/magnify.js                  |   3 +-
 10 files changed, 542 insertions(+), 114 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 0c979222139..3add5dee58c 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -47,7 +47,7 @@
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
                     "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
-                    "showCaption": <?php echo $block->getVar("gallery:fullscreen:show_caption"); ?>,
+                    "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
                     "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index f61618b4907..178841f20db 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,13 +186,14 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
-        <var name="gallery:fullscreen:show_caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index c622504ac0e..0d69ff8dee8 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -190,6 +190,7 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
@@ -197,7 +198,7 @@
         <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
-        <var name="gallery:fullscreen:show_caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:fullscreen:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
index dd29ec79a64..d762ca5fe9f 100644
--- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
@@ -138,7 +138,6 @@ define([
             });
         });
 
-
         it('fullscreen exit', function (done) {
             expect($(navWrap).css('display') === 'none').toBeTruthy();
             galleryAPI.fotorama.cancelFullScreen();
@@ -150,5 +149,6 @@ define([
                 done();
             });
         });
+
     });
 });
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 5f34cd9820e..d7f64c62bc1 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -5,7 +5,7 @@ fotoramaVersion = '4.6.4';
 (function (window, document, location, $, undefined) {
     "use strict";
     var _fotoramaClass = 'fotorama',
-        _fullscreenClass = 'fullscreen',
+        _fullscreenClass = 'fotorama__fullscreen',
 
         wrapClass = _fotoramaClass + '__wrap',
         wrapCss2Class = wrapClass + '--css2',
@@ -37,6 +37,9 @@ fotoramaVersion = '4.6.4';
         navClass = _fotoramaClass + '__nav',
         navWrapClass = navClass + '-wrap',
         navShaftClass = navClass + '__shaft',
+        navShaftVerticalClass = navWrapClass + '--vertical',
+        navShaftListClass = navWrapClass + '--list',
+        navShaftHorisontalClass = navWrapClass + '--horisontal',
         navDotsClass = navClass + '--dots',
         navThumbsClass = navClass + '--thumbs',
         navFrameClass = navClass + '__frame',
@@ -49,6 +52,8 @@ fotoramaVersion = '4.6.4';
         shadowsClass = shadowClass + 's',
         shadowsLeftClass = shadowsClass + '--left',
         shadowsRightClass = shadowsClass + '--right',
+        shadowsTopClass = shadowsClass + '--top',
+        shadowsBottomClass = shadowsClass + '--bottom',
 
         activeClass = _fotoramaClass + '__active',
         selectClass = _fotoramaClass + '__select',
@@ -482,7 +487,7 @@ fotoramaVersion = '4.6.4';
                 , n
 
             for (n in prop) el[n] = prop[n]
-            return el;
+            return el
         }
 
         /**
@@ -986,7 +991,8 @@ fotoramaVersion = '4.6.4';
 
             shadows: true,
             spinner: null,
-            showcaption: true
+            showcaption: true,
+            navdir: 'horisontal'
         },
 
         KEYBOARD_OPTIONS = {
@@ -1005,24 +1011,40 @@ fotoramaVersion = '4.6.4';
         return Math.max(isNaN(min) ? -Infinity : min, Math.min(isNaN(max) ? Infinity : max, value));
     }
 
-    function readTransform(css) {
-        return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ? 12 : 4];
+    function readTransform(css, dir) {
+        return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ?
+                (dir === 'vertical' ? 13: 12) : (dir === 'vertical' ? 5 : 4)
+                ]
     }
 
-    function readPosition($el) {
+    function readPosition($el, dir) {
         if (CSS3) {
-            return +readTransform($el.css('transform'));
+            return +readTransform($el.css('transform'), dir);
         } else {
-            return +$el.css('left').replace('px', '');
+            return +$el.css(dir === 'vertical' ? 'top': 'left').replace('px', '');
         }
     }
 
-    function getTranslate(pos/*, _001*/) {
+    function getTranslate(pos, direction) {
         var obj = {};
+
         if (CSS3) {
-            obj.transform = 'translate3d(' + (pos/* + (_001 ? 0.001 : 0)*/) + 'px,0,0)'; // 0.001 to remove Retina artifacts
+
+            switch (direction){
+                case 'vertical':
+                    obj.transform = 'translate3d(0, ' + (pos) + 'px,0)';
+                    break;
+                case 'list':
+                    //console.warn("transition not implemented");
+                    break;
+                default :
+                    obj.transform = 'translate3d(' + (pos) + 'px,0,0)';
+                    break;
+            }
         } else {
-            obj.left = pos;
+            direction === 'vertical' ?
+                obj.top = pos :
+                obj.left = pos;
         }
         return obj;
     }
@@ -1103,7 +1125,8 @@ fotoramaVersion = '4.6.4';
     }
 
 
-    function stop($el, left/*, _001*/) {
+    function stop($el, pos/*, _001*/) {
+        var dir = $el.navdir || 'horizontal';
         if ($el.length) {
             var elData = $el.data();
             if (CSS3) {
@@ -1113,12 +1136,12 @@ fotoramaVersion = '4.6.4';
             } else {
                 $el.stop();
             }
-            var lockedLeft = getNumber(left, function () {
-                return readPosition($el);
+            var lockedPos = getNumber(pos, function () {
+                return readPosition($el, dir);
             });
 
-            $el.css(getTranslate(lockedLeft/*, _001*/));//.width(); // `.width()` for reflow
-            return lockedLeft;
+            $el.css(getTranslate(lockedPos, dir/*, _001*/));//.width(); // `.width()` for reflow
+            return lockedPos;
         }
     }
 
@@ -1353,8 +1376,11 @@ fotoramaVersion = '4.6.4';
         }
     }
 
-    function findShadowEdge(pos, min, max) {
-        return min === max ? false : pos <= min ? 'left' : pos >= max ? 'right' : 'left right';
+    function findShadowEdge(pos, min, max, dir) {
+        return min === max ? false :
+            dir === 'vertical' ?
+                (pos <= min ? 'top' : pos >= max ? 'bottom' : 'top bottom') :
+                (pos <= min ? 'left' : pos >= max ? 'right' : 'left right');
     }
 
     function smartClick($el, fn, _options) {
@@ -1377,7 +1403,6 @@ fotoramaVersion = '4.6.4';
                 onMove: _options.onMove || noop,
                 onTouchEnd: _options.onTouchEnd || noop,
                 onEnd: function (result) {
-                    ////console.log('smartClick → result.moved', result.moved);
                     if (result.moved) return;
                     fn.call(this, startEvent);
                 }
@@ -1575,7 +1600,7 @@ fotoramaVersion = '4.6.4';
             elPos = options.overPos;
         }
 
-        var translate = $.extend(getTranslate(elPos/*, options._001*/), options.width && {width: options.width});
+        var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
@@ -1635,7 +1660,8 @@ fotoramaVersion = '4.6.4';
     var lastEvent,
         moveEventType,
         preventEvent,
-        preventEventTimeout;
+        preventEventTimeout,
+        dragDomEl;
 
     function extendEvent(e) {
         var touch = (e.touches || [])[0] || e;
@@ -1709,7 +1735,6 @@ fotoramaVersion = '4.6.4';
                     stopEvent(e);
                 }
             } else {
-                ////console.log('onMove e.preventDefault');
                 stopEvent(e);
                 (options.onMove || noop).call(el, e, {touch: touchFLAG});
             }
@@ -1786,11 +1811,12 @@ fotoramaVersion = '4.6.4';
                 .on('mousemove', onMove)
                 .on('mouseup', onEnd);
         }
-
-        $el.on('click', 'a', function (e) {
-            if (!Modernizr.touch) {
-                e.preventDefault();
-            }
+        if (Modernizr.touch) {
+            dragDomEl = 'a';
+        } else {
+            dragDomEl = 'div';
+        }
+        $el.on('click', dragDomEl, function (e) {
             tail.checked && stopEvent(e);
         });
 
@@ -1812,6 +1838,7 @@ fotoramaVersion = '4.6.4';
             min,
             max,
             snap,
+            dir = options.direction || 'horizontal',
             slowFLAG,
             controlFLAG,
             moved,
@@ -1819,9 +1846,10 @@ fotoramaVersion = '4.6.4';
 
         function startTracking(e, noStop) {
             tracked = true;
-            startCoo = coo = e._x;
+            startCoo = coo = (dir === 'vertical') ? e._y : e._x;
             startTime = e._now;
 
+
             moveTrack = [
                 [startTime, startCoo]
             ];
@@ -1834,7 +1862,9 @@ fotoramaVersion = '4.6.4';
         function onStart(e, result) {
             min = tail.min;
             max = tail.max;
-            snap = tail.snap;
+            snap = tail.snap,
+                dir = tail.direction||'horizontal',
+                $el.navdir = dir;
 
             slowFLAG = e.altKey;
             tracked = moved = false;
@@ -1851,14 +1881,13 @@ fotoramaVersion = '4.6.4';
                 if (!tracked) {
                     startTracking(e);
                 }
-
-                coo = e._x;
+                coo = (dir === 'vertical') ? e._y : e._x;
 
                 moveTrack.push([e._now, coo]);
 
                 moveElPos = startElPos - (startCoo - coo);
 
-                edge = findShadowEdge(moveElPos, min, max);
+                edge = findShadowEdge(moveElPos, min, max, dir);
 
                 if (moveElPos <= min) {
                     moveElPos = edgeResistance(moveElPos, min);
@@ -1867,7 +1896,7 @@ fotoramaVersion = '4.6.4';
                 }
 
                 if (!tail.noMove) {
-                    $el.css(getTranslate(moveElPos/*, options._001*/));
+                    $el.css(getTranslate(moveElPos, dir));
                     if (!moved) {
                         moved = true;
                         // only for mouse
@@ -1959,7 +1988,8 @@ fotoramaVersion = '4.6.4';
                 pos: moveElPos,
                 newPos: newPos,
                 overPos: overPos,
-                time: time
+                time: time,
+                dir:dir
             }));
         }
 
@@ -2118,7 +2148,11 @@ fotoramaVersion = '4.6.4';
             stageLeft = 0,
 
             fadeStack = [];
-        $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
+        if (Modernizr.touch) {
+            $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
+        } else {
+            $wrap[STAGE_FRAME_KEY] = $('<div class="' + stageFrameClass + '"></div>');
+        }
 
         $wrap[NAV_THUMB_FRAME_KEY] = $($.Fotorama.jst.thumb());
 
@@ -2160,6 +2194,25 @@ fotoramaVersion = '4.6.4';
             return o_keyboard[key] || that.fullScreen;
         }
 
+        function setStagePosition() {
+            if ($stage !== undefined) {
+
+                if (opts.navdir == 'vertical') {
+                    var padding = opts.thumbwidth + opts.thumbmargin;
+
+                    $stage.css('left', padding);
+                    $arrNext.css('right', padding);
+                    $wrap.css('width', $wrap.css('width') + padding);
+                    $stageShaft.css('max-width', $wrap.width() - padding);
+                } else {
+                    $stage.css('left', '');
+                    $arrNext.css('right', '');
+                    $wrap.css('width', $wrap.css('width') + padding);
+                    $stageShaft.css('max-width', '');
+                }
+            }
+        }
+
         function bindGlobalEvents(FLAG) {
             var keydownCommon = 'keydown.' + _fotoramaClass,
                 localStamp = _fotoramaClass + stamp,
@@ -2266,6 +2319,10 @@ fotoramaVersion = '4.6.4';
          * Options on the fly
          * */
         function setOptions() {
+            if (opts.nav === 'dots') {
+                opts.navdir = 'horizontal'
+            }
+
             that.options = opts = optionsToLowerCase(opts);
 
             o_fade = (opts.transition === 'crossfade' || opts.transition === 'dissolve');
@@ -2386,6 +2443,7 @@ fotoramaVersion = '4.6.4';
                 .removeClass(classes.remove.join(' '));
 
             lastOptions = $.extend({}, opts);
+            setStagePosition();
         }
 
         function normalizeIndex(index) {
@@ -2415,8 +2473,13 @@ fotoramaVersion = '4.6.4';
         }
 
         function setNavShaftMinMax() {
-            navShaftTouchTail.min = Math.min(0, measures.nw - $navShaft.width());
+
+            var isVerticalDir = (opts.navdir === 'vertical');
+            var param =  isVerticalDir ? $navShaft.height() : $navShaft.width();
+            var mainParam = isVerticalDir ? measures.h : measures.nw;
+            navShaftTouchTail.min = Math.min(0, mainParam - param);
             navShaftTouchTail.max = 0;
+            navShaftTouchTail.direction = opts.navdir;
             $navShaft.toggleClass(grabClass, !(navShaftTouchTail.noMove = navShaftTouchTail.min === navShaftTouchTail.max));
         }
 
@@ -2724,6 +2787,10 @@ fotoramaVersion = '4.6.4';
         }
 
         function thumbsDraw(pos, loadFLAG) {
+            if (opts.navdir === 'vertical') {
+                pos = pos - opts.thumbheight;
+            }
+
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
             var leftLimit = -pos,
@@ -2739,8 +2806,7 @@ fotoramaVersion = '4.6.4';
                             w: thisData.w
                         }
                     },
-                    specialMeasures = getSpecialMeasures(),
-                    dataFrame = data[eq] || {};
+                    specialMeasures = getSpecialMeasures();
 
                 specialMeasures.w = thisData.w;
 
@@ -2756,7 +2822,8 @@ fotoramaVersion = '4.6.4';
             if (!frameAppend[type]) {
 
                 var thumbsFLAG = type === 'nav' && o_navThumbs,
-                    left = 0;
+                    left = 0,
+                    top = 0;
 
                 $shaft.append(
                     $frames
@@ -2787,13 +2854,16 @@ fotoramaVersion = '4.6.4';
 
                             var $this = $(this),
                                 frameData = $this.data(),
-                                thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide;
-
+                                thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide,
+                                thumbheight = Math.round(o_thumbSide / frameData.data.thumbratio) || o_thumbSide2;
+                            frameData.t = top;
+                            frameData.h = thumbheight;
                             frameData.l = left;
                             frameData.w = thumbwidth;
 
                             $this.css({width: thumbwidth});
 
+                            top += thumbheight + opts.thumbmargin;
                             left += thumbwidth + opts.thumbmargin;
                         })
                 );
@@ -2830,29 +2900,43 @@ fotoramaVersion = '4.6.4';
         function getNavFrameBounds($navFrame) {
             var navFrameData = $navFrame.data(),
                 left,
-                width;
+                top,
+                width,
+                height;
 
             if (o_navThumbs) {
                 left = navFrameData.l;
+                top = navFrameData.t;
                 width = navFrameData.w;
+                height = navFrameData.h;
             } else {
                 left = $navFrame.position().left;
                 width = $navFrame.width();
             }
 
-            return {
+            var horizontalBounds = {
                 c: left + width / 2,
                 min: -left + opts.thumbmargin * 10,
                 max: -left + measures.w - width - opts.thumbmargin * 10
             };
+
+            var verticalBounds = {
+                c: top + height / 2,
+                min: -top + opts.thumbmargin * 10,
+                max: -top + measures.h - height - opts.thumbmargin * 10
+            };
+
+            return opts.navdir === 'vertical' ? verticalBounds : horizontalBounds;
         }
 
         function slideThumbBorder(time) {
             var navFrameData = activeFrame[navFrameKey].data();
             slide($thumbBorder, {
                 time: time * 1.2,
-                pos: navFrameData.l,
-                width: navFrameData.w
+                pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l),
+                width: navFrameData.w,
+                height: navFrameData.h,
+                direction: opts.navdir
             });
         }
 
@@ -2861,19 +2945,22 @@ fotoramaVersion = '4.6.4';
             if ($guessNavFrame) {
                 var overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max,
                     minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]),
-                    l = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
+                    boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
+                    boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
+                    l = (opts.navdir === 'vertical' ? boundTop : boundLeft),
                     pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max),
                     time = options.time * 1.1;
 
                 slide($navShaft, {
                     time: time,
                     pos: pos || 0,
+                    direction: opts.navdir,
                     onEnd: function () {
                         thumbsDraw(pos, true);
                     }
                 });
 
-                setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max));
+                setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
                 slideNavShaft.l = l;
             }
         }
@@ -3120,8 +3207,7 @@ fotoramaVersion = '4.6.4';
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
                     time: time,
-                    onEnd: onEnd/*,
-                     _001: true*/
+                    onEnd: onEnd
                 });
             } else {
                 var $activeFrame = activeFrame[STAGE_FRAME_KEY],
@@ -3264,11 +3350,11 @@ fotoramaVersion = '4.6.4';
             if (measureIsValid(width)) {
                 $stage.css({width: ''});
                 $stage.css({height: ''});
+                $stage.css({'line-height': ''});
                 $stageShaft.css({width: ''});
                 $stageShaft.css({height: ''});
                 $nav.css({width: ''});
                 $nav.css({height: ''});
-                $stage.css({'line-height': ''});
                 $wrap.css({minWidth: measures.minwidth || 0, maxWidth: measures.maxwidth || MAX_WIDTH});
 
                 width = measures.W = measures.w = $wrap.width();
@@ -3283,16 +3369,35 @@ fotoramaVersion = '4.6.4';
                 if (height) {
                     width = Math.round(width);
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
-
                     $stage.css({'width': width, 'height': height, 'line-height': height + 'px'});
 
-                    stageShaftReposition();
-
                     if (o_nav) {
-                        $nav
-                            .stop()
-                            .animate({width: measures.nw}, time);
+                        switch (opts.navdir) {
+                            case 'vertical':
+                                $navWrap.removeClass(navShaftHorisontalClass);
+                                $navWrap.removeClass(navShaftListClass);
+                                $navWrap.addClass(navShaftVerticalClass);
+                                $nav
+                                    .stop()
+                                    .animate({height: measures.h, width: opts.thumbwidth}, time);
+                                break;
+                            case 'list':
+                                $navWrap.removeClass(navShaftVerticalClass);
+                                $navWrap.removeClass(navShaftHorisontalClass);
+                                $navWrap.addClass(navShaftListClass);
+                                //console.warn("List not implemented");
+                                break;
+                            default:
+                                $navWrap.removeClass(navShaftVerticalClass);
+                                $navWrap.removeClass(navShaftListClass);
+                                $navWrap.addClass(navShaftHorisontalClass);
+                                $nav
+                                    .stop()
+                                    .animate({width: measures.nw}, time);
+                                break;
+                        }
 
+                        stageShaftReposition();
                         slideNavShaft({guessIndex: activeIndex, time: time, keep: true});
                         if (o_navThumbs && frameAppend.nav) slideThumbBorder(time);
                     }
@@ -3304,6 +3409,7 @@ fotoramaVersion = '4.6.4';
             }
 
             stageLeft = $stage.offset().left;
+            setStagePosition();
 
             return this;
         };
@@ -3322,6 +3428,7 @@ fotoramaVersion = '4.6.4';
         function setShadow($el, edge) {
             if (o_shadows) {
                 $el.removeClass(shadowsLeftClass + ' ' + shadowsRightClass);
+                $el.removeClass(shadowsTopClass + ' ' + shadowsBottomClass);
                 edge && !$videoPlaying && $el.addClass(edge.replace(/^|\s/g, ' ' + shadowsClass + '--'));
             }
         }
@@ -3492,7 +3599,9 @@ fotoramaVersion = '4.6.4';
             timeHigh: 1,
             friction: 2,
             select: '.' + selectClass + ', .' + selectClass + ' *',
-            $wrap: $stage
+            $wrap: $stage,
+            direction: 'horizontal'
+
         });
 
         navShaftTouchTail = moveOnTouch($navShaft, {
@@ -3519,10 +3628,11 @@ fotoramaVersion = '4.6.4';
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
+                        direction: opts.navdir,
                         onEnd: onEnd
                     });
                     thumbsDraw(result.newPos);
-                    o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max));
+                    o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
                 } else {
                     onEnd();
                 }
@@ -3530,7 +3640,8 @@ fotoramaVersion = '4.6.4';
             timeLow: .5,
             timeHigh: 2,
             friction: 5,
-            $wrap: $nav
+            $wrap: $nav,
+            direction: opts.navdir
         });
 
         stageWheelTail = wheel($stage, {
@@ -3547,8 +3658,8 @@ fotoramaVersion = '4.6.4';
                 onTouchStart();
                 onTouchEnd();
                 var newPos = stop($navShaft) + direction * .25;
-                $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max)));
-                o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max));
+                $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max), opts.navdir));
+                o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
                 navWheelTail.prevent = {'<': newPos >= navShaftTouchTail.max, '>': newPos <= navShaftTouchTail.min};
                 clearTimeout(navWheelTail.t);
                 navWheelTail.t = setTimeout(function () {
@@ -3567,7 +3678,7 @@ fotoramaVersion = '4.6.4';
                 }, 0);
             },
             function () {
-                //console.log("click");
+                ////console.log("click");
                 if (!hoverFLAG) return;
                 toggleControlsClass(!(hoverFLAG = false));
             }
@@ -3676,8 +3787,6 @@ fotoramaVersion = '4.6.4';
 
         reset();
     };
-
-
     $.fn.fotorama = function (opts) {
         return this.each(function () {
             var that = this,
@@ -3730,7 +3839,7 @@ fotoramaVersion = '4.6.4';
 
     $.Fotorama.jst.dots = function(v) {
         var __t, __p = '', __e = _.escape;
-        __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="dot" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
+        __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
         return __p
     };
 
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 69a196d86c6..473d784d22c 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -17,6 +17,8 @@
                 <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
+            <div class="fotorama__zoom-in"></div>
+            <div class="fotorama__zoom-out"></div>
         </div>
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
@@ -28,4 +30,4 @@
         </div>
     </div>
 </div>
-<div class="magnifier-preview" id="preview" data-gallery-role="magnifier"></div>
+<div class="magnifier-preview" data-gallery-role="magnifier" id="preview"></div>
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index ed4e12dde1f..b66c45363e4 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -34,6 +34,8 @@ define([
          * @param {String} element - String selector of gallery DOM element.
          */
         initialize: function (config, element) {
+            var fullscreenData = [];
+
             this._super();
 
             config.options.swipe = true;
@@ -43,14 +45,24 @@ define([
                 $element: $(element),
                 currentConfig: config,
                 defaultConfig: _.clone(config),
-                fullscreenConfig: _.clone(config.allowfullscreen),
+                fullscreenConfig: _.clone(config.fullscreen),
                 breakpoints: config.breakpoints,
                 activeBreakpoint: {},
                 fotoramaApi: null,
                 isFullscreen: false,
-                api: null
+                api: null,
+                data: _.clone(config.data),
+                fullscreenData: []
             };
 
+            _.each(_.clone(this.settings.data), function (item) {
+                fullscreenData.push({
+                    img: item.original,
+                    thumb: item.thumb
+                });
+            });
+            this.settings.fullscreenData = fullscreenData;
+
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
 
@@ -66,17 +78,20 @@ define([
          * Gallery fullscreen settings.
          */
         initFullscreenSettings: function () {
-            var settings = this.settings;
+            var settings = this.settings,
+                items = [];
 
             settings.fullscreenConfig.swipe = false;
 
             settings.$element.on('fotorama:fullscreenenter', function () {
+
                 settings.api.updateOptions(settings.defaultConfig.options, true);
                 settings.api.updateOptions(settings.fullscreenConfig, true);
 
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
+                settings.api.updateData(_.clone(settings.fullscreenData));
                 settings.isFullscreen = true;
             });
 
@@ -86,6 +101,7 @@ define([
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
+                settings.api.updateData(_.clone(settings.data));
                 settings.isFullscreen = false;
             });
         },
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 1f7eac04d2d..195dd5dec43 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -6,7 +6,6 @@
 @fotorama-duration-time: 0.3s;
 @fotorama-arw-size: 95px;
 @fotorama_close_size: 30px;
-@fotorama_fullscreen_button: 32px;
 @size-fotorama-block: 50px;
 
 @import '../../css/source/lib/_lib.less'; // Global lib
@@ -21,22 +20,21 @@
 }
 
 .translateX(@value) {
+    -webkit-transform: translateX(@value);
     -ms-transform: translateX(@value);
     -o-transform: translateX(@value);
-    -webkit-transform: translateX(@value);
     transform: translateX(@value);
 }
 
 .translateY(@value) {
+    -webkit-transform: translateY(@value);
     -ms-transform: translateY(@value);
     -o-transform: translateY(@value);
-    -webkit-transform: translateY(@value);
     transform: translateY(@value);
 }
 
-.translate3d(@x, @y, @z) {
-    -webkit-transform: translate3d(@x, @y, @z);
-    transform: translate3d(@x, @y, @z);
+.fotorama-shadow-gradient(@x, @y) {
+    background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at @x @y, rgba(0, 0, 0, 0.4), transparent);
 }
 
 .fotorama-inline-block(@va: middle) {
@@ -48,6 +46,86 @@
     vertical-align: @va;
 }
 
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        cursor: pointer;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        cursor: pointer;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
 .fotorama-stretch {
     bottom: 0;
     height: 100%;
@@ -682,7 +760,7 @@
     }
 
     .fotorama__wrap--css3 & {
-        .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
+        .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
     }
 
     .fotorama__wrap--video & {
@@ -707,6 +785,60 @@
     }
 }
 
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
 .fotorama__wrap--video {
     .fotorama__arr,
     .fotorama__fullscreen-icon {
@@ -735,24 +867,24 @@
 .fotorama__wrap--css3 {
     &.fotorama__wrap--no-controls.fotorama__wrap--slide.fotorama__wrap--toggle-arrows {
         .fotorama__fullscreen-icon:not(:focus) {
-            .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
+            .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
         }
         .fotorama__arr--prev:not(:focus) {
-            .translate3d(-@fotorama-arw-size * 1.5, 0, 0);
+            .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0);
         }
         .fotorama__arr--next:not(:focus) {
-            .translate3d(@fotorama-arw-size * 1.5, 0, 0);
+            .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0);
         }
     }
     &.fotorama__wrap--video {
         .fotorama__fullscreen-icon {
-            .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important;
+            .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important;
         }
         .fotorama__arr--prev {
-            .translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important;
+            .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important;
         }
         .fotorama__arr--next {
-            .translate3d(@fotorama-arw-size * 1.5, 0, 0) !important;
+            .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0) !important;
         }
     }
 }
@@ -773,34 +905,59 @@
     &:after {
         &:extend(.fotorama-gpu);
         background-repeat: no-repeat;
-        background-size: 1px 100%, 5px 100%;
-        bottom: 0;
         content: '';
         display: block;
-        height: auto;
         pointer-events: none;
         position: absolute;
         text-decoration: none;
-        top: 0;
-        width: 10px;
         z-index: 10;
     }
     &:before {
-        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 0 50%, rgba(0, 0, 0, 0.4), transparent);
-        background-position: 0 0, 0 0;
         left: -10px;
-    }
-    &.fotorama__shadows--left:before {
-        left: 0;
+        top: -10px;
     }
     &:after {
-        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.4), transparent);
-        background-position: 100% 0, 100% 0;
         right: -10px;
+        bottom: -10px;
     }
+    &.fotorama__shadows--left:before,
     &.fotorama__shadows--right:after {
+        top: 0;
+        bottom: 0;
+        background-size: 1px 100%, 5px 100%;
+        height: auto;
+        width: 10px;
+    }
+    &.fotorama__shadows--top:before,
+    &.fotorama__shadows--bottom:after {
+        left: 0;
+        right:0;
+        background-size: 100% 1px, 100% 5px ;
+        height:10px;
+        width:auto;
+    }
+    &.fotorama__shadows--left:before {
+        .fotorama-shadow-gradient(0, 50%);
+        background-position: 0 0, 0 0;
+        left: 0;
+    }
+
+    &.fotorama__shadows--right:after {
+        .fotorama-shadow-gradient(100%, 50%);
+        background-position: 100% 0, 100% 0;
         right: 0;
     }
+    &.fotorama__shadows--top:before {
+        .fotorama-shadow-gradient(50%, 0);
+        background-position: 0 0, 0 0;
+        top:0;
+
+    }
+    &.fotorama__shadows--bottom:after {
+        .fotorama-shadow-gradient(50%, 100%);
+        background-position: 0 100%, 0 100%;
+        bottom:0;
+    }
 }
 
 .fotorama--fullscreen .fotorama__stage,
@@ -897,21 +1054,6 @@
     }
 }
 
-.fotorama--fullscreen {
-    .fotorama__stage__frame {
-        .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0px;
-            bottom: 0px;
-            left: 0px;
-            right: 0px;
-        }
-    }
-}
-
 .fotorama__stage__frame {
     text-align: center;
     .fotorama__img {
@@ -930,3 +1072,105 @@
 .magnify-hidden {
     display: none;
 }
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+        }
+    }
+}
+
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+        }
+    }
+}
+
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            position: absolute;
+            max-width: inherit;
+            max-height: inherit;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+        }
+    }
+}
+
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index acfd548bcca..6a9f279d9e5 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -719,8 +719,62 @@
             _init($box, gOptions);
 
         });
+        function zoomIn(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                gallery = $('[data-gallery-role="gallery"]'),
+                imgOriginalSize = getImageSize($image[0].src),
+                setedResult = Math.round($image.width() + 10);
+            e.preventDefault();
+
+            if (setedResult >imgOriginalSize.rw) {
+                setedResult = imgOriginalSize.rw;
+            }
+            $image.css('width', setedResult);
+        }
+
+        function zoomOut(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                gallery = $('[data-gallery-role="gallery"]'),
+                imgOriginalSize = getImageSize($image[0].src),
+                setedResult = Math.round($image.width() - 10);
+            e.preventDefault();
+
+            if (setedResult < imgOriginalSize.rw/2) {
+                setedResult = imgOriginalSize.rw/2;
+            }
+            $image.css('width', setedResult);
+        }
+
+        /**
+         * Return width and height of original image
+         * @param src path for original image
+         * @returns {{rw: number, rh: number}}
+         */
+        function getImageSize(src) {
+            var img = new Image(),
+                imgSize = {
+                    rw: 0,
+                    rh: 0
+                };
+            img.src = src;
+            imgSize.rw = img.width;
+            imgSize.rh = img.height;
+            return imgSize;
+        }
+
+
+        function setEventOnce() {
+            $('.fotorama__zoom-in')
+                .off('click', zoomIn)
+                .on('click', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('click', zoomOut)
+                .on('click', zoomOut);
+        }
+
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
         magnifierFullscreen();
+        setEventOnce();
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index d6f7c9931f3..3544ad6b6c3 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -84,7 +84,8 @@ define([
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
-        $(element).on('fotorama:show', function () {
+        $(element).on('fotorama:show fotorama:fullscreenenter ', function () {
+           console.log('AAAAAA')
             hideMagnifier();
         });
 
-- 
GitLab


From 216ad9007ed909a508753522a59ffd2910915243 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 15 Sep 2015 18:41:22 +0300
Subject: [PATCH 112/420] JS-52: Zoom on Full Screen Mode

---
 .../templates/product/view/gallery.phtml      |   2 +
 .../frontend/Magento/blank/etc/view.xml       |   3 +
 app/design/frontend/Magento/luma/etc/view.xml |   2 +
 lib/web/fotorama/fotorama.js                  |  51 ++++++--
 lib/web/mage/gallery/gallery.js               |  16 +--
 lib/web/mage/gallery/gallery.less             |  68 +---------
 lib/web/magnifier/magnifier.js                | 116 +++++++++++++++---
 lib/web/magnifier/magnify.js                  |   3 +-
 8 files changed, 152 insertions(+), 109 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 3add5dee58c..d93f2dce0d4 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -25,6 +25,7 @@
                     "height": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:height"); ?>",
                     "top": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:top"); ?>",
                     "left": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:left"); ?>"
+                    "inc": "<?php echo $block->getVar("magnifier:fullscreenzoom"); ?>"
                 },
                 "data": <?php /* @escapeNotVerified */ echo $block->getGalleryImagesJson(); ?>,
                 "options": {
@@ -46,6 +47,7 @@
                 "fullscreen": {
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
                     "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
+                    "navdir": "<?php echo $block->getVar("gallery:fullscreen:navdir"); ?>",
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 178841f20db..ed157ac6a0c 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -192,11 +192,14 @@
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
+        <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="magnifier:fullscreenzoom">20</var> <!-- Zoom for fullscreen -->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Left position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 0d69ff8dee8..b99bdec8dcd 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -199,9 +199,11 @@
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">false</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
+        <var name="magnifier:fullscreenzoom">5</var> <!-- Zoom for fullscreen (integer)-->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
         <var name="magnifier:left"></var> <!-- Right position of magnifier -->
         <var name="magnifier:width"></var> <!-- Width of magnifier block -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index d7f64c62bc1..453597325f4 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -2202,11 +2202,13 @@ fotoramaVersion = '4.6.4';
 
                     $stage.css('left', padding);
                     $arrNext.css('right', padding);
+                    $fullscreenIcon.css('right', padding);
                     $wrap.css('width', $wrap.css('width') + padding);
                     $stageShaft.css('max-width', $wrap.width() - padding);
                 } else {
                     $stage.css('left', '');
                     $arrNext.css('right', '');
+                    $fullscreenIcon.css('right', '');
                     $wrap.css('width', $wrap.css('width') + padding);
                     $stageShaft.css('max-width', '');
                 }
@@ -2319,7 +2321,7 @@ fotoramaVersion = '4.6.4';
          * Options on the fly
          * */
         function setOptions() {
-            if (opts.nav === 'dots') {
+            if (!opts.nav || opts.nav === 'dots') {
                 opts.navdir = 'horizontal'
             }
 
@@ -2787,14 +2789,20 @@ fotoramaVersion = '4.6.4';
         }
 
         function thumbsDraw(pos, loadFLAG) {
-            if (opts.navdir === 'vertical') {
-                pos = pos - opts.thumbheight;
-            }
+            var leftLimit,
+                rightLimit,
+                exceedLimit;
+
 
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
-            var leftLimit = -pos,
-                rightLimit = -pos + measures.nw;
+            leftLimit = -pos;
+            rightLimit = -pos + measures.nw;
+
+            if (opts.navdir === 'vertical') {
+                pos = pos - opts.thumbheight;
+                rightLimit = -pos + measures.h;
+            }
 
             $navThumbFrame.each(function () {
                 var $this = $(this),
@@ -2806,12 +2814,13 @@ fotoramaVersion = '4.6.4';
                             w: thisData.w
                         }
                     },
-                    specialMeasures = getSpecialMeasures();
-
-                specialMeasures.w = thisData.w;
+                    specialMeasures = getSpecialMeasures(),
+                    exceedLimit = opts.navdir === 'vertical' ?
+                        thisData.t > rightLimit : thisData.l > rightLimit;
+                    specialMeasures.w = thisData.w;
 
                 if (thisData.l + thisData.w < leftLimit
-                    || thisData.l > rightLimit
+                    || exceedLimit
                     || callFit(thisData.$img, specialMeasures)) return;
 
                 loadFLAG && loadImg([eq], 'navThumb', getSpecialMeasures);
@@ -3334,10 +3343,10 @@ fotoramaVersion = '4.6.4';
                 setFLAG = arguments[2];
 
             extendMeasures(!that.fullScreen ? optionsToLowerCase(options) : {
-                width: '100%',
+                width: $(window).width(),
                 maxwidth: null,
                 minwidth: null,
-                height: '100%',
+                height: $(window).height(),
                 maxheight: null,
                 minheight: null
             }, [measures, setFLAG || that.fullScreen || opts]);
@@ -3348,6 +3357,8 @@ fotoramaVersion = '4.6.4';
                 windowHeight = $WINDOW.height() - (o_nav ? $nav.height() : 0);
 
             if (measureIsValid(width)) {
+                $wrap.css({width: ''});
+                $wrap.css({height: ''});
                 $stage.css({width: ''});
                 $stage.css({height: ''});
                 $stage.css({'line-height': ''});
@@ -3371,6 +3382,22 @@ fotoramaVersion = '4.6.4';
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
                     $stage.css({'width': width, 'height': height, 'line-height': height + 'px'});
 
+                    if (opts.navdir === 'vertical' && !that.fullscreen) {
+                        $nav.width(opts.thumbwidth + opts.thumbmargin * 2);
+                    }
+
+                    if (opts.navdir === 'horizontal' && !that.fullscreen) {
+                        $nav.height(opts.thumbheight + opts.thumbmargin * 2);
+                    }
+
+                    if (opts.navdir === 'vertical' && that.fullScreen) {
+                        $stage.css('height', $(window).height());
+                    }
+
+                    if (opts.navdir === 'horizontal' && that.fullScreen) {
+                        $stage.css('height', $(window).height() - (opts.thumbheight + opts.thumbmargin * 2));
+                    }
+
                     if (o_nav) {
                         switch (opts.navdir) {
                             case 'vertical':
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index b66c45363e4..78c5b4b91a8 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -172,7 +172,6 @@ define([
                          * Is triggered when breakpoint enties.
                          */
                         entry: function () {
-                            triggeredBreakpoints++;
                             $.extend(true, config, _.clone(startConfig));
 
                             settings.api.updateOptions(settings.defaultConfig.options, true);
@@ -189,16 +188,13 @@ define([
                          * Is triggered when breakpoint exits.
                          */
                         exit: function () {
-                            if (triggeredBreakpoints < 1) {
-                                $.extend(true, config, _.clone(startConfig));
-                                settings.api.updateOptions(settings.defaultConfig.options, true);
-
-                                if (settings.isFullscreen) {
-                                    settings.api.updateOptions(settings.fullscreenConfig, true);
-                                }
-                                settings.activeBreakpoint = {};
+                            $.extend(true, config, _.clone(startConfig));
+                            settings.api.updateOptions(settings.defaultConfig.options, true);
+
+                            if (settings.isFullscreen) {
+                                settings.api.updateOptions(settings.fullscreenConfig, true);
                             }
-                            triggeredBreakpoints--;
+                            settings.activeBreakpoint = {};
                         }
                     });
                 });
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 195dd5dec43..05fb94cd6aa 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -1058,6 +1058,7 @@
     text-align: center;
     .fotorama__img {
         height: auto;
+        width: auto;
         max-height: 100%;
         max-width: 100%;
         vertical-align: middle;
@@ -1102,75 +1103,12 @@
             bottom: 0;
             left: 0;
             right: 0;
-        }
-    }
-}
-
 
-.fotorama__nav-wrap--vertical {
-    &.fotorama__nav-wrap {
-        display: inline-block;
-        position: absolute;
-        top: 0;
-        left: 0;
-    }
-
-    .fotorama__nav__shaft {
-        width: 100%;
-        background-color: white;
-        .fotorama__nav__frame--thumb {
-            display: block;
-            padding-bottom: inherit !important;
-        }
-    }
-}
-
-.fotorama--fullscreen {
-    .fotorama__stage__frame {
-        .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0;
-            bottom: 0;
-            left: 0;
-            right: 0;
         }
-    }
-}
 
-
-.fotorama__nav-wrap--vertical {
-    &.fotorama__nav-wrap {
-        display: inline-block;
-        position: absolute;
-        top: 0;
-        left: 0;
-    }
-
-    .fotorama__nav__shaft {
-        width: 100%;
-        background-color: white;
-        .fotorama__nav__frame--thumb {
-            display: block;
-            padding-bottom: inherit !important;
-        }
     }
 }
 
-.fotorama--fullscreen {
-    .fotorama__stage__frame {
-        .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0;
-            bottom: 0;
-            left: 0;
-            right: 0;
-        }
-    }
+body.fotorama__fullscreen {
+    overflow-y: hidden;
 }
-
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 6a9f279d9e5..294d1b4c651 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -187,7 +187,7 @@
             data[idx].lensH = data[idx].lensH > $thumb.height() ? $thumb.height() : data[idx].lensH;
             lens.css({
                 width: data[idx].lensW + 1 + 'px',
-                height: data[idx].lensH + 'px'
+                height: data[idx].lensH + 0.5 + 'px'
             });
         }
 
@@ -301,8 +301,8 @@
                     pos.l = pos.l <= 0 ? 0 : pos.l;
                     //pos.l = pos.l > 0 ? pos.l : pos.l;
                     curLens.css({
-                        left: pos.l + paddingX + 'px',
-                        top: pos.t + paddingY + 'px'
+                        left: pos.l + paddingX +'px',
+                        top: pos.t + paddingY + 1.75 + 'px'
                     });
 
                     if (lensbg) {
@@ -587,7 +587,7 @@
                 touch,
                 isTouchEnabled = 'ontouchstart' in document.documentElement;
 
-            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load fotorama:ready', function () {
 
                 var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                     $imageContainer = $image.parent(),
@@ -600,7 +600,32 @@
                     });
                 });
 
-                $image.on(isTouchEnabled ? 'touchstart' : 'mousedown', function (e) {
+                if (gallery.data('fotorama').fullScreen) {
+
+                    $('.fotorama__stage__frame .fotorama__img').each(function () {
+                        var image = new Image();
+                        image.src = $(this).attr("src");
+
+                        if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                            if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                                $(this).width($(this).parent().width());
+                                $(this).height('auto');
+                            } else {
+                                $(this).height($(this).parent().height());
+                                $(this).width('auto');
+                            }
+
+                            $(this).css({
+                                'top': '',
+                                'left': ''
+                            });
+                        }
+
+                    });
+                }
+
+                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDow', function (e) {
                     if (gallery.data('fotorama').fullScreen) {
                         e.preventDefault();
 
@@ -613,18 +638,23 @@
                             e.clientX = touch.pageX;
                             e.clientY = touch.pageY;
                         }
-                        startX = e.clientX;
-                        startY = e.clientY;
+                        startX = e.clientX || e.originalEvent.clientX;
+                        startY = e.clientY || e.originalEvent.clientY;
                         isDragActive = true;
                     }
                 });
 
-                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove', function (e) {
+
+
+                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
                     if (gallery.data('fotorama').fullScreen && isDragActive) {
 
                         var top,
                             left,
-                            startOffset = $image.offset();
+                            startOffset = $image.offset(),
+                            clientX = e.clientX || e.originalEvent.clientX,
+                            clientY = e.clientY || e.originalEvent.clientY;
+
 
                         e.preventDefault();
 
@@ -633,8 +663,8 @@
                             e.clientX = touch.pageX;
                             e.clientY = touch.pageY;
                         }
-                        top = +imagePosY + (e.clientY - startY);
-                        left = +imagePosX + (e.clientX - startX);
+                        top = +imagePosY + (clientY - startY);
+                        left = +imagePosX + (clientX - startX);
 
                         if ($image.height() > $imageContainer.height()) {
 
@@ -653,7 +683,7 @@
                             if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
                                 left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
                             } else {
-                                left = ($imageContainer.offset().left < left) ? 0 : left;
+                                left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
                             }
                             $image.offset({
                                 'left': left
@@ -662,7 +692,7 @@
                     }
                 });
 
-                $image.on(isTouchEnabled ? 'touchend' : 'mouseup', function (e) {
+                $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
                     if (gallery.data('fotorama').fullScreen) {
                         isDragActive = false;
                         $image.css('cursor', 'pointer');
@@ -678,9 +708,51 @@
             }
         }
 
+        if ($('.fotorama-item').data('fotorama').fullScreen) {
+            $('.fotorama__stage__frame .fotorama__img').each(function () {
+                var image = new Image();
+                image.src = $(this).attr("src");
+
+                if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                    if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                        $(this).width($(this).parent().width());
+                        $(this).height('');
+                    } else {
+                        $(this).height($(this).parent().height());
+                        $(this).width('');
+                    }
+                }
+            });
+        }
+
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
 
+            if ($('.fotorama-item').data('fotorama').fullScreen) {
+                $('.fotorama__stage__frame .fotorama__img').each(function () {
+                    var image = new Image();
+                    image.src = $(this).attr("src");
+
+                    if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                        if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                            $(this).width($(this).parent().width());
+                            $(this).height('');
+                        } else {
+                            $(this).height($(this).parent().height());
+                            $(this).width('');
+                        }
+                    }
+                });
+            }
+
+
+            _init($box, gOptions);
+
+        });
+
+        function checkFullscreenImagePosition() {
             if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
 
                 var $image = $('[data-gallery-role="stage-shaft"] > [data-active="true"] > img'),
@@ -715,10 +787,8 @@
                     $image.css('top', '');
                 }
             }
+        }
 
-            _init($box, gOptions);
-
-        });
         function zoomIn(e) {
             var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                 gallery = $('[data-gallery-role="gallery"]'),
@@ -729,7 +799,8 @@
             if (setedResult >imgOriginalSize.rw) {
                 setedResult = imgOriginalSize.rw;
             }
-            $image.css('width', setedResult);
+            $image.css({'width': setedResult, height: 'auto'});
+            checkFullscreenImagePosition();
         }
 
         function zoomOut(e) {
@@ -737,12 +808,15 @@
                 gallery = $('[data-gallery-role="gallery"]'),
                 imgOriginalSize = getImageSize($image[0].src),
                 setedResult = Math.round($image.width() - 10);
-            e.preventDefault();
+            if(e) {
+                e.preventDefault();
+            }
 
             if (setedResult < imgOriginalSize.rw/2) {
                 setedResult = imgOriginalSize.rw/2;
             }
-            $image.css('width', setedResult);
+            $image.css({'width': setedResult, height: 'auto'});
+            checkFullscreenImagePosition();
         }
 
         /**
@@ -774,7 +848,9 @@
 
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
-        magnifierFullscreen();
         setEventOnce();
+        //checkFullscreenImagePosition();
+        magnifierFullscreen();
+
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 3544ad6b6c3..cd96c0f6328 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -63,7 +63,7 @@ define([
             thumb: '.fotorama__img',
             largeWrapper: '[data-gallery-role="magnifier"]',
             height: config.magnifierOpts.height || function () {
-                return $('[data-active="true"]').width() / config.options.ratio;
+                return $('[data-active="true"]').height();
             },
             width: config.magnifierOpts.width || function () {
                 var productMedia = $(gallerySelector).parent().parent();
@@ -85,7 +85,6 @@ define([
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('fotorama:show fotorama:fullscreenenter ', function () {
-           console.log('AAAAAA')
             hideMagnifier();
         });
 
-- 
GitLab


From 33c0ab3b2664a535a03142e4f93b84db2c668313 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 16 Sep 2015 15:17:27 +0300
Subject: [PATCH 113/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

---
 lib/web/fotorama/fotorama.js   | 13 ++----
 lib/web/magnifier/magnifier.js | 74 ++++++++++++++++------------------
 lib/web/magnifier/magnify.js   |  2 +-
 3 files changed, 40 insertions(+), 49 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 453597325f4..ef45700a3ed 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1035,7 +1035,6 @@ fotoramaVersion = '4.6.4';
                     obj.transform = 'translate3d(0, ' + (pos) + 'px,0)';
                     break;
                 case 'list':
-                    //console.warn("transition not implemented");
                     break;
                 default :
                     obj.transform = 'translate3d(' + (pos) + 'px,0,0)';
@@ -1909,15 +1908,12 @@ fotoramaVersion = '4.6.4';
         }
 
         function onEnd(result) {
-            //////console.time('moveontouch.js onEnd');
             if (tail.noSwipe && result.moved) return;
 
             if (!tracked) {
                 startTracking(result.startEvent, true);
             }
 
-            ////console.log('onEnd');
-
             result.touch || MS_POINTER || $el.removeClass(grabbingClass);
 
             endTime = $.now();
@@ -2294,7 +2290,7 @@ fotoramaVersion = '4.6.4';
             data = that.data = data || clone(opts.data) || getDataFromHtml($fotorama);
             size = that.size = data.length;
 
-            !ready.ok && opts.shuffle && shuffle(data);
+            ready.ok && opts.shuffle && shuffle(data);
 
             checkForVideo();
 
@@ -3412,7 +3408,6 @@ fotoramaVersion = '4.6.4';
                                 $navWrap.removeClass(navShaftVerticalClass);
                                 $navWrap.removeClass(navShaftHorisontalClass);
                                 $navWrap.addClass(navShaftListClass);
-                                //console.warn("List not implemented");
                                 break;
                             default:
                                 $navWrap.removeClass(navShaftVerticalClass);
@@ -3431,6 +3426,7 @@ fotoramaVersion = '4.6.4';
 
                     measuresSetFLAG = setFLAG || true;
 
+                    ready.ok = true;
                     ready();
                 }
             }
@@ -3705,7 +3701,6 @@ fotoramaVersion = '4.6.4';
                 }, 0);
             },
             function () {
-                ////console.log("click");
                 if (!hoverFLAG) return;
                 toggleControlsClass(!(hoverFLAG = false));
             }
@@ -3806,8 +3801,8 @@ fotoramaVersion = '4.6.4';
         });
 
         function ready() {
-            if (!ready.ok) {
-                ready.ok = true;
+            if (ready.ok) {
+                ready.ok = false;
                 triggerEvent('ready');
             }
         }
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 294d1b4c651..355321a00f5 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -116,42 +116,6 @@
             _init($box, options);
         };
 
-        /**
-         * Delete events and created block for magnify
-         *
-         */
-        that.destroy  = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.zoomIn = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.zoomOut = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.show = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.hide = function () {
-            console.warn("API not implemented.");
-        };
-
         function createLens(thumb) {
             if ($(thumb).siblings('.magnify-lens').length) {
                 return false;
@@ -587,8 +551,7 @@
                 touch,
                 isTouchEnabled = 'ontouchstart' in document.documentElement;
 
-            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load fotorama:ready', function () {
-
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
                 var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                     $imageContainer = $image.parent(),
                     gallery = $('[data-gallery-role="gallery"]');
@@ -849,8 +812,41 @@
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
         setEventOnce();
-        //checkFullscreenImagePosition();
         magnifierFullscreen();
 
+        $('.fotorama-item').on('fotorama:load', function () {
+            if (document.querySelector('.fotorama__stage').addEventListener) {
+                if ('onwheel' in document) {
+                    // IE9+, FF17+, Ch31+
+                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheel);
+                } else if ('onmousewheel' in document) {
+
+                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheel);
+                } else {
+                    // Firefox < 17
+                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheel);
+                }
+            } else { // IE8-
+                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheel);
+            }
+
+            function onWheel(e) {
+                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+                    e = e || window.event;
+
+
+                    var delta = e.deltaY || e.detail || e.wheelDelta;
+
+                    if (delta > 0) {
+                        zoomOut(e)
+                    } else {
+                        zoomIn(e)
+                    }
+
+                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
+                }
+            }
+        })
+
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index cd96c0f6328..c78f1705517 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -78,7 +78,7 @@ define([
             }
         });
 
-        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit', function (e, fotorama) {
+        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
-- 
GitLab


From 0801bfb478311fc728cb3381a50fc21571b495ef Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Thu, 17 Sep 2015 14:52:52 +0300
Subject: [PATCH 114/420] JS-185: Zoom buttons don't hide when picture size is
 small enough for full-screen mode

---
 lib/web/magnifier/magnifier.js | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 355321a00f5..2adcc955bac 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -542,6 +542,18 @@
             }
         }
 
+        function toggleZoomButtons($image) {
+            var image = new Image();
+            image.src = $image.attr("src");
+            if ( (image.height > $image.parent().height()) || (image.width > $image.parent().width()) ) {
+                $('.fotorama__zoom-in').show();
+                $('.fotorama__zoom-out').show();
+            } else {
+                $('.fotorama__zoom-in').hide();
+                $('.fotorama__zoom-out').hide();
+            }
+        }
+
         function magnifierFullscreen () {
             var isDragActive = false,
                 startX,
@@ -565,6 +577,8 @@
 
                 if (gallery.data('fotorama').fullScreen) {
 
+                    toggleZoomButtons($image);
+
                     $('.fotorama__stage__frame .fotorama__img').each(function () {
                         var image = new Image();
                         image.src = $(this).attr("src");
@@ -693,6 +707,7 @@
         $(window).resize(function() {
 
             if ($('.fotorama-item').data('fotorama').fullScreen) {
+
                 $('.fotorama__stage__frame .fotorama__img').each(function () {
                     var image = new Image();
                     image.src = $(this).attr("src");
@@ -708,6 +723,8 @@
                         }
                     }
                 });
+
+                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] img'));
             }
 
 
-- 
GitLab


From 6726f33d4adc78e5715e4be5c66ba971e5c5293a Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 21 Sep 2015 12:00:08 +0300
Subject: [PATCH 115/420] JS-52: Zoom on Full Screen Mode

---
 .../view/frontend/templates/product/view/gallery.phtml        | 3 +++
 app/design/frontend/Magento/blank/etc/view.xml                | 4 +++-
 app/design/frontend/Magento/luma/etc/view.xml                 | 2 ++
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index d93f2dce0d4..51b149b0960 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -50,6 +50,9 @@
                     "navdir": "<?php echo $block->getVar("gallery:fullscreen:navdir"); ?>",
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
+                    "thumbwidth": <?php echo $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
+                    "thumbheight": <?php echo $block->getVar("gallery:fullscreen:thumbheight")
+                        ?: $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
                     "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index ed157ac6a0c..aa5f000d9cf 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -195,7 +195,9 @@
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
-        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+        <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in fullscreen(horizontal/vertical)  -->
+        <var name="gallery:fullscreen:thumbwidth">100</var> <!-- Width of thumbnails in fullscreen -->
+        <var name="gallery:fullscreen:thumbheight">100</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index b99bdec8dcd..b466273d739 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -200,6 +200,8 @@
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+        <var name="gallery:fullscreen:thumbwidth">150</var> <!-- Width of thumbnails in fullscreen -->
+        <var name="gallery:fullscreen:thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
-- 
GitLab


From cf556a72051003ff53e0d4c067f0a836df2d3d6c Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 21 Sep 2015 12:11:02 +0300
Subject: [PATCH 116/420] JS-201: Implement preview buttons actions

---
 .../frontend/Magento/blank/etc/view.xml       |   2 +-
 lib/web/fotorama/fotorama.js                  | 108 +++++++++++++++++-
 2 files changed, 104 insertions(+), 6 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index aa5f000d9cf..7d51931afe5 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,7 +186,7 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
 
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index ef45700a3ed..6f6e5b71371 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -89,6 +89,8 @@ fotoramaVersion = '4.6.4';
         verticalImageClass = _fotoramaClass + '_vertical_ratio';
     var JQUERY_VERSION = $ && $.fn.jquery.split('.');
 
+    var borderPos = 0;
+
     if (!JQUERY_VERSION
         || JQUERY_VERSION[0] < 1
         || (JQUERY_VERSION[0] == 1 && JQUERY_VERSION[1] < 8)) {
@@ -962,6 +964,7 @@ fotoramaVersion = '4.6.4';
             thumbheight: THUMB_SIZE,
             thumbmargin: MARGIN,
             thumbborderwidth: MARGIN,
+            areSlides: true,
 
             allowfullscreen: false, // true || 'native'
 
@@ -1598,14 +1601,59 @@ fotoramaVersion = '4.6.4';
         if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) {
             elPos = options.overPos;
         }
-
         var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
 
         if (CSS3) {
-            $el.css($.extend(getDuration(options.time), translate));
+
+            if (!options.thumb || !OPTIONS.areSlides) {
+
+                $el.css($.extend(getDuration(options.time), translate));
+            } else {
+    
+                if ($el.selector !== '.fotorama__nav-wrap .fotorama__nav .fotorama__nav__shaft') {
+                    $el.css($.extend(getDuration(options.time), translate));
+    
+                    if ($el.selector === ".fotorama__thumb-border") {
+                        var slideLength = 4,
+                            borderStep,
+                            slidePosition;
+                        
+                        if (options.navdir === 'vertical') {
+                            borderStep = options.thumb.height + options.thumb.margin;
+                            slideLength = 4;
+                            $('.fotorama__nav--thumbs').css('height', borderStep * slideLength);
+                        } else {
+                            borderStep = options.thumb.width + options.thumb.margin;
+                            slideLength = 4;
+                            $('.fotorama__nav--thumbs').css('width', borderStep * slideLength);
+                        }
+    
+                        if (((borderPos < options.pos) || (options.pos === 0)) && ((borderPos !== 0) || (options.pos <= borderStep))) {
+    
+                            if (Math.abs(Math.round(options.pos / borderStep)) % slideLength === 0) {
+                                slidePosition = - options.pos;
+                                shiftSlide(slidePosition, options, borderStep, slideLength);
+                            }
+                        } else {
+    
+                            if (Math.abs(Math.round(options.pos / borderStep)) % slideLength === slideLength - 1) {
+                                slidePosition = borderStep * (slideLength - 1) - options.pos;
+                                shiftSlide(slidePosition, options, borderStep, slideLength);
+                            } else {
+                                if (borderPos === 0) {
+                                    slidePosition = borderStep * ((options.pos / borderStep + 1) % slideLength - 1) - options.pos;
+                                    shiftSlide(slidePosition, options, borderStep, slideLength);
+                                }
+                            }  
+                        }
+                        borderPos = options.pos;                    
+                    }
+                }
+            }
+
             if (options.time > 10) {
                 afterTransition($el, 'transform', onEndFn, options.time);
             } else {
@@ -1613,9 +1661,17 @@ fotoramaVersion = '4.6.4';
             }
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
+            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);            
+            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
         }
     }
 
+    function shiftSlide(slidePosition, options, borderStep, slideLength) {
+        var translate1 = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
+        options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
+        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
+    }
+
     function fade($el1, $el2, $frames, options, fadeStack, chain) {
         var chainedFLAG = typeof chain !== 'undefined';
         if (!chainedFLAG) {
@@ -2789,7 +2845,6 @@ fotoramaVersion = '4.6.4';
                 rightLimit,
                 exceedLimit;
 
-
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
             leftLimit = -pos;
@@ -2941,7 +2996,15 @@ fotoramaVersion = '4.6.4';
                 pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l),
                 width: navFrameData.w,
                 height: navFrameData.h,
-                direction: opts.navdir
+                direction: opts.navdir,
+                thumb: {
+                    width: opts.thumbwidth,
+                    height: opts.thumbheight,
+                    margin: opts.thumbmargin,
+                    areSlides: opts.areSlides,
+                    measures: measures
+                },
+                measures: measures
             });
         }
 
@@ -2962,6 +3025,13 @@ fotoramaVersion = '4.6.4';
                     direction: opts.navdir,
                     onEnd: function () {
                         thumbsDraw(pos, true);
+                    },
+                    thumb: {
+                        width: opts.thumbwidth,
+                        height: opts.thumbheight,
+                        margin: opts.thumbmargin,
+                        areSlides: opts.areSlides,
+                        measures: measures
                     }
                 });
 
@@ -3114,6 +3184,27 @@ fotoramaVersion = '4.6.4';
 
         }
 
+        that.showSlide = function(index) {
+            if ((index > 0) && (index <= $navShaft.children().length - 1)) {
+                index --;
+                var borderStep = opts.navdir === 'vertical' ? 
+                        opts.thumbheight + opts.thumbmargin :
+                        borderStep = opts.thumbwidth + opts.thumbmargin,
+                    slideLength = 4,
+                    options = {
+                        time: opts.transitionduration,
+                        direction: opts.navdir,
+                        width: activeFrame[navFrameKey].data().w,
+                        width: activeFrame[navFrameKey].data().h,
+                        measures: measures
+                    },
+                    slidePosition;
+                slidePosition = -(index * borderStep * slideLength);
+                shiftSlide(slidePosition, options, borderStep, slideLength);
+                thumbsDraw(false, true);
+            }
+        }
+
         that.startAutoplay = function (interval) {
             if (that.autoplay) return this;
             pausedAutoplayFLAG = stoppedAutoplayFLAG = false;
@@ -3652,7 +3743,14 @@ fotoramaVersion = '4.6.4';
                         pos: result.newPos,
                         overPos: result.overPos,
                         direction: opts.navdir,
-                        onEnd: onEnd
+                        onEnd: onEnd,
+                        thumb: {
+                            width: opts.thumbwidth,
+                            height: opts.thumbheight,
+                            margin: opts.thumbmargin,
+                            areSlides: opts.areSlides,
+                            measures: measures
+                        }
                     });
                     thumbsDraw(result.newPos);
                     o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
-- 
GitLab


From 8a639ff2a6bd6e5e75840b62e3c5322d09696d83 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Mon, 21 Sep 2015 17:13:45 +0300
Subject: [PATCH 117/420] JS-192: Enhanced thumbnails support in
 configuration/theme

---
 .../templates/product/view/gallery.phtml      |  6 ++-
 .../frontend/Magento/blank/etc/view.xml       |  5 ++-
 app/design/frontend/Magento/luma/etc/view.xml |  2 +
 lib/web/fotorama/fotorama.js                  | 41 ++++++++-----------
 4 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 51b149b0960..720b719824a 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -42,7 +42,8 @@
                     "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
                     "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
-                    "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>"
+                    "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>",
+                    "carouselNavigation": <?php echo $block->getVar("gallery:navigation:carousel"); ?>
                 },
                 "fullscreen": {
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
@@ -54,7 +55,8 @@
                     "thumbheight": <?php echo $block->getVar("gallery:fullscreen:thumbheight")
                         ?: $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
-                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
+                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>",
+                    "carouselNavigation": <?php echo $block->getVar("gallery:fullscreen:navigation:carousel"); ?>
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 7d51931afe5..95ef9d6f476 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,20 +186,23 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:navigation:carousel">false</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
         <var name="gallery:fullscreen:caption">null</var> <!-- Display alt text as image title (true/false/null) -->
+        <var name="gallery:fullscreen:navdir">vertical</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:navdir">horizontal</var> <!--Sliding direction of thumbnails in fullscreen(horizontal/vertical)  -->
         <var name="gallery:fullscreen:thumbwidth">100</var> <!-- Width of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:thumbheight">100</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:fullscreen:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="magnifier:fullscreenzoom">20</var> <!-- Zoom for fullscreen -->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index b466273d739..d8d0e04fc8f 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -193,6 +193,7 @@
         <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
@@ -204,6 +205,7 @@
         <var name="gallery:fullscreen:thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
         <var name="gallery:fullscreen:transition:effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:fullscreen:transition:duration">500</var> <!-- Sets transition duration in ms -->
+        <var name="gallery:fullscreen:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="magnifier:fullscreenzoom">5</var> <!-- Zoom for fullscreen (integer)-->
         <var name="magnifier:top"></var> <!-- Top position of magnifier -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 6f6e5b71371..8e9864d67f2 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -964,7 +964,7 @@ fotoramaVersion = '4.6.4';
             thumbheight: THUMB_SIZE,
             thumbmargin: MARGIN,
             thumbborderwidth: MARGIN,
-            areSlides: true,
+            carouselnavigation: true,
 
             allowfullscreen: false, // true || 'native'
 
@@ -1608,28 +1608,18 @@ fotoramaVersion = '4.6.4';
 
         if (CSS3) {
 
-            if (!options.thumb || !OPTIONS.areSlides) {
-
+            if (!options.thumb || !options.thumb.areSlides) {
                 $el.css($.extend(getDuration(options.time), translate));
             } else {
-    
                 if ($el.selector !== '.fotorama__nav-wrap .fotorama__nav .fotorama__nav__shaft') {
                     $el.css($.extend(getDuration(options.time), translate));
     
                     if ($el.selector === ".fotorama__thumb-border") {
                         var slideLength = 4,
-                            borderStep,
+                            borderStep = options.thumb.margin,
                             slidePosition;
                         
-                        if (options.navdir === 'vertical') {
-                            borderStep = options.thumb.height + options.thumb.margin;
-                            slideLength = 4;
-                            $('.fotorama__nav--thumbs').css('height', borderStep * slideLength);
-                        } else {
-                            borderStep = options.thumb.width + options.thumb.margin;
-                            slideLength = 4;
-                            $('.fotorama__nav--thumbs').css('width', borderStep * slideLength);
-                        }
+                        borderStep += options.navdir === 'vertical' ? options.thumb.height : options.thumb.width;
     
                         if (((borderPos < options.pos) || (options.pos === 0)) && ((borderPos !== 0) || (options.pos <= borderStep))) {
     
@@ -1662,14 +1652,18 @@ fotoramaVersion = '4.6.4';
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
             options.measures.nw = -slidePosition + borderStep * (slideLength - 1);            
-            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
+            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
         }
     }
 
     function shiftSlide(slidePosition, options, borderStep, slideLength) {
-        var translate1 = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
-        options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
-        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate1));
+        var translate = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
+        if (options.direction === 'vertical') {
+            options.measures.h = -slidePosition + borderStep * (slideLength - 1);
+        } else {
+            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
+        }
+        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
     }
 
     function fade($el1, $el2, $frames, options, fadeStack, chain) {
@@ -2805,6 +2799,7 @@ fotoramaVersion = '4.6.4';
                     addNavFrameEvents(frame);
                     frameData.$wrap = $frame.children(':first');
 
+
                     $navThumbFrame = $navThumbFrame.add($frame);
                     if (dataFrame.video) {
                         frameData.$wrap.append($videoPlay.clone());
@@ -3001,7 +2996,7 @@ fotoramaVersion = '4.6.4';
                     width: opts.thumbwidth,
                     height: opts.thumbheight,
                     margin: opts.thumbmargin,
-                    areSlides: opts.areSlides,
+                    areSlides: opts.carouselnavigation,
                     measures: measures
                 },
                 measures: measures
@@ -3018,7 +3013,6 @@ fotoramaVersion = '4.6.4';
                     l = (opts.navdir === 'vertical' ? boundTop : boundLeft),
                     pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max),
                     time = options.time * 1.1;
-
                 slide($navShaft, {
                     time: time,
                     pos: pos || 0,
@@ -3030,7 +3024,7 @@ fotoramaVersion = '4.6.4';
                         width: opts.thumbwidth,
                         height: opts.thumbheight,
                         margin: opts.thumbmargin,
-                        areSlides: opts.areSlides,
+                        areSlides: opts.carouselnavigation,
                         measures: measures
                     }
                 });
@@ -3737,8 +3731,7 @@ fotoramaVersion = '4.6.4';
                     var target = result.$target.closest('.' + navFrameClass, $navShaft)[0];
                     target && onNavFrameClick.call(target, result.startEvent);
                 } else if (result.pos !== result.newPos) {
-                    pausedAutoplayFLAG = true;
-                    slide($navShaft, {
+                    pausedAutoplayFLAG = true;                    slide($navShaft, {
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
@@ -3748,7 +3741,7 @@ fotoramaVersion = '4.6.4';
                             width: opts.thumbwidth,
                             height: opts.thumbheight,
                             margin: opts.thumbmargin,
-                            areSlides: opts.areSlides,
+                            areSlides: opts.carouselnavigation,
                             measures: measures
                         }
                     });
-- 
GitLab


From 238aa975fd722dfa6a5034b5eacf57426db06049 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 22 Sep 2015 12:12:49 +0300
Subject: [PATCH 118/420] JS-203: Video container class add

---
 lib/web/fotorama/fotorama.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 8e9864d67f2..a075d11174c 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -79,6 +79,7 @@ fotoramaVersion = '4.6.4';
 
         htmlClass = _fotoramaClass + '__html',
 
+        videoContainerClass = _fotoramaClass + '-video-container',
         videoClass = _fotoramaClass + '__video',
         videoPlayClass = videoClass + '-play',
         videoCloseClass = videoClass + '-close',
@@ -2642,7 +2643,7 @@ fotoramaVersion = '4.6.4';
                         .addClass(imgClass + (fullFLAG ? ' ' + imgFullClass : ''))
                         .prependTo($frame);
 
-                    if ($frame.hasClass(stageFrameClass)) {
+                    if ($frame.hasClass(stageFrameClass) && !$frame.hasClass(videoContainerClass)) {
                         $frame.attr("href", $img.attr("src"));
                     }
 
-- 
GitLab


From 638d070e0cec83bb126c4b5b2a4e817442d4f351 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 22 Sep 2015 20:25:28 +0300
Subject: [PATCH 119/420] JS-187: Implement drag event

---
 .../frontend/Magento/blank/etc/view.xml       |   4 +-
 lib/web/fotorama/fotorama.js                  | 113 ++++++++++++++----
 2 files changed, 89 insertions(+), 28 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 95ef9d6f476..2b682ce37d3 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -186,10 +186,10 @@
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
-        <var name="gallery:navdir">vertical</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
-        <var name="gallery:navigation:carousel">false</var> <!-- Display navigation thumbs as carousel (true/false) -->
+        <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index a075d11174c..bce922827ea 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -43,6 +43,7 @@ fotoramaVersion = '4.6.4';
         navDotsClass = navClass + '--dots',
         navThumbsClass = navClass + '--thumbs',
         navFrameClass = navClass + '__frame',
+        navFrameThumbClass = navFrameClass + '--thumb',
 
         fadeClass = _fotoramaClass + '__fade',
         fadeFrontClass = fadeClass + '-front',
@@ -1616,6 +1617,7 @@ fotoramaVersion = '4.6.4';
                     $el.css($.extend(getDuration(options.time), translate));
     
                     if ($el.selector === ".fotorama__thumb-border") {
+
                         var slideLength = 4,
                             borderStep = options.thumb.margin,
                             slidePosition;
@@ -1652,7 +1654,7 @@ fotoramaVersion = '4.6.4';
             }
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
-            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);            
+            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
             $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
         }
     }
@@ -1888,7 +1890,7 @@ fotoramaVersion = '4.6.4';
             min,
             max,
             snap,
-            dir = options.direction || 'horizontal',
+            dir,
             slowFLAG,
             controlFLAG,
             moved,
@@ -1899,7 +1901,6 @@ fotoramaVersion = '4.6.4';
             startCoo = coo = (dir === 'vertical') ? e._y : e._x;
             startTime = e._now;
 
-
             moveTrack = [
                 [startTime, startCoo]
             ];
@@ -1913,8 +1914,8 @@ fotoramaVersion = '4.6.4';
             min = tail.min;
             max = tail.max;
             snap = tail.snap,
-                dir = tail.direction||'horizontal',
-                $el.navdir = dir;
+            dir = tail.direction || 'horizontal',
+            $el.navdir = dir;
 
             slowFLAG = e.altKey;
             tracked = moved = false;
@@ -1939,10 +1940,12 @@ fotoramaVersion = '4.6.4';
 
                 edge = findShadowEdge(moveElPos, min, max, dir);
 
-                if (moveElPos <= min) {
-                    moveElPos = edgeResistance(moveElPos, min);
-                } else if (moveElPos >= max) {
-                    moveElPos = edgeResistance(moveElPos, max);
+                if (!options.carouselnavigation) {
+                    if (moveElPos <= min) {
+                        moveElPos = edgeResistance(moveElPos, min);
+                    } else if (moveElPos >= max) {
+                        moveElPos = edgeResistance(moveElPos, max);
+                    }
                 }
 
                 if (!tail.noMove) {
@@ -2034,6 +2037,7 @@ fotoramaVersion = '4.6.4';
                 moved: result.moved || longTouchFLAG && snap,
                 pos: moveElPos,
                 newPos: newPos,
+                cooDiff: (startCoo - coo),
                 overPos: overPos,
                 time: time,
                 dir:dir
@@ -2150,6 +2154,7 @@ fotoramaVersion = '4.6.4';
             nextIndex,
             nextAutoplayIndex,
             startIndex,
+            slidesNumb,
 
             o_loop,
             o_nav,
@@ -2522,10 +2527,12 @@ fotoramaVersion = '4.6.4';
         }
 
         function setNavShaftMinMax() {
-
-            var isVerticalDir = (opts.navdir === 'vertical');
-            var param =  isVerticalDir ? $navShaft.height() : $navShaft.width();
-            var mainParam = isVerticalDir ? measures.h : measures.nw;
+            var isVerticalDir = (opts.navdir === 'vertical'),
+                measureToCalculate = opts.thumbmargin + $('.' + navFrameThumbClass).length * (
+                isVerticalDir ? opts.thumbheight : opts.thumbwidth + opts.thumbmargin),
+                param = (opts.carouselnavigation ? measureToCalculate :
+                    isVerticalDir ?  $navShaft.height(): $navShaft.width()),
+                mainParam = isVerticalDir ? measures.h : measures.nw;
             navShaftTouchTail.min = Math.min(0, mainParam - param);
             navShaftTouchTail.max = 0;
             navShaftTouchTail.direction = opts.navdir;
@@ -3184,7 +3191,7 @@ fotoramaVersion = '4.6.4';
                 index --;
                 var borderStep = opts.navdir === 'vertical' ? 
                         opts.thumbheight + opts.thumbmargin :
-                        borderStep = opts.thumbwidth + opts.thumbmargin,
+                        opts.thumbwidth + opts.thumbmargin,
                     slideLength = 4,
                     options = {
                         time: opts.transitionduration,
@@ -3459,6 +3466,8 @@ fotoramaVersion = '4.6.4';
 
                 height = height || (ratio && width / ratio);
 
+                slidesNumb = Math.floor($wrap.width()/opts.thumbwidth);
+
                 if (height) {
                     width = Math.round(width);
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
@@ -3712,6 +3721,57 @@ fotoramaVersion = '4.6.4';
             direction: 'horizontal'
 
         });
+        function slideDrag (pos, newPos,cooDiff) {
+            console.log(pos, newPos);
+            if (opts.carouselnavigation) {
+                var borderStep = opts.navdir === 'vertical' ?
+                    opts.thumbheight + opts.thumbmargin :
+                    opts.thumbwidth + opts.thumbmargin,
+                    slidePosition,
+                    options = {
+                        time: opts.transitionduration,
+                        direction: opts.navdir,
+                        width: activeFrame[navFrameKey].data().w,
+                        height: activeFrame[navFrameKey].data().h,
+                        measures: measures
+                    };
+
+                if (newPos !== 0 && pos < 0) {
+                    if(pos >= newPos) {
+                        console.log('>>')
+                        if (pos < navShaftTouchTail.min) {
+                            slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
+                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                        } else {
+                            slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb) - 1));
+                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                        }
+                    } else {
+                        console.log('<<')
+                        if (pos < navShaftTouchTail.min) {
+                            if(cooDiff < 0) {
+                                slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
+                                shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                            } else {
+                                slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb)- 1));
+                                shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                            }
+
+                        } else {
+                            slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
+                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                        }
+                    }
+                }
+
+                if (newPos === 0) {
+                    console.log('dont move')
+                    slidePosition = borderStep * ((newPos/ borderStep + 1) % slidesNumb - 1) - newPos;
+                    shiftSlide(slidePosition, options, borderStep, slidesNumb);
+                }
+            }
+            slideDrag.slidePosition = slidePosition;
+        }
 
         navShaftTouchTail = moveOnTouch($navShaft, {
             onStart: onTouchStart,
@@ -3722,7 +3782,7 @@ fotoramaVersion = '4.6.4';
             onEnd: function (result) {
 
                 function onEnd() {
-                    slideNavShaft.l = result.newPos;
+                    slideNavShaft.l = opts.carouselnavigation ? slideDrag.slidePosition : result.newPos;
                     releaseAutoplay();
                     changeAutoplay();
                     thumbsDraw(result.newPos, true);
@@ -3732,23 +3792,23 @@ fotoramaVersion = '4.6.4';
                     var target = result.$target.closest('.' + navFrameClass, $navShaft)[0];
                     target && onNavFrameClick.call(target, result.startEvent);
                 } else if (result.pos !== result.newPos) {
-                    pausedAutoplayFLAG = true;                    slide($navShaft, {
+                    console.log('catch');
+                    opts.carouselnavigation && slideDrag(result.pos, result.newPos,result.cooDiff);
+                    pausedAutoplayFLAG = true;
+                    !opts.carouselnavigation && slide($navShaft, {
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
                         direction: opts.navdir,
-                        onEnd: onEnd,
-                        thumb: {
-                            width: opts.thumbwidth,
-                            height: opts.thumbheight,
-                            margin: opts.thumbmargin,
-                            areSlides: opts.carouselnavigation,
-                            measures: measures
-                        }
+                        onEnd: onEnd
                     });
-                    thumbsDraw(result.newPos);
+
+                    thumbsDraw(opts.carouselnavigation ? slideDrag.slidePosition : result.newPos, true);
                     o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
+
                 } else {
+                    console.log('else worked');
+                    opts.carouselnavigation &&slideDrag(result.pos, result.newPos,result.cooDiff);
                     onEnd();
                 }
             },
@@ -3756,7 +3816,8 @@ fotoramaVersion = '4.6.4';
             timeHigh: 2,
             friction: 5,
             $wrap: $nav,
-            direction: opts.navdir
+            direction: opts.navdir,
+            carouselnavigation: opts.carouselnavigation
         });
 
         stageWheelTail = wheel($stage, {
-- 
GitLab


From d1fc948ebc1329e479254d40abf58fcb1509facb Mon Sep 17 00:00:00 2001
From: Uladzislau Harbachou <uladzislau_harbachou@epam.com>
Date: Wed, 23 Sep 2015 13:33:55 +0300
Subject: [PATCH 120/420] JS-188 - Create mock-up for arrows

---
 lib/web/fotorama/fotorama.js      |  6 +--
 lib/web/mage/gallery/gallery.html |  6 +++
 lib/web/mage/gallery/gallery.less | 90 ++++++++++++++++++++++++++++---
 3 files changed, 93 insertions(+), 9 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index bce922827ea..f2b14ce90f4 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1618,7 +1618,7 @@ fotoramaVersion = '4.6.4';
     
                     if ($el.selector === ".fotorama__thumb-border") {
 
-                        var slideLength = 4,
+                        var slideLength = Math.floor($el.closest('.fotorama__wrap').width()/options.thumb.width),
                             borderStep = options.thumb.margin,
                             slidePosition;
                         
@@ -3192,7 +3192,7 @@ fotoramaVersion = '4.6.4';
                 var borderStep = opts.navdir === 'vertical' ? 
                         opts.thumbheight + opts.thumbmargin :
                         opts.thumbwidth + opts.thumbmargin,
-                    slideLength = 4,
+                    slideLength = Math.floor($el.closest('.fotorama__wrap').width()/opts.thumbwidth),
                     options = {
                         time: opts.transitionduration,
                         direction: opts.navdir,
@@ -3205,7 +3205,7 @@ fotoramaVersion = '4.6.4';
                 shiftSlide(slidePosition, options, borderStep, slideLength);
                 thumbsDraw(false, true);
             }
-        }
+        };
 
         that.startAutoplay = function (interval) {
             if (that.autoplay) return this;
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 473d784d22c..14381c41423 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -23,6 +23,12 @@
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
                 <div class="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
+                <div class="fotorama__thumb__arr--left" tabindex="0" role="button">
+                    <div class="fotorama__thumb__arr">Left</div>
+                </div>
+                <div class="fotorama__thumb__arr--right" tabindex="0" role="button">
+                    <div class="fotorama__thumb__arr">Right</div>
+                </div>
                 <div class="fotorama__nav__shaft">
                     <div class="fotorama__thumb-border"></div>
                 </div>
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 05fb94cd6aa..aeb6a2bde2a 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -19,6 +19,13 @@
     transform: translate3d(@x, @y, @z);
 }
 
+.fotorama-rotate (@deg) {
+    -webkit-transform: rotate(@deg);
+    -moz-transform: 	 rotate(@deg);
+    -ms-transform: 		 rotate(@deg);
+    -o-transform: 		 rotate(@deg);
+}
+
 .translateX(@value) {
     -webkit-transform: translateX(@value);
     -ms-transform: translateX(@value);
@@ -37,6 +44,14 @@
     background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at @x @y, rgba(0, 0, 0, 0.4), transparent);
 }
 
+.fotorama-arrow-gradient(@d){
+    background-image: -webkit-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+    background-image: -moz-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+    background-image: -ms-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+    background-image: -o-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+    background-image: linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+}
+
 .fotorama-inline-block(@va: middle) {
     *display: inline;
     *zoom: 1;
@@ -1062,7 +1077,6 @@
         max-height: 100%;
         max-width: 100%;
         vertical-align: middle;
-        width: auto;
     }
 }
 
@@ -1095,18 +1109,82 @@
 .fotorama--fullscreen {
     .fotorama__stage__frame {
         .fotorama__img {
-            position: absolute;
-            max-width: inherit;
-            max-height: inherit;
-            margin: auto;
-            top: 0;
             bottom: 0;
             left: 0;
+            margin: auto;
+            max-height: inherit;
+            max-width: inherit;
+            position: absolute;
             right: 0;
+            top: 0;
+        }
+    }
+}
 
+.fotorama__nav-wrap--horisontal {
+    .fotorama__thumb__arr--left,
+    .fotorama__thumb__arr--right {
+        bottom: 0;
+        position: absolute;
+        top: 0;
+        width: 30px;
+        z-index: @z-index-10;
+        .fotorama__thumb__arr {
+            width: 100%;
+            .fotorama-abs-center();
+        }
+    }
+    .fotorama__thumb__arr--left {
+        .fotorama-arrow-gradient(left);
+        left: 0;
+        .fotorama__thumb__arr {
+            background-position: -30px -30px;
+        }
+    }
+    .fotorama__thumb__arr--right {
+        .fotorama-arrow-gradient(right);
+        right: 0;
+        .fotorama__thumb__arr {
+            background-position: -60px -30px;
         }
+    }
+}
 
+.fotorama__nav-wrap--vertical {
+    .fotorama__thumb__arr--left,
+    .fotorama__thumb__arr--right {
+        height: 30px;
+        left: 0;
+        position: absolute;
+        right: 0;
+        z-index: @z-index-10;
+        .fotorama__thumb__arr {
+            .fotorama-rotate(90deg);
+            margin: auto;
+            width: 30px;
+        }
+    }
+    .fotorama__thumb__arr--left {
+        .fotorama-arrow-gradient(top);
+        top: 0;
+        .fotorama__thumb__arr {
+            background-position: -30px -30px;
+        }
     }
+    .fotorama__thumb__arr--right {
+        .fotorama-arrow-gradient(bottom);
+        bottom: 0;
+        .fotorama__thumb__arr {
+            background-position: -60px -30px;
+        }
+    }
+}
+
+.fotorama__thumb__arr {
+    &:extend(.fotorama-sprite);
+    background-size: 300%;
+    font-size: 0.001px;
+    padding-bottom: 30px;
 }
 
 body.fotorama__fullscreen {
-- 
GitLab


From 3790b5b14f3160be288f4463a0d787e1ae0cfab5 Mon Sep 17 00:00:00 2001
From: Uladzislau Harbachou <uladzislau_harbachou@epam.com>
Date: Wed, 23 Sep 2015 14:11:16 +0300
Subject: [PATCH 121/420] JS-188 - Create mock-up for arrows(fix for variable)

---
 lib/web/mage/gallery/gallery.less | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index aeb6a2bde2a..d337576bc38 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -7,6 +7,7 @@
 @fotorama-arw-size: 95px;
 @fotorama_close_size: 30px;
 @size-fotorama-block: 50px;
+@fotorama-thumb-arrow: 30px;
 
 @import '../../css/source/lib/_lib.less'; // Global lib
 @import '../../css/source/_theme.less'; // Theme overrides
@@ -1127,7 +1128,7 @@
         bottom: 0;
         position: absolute;
         top: 0;
-        width: 30px;
+        width: @fotorama-thumb-arrow;
         z-index: @z-index-10;
         .fotorama__thumb__arr {
             width: 100%;
@@ -1138,14 +1139,14 @@
         .fotorama-arrow-gradient(left);
         left: 0;
         .fotorama__thumb__arr {
-            background-position: -30px -30px;
+            background-position: (-@fotorama-thumb-arrow) (-@fotorama-thumb-arrow);
         }
     }
     .fotorama__thumb__arr--right {
         .fotorama-arrow-gradient(right);
         right: 0;
         .fotorama__thumb__arr {
-            background-position: -60px -30px;
+            background-position: (-@fotorama-thumb-arrow*2) (-@fotorama-thumb-arrow);
         }
     }
 }
@@ -1153,7 +1154,7 @@
 .fotorama__nav-wrap--vertical {
     .fotorama__thumb__arr--left,
     .fotorama__thumb__arr--right {
-        height: 30px;
+        height: @fotorama-thumb-arrow;
         left: 0;
         position: absolute;
         right: 0;
@@ -1161,21 +1162,21 @@
         .fotorama__thumb__arr {
             .fotorama-rotate(90deg);
             margin: auto;
-            width: 30px;
+            width: @fotorama-thumb-arrow;
         }
     }
     .fotorama__thumb__arr--left {
         .fotorama-arrow-gradient(top);
         top: 0;
         .fotorama__thumb__arr {
-            background-position: -30px -30px;
+            background-position: (-@fotorama-thumb-arrow) (-@fotorama-thumb-arrow);
         }
     }
     .fotorama__thumb__arr--right {
         .fotorama-arrow-gradient(bottom);
         bottom: 0;
         .fotorama__thumb__arr {
-            background-position: -60px -30px;
+            background-position: (-@fotorama-thumb-arrow*2) (-@fotorama-thumb-arrow);
         }
     }
 }
@@ -1184,7 +1185,7 @@
     &:extend(.fotorama-sprite);
     background-size: 300%;
     font-size: 0.001px;
-    padding-bottom: 30px;
+    padding-bottom: @fotorama-thumb-arrow;
 }
 
 body.fotorama__fullscreen {
-- 
GitLab


From 42015c9473820df8a063f6796e4e66e44db98ac9 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 23 Sep 2015 15:50:14 +0300
Subject: [PATCH 122/420] MAGETWO-42995: Stabilize functional tests

---
 app/code/Magento/Review/Block/Adminhtml/Edit.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/app/code/Magento/Review/Block/Adminhtml/Edit.php b/app/code/Magento/Review/Block/Adminhtml/Edit.php
index 6f2e129b0b6..1bb6c7a8e47 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Edit.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Edit.php
@@ -179,6 +179,7 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container
         }
 
         $this->_formInitScripts[] = '
+            require(["prototype"], function() {
             var review = {
                 updateRating: function() {
                         elements = [
@@ -205,6 +206,7 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container
            Event.observe(window, \'load\', function(){
                  Event.observe($("select_stores"), \'change\', review.updateRating);
            });
+           });
         ';
     }
 
-- 
GitLab


From 53f7c51962667ff841914afad64cf5a3367a1286 Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 23 Sep 2015 16:16:56 +0300
Subject: [PATCH 123/420] JS-200: Test existing accessibility features

---
 lib/web/fotorama/fotorama.js | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index f2b14ce90f4..54c2c2d0260 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -91,7 +91,8 @@ fotoramaVersion = '4.6.4';
         verticalImageClass = _fotoramaClass + '_vertical_ratio';
     var JQUERY_VERSION = $ && $.fn.jquery.split('.');
 
-    var borderPos = 0;
+    var borderPos = 0,
+        curSlide = 1;
 
     if (!JQUERY_VERSION
         || JQUERY_VERSION[0] < 1
@@ -1616,9 +1617,9 @@ fotoramaVersion = '4.6.4';
                 if ($el.selector !== '.fotorama__nav-wrap .fotorama__nav .fotorama__nav__shaft') {
                     $el.css($.extend(getDuration(options.time), translate));
     
-                    if ($el.selector === ".fotorama__thumb-border") {
+                    if ($el.selector === "." + thumbBorderClass) {
 
-                        var slideLength = Math.floor($el.closest('.fotorama__wrap').width()/options.thumb.width),
+                        var slideLength = Math.floor($el.closest('.' + wrapClass).width() / options.thumb.width),
                             borderStep = options.thumb.margin,
                             slidePosition;
                         
@@ -1642,7 +1643,8 @@ fotoramaVersion = '4.6.4';
                                 }
                             }  
                         }
-                        borderPos = options.pos;                    
+                        borderPos = options.pos;
+                        curSlide = Math.floor(borderPos / borderStep / slideLength) + 1;
                     }
                 }
             }
@@ -1655,7 +1657,7 @@ fotoramaVersion = '4.6.4';
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
             options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
-            $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
+            $('.' + navShaftClass).css($.extend(getDuration(options.time), translate));
         }
     }
 
@@ -1666,7 +1668,7 @@ fotoramaVersion = '4.6.4';
         } else {
             options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
         }
-        $('.fotorama__nav__shaft').css($.extend(getDuration(options.time), translate));
+        $('.' + navShaftClass).css($.extend(getDuration(options.time), translate));
     }
 
     function fade($el1, $el2, $frames, options, fadeStack, chain) {
@@ -2498,6 +2500,7 @@ fotoramaVersion = '4.6.4';
 
             lastOptions = $.extend({}, opts);
             setStagePosition();
+            that.showSlide(curSlide);
         }
 
         function normalizeIndex(index) {
@@ -2748,7 +2751,11 @@ fotoramaVersion = '4.6.4';
                 setTimeout(function () {
                     lockScroll($nav);
                 }, 0);
-                slideNavShaft({time: o_transitionDuration, guessIndex: $(this).data().eq, minMax: navShaftTouchTail});
+                if (!opts.carouselnavigation) {
+                    slideNavShaft({time: o_transitionDuration, guessIndex: $(this).data().eq, minMax: navShaftTouchTail});
+                } else {
+                    that.showSlide(Math.floor($(this).data().eq / slidesNumb) + 1)
+                }
             });
         }
 
@@ -3187,12 +3194,12 @@ fotoramaVersion = '4.6.4';
         }
 
         that.showSlide = function(index) {
-            if ((index > 0) && (index <= $navShaft.children().length - 1)) {
+            if (index > 0 && activeFrame) {
                 index --;
                 var borderStep = opts.navdir === 'vertical' ? 
                         opts.thumbheight + opts.thumbmargin :
                         opts.thumbwidth + opts.thumbmargin,
-                    slideLength = Math.floor($el.closest('.fotorama__wrap').width()/opts.thumbwidth),
+                    slideLength = Math.floor($('.' + wrapClass).width()/opts.thumbwidth),
                     options = {
                         time: opts.transitionduration,
                         direction: opts.navdir,
@@ -3337,6 +3344,10 @@ fotoramaVersion = '4.6.4';
             showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
             lastActiveIndex = activeIndex;
 
+            if (opts.carouselnavigation) {
+                that.showSlide(curSlide);
+            }
+
             return this;
         };
 
@@ -3782,7 +3793,7 @@ fotoramaVersion = '4.6.4';
             onEnd: function (result) {
 
                 function onEnd() {
-                    slideNavShaft.l = opts.carouselnavigation ? slideDrag.slidePosition : result.newPos;
+                    slideNavShaft.l = opts.carouselnavigation ? slideDrag.slidePosition:  result.newPos;
                     releaseAutoplay();
                     changeAutoplay();
                     thumbsDraw(result.newPos, true);
-- 
GitLab


From ad880f4b2fd875e0e21b6a2f1d704fe33afa24d3 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Wed, 23 Sep 2015 17:43:57 +0300
Subject: [PATCH 124/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../templates/catalog/category/edit.phtml          | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
index fcf5ba45d80..7974f2731cf 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
@@ -20,9 +20,10 @@
 require([
     "jquery",
     "tinymce",
+    'Magento_Ui/js/modal/confirm',
     "loadingPopup",
     "mage/backend/floating-header"
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, confirm){
 
 //<![CDATA[
     function categoryReset(url,useAjax){
@@ -40,9 +41,14 @@ require([
     * with this form, we surely delete same category in the tree and at backend
     */
     function categoryDelete(url) {
-        if (confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>')){
-            location.href = url;
-        }
+        confirm({
+            content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>',
+            actions: {
+                confirm: function(){
+                    location.href = url;
+                }
+            }
+        });
     }
 
     /**
-- 
GitLab


From e4cfadb259f806c843eb9a0145794de8b5a6311f Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Thu, 24 Sep 2015 11:18:22 +0300
Subject: [PATCH 125/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../view/frontend/web/js/cc-edit-form.js      | 11 +++++--
 .../Braintree/view/frontend/web/js/cc-form.js |  7 +++--
 .../web/catalog/base-image-uploader.js        |  7 +++--
 .../adminhtml/web/catalog/category/form.js    |  7 +++--
 .../frontend/web/js/opc-checkout-method.js    | 11 +++++--
 .../view/frontend/web/js/opc-payment-info.js  | 11 +++++--
 .../frontend/web/js/opc-shipping-method.js    | 12 +++++--
 .../view/frontend/web/js/opcheckout.js        | 31 ++++++++++++++-----
 .../Checkout/view/frontend/web/js/payment.js  | 11 +++++--
 .../Checkout/view/frontend/web/js/sidebar.js  |  7 +++--
 .../adminhtml/web/js/variations/steps/bulk.js |  7 +++--
 .../adminhtml/web/js/variations/variations.js |  9 ++++--
 .../web/js/view/authentication-popup.js       |  7 +++--
 .../view/adminhtml/web/js/integration.js      |  4 ++-
 .../Payment/view/adminhtml/web/transparent.js | 11 +++++--
 .../Payment/view/frontend/web/transparent.js  | 11 +++++--
 .../view/adminhtml/web/js/rules/conflict.js   | 14 +++++----
 .../Paypal/view/frontend/web/order-review.js  | 15 ++++++---
 .../Magento/Rule/view/adminhtml/web/rules.js  |  1 +
 .../Wishlist/view/frontend/web/wishlist.js    |  8 +++--
 lib/web/mage/adminhtml/browser.js             |  7 +++--
 lib/web/mage/adminhtml/events.js              | 11 +++++--
 lib/web/mage/adminhtml/grid.js                | 12 +++++--
 lib/web/mage/adminhtml/wysiwyg/widget.js      | 15 ++++++---
 lib/web/mage/backend/editablemultiselect.js   | 15 ++++++---
 lib/web/mage/backend/validation.js            |  9 ++++--
 26 files changed, 195 insertions(+), 76 deletions(-)

diff --git a/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js b/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js
index 075a6418ab8..3d8e561448c 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js
@@ -7,8 +7,9 @@ define([
     "jquery",
     "braintree",
     'mage/translate',
+    'Magento_Ui/js/modal/alert',
     "jquery/ui"
-], function ($, braintree, $t) {
+], function ($, braintree, $t, alert) {
     'use strict';
 
     $.widget('mage.braintreeEditForm', {
@@ -199,13 +200,17 @@ define([
                                 }
                             },
                             error: function (response) {
-                                alert($t('There was error during saving card data'));
+                                alert({
+                                    content: $t('There was error during saving card data')
+                                });
                             }
                         });
                     } else {
                         //handle error
                         $('body').trigger('processStop');
-                        alert($t('There was error during saving card data'));
+                        alert({
+                            content: $t('There was error during saving card data')
+                        });
                     }
                 });
             }
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js
index 303ead9b654..a922038eae6 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js
@@ -7,8 +7,9 @@ define([
     "jquery",
     "braintree",
     'mage/translate',
+    'Magento_Ui/js/modal/alert',
     "jquery/ui"
-], function($, braintree, $t) {
+], function($, braintree, $t, alert) {
     "use strict";
 
     $.widget('mage.braintreeForm', {
@@ -92,7 +93,9 @@ define([
                                 var form = $(self.options.formSelector)[0];
                                 form.submit();
                             } else {
-                                alert($t("An error occured with payment processing."));
+                                alert({
+                                    content: $t("An error occured with payment processing.")
+                                });
                             }
                         }
                     );
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
index 5ccfea334c7..9ffd98db5ef 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
@@ -6,10 +6,11 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'jquery/file-uploader',
     'mage/translate'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.baseImage', {
@@ -124,7 +125,9 @@ define([
                     if (!data.result.error) {
                         $galleryContainer.trigger('addItem', data.result);
                     } else {
-                        alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                        alert({
+                            content: $.mage.__('We don\'t recognize or support this file extension type.')
+                        });
                     }
                 },
                 add: function (event, data) {
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js
index 0d5be338a5a..eaa65160561 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js
@@ -6,10 +6,11 @@
 /*global Ajax:true alert:true*/
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "mage/backend/form",
     "jquery/ui",
     "prototype"
-], function($){
+], function($, alert){
     "use strict";
 
     $.widget("mage.categoryForm", $.mage.form, {
@@ -55,7 +56,9 @@ define([
             if (transport.responseText.isJSON()) {
                 var response = transport.responseText.evalJSON();
                 if (response.error) {
-                    alert(response.message);
+                    alert({
+                        content: response.message
+                    });
                 } else {
                     if (this.element.find(this.options.categoryIdSelector).prop('value') == response.id) {
                         this.element.find(this.options.categoryPathSelector)
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
index 059595059e5..b281e8b2507 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
@@ -13,10 +13,11 @@
 define([
     "jquery",
     "accordion",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/validation/validation",
     "mage/translate"
-], function($, accordion){
+], function($, accordion, alert){
     'use strict';
 
     // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion
@@ -183,7 +184,9 @@ define([
             if (json.isGuestCheckoutAllowed) {
                 
                 if( !guestChecked && !registerChecked ){
-                    alert( $.mage.__('Please create an account or check out as a guest.') );
+                    alert({
+                        content: $.mage.__('Please create an account or check out as a guest.')
+                    });
                     
                     return false;
                 }
@@ -245,7 +248,9 @@ define([
 
                                 $(this.options.countrySelector).trigger('change');
 
-                                alert(msg);
+                                alert({
+                                    content: msg
+                                });
                             }
 
                             return;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
index 6a5b67d0d13..8b43ffa8625 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
@@ -13,10 +13,11 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/translate',
     'Magento_Checkout/js/opc-shipping-method'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     // Extension for mage.opcheckout - fifth section(Payment Information) in one page checkout accordion
@@ -121,7 +122,9 @@ define([
             var methods = this.element.find('[name^="payment["]');
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.'));
+                alert({
+                    content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')
+                });
 
                 return false;
             }
@@ -132,7 +135,9 @@ define([
                 return true;
             }
 
-            alert($.mage.__('Please choose a payment method.'));
+            alert({
+                content:$.mage.__('Please choose a payment method.')
+            });
 
             return false;
         },
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
index ba64095ce8b..385bc3fd273 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
@@ -12,11 +12,12 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "Magento_Checkout/js/opc-shipping-info",
     "mage/validation",
     "mage/translate"
-], function($){
+], function($, alert){
     'use strict';    
 
     // Extension for mage.opcheckout - fourth section(Shipping Method) in one page checkout accordion
@@ -63,13 +64,18 @@ define([
         _validateShippingMethod: function() {
             var methods = this.element.find('[name="shipping_method"]');
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t ship to this address. Please enter another address or edit this one.'));
+                alert({
+                    content: $.mage.__('We can\'t ship to this address. Please enter another address or edit this one.')
+                });
                 return false;
             }
             if (methods.filter(':checked').length) {
                 return true;
             }
-            alert($.mage.__('Please specify a shipping method.'));
+            alert({
+                content:$.mage.__('Please specify a shipping method.')
+            });
+
             return false;
         }
     });
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js b/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js
index dfa427d7c4d..77014714577 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js
@@ -11,10 +11,11 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/validation',
     'mage/translate'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion
@@ -156,7 +157,9 @@ define([
 
                     this.element.find(this.options.checkout.registerCustomerPasswordSelector).show();
                 } else {
-                    alert($.mage.__('Please create an account or check out as a guest.'));
+                    alert({
+                        content: $.mage.__('Please create an account or check out as a guest.')
+                    });
 
                     return false;
                 }
@@ -202,9 +205,13 @@ define([
 
                                 $(this.options.countrySelector).trigger('change');
 
-                                alert(msg);
+                                alert({
+                                    content: msg
+                                });
                             } else {
-                                alert(response.error);
+                                alert({
+                                    content: response.error
+                                });
                             }
 
                             return;
@@ -427,7 +434,9 @@ define([
             var methods = this.element.find('[name="shipping_method"]');
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t ship to this address. Please choose another address or edit the current one.'));
+                alert({
+                    content: $.mage.__('We can\'t ship to this address. Please choose another address or edit the current one.')
+                });
 
                 return false;
             }
@@ -436,7 +445,9 @@ define([
                 return true;
             }
 
-            alert($.mage.__('Please specify a shipping method.'));
+            alert({
+                content: $.mage.__('Please specify a shipping method.')
+            });
 
             return false;
         }
@@ -551,7 +562,9 @@ define([
             var methods = this.element.find('[name^="payment["]');
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.'));
+                alert({
+                    content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')
+                });
 
                 return false;
             }
@@ -562,7 +575,9 @@ define([
                 return true;
             }
 
-            alert($.mage.__('Please choose a payment method.'));
+            alert({
+                content: $.mage.__('Please choose a payment method.')
+            });
 
             return false;
         },
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/payment.js
index 258531548bc..b0237173822 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/payment.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/payment.js
@@ -11,9 +11,10 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/translate'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.payment', {
@@ -79,13 +80,17 @@ define([
                 isValid = false;
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.'));
+                alert({
+                    content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')
+                });
             } else if (this.options.checkoutPrice < this.options.minBalance) {
                 isValid = true;
             } else if (methods.filter('input:radio:checked').length) {
                 isValid = true;
             } else {
-                alert($.mage.__('Please choose a payment method.'));
+                alert({
+                    content: $.mage.__('Please choose a payment method.')
+                });
             }
 
             return isValid;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index dbffd0358d1..8509164c987 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -8,9 +8,10 @@ define([
     "jquery",
     'Magento_Customer/js/model/authentication-popup',
     'Magento_Customer/js/customer-data',
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/decorate"
-], function($, authenticationPopup, customerData){
+], function($, authenticationPopup, customerData, alert){
 
     $.widget('mage.sidebar', {
         options: {
@@ -169,7 +170,9 @@ define([
                     } else {
                         var msg = response.error_message;
                         if (msg) {
-                            window.alert($.mage.__(msg));
+                            alert({
+                                content: $.mage.__(msg)
+                            });
                         }
                     }
                 })
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
index bf58fc27d47..dc43dfd39fb 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
@@ -11,9 +11,10 @@ define([
     'underscore',
     'Magento_Ui/js/lib/collapsible',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/file-uploader',
     'mage/translate'
-], function (Component, $, ko, _, Collapsible, mageTemplate) {
+], function (Component, $, ko, _, Collapsible, mageTemplate, alert) {
     'use strict';
 
     return Component.extend({
@@ -346,7 +347,9 @@ define([
                                 $('#' + data.fileId)
                                     .delay(2000)
                                     .hide('highlight');
-                                alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                                alert({
+                                    content: $.mage.__('We don\'t recognize or support this file extension type.')
+                                });
                             }
                             $('#' + data.fileId).remove();
                         },
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
index dea945abb29..a683fa8c8d6 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
@@ -6,8 +6,9 @@ define([
     'uiComponent',
     'jquery',
     'ko',
-    'underscore'
-], function (Component, $, ko, _) {
+    'underscore',
+    'Magento_Ui/js/modal/alert'
+], function (Component, $, ko, _, alert) {
     'use strict';
 
     return Component.extend({
@@ -242,7 +243,9 @@ define([
                                     parentElement.find('[name$="[image]"]').val(data.result.file);
                                     parentElement.find('[data-toggle=dropdown]').dropdown().show();
                                 } else {
-                                    alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                                    alert({
+                                        content: $.mage.__('We don\'t recognize or support this file extension type.')
+                                    });
                                 }
                             },
                             start: function (event) {
diff --git a/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js b/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js
index dfef07a4b87..369314bc183 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js
@@ -14,9 +14,10 @@ define(
         'Magento_Customer/js/model/authentication-popup',
         'mage/translate',
         'mage/url',
+        'Magento_Ui/js/modal/alert',
         'mage/validation'
     ],
-    function($, ko, Component, loginAction, customerData, authenticationPopup, $t, url) {
+    function($, ko, Component, loginAction, customerData, authenticationPopup, $t, url, alert) {
         'use strict';
         return Component.extend({
             registerUrl: window.authenticationPopup.customerRegisterUrl,
@@ -53,7 +54,9 @@ define(
                 if (this.modalWindow) {
                     $(this.modalWindow).modal('openModal');
                 } else {
-                    alert($t('Guest checkout is disabled.'));
+                    alert({
+                        content: $t('Guest checkout is disabled.')
+                    });
                 }
             },
 
diff --git a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
index c95ef6c671e..93504661db6 100644
--- a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
+++ b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
@@ -252,7 +252,9 @@ define([
                     popup.modal('openModal');
                 },
                 error: function (jqXHR, status, error) {
-                    alert($.mage.__('Sorry, something went wrong. Please try again later.'));
+                    alert({
+                        content: $.mage.__('Sorry, something went wrong. Please try again later.')
+                    });
                     window.console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText);
                 },
                 complete: function () {
diff --git a/app/code/Magento/Payment/view/adminhtml/web/transparent.js b/app/code/Magento/Payment/view/adminhtml/web/transparent.js
index 7edbb30c631..e97038d2245 100644
--- a/app/code/Magento/Payment/view/adminhtml/web/transparent.js
+++ b/app/code/Magento/Payment/view/adminhtml/web/transparent.js
@@ -6,8 +6,9 @@
 define([
     "jquery",
     "mage/template",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui"
-], function($, mageTemplate){
+], function($, mageTemplate, alert){
     "use strict";
 
     $.widget('mage.transparent', {
@@ -157,10 +158,14 @@ define([
         _processErrors: function (response) {
             var msg = response.error_messages;
             if (typeof (msg) === 'object') {
-                alert(msg.join("\n"));
+                alert({
+                    content:msg.join("\n")
+                });
             }
             if (msg) {
-                alert(msg);
+                alert({
+                    content: msg
+                });
             }
         }
     });
diff --git a/app/code/Magento/Payment/view/frontend/web/transparent.js b/app/code/Magento/Payment/view/frontend/web/transparent.js
index 2060ca7c8ea..66b3203d7bc 100644
--- a/app/code/Magento/Payment/view/frontend/web/transparent.js
+++ b/app/code/Magento/Payment/view/frontend/web/transparent.js
@@ -6,9 +6,10 @@
 define([
     "jquery",
     "mage/template",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "Magento_Payment/js/model/credit-card-validation/validator"
-], function($, mageTemplate){
+], function($, mageTemplate, alert){
     'use strict';
 
     $.widget('mage.transparent', {
@@ -101,10 +102,14 @@ define([
                     } else {
                         msg = response.error_messages;
                         if (typeof (msg) === 'object') {
-                            alert(msg.join("\n"));
+                            alert({
+                                content: msg.join("\n")
+                            });
                         }
                         if (msg) {
-                            alert(msg);
+                            alert({
+                                content: msg
+                            });
                         }
                     }
                 }
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
index 98c79243d48..4d94f6a2a9f 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
@@ -4,7 +4,9 @@
  */
 (function() {
     var executed = false;
-    define([], function () {
+    define([
+        'Magento_Ui/js/modal/alert'
+    ], function (alert) {
         "use strict";
         return function ($target, $owner, data) {
             if ($owner.find(data.enableButton).val() == 1) {
@@ -22,11 +24,11 @@
 
                 if (!isDisabled && !executed) {
                     executed = true;
-                    alert(
-                        "The following error(s) occured:\n\r"
-                        + "Some PayPal solutions conflict.\n\r"
-                        + "Please re-enable the previously enabled payment solutions."
-                    );
+                    alert({
+                        content: "The following error(s) occured:\n\r"
+                                +"Some PayPal solutions conflict.\n\r"
+                                +"Please re-enable the previously enabled payment solutions."
+                    });
                 }
             }
         };
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 56514f9164c..b1a072d8e98 100644
--- a/app/code/Magento/Paypal/view/frontend/web/order-review.js
+++ b/app/code/Magento/Paypal/view/frontend/web/order-review.js
@@ -6,11 +6,12 @@
 /*global alert*/
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/translate",
     "mage/mage",
     "mage/validation"
-], function($){
+], function($, alert){
     "use strict";
 
     $.widget('mage.orderReview', {
@@ -129,7 +130,9 @@ define([
                                     msg = msg.join("\n");
                                 }
                             }
-                            alert($.mage.__(msg));
+                            alert({
+                                content: $.mage.__(msg)
+                            });
                             return false;
                         }
                         if (response.redirect) {
@@ -141,11 +144,15 @@ define([
                             return false;
                         }
                         this._ajaxComplete();
-                        alert($.mage.__('Sorry, something went wrong.'));
+                        alert({
+                            content: $.mage.__('Sorry, something went wrong.')
+                        });
                     }
                 },
                 error: function () {
-                    alert($.mage.__('Sorry, something went wrong. Please try again later.'));
+                    alert({
+                        content: $.mage.__('Sorry, something went wrong. Please try again later.')
+                    });
                     this._ajaxComplete();
                 }
             });
diff --git a/app/code/Magento/Rule/view/adminhtml/web/rules.js b/app/code/Magento/Rule/view/adminhtml/web/rules.js
index 262d155a53c..50b3fdd85ea 100644
--- a/app/code/Magento/Rule/view/adminhtml/web/rules.js
+++ b/app/code/Magento/Rule/view/adminhtml/web/rules.js
@@ -4,6 +4,7 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype"
 ], function(jQuery){
diff --git a/app/code/Magento/Wishlist/view/frontend/web/wishlist.js b/app/code/Magento/Wishlist/view/frontend/web/wishlist.js
index bb697c1fa52..a831603f9d1 100644
--- a/app/code/Magento/Wishlist/view/frontend/web/wishlist.js
+++ b/app/code/Magento/Wishlist/view/frontend/web/wishlist.js
@@ -7,10 +7,12 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/validation/validation',
+
     'mage/dataPost'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.wishlist', {
@@ -152,7 +154,9 @@ define([
                     if ($(form).find('input:checkbox:checked').length) {
                         form.submit();
                     } else {
-                        alert(this.options.checkBoxValidationMessage);
+                        alert({
+                            content: this.options.checkBoxValidationMessage
+                        });
                     }
                 }, this)
             });
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index 05fa6f7fedd..51629ce2e7c 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -8,11 +8,12 @@ define([
     "tinymce",
     "Magento_Ui/js/modal/prompt",
     "Magento_Ui/js/modal/confirm",
+    "Magento_Ui/js/modal/alert",
     "Magento_Ui/js/modal/modal",
     "jquery/ui",
     "jquery/jstree/jquery.jstree",
     "mage/mage"
-], function($, tinyMCEm, prompt, confirm){
+], function($, tinyMCEm, prompt, confirm, alert){
     
     MediabrowserUtility = {
         windowId: 'modal_dialog_message',
@@ -266,7 +267,9 @@ define([
                             showLoader: true
                         }).done($.proxy(function(data) {
                             if (data.error) {
-                                window.alert(data.message);
+                                alert({
+                                    content: data.message
+                                });
                             } else {
                                 self.tree.jstree('refresh',  self.element.find('[data-id="' + self.activeNode.id + '"]'));
                             }
diff --git a/lib/web/mage/adminhtml/events.js b/lib/web/mage/adminhtml/events.js
index c342714812d..d64f09f2e97 100644
--- a/lib/web/mage/adminhtml/events.js
+++ b/lib/web/mage/adminhtml/events.js
@@ -3,8 +3,9 @@
  * See COPYING.txt for license details.
  */
 define([
+    'Magento_Ui/js/modal/alert',
     'prototype'
-], function(){
+], function(alert){
 
     // from http://www.someelement.com/2007/03/eventpublisher-custom-events-la-pubsub.html
     varienEvents = Class.create();
@@ -105,10 +106,14 @@ define([
                     }
                     catch (e) {
                         if (this.id){
-                            alert("error: error in " + this.id + ".fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message);
+                            alert({
+                                content: "error: error in " + this.id + ".fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message
+                            });
                         }
                         else {
-                            alert("error: error in [unknown object].fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message);
+                            alert({
+                                content: "error: error in [unknown object].fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message
+                            });
                         }
                     }
                 }
diff --git a/lib/web/mage/adminhtml/grid.js b/lib/web/mage/adminhtml/grid.js
index 684f8358df0..727c7f3a1cb 100644
--- a/lib/web/mage/adminhtml/grid.js
+++ b/lib/web/mage/adminhtml/grid.js
@@ -7,11 +7,12 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'mage/mage',
     'prototype',
     'mage/adminhtml/form',
     'mage/adminhtml/events'
-], function (jQuery, mageTemplate) {
+], function (jQuery, mageTemplate, alert) {
 
 window.varienGrid = new Class.create();
 
@@ -158,7 +159,9 @@ varienGrid.prototype = {
             if (transport.responseText.isJSON()) {
                 var response = transport.responseText.evalJSON()
                 if (response.error) {
-                    alert(response.message);
+                    alert({
+                        content: response.message
+                    });
                 }
                 if (response.ajaxExpired && response.ajaxRedirect) {
                     setLocation(response.ajaxRedirect);
@@ -642,7 +645,10 @@ varienGridMassaction.prototype = {
     },
     apply: function() {
         if(varienStringArray.count(this.checkedString) == 0) {
-                alert(this.errorText);
+                alert({
+                    content: this.errorText
+                });
+
                 return;
             }
 
diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index a037065f29e..cd1febf3b30 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -6,6 +6,7 @@
 define([
     "jquery",
     "tinymce",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/translate",
     "mage/mage",
@@ -13,7 +14,7 @@ define([
     "mage/adminhtml/events",
     "prototype",
     'Magento_Ui/js/modal/modal'
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, alert){
 
     var widgetTools = {
         getDivHtml: function(id, html) {
@@ -194,7 +195,9 @@ define([
                                 this.switchOptionsContainer(optionsContainerId);
                             }
                         } catch(e) {
-                            alert(e.message);
+                            alert({
+                                content: e.message
+                            });
                         }
                     }.bind(this)
                 }
@@ -254,7 +257,9 @@ define([
 
                                 this.updateContent(transport.responseText);
                             } catch(e) {
-                                alert(e.message);
+                                alert({
+                                    content: e.message
+                                });
                             }
                         }.bind(this)
                     });
@@ -355,7 +360,9 @@ define([
                             this.dialogContent = widgetTools.getDivHtml(responseContainerId, transport.responseText);
                             this.openDialogWindow(this.dialogContent);
                         } catch(e) {
-                            alert(e.message);
+                            alert({
+                                content: e.message
+                            });
                         }
                     }.bind(this)
                 }
diff --git a/lib/web/mage/backend/editablemultiselect.js b/lib/web/mage/backend/editablemultiselect.js
index 6ae8d935dde..075770b6f9d 100644
--- a/lib/web/mage/backend/editablemultiselect.js
+++ b/lib/web/mage/backend/editablemultiselect.js
@@ -4,9 +4,10 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/editableMultiselect/js/jquery.editable",
     "jquery/editableMultiselect/js/jquery.multiselect"
-], function($){
+], function($, alert){
 
 
     /**
@@ -162,7 +163,9 @@ define([
                             $(this).html(result[entityValueName].escapeHTML());
                         }
                     } else {
-                        alert(result.error_message);
+                        alert({
+                            content: result.error_message
+                        });
                     }
                 }
             });
@@ -223,7 +226,9 @@ define([
                             options.mselectInputClass + '';
                         sectionBlock.find(inputSelector).trigger('blur');
                     } else {
-                        alert(result.error_message);
+                        alert({
+                            content: result.error_message
+                        });
                     }
                 }
             };
@@ -258,7 +263,9 @@ define([
                         deleteButton.parent().remove();
                         select.find('option').eq(index).remove();
                     } else {
-                        alert(result.error_message);
+                        alert({
+                            content: result.error_message
+                        });
                     }
                 }
             };
diff --git a/lib/web/mage/backend/validation.js b/lib/web/mage/backend/validation.js
index ec400a5c124..ef684d773df 100644
--- a/lib/web/mage/backend/validation.js
+++ b/lib/web/mage/backend/validation.js
@@ -9,6 +9,7 @@
         define([
             "jquery",
             "underscore",
+            'Magento_Ui/js/modal/alert',
             "jquery/ui",
             "jquery/validate",
             "mage/translate",
@@ -17,7 +18,7 @@
     } else {
         factory(jQuery);
     }
-}(function ($, _) {
+}(function ($, _, alert) {
     "use strict";
     
     $.extend(true, $.validator.prototype, {
@@ -221,8 +222,10 @@
                     newFileContainer = elmParent.find('.new-file');
                     if (!alertAlreadyDisplayed && (newFileContainer.empty() || newFileContainer.is(':visible'))) {
                         alertAlreadyDisplayed = true;
-                        alert($.mage.__('There are files that were selected but not uploaded yet. ' +
-                            'Please upload or remove them first'));
+                        alert({
+                            content: $.mage.__('There are files that were selected but not uploaded yet. ' +
+                            'Please upload or remove them first')
+                        });
                     }
                     return false;
                 }
-- 
GitLab


From c4a2c0d9cff2cc91d729b6bb7f4721868f88e3d0 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 24 Sep 2015 18:20:32 +0300
Subject: [PATCH 126/420] MAGETWO-43132: Gallery missed placeholder image

---
 app/code/Magento/Catalog/Block/Product/View/Gallery.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index dc8d204e76c..f85d23928c1 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -120,9 +120,9 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
         }
         if(empty($imagesItems)) {
             $imagesItems[] = [
-                'thumb' => $this->_assetRepo->getUrl('Magento_Catalog::images/product/placeholder/small_image.jpg'),
-                'img' => $this->_assetRepo->getUrl('Magento_Catalog::images/product/placeholder/image.jpg'),
-                'original' => $this->_assetRepo->getUrl('Magento_Catalog::images/product/placeholder/image.jpg'),
+                'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
+                'img' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
+                'original' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
                 'caption' => '',
                 'position' => '0',
                 'isMain' => true,
-- 
GitLab


From 46407049f4c8b8e4ab93c8fb77688243ec7ad381 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Thu, 24 Sep 2015 19:05:07 +0300
Subject: [PATCH 127/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../adminhtml/templates/store/switcher.phtml  | 23 ++++++++++++++-----
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
index f43b8f6bf69..c4a130de2c0 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
@@ -130,7 +130,10 @@
 </div>
 
 <script>
-require(['jquery'], function(jQuery){
+require([
+    'jquery',
+    'Magento_Ui/js/modal/confirm'
+], function(jQuery, confirm){
 
     (function($) {
         var $storesList = $('[data-role=stores-list]');
@@ -171,11 +174,19 @@ require(['jquery'], function(jQuery){
         } else {
 
             <?php if ($block->getUseConfirm()): ?>
-            if (confirm("<?php /* @escapeNotVerified */ echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>")) {
-                reload();
-            } else {
-                obj.value = '<?php /* @escapeNotVerified */ echo $block->getStoreId() ?>';
-            }
+
+            confirm({
+                content:  "<?php /* @escapeNotVerified */ echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>",
+                actions: {
+                    confirm: function() {
+                        reload();
+                    },
+                    cancel: function() {
+                        obj.value = '<?php /* @escapeNotVerified */ echo $block->getStoreId() ?>';
+                    }
+                }
+            });
+
             <?php else: ?>
                 reload();
             <?php endif; ?>
-- 
GitLab


From 01582242a432f04d5421fce66f64a54c8e3ee7b6 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 24 Sep 2015 19:54:55 +0300
Subject: [PATCH 128/420] MAGETWO-43132: Gallery missed placeholder image

---
 app/code/Magento/Catalog/Block/Product/View/Gallery.php | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index f85d23928c1..4b5fad3db27 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -16,11 +16,6 @@ use Magento\Framework\Json\EncoderInterface;
 
 class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
 {
-    /**
-     * @var \Magento\Framework\View\Asset\Repository
-     */
-    protected $_assetRepo;
-
     /**
      * @var \Magento\Framework\Config\View
      */
@@ -34,13 +29,11 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
         \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
-        \Magento\Framework\View\Asset\Repository $assetRepo,
         EncoderInterface $jsonEncoder,
         array $data = []
     )
     {
         $this->jsonEncoder = $jsonEncoder;
-        $this->_assetRepo = $assetRepo;
         parent::__construct($context, $arrayUtils, $data);
     }
 
@@ -120,7 +113,7 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
         }
         if(empty($imagesItems)) {
             $imagesItems[] = [
-                'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
+                'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('thumbnail'),
                 'img' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
                 'original' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
                 'caption' => '',
-- 
GitLab


From 03cef3144e860752bd7410ed60bb64641795134e Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Fri, 25 Sep 2015 11:28:01 +0300
Subject: [PATCH 129/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 app/code/Magento/AdminNotification/Block/System/Messages.php    | 2 +-
 .../AdminNotification/view/adminhtml/web/system/notification.js | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/AdminNotification/Block/System/Messages.php b/app/code/Magento/AdminNotification/Block/System/Messages.php
index 4ba73969e8d..870f40955a0 100644
--- a/app/code/Magento/AdminNotification/Block/System/Messages.php
+++ b/app/code/Magento/AdminNotification/Block/System/Messages.php
@@ -121,7 +121,7 @@ class Messages extends \Magento\Backend\Block\Template
             [
                 'systemMessageDialog' => [
                     'buttons' => [],
-                    'modalClass' => 'ui-dialog-active ui-popup-message',
+                    'modalClass' => 'ui-dialog-active ui-popup-message modal-system-messages',
                     'ajaxUrl' => $this->_getMessagesUrl()
                 ],
             ]
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
index 5cab64ddd03..cf24ed62857 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
@@ -12,6 +12,7 @@ define([
 
     $.widget('mage.systemMessageDialog', $.mage.modal, {
         options: {
+            modalClass: 'modal-system-messages',
             systemMessageTemplate:
                 '<% _.each(data.items, function(item) { %>' +
                     '<li class="message message-warning <% if (item.severity == 1) { %>error<% } else { %>warning<% } %>">' +
-- 
GitLab


From 734a608709b2fc0037e242f47973a8a855e8f711 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Fri, 25 Sep 2015 12:20:06 +0300
Subject: [PATCH 130/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Fixed Popup Window styles
---
 .../templates/system/messages/popup.phtml     |  2 +-
 .../templates/catalog/category/tree.phtml     | 17 +++---
 .../css/source/components/_modals_extend.less | 59 +++++++++++++++++--
 lib/web/css/source/components/_modals.less    | 34 +----------
 4 files changed, 66 insertions(+), 46 deletions(-)

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 6bf89e17d48..93b389bed2f 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
@@ -10,7 +10,7 @@
 <?php /** @var $block \Magento\AdminNotification\Block\System\Messages\UnreadMessagePopup */ ?>
 
 <div id="system_messages_list" data-role="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
-    <ul class="message-system-list">
+    <ul class="message-system-list messages">
         <?php foreach ($block->getUnreadMessages() as $message): ?>
             <li class="message message-warning <?php /* @escapeNotVerified */ echo $block->getItemClass($message);?>">
                 <?php /* @escapeNotVerified */ echo $message->getText();?>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 791e4dbd96b..d45e04db2b4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -446,8 +446,15 @@
                 jQuery('[data-id="information-dialog-category"]').modal({
                     type: 'popup',
                     buttons: [{
+                        text: 'Cancel',
+                        class: 'action-tertiary',
+                        click: function () {
+                            reRenderTree();
+                            this.closeModal();
+                        }
+                    }, {
                         text: 'Ok',
-                        class: '',
+                        class: 'action-secondary',
                         click: function () {
                             (function ($) {
                                 $.ajax({
@@ -473,14 +480,6 @@
                             })(jQuery);
                             this.closeModal();
                         }
-
-                    }, {
-                        text: 'Cancel',
-                        class: '',
-                        click: function () {
-                            reRenderTree();
-                            this.closeModal();
-                        }
                     }]
 
                 }).trigger('openModal');
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 12c122edb51..1b591ce69bd 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -21,7 +21,9 @@
 @modal-action-close__font-size: 2rem;
 @modal-action-close__active__font-size: 1.8rem;
 @modal-action-close__hover__color: darken(@color-brownie-vanilla, 10%);
-
+@modal-popup-footer-button__margin: 2rem;
+@modal-popup-footer-button__padding: 1.4rem;
+@modal-popup-footer-button__font-size: 1.5rem;
 //
 
 .modal-popup,
@@ -31,6 +33,7 @@
         position: absolute;
         right: 0;
         top: 0;
+        z-index: 1;
         &:active {
             transform: none;
             &:before {
@@ -49,15 +52,63 @@
 }
 
 .modal-popup {
+    &.confirm {
+        .modal-inner-wrap {
+            left: 50%;
+            margin-left: -(@modal-popup-confirm__width / 2);
+            width: @modal-popup-confirm__width;
+        }
+    }
+    &.modal-system-messages {
+        .modal-inner-wrap {
+            background: @color-lazy-sun;
+        }
+    }
+    &._image-box {
+        .modal-inner-wrap {
+            margin: 5rem auto;
+            max-width: @modal-popup-image-box__max-width;
+            position: static;
+        }
+        .thumbnail-preview {
+            padding-bottom: @indent__l;
+            text-align: center;
+            .thumbnail-preview-image-block {
+                border: 1px solid @modal-popup-image-box__border-color;
+                margin: 0 auto @indent__base;
+                max-width: @modal-popup-image-box-preview__max-width;
+                padding: @indent__base;
+            }
+            .thumbnail-preview-image {
+                max-height: @modal-popup-image-box-preview-image__max-height;
+            }
+        }
+    }
     .modal-title {
         font-size: @modal-popup-title__font-size;
         margin-right: @modal-popup-title__font-size + @modal-popup__padding + 1rem;
     }
-    .action-close {
+    .modal-title + .action-close {
         padding: @modal-popup__padding;
+        &:active{
+            padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
+            padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
+        }
+    }
+    .action-close {
+        padding: @modal-popup__padding / 2.5;
         &:active {
-            padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-            padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+            padding-top: @modal-popup__padding / 3 + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+            padding-right: @modal-popup__padding / 3 + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+        }
+    }
+    .modal-footer {
+        text-align: right;
+        button {
+            font-size: @modal-popup-footer-button__font-size;
+            margin-left: @modal-popup-footer-button__margin;
+            padding-top: @modal-popup-footer-button__padding;
+            padding-bottom: @modal-popup-footer-button__padding;
         }
     }
 }
diff --git a/lib/web/css/source/components/_modals.less b/lib/web/css/source/components/_modals.less
index 005b0ff36c9..9cac4026e97 100644
--- a/lib/web/css/source/components/_modals.less
+++ b/lib/web/css/source/components/_modals.less
@@ -201,47 +201,17 @@ body {
         .lib-vendor-prefix-flex-shrink(0);
     }
     .modal-header {
-        padding-bottom: @modal-popup__padding;
+        padding-bottom: @modal-popup__padding / 2.5;
         padding-top: @modal-popup__padding;
     }
     .modal-footer {
         margin-top: auto;
         padding-bottom: @modal-popup__padding;
-        padding-top: @modal-popup__padding;
+        //padding-top: @modal-popup__padding;
     }
     .modal-footer-actions {
         text-align: right;
     }
-    &.confirm {
-        .modal-inner-wrap {
-            left: 50%;
-            margin-left: -(@modal-popup-confirm__width/2);
-            width: @modal-popup-confirm__width;
-        }
-        .modal-footer {
-            text-align: right;
-        }
-    }
-    &._image-box {
-        .modal-inner-wrap {
-            margin: 5rem auto;
-            max-width: @modal-popup-image-box__max-width;
-            position: static;
-        }
-        .thumbnail-preview {
-            padding-bottom: @indent__l;
-            text-align: center;
-            .thumbnail-preview-image-block {
-                border: 1px solid @modal-popup-image-box__border-color;
-                margin: 0 auto @indent__base;
-                max-width: @modal-popup-image-box-preview__max-width;
-                padding: @indent__base;
-            }
-            .thumbnail-preview-image {
-                max-height: @modal-popup-image-box-preview-image__max-height;
-            }
-        }
-    }
 }
 
 //
-- 
GitLab


From 80b4d3a737f76fbd40688619c567a3e31aaf7a68 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 25 Sep 2015 15:00:32 +0300
Subject: [PATCH 131/420] MAGETWO-43132: Gallery missed placeholder image

- Fix placeholder applying
---
 app/code/Magento/Catalog/Helper/Image.php | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Catalog/Helper/Image.php b/app/code/Magento/Catalog/Helper/Image.php
index 00ab3f63449..fb3d4d750fe 100644
--- a/app/code/Magento/Catalog/Helper/Image.php
+++ b/app/code/Magento/Catalog/Helper/Image.php
@@ -430,11 +430,13 @@ class Image extends AbstractHelper
      */
     public function getPlaceholder($placeholder = null)
     {
-        if (!$this->_placeholder) {
-            $placeholder = $placeholder?: $this->_getModel()->getDestinationSubdir();
-            $this->_placeholder = 'Magento_Catalog::images/product/placeholder/' . $placeholder . '.jpg';
+        if ($placeholder) {
+            $placeholderFullPath = 'Magento_Catalog::images/product/placeholder/' . $placeholder . '.jpg';
+        } else {
+            $placeholderFullPath = $this->_placeholder
+                ?: 'Magento_Catalog::images/product/placeholder/' . $this->_getModel()->getDestinationSubdir() . '.jpg';
         }
-        return $this->_placeholder;
+        return $placeholderFullPath;
     }
 
     /**
-- 
GitLab


From ed654a4d450a573cff03eb291563cca08053b41b Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Fri, 25 Sep 2015 17:25:02 +0300
Subject: [PATCH 132/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 app/code/Magento/Ui/view/base/web/js/modal/prompt.js | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 3a5463172e1..6f463d0704b 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -16,6 +16,8 @@ define([
         options: {
             modalClass: 'prompt',
             promptField: '[data-role="promptField"]',
+            dataValue: '[data-value="modal-value"]',
+            value: '',
             actions: {
                 always: function(){},
                 confirm: function(){},
@@ -37,13 +39,17 @@ define([
         },
         _create: function() {
             this._super();
-            this.modal.find(this.options.modalContent).append('<input value="" data-role="promptField" type="text"/>');
+            this.modal.find(this.options.modalContent).append('<input data-role="promptField" data-value="modal-value" type="text"/>');
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
         _remove: function() {
             this.modal.remove();
         },
+        openModal: function(){
+            this._super();
+            this.modal.find(this.options.dataValue).val(this.options.value);
+        },
         closeModal: function(result) {
             var value;
 
-- 
GitLab


From b2964c9db2f44e366ce4c90ea7d9bf34d9707eed Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Fri, 25 Sep 2015 17:56:17 +0300
Subject: [PATCH 133/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../Catalog/view/adminhtml/templates/catalog/category/tree.phtml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index d45e04db2b4..3a4b2c769c4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -445,6 +445,7 @@
 
                 jQuery('[data-id="information-dialog-category"]').modal({
                     type: 'popup',
+                    modalClass: 'modal-system-messages',
                     buttons: [{
                         text: 'Cancel',
                         class: 'action-tertiary',
-- 
GitLab


From 24e3be7d8324d3451f6c86cb1551306a0d8c7e16 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 25 Sep 2015 18:22:39 +0300
Subject: [PATCH 134/420] MAGETWO-42995: Stabilize functional tests

---
 .../Ui/view/base/web/js/modal/alert.js        |  4 +--
 .../Ui/view/base/web/js/modal/confirm.js      |  4 +--
 .../Ui/view/base/web/js/modal/prompt.js       | 31 +++++++++----------
 3 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
index 33be3c8041d..63592e94040 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
@@ -20,7 +20,7 @@ define([
             },
             buttons: [{
                 text: $.mage.__('OK'),
-                class: 'action-secondary',
+                class: 'action-secondary action-accept',
                 click: function () {
                     this.closeModal(true);
                 }
@@ -28,7 +28,7 @@ define([
         },
         closeModal: function () {
             this.options.actions.always();
-            this.element.bind('confirmclosed', _.bind(this._remove, this));
+            this.element.bind('alertclosed', _.bind(this._remove, this));
 
             return this._super();
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
index 7bad2023b64..6e2e6fe5251 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -22,13 +22,13 @@ define([
             },
             buttons: [{
                 text: $.mage.__('Cancel'),
-                class: 'action-tertiary',
+                class: 'action-tertiary action-dismiss',
                 click: function(){
                     this.closeModal();
                 }
             }, {
                 text: $.mage.__('OK'),
-                class: 'action-secondary',
+                class: 'action-secondary action-accept',
                 click: function() {
                     this.closeModal(true);
                 }
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 6f463d0704b..cdea449e794 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -16,51 +16,50 @@ define([
         options: {
             modalClass: 'prompt',
             promptField: '[data-role="promptField"]',
-            dataValue: '[data-value="modal-value"]',
             value: '',
             actions: {
-                always: function(){},
-                confirm: function(){},
-                cancel: function(){}
+                always: function () {},
+                confirm: function () {},
+                cancel: function () {}
             },
             buttons: [{
                 text: $.mage.__('Cancel'),
-                class: 'action-tertiary',
-                click: function(){
+                class: 'action-tertiary action-dismiss',
+                click: function () {
                     this.closeModal();
                 }
             }, {
                 text: $.mage.__('OK'),
-                class: 'action-secondary',
-                click: function() {
+                class: 'action-secondary action-accept',
+                click: function () {
                     this.closeModal(true);
                 }
             }]
         },
-        _create: function() {
+        _create: function () {
             this._super();
-            this.modal.find(this.options.modalContent).append('<input data-role="promptField" data-value="modal-value" type="text"/>');
+            this.modal.find(this.options.modalContent).append('<input data-role="promptField" type="text"/>');
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
-        _remove: function() {
+        _remove: function () {
             this.modal.remove();
         },
-        openModal: function(){
+        openModal: function () {
             this._super();
-            this.modal.find(this.options.dataValue).val(this.options.value);
+            this.modal.find(this.options.promptField).val(this.options.value);
         },
-        closeModal: function(result) {
+        closeModal: function (result) {
             var value;
 
             if (result) {
-                value =  this.modal.find(this.options.promptField).val();
+                value = this.modal.find(this.options.promptField).val();
                 this.options.actions.confirm(value);
             } else {
                 this.options.actions.cancel();
             }
             this.options.actions.always();
-            this.element.bind('confirmclosed', _.bind(this._remove, this));
+            this.element.bind('promptclosed', _.bind(this._remove, this));
 
             return this._super();
         }
-- 
GitLab


From ffa80362500420fa755b40c7f45c7533139ca5ae Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 28 Sep 2015 08:32:26 +0300
Subject: [PATCH 135/420] MAGETWO-42995: Stabilize functional tests

---
 .../catalog/product/attribute/set/main.phtml  | 56 ++++++-----
 .../Ui/view/base/web/js/modal/prompt.js       |  1 +
 .../app/Magento/Backend/Test/Block/Cache.php  |  1 -
 .../Backend/Test/Block/FormPageActions.php    |  1 -
 .../Test/Block/System/Config/PageActions.php  |  1 -
 .../Backend/Test/Block/Widget/Grid.php        |  5 +-
 .../Constraint/AssertStoreCanBeLocalized.php  |  1 +
 .../Test/Page/Adminhtml/AdminCache.xml        |  1 +
 .../Test/Page/Adminhtml/SystemConfig.xml      | 11 ++-
 .../Adminhtml/Product/Attribute/Set/Main.php  |  7 +-
 .../Page/Adminhtml/CatalogCategoryEdit.xml    | 11 ++-
 .../Adminhtml/CatalogProductAttributeNew.xml  | 11 ++-
 .../Page/Adminhtml/CatalogProductSetEdit.xml  | 11 ++-
 .../Category/DeleteCategoryEntityTest.php     |  1 +
 ...AssignedToTemplateProductAttributeTest.php |  1 +
 .../DeleteAttributeSetTest.php                |  1 +
 .../DeleteProductAttributeEntityTest.php      |  1 +
 ...UsedInConfigurableProductAttributeTest.php |  1 +
 .../Test/TestStep/DeleteAttributeStep.php     |  1 +
 .../Test/Page/Adminhtml/CatalogRuleNew.xml    |  9 +-
 .../DeleteCatalogPriceRuleEntityTest.php      |  1 +
 .../TestStep/DeleteAllCatalogRulesStep.php    |  1 +
 .../Test/Page/Adminhtml/CatalogSearchEdit.xml |  9 +-
 .../TestCase/DeleteSearchTermEntityTest.php   |  1 +
 .../Page/Adminhtml/CheckoutAgreementNew.xml   |  1 +
 .../TestStep/DeleteAllTermsEntityStep.php     |  1 +
 .../Test/TestStep/DeleteTermEntityStep.php    |  1 +
 .../Cms/Test/Page/Adminhtml/CmsBlockNew.xml   |  1 +
 .../Cms/Test/Page/Adminhtml/CmsPageNew.xml    |  1 +
 .../TestCase/DeleteCmsBlockEntityTest.php     |  1 +
 .../Test/TestCase/DeleteCmsPageEntityTest.php |  1 +
 .../DeleteCmsPageUrlRewriteEntityTest.php     |  1 +
 .../Test/Page/Adminhtml/CustomerGroupNew.xml  | 11 ++-
 .../Test/Page/Adminhtml/CustomerIndexEdit.xml | 15 +--
 .../DeleteCustomerBackendEntityTest.php       |  1 +
 .../DeleteCustomerGroupEntityTest.php         |  1 +
 .../AssertSetApprovedProductReview.php        |  1 +
 .../Review/Test/Page/Adminhtml/RatingEdit.xml |  1 +
 .../CreateProductRatingEntityTest.php         |  1 +
 .../CreateProductReviewBackendEntityTest.php  |  1 +
 .../CreateProductReviewFrontendEntityTest.php |  1 +
 .../DeleteProductRatingEntityTest.php         |  1 +
 ...anageProductReviewFromCustomerPageTest.php |  1 +
 .../MassActionsProductReviewEntityTest.php    |  1 +
 ...teProductReviewEntityOnProductPageTest.php |  1 +
 .../UpdateProductReviewEntityTest.php         |  1 +
 .../Test/Page/Adminhtml/PromoQuoteEdit.xml    |  1 +
 .../TestCase/CreateSalesRuleEntityTest.php    |  1 +
 .../TestCase/DeleteSalesRuleEntityTest.php    |  1 +
 .../TestCase/UpdateSalesRuleEntityTest.php    |  1 +
 .../Test/TestStep/DeleteAllSalesRuleStep.php  |  1 +
 .../Test/Page/Adminhtml/SitemapEdit.xml       |  7 +-
 .../Test/TestCase/DeleteSitemapEntityTest.php |  1 +
 .../Tax/Test/Page/Adminhtml/TaxRateNew.xml    | 11 ++-
 .../Tax/Test/Page/Adminhtml/TaxRuleNew.xml    | 11 ++-
 .../Test/TestCase/DeleteTaxRateEntityTest.php |  1 +
 .../Test/TestCase/DeleteTaxRuleEntityTest.php |  1 +
 .../Test/TestStep/DeleteAllTaxRulesStep.php   |  1 +
 .../Ui/Test/Block/Adminhtml/DataGrid.php      |  5 +-
 .../Magento/Ui/Test/Block/Adminhtml/Modal.php | 95 +++++++++++++++++++
 .../Test/Page/Adminhtml/UrlRewriteEdit.xml    | 19 ++--
 .../DeleteCategoryUrlRewriteEntityTest.php    |  1 +
 .../DeleteCustomUrlRewriteEntityTest.php      |  1 +
 .../DeleteProductUrlRewriteEntityTest.php     |  1 +
 .../User/Test/Page/Adminhtml/UserEdit.xml     | 13 +--
 .../Test/Page/Adminhtml/UserRoleEditRole.xml  | 11 ++-
 .../TestCase/DeleteAdminUserEntityTest.php    |  1 +
 .../TestCase/DeleteUserRoleEntityTest.php     |  1 +
 .../Test/Page/Adminhtml/SystemVariableNew.xml |  9 +-
 .../DeleteCustomVariableEntityTest.php        |  1 +
 .../Page/Adminhtml/WidgetInstanceEdit.xml     |  1 +
 .../Test/TestCase/DeleteWidgetEntityTest.php  |  1 +
 .../Test/TestStep/DeleteAllWidgetsStep.php    |  1 +
 lib/web/mage/adminhtml/grid.js                | 63 ++++++------
 74 files changed, 316 insertions(+), 137 deletions(-)
 create mode 100644 dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index 4ccbec13fdb..31c9a24e15f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -42,7 +42,7 @@ require([
         <script id="ie-deferred-loader" defer="defer" src=""></script>
         <![endif]-->
             <script>
-define("tree-panel", ["jquery", "extjs/ext-tree-checkbox", "prototype"], function(jQuery){
+define("tree-panel", ["jquery", 'Magento_Ui/js/modal/prompt', "extjs/ext-tree-checkbox", "prototype"], function(jQuery, prompt){
 
             //<![CDATA[
             var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
@@ -238,31 +238,37 @@ define("tree-panel", ["jquery", "extjs/ext-tree-checkbox", "prototype"], functio
                     },
 
                     addGroup : function() {
-                        var group_name = prompt("<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>","");
-                        if (!group_name) {
-                            return;
-                        }
-                        group_name = group_name.strip();
-                        if( group_name == '' ) {
-                            this.addGroup();
-                        } else if( group_name != false && group_name != null && group_name != '' ) {
-
-                            if (!editSet.validateGroupName(group_name, 0)) {
-                                return;
+                        var self = this;
+
+                        prompt({
+                            content: "<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>",
+                            value: '',
+                            actions: {
+                                confirm: function (group_name) {
+                                    group_name = group_name.strip();
+                                    if( group_name == '' ) {
+                                        self.addGroup();
+                                    } else if( group_name != false && group_name != null && group_name != '' ) {
+
+                                        if (!editSet.validateGroupName(group_name, 0)) {
+                                            return;
+                                        }
+
+                                        var newNode = new Ext.tree.TreeNode({
+                                            text : group_name.escapeHTML(),
+                                            cls : 'folder',
+                                            allowDrop : true,
+                                            allowDrag : true
+                                        });
+                                        TreePanels.root.appendChild(newNode);
+                                        newNode.addListener('beforemove', editSet.groupBeforeMove);
+                                        newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
+                                        newNode.addListener('beforeappend', editSet.groupBeforeInsert);
+                                        newNode.addListener('click', editSet.register);
+                                    }
+                                }
                             }
-
-                            var newNode = new Ext.tree.TreeNode({
-                                    text : group_name.escapeHTML(),
-                                    cls : 'folder',
-                                    allowDrop : true,
-                                    allowDrag : true
-                                });
-                            TreePanels.root.appendChild(newNode);
-                            newNode.addListener('beforemove', editSet.groupBeforeMove);
-                            newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
-                            newNode.addListener('beforeappend', editSet.groupBeforeInsert);
-                            newNode.addListener('click', editSet.register);
-                        }
+                        });
                     },
 
                     editGroup : function(obj) {
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index cdea449e794..c50b2668359 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -37,6 +37,7 @@ define([
             }]
         },
         _create: function () {
+            this.options.focus = this.options.promptField;
             this._super();
             this.modal.find(this.options.modalContent).append('<input data-role="promptField" type="text"/>');
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
index 988614620e0..be0e3f829e2 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
@@ -59,7 +59,6 @@ class Cache extends Block
     public function flushCacheStorage()
     {
         $this->_rootElement->find($this->flushCacheStorageButton)->click();
-        $this->browser->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php
index 246c3113a8d..30213935409 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php
@@ -110,7 +110,6 @@ class FormPageActions extends PageActions
     public function delete()
     {
         $this->_rootElement->find($this->deleteButton)->click();
-        $this->browser->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php
index 2dbbdd6fe04..281c4fbd7a0 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php
@@ -35,7 +35,6 @@ class PageActions extends AbstractPageActions
     {
         $this->_rootElement->find($this->scopeSelector, Locator::SELECTOR_CSS, 'liselectstore')
             ->setValue($websiteScope);
-        $this->browser->acceptAlert();
 
         return $this;
     }
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index 8e1e7be0371..0f41bf8b978 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -340,7 +340,10 @@ abstract class Grid extends Block
     {
         $this->_rootElement->find($this->massactionSubmit, Locator::SELECTOR_CSS)->click();
         if ($acceptAlert) {
-            $this->browser->acceptAlert();
+            $element = $this->browser->find('.confirm._show[data-role=modal]');
+            /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+            $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+            $modal->acceptAlert();
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php
index ffd5e52d7ea..fd241121f62 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php
@@ -38,6 +38,7 @@ class AssertStoreCanBeLocalized extends AbstractConstraint
         // Set locale options
         $systemConfig->open();
         $systemConfig->getPageActions()->selectStore($store->getGroupId() . "/" . $store->getName());
+        $systemConfig->getModalBlock()->acceptAlert();
         $configGroup = $systemConfig->getForm()->getGroup('Locale Options');
         $configGroup->open();
         $configGroup->setValue('select-groups-locale-fields-code-value', $locale);
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml
index ecfd99d31c1..5bee8360e81 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml
@@ -10,5 +10,6 @@
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/>
         <block name="actionsBlock" class="Magento\Backend\Test\Block\Cache" locator="div.page-actions" strategy="css selector"/>
         <block name="additionalBlock" class="Magento\Backend\Test\Block\Cache\Additional" locator="div.fieldset.additional-cache-management" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml
index 9b9a0f3a309..4dbb6babb50 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="SystemConfig" area="Adminhtml" mca="admin/system_config" module="Magento_Backend">
-    <block name="pageActions" class="Magento\Backend\Test\Block\System\Config\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="form" class="Magento\Backend\Test\Block\System\Config\Form" locator="#config-edit-form" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="SystemConfig" area="Adminhtml" mca="admin/system_config" module="Magento_Backend">
+        <block name="pageActions" class="Magento\Backend\Test\Block\System\Config\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="form" class="Magento\Backend\Test\Block\System\Config\Form" locator="#config-edit-form" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
index 47a2e261ba1..998117a082c 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
@@ -123,7 +123,10 @@ class Main extends Block
     public function addAttributeSetGroup($groupName)
     {
         $this->_rootElement->find($this->addGroupButton)->click();
-        $this->browser->setAlertText($groupName);
-        $this->browser->acceptAlert();
+        $element = $this->browser->find('.prompt._show[data-role=modal]');
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->setAlertText($groupName);
+        $modal->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml
index 6c94684f993..a9efc7486ed 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogCategoryEdit" area="Adminhtml" mca="catalog/category/edit" module="Magento_Catalog">
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="editForm" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\CategoryForm" locator="#category-edit-container" strategy="css selector"/>
-  </page>
+    <page name="CatalogCategoryEdit" area="Adminhtml" mca="catalog/category/edit" module="Magento_Catalog">
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="editForm" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\CategoryForm" locator="#category-edit-container" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml
index 7340141c593..b53ec68704e 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogProductAttributeNew" area="Adminhtml" mca="catalog/product_attribute/new" module="Magento_Catalog">
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="attributeForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit\AttributeForm" locator="[id='page:main-container']" strategy="css selector"/>
-  </page>
+    <page name="CatalogProductAttributeNew" area="Adminhtml" mca="catalog/product_attribute/new" module="Magento_Catalog">
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="attributeForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit\AttributeForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml
index be45d688fbc..318016cdd30 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogProductSetEdit" area="Adminhtml" mca="catalog/product_set/edit" module="Magento_Catalog">
-    <block name="pageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="attributeSetEditBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main" locator=".attribute-set" strategy="css selector"/>
-    <block name="attributeSetEditForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main\EditForm" locator="#set_name" strategy="css selector"/>
-  </page>
+    <page name="CatalogProductSetEdit" area="Adminhtml" mca="catalog/product_set/edit" module="Magento_Catalog">
+        <block name="pageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="attributeSetEditBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main" locator=".attribute-set" strategy="css selector"/>
+        <block name="attributeSetEditForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main\EditForm" locator="#set_name" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php
index e6bafe0e256..ec77f237b21 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php
@@ -74,5 +74,6 @@ class DeleteCategoryEntityTest extends Injectable
         $this->catalogCategoryIndex->open();
         $this->catalogCategoryIndex->getTreeCategories()->selectCategory($category);
         $this->catalogCategoryEdit->getFormPageActions()->delete();
+        $this->catalogCategoryEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
index b1994e6b362..a3c0028f6e7 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
@@ -78,6 +78,7 @@ class DeleteAssignedToTemplateProductAttributeTest extends Injectable
         $this->attributeIndex->open();
         $this->attributeIndex->getGrid()->searchAndOpen($filter);
         $this->attributeNew->getPageActions()->delete();
+        $this->attributeNew->getModalBlock()->acceptAlert();
 
         return ['productTemplate' => $productTemplate, 'attribute' => $attribute];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
index 4eb5df71d91..d996e70adb4 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
@@ -93,6 +93,7 @@ class DeleteAttributeSetTest extends Injectable
         $this->productSetIndex->open();
         $this->productSetIndex->getGrid()->searchAndOpen($filter);
         $this->productSetEdit->getPageActions()->delete();
+        $this->productSetEdit->getModalBlock()->acceptAlert();
 
         return ['product' => $product];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php
index b2803209bad..0574f736aca 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php
@@ -53,5 +53,6 @@ class DeleteProductAttributeEntityTest extends Injectable
         $attributeIndex->open();
         $attributeIndex->getGrid()->searchAndOpen(['frontend_label' => $attribute->getFrontendLabel()]);
         $attributeNew->getPageActions()->delete();
+        $attributeNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php
index 4b5c4403e8c..934b2e185ad 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php
@@ -82,6 +82,7 @@ class DeleteUsedInConfigurableProductAttributeTest extends Injectable
         $this->attributeIndex->open();
         $this->attributeIndex->getGrid()->searchAndOpen(['attribute_code' => $attribute->getAttributeCode()]);
         $this->attributeNew->getPageActions()->delete();
+        $this->attributeNew->getModalBlock()->acceptAlert();
 
         return ['attribute' => $attribute];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php
index 8665338166e..26db72b37ef 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php
@@ -67,6 +67,7 @@ class DeleteAttributeStep implements TestStepInterface
         if ($this->catalogProductAttributeIndex->getGrid()->isRowVisible($filter)) {
             $this->catalogProductAttributeIndex->getGrid()->searchAndOpen($filter);
             $this->catalogProductAttributeNew->getPageActions()->delete();
+            $this->catalogProductAttributeNew->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml
index 5dd34d3be1a..af8118dc6be 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml
@@ -6,8 +6,9 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogRuleNew" area="Adminhtml" mca="catalog_rule/promo_catalog/new" module="Magento_CatalogRule">
-    <block name="formPageActions" class="Magento\CatalogRule\Test\Block\Adminhtml\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="editForm" class="Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit\PromoForm" locator="[id='page:main-container']" strategy="css selector"/>
-  </page>
+    <page name="CatalogRuleNew" area="Adminhtml" mca="catalog_rule/promo_catalog/new" module="Magento_CatalogRule">
+        <block name="formPageActions" class="Magento\CatalogRule\Test\Block\Adminhtml\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="editForm" class="Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit\PromoForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php
index 959edfcf464..aaea841d414 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php
@@ -82,5 +82,6 @@ class DeleteCatalogPriceRuleEntityTest extends Injectable
         $this->catalogRuleIndex->open();
         $this->catalogRuleIndex->getCatalogRuleGrid()->searchAndOpen($filter);
         $this->catalogRuleNew->getFormPageActions()->delete();
+        $this->catalogRuleNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php
index dcc06c224c0..5a733e8224d 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php
@@ -55,6 +55,7 @@ class DeleteAllCatalogRulesStep implements TestStepInterface
         while ($this->catalogRuleIndex->getCatalogRuleGrid()->isFirstRowVisible()) {
             $this->catalogRuleIndex->getCatalogRuleGrid()->openFirstRow();
             $this->catalogRuleNew->getFormPageActions()->delete();
+            $this->catalogRuleNew->getModalBlock()->acceptAlert();
             $this->catalogRuleIndex->getSystemMessageDialog()->closePopup();
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml
index 87d6b0b791a..0d20a2f4ac1 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml
@@ -6,8 +6,9 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogSearchEdit" area="Adminhtml" mca="search/term/edit" module="Magento_CatalogSearch">
-    <block name="form" class="Magento\CatalogSearch\Test\Block\Adminhtml\Edit\SearchTermForm" locator="#edit_form" strategy="css selector"/>
-    <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-  </page>
+    <page name="CatalogSearchEdit" area="Adminhtml" mca="search/term/edit" module="Magento_CatalogSearch">
+        <block name="form" class="Magento\CatalogSearch\Test\Block\Adminhtml\Edit\SearchTermForm" locator="#edit_form" strategy="css selector"/>
+        <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php
index b8400504d03..4c9cdecc2c3 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php
@@ -78,5 +78,6 @@ class DeleteSearchTermEntityTest extends Injectable
         $this->indexPage->open();
         $this->indexPage->getGrid()->searchAndOpen(['search_query' => $searchText]);
         $this->editPage->getFormPageActions()->delete();
+        $this->editPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml
index 401dac62e9c..05356444ea6 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml
@@ -9,5 +9,6 @@
     <page name="CheckoutAgreementNew" area="Adminhtml" mca="checkout/agreement/new" module="Magento_CheckoutAgreements">
         <block name="pageActionsBlock" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
         <block name="agreementsForm" class="Magento\CheckoutAgreements\Test\Block\Adminhtml\Block\Agreement\Edit\AgreementsForm" locator="#edit_form" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
\ No newline at end of file
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php
index 3599882b174..b40f50f32d2 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php
@@ -56,6 +56,7 @@ class DeleteAllTermsEntityStep implements TestStepInterface
         while ($this->agreementIndex->getAgreementGridBlock()->isFirstRowVisible()) {
             $this->agreementIndex->getAgreementGridBlock()->openFirstRow();
             $this->agreementNew->getPageActionsBlock()->delete();
+            $this->agreementNew->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php
index d5b572db6ea..34c352f39ea 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php
@@ -63,5 +63,6 @@ class DeleteTermEntityStep implements TestStepInterface
     {
         $this->agreementIndex->open()->getAgreementGridBlock()->searchAndOpen(['name' => $this->agreement->getName()]);
         $this->agreementNew->getPageActionsBlock()->delete();
+        $this->agreementNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml
index d37d3e14204..a9089eeddc7 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml
@@ -10,5 +10,6 @@
         <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="cmsForm" class="Magento\Cms\Test\Block\Adminhtml\Block\Edit\CmsForm" locator="[id='page:main-container']" strategy="css selector" />
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml
index 252dc039121..fc93801cdc7 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml
@@ -9,5 +9,6 @@
     <page name="CmsPageNew" area="Adminhtml" mca="cms/page/new" module="Magento_Cms">
         <block name="pageForm" class="Magento\Cms\Test\Block\Adminhtml\Page\Edit\PageForm" locator="[id='page:main-container']" strategy="css selector" />
         <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php
index 07f8d2dea44..31f36c5eb25 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php
@@ -77,5 +77,6 @@ class DeleteCmsBlockEntityTest extends Injectable
         $this->cmsBlockIndex->open();
         $this->cmsBlockIndex->getCmsBlockGrid()->searchAndOpen($filter, true, false);
         $this->cmsBlockNew->getFormPageActions()->delete();
+        $this->cmsBlockNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php
index 5801ba85ea5..17d47b6681c 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php
@@ -74,5 +74,6 @@ class DeleteCmsPageEntityTest extends Injectable
         $this->cmsPageIndex->open();
         $this->cmsPageIndex->getCmsPageGridBlock()->searchAndOpen(['title' => $cmsPage->getTitle()]);
         $this->cmsPageNew->getPageMainActions()->delete();
+        $this->cmsPageNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php
index 7d5364c7c6f..7ef7db00e0a 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php
@@ -77,5 +77,6 @@ class DeleteCmsPageUrlRewriteEntityTest extends Injectable
         $this->urlRewriteIndex->open();
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen(['request_path' => $urlRewrite->getRequestPath()]);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml
index 69db394b4cd..72d8c4bf823 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CustomerGroupNew" area="Adminhtml" mca="customer/group/new" module="Magento_Customer">
-    <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="pageMainForm" class="Magento\Customer\Test\Block\Adminhtml\Group\Edit\Form" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="CustomerGroupNew" area="Adminhtml" mca="customer/group/new" module="Magento_Customer">
+        <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="pageMainForm" class="Magento\Customer\Test\Block\Adminhtml\Group\Edit\Form" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
index 80bd928de60..7dfacbc495c 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
@@ -6,11 +6,12 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer">
-    <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
-  </page>
+    <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer">
+        <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php
index adb0c3fc6db..55193f4834a 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php
@@ -74,5 +74,6 @@ class DeleteCustomerBackendEntityTest extends Injectable
         $this->customerIndexPage->open();
         $this->customerIndexPage->getCustomerGridBlock()->searchAndOpen($filter);
         $this->customerIndexEditPage->getPageActionsBlock()->delete();
+        $this->customerIndexEditPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php
index 7b3cfefbf13..067e17a8d0e 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php
@@ -80,5 +80,6 @@ class DeleteCustomerGroupEntityTest extends Injectable
         $this->customerGroupIndex->open();
         $this->customerGroupIndex->getCustomerGroupGrid()->searchAndOpen($filter);
         $this->customerGroupNew->getPageMainActions()->delete();
+        $this->customerGroupNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php
index 1e627941bd7..ea33820808d 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php
@@ -69,6 +69,7 @@ class AssertSetApprovedProductReview extends AbstractConstraint
     {
         $this->cachePage->open();
         $this->cachePage->getActionsBlock()->flushCacheStorage();
+        $this->cachePage->getModalBlock()->acceptAlert();
         \PHPUnit_Framework_Assert::assertTrue(
             $this->cachePage->getActionsBlock()->isStorageCacheFlushed(),
             'Cache is not flushed.'
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml
index 2f6ca296009..f5f44551d02 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml
@@ -9,5 +9,6 @@
     <page name="RatingEdit" area="Adminhtml" mca="review/rating/edit" module="Magento_Review">
         <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="ratingForm" class="Magento\Review\Test\Block\Adminhtml\Rating\Edit\RatingForm" locator="[id='page:main-container']" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php
index 9f826b41451..bbfabc028ed 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php
@@ -127,5 +127,6 @@ class CreateProductRatingEntityTest extends Injectable
         $this->ratingIndex->open();
         $this->ratingIndex->getRatingGrid()->searchAndOpen($filter);
         $this->ratingEdit->getPageActions()->delete();
+        $this->ratingEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php
index 937cca411d9..961ab02b043 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php
@@ -135,6 +135,7 @@ class CreateProductReviewBackendEntityTest extends Injectable
             foreach ($this->review->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php
index d0635638f9f..406f4deef9c 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php
@@ -128,6 +128,7 @@ class CreateProductReviewFrontendEntityTest extends Injectable
             foreach ($ratings as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php
index 193c7307ab8..8b7d3bf5749 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php
@@ -90,5 +90,6 @@ class DeleteProductRatingEntityTest extends Injectable
         $this->ratingIndex->open();
         $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $productRating->getRatingCode()]);
         $this->ratingEdit->getPageActions()->delete();
+        $this->ratingEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php
index f0a34008cf0..b7d7b5b53f5 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php
@@ -208,6 +208,7 @@ class ManageProductReviewFromCustomerPageTest extends Injectable
             foreach ($this->reviewInitial->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php
index f351eb72b7d..188ec0fa1e6 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php
@@ -119,6 +119,7 @@ class MassActionsProductReviewEntityTest extends Injectable
             foreach ($this->review->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
index 7b6908ce0a0..0a373da1808 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
@@ -178,6 +178,7 @@ class UpdateProductReviewEntityOnProductPageTest extends Injectable
         foreach ($this->reviewInitial->getRatings() as $rating) {
             $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
             $this->ratingEdit->getPageActions()->delete();
+            $this->ratingEdit->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php
index f2ab71072a2..f3005a32db0 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php
@@ -132,6 +132,7 @@ class UpdateProductReviewEntityTest extends Injectable
             foreach ($this->review->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml
index 23b3fe8d67b..432d754fddf 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml
@@ -9,5 +9,6 @@
     <page name="PromoQuoteEdit" area="Adminhtml" mca="sales_rule/promo_quote/edit" module="Magento_SalesRule">
         <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="salesRuleForm" class="Magento\SalesRule\Test\Block\Adminhtml\Promo\Quote\Edit\PromoQuoteForm" locator="[id='page:main-container']" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php
index 906a7b51a35..833752c00f6 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php
@@ -142,5 +142,6 @@ class CreateSalesRuleEntityTest extends Injectable
         $this->promoQuoteIndex->open();
         $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
         $this->promoQuoteEdit->getFormPageActions()->delete();
+        $this->promoQuoteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php
index 39acead1497..354d27064be 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php
@@ -75,5 +75,6 @@ class DeleteSalesRuleEntityTest extends Injectable
         $this->promoQuoteIndex->open();
         $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen(['name' => $salesRule->getName()]);
         $this->promoQuoteEdit->getFormPageActions()->delete();
+        $this->promoQuoteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php
index a1ef4b347fe..5ae2160bc42 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php
@@ -127,5 +127,6 @@ class UpdateSalesRuleEntityTest extends Injectable
         $this->promoQuoteIndex->open();
         $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
         $this->promoQuoteEdit->getFormPageActions()->delete();
+        $this->promoQuoteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php
index 98bf51e84f7..db64010c1af 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php
@@ -54,6 +54,7 @@ class DeleteAllSalesRuleStep implements TestStepInterface
         while ($this->promoQuoteIndex->getPromoQuoteGrid()->isFirstRowVisible()) {
             $this->promoQuoteIndex->getPromoQuoteGrid()->openFirstRow();
             $this->promoQuoteEdit->getFormPageActions()->delete();
+            $this->promoQuoteEdit->getModalBlock()->acceptAlert();
             $this->promoQuoteIndex->getSystemMessageDialog()->closePopup();
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml
index 78ebe3f0f12..9f2d045ae61 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml
@@ -6,7 +6,8 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="SitemapEdit" area="Adminhtml" mca="admin/sitemap/edit" module="Magento_Sitemap">
-    <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-  </page>
+    <page name="SitemapEdit" area="Adminhtml" mca="admin/sitemap/edit" module="Magento_Sitemap">
+        <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php
index 56371fb69ad..9e62c9111a0 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php
@@ -72,5 +72,6 @@ class DeleteSitemapEntityTest extends Injectable
         $this->sitemapIndex->open();
         $this->sitemapIndex->getSitemapGrid()->searchAndOpen($filter);
         $this->sitemapEdit->getFormPageActions()->delete();
+        $this->sitemapEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml
index 0237379975c..9940b8cca86 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="TaxRateNew" area="Adminhtml" mca="tax/rate/add" module="Magento_Tax">
-    <block name="formPageActions" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="taxRateForm" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\Form" locator="#rate-form" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="TaxRateNew" area="Adminhtml" mca="tax/rate/add" module="Magento_Tax">
+        <block name="formPageActions" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="taxRateForm" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\Form" locator="#rate-form" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml
index 3396503e1d4..3806a2e36a1 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="TaxRuleNew" area="Adminhtml" mca="tax/rule/new" module="Magento_Tax">
-    <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="taxRuleForm" class="Magento\Tax\Test\Block\Adminhtml\Rule\Edit\Form" locator="#edit_form" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="TaxRuleNew" area="Adminhtml" mca="tax/rule/new" module="Magento_Tax">
+        <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="taxRuleForm" class="Magento\Tax\Test\Block\Adminhtml\Rule\Edit\Form" locator="#edit_form" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php
index 4bbdfbe5204..a83bfa60070 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php
@@ -81,5 +81,6 @@ class DeleteTaxRateEntityTest extends Injectable
         $this->taxRateIndex->open();
         $this->taxRateIndex->getTaxRateGrid()->searchAndOpen($filter);
         $this->taxRateNew->getFormPageActions()->delete();
+        $this->taxRateNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php
index bef4c799b43..de83384d07a 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php
@@ -89,5 +89,6 @@ class DeleteTaxRuleEntityTest extends Injectable
         $this->taxRuleIndexPage->open();
         $this->taxRuleIndexPage->getTaxRuleGrid()->searchAndOpen(['code' => $taxRule->getCode()]);
         $this->taxRuleNewPage->getFormPageActions()->delete();
+        $this->taxRuleNewPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
index d24b2ca4c4d..212d8beabc9 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
@@ -55,6 +55,7 @@ class DeleteAllTaxRulesStep implements TestStepInterface
         while ($this->taxRuleIndexPage->getTaxRuleGrid()->isFirstRowVisible()) {
             $this->taxRuleIndexPage->getTaxRuleGrid()->openFirstRow();
             $this->taxRuleNewPage->getFormPageActions()->delete();
+            $this->taxRuleNewPage->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 11ca409773a..837a0abcb0e 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -250,7 +250,10 @@ class DataGrid extends Grid
             ->find(sprintf($this->massActionToggleList, $actionType), Locator::SELECTOR_XPATH)
             ->click();
         if ($acceptAlert) {
-            $this->browser->find($this->actionButton)->click();
+            $element = $this->browser->find('._show[data-role=modal]');
+            /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+            $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+            $modal->acceptAlert();
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
new file mode 100644
index 00000000000..b419a8e91b4
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Ui\Test\Block\Adminhtml;
+
+use Magento\Mtf\Block\Block;
+use Magento\Mtf\Client\Locator;
+
+/**
+ * Alert, confirm, prompt block.
+ */
+class Modal extends Block
+{
+    /**
+     * Locator value for accept button.
+     *
+     * @var string
+     */
+    protected $acceptButtonSelector = '.action-accept';
+
+    /**
+     * Locator value for dismiss button.
+     *
+     * @var string
+     */
+    protected $dismissButtonSelector = '.action-dismiss';
+
+    /**
+     * Locator value for close button.
+     *
+     * @var string
+     */
+    protected $closeButtonSelector = '.action-close';
+
+    /**
+     * Locator value for prompt input.
+     *
+     * @var string
+     */
+    protected  $inputFieldSelector = '[data-role="promptField"]';
+
+    /**
+     * Press OK on an alert, confirm, prompt a dialog
+     *
+     * @return void
+     */
+    public function acceptAlert()
+    {
+        $this->_rootElement->find($this->acceptButtonSelector)->click();
+    }
+
+    /**
+     * Press Cancel on an alert, confirm, prompt a dialog
+     *
+     * @return void
+     */
+    public function dismissAlert()
+    {
+        $this->_rootElement->find($this->dismissButtonSelector)->click();
+    }
+
+    /**
+     * Press Close on an alert, confirm, prompt a dialog
+     *
+     * @return void
+     */
+    public function closeAlert()
+    {
+        $this->_rootElement->find($this->closeButtonSelector)->click();
+    }
+
+    /**
+     * Get the alert dialog text
+     *
+     * @return string
+     */
+    public function getAlertText()
+    {
+        return $this->_rootElement->find($this->inputFieldSelector)->getValue();
+    }
+
+    /**
+     * Set the text to a prompt popup
+     *
+     * @param string $text
+     * @return void
+     */
+    public function setAlertText($text)
+    {
+        $this->_rootElement->find($this->inputFieldSelector)->setValue($text);
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml
index 77022c54f4f..96a0d514a30 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml
@@ -6,13 +6,14 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="UrlRewriteEdit" area="Adminhtml" mca="admin/url_rewrite/edit" module="Magento_UrlRewrite">
-    <block name="treeBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Category\Tree" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="formBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Edit\UrlRewriteForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/>
-    <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="productGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Product\Grid" locator="[id='productGrid']" strategy="css selector"/>
-    <block name="urlRewriteTypeSelectorBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Selector" locator="[data-container-for='entity-type-selector']" strategy="css selector"/>
-    <block name="cmsGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Cms\Page\Grid" locator="#cmsPageGrid" strategy="css selector"/>
-  </page>
+    <page name="UrlRewriteEdit" area="Adminhtml" mca="admin/url_rewrite/edit" module="Magento_UrlRewrite">
+        <block name="treeBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Category\Tree" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="formBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Edit\UrlRewriteForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/>
+        <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="productGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Product\Grid" locator="[id='productGrid']" strategy="css selector"/>
+        <block name="urlRewriteTypeSelectorBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Selector" locator="[data-container-for='entity-type-selector']" strategy="css selector"/>
+        <block name="cmsGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Cms\Page\Grid" locator="#cmsPageGrid" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
index 75365689598..a7eebdeae3e 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
@@ -82,5 +82,6 @@ class DeleteCategoryUrlRewriteEntityTest extends Injectable
         }
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php
index f5592e87abe..d34485b7819 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php
@@ -78,5 +78,6 @@ class DeleteCustomUrlRewriteEntityTest extends Injectable
         $filter = ['request_path' => $urlRewrite->getRequestPath()];
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
index c668f0512ea..5673b0ae5e3 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
@@ -80,5 +80,6 @@ class DeleteProductUrlRewriteEntityTest extends Injectable
         $filter = ['request_path' => $productRedirect->getRequestPath()];
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml
index 63f87299179..67a33346808 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml
@@ -6,10 +6,11 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="UserEdit" area="Adminhtml" mca="admin/user/edit" module="Magento_User">
-    <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\User\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="userForm" class="Magento\User\Test\Block\Adminhtml\User\UserForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="rolesGrid" class="Magento\User\Test\Block\Adminhtml\User\Tab\Role\Grid" locator="[id='permissionsUserRolesGrid']" strategy="css selector"/>
-  </page>
+    <page name="UserEdit" area="Adminhtml" mca="admin/user/edit" module="Magento_User">
+        <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\User\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="userForm" class="Magento\User\Test\Block\Adminhtml\User\UserForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="rolesGrid" class="Magento\User\Test\Block\Adminhtml\User\Tab\Role\Grid" locator="[id='permissionsUserRolesGrid']" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml
index 739a150f8a4..4f30dddd026 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="UserRoleEditRole" area="Adminhtml" mca="admin/user_role/editrole" module="Magento_User">
-    <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\Role\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="roleFormTabs" class="Magento\User\Test\Block\Adminhtml\Role\RoleForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="UserRoleEditRole" area="Adminhtml" mca="admin/user_role/editrole" module="Magento_User">
+        <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\Role\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="roleFormTabs" class="Magento\User\Test\Block\Adminhtml\Role\RoleForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php
index 66299206227..0e0c500fc5f 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php
@@ -120,6 +120,7 @@ class DeleteAdminUserEntityTest extends Injectable
         $this->userIndex->open();
         $this->userIndex->getUserGrid()->searchAndOpen($filter);
         $this->userEdit->getPageActions()->delete();
+        $this->userEdit->getModalBlock()->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php
index 22421a9557c..8f66d93cc08 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php
@@ -122,6 +122,7 @@ class DeleteUserRoleEntityTest extends Injectable
         $this->userRoleIndex->open();
         $this->userRoleIndex->getRoleGrid()->searchAndOpen($filter);
         $this->userRoleEditRole->getPageActions()->delete();
+        $this->userRoleEditRole->getModalBlock()->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml b/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml
index 1ef12a76ebc..294fbe0a1e9 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml
@@ -6,8 +6,9 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="SystemVariableNew" area="Adminhtml" mca="admin/system_variable/new" module="Magento_Variable">
-    <block name="formPageActions" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="systemVariableForm" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\Edit\VariableForm" locator="#edit_form" strategy="css selector"/>
-  </page>
+    <page name="SystemVariableNew" area="Adminhtml" mca="admin/system_variable/new" module="Magento_Variable">
+        <block name="formPageActions" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="systemVariableForm" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\Edit\VariableForm" locator="#edit_form" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php
index 48ae7608c56..a52fdc02ca3 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php
@@ -80,5 +80,6 @@ class DeleteCustomVariableEntityTest extends Injectable
         $this->systemVariableIndexPage->open();
         $this->systemVariableIndexPage->getSystemVariableGrid()->searchAndOpen($filter);
         $this->systemVariableNewPage->getFormPageActions()->delete();
+        $this->systemVariableNewPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml
index ce17b52e6d4..a91e0a5d3c3 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml
@@ -10,5 +10,6 @@
         <block name="widgetForm" class="Magento\Widget\Test\Block\Adminhtml\Widget\Instance\Edit\WidgetForm" locator="[id='page:main-container']" strategy="css selector" />
         <block name="pageActionsBlock" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="templateBlock" class="Magento\Backend\Test\Block\Template" locator="body" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php
index 29a30c20cbc..fa1fdf69283 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php
@@ -77,5 +77,6 @@ class DeleteWidgetEntityTest extends Injectable
         $this->widgetInstanceIndex->open();
         $this->widgetInstanceIndex->getWidgetGrid()->searchAndOpen($filter);
         $this->widgetInstanceEdit->getPageActionsBlock()->delete();
+        $this->widgetInstanceEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php
index fd5825cb022..f3d8184eea1 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php
@@ -55,6 +55,7 @@ class DeleteAllWidgetsStep implements TestStepInterface
             $this->widgetInstanceIndex->getWidgetGrid()->openFirstRow();
             $this->widgetInstanceEdit->getTemplateBlock()->waitLoader();
             $this->widgetInstanceEdit->getPageActionsBlock()->delete();
+            $this->widgetInstanceEdit->getModalBlock()->acceptAlert();
             $this->widgetInstanceIndex->getSystemMessageDialog()->closePopup();
         }
     }
diff --git a/lib/web/mage/adminhtml/grid.js b/lib/web/mage/adminhtml/grid.js
index 727c7f3a1cb..b1a8acb5e48 100644
--- a/lib/web/mage/adminhtml/grid.js
+++ b/lib/web/mage/adminhtml/grid.js
@@ -8,11 +8,12 @@ define([
     'jquery',
     'mage/template',
     'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/confirm',
     'mage/mage',
     'prototype',
     'mage/adminhtml/form',
     'mage/adminhtml/events'
-], function (jQuery, mageTemplate, alert) {
+], function (jQuery, mageTemplate, alert, confirm) {
 
 window.varienGrid = new Class.create();
 
@@ -644,6 +645,8 @@ varienGridMassaction.prototype = {
         }
     },
     apply: function() {
+        var self = this;
+
         if(varienStringArray.count(this.checkedString) == 0) {
                 alert({
                     content: this.errorText
@@ -659,35 +662,39 @@ varienGridMassaction.prototype = {
         }
         this.currentItem = item;
         var fieldName = (item.field ? item.field : this.formFieldName);
-        var fieldsHtml = '';
-
-        if(this.currentItem.confirm && !window.confirm(this.currentItem.confirm)) {
-            return;
-        }
-
-        this.formHiddens.update('');
-        new Insertion.Bottom(this.formHiddens, this.fieldTemplate({
-            name: fieldName,
-            value: this.checkedString
-        }));
-        new Insertion.Bottom(this.formHiddens, this.fieldTemplate({
-            name: 'massaction_prepare_key',
-            value: fieldName
-        }));
 
-        if(!jQuery(this.form).valid()) {
-            return;
-        }
-
-        if(this.useAjax && item.url) {
-            new Ajax.Request(item.url, {
-                'method': 'post',
-                'parameters': this.form.serialize(true),
-                'onComplete': this.onMassactionComplete.bind(this)
+        if (this.currentItem.confirm) {
+            confirm({
+                content: this.currentItem.confirm,
+                actions: {
+                    confirm: function () {
+                        self.formHiddens.update('');
+                        new Insertion.Bottom(self.formHiddens, self.fieldTemplate({
+                            name: fieldName,
+                            value: self.checkedString
+                        }));
+                        new Insertion.Bottom(self.formHiddens, self.fieldTemplate({
+                            name: 'massaction_prepare_key',
+                            value: fieldName
+                        }));
+
+                        if (!jQuery(self.form).valid()) {
+                            return;
+                        }
+
+                        if (self.useAjax && item.url) {
+                            new Ajax.Request(item.url, {
+                                'method': 'post',
+                                'parameters': self.form.serialize(true),
+                                'onComplete': self.onMassactionComplete.bind(self)
+                            });
+                        } else if (item.url) {
+                            self.form.action = item.url;
+                            self.form.submit();
+                        }
+                    }
+                }
             });
-        } else if(item.url) {
-            this.form.action = item.url;
-            this.form.submit();
         }
     },
     onMassactionComplete: function(transport) {
-- 
GitLab


From 55fbcaf560d9e9c970a423284e664a39bcce7eb0 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 28 Sep 2015 09:15:03 +0300
Subject: [PATCH 136/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../view/adminhtml/templates/system/messages/popup.phtml        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 93b389bed2f..f20dcc76144 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
@@ -28,7 +28,7 @@ require([
         this.modal.html($('[data-role="system_messages_list"]').html());
     } else {
         this.modal = $('[data-role="system_messages_list"]').modal({
-            modalClass: 'ui-popup-message',
+            modalClass: 'modal-system-messages ui-popup-message',
             type: 'popup',
             buttons: []
         });
-- 
GitLab


From b3241277eadd77ab7b3d8bde3fe547f023b3a9f4 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 28 Sep 2015 09:32:11 +0300
Subject: [PATCH 137/420] MAGETWO-42995: Stabilize functional tests

---
 .../tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
index b419a8e91b4..928a74c283a 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
@@ -40,7 +40,7 @@ class Modal extends Block
      *
      * @var string
      */
-    protected  $inputFieldSelector = '[data-role="promptField"]';
+    protected $inputFieldSelector = '[data-role="promptField"]';
 
     /**
      * Press OK on an alert, confirm, prompt a dialog
-- 
GitLab


From 20768680e1814f70c5996b8db54f7e538cbf4f25 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 28 Sep 2015 10:34:01 +0300
Subject: [PATCH 138/420] MAGETWO-42995: Stabilize functional tests

---
 .../view/adminhtml/web/js/variations/variations.js            | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
index cbaecde06c8..d0d16754d0c 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
@@ -338,7 +338,9 @@ define([
                                 parentElement.find('[name$="[image]"]').val(data.result.file);
                                 parentElement.find('[data-toggle=dropdown]').dropdown().show();
                             } else {
-                                alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                                alert({
+                                    content: $.mage.__('We don\'t recognize or support this file extension type.')
+                                });
                             }
                         },
                         start: function (event) {
-- 
GitLab


From faa5f9a572ac1ea44750936bd9dc51c20513269d Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 28 Sep 2015 11:42:47 +0300
Subject: [PATCH 139/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../adminhtml/templates/dashboard/index.phtml |  15 +-
 .../adminhtml/templates/media/uploader.phtml  |   7 +-
 .../templates/catalog/category/edit.phtml     |  11 +-
 .../catalog/product/attribute/js.phtml        |  12 +-
 .../catalog/product/attribute/set/main.phtml  | 678 +++++++++---------
 .../Checkout/view/frontend/web/js/sidebar.js  |  14 +-
 .../catalog/product/attribute/set/js.phtml    |  17 +-
 .../view/adminhtml/templates/tab/cart.phtml   |  25 +-
 .../adminhtml/web/edit/tab/js/addresses.js    |  16 +-
 .../Customer/view/frontend/web/address.js     |  25 +-
 .../templates/product/edit/downloadable.phtml |  15 +-
 .../adminhtml/templates/template/edit.phtml   |   7 +-
 .../templates/export/form/before.phtml        |   9 +-
 .../templates/import/form/before.phtml        |  16 +-
 .../view/frontend/web/js/paypal-checkout.js   |  44 +-
 .../adminhtml/web/order/create/scripts.js     |  20 +-
 .../templates/promo/salesrulejs.phtml         |  10 +-
 .../adminhtml/templates/create/items.phtml    |   7 +-
 .../catalog/product/attribute/js.phtml        |  11 +-
 .../view/adminhtml/templates/rule/edit.phtml  |  39 +-
 .../view/adminhtml/templates/tabs/css.phtml   |   7 +-
 .../view/adminhtml/templates/tabs/js.phtml    |   9 +-
 .../base/web/js/form/components/collection.js |  20 +-
 .../templates/instance/edit/layout.phtml      |  11 +-
 lib/web/mage/backend/editablemultiselect.js   |  65 +-
 25 files changed, 651 insertions(+), 459 deletions(-)

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
index 5c9cf626e37..bd97edfa35b 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
@@ -10,7 +10,10 @@
 
 <?php if (is_array($block->getChildBlock('diagrams')->getTabsIds())) : ?>
 <script>
-require(['prototype'], function(){
+require([
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(alert){
 
 window.changeDiagramsPeriod = function(periodObj) {
     periodParam = periodObj.value ? 'period/' + periodObj.value + '/' : '';
@@ -25,7 +28,9 @@ window.changeDiagramsPeriod = function(periodObj) {
                 if (transport.responseText.isJSON()) {
                     var response = transport.responseText.evalJSON()
                     if (response.error) {
-                        alert(response.message);
+                        alert({
+                            content: response.message
+                        });
                     }
                     if(response.ajaxExpired && response.ajaxRedirect) {
                         setLocation(response.ajaxRedirect);
@@ -47,9 +52,11 @@ window.changeDiagramsPeriod = function(periodObj) {
             tabContentElementId = 'dashboard_diagram_totals';
             try {
                 if (transport.responseText.isJSON()) {
-                    var response = transport.responseText.evalJSON()
+                    var response = transport.responseText.evalJSON();
                     if (response.error) {
-                        alert(response.message);
+                        alert({
+                            content: response.message
+                        });
                     }
                     if(response.ajaxExpired && response.ajaxRedirect) {
                         setLocation(response.ajaxRedirect);
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml b/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml
index d6bd7de2f1c..a876ad6c6e5 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml
@@ -31,9 +31,10 @@
 require([
     "jquery",
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "jquery/file-uploader"
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
 
     $('#fileupload').fileupload({
         dataType: 'json',
@@ -75,7 +76,9 @@ require([
                 $('#' + data.fileId)
                     .delay(2000)
                     .hide('highlight');
-                alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                alert({
+                   content: $.mage.__('We don\'t recognize or support this file extension type.')
+                });
             }
             $('#' + data.fileId).remove();
         },
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
index 7974f2731cf..7b7a22849be 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
@@ -21,9 +21,10 @@ require([
     "jquery",
     "tinymce",
     'Magento_Ui/js/modal/confirm',
+    'Magento_Ui/js/modal/alert',
     "loadingPopup",
     "mage/backend/floating-header"
-], function(jQuery, tinyMCE, confirm){
+], function(jQuery, tinyMCE, confirm, alert){
 
 //<![CDATA[
     function categoryReset(url,useAjax){
@@ -87,7 +88,9 @@ require([
                         });
                         $categoryContainer.html('');
                     } catch (e) {
-                        alert(e.message);
+                        alert({
+                            content: e.message
+                        });
                     }
                     $categoryContainer.html(data.content).trigger('contentUpdated');
                     setTimeout(function() {
@@ -104,7 +107,9 @@ require([
                                 window.refreshTreeArea();
                             }
                         } catch (e) {
-                            alert(e.message);
+                            alert({
+                                content: e.message
+                            });
                         };
                     }, 25);
                 }
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
index 18816994754..332345cb2c1 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -8,7 +8,12 @@
 
 ?>
 <script>
-require(["jquery", "collapsable", "prototype"], function(jQuery){
+require([
+    "jquery",
+    'Magento_Ui/js/modal/alert',
+    "collapsable",
+    "prototype"
+], function(jQuery, alert){
 
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
@@ -269,7 +274,10 @@ function saveAttributeInNewSet(promptMessage)
     var rules = ['required-entry', 'validate-no-html-tags'];
     for (var i = 0; i < rules.length; i++) {
         if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
-            alert(jQuery.validator.messages[rules[i]]);
+            alert({
+                content: jQuery.validator.messages[rules[i]]
+            });
+
             return;
         }
     }
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index 31c9a24e15f..35ecbf32540 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -11,23 +11,23 @@
     <div class="edit-attribute-set attribute-set-col">
         <?php echo $block->getSetFormHtml() ?>
         <script>
-require([
-    "jquery",
-    "mage/mage"
-], function(jQuery){
+            require([
+                "jquery",
+                "mage/mage"
+            ], function(jQuery){
 
-    jQuery('#set-prop-form').mage('validation', {errorClass: 'mage-error'});
+                jQuery('#set-prop-form').mage('validation', {errorClass: 'mage-error'});
 
-});
-</script>
+            });
+        </script>
     </div>
     <div class="attribute-set-col fieldset-wrapper">
         <div class="fieldset-wrapper-title">
             <span class="title"><?php /* @escapeNotVerified */ echo __('Groups') ?></span>
         </div>
         <?php if (!$block->getIsReadOnly()): ?>
-        <?php /* @escapeNotVerified */ echo $block->getAddGroupButton() ?>&nbsp;<?php /* @escapeNotVerified */ echo $block->getDeleteGroupButton() ?>
-        <p class="note-block"><?php /* @escapeNotVerified */ echo __('Double click on a group to rename it.') ?></p>
+            <?php /* @escapeNotVerified */ echo $block->getAddGroupButton() ?>&nbsp;<?php /* @escapeNotVerified */ echo $block->getDeleteGroupButton() ?>
+            <p class="note-block"><?php /* @escapeNotVerified */ echo __('Double click on a group to rename it.') ?></p>
         <?php endif; ?>
 
         <?php echo $block->getSetsFilterHtml() ?>
@@ -41,345 +41,359 @@ require([
         <!--[if IE]>
         <script id="ie-deferred-loader" defer="defer" src=""></script>
         <![endif]-->
-            <script>
-define("tree-panel", ["jquery", 'Magento_Ui/js/modal/prompt', "extjs/ext-tree-checkbox", "prototype"], function(jQuery, prompt){
-
-            //<![CDATA[
-            var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
-            var canEditGroups = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
-
-            var TreePanels = function() {
-                // shorthand
-                var Tree = Ext.tree;
-
-                return {
-                    init : function(){
-                        // yui-ext tree
-
-                        var tree = new Ext.tree.TreePanel('tree-div1', {
-                            animate:false,
-                            loader: false,
-                            enableDD:allowDragAndDrop,
-                            containerScroll: true,
-                            rootVisible: false
-                        });
-
-                        // set the root node
-                        this.root = new Ext.tree.TreeNode({
-                            text: 'ROOT',
-                            allowDrug:false,
-                            allowDrop:true,
-                            id:'1'
-                        });
-
-                        tree.setRootNode(this.root);
-                        buildCategoryTree(this.root, <?php /* @escapeNotVerified */ echo $block->getGroupTreeJson() ?>);
-                        // render the tree
-                        tree.render();
-                        this.root.expand(false, false);
-                        tree.expandAll();
-
-                        this.ge = new Ext.tree.TreeEditor(tree, {
-                            allowBlank:false,
-                            blankText:'<?php /* @escapeNotVerified */ echo __('A name is required.') ?>',
-                            selectOnFocus:true,
-                            cls:'folder'
-                        });
-
-                        this.root.addListener('beforeinsert', editSet.leftBeforeInsert);
-                        this.root.addListener('beforeappend', editSet.leftBeforeInsert);
-
-                        //this.ge.addListener('beforerender', editSet.editGroup);
-                        this.ge.addListener('beforeshow', editSet.editGroup);
-                        this.ge.addListener('beforecomplete', editSet.beforeRenameGroup);
-                        //this.ge.addListener('startedit', editSet.editGroup);
-
-                        //-------------------------------------------------------------
-
-                        var tree2 = new Ext.tree.TreePanel('tree-div2', {
-                            animate:false,
-                            loader: false,
-                            enableDD:allowDragAndDrop,
-                            containerScroll: true,
-                            rootVisible: false,
-                            lines:false
-                        });
-
-                        // set the root node
-                        this.root2 = new Ext.tree.TreeNode({
-                            text: 'ROOT',
-                            draggable:false,
-                            id:'free'
-                        });
-                        tree2.setRootNode(this.root2);
-                        buildCategoryTree(this.root2, <?php /* @escapeNotVerified */ echo $block->getAttributeTreeJson() ?>);
-
-                        this.root2.addListener('beforeinsert', editSet.rightBeforeInsert);
-                        this.root2.addListener('beforeappend', editSet.rightBeforeAppend);
-
-                        this.root2.addListener('append', editSet.rightAppend);
-                        this.root2.addListener('remove', editSet.rightRemove);
-                        // render the tree
-                        tree2.render();
-                        this.root2.expand(false, false);
-                        tree2.expandAll();
-                    },
-
-                    rebuildTrees : function(){
-                        editSet.req.attributes = new Array();
-                        rootNode = TreePanels.root;
-                        var gIterator = 0;
-                        for( i in rootNode.childNodes ) {
-                            if(rootNode.childNodes[i].id) {
-                                var group = rootNode.childNodes[i];
-                                editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1));
-                                var iterator = 0
-                                for( j in group.childNodes ) {
-                                    iterator ++;
-                                    if( group.childNodes[j].id > 0 ) {
-                                        editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id);
+        <script>
+            define("tree-panel",
+                [
+                    "jquery",
+                    "Magento_Ui/js/modal/prompt",
+                    "Magento_Ui/js/modal/alert",
+                    "extjs/ext-tree-checkbox",
+                    "prototype"
+                ], function(jQuery, prompt, alert){
+
+                //<![CDATA[
+                var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
+                var canEditGroups = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
+
+                var TreePanels = function() {
+                    // shorthand
+                    var Tree = Ext.tree;
+
+                    return {
+                        init : function(){
+                            // yui-ext tree
+
+                            var tree = new Ext.tree.TreePanel('tree-div1', {
+                                animate:false,
+                                loader: false,
+                                enableDD:allowDragAndDrop,
+                                containerScroll: true,
+                                rootVisible: false
+                            });
+
+                            // set the root node
+                            this.root = new Ext.tree.TreeNode({
+                                text: 'ROOT',
+                                allowDrug:false,
+                                allowDrop:true,
+                                id:'1'
+                            });
+
+                            tree.setRootNode(this.root);
+                            buildCategoryTree(this.root, <?php /* @escapeNotVerified */ echo $block->getGroupTreeJson() ?>);
+                            // render the tree
+                            tree.render();
+                            this.root.expand(false, false);
+                            tree.expandAll();
+
+                            this.ge = new Ext.tree.TreeEditor(tree, {
+                                allowBlank:false,
+                                blankText:'<?php /* @escapeNotVerified */ echo __('A name is required.') ?>',
+                                selectOnFocus:true,
+                                cls:'folder'
+                            });
+
+                            this.root.addListener('beforeinsert', editSet.leftBeforeInsert);
+                            this.root.addListener('beforeappend', editSet.leftBeforeInsert);
+
+                            //this.ge.addListener('beforerender', editSet.editGroup);
+                            this.ge.addListener('beforeshow', editSet.editGroup);
+                            this.ge.addListener('beforecomplete', editSet.beforeRenameGroup);
+                            //this.ge.addListener('startedit', editSet.editGroup);
+
+                            //-------------------------------------------------------------
+
+                            var tree2 = new Ext.tree.TreePanel('tree-div2', {
+                                animate:false,
+                                loader: false,
+                                enableDD:allowDragAndDrop,
+                                containerScroll: true,
+                                rootVisible: false,
+                                lines:false
+                            });
+
+                            // set the root node
+                            this.root2 = new Ext.tree.TreeNode({
+                                text: 'ROOT',
+                                draggable:false,
+                                id:'free'
+                            });
+                            tree2.setRootNode(this.root2);
+                            buildCategoryTree(this.root2, <?php /* @escapeNotVerified */ echo $block->getAttributeTreeJson() ?>);
+
+                            this.root2.addListener('beforeinsert', editSet.rightBeforeInsert);
+                            this.root2.addListener('beforeappend', editSet.rightBeforeAppend);
+
+                            this.root2.addListener('append', editSet.rightAppend);
+                            this.root2.addListener('remove', editSet.rightRemove);
+                            // render the tree
+                            tree2.render();
+                            this.root2.expand(false, false);
+                            tree2.expandAll();
+                        },
+
+                        rebuildTrees : function(){
+                            editSet.req.attributes = new Array();
+                            rootNode = TreePanels.root;
+                            var gIterator = 0;
+                            for( i in rootNode.childNodes ) {
+                                if(rootNode.childNodes[i].id) {
+                                    var group = rootNode.childNodes[i];
+                                    editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1));
+                                    var iterator = 0
+                                    for( j in group.childNodes ) {
+                                        iterator ++;
+                                        if( group.childNodes[j].id > 0 ) {
+                                            editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id);
+                                        }
                                     }
+                                    iterator = 0;
                                 }
-                                iterator = 0;
+                                gIterator ++;
                             }
-                            gIterator ++;
-                        }
 
-                        editSet.req.not_attributes = new Array();
-                        rootNode = TreePanels.root2;
+                            editSet.req.not_attributes = new Array();
+                            rootNode = TreePanels.root2;
 
-                        var iterator = 0;
-                        for( i in rootNode.childNodes ) {
-                            if(rootNode.childNodes[i].id) {
-                                if( rootNode.childNodes[i].id > 0 ) {
-                                    editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id;
+                            var iterator = 0;
+                            for( i in rootNode.childNodes ) {
+                                if(rootNode.childNodes[i].id) {
+                                    if( rootNode.childNodes[i].id > 0 ) {
+                                        editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id;
+                                    }
+                                    iterator ++;
                                 }
-                                iterator ++;
                             }
                         }
-                    }
-                };
-            }();
-
-            function buildCategoryTree(parent, config){
-                if (!config) return null;
-                if (parent && config && config.length){
-                    for (var i = 0; i < config.length; i++) {
-                        var node = new Ext.tree.TreeNode(config[i]);
-                        parent.appendChild(node);
-                        node.addListener('click', editSet.register);
-                        node.addListener('beforemove', editSet.groupBeforeMove);
-                        node.addListener('beforeinsert', editSet.groupBeforeInsert);
-                        node.addListener('beforeappend', editSet.groupBeforeInsert);
-                        if( config[i].children ) {
-                            for( j in config[i].children ) {
-                                if(config[i].children[j].id) {
-                                    newNode = new Ext.tree.TreeNode(config[i].children[j]);
-                                    node.appendChild(newNode);
-                                    newNode.addListener('click', editSet.unregister);
+                    };
+                }();
+
+                function buildCategoryTree(parent, config){
+                    if (!config) return null;
+                    if (parent && config && config.length){
+                        for (var i = 0; i < config.length; i++) {
+                            var node = new Ext.tree.TreeNode(config[i]);
+                            parent.appendChild(node);
+                            node.addListener('click', editSet.register);
+                            node.addListener('beforemove', editSet.groupBeforeMove);
+                            node.addListener('beforeinsert', editSet.groupBeforeInsert);
+                            node.addListener('beforeappend', editSet.groupBeforeInsert);
+                            if( config[i].children ) {
+                                for( j in config[i].children ) {
+                                    if(config[i].children[j].id) {
+                                        newNode = new Ext.tree.TreeNode(config[i].children[j]);
+                                        node.appendChild(newNode);
+                                        newNode.addListener('click', editSet.unregister);
+                                    }
                                 }
                             }
                         }
                     }
                 }
-            }
 
-            editSet = function() {
-                return {
-                    register : function(node) {
-                        editSet.currentNode = node;
-                    },
+                editSet = function() {
+                    return {
+                        register : function(node) {
+                            editSet.currentNode = node;
+                        },
 
-                    unregister : function() {
-                        editSet.currentNode = false;
-                    },
-
-                    submit : function() {
-                        if( TreePanels.root.firstChild == TreePanels.root.lastChild ) {
-                            return;
-                        }
+                        unregister : function() {
+                            editSet.currentNode = false;
+                        },
 
-                        if( editSet.SystemNodesExists(editSet.currentNode) ) {
-                            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>');
-                            return;
-                        }
+                        submit : function() {
+                            if( TreePanels.root.firstChild == TreePanels.root.lastChild ) {
+                                return;
+                            }
 
+                            if( editSet.SystemNodesExists(editSet.currentNode) ) {
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>'
+                                });
+                                return;
+                            }
 
-                        if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) {
-                            TreePanels.root.removeChild(editSet.currentNode);
-                            for( i in editSet.currentNode.childNodes ) {
-                                if( editSet.currentNode.childNodes[i].id ) {
-                                    child = editSet.currentNode.childNodes[i];
-                                    newNode = new Ext.tree.TreeNode(child.attributes);
+                            if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) {
+                                TreePanels.root.removeChild(editSet.currentNode);
+                                for( i in editSet.currentNode.childNodes ) {
+                                    if( editSet.currentNode.childNodes[i].id ) {
+                                        child = editSet.currentNode.childNodes[i];
+                                        newNode = new Ext.tree.TreeNode(child.attributes);
 
-                                    if( child.attributes.is_user_defined == 1 ) {
-                                        TreePanels.root2.appendChild(newNode);
+                                        if( child.attributes.is_user_defined == 1 ) {
+                                            TreePanels.root2.appendChild(newNode);
+                                        }
                                     }
                                 }
+                                editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id;
+                                editSet.currentNode = false;
                             }
-                            editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id;
-                            editSet.currentNode = false;
-                        }
-                    },
-
-                    SystemNodesExists : function(currentNode) {
-                        for (i in currentNode.childNodes) {
-                            if (currentNode.childNodes[i].id) {
-                                child = editSet.currentNode.childNodes[i];
-                                if (child.attributes.is_unassignable != 1) {
-                                    return true;
+                        },
+
+                        SystemNodesExists : function(currentNode) {
+                            for (i in currentNode.childNodes) {
+                                if (currentNode.childNodes[i].id) {
+                                    child = editSet.currentNode.childNodes[i];
+                                    if (child.attributes.is_unassignable != 1) {
+                                        return true;
+                                    }
                                 }
                             }
-                        }
-                    },
-
-                    rightAppend : function(node) {
-                        return;
-                    },
-
-                    addGroup : function() {
-                        var self = this;
-
-                        prompt({
-                            content: "<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>",
-                            value: '',
-                            actions: {
-                                confirm: function (group_name) {
-                                    group_name = group_name.strip();
-                                    if( group_name == '' ) {
-                                        self.addGroup();
-                                    } else if( group_name != false && group_name != null && group_name != '' ) {
-
-                                        if (!editSet.validateGroupName(group_name, 0)) {
-                                            return;
-                                        }
+                        },
 
-                                        var newNode = new Ext.tree.TreeNode({
-                                            text : group_name.escapeHTML(),
-                                            cls : 'folder',
-                                            allowDrop : true,
-                                            allowDrag : true
-                                        });
-                                        TreePanels.root.appendChild(newNode);
-                                        newNode.addListener('beforemove', editSet.groupBeforeMove);
-                                        newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
-                                        newNode.addListener('beforeappend', editSet.groupBeforeInsert);
-                                        newNode.addListener('click', editSet.register);
+                        rightAppend : function(node) {
+                            return;
+                        },
+
+                        addGroup : function() {
+                            prompt({
+                                content: "<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>",
+                                value: "Some value",
+                                actions: {
+                                    confirm: function (group_name) {
+                                        group_name = group_name.strip();
+                                        if( group_name == '' ) {
+                                            self.addGroup();
+                                        } else if( group_name != false && group_name != null && group_name != '' ) {
+
+                                            if (!editSet.validateGroupName(group_name, 0)) {
+                                                return;
+                                            }
+
+                                            var newNode = new Ext.tree.TreeNode({
+                                                text : group_name.escapeHTML(),
+                                                cls : 'folder',
+                                                allowDrop : true,
+                                                allowDrag : true
+                                            });
+                                            TreePanels.root.appendChild(newNode);
+                                            newNode.addListener('beforemove', editSet.groupBeforeMove);
+                                            newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
+                                            newNode.addListener('beforeappend', editSet.groupBeforeInsert);
+                                            newNode.addListener('click', editSet.register);
+                                        }
                                     }
                                 }
+                            });
+                        },
+
+                        editGroup : function(obj) {
+                            if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) {
+                                TreePanels.ge.cancelEdit();
+                                return false;
                             }
-                        });
-                    },
+                        },
 
-                    editGroup : function(obj) {
-                        if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) {
-                             TreePanels.ge.cancelEdit();
-                             return false;
-                        }
-                    },
+                        beforeRenameGroup : function(obj, after, before) {
+                            return editSet.validateGroupName(after, obj.editNode.id);
+                        },
 
-                    beforeRenameGroup : function(obj, after, before) {
-                        return editSet.validateGroupName(after, obj.editNode.id);
-                    },
+                        validateGroupName : function(name, exceptNodeId) {
+                            name = name.strip();
+                            var result = true;
+                            if (name === '') {
+                                result = false;
+                            }
+                            for (var i=0; i < TreePanels.root.childNodes.length; i++) {
+                                if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) {
+                                    errorText = '<?php /* @escapeNotVerified */ echo __('An attribute group named "/name/" already exists".') ?>';
+                                    alert({
+                                        content: errorText.replace("/name/",name)
+                                    });
+                                    result =  false;
+                                }
+                            }
+                            return result;
+                        },
 
-                    validateGroupName : function(name, exceptNodeId) {
-                        name = name.strip();
-                        var result = true;
-                        if (name === '') {
-                            result = false;
-                        }
-                        for (var i=0; i < TreePanels.root.childNodes.length; i++) {
-                            if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) {
-                                errorText = '<?php /* @escapeNotVerified */ echo __('An attribute group named "/name/" already exists".') ?>';
-                                alert(errorText.replace("/name/",name));
-                                result =  false;
+                        save : function() {
+                            if ($('messages')) {
+                                $('messages').update();
                             }
-                        }
-                        return result;
-                    },
+                            TreePanels.rebuildTrees();
+                            if(!jQuery('#set-prop-form').valid()) {
+                                return;
+                            }
+                            editSet.req.attribute_set_name = $('attribute_set_name').value;
+                            if (!editSet.req.form_key) {
+                                editSet.req.form_key = FORM_KEY;
+                            }
+                            var req = {data : Ext.util.JSON.encode(editSet.req)};
+                            var con = new Ext.lib.Ajax.request('POST', '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req);
+                        },
+
+                        success : function(o) {
+                            var response = Ext.util.JSON.decode(o.responseText);
+                            if( response.error ) {
+                                $('messages').update(response.message);
+                            } else if( response.ajaxExpired && response.ajaxRedirect ){
+                                setLocation(response.ajaxRedirect);
+                            } else if( response.url ){
+                                setLocation(response.url);
+                            } else if( response.message ) {
+                                $('messages').update(response.message);
+                            }
+                        },
 
-                    save : function() {
-                        if ($('messages')) {
-                            $('messages').update();
-                        }
-                        TreePanels.rebuildTrees();
-                        if(!jQuery('#set-prop-form').valid()) {
-                            return;
-                        }
-                        editSet.req.attribute_set_name = $('attribute_set_name').value;
-                        if (!editSet.req.form_key) {
-                            editSet.req.form_key = FORM_KEY;
-                        }
-                        var req = {data : Ext.util.JSON.encode(editSet.req)};
-                        var con = new Ext.lib.Ajax.request('POST', '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req);
-                    },
-
-                    success : function(o) {
-                        var response = Ext.util.JSON.decode(o.responseText);
-                        if( response.error ) {
-                            $('messages').update(response.message);
-                        } else if( response.ajaxExpired && response.ajaxRedirect ){
-                            setLocation(response.ajaxRedirect);
-                        } else if( response.url ){
-                            setLocation(response.url);
-                        } else if( response.message ) {
-                            $('messages').update(response.message);
-                        }
-                    },
+                        failure : function(o) {
+                            alert({
+                                content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Sorry, we\'re unable to complete this request.')) ?>'
+                            });
+                        },
 
-                    failure : function(o) {
-                        alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Sorry, we\'re unable to complete this request.')) ?>');
-                    },
+                        groupBeforeMove : function(tree, nodeThis, oldParent, newParent) {
+                            if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) {
+                                return false;
+                            }
 
-                    groupBeforeMove : function(tree, nodeThis, oldParent, newParent) {
-                        if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) {
-                            return false;
-                        }
+                            if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) {
+                                return false;
+                            }
+                        },
 
-                        if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) {
-                            return false;
-                        }
-                    },
-
-                    rightBeforeAppend : function(tree, nodeThis, node, newParent) {
-                        if (node.attributes.is_user_defined == 0) {
-                            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>');
-                            return false;
-                        } else {
-                            return true;
-                        }
-                    },
+                        rightBeforeAppend : function(tree, nodeThis, node, newParent) {
+                            if (node.attributes.is_user_defined == 0) {
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'
+                                });
+                                return false;
+                            } else {
+                                return true;
+                            }
+                        },
 
-                    rightBeforeInsert : function(tree, nodeThis, node, newParent) {
-                        var empty = TreePanels.root2.findChild('id', 'empty');
-                        if (empty) {
-                            return false;
-                        }
+                        rightBeforeInsert : function(tree, nodeThis, node, newParent) {
+                            var empty = TreePanels.root2.findChild('id', 'empty');
+                            if (empty) {
+                                return false;
+                            }
 
-                        if (node.attributes.is_unassignable == 0) {
-                            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>');
-                            return false;
-                        } else {
-                            return true;
-                        }
-                    },
+                            if (node.attributes.is_unassignable == 0) {
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'
+                                });
+                                return false;
+                            } else {
+                                return true;
+                            }
+                        },
 
-                    groupBeforeInsert : function(tree, nodeThis, node, newParent) {
-                        if( node.allowChildren ) {
-                            return false;
-                        }
-                    },
+                        groupBeforeInsert : function(tree, nodeThis, node, newParent) {
+                            if( node.allowChildren ) {
+                                return false;
+                            }
+                        },
 
-                    rightAppend : function(tree, nodeThis, node) {
-                        var empty = TreePanels.root2.findChild('id', 'empty');
-                        if( empty && node.id != 'empty' ) {
-                            TreePanels.root2.removeChild(empty);
-                        }
-                    },
+                        rightAppend : function(tree, nodeThis, node) {
+                            var empty = TreePanels.root2.findChild('id', 'empty');
+                            if( empty && node.id != 'empty' ) {
+                                TreePanels.root2.removeChild(empty);
+                            }
+                        },
 
-                    rightRemove : function(tree, nodeThis, node) {
-                        if( nodeThis.firstChild == null && node.id != 'empty' ) {
-                            var newNode = new Ext.tree.TreeNode({
+                        rightRemove : function(tree, nodeThis, node) {
+                            if( nodeThis.firstChild == null && node.id != 'empty' ) {
+                                var newNode = new Ext.tree.TreeNode({
                                     text : '<?php /* @escapeNotVerified */ echo __('Empty') ?>',
                                     id : 'empty',
                                     cls : 'folder',
@@ -387,35 +401,35 @@ define("tree-panel", ["jquery", 'Magento_Ui/js/modal/prompt', "extjs/ext-tree-ch
                                     allowDrop : false,
                                     allowDrag : false
                                 });
-                            TreePanels.root2.appendChild(newNode);
-                        }
-                    },
+                                TreePanels.root2.appendChild(newNode);
+                            }
+                        },
 
-                    leftBeforeInsert : function(tree, nodeThis, node, newParent) {
-                        if( node.allowChildren == false ) {
-                            return false;
+                        leftBeforeInsert : function(tree, nodeThis, node, newParent) {
+                            if( node.allowChildren == false ) {
+                                return false;
+                            }
                         }
                     }
+                }();
+
+                function initVars() {
+                    editSet.req = {};
+                    editSet.req.attributes = false;
+                    editSet.req.groups = new Array();
+                    editSet.req.not_attributes = false;
+                    editSet.req.attribute_set_name = false;
+                    editSet.req.removeGroups = new Array();
                 }
-            }();
-
-            function initVars() {
-                editSet.req = {};
-                editSet.req.attributes = false;
-                editSet.req.groups = new Array();
-                editSet.req.not_attributes = false;
-                editSet.req.attribute_set_name = false;
-                editSet.req.removeGroups = new Array();
-            }
-
-            jQuery(function() {
-                initVars();
-                TreePanels.init();
-            });
-            //]]>
 
-});
-require(["tree-panel"]);
-</script>
+                jQuery(function() {
+                    initVars();
+                    TreePanels.init();
+                });
+                //]]>
+
+            });
+            require(["tree-panel"]);
+        </script>
     </div>
 </div>
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index 8509164c987..460fa245f2f 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -9,9 +9,10 @@ define([
     'Magento_Customer/js/model/authentication-popup',
     'Magento_Customer/js/customer-data',
     'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/confirm',
     "jquery/ui",
     "mage/decorate"
-], function($, authenticationPopup, customerData, alert){
+], function($, authenticationPopup, customerData, alert, confirm){
 
     $.widget('mage.sidebar', {
         options: {
@@ -47,9 +48,14 @@ define([
             }, this);
             events['click ' + this.options.button.remove] =  function(event) {
                 event.stopPropagation();
-                if (confirm(self.options.confirmMessage)) {
-                    self._removeItem($(event.target));
-                }
+                confirm({
+                    content: self.options.confirmMessage,
+                    actions: {
+                        confirm: function () {
+                            self._removeItem($(event.target))
+                        }
+                    }
+                });
             };
             events['keyup ' + this.options.item.qty] = function(event) {
                 self._showItemButton($(event.target));
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
index d78e50b66be..ea036bbf5d6 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
@@ -9,7 +9,10 @@
 
 ?>
 <script>
-require(["tree-panel"], function(){
+require([
+    "Magento_Ui/js/modal/alert",
+    "tree-panel"
+], function(alert){
 ConfigurableNodeExists = function(currentNode) {
     for (var i in currentNode.childNodes ) {
         if (currentNode.childNodes[i].id) {
@@ -25,7 +28,9 @@ ConfigurableNodeExists = function(currentNode) {
 editSet.submit = editSet.submit.wrap(function(original) {
     if (editSet.currentNode){
         if (ConfigurableNodeExists(editSet.currentNode)) {
-            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains attributes used in configurable products. Please move these attributes to another group and try again.')) ?>');
+            alert({
+                content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains attributes used in configurable products. Please move these attributes to another group and try again.')) ?>'
+            });
             return;
         }
     }
@@ -34,7 +39,9 @@ editSet.submit = editSet.submit.wrap(function(original) {
 
 editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tree, nodeThis, node, newParent) {
     if (node.attributes.is_configurable == 1) {
-        alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>');
+        alert({
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'
+        });
         return false;
     }
     return original(tree, nodeThis, node, newParent);
@@ -42,7 +49,9 @@ editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tr
 
 editSet.rightBeforeInsert = editSet.rightBeforeInsert.wrap(function(original, tree, nodeThis, node, newParent) {
     if (node.attributes.is_configurable == 1) {
-        alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>');
+        alert({
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'
+        });
         return false;
     }
     return original(tree, nodeThis, node, newParent);
diff --git a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
index 82cd7c70667..4ce0e769faf 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
@@ -24,8 +24,10 @@
 ?>
 <script>
 require([
+    "Magento_Ui/js/modal/alert",
+    "Magento_Ui/js/modal/confirm",
     "Magento_Catalog/catalog/product/composite/configure"
-], function(){
+], function(alert, confirm){
 
 <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>cartControl = {
     reload: function (params) {
@@ -51,17 +53,26 @@ require([
     },
 
     removeItem: function (itemId) {
+        var self = this;
+
         if (!itemId) {
-            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>');
-            return false;
-        }
-        if(!confirm('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Are you sure you want to remove this item?')) ?>')) {
+            alert({
+                content:'<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>'
+            });
+
             return false;
         }
 
-        this.reload({'delete':itemId});
+        confirm({
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Are you sure you want to remove this item?')) ?>',
+            actions: {
+                confirm: function(){
+                    self.reload({'delete':itemId});
 
-        return false;
+                    return false;
+                }
+            }
+        });
     }
 };
 
diff --git a/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js b/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
index 7067fbe2e15..cbaaafb86bc 100644
--- a/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
+++ b/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
@@ -5,9 +5,10 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/confirm',
     'jquery/ui',
     'mage/backend/tabs'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, confirm) {
     'use strict';
 
     $.widget('mage.addressTabs', $.mage.tabs, {
@@ -136,9 +137,16 @@ define([
          * @private
          */
         _deleteItemPrompt: function (event, data) {
-            if (window.confirm(this.options.deleteConfirmPrompt)) {
-                this._deleteItem(data.item);
-            }
+            var self = this;
+
+            confirm({
+                content: this.options.deleteConfirmPrompt,
+                actions: {
+                    confirm: function () {
+                        self._deleteItem(data.item);
+                    }
+                }
+            });
         },
 
         /**
diff --git a/app/code/Magento/Customer/view/frontend/web/address.js b/app/code/Magento/Customer/view/frontend/web/address.js
index 5a6ea1b6ee3..4ea88c7067b 100644
--- a/app/code/Magento/Customer/view/frontend/web/address.js
+++ b/app/code/Magento/Customer/view/frontend/web/address.js
@@ -6,9 +6,10 @@
 /*global confirm:true*/
 define([
     "jquery",
+    'Magento_Ui/js/modal/confirm',
     "jquery/ui",
     "mage/translate"
-], function($){
+], function($, confirm){
     "use strict";
     
     $.widget('mage.address', {
@@ -53,14 +54,22 @@ define([
          * @return {Boolean}
          */
         _deleteAddress: function(e) {
-            if (confirm(this.options.deleteConfirmMessage)) {
-                if (typeof $(e.target).parent().data('address') !== 'undefined') {
-                    window.location = this.options.deleteUrlPrefix + $(e.target).parent().data('address');
-                }
-                else {
-                    window.location = this.options.deleteUrlPrefix + $(e.target).data('address');
+            var self = this;
+
+            confirm({
+                content: this.options.deleteConfirmMessage,
+                actions: {
+                    confirm: function() {
+                        if (typeof $(e.target).parent().data('address') !== 'undefined') {
+                            window.location = self.options.deleteUrlPrefix + $(e.target).parent().data('address');
+                        }
+                        else {
+                            window.location = self.options.deleteUrlPrefix + $(e.target).data('address');
+                        }
+                    }
                 }
-            }
+            });
+
             return false;
         }
     });
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
index 6892c319357..43b096acfcc 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
@@ -18,9 +18,10 @@ require([
     'jquery',
     'Magento_Ui/js/lib/registry/registry',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'mage/mage',
     'prototype'
-], function (jQuery, registry, mageTemplate) {
+], function (jQuery, registry, mageTemplate, alert) {
 
 //<![CDATA[>
 var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
@@ -62,7 +63,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                 try {
                     console.log(e);
                 } catch (e2) {
-                    alert(e.name + '\n' + e.message);
+                    alert({
+                        content: e.name + '\n' + e.message
+                    });
                 }
             }
         },
@@ -73,7 +76,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                 try {
                     console.log(e);
                 } catch (e2) {
-                    alert(e.name + '\n' + e.message);
+                    alert({
+                        content: e.name + '\n' + e.message
+                    });
                 }
             }
         },
@@ -91,7 +96,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                 try {
                     console.log(e);
                 } catch (e2) {
-                    alert(e.name + '\n' + e.message);
+                    alert({
+                        content: e.name + '\n' + e.message
+                    });
                 }
             }
         }
diff --git a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
index 6ca97943019..7036d332825 100644
--- a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
@@ -59,10 +59,11 @@ use Magento\Framework\App\TemplateTypesInterface;
 require([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/alert",
     "mage/mage",
     "Magento_Variable/variables",
     "prototype"
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, alert){
 
 //<![CDATA[
     jQuery('#email_template_edit_form').mage('form').mage('validation');
@@ -207,7 +208,9 @@ require([
                           }
                        }.bind(this));
                    } else {
-                       alert('<?php /* @escapeNotVerified */ echo __('The template did not load. Please review the log for details.') ?>');
+                       alert({
+                           content: '<?php /* @escapeNotVerified */ echo __('The template did not load. Please review the log for details.') ?>'
+                       });
                    }
                }.bind(this)
             });
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml
index c9084964d9f..e5c60e69e82 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml
@@ -5,7 +5,10 @@
  */
 ?>
 <script>
-require(['prototype'], function(){
+require([
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(alert){
 
 //<![CDATA[
     // Temporary Class will be replaced after refactoring of import/export functionality
@@ -81,7 +84,9 @@ require(['prototype'], function(){
             form.submit();
             form.action   = oldAction;
         } else {
-            alert('Invalid data');
+            alert({
+                content: 'Invalid data'
+            });
         }
     };
 
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml
index 78b5a7139d7..b7466362088 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml
@@ -10,7 +10,11 @@
 /** @var $block \Magento\ImportExport\Block\Adminhtml\Import\Edit\Before */
 ?>
 <script>
-require(['jquery', 'prototype'], function(jQuery){
+require([
+    'jquery',
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(jQuery, alert){
 
 //<![CDATA[
     // Temporary Class will be replaced after refactoring of import/export functionality
@@ -200,7 +204,11 @@ require(['jquery', 'prototype'], function(jQuery){
          */
         postToFrameProcessResponse: function(response) {
             if ('object' != typeof(response)) {
-                return alert('Invalid response');
+                alert({
+                    content: 'Invalid response'
+                });
+
+                return false;
             }
             $H(response).each(function(pair) {
                 switch (pair.key) {
@@ -231,7 +239,9 @@ require(['jquery', 'prototype'], function(jQuery){
                         });
                         break;
                     default:
-                        alert(pair.key + ': ' + pair.value);
+                        alert({
+                            content: pair.key + ': ' + pair.value
+                        });
                         break;
                 }
             });
diff --git a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
index bd0111de817..bc474987c89 100644
--- a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
+++ b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
@@ -5,9 +5,10 @@
 /*jshint browser:true jquery:true*/
 define([
     'jquery',
+    'Magento_Ui/js/modal/confirm',
     'jquery/ui',
     'mage/mage'
-], function ($) {
+], function ($, confirm) {
     'use strict';
 
     $.widget('mage.paypalCheckout', {
@@ -18,26 +19,43 @@ define([
         _create: function () {
             this.element.on('click', '[data-action="checkout-form-submit"]', $.proxy(function (e) {
                 var returnUrl = $(e.target).data('checkout-url'),
-                    form;
+                    self = this;
 
                 e.preventDefault();
 
                 if (this.options.confirmUrl && this.options.confirmMessage) {
-                    if (window.confirm(this.options.confirmMessage)) {
-                        returnUrl = this.options.confirmUrl;
-                    }
+                    confirm({
+                        content: this.options.confirmMessage,
+                        actions: {
+                            confirm: function() {
+                                returnUrl = self.options.confirmUrl;
+                                self._redirect(returnUrl);
+                            },
+                            cancel: function() {
+                                self.redirect(returnUrl);
+                            }
+                        }
+                    });
+
+                    return false;
                 }
 
-                if (this.options.isCatalogProduct) {
-                    // find the form from which the button was clicked
-                    form = $(this.options.shortcutContainerClass).closest('form');
+                this._redirect(returnUrl);
 
-                    $(form).find(this.options.paypalCheckoutSelector).val(returnUrl);
-                    $(form).submit();
-                } else {
-                    $.mage.redirect(returnUrl);
-                }
             }, this));
+        },
+        _redirect: function(returnUrl) {
+            var form;
+
+            if (this.options.isCatalogProduct) {
+                // find the form from which the button was clicked
+                form = $(this.options.shortcutContainerClass).closest('form');
+
+                $(form).find(this.options.paypalCheckoutSelector).val(returnUrl);
+                $(form).submit();
+            } else {
+                $.mage.redirect(returnUrl);
+            }
         }
     });
 
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 938f24992aa..fbe0fa8248f 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -4,10 +4,11 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/confirm',
     "mage/translate",
     "prototype",
     "Magento_Catalog/catalog/product/composite/configure"
-], function(jQuery){
+], function(jQuery, confirm){
 
 window.AdminOrder = new Class.create();
 
@@ -704,11 +705,18 @@ AdminOrder.prototype = {
     },
 
     clearShoppingCart : function(confirmMessage){
-        if (confirm(confirmMessage)) {
-            this.collectElementsValue = false;
-            order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
-            this.collectElementsValue = true;
-        }
+        var self = this;
+
+        confirm({
+            content: confirmMessage,
+            actions: {
+                confirm: function() {
+                    self.collectElementsValue = false;
+                    order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
+                    self.collectElementsValue = true;
+                }
+            }
+        });
     },
 
     sidebarApplyChanges : function(auxiliaryParams) {
diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
index f2a8fc4b3f0..010132dca1e 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
+++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
@@ -5,7 +5,11 @@
  */
 ?>
 <script>
-require(['jquery', "prototype"], function(jQuery){
+require([
+    'jquery',
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(jQuery, alert){
 
 //<![CDATA[
 var couponTypeSpecific = '<?php /* @escapeNotVerified */ echo \Magento\SalesRule\Model\Rule::COUPON_TYPE_SPECIFIC ?>',
@@ -93,7 +97,9 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
                 }
             }
             if (response && response.error) {
-                alert(response.error);
+                alert({
+                    content: response.error
+                });
             }
         }
     });
diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml
index 0aed9867ff6..3044a6dc5e8 100644
--- a/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml
+++ b/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml
@@ -115,8 +115,9 @@
 <script>
 require([
     "jquery",
+    "Magento_Ui/js/modal/alert",
     "prototype"
-], function(jQuery){
+], function(jQuery, alert){
 
 //<![CDATA[
 var sendEmailCheckbox = $('send_email');
@@ -145,7 +146,9 @@ window.toggleCreateLabelCheckbox = function() {
 }
 window.submitShipment = function(btn) {
     if (!validQtyItems()) {
-        alert('<?php /* @escapeNotVerified */ echo __('Invalid value(s) for Qty to Ship') ?>');
+        alert({
+            content: '<?php /* @escapeNotVerified */ echo __('Invalid value(s) for Qty to Ship') ?>'
+        });
         return;
     }
     var checkbox = $(btn).up('.order-totals').select('#create_shipping_label')[0];
diff --git a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
index b1951c3f2ae..a44f812a5c8 100644
--- a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -8,7 +8,12 @@
 
 ?>
 <script>
-require(["jquery", "collapsable", "prototype"], function(jQuery){
+require([
+    "jquery",
+    "Magento_Ui/js/modal/alert",
+    "collapsable",
+    "prototype"
+], function(jQuery, alert){
 
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
@@ -324,7 +329,9 @@ function saveAttributeInNewSet(promptMessage)
     var rules = ['required-entry', 'validate-no-html-tags'];
     for (var i = 0; i < rules.length; i++) {
         if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
-            alert(jQuery.validator.messages[rules[i]]);
+            alert({
+                content: jQuery.validator.messages[rules[i]]
+            });
             return;
         }
     }
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
index 3674d7feffb..e04ddfeeefe 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
@@ -11,11 +11,12 @@
 <script>
 require([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "jquery/editableMultiselect/js/jquery.multiselect",
     "mage/mage",
     'Magento_Ui/js/modal/modal'
-], function($){
+], function($, alert){
 
     $.widget("adminhtml.dialogRates", $.mage.modal, {
         options: {
@@ -91,14 +92,20 @@ require([
 
                     } else {
                         if (result.error_message)
-                            alert(result.error_message);
+                            alert({
+                                content: result.error_message
+                            });
                         else
-                            alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                            alert({
+                                content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                            });
                     }
                 },
                 error: function () {
                     $('body').trigger('processStop');
-                    alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                    alert({
+                        content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                    });
                 },
                 dataType: "json"
             });
@@ -177,14 +184,20 @@ require([
                                     select.find('option').eq(index).remove();
                                 } else {
                                     if (result.error_message)
-                                        alert(result.error_message);
+                                        alert({
+                                            content: result.error_message
+                                        });
                                     else
-                                        alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                        alert({
+                                            content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                        });
                                 }
                             },
                             error: function () {
                                 $('body').trigger('processStop');
-                                alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                });
                             }
                         };
                         $.ajax(ajaxOptions);
@@ -253,14 +266,20 @@ require([
                                     taxRateForm.dialogRates('closeModal');
                                 } else {
                                     if (result.error_message)
-                                        alert(result.error_message);
+                                        alert({
+                                            content: result.error_message
+                                        });
                                     else
-                                        alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                        alert({
+                                            content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                        });
                                 }
                             },
                             error: function () {
                                 $('body').trigger('processStop');
-                                alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                });
                             }
                         };
                         $.ajax(ajaxOptions);
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml
index 4fe1d1b1aec..192ca0fbcdb 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml
@@ -12,9 +12,10 @@
 <script>
 require([
     "jquery",
+    "Magento_Ui/js/modal/alert",
     "jquery/file-uploader",
     "mage/translate"
-], function($){
+], function($, alert){
 
     $( '#css_file_uploader' ).fileupload({
         dataType: 'json',
@@ -65,7 +66,9 @@ require([
          */
         fail: function(e, data) {
             $(this).val('');
-            alert($.mage.__("We don't recognize this file extension."));
+            alert({
+                content: $.mage.__("We don't recognize this file extension.")
+            });
         }
     });
 
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
index 8c7e677ceeb..5ba996c8446 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
@@ -10,11 +10,12 @@
 <script>
 require([
     "jquery",
-    'mage/template',
+    "mage/template",
+    "Magento_Ui/js/modal/alert",
     "jquery/file-uploader",
     "Magento_Theme/js/sortable",
     "mage/translate"
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
 
     $('#js_files_uploader').fileupload({
         dataType: 'json',
@@ -109,7 +110,9 @@ require([
             $(progressSelector).removeClass('upload-progress').addClass('upload-failure');
 
             $(this).val('');
-            alert($.mage.__("We don't recognize this file extension."));
+            alert({
+                content: $.mage.__("We don't recognize this file extension.")
+            });
         }
     });
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
index bf10209d9d9..6da41f343d0 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
@@ -7,8 +7,9 @@ define([
     'mageUtils',
     'uiRegistry',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout'
-], function (_, utils, registry, Component, layout) {
+    'Magento_Ui/js/core/renderer/layout',
+    'Magento_Ui/js/modal/confirm'
+], function (_, utils, registry, Component, layout, confirm) {
     'use strict';
 
     var childTemplate = {
@@ -152,11 +153,16 @@ define([
          *      it requires function to invoke.
          */
         removeAddress: function (elem) {
-            var confirmed = confirm(this.removeMessage);
-
-            if (confirmed) {
-                this._removeAddress(elem);
-            }
+            var self = this;
+
+            confirm({
+                content: this.removeMessage,
+                actions: {
+                    confirm: function () {
+                        self._removeAddress(elem)
+                    }
+                }
+            });
         },
 
         /**
diff --git a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
index bcdf62afc6b..94a3eb7145b 100644
--- a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
+++ b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
@@ -22,9 +22,10 @@
 require([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     "prototype",
     "extjs/ext-tree-checkbox"
-], function (jQuery, mageTemplate) {
+], function (jQuery, mageTemplate, alert) {
 
 //<![CDATA[
 
@@ -376,7 +377,9 @@ var WidgetInstance = {
                                 chooser.show();
                             }
                         } catch (e) {
-                            alert('Error occurs during loading chooser.');
+                            alert({
+                                content: 'Error occurs during loading chooser.'
+                            });
                         }
                     }
                 });
@@ -469,7 +472,9 @@ var WidgetInstance = {
                                 }
                             }
                         } catch (e) {
-                            alert('Error occurs during loading chooser.');
+                            alert({
+                                content: 'Error occurs during loading chooser.'
+                            });
                         }
                     }
                 });
diff --git a/lib/web/mage/backend/editablemultiselect.js b/lib/web/mage/backend/editablemultiselect.js
index 075770b6f9d..ab4679bbe16 100644
--- a/lib/web/mage/backend/editablemultiselect.js
+++ b/lib/web/mage/backend/editablemultiselect.js
@@ -5,9 +5,10 @@
 define([
     "jquery",
     'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/confirm',
     "jquery/editableMultiselect/js/jquery.editable",
     "jquery/editableMultiselect/js/jquery.multiselect"
-], function($, alert){
+], function($, alert, confirm){
 
 
     /**
@@ -241,35 +242,43 @@ define([
          * @param options
          */
         EditableMultiselect.prototype.deleteEntity = function(options) {
-            if (!confirm(this.deleteConfirmMessage) || !options.delete_button) {
-                return;
-            }
-            // Button that has been clicked
-            var deleteButton = $(options.delete_button),
-                index = deleteButton.parent().index(),
-                select = deleteButton.closest('.mselect-list').prev(),
-                entityId = select.find('option').eq(index).val(),
-                entityInfo = {};
-            entityInfo[this.entityIdName] = entityId;
-            var postData = $.extend(entityInfo, this.submitData);
+            var self = this;
 
-            var ajaxOptions = {
-                type: 'POST',
-                data: postData,
-                dataType: 'json',
-                url: this.deleteUrl,
-                success: function(result, status) {
-                    if (result.success) {
-                        deleteButton.parent().remove();
-                        select.find('option').eq(index).remove();
-                    } else {
-                        alert({
-                            content: result.error_message
-                        });
+            if (options.delete_button) {
+                confirm({
+                    content: this.deleteConfirmMessage,
+                    actions: {
+                        confirm: function() {
+                            // Button that has been clicked
+                            var deleteButton = $(options.delete_button),
+                                index = deleteButton.parent().index(),
+                                select = deleteButton.closest('.mselect-list').prev(),
+                                entityId = select.find('option').eq(index).val(),
+                                entityInfo = {};
+                            entityInfo[self.entityIdName] = entityId;
+                            var postData = $.extend(entityInfo, self.submitData);
+
+                            var ajaxOptions = {
+                                type: 'POST',
+                                data: postData,
+                                dataType: 'json',
+                                url: self.deleteUrl,
+                                success: function(result, status) {
+                                    if (result.success) {
+                                        deleteButton.parent().remove();
+                                        select.find('option').eq(index).remove();
+                                    } else {
+                                        alert({
+                                            content: result.error_message
+                                        });
+                                    }
+                                }
+                            };
+                            $.ajax(ajaxOptions);
+                        }
                     }
-                }
-            };
-            $.ajax(ajaxOptions);
+                });
+            }
         };
     };
 });
\ No newline at end of file
-- 
GitLab


From 54b820bdcee8647181d1dfc4c2252fbcd216cf95 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Mon, 28 Sep 2015 16:53:41 +0300
Subject: [PATCH 140/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../catalog/product/attribute/js.phtml        | 76 +++++++++-------
 .../adminhtml/templates/template/edit.phtml   | 87 ++++++++++++-------
 .../catalog/product/attribute/js.phtml        | 75 +++++++++-------
 3 files changed, 144 insertions(+), 94 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
index 332345cb2c1..dfc022ec9b6 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -11,9 +11,10 @@
 require([
     "jquery",
     'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/prompt',
     "collapsable",
     "prototype"
-], function(jQuery, alert){
+], function(jQuery, alert, prompt){
 
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
@@ -265,39 +266,48 @@ function updateRequriedOptions()
 
 function saveAttributeInNewSet(promptMessage)
 {
-    var newAttributeSetName = prompt(promptMessage, '');
-
-    if (newAttributeSetName == null) {
-        return;
-    }
-
-    var rules = ['required-entry', 'validate-no-html-tags'];
-    for (var i = 0; i < rules.length; i++) {
-        if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
-            alert({
-                content: jQuery.validator.messages[rules[i]]
-            });
-
-            return;
+    var newAttributeSetName;
+
+    prompt({
+        content: promptMessage,
+        actions: {
+            confirm: function(val) {
+                newAttributeSetName = val;
+
+                if (!newAttributeSetName) {
+                    return;
+                }
+
+                var rules = ['required-entry', 'validate-no-html-tags'];
+                for (var i = 0; i < rules.length; i++) {
+                    if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
+                        alert({
+                            content: jQuery.validator.messages[rules[i]]
+                        });
+
+                        return;
+                    }
+                }
+
+                var newAttributeSetNameInputId = 'new_attribute_set_name';
+
+                if ($(newAttributeSetNameInputId)) {
+                    $(newAttributeSetNameInputId).value = newAttributeSetName;
+                } else {
+                    $('edit_form').insert({
+                        top: new Element('input', {
+                            type: 'hidden',
+                            id: newAttributeSetNameInputId,
+                            name: 'new_attribute_set_name',
+                            value: newAttributeSetName
+                        })
+                    });
+                }
+                // Temporary solution will replaced after refactoring of attributes functionality
+                jQuery('#edit_form').triggerHandler('save');
+            }
         }
-    }
-
-    var newAttributeSetNameInputId = 'new_attribute_set_name';
-
-    if ($(newAttributeSetNameInputId)) {
-        $(newAttributeSetNameInputId).value = newAttributeSetName;
-    } else {
-        $('edit_form').insert({
-            top: new Element('input', {
-                type: 'hidden',
-                id: newAttributeSetNameInputId,
-                name: 'new_attribute_set_name',
-                value: newAttributeSetName
-            })
-        });
-    }
-    // Temporary solution will replaced after refactoring of attributes functionality
-    jQuery('#edit_form').triggerHandler('save');
+    });
 }
 
 if($('frontend_input')){
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
index 84c07890a4e..ef4917d29dc 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
@@ -31,9 +31,11 @@ use Magento\Framework\App\TemplateTypesInterface;
 require([
     'jquery',
     'tinymce',
+    'Magento_Ui/js/modal/prompt',
+    'Magento_Ui/js/modal/confirm',
     'mage/mage',
     'prototype'
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, prompt, confirm){
 
 //<![CDATA[
     jQuery('#newsletter_template_edit_form').mage('form').mage('validation');
@@ -81,20 +83,28 @@ require([
         },
 
         stripTags: function () {
-            if(!window.confirm("<?php /* @escapeNotVerified */ echo __('Are you sure that you want to strip all tags?') ?>")) {
-                return false;
-            }
-            if(this.isEditor()) {
-                this.getEditor().turnOff();
-                this.getEditor().getToggleButton().hide();
-            }
-            this.unconvertedText = $(this.id).value;
-            $('convert_button').hide();
-            $('convert_button_back').show();
-            $(this.id).value =  $(this.id).value.stripScripts().stripTags();
-            $('field_template_styles').hide();
-            this.typeChange = true;
-            return false;
+            var self = this;
+
+            confirm({
+                content: "<?php /* @escapeNotVerified */ echo __('Are you sure that you want to strip all tags?') ?>",
+                actions: {
+                    confirm: function(){
+                        if(self.isEditor()) {
+                            self.getEditor().turnOff();
+                            self.getEditor().getToggleButton().hide();
+                        }
+                        self.unconvertedText = $(self.id).value;
+                        $('convert_button').hide();
+                        $('convert_button_back').show();
+                        $(self.id).value =  $(self.id).value.stripScripts().stripTags();
+                        $('field_template_styles').hide();
+                        self.typeChange = true;
+
+                        return false;
+                    }
+                }
+            });
+
         },
 
         unStripTags: function () {
@@ -123,24 +133,38 @@ require([
         },
 
         saveAs: function() {
+            var self = this;
+
             if (this.typeChange) {
                 $('change_flag_element').value = '1';
             }
 
             if($F('code').blank() || $F('code')==templateControl.templateName) {
-               value = prompt('<?php /* @escapeNotVerified */ echo __('Please enter a new template name.') ?>', templateControl.templateName + '<?php /* @escapeNotVerified */ echo __(' Copy') ?>');
-               if(!value) {
-                   if(value !== null) {
-                       $('code').value = '';
-                       // Temporary solution will be replaced after refactoring of newsletter functionality
-                       jQuery('#newsletter_template_edit_form').triggerHandler('save');
-                   }
-                   return false;
-               } else {
-                   $('code').value = value;
-               }
+
+                prompt({
+                    content: '<?php /* @escapeNotVerified */ echo __('Please enter a new template name.') ?>',
+                    value: templateControl.templateName + '<?php /* @escapeNotVerified */ echo __(' Copy') ?>',
+                    actions: {
+                        confirm: function(value) {
+                            $('code').value = value;
+                            self._saveAs();
+
+                            return false;
+                        },
+                        cancel: function(){
+                            $('code').value = '';
+                            // Temporary solution will be replaced after refactoring of newsletter functionality
+                            jQuery('#newsletter_template_edit_form').triggerHandler('save');
+                            self._saveAs();
+
+                            return false;
+                        }
+                    }
+                });
             }
+        },
 
+        _saveAs: function() {
             $('save_as_flag').value = '1';
 
             if(this.isEditor()) {
@@ -176,9 +200,14 @@ require([
         },
 
         deleteTemplate: function() {
-            if(window.confirm("<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this template?') ?>")) {
-                   window.location.href = '<?php /* @escapeNotVerified */ echo $block->getDeleteUrl() ?>';
-            }
+            confirm({
+                content: "<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this template?') ?>",
+                actions: {
+                    confirm: function() {
+                        window.location.href = '<?php /* @escapeNotVerified */ echo $block->getDeleteUrl() ?>';
+                    }
+                }
+            });
         },
 
         isEditor: function() {
diff --git a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
index a44f812a5c8..b0c50d0acb2 100644
--- a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -11,9 +11,10 @@
 require([
     "jquery",
     "Magento_Ui/js/modal/alert",
+    'Magento_Ui/js/modal/prompt',
     "collapsable",
     "prototype"
-], function(jQuery, alert){
+], function(jQuery, alert, prompt){
 
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
@@ -320,38 +321,48 @@ function updateRequriedOptions()
 
 function saveAttributeInNewSet(promptMessage)
 {
-    var newAttributeSetName = prompt(promptMessage, '');
-
-    if (newAttributeSetName == null) {
-        return;
-    }
-
-    var rules = ['required-entry', 'validate-no-html-tags'];
-    for (var i = 0; i < rules.length; i++) {
-        if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
-            alert({
-                content: jQuery.validator.messages[rules[i]]
-            });
-            return;
+    var newAttributeSetName;
+
+    prompt({
+        content: promptMessage,
+        actions: {
+            confirm: function(val) {
+                newAttributeSetName = val;
+
+                if (!newAttributeSetName) {
+                    return;
+                }
+
+                var rules = ['required-entry', 'validate-no-html-tags'];
+                for (var i = 0; i < rules.length; i++) {
+                    if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
+                        alert({
+                            content: jQuery.validator.messages[rules[i]]
+                        });
+
+                        return;
+                    }
+                }
+
+                var newAttributeSetNameInputId = 'new_attribute_set_name';
+
+                if ($(newAttributeSetNameInputId)) {
+                    $(newAttributeSetNameInputId).value = newAttributeSetName;
+                } else {
+                    $('edit_form').insert({
+                        top: new Element('input', {
+                            type: 'hidden',
+                            id: newAttributeSetNameInputId,
+                            name: 'new_attribute_set_name',
+                            value: newAttributeSetName
+                        })
+                    });
+                }
+                // Temporary solution will replaced after refactoring of attributes functionality
+                jQuery('#edit_form').triggerHandler('save');
+            }
         }
-    }
-
-    var newAttributeSetNameInputId = 'new_attribute_set_name';
-
-    if ($(newAttributeSetNameInputId)) {
-        $(newAttributeSetNameInputId).value = newAttributeSetName;
-    } else {
-        $('edit_form').insert({
-            top: new Element('input', {
-                type: 'hidden',
-                id: newAttributeSetNameInputId,
-                name: 'new_attribute_set_name',
-                value: newAttributeSetName
-            })
-        });
-    }
-    // Temporary solution will replaced after refactoring of attributes functionality
-    jQuery('#edit_form').triggerHandler('save');
+    });
 }
 
 if($('frontend_input')){
-- 
GitLab


From e7baa5255fed9dfc646ef2522bd0918acae24688 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Mon, 28 Sep 2015 19:14:59 +0300
Subject: [PATCH 141/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../adminhtml/Magento/backend/web/css/source/_forms.less       | 2 +-
 .../backend/web/css/source/components/_file-insertion.less     | 1 -
 .../backend/web/css/source/components/_modals_extend.less      | 3 +--
 .../Magento/backend/web/css/source/components/_popups.less     | 1 -
 4 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
index 7abfeb8ef90..8e1e484f69a 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
@@ -7,4 +7,4 @@
 @import 'forms/_controls.less';
 @import 'forms/_fields.less';
 @import 'forms/_temp.less';
-@import 'forms/form-wysiwyg.less';
+@import 'forms/_form-wysiwyg.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
index ded39e78caf..76b8b557f2c 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -3,7 +3,6 @@
 //  * See COPYING.txt for license details.
 //  */
 
-
 //
 //  Block 'Insert File'
 //  _________________________________________
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 1b591ce69bd..f0cddc63905 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -24,7 +24,6 @@
 @modal-popup-footer-button__margin: 2rem;
 @modal-popup-footer-button__padding: 1.4rem;
 @modal-popup-footer-button__font-size: 1.5rem;
-//
 
 .modal-popup,
 .modal-slide {
@@ -107,8 +106,8 @@
         button {
             font-size: @modal-popup-footer-button__font-size;
             margin-left: @modal-popup-footer-button__margin;
-            padding-top: @modal-popup-footer-button__padding;
             padding-bottom: @modal-popup-footer-button__padding;
+            padding-top: @modal-popup-footer-button__padding;
         }
     }
 }
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
index c11280a1b89..520b26a148b 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
@@ -389,7 +389,6 @@
 //  Attribute Popup
 //  _____________________________________________
 
-
 .catalog-product-attribute-edit {
     .page-wrapper {
         width: 100%;
-- 
GitLab


From 2cb60d9f50e56ec4c97d8dd5b2c09a446a7d79e1 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Mon, 28 Sep 2015 20:06:47 +0300
Subject: [PATCH 142/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../backend/web/css/source/components/_modals_extend.less       | 1 +
 lib/web/css/source/components/_modals.less                      | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index f0cddc63905..06f270e7973 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -103,6 +103,7 @@
     }
     .modal-footer {
         text-align: right;
+        padding-top: 0;
         button {
             font-size: @modal-popup-footer-button__font-size;
             margin-left: @modal-popup-footer-button__margin;
diff --git a/lib/web/css/source/components/_modals.less b/lib/web/css/source/components/_modals.less
index 9cac4026e97..7bf5699bbfb 100644
--- a/lib/web/css/source/components/_modals.less
+++ b/lib/web/css/source/components/_modals.less
@@ -207,7 +207,7 @@ body {
     .modal-footer {
         margin-top: auto;
         padding-bottom: @modal-popup__padding;
-        //padding-top: @modal-popup__padding;
+        padding-top: @modal-popup__padding;
     }
     .modal-footer-actions {
         text-align: right;
-- 
GitLab


From 8cf6cf6c8e0530e609c7911e24387bc5615426cd Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 28 Sep 2015 20:17:23 +0300
Subject: [PATCH 143/420] MAGETWO-42995: Stabilize functional tests

---
 .../Catalog/view/adminhtml/web/js/custom-options.js    |  3 +++
 .../Test/Block/Adminhtml/Product/Edit/Tab/Options.php  |  2 +-
 lib/web/mage/adminhtml/grid.js                         | 10 +++++-----
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index ae0c4e07298..d68497046a5 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -132,6 +132,9 @@ define([
                         },
                         buttons: [{
                             text: $.mage.__('Import'),
+                            attr: {
+                                id: 'import-custom-options-apply-button'
+                            },
                             'class': 'action-primary action-import import-custom-options-apply-button',
                             click: function (event, massActionTrigger) {
                                 var request = [];
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php
index e1524101cee..0cd45384360 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php
@@ -51,7 +51,7 @@ class Options extends Tab
      *
      * @var string
      */
-    protected $importGrid = "//ancestor::body/div[*[@id='import-container'] and contains(@style,'display: block')]";
+    protected $importGrid = "//ancestor::body//aside[*//div[@id='import-container']]";
 
     /**
      * Fill custom options form on tab
diff --git a/lib/web/mage/adminhtml/grid.js b/lib/web/mage/adminhtml/grid.js
index b1a8acb5e48..a8494b7c078 100644
--- a/lib/web/mage/adminhtml/grid.js
+++ b/lib/web/mage/adminhtml/grid.js
@@ -648,12 +648,12 @@ varienGridMassaction.prototype = {
         var self = this;
 
         if(varienStringArray.count(this.checkedString) == 0) {
-                alert({
-                    content: this.errorText
-                });
+            alert({
+                content: this.errorText
+            });
 
-                return;
-            }
+            return;
+        }
 
         var item = this.getSelectedItem();
         if(!item) {
-- 
GitLab


From eb6f00fa0d50f08443ea0d561f2b52f4a6e006ee Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 29 Sep 2015 01:20:04 +0300
Subject: [PATCH 144/420] JS-193: Test on Windows (IE)

---
 .../templates/product/view/gallery.phtml      |  2 +-
 .../frontend/Magento/blank/etc/view.xml       |  2 +-
 app/design/frontend/Magento/luma/etc/view.xml |  2 +-
 lib/web/fotorama/fotorama.js                  | 18 +++++++------
 lib/web/mage/gallery/gallery.less             |  1 +
 lib/web/magnifier/magnifier.js                | 27 ++++++++++++++-----
 6 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 76efb363f80..7fc0f6828a7 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -46,7 +46,7 @@
                     "carouselNavigation": <?php echo $block->getVar("gallery:navigation:carousel"); ?>
                 },
                 "fullscreen": {
-                    "nav": "<?php echo $block->getVar("gallery:fullscreen:navigation"); ?>",
+                    "nav": "<?php echo $block->getVar("gallery:fullscreen:nav"); ?>",
                     "loop": <?php echo $block->getVar("gallery:fullscreen:loop"); ?>,
                     "navdir": "<?php echo $block->getVar("gallery:fullscreen:navdir"); ?>",
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 2b682ce37d3..3b8a57ea638 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -191,7 +191,7 @@
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
         <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
-        <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+        <var name="gallery:fullscreen:nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index d8d0e04fc8f..b3a11d85b61 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -195,7 +195,7 @@
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
         <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
-        <var name="gallery:fullscreen:navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+        <var name="gallery:fullscreen:nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
         <var name="gallery:fullscreen:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
         <var name="gallery:fullscreen:arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 54c2c2d0260..8a2cf39e4c4 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1614,7 +1614,7 @@ fotoramaVersion = '4.6.4';
             if (!options.thumb || !options.thumb.areSlides) {
                 $el.css($.extend(getDuration(options.time), translate));
             } else {
-                if ($el.selector !== '.fotorama__nav-wrap .fotorama__nav .fotorama__nav__shaft') {
+                if ($el.selector !== "." + navWrapClass + " ." + navClass + " ." + navShaftClass) {
                     $el.css($.extend(getDuration(options.time), translate));
     
                     if ($el.selector === "." + thumbBorderClass) {
@@ -1624,6 +1624,14 @@ fotoramaVersion = '4.6.4';
                             slidePosition;
                         
                         borderStep += options.navdir === 'vertical' ? options.thumb.height : options.thumb.width;
+
+                        if (options.navdir === 'vertical') {
+                            $("." + navClass).height(slideLength * borderStep + 2);
+                            $("." + navClass).width(borderStep + 2);
+                        } else {
+                            $("." + navClass).width(slideLength * borderStep + 1);
+                            $("." + navClass).height(borderStep + 2);
+                        }
     
                         if (((borderPos < options.pos) || (options.pos === 0)) && ((borderPos !== 0) || (options.pos <= borderStep))) {
     
@@ -3752,25 +3760,19 @@ fotoramaVersion = '4.6.4';
                         console.log('>>')
                         if (pos < navShaftTouchTail.min) {
                             slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
-                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
                         } else {
                             slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb) - 1));
-                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
                         }
                     } else {
                         console.log('<<')
                         if (pos < navShaftTouchTail.min) {
                             if(cooDiff < 0) {
                                 slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
-                                shiftSlide(slidePosition, options, borderStep, slidesNumb);
                             } else {
                                 slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb)- 1));
-                                shiftSlide(slidePosition, options, borderStep, slidesNumb);
                             }
-
                         } else {
                             slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
-                            shiftSlide(slidePosition, options, borderStep, slidesNumb);
                         }
                     }
                 }
@@ -3778,9 +3780,9 @@ fotoramaVersion = '4.6.4';
                 if (newPos === 0) {
                     console.log('dont move')
                     slidePosition = borderStep * ((newPos/ borderStep + 1) % slidesNumb - 1) - newPos;
-                    shiftSlide(slidePosition, options, borderStep, slidesNumb);
                 }
             }
+            shiftSlide(slidePosition, options, borderStep, slidesNumb);
             slideDrag.slidePosition = slidePosition;
         }
 
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index d337576bc38..df162ed3db9 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -74,6 +74,7 @@
         height: 50px;
         display: block;
         margin-left: 20px;
+        z-index:1000;
     }
     .fotorama__zoom-out {
         top: 51px;
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 2adcc955bac..a5d89209c9f 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -602,7 +602,7 @@
                     });
                 }
 
-                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDow', function (e) {
+                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
                     if (gallery.data('fotorama').fullScreen) {
                         e.preventDefault();
 
@@ -773,8 +773,11 @@
             var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                 gallery = $('[data-gallery-role="gallery"]'),
                 imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() + 10);
-            e.preventDefault();
+                setedResult = Math.round($image.width() + options.inc);
+            if(e) {
+                e.preventDefault();
+            }
+
 
             if (setedResult >imgOriginalSize.rw) {
                 setedResult = imgOriginalSize.rw;
@@ -787,14 +790,18 @@
             var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
                 gallery = $('[data-gallery-role="gallery"]'),
                 imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() - 10);
-            if(e) {
+                setedResult = Math.round($image.width() - options.inc);
+            if (e) {
                 e.preventDefault();
             }
 
-            if (setedResult < imgOriginalSize.rw/2) {
-                setedResult = imgOriginalSize.rw/2;
+            if ($image.width() > $image.height() && $image.width() <= $image.parent().width()) {
+                return
             }
+            if ($image.width() <= $image.height() && $image.height() <= $image.parent().height()) {
+                return
+            }
+
             $image.css({'width': setedResult, height: 'auto'});
             checkFullscreenImagePosition();
         }
@@ -824,6 +831,12 @@
             $('.fotorama__zoom-out')
                 .off('click', zoomOut)
                 .on('click', zoomOut);
+            $('.fotorama__zoom-in')
+                .off('touchstart', zoomIn)
+                .on('touchstart', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('touchstart', zoomOut)
+                .on('touchstart', zoomOut);
         }
 
         $(document).on('mousemove', onMousemove);
-- 
GitLab


From 3840124c4427144c053189a188afcb4d4feaec7f Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Tue, 29 Sep 2015 02:28:32 +0300
Subject: [PATCH 145/420] JS-191: Implement buttons actions

---
 .../templates/product/view/gallery.phtml      |  10 +-
 .../frontend/Magento/blank/etc/view.xml       |   3 +-
 app/design/frontend/Magento/luma/etc/view.xml |   7 +-
 lib/web/fotorama/fotorama.js                  | 412 +++++++++---------
 4 files changed, 215 insertions(+), 217 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 7fc0f6828a7..bb608815123 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -43,7 +43,9 @@
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:transition:duration"); ?>,
                     "transition": "<?php echo $block->getVar("gallery:transition:effect"); ?>",
-                    "carouselNavigation": <?php echo $block->getVar("gallery:navigation:carousel"); ?>
+                    "navarrows": <?php echo $block->getVar("gallery:navarrows"); ?>,
+                    "navtype": "<?php echo $block->getVar("gallery:navtype"); ?>",
+                    "navdir": "<?php echo $block->getVar("gallery:navdir"); ?>"
                 },
                 "fullscreen": {
                     "nav": "<?php echo $block->getVar("gallery:fullscreen:nav"); ?>",
@@ -51,12 +53,8 @@
                     "navdir": "<?php echo $block->getVar("gallery:fullscreen:navdir"); ?>",
                     "arrows": <?php echo $block->getVar("gallery:fullscreen:arrows"); ?>,
                     "showCaption": <?php echo $block->getVar("gallery:fullscreen:caption"); ?>,
-                    "thumbwidth": <?php echo $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
-                    "thumbheight": <?php echo $block->getVar("gallery:fullscreen:thumbheight")
-                        ?: $block->getVar("gallery:fullscreen:thumbwidth"); ?>,
                     "transitionduration": <?php echo $block->getVar("gallery:fullscreen:transition:duration"); ?>,
-                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>",
-                    "carouselNavigation": <?php echo $block->getVar("gallery:fullscreen:navigation:carousel"); ?>
+                    "transition": "<?php echo $block->getVar("gallery:fullscreen:transition:effect"); ?>"
                 },
                 "breakpoints": {
                     "mobile": {
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 3b8a57ea638..cd60ce49c25 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -187,9 +187,10 @@
         <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
         <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navarrows">true</var> <!-- Turn on/off on the thumbs navigation sides (true/false) -->
+        <var name="gallery:navtype">slides</var> <!-- Sliding type of thumbnails (slides/thumbs) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
-        <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index b3a11d85b61..6c08032df1d 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -184,16 +184,17 @@
     <vars module="Magento_Catalog">
 
         <!-- New gallery and magnifier theme settings -->
-        <var name="gallery:nav">dots</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+        <var name="gallery:nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
         <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) -->
         <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
         <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:caption">true</var> <!-- Display alt text as image title (true/false) -->
+        <var name="gallery:caption">false</var> <!-- Display alt text as image title (true/false) -->
         <var name="gallery:allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
         <var name="gallery:navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+        <var name="gallery:navarrows">true</var> <!-- Turn on/off on the thumbs navigation sides (true/false) -->
+        <var name="gallery:navtype">slides</var> <!-- Sliding type of thumbnails (slides/thumbs) -->
         <var name="gallery:transition:effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
         <var name="gallery:transition:duration">500</var> <!-- Sets transition duration in ms -->
-        <var name="gallery:navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
 
         <var name="gallery:fullscreen:nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
         <var name="gallery:fullscreen:loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 8a2cf39e4c4..512886e5df4 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -76,6 +76,8 @@ fotoramaVersion = '4.6.4';
         imgFullClass = imgClass + '--full',
 
         thumbClass = _fotoramaClass + '__thumb',
+        thumbArrLeft = thumbClass + '__arr--left',
+        thumbArrRight = thumbClass + '__arr--right',
         thumbBorderClass = thumbClass + '-border',
 
         htmlClass = _fotoramaClass + '__html',
@@ -91,15 +93,12 @@ fotoramaVersion = '4.6.4';
         verticalImageClass = _fotoramaClass + '_vertical_ratio';
     var JQUERY_VERSION = $ && $.fn.jquery.split('.');
 
-    var borderPos = 0,
-        curSlide = 1;
-
     if (!JQUERY_VERSION
         || JQUERY_VERSION[0] < 1
         || (JQUERY_VERSION[0] == 1 && JQUERY_VERSION[1] < 8)) {
         throw 'Fotorama requires jQuery 1.8 or later and will not run without it.';
     }
-// My Underscore :-)
+
     var _ = {};
     /* Modernizr 2.8.3 (Custom Build) | MIT & BSD
      * Build: http://modernizr.com/download/#-csstransforms3d-csstransitions-touch-prefixed
@@ -908,6 +907,12 @@ fotoramaVersion = '4.6.4';
 
         MAX_WIDTH = 1200,
 
+        /**
+         * Number of thumbnails in slide. Calculated only on setOptions and resize.
+         * @type {number}
+         */
+        thumbsPerSlide = 1,
+
         OPTIONS = {
 
             /**
@@ -967,7 +972,6 @@ fotoramaVersion = '4.6.4';
             thumbheight: THUMB_SIZE,
             thumbmargin: MARGIN,
             thumbborderwidth: MARGIN,
-            carouselnavigation: true,
 
             allowfullscreen: false, // true || 'native'
 
@@ -998,7 +1002,22 @@ fotoramaVersion = '4.6.4';
             shadows: true,
             spinner: null,
             showcaption: true,
-            navdir: 'horisontal'
+
+            /**
+             * Set type of thumbnail navigation
+             */
+            navdir: 'horisontal',
+
+            /**
+             * Set configuration to show or hide arrows in thumb navigation
+             */
+            navarrows: true,
+
+            /**
+             * Set type of navigation. Can be thumbs or slides
+             */
+            navtype: 'thumbs'
+
         },
 
         KEYBOARD_OPTIONS = {
@@ -1497,6 +1516,53 @@ fotoramaVersion = '4.6.4';
         el.addEventListener ? el.addEventListener(e, fn, !!bool) : el.attachEvent('on' + e, fn);
     }
 
+    /**
+     *
+     * @param position guess position for navShaft
+     * @param restriction object contains min and max values for position
+     * @returns {*} filtered value of position
+     */
+    function validateRestrictions(position, restriction) {
+        if (position > restriction.max) {
+            position = restriction.max;
+        } else {
+            if (position < restriction.min) {
+                position = restriction.min;
+            }
+        }
+        return position;
+    }
+
+    function validateSlidePos(opt, navShaftTouchTail, guessIndex, offsetNav, $guessNavFrame, $navWrap, dir){
+        var position,
+            size,
+            wrapSize;
+        if (dir === 'horisontal') {
+            size = opt.thumbwidth;
+            wrapSize = $navWrap.width();
+        } else {
+            size = opt.thumbheight;
+            wrapSize = $navWrap.height();
+        }
+        if ((size + opt.margin) * (guessIndex + 1) >= wrapSize - offsetNav) {
+            if (dir === 'horisontal') {
+                position = -$guessNavFrame.position().left;
+            } else {
+                position = -$guessNavFrame.position().top;
+            }
+        }
+        if ((size + opt.margin) * (guessIndex) <= Math.abs(offsetNav)) {
+            if (dir === 'horisontal') {
+                position = -$guessNavFrame.position().left + wrapSize - (size + opt.margin);
+            } else {
+                position = -$guessNavFrame.position().top + wrapSize - (size + opt.margin);
+            }
+        }
+        position = validateRestrictions(position, navShaftTouchTail);
+
+        return position;
+    }
+
     function elIsDisabled(el) {
         return !!el.getAttribute('disabled');
     }
@@ -1604,6 +1670,7 @@ fotoramaVersion = '4.6.4';
         if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) {
             elPos = options.overPos;
         }
+
         var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
         if (elData && elData.sliding) {
             elData.sliding = true;
@@ -1611,51 +1678,7 @@ fotoramaVersion = '4.6.4';
 
         if (CSS3) {
 
-            if (!options.thumb || !options.thumb.areSlides) {
-                $el.css($.extend(getDuration(options.time), translate));
-            } else {
-                if ($el.selector !== "." + navWrapClass + " ." + navClass + " ." + navShaftClass) {
-                    $el.css($.extend(getDuration(options.time), translate));
-    
-                    if ($el.selector === "." + thumbBorderClass) {
-
-                        var slideLength = Math.floor($el.closest('.' + wrapClass).width() / options.thumb.width),
-                            borderStep = options.thumb.margin,
-                            slidePosition;
-                        
-                        borderStep += options.navdir === 'vertical' ? options.thumb.height : options.thumb.width;
-
-                        if (options.navdir === 'vertical') {
-                            $("." + navClass).height(slideLength * borderStep + 2);
-                            $("." + navClass).width(borderStep + 2);
-                        } else {
-                            $("." + navClass).width(slideLength * borderStep + 1);
-                            $("." + navClass).height(borderStep + 2);
-                        }
-    
-                        if (((borderPos < options.pos) || (options.pos === 0)) && ((borderPos !== 0) || (options.pos <= borderStep))) {
-    
-                            if (Math.abs(Math.round(options.pos / borderStep)) % slideLength === 0) {
-                                slidePosition = - options.pos;
-                                shiftSlide(slidePosition, options, borderStep, slideLength);
-                            }
-                        } else {
-    
-                            if (Math.abs(Math.round(options.pos / borderStep)) % slideLength === slideLength - 1) {
-                                slidePosition = borderStep * (slideLength - 1) - options.pos;
-                                shiftSlide(slidePosition, options, borderStep, slideLength);
-                            } else {
-                                if (borderPos === 0) {
-                                    slidePosition = borderStep * ((options.pos / borderStep + 1) % slideLength - 1) - options.pos;
-                                    shiftSlide(slidePosition, options, borderStep, slideLength);
-                                }
-                            }  
-                        }
-                        borderPos = options.pos;
-                        curSlide = Math.floor(borderPos / borderStep / slideLength) + 1;
-                    }
-                }
-            }
+            $el.css($.extend(getDuration(options.time), translate));
 
             if (options.time > 10) {
                 afterTransition($el, 'transform', onEndFn, options.time);
@@ -1664,21 +1687,9 @@ fotoramaVersion = '4.6.4';
             }
         } else {
             $el.stop().animate(translate, options.time, BEZIER, onEndFn);
-            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
-            $('.' + navShaftClass).css($.extend(getDuration(options.time), translate));
         }
     }
 
-    function shiftSlide(slidePosition, options, borderStep, slideLength) {
-        var translate = $.extend(getTranslate(slidePosition, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
-        if (options.direction === 'vertical') {
-            options.measures.h = -slidePosition + borderStep * (slideLength - 1);
-        } else {
-            options.measures.nw = -slidePosition + borderStep * (slideLength - 1);
-        }
-        $('.' + navShaftClass).css($.extend(getDuration(options.time), translate));
-    }
-
     function fade($el1, $el2, $frames, options, fadeStack, chain) {
         var chainedFLAG = typeof chain !== 'undefined';
         if (!chainedFLAG) {
@@ -1950,12 +1961,10 @@ fotoramaVersion = '4.6.4';
 
                 edge = findShadowEdge(moveElPos, min, max, dir);
 
-                if (!options.carouselnavigation) {
-                    if (moveElPos <= min) {
-                        moveElPos = edgeResistance(moveElPos, min);
-                    } else if (moveElPos >= max) {
-                        moveElPos = edgeResistance(moveElPos, max);
-                    }
+                if (moveElPos <= min) {
+                    moveElPos = edgeResistance(moveElPos, min);
+                } else if (moveElPos >= max) {
+                    moveElPos = edgeResistance(moveElPos, max);
                 }
 
                 if (!tail.noMove) {
@@ -2047,7 +2056,6 @@ fotoramaVersion = '4.6.4';
                 moved: result.moved || longTouchFLAG && snap,
                 pos: moveElPos,
                 newPos: newPos,
-                cooDiff: (startCoo - coo),
                 overPos: overPos,
                 time: time,
                 dir:dir
@@ -2142,6 +2150,8 @@ fotoramaVersion = '4.6.4';
             navShaftData = $navShaft.data(),
 
             $thumbBorder = $fotorama.find(cls(thumbBorderClass)),
+            $thumbArrLeft = $fotorama.find(cls(thumbArrLeft)),
+            $thumbArrRight = $fotorama.find(cls(thumbArrRight)),
 
             $fullscreenIcon = $fotorama.find(cls(fullscreenIconClass)),
             fullscreenIcon = $fullscreenIcon[0],
@@ -2164,7 +2174,6 @@ fotoramaVersion = '4.6.4';
             nextIndex,
             nextAutoplayIndex,
             startIndex,
-            slidesNumb,
 
             o_loop,
             o_nav,
@@ -2379,6 +2388,21 @@ fotoramaVersion = '4.6.4';
             opts.autoplay = Math.max(+interval || AUTOPLAY_INTERVAL, o_transitionDuration * 1.5);
         }
 
+        function updateThumbArrow(opt) {
+            if (opt.navarrows && opt.nav === 'thumbs') {
+                $thumbArrLeft.show();
+                $thumbArrRight.show();
+            } else {
+                $thumbArrLeft.hide();
+                $thumbArrRight.hide();
+            }
+
+        }
+
+        function getThumbsInSlide($el, opts) {
+            return Math.floor($wrap.width() / (opts.thumbwidth + opts.thumbmargin));
+        }
+
         /**
          * Options on the fly
          * */
@@ -2388,6 +2412,7 @@ fotoramaVersion = '4.6.4';
             }
 
             that.options = opts = optionsToLowerCase(opts);
+            thumbsPerSlide = getThumbsInSlide($wrap, opts);
 
             o_fade = (opts.transition === 'crossfade' || opts.transition === 'dissolve');
 
@@ -2398,7 +2423,7 @@ fotoramaVersion = '4.6.4';
             o_rtl = opts.direction === 'rtl';
 
             o_keyboard = $.extend({}, opts.keyboard && KEYBOARD_OPTIONS, opts.keyboard);
-
+            updateThumbArrow(opts);
             var classes = {add: [], remove: []};
 
             function addOrRemoveClass(FLAG, value) {
@@ -2410,7 +2435,7 @@ fotoramaVersion = '4.6.4';
                 o_navTop = opts.navposition === 'top';
                 classes.remove.push(selectClass);
 
-                $arrs.toggle(!!opts.arrows);
+                $arrs.toggle(opts.arrows);
             } else {
                 o_nav = false;
                 $arrs.hide();
@@ -2442,7 +2467,6 @@ fotoramaVersion = '4.6.4';
                 frameDraw(size, 'navThumb');
 
                 $navFrame = $navThumbFrame;
-                //
                 navFrameKey = NAV_THUMB_FRAME_KEY;
 
                 setStyle($style, $.Fotorama.jst.style({
@@ -2508,7 +2532,6 @@ fotoramaVersion = '4.6.4';
 
             lastOptions = $.extend({}, opts);
             setStagePosition();
-            that.showSlide(curSlide);
         }
 
         function normalizeIndex(index) {
@@ -2538,12 +2561,10 @@ fotoramaVersion = '4.6.4';
         }
 
         function setNavShaftMinMax() {
-            var isVerticalDir = (opts.navdir === 'vertical'),
-                measureToCalculate = opts.thumbmargin + $('.' + navFrameThumbClass).length * (
-                isVerticalDir ? opts.thumbheight : opts.thumbwidth + opts.thumbmargin),
-                param = (opts.carouselnavigation ? measureToCalculate :
-                    isVerticalDir ?  $navShaft.height(): $navShaft.width()),
-                mainParam = isVerticalDir ? measures.h : measures.nw;
+
+            var isVerticalDir = (opts.navdir === 'vertical');
+            var param = isVerticalDir ? $navShaft.height() : $navShaft.width();
+            var mainParam = isVerticalDir ? measures.h : measures.nw;
             navShaftTouchTail.min = Math.min(0, mainParam - param);
             navShaftTouchTail.max = 0;
             navShaftTouchTail.direction = opts.navdir;
@@ -2661,7 +2682,7 @@ fotoramaVersion = '4.6.4';
                         .addClass(imgClass + (fullFLAG ? ' ' + imgFullClass : ''))
                         .prependTo($frame);
 
-                    if ($frame.hasClass(stageFrameClass) && !$frame.hasClass(videoContainerClass)) {
+                    if ($frame.hasClass(stageFrameClass)) {
                         $frame.attr("href", $img.attr("src"));
                     }
 
@@ -2759,11 +2780,7 @@ fotoramaVersion = '4.6.4';
                 setTimeout(function () {
                     lockScroll($nav);
                 }, 0);
-                if (!opts.carouselnavigation) {
-                    slideNavShaft({time: o_transitionDuration, guessIndex: $(this).data().eq, minMax: navShaftTouchTail});
-                } else {
-                    that.showSlide(Math.floor($(this).data().eq / slidesNumb) + 1)
-                }
+                slideNavShaft({time: o_transitionDuration, guessIndex: $(this).data().eq, minMax: navShaftTouchTail});
             });
         }
 
@@ -2822,7 +2839,6 @@ fotoramaVersion = '4.6.4';
                     addNavFrameEvents(frame);
                     frameData.$wrap = $frame.children(':first');
 
-
                     $navThumbFrame = $navThumbFrame.add($frame);
                     if (dataFrame.video) {
                         frameData.$wrap.append($videoPlay.clone());
@@ -2863,6 +2879,7 @@ fotoramaVersion = '4.6.4';
                 rightLimit,
                 exceedLimit;
 
+
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
             leftLimit = -pos;
@@ -2885,8 +2902,8 @@ fotoramaVersion = '4.6.4';
                     },
                     specialMeasures = getSpecialMeasures(),
                     exceedLimit = opts.navdir === 'vertical' ?
-                        thisData.t > rightLimit : thisData.l > rightLimit;
-                    specialMeasures.w = thisData.w;
+                    thisData.t > rightLimit : thisData.l > rightLimit;
+                specialMeasures.w = thisData.w;
 
                 if (thisData.l + thisData.w < leftLimit
                     || exceedLimit
@@ -3014,46 +3031,61 @@ fotoramaVersion = '4.6.4';
                 pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l),
                 width: navFrameData.w,
                 height: navFrameData.h,
-                direction: opts.navdir,
-                thumb: {
-                    width: opts.thumbwidth,
-                    height: opts.thumbheight,
-                    margin: opts.thumbmargin,
-                    areSlides: opts.carouselnavigation,
-                    measures: measures
-                },
-                measures: measures
+                direction: opts.navdir
             });
         }
 
         function slideNavShaft(options) {
-            var $guessNavFrame = data[options.guessIndex][navFrameKey];
+            var $guessNavFrame = data[options.guessIndex][navFrameKey],
+                typeOfAnimation = opts.navtype;
+
+            var overflowFLAG,
+                time,
+                minMax,
+                boundTop,
+                boundLeft,
+                l,
+                pos,
+                x;
+
             if ($guessNavFrame) {
-                var overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max,
-                    minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]),
-                    boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
-                    boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
-                    l = (opts.navdir === 'vertical' ? boundTop : boundLeft),
-                    pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max),
+                if (typeOfAnimation === 'thumbs') {
+                    overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max;
+                    minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]);
+                    boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max));
+                    boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max));
+                    l = (opts.navdir === 'vertical' ? boundTop : boundLeft);
+                    pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max);
                     time = options.time * 1.1;
-                slide($navShaft, {
-                    time: time,
-                    pos: pos || 0,
-                    direction: opts.navdir,
-                    onEnd: function () {
-                        thumbsDraw(pos, true);
-                    },
-                    thumb: {
-                        width: opts.thumbwidth,
-                        height: opts.thumbheight,
-                        margin: opts.thumbmargin,
-                        areSlides: opts.carouselnavigation,
-                        measures: measures
-                    }
-                });
+                    slide($navShaft, {
+                        time: time,
+                        pos: pos || 0,
+                        direction: opts.navdir,
+                        onEnd: function () {
+                            thumbsDraw(pos, true);
+                        }
+                    });
 
-                setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
-                slideNavShaft.l = l;
+                    setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
+                    slideNavShaft.l = l;
+                } else {
+                    x = readPosition($navShaft, opts.navdir);
+                    time = options.time * 1.11;
+
+                    pos = validateSlidePos(opts, navShaftTouchTail, options.guessIndex, x, $guessNavFrame, $navWrap, opts.navdir);
+
+                    if (pos != undefined) {
+                        slide($navShaft, {
+                            time: time,
+                            pos: pos || 0,
+                            direction: opts.navdir,
+                            onEnd: function () {
+                                thumbsDraw(pos, true);
+                            }
+                        });
+                    }
+                    setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
+                }
             }
         }
 
@@ -3201,27 +3233,6 @@ fotoramaVersion = '4.6.4';
 
         }
 
-        that.showSlide = function(index) {
-            if (index > 0 && activeFrame) {
-                index --;
-                var borderStep = opts.navdir === 'vertical' ? 
-                        opts.thumbheight + opts.thumbmargin :
-                        opts.thumbwidth + opts.thumbmargin,
-                    slideLength = Math.floor($('.' + wrapClass).width()/opts.thumbwidth),
-                    options = {
-                        time: opts.transitionduration,
-                        direction: opts.navdir,
-                        width: activeFrame[navFrameKey].data().w,
-                        width: activeFrame[navFrameKey].data().h,
-                        measures: measures
-                    },
-                    slidePosition;
-                slidePosition = -(index * borderStep * slideLength);
-                shiftSlide(slidePosition, options, borderStep, slideLength);
-                thumbsDraw(false, true);
-            }
-        };
-
         that.startAutoplay = function (interval) {
             if (that.autoplay) return this;
             pausedAutoplayFLAG = stoppedAutoplayFLAG = false;
@@ -3239,6 +3250,29 @@ fotoramaVersion = '4.6.4';
             return this;
         };
 
+        that.showSlide = function (slideDir) {
+            var currentPosition = readPosition($navShaft, opts.navdir),
+                pos,
+                time = 500 * 1.1,
+                size = opts.navdir === 'horisontal' ? opts.thumbwidth : opts.thumbheight,
+                onEnd = function (pos) {
+                    thumbsDraw(pos, true);
+                };
+            if (slideDir === 'next') {
+                pos = currentPosition - (size + opts.margin) * thumbsPerSlide;
+            }
+            if (slideDir === 'prev') {
+                pos = currentPosition + (size + opts.margin) * thumbsPerSlide
+            }
+            pos = validateRestrictions(pos, navShaftTouchTail);
+            slide($navShaft, {
+                time: time,
+                pos: pos,
+                direction: opts.navdir,
+                onEnd: onEnd
+            });
+        };
+
         that.show = function (options) {
             var index;
 
@@ -3320,7 +3354,7 @@ fotoramaVersion = '4.6.4';
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
                     time: time,
-                    onEnd: onEnd
+                    onEnd: onEnd,
                 });
             } else {
                 var $activeFrame = activeFrame[STAGE_FRAME_KEY],
@@ -3352,10 +3386,6 @@ fotoramaVersion = '4.6.4';
             showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
             lastActiveIndex = activeIndex;
 
-            if (opts.carouselnavigation) {
-                that.showSlide(curSlide);
-            }
-
             return this;
         };
 
@@ -3450,6 +3480,7 @@ fotoramaVersion = '4.6.4';
             var time = arguments[1] || 0,
                 setFLAG = arguments[2];
 
+            thumbsPerSlide = getThumbsInSlide($wrap, opts);
             extendMeasures(!that.fullScreen ? optionsToLowerCase(options) : {
                 width: $(window).width(),
                 maxwidth: null,
@@ -3485,8 +3516,6 @@ fotoramaVersion = '4.6.4';
 
                 height = height || (ratio && width / ratio);
 
-                slidesNumb = Math.floor($wrap.width()/opts.thumbwidth);
-
                 if (height) {
                     width = Math.round(width);
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
@@ -3740,51 +3769,6 @@ fotoramaVersion = '4.6.4';
             direction: 'horizontal'
 
         });
-        function slideDrag (pos, newPos,cooDiff) {
-            console.log(pos, newPos);
-            if (opts.carouselnavigation) {
-                var borderStep = opts.navdir === 'vertical' ?
-                    opts.thumbheight + opts.thumbmargin :
-                    opts.thumbwidth + opts.thumbmargin,
-                    slidePosition,
-                    options = {
-                        time: opts.transitionduration,
-                        direction: opts.navdir,
-                        width: activeFrame[navFrameKey].data().w,
-                        height: activeFrame[navFrameKey].data().h,
-                        measures: measures
-                    };
-
-                if (newPos !== 0 && pos < 0) {
-                    if(pos >= newPos) {
-                        console.log('>>')
-                        if (pos < navShaftTouchTail.min) {
-                            slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
-                        } else {
-                            slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb) - 1));
-                        }
-                    } else {
-                        console.log('<<')
-                        if (pos < navShaftTouchTail.min) {
-                            if(cooDiff < 0) {
-                                slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
-                            } else {
-                                slidePosition = newPos - (borderStep * slidesNumb + Math.round(newPos % (borderStep * slidesNumb)- 1));
-                            }
-                        } else {
-                            slidePosition = newPos + (-Math.ceil(newPos % (borderStep * slidesNumb)));
-                        }
-                    }
-                }
-
-                if (newPos === 0) {
-                    console.log('dont move')
-                    slidePosition = borderStep * ((newPos/ borderStep + 1) % slidesNumb - 1) - newPos;
-                }
-            }
-            shiftSlide(slidePosition, options, borderStep, slidesNumb);
-            slideDrag.slidePosition = slidePosition;
-        }
 
         navShaftTouchTail = moveOnTouch($navShaft, {
             onStart: onTouchStart,
@@ -3795,7 +3779,7 @@ fotoramaVersion = '4.6.4';
             onEnd: function (result) {
 
                 function onEnd() {
-                    slideNavShaft.l = opts.carouselnavigation ? slideDrag.slidePosition:  result.newPos;
+                    slideNavShaft.l = result.newPos;
                     releaseAutoplay();
                     changeAutoplay();
                     thumbsDraw(result.newPos, true);
@@ -3805,23 +3789,17 @@ fotoramaVersion = '4.6.4';
                     var target = result.$target.closest('.' + navFrameClass, $navShaft)[0];
                     target && onNavFrameClick.call(target, result.startEvent);
                 } else if (result.pos !== result.newPos) {
-                    console.log('catch');
-                    opts.carouselnavigation && slideDrag(result.pos, result.newPos,result.cooDiff);
                     pausedAutoplayFLAG = true;
-                    !opts.carouselnavigation && slide($navShaft, {
+                    slide($navShaft, {
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
                         direction: opts.navdir,
                         onEnd: onEnd
                     });
-
-                    thumbsDraw(opts.carouselnavigation ? slideDrag.slidePosition : result.newPos, true);
+                    thumbsDraw(result.newPos);
                     o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
-
                 } else {
-                    console.log('else worked');
-                    opts.carouselnavigation &&slideDrag(result.pos, result.newPos,result.cooDiff);
                     onEnd();
                 }
             },
@@ -3829,8 +3807,7 @@ fotoramaVersion = '4.6.4';
             timeHigh: 2,
             friction: 5,
             $wrap: $nav,
-            direction: opts.navdir,
-            carouselnavigation: opts.carouselnavigation
+            direction: opts.navdir
         });
 
         stageWheelTail = wheel($stage, {
@@ -3892,6 +3869,27 @@ fotoramaVersion = '4.6.4';
             onTouchEnd: onTouchEnd
         });
 
+        smartClick($thumbArrLeft, function (e) {
+            stopEvent(e);
+            if (opts.navtype === 'thumbs') {
+
+                that.show('<');
+            } else {
+                that.showSlide('prev')
+            }
+        });
+
+        smartClick($thumbArrRight, function (e) {
+            stopEvent(e);
+            if (opts.navtype === 'thumbs') {
+                that.show('>');
+            } else {
+                that.showSlide('next')
+            }
+
+        });
+
+
         function addFocusOnControls(el) {
             addFocus(el, function () {
                 setTimeout(function () {
-- 
GitLab


From 1c95f942136c686c9909d5a0a4abba30bc54c248 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 29 Sep 2015 09:26:18 +0300
Subject: [PATCH 146/420] MAGETWO-42990: Stabilization

---
 .../Ui/view/base/web/js/modal/modal.js        | 42 ++++++++++---------
 .../web/templates/modal/modal-custom.html     |  6 +--
 .../base/web/templates/modal/modal-popup.html |  6 +--
 .../base/web/templates/modal/modal-slide.html |  6 +--
 4 files changed, 32 insertions(+), 28 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 6c868ae782c..847fe727ffa 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -81,7 +81,6 @@ define([
                 }
             }]
         },
-        previosFocused: null,
         keyEventHandlers: {
 
             /**
@@ -89,20 +88,9 @@ define([
              * set focus to elements
              */
             tabKey: function () {
-                if (document.activeElement === this.modal.find(this.options.focusableStart)[0]) {
+                if (document.activeElement === this.modal[0]) {
                     this._setFocus('start');
                 }
-
-                if (document.activeElement === this.modal.find(this.options.focusableScope)[0] &&
-                    this.previosFocused === this.modal.find(this.options.modalCloseBtn)[0]) {
-                    this._setFocus('start');
-                }
-
-                if (document.activeElement === this.modal.find(this.options.focusableEnd)[0]) {
-                    this._setFocus('end');
-                }
-
-                this.previosFocused = document.activeElement;
             },
 
             /**
@@ -123,7 +111,8 @@ define([
         _create: function () {
             _.bindAll(
                 this,
-                'keyEventSwitcher'
+                'keyEventSwitcher',
+                '_tabSwitcher'
             );
 
             this.options.transitionEvent = transitionEvent;
@@ -250,17 +239,33 @@ define([
         },
 
         /**
-         * Set keyup listener when modal is opened.
+         * Set events listener when modal is opened.
          */
         _setKeyListener: function () {
-            this.modal.bind('keyup', this.keyEventSwitcher);
+            this.modal.find(this.options.focusableStart).bind('focusin', this._tabSwitcher);
+            this.modal.find(this.options.focusableEnd).bind('focusin', this._tabSwitcher);
+            this.modal.bind('keydown', this.keyEventSwitcher);
         },
 
         /**
-         * Remove keyup listener when modal is closed.
+         * Remove events listener when modal is closed.
          */
         _removeKeyListener: function () {
-            this.modal.unbind('keyup', this.keyEventSwitcher);
+            this.modal.find(this.options.focusableStart).bind('focusin', this._tabSwitcher);
+            this.modal.find(this.options.focusableEnd).bind('focusin', this._tabSwitcher);
+            this.modal.unbind('keydown', this.keyEventSwitcher);
+        },
+
+        /**
+         * Switcher for focus event.
+         * @param {Object} e - event
+         */
+        _tabSwitcher: function(e){
+            if ($(e.target).is(this.options.focusableStart)) {
+                this._setFocus('start');
+            } else if ($(e.target).is(this.options.focusableEnd)) {
+                this._setFocus('end');
+            }
         },
 
         /**
@@ -272,7 +277,6 @@ define([
 
             this._removeKeyListener();
             this.options.isOpen = false;
-            this.previosFocused = null;
             this.modal.one(this.options.transitionEvent, function () {
                 that._close();
             });
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
index 3d83df47319..0a45aa20a02 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
@@ -9,11 +9,11 @@
        <% if(data.responsive){ %><%= data.responsiveClass %><% } %>
        <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
-    data-type="<%= data.type %>">
+    data-type="<%= data.type %>"
+    tabindex="0">
     <div data-role="focusable-start" tabindex="0"></div>
     <div class="modal-inner-wrap"
-         data-role="focusable-scope"
-         tabindex="0">
+         data-role="focusable-scope">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
index 52cf0807531..22aad07f4ea 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
@@ -10,11 +10,11 @@
            <% if(data.responsive){ %><%= data.responsiveClass %><% } %>
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
-    data-type="<%= data.type %>">
+    data-type="<%= data.type %>"
+    tabindex="0">
     <div data-role="focusable-start" tabindex="0"></div>
     <div class="modal-inner-wrap"
-         data-role="focusable-scope"
-         tabindex="0">
+         data-role="focusable-scope">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
index 42d8ae63a92..8b828035939 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
@@ -9,11 +9,11 @@
     class="modal-<%= data.type %> <%= data.modalClass %>
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
-    data-type="<%= data.type %>">
+    data-type="<%= data.type %>"
+    tabindex="0">
     <div data-role="focusable-start" tabindex="0"></div>
     <div class="modal-inner-wrap"
-         data-role="focusable-scope"
-         tabindex="0">
+         data-role="focusable-scope">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
-- 
GitLab


From c4edeabab484e6e495dbf44b842e8dc5e1c0e406 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 29 Sep 2015 10:25:12 +0300
Subject: [PATCH 147/420] MAGETWO-42990: Stabilization

---
 .../Magento/Ui/view/base/web/js/modal/modal.js | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 847fe727ffa..6fa55677176 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -46,6 +46,8 @@ define([
             title: '',
             modalClass: '',
             focus: '',
+            autoOpen: false,
+            clickableOverlay: true,
             popupTpl: popupTpl,
             slideTpl: slideTpl,
             customTpl: customTpl,
@@ -112,7 +114,8 @@ define([
             _.bindAll(
                 this,
                 'keyEventSwitcher',
-                '_tabSwitcher'
+                '_tabSwitcher',
+                'closeModal'
             );
 
             this.options.transitionEvent = transitionEvent;
@@ -127,6 +130,7 @@ define([
                 'openModal': this.openModal,
                 'closeModal': this.closeModal
             });
+            this.options.autoOpen ? this.openModal() : false;
         },
 
         /**
@@ -374,8 +378,7 @@ define([
          * Creates overlay, append it to wrapper, set previous click event on overlay.
          */
         _createOverlay: function () {
-            var that = this,
-                events;
+            var events;
 
             this.overlay = $('.' + this.options.overlayClass);
 
@@ -386,13 +389,8 @@ define([
                     .appendTo(this.modalWrapper);
             }
             events = $._data(this.overlay.get(0), 'events');
-
-            if (events) {
-                this.prevOverlayHandler = events.click[0].handler;
-            }
-            this.overlay.unbind().on('click', function () {
-                that.closeModal();
-            });
+            events ? this.prevOverlayHandler = events.click[0].handler : false;
+            this.options.clickableOverlay ? this.overlay.unbind().on('click', this.closeModal) : false;
         },
 
         /**
-- 
GitLab


From 1357480650a0e18c0fe3545f3d707ee4ff22c37e Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Tue, 29 Sep 2015 16:17:50 +0300
Subject: [PATCH 148/420] MAGETWO-42995: Stabilize functional tests

---
 app/code/Magento/Sales/view/adminhtml/web/order/create/form.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
index 6d88d084c36..1e041234a79 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
@@ -5,7 +5,8 @@
 
 define([
 	"jquery",
-    "Magento_Sales/order/create/scripts"
+    "Magento_Sales/order/create/scripts",
+    'domReady!'
 ], function(jQuery){
 	var $el = jQuery('#edit_form'),
 		config,
-- 
GitLab


From 3958a8d8a14f6c4cc823785d4adbcd94fd4f5084 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 29 Sep 2015 16:21:47 +0300
Subject: [PATCH 149/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../view/adminhtml/web/system/notification.js |  6 ++
 .../templates/catalog/category/tree.phtml     |  4 +-
 .../adminhtml/web/order/create/scripts.js     | 19 +++++--
 .../Ui/view/base/web/js/modal/confirm.js      | 55 ++++++++++++++++---
 4 files changed, 68 insertions(+), 16 deletions(-)

diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
index cf24ed62857..8b5cf5b0476 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
@@ -21,8 +21,14 @@ define([
                 '<% }); %>'
         },
 
+        _create: function() {
+            this.options.title = $('#message-system-all').attr('title');
+            this._super();
+        },
+
         openModal: function (severity) {
             var superMethod = $.proxy(this._super, this);
+            //this.modal.options
 
             $.ajax({
                 url: this.options.ajaxUrl,
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 3a4b2c769c4..488cd41ef3a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -444,8 +444,8 @@
                 pd.splice(pd.length - 1, 1);
 
                 jQuery('[data-id="information-dialog-category"]').modal({
-                    type: 'popup',
-                    modalClass: 'modal-system-messages',
+                    modalClass: 'modal-system-messages confirm',
+                    title:  jQuery.mage.__('Warning message'),
                     buttons: [{
                         text: 'Cancel',
                         class: 'action-tertiary',
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index fbe0fa8248f..2bc3526cace 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -5,10 +5,11 @@
 define([
     "jquery",
     'Magento_Ui/js/modal/confirm',
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype",
     "Magento_Catalog/catalog/product/composite/configure"
-], function(jQuery, confirm){
+], function(jQuery, confirm, alert){
 
 window.AdminOrder = new Class.create();
 
@@ -952,7 +953,9 @@ AdminOrder.prototype = {
                 name = messages[i].id.split("_");
                 if(name.length < 2) continue;
                 if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") {
-                    alert("First, clean the Message field in Gift Message form");
+                    alert({
+                        content: "First, clean the Message field in Gift Message form"
+                    });
                     element.checked = true;
                 }
             }
@@ -999,7 +1002,9 @@ AdminOrder.prototype = {
 
     loadAreaResponseHandler : function (response) {
         if (response.error) {
-            alert(response.message);
+            alert({
+                content: response.message
+            });
         }
         if (response.ajaxExpired && response.ajaxRedirect) {
             setLocation(response.ajaxRedirect);
@@ -1264,7 +1269,9 @@ AdminOrder.prototype = {
                     message = parameters.vatValidationFailedMessage;
                 }
                 if (null === groupActionRequired) {
-                    alert(message);
+                    alert({
+                        content: message
+                    });
                 }
                 else {
                     this.processCustomerGroupChange(
@@ -1307,7 +1314,9 @@ AdminOrder.prototype = {
                 this.accountGroupChange();
             }
         } else if (action === 'inform') {
-            alert(message + '\n' + groupMessage);
+            alert({
+                content: message + '\n' + groupMessage
+            });
         }
     }
 };
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
index 6e2e6fe5251..73994016418 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'jquery',
     'underscore',
@@ -16,36 +17,72 @@ define([
             modalClass: 'confirm',
             title: '',
             actions: {
-                always: function(){},
-                confirm: function(){},
-                cancel: function(){}
+
+                /**
+                 * Callback always - called on all actions.
+                 */
+                always: function () {},
+
+                /**
+                 * Callback confirm.
+                 */
+                confirm: function () {},
+
+                /**
+                 * Callback cancel.
+                 */
+                cancel: function () {}
             },
             buttons: [{
                 text: $.mage.__('Cancel'),
                 class: 'action-tertiary action-dismiss',
-                click: function(){
+
+                /**
+                 * Click handler.
+                 */
+                click: function () {
                     this.closeModal();
                 }
             }, {
                 text: $.mage.__('OK'),
                 class: 'action-secondary action-accept',
-                click: function() {
+
+                /**
+                 * Click handler.
+                 */
+                click: function () {
                     this.closeModal(true);
                 }
             }]
         },
-        _create: function() {
+
+        /**
+         * Create widget.
+         */
+        _create: function () {
             this._super();
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
-        _remove: function() {
+
+        /**
+         * Remove modal window.
+         */
+        _remove: function () {
             this.modal.remove();
         },
-        openModal: function() {
+
+        /**
+         * Open modal window.
+         */
+        openModal: function () {
             return this._super();
         },
-        closeModal: function(result) {
+
+        /**
+         * Close modal window.
+         */
+        closeModal: function (result) {
             result = result || false;
 
             if (result) {
-- 
GitLab


From 3c00ab96c070db13a8b66d4c7b09a59ee21b3d47 Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Tue, 29 Sep 2015 16:35:20 +0300
Subject: [PATCH 150/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../css/source/forms/{form-wysiwyg.less => _form-wysiwyg.less}    | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename app/design/adminhtml/Magento/backend/web/css/source/forms/{form-wysiwyg.less => _form-wysiwyg.less} (100%)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less
similarity index 100%
rename from app/design/adminhtml/Magento/backend/web/css/source/forms/form-wysiwyg.less
rename to app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less
-- 
GitLab


From 089421dcd2339877ffa98d6d5f10a01d5db83e13 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Tue, 29 Sep 2015 17:10:27 +0300
Subject: [PATCH 151/420] MAGETWO-42762: Improve performance of table rendering

- Use 'knockout-repeat' binding for table rendering
- Rewrite column templates
- Use get/set assessors in gird components
- Rewrite Bookmarks component
- Remove unused bindings
- Implement 'autoselect' binding
- Add comments
---
 .../web/js/variations/product-grid.js         |  19 +-
 .../Theme/view/base/requirejs-config.js       |   8 +-
 .../view/base/web/js/grid/columns/actions.js  |  55 +-
 .../view/base/web/js/grid/columns/column.js   | 143 ++++--
 .../Ui/view/base/web/js/grid/columns/date.js  |   5 +-
 .../base/web/js/grid/columns/multiselect.js   |  22 +-
 .../view/base/web/js/grid/columns/select.js   |  22 +-
 .../base/web/js/grid/columns/thumbnail.js     |  10 +-
 .../js/grid/controls/bookmarks/bookmarks.js   | 485 +++++++++++++-----
 .../web/js/grid/controls/bookmarks/view.js    | 161 ------
 .../view/base/web/js/grid/controls/columns.js |   9 +-
 .../Magento/Ui/view/base/web/js/grid/dnd.js   |  14 +-
 .../Ui/view/base/web/js/grid/filters/chips.js |   9 +-
 .../view/base/web/js/grid/filters/filters.js  |  64 ++-
 .../Ui/view/base/web/js/grid/listing.js       |  68 ++-
 .../Ui/view/base/web/js/grid/paging/paging.js |  94 ++--
 .../Ui/view/base/web/js/grid/paging/sizes.js  |  50 +-
 .../Ui/view/base/web/js/grid/provider.js      |  43 +-
 .../Ui/view/base/web/js/grid/resize.js        |   2 +-
 .../Ui/view/base/web/js/grid/search/search.js |  20 +-
 .../base/web/js/lib/component/provider.js     | 116 +++--
 .../Magento/Ui/view/base/web/js/lib/events.js |  12 +-
 .../base/web/js/lib/ko/bind/autoselect.js     |  34 ++
 .../Ui/view/base/web/js/lib/ko/bind/class.js  |  53 --
 .../base/web/js/lib/ko/bind/staticChecked.js  |  99 ++++
 .../web/js/lib/ko/bind/stop_propagation.js    |  24 -
 .../Ui/view/base/web/js/lib/ko/initialize.js  |   6 +-
 .../view/base/web/js/lib/registry/events.js   |   5 +-
 .../view/base/web/js/lib/registry/registry.js |  78 ++-
 .../view/base/web/js/lib/registry/storage.js  |   3 +
 .../web/templates/grid/cells/actions.html     |  89 ++--
 .../base/web/templates/grid/cells/html.html   |  17 +-
 .../web/templates/grid/cells/multiselect.html |  30 +-
 .../base/web/templates/grid/cells/text.html   |  18 +-
 .../web/templates/grid/cells/thumbnail.html   |  17 +-
 .../templates/grid/columns/multiselect.html   |   4 +-
 .../base/web/templates/grid/columns/text.html |   9 +-
 .../grid/controls/bookmarks/bookmarks.html    |  64 ++-
 .../grid/controls/bookmarks/view.html         | 100 ++--
 .../web/templates/grid/controls/columns.html  |  14 +-
 .../base/web/templates/grid/exportButton.html |   2 +-
 .../web/templates/grid/filters/chips.html     |   6 +-
 .../web/templates/grid/filters/filters.html   |   2 +-
 .../view/base/web/templates/grid/listing.html |  50 +-
 .../base/web/templates/grid/paging-total.html |   6 +-
 .../web/templates/grid/paging/paging.html     |  24 +-
 .../base/web/templates/grid/paging/sizes.html |  44 +-
 .../web/templates/grid/sticky/listing.html    |   7 +-
 .../Ui/base/js/grid/columns/column.test.js    |   6 +-
 .../Ui/base/js/grid/paging/paging.test.js     |  54 +-
 lib/web/knockoutjs/knockout-es5.js            | 468 +++++++++++++++++
 lib/web/knockoutjs/knockout-fast-foreach.js   | 331 ++++++++++++
 lib/web/knockoutjs/knockout-repeat.js         | 216 ++++++++
 lib/web/{ko/ko.js => knockoutjs/knockout.js}  |   0
 54 files changed, 2410 insertions(+), 901 deletions(-)
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
 create mode 100644 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
 create mode 100644 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
 create mode 100644 lib/web/knockoutjs/knockout-es5.js
 create mode 100644 lib/web/knockoutjs/knockout-fast-foreach.js
 create mode 100644 lib/web/knockoutjs/knockout-repeat.js
 rename lib/web/{ko/ko.js => knockoutjs/knockout.js} (100%)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
index 39267f93a14..3003ff253fe 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
@@ -115,9 +115,9 @@ define([
             this.callbackName = callbackName;
             this.productsMassAction(function (massActionComponent) {
                 this.productsColumns().elems().each(function (rowElement) {
-                    rowElement.disableAction(showMassActionColumn);
+                    rowElement.disableAction = showMassActionColumn;
                 });
-                massActionComponent.visible(showMassActionColumn);
+                massActionComponent.visible = showMassActionColumn;
             }.bind(this));
             this._setFilter(filterData);
             this._initGrid(filterData);
@@ -129,10 +129,10 @@ define([
          */
         close: function (rowIndex) {
             try {
-                if (this.productsMassAction().selected().length) {
+                if (this.productsMassAction().selected.length) {
                     this.variationsComponent()[this.callbackName](this.productsMassAction()
                         .selected.map(this.getProductById.bind(this)));
-                    this.productsMassAction().selected([]);
+                    this.productsMassAction().deselectAll();
                 } else if (!_.isNull(rowIndex)) {
                     this.variationsComponent()[this.callbackName]([this.getProductByIndex(rowIndex)]);
                 }
@@ -257,7 +257,7 @@ define([
         _handleManualGridOpening: function (data) {
             if (data.items.length && this.callbackName == 'appendProducts') {
                 this.productsColumns().elems().each(function (rowElement) {
-                    rowElement.disableAction(true);
+                    rowElement.disableAction = true;
                 });
 
                 this._disableRows(data.items);
@@ -314,12 +314,14 @@ define([
          */
         _getVariationKeyMap: function (items) {
             this._variationKeyMap = {};
+
             _.each(items, function (row) {
                 this._variationKeyMap[row['entity_id']] = _.values(
                     _.pick(row, this._getAttributesCodes())
                 ).sort().join('-');
 
-            }.bind(this));
+            }, this);
+
             return this._variationKeyMap;
         },
 
@@ -334,10 +336,9 @@ define([
             }.bind(this));
 
             this.productsFilter(function (filter) {
-                filter.set('filters', _.extend({
+                filter.setData({
                     'filters_modifier': filterData['filters_modifier']
-                }, filterData.filters))
-                    .apply();
+                }, true).apply();
             });
         }
     });
diff --git a/app/code/Magento/Theme/view/base/requirejs-config.js b/app/code/Magento/Theme/view/base/requirejs-config.js
index e5504adda39..c40eb944f07 100644
--- a/app/code/Magento/Theme/view/base/requirejs-config.js
+++ b/app/code/Magento/Theme/view/base/requirejs-config.js
@@ -7,7 +7,9 @@ var config = {
     "waitSeconds": 0,
     "map": {
         "*": {
-            "mageUtils": "mage/utils/main"
+            "mageUtils": "mage/utils/main",
+            "ko": "knockoutjs/knockout",
+            "knockout": "knockoutjs/knockout"
         }
     },
     "shim": {
@@ -26,9 +28,6 @@ var config = {
         "tinymce": {
             "exports": "tinymce"
         },
-        "ko": {
-            "exports": "ko"
-        },
         "moment": {
             "exports": "moment"
         },
@@ -48,7 +47,6 @@ var config = {
         "jquery/jquery-storageapi": "jquery/jquery.storageapi.min",
         "text": "requirejs/text",
         "domReady": "requirejs/domReady",
-        "ko": "ko/ko",
         "tinymce": "tiny_mce/tiny_mce_src"
     },
     "deps": [
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
index 912e0a4748c..e1bbb011db8 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
@@ -19,10 +19,13 @@ define([
             draggable: false,
             actions: [],
             rows: [],
+            rowsProvider: '${ $.parentName }',
+            fieldClass: {
+                'data-grid-actions-cell': true
+            },
             templates: {
                 actions: {}
             },
-            rowsProvider: '${ $.parentName }',
             imports: {
                 rows: '${ $.rowsProvider }:rows'
             },
@@ -38,7 +41,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('actions');
+                .track('actions');
 
             return this;
         },
@@ -52,7 +55,7 @@ define([
          * @returns {Array|Object}
          */
         getAction: function (rowIndex, actionIndex) {
-            var rowActions = this.actions()[rowIndex];
+            var rowActions = this.actions[rowIndex];
 
             return rowActions && actionIndex ?
                 rowActions[actionIndex] :
@@ -95,10 +98,7 @@ define([
          * @returns {ActionsColumn} Chainable.
          */
         updateActions: function () {
-            var rows = this.rows,
-                actions = rows.map(this._formatActions, this);
-
-            this.actions(actions);
+            this.actions = this.rows.map(this._formatActions, this);
 
             return this;
         },
@@ -158,6 +158,34 @@ define([
             return this;
         },
 
+        /**
+         * Creates handler for the provided action if it's required.
+         *
+         * @param {Object} action - Action object.
+         * @returns {Function|Undefined}
+         */
+        getActionHandler: function (action) {
+            var index = action.index,
+                rowIndex = action.rowIndex;
+
+            if (this.isHandlerRequired(index, rowIndex)) {
+                return this.applyAction.bind(this, index, rowIndex);
+            }
+        },
+
+        /**
+         * Checks if specified action requires a handler function.
+         *
+         * @param {String} actionIndex - Actions' identifier.
+         * @param {Number} rowIndex - Index of a row.
+         * @returns {Boolean}
+         */
+        isHandlerRequired: function (actionIndex, rowIndex) {
+            var action = this.getAction(rowIndex, actionIndex);
+
+            return _.isObject(action.callback) || action.confirm || !action.href;
+        },
+
         /**
          * Creates action callback based on its' data. If action doesn't spicify
          * a callback function than the default one will be used.
@@ -246,16 +274,13 @@ define([
         },
 
         /**
-         * Checks if specified action requires a handler function.
+         * Overrides base method, because this component
+         * can't have global field action.
          *
-         * @param {String} actionIndex - Actions' identifier.
-         * @param {Number} rowIndex - Index of a row.
-         * @returns {Boolean}
+         * @returns {Boolean} False.
          */
-        isHandlerRequired: function (actionIndex, rowIndex) {
-            var action = this.getAction(rowIndex, actionIndex);
-
-            return _.isObject(action.callback) || action.confirm || !action.href;
+        hasFieldAction: function () {
+            return false;
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
index b0f457497ea..8cb07d8a714 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
@@ -20,6 +20,7 @@ define([
             sorting: false,
             visible: true,
             draggable: true,
+            fieldClass: {},
             ignoreTmpls: {
                 fieldAction: true
             },
@@ -38,6 +39,18 @@ define([
             }
         },
 
+        /**
+         * Initializes column component.
+         *
+         * @returns {Column} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initFieldClass();
+
+            return this;
+        },
+
         /**
          * Initializes observable properties.
          *
@@ -45,7 +58,27 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('visible dragging dragover sorting disableAction');
+                .track([
+                    'visible',
+                    'sorting',
+                    'disableAction'
+                ])
+                .observe([
+                    'dragging'
+                ]);
+
+            return this;
+        },
+
+        /**
+         * Extends list of field classes.
+         *
+         * @returns {Column} Chainable.
+         */
+        initFieldClass: function () {
+            _.extend(this.fieldClass, {
+                _dragging: this.dragging
+            });
 
             return this;
         },
@@ -55,7 +88,7 @@ define([
          *
          * @param {String} state - Defines what state should be used: saved or default.
          * @param {String} [property] - Defines what columns' property should be applied.
-         *      If not specfied, then all columns stored properties will be used.
+         *      If not specified, then all columns stored properties will be used.
          * @returns {Column} Chainable.
          */
         applyState: function (state, property) {
@@ -65,7 +98,7 @@ define([
                 namespace += '.' + property;
             }
 
-            this.storage('applyState', state, namespace);
+            this.storage('applyStateOf', state, namespace);
 
             return this;
         },
@@ -79,47 +112,78 @@ define([
          * @returns {Column} Chainable.
          */
         sort: function (enable) {
-            var direction = false;
-
             if (!this.sortable) {
                 return this;
             }
 
-            if (enable !== false) {
-                direction = this.toggleDirection();
-            }
+            enable !== false ?
+                this.toggleSorting() :
+                this.sorting = false;
 
-            this.sorting(direction);
+            return this;
+        },
+
+        /**
+         * Sets descending columns' sorting.
+         *
+         * @returns {Column} Chainable.
+         */
+        sortDescending: function () {
+            if (this.sortable) {
+                this.sorting = 'desc';
+            }
 
             return this;
         },
 
         /**
-         * Exports sorting data to the dataProvider if
-         * sorting of a column is enabled.
+         * Sets ascending columns' sorting.
          *
-         * @param {(String|Boolean)} sorting - Columns' sorting state.
+         * @returns {Column} Chainable.
          */
-        exportSorting: function (sorting) {
-            if (!sorting) {
-                return;
+        sortAscending: function () {
+            if (this.sortable) {
+                this.sorting = 'asc';
             }
 
-            this.source('set', 'params.sorting', {
-                field: this.index,
-                direction: sorting
-            });
+            return this;
         },
 
         /**
          * Toggles sorting direction.
          *
-         * @returns {String} New direction.
+         * @returns {Column} Chainable.
+         */
+        toggleSorting: function () {
+            this.sorting === 'asc' ?
+                this.sortDescending() :
+                this.sortAscending();
+
+            return this;
+        },
+
+        /**
+         * Checks if column is sorted.
+         *
+         * @returns {Boolean}
+         */
+        isSorted: function () {
+            return !!this.sorting;
+        },
+
+        /**
+         * Exports sorting data to the dataProvider if
+         * sorting of a column is enabled.
          */
-        toggleDirection: function () {
-            return this.sorting() === 'asc' ?
-                'desc' :
-                'asc';
+        exportSorting: function () {
+            if (!this.sorting) {
+                return;
+            }
+
+            this.source('set', 'params.sorting', {
+                field: this.index,
+                direction: this.sorting
+            });
         },
 
         /**
@@ -152,7 +216,7 @@ define([
             var action = this.fieldAction,
                 callback;
 
-            if (!this.hasFieldAction() || this.disableAction()) {
+            if (!this.hasFieldAction() || this.disableAction) {
                 return this;
             }
 
@@ -170,12 +234,24 @@ define([
             return this;
         },
 
+        /**
+         * Returns field action handler if it was specified.
+         *
+         * @param {Object} record - Record object with which action is associated.
+         * @returns {Function|Undefined}
+         */
+        getFieldHandler: function (record) {
+            if (this.hasFieldAction()) {
+                return this.applyFieldAction.bind(this, record._rowIndex);
+            }
+        },
+
         /**
          * Creates action callback based on its' data.
          *
          * @param {Object} action - Actions' object.
          * @returns {Function|Boolean} Callback function or false
-         *      value if it was imposible create a callback.
+         *      value if it was impossible create a callback.
          */
         _getFieldCallback: function (action) {
             var args     = action.params || [],
@@ -199,11 +275,20 @@ define([
         /**
          * Ment to preprocess data associated with a current columns' field.
          *
-         * @param {*} data - Data to be preprocessed.
+         * @param {Object} record - Data to be preprocessed.
          * @returns {String}
          */
-        getLabel: function (data) {
-            return data;
+        getLabel: function (record) {
+            return record[this.index];
+        },
+
+        /**
+         * Returns list of classes that should be applied to a field.
+         *
+         * @returns {Object}
+         */
+        getFieldClass: function () {
+            return this.fieldClass;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
index 90ace7d79af..a12e0436eec 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
@@ -28,11 +28,10 @@ define([
         /**
          * Formats incoming date based on the 'dateFormat' property.
          *
-         * @param {String} date - Date to be formatted.
          * @returns {String} Formatted date.
          */
-        getLabel: function (date) {
-            date = moment(date);
+        getLabel: function () {
+            var date = moment(this._super());
 
             date = date.isValid() ?
                 date.format(this.dateFormat) :
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
index 8323e8f31ad..0563dd0fbb8 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
@@ -20,9 +20,12 @@ define([
             excludeMode: false,
             allSelected: false,
             indetermine: false,
-            selected: [],
             disabled: [],
+            selected: [],
             excluded: [],
+            fieldClass: {
+                'data-grid-checkbox-cell': true
+            },
             actions: [{
                 value: 'selectAll',
                 label: $t('Select All')
@@ -197,10 +200,9 @@ define([
          * @returns {Multiselect} Chainable.
          */
         selectPage: function () {
-            var selected = _.difference(
-                _.union(this.selected(), this.getIds()),
-                this.disabled()
-            );
+            var selected = _.union(this.selected(), this.getIds());
+
+            selected = _.difference(selected, this.disabled());
 
             this.selected(selected);
 
@@ -438,6 +440,16 @@ define([
             return this;
         },
 
+        /**
+         * Overrides base method, cause this component
+         * can't have global field action.
+         *
+         * @returns {Boolean} False.
+         */
+        hasFieldAction: function () {
+            return false;
+        },
+
         /**
          * Callback method to handle changes of selected items.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
index f55a2efdd63..195fc0c1d54 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
@@ -8,27 +8,27 @@ define([
     'use strict';
 
     return Column.extend({
+
+        /*eslint-disable eqeqeq*/
         /**
          * Retrieves label associated with a provided value.
          *
-         * @param {Array} values - Values of the option.
          * @returns {String}
          */
-        getLabel: function (values) {
+        getLabel: function () {
             var options = this.options || [],
-                labels = [];
+                label = '',
+                value = this._super();
 
-            values = values || [];
+            options.some(function (item) {
+                label = item.label;
 
-            /*eslint-disable eqeqeq*/
-            options.forEach(function (item) {
-                if(values.indexOf(item.value) > -1) {
-                    labels.push(item.label);
-                }
+                return item.value == value;
             });
-            /*eslint-enable eqeqeq*/
 
-            return labels.join(', ');
+            return label;
         }
+
+        /*eslint-enable eqeqeq*/
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
index 11455b30680..ef46cfc7124 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
@@ -13,7 +13,10 @@ define([
 
     return Column.extend({
         defaults: {
-            bodyTmpl: 'ui/grid/cells/thumbnail'
+            bodyTmpl: 'ui/grid/cells/thumbnail',
+            fieldClass: {
+                'data-grid-thumbnail-cell': true
+            }
         },
         getSrc: function (row) {
             return row[this.index + '_src']
@@ -44,6 +47,11 @@ define([
                 innerScroll: true,
                 modalClass: '_image-box',
                 buttons: []}).trigger('openModal');
+        },
+        getFieldHandler: function (row) {
+            if (this.isPreviewAvailable()) {
+                return this.preview.bind(this, row);
+            }
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
index 8bd34bb57f6..70a630b3532 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
@@ -5,9 +5,10 @@
 define([
     'underscore',
     'mageUtils',
+    'mage/translate',
     'uiLayout',
     'uiComponent'
-], function (_, utils, layout, Component) {
+], function (_, utils, $t, layout, Component) {
     'use strict';
 
     /**
@@ -29,24 +30,11 @@ define([
     return Component.extend({
         defaults: {
             template: 'ui/grid/controls/bookmarks/bookmarks',
+            viewTmpl: 'ui/grid/controls/bookmarks/view',
+            newViewLabel: $t('New View'),
             defaultIndex: 'default',
             activeIndex: 'default',
             hasChanges: false,
-            templates: {
-                view: {
-                    parent: '${ $.$data.name }',
-                    name: '${ $.$data.index }',
-                    label: '${ $.$data.label }',
-                    provider: '${ $.$data.provider }',
-                    component: 'Magento_Ui/js/grid/controls/bookmarks/view'
-                },
-                newView: {
-                    label: 'New View',
-                    index: '_${ Date.now() }',
-                    editing: true,
-                    isNew: true
-                }
-            },
             storageConfig: {
                 provider: '${ $.storageConfig.name }',
                 name: '${ $.name }_storage',
@@ -54,14 +42,14 @@ define([
             },
             views: {
                 default: {
-                    label: 'Default View',
+                    label: $t('Default View'),
                     index: 'default',
                     editable: false
                 }
             },
             listens: {
                 activeIndex: 'onActiveIndexChange',
-                activeView: 'checkChanges',
+                activeView: 'checkState',
                 current: 'onStateChange'
             }
         },
@@ -72,9 +60,9 @@ define([
          * @returns {Bookmarks} Chainable.
          */
         initialize: function () {
+            utils.limit(this, 'checkState', 5);
             utils.limit(this, 'saveSate', 2000);
-            utils.limit(this, '_defaultPolyfill', 1000);
-            utils.limit(this, 'checkChanges', 50);
+            utils.limit(this, '_defaultPolyfill', 2000);
 
             this._super()
                 .restore()
@@ -91,7 +79,16 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('activeView hasChanges');
+                .track([
+                    'hasChanges',
+                    'editing',
+                    'activeView',
+                    'customVisible',
+                    'customLabel'
+                ])
+                .track({
+                    viewsArray: []
+                });
 
             return this;
         },
@@ -108,209 +105,430 @@ define([
         },
 
         /**
-         * Called when another element was added to the current component.
+         * Creates instances of a previously saved views.
          *
-         * @param {Object} elem - Instance of an element that was added.
          * @returns {Bookmarks} Chainable.
          */
-        initElement: function (elem) {
-            var index = elem.index;
+        initViews: function () {
+            _.each(this.views, function (config) {
+                this.addView(config);
+            }, this);
+
+            this.activeView = this.getActiveView();
+
+            return this;
+        },
+
+        /**
+         * Creates complete configuration for a view.
+         *
+         * @param {Object} [config] - Additional configuration object.
+         * @returns {Object}
+         */
+        buildView: function (config) {
+            var view = {
+                label: this.newViewLabel,
+                index: '_' + Date.now(),
+                editable: true
+            };
+
+            utils.extend(view, config || {});
+
+            view.data   = view.data || utils.copy(this.current);
+            view.value  = view.label;
+
+            this.observe.call(view, true, 'label value');
+
+            return view;
+        },
+
+        /**
+         * Creates instance of a view with a provided configuration.
+         *
+         * @param {Object} [config] - View configuration.
+         * @param {Boolean} [saveView=false] - Whether to save created view automatically or not.
+         * @param {Boolean} [applyView=false] - Whether to apply created view automatically or not.
+         * @returns {View} Created view.
+         */
+        addView: function (config, saveView, applyView) {
+            var view    = this.buildView(config),
+                index   = view.index;
 
-            if (index === this.defaultIndex) {
-                this.defaultView = elem;
+            this.views[index] = view;
+
+            if (saveView) {
+                this.saveView(index);
             }
 
-            if (index === this.activeIndex) {
-                this.activeView(elem);
+            if (applyView) {
+                this.applyView(index);
             }
 
-            elem.on({
-                editing: this.onEditingChange.bind(this, elem)
-            });
+            this.updateArray();
 
-            return this._super();
+            return view;
         },
 
         /**
-         * Creates instances of a previously saved views.
+         * Removes specified view.
          *
+         * @param {String} index - Index of a view to be removed.
          * @returns {Bookmarks} Chainable.
          */
-        initViews: function () {
-            var views = this.views,
-                active = _.findWhere(views, {index: this.activeIndex});
+        removeView: function (index) {
+            var viewPath = this.getViewPath(index);
 
-            if (!active) {
-                this.activeIndex = this.defaultIndex;
+            if (this.isViewActive(index)) {
+                this.applyView(this.defaultIndex);
             }
 
-            _.each(views, this.createView, this);
+            this.endEdit(index)
+                .remove(viewPath)
+                .removeStored(viewPath)
+                .updateArray();
 
             return this;
         },
 
         /**
-         * Creates view with a provided data.
+         * Saves data of a specified view.
          *
-         * @param {Object} item - Data object that will be passed to a view instance.
+         * @param {String} index - Index of a view to be saved.
          * @returns {Bookmarks} Chainable.
          */
-        createView: function (item) {
-            var data = _.extend({}, this, item),
-                child = utils.template(this.templates.view, data);
+        saveView: function (index) {
+            var viewPath = this.getViewPath(index);
 
-            _.extend(child, item);
+            this.updateViewLabel(index)
+                .endEdit(index)
+                .store(viewPath)
+                .checkState();
 
-            if (this.activeIndex === item.index) {
-                child.active = true;
-            }
+            return this;
+        },
 
-            layout([child]);
+        /**
+         * Sets specified view as active
+         * and applies its' state.
+         *
+         * @param {String} index - Index of a view to be applied.
+         * @returns {Bookmarks} Chainable.
+         */
+        applyView: function (index) {
+            this.applyStateOf(index)
+                .set('activeIndex', index);
 
             return this;
         },
 
         /**
-         * Creates new view instance.
+         * Updates data of a specified view if it's
+         * currently active and saves its' data.
          *
+         * @param {String} index - Index of a view.
          * @returns {Bookmarks} Chainable.
          */
-        createNewView: function () {
-            var view = this.templates.newView;
+        updateAndSave: function (index) {
+            if (this.isViewActive(index)) {
+                this.updateActiveView(index);
+            }
+
+            this.saveView(index);
+
+            return this;
+        },
+
+        /**
+         * Returns instance of a specified view.
+         *
+         * @param {String} index - Index of a view to be retrieved.
+         * @returns {View}
+         */
+        getView: function (index) {
+            return this.views[index];
+        },
 
-            view.data = this.current;
+        /**
+         * Returns instance of an active view.
+         *
+         * @returns {View}
+         */
+        getActiveView: function () {
+            return this.views[this.activeIndex];
+        },
 
-            this.createView(view);
+        /**
+         * Checks if specified view is active.
+         *
+         * @param {String} index - Index of a view to be checked.
+         * @returns {Boolean}
+         */
+        isViewActive: function (index) {
+            return this.activeView === this.getView(index);
+        },
+
+        /**
+         * Sets current state as a data of an active view.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        updateActiveView: function () {
+            this.setViewData(this.activeIndex, this.current);
 
             return this;
         },
 
         /**
-         * Deletes specfied view.
+         * Replaces label a view with a provided one.
+         * If new label is not specified, then views'
+         * 'value' property will be taken.
          *
-         * @param {View} view - View to be deleted.
+         * @param {String} index - Index of a view.
+         * @param {String} [label=view.value] - New labels' value.
          * @returns {Bookmarks} Chainable.
          */
-        removeView: function (view) {
-            if (view.active()) {
-                this.applyView(this.defaultIndex);
-            }
+        updateViewLabel: function (index, label) {
+            var view    = this.getView(index),
+                current = view.label;
 
-            if (!view.isNew) {
-                this.removeStored('views.' + view.index);
-            }
+            label = (label || view.value).trim() || current;
+            label = this.uniqueLabel(label, current);
 
-            view.destroy();
+            view.label = view.value = label;
 
             return this;
         },
 
         /**
-         * Saves data of a specified view.
+         * Retrieves data of a specified view.
          *
-         * @param {View} view - View to be saved.
-         * @returns {Bookmarks} Chainable.
+         * @param {String} index - Index of a view whose data should be retrieved.
+         * @param {String} [property] - If not specified then whole views' data will be retrieved.
+         * @returns {Object} Views' data.
          */
-        saveView: function (view) {
-            if (view.isNew || view.active()) {
-                view.setData(this.current);
+        getViewData: function (index, property) {
+            var view = this.getView(index),
+                data = view.data;
 
-                this.hasChanges(false);
+            if (property) {
+                data = utils.nested(data, property);
             }
 
-            this.store('views.' + view.index, view.exportView());
+            return utils.copy(data);
+        },
 
-            if (view.isNew) {
-                view.isNew = false;
+        /**
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        setViewData: function (index, data) {
+            var path = this.getViewPath(index) + '.data';
 
-                view.active(true);
-            }
+            this.set(path, utils.copy(data));
 
             return this;
         },
 
         /**
-         * Activates specified view and applies its' data.
          *
-         * @param {(View|String)} view - View to be applied.
+         * @param {String} index
          * @returns {Bookmarks} Chainable.
          */
-        applyView: function (view) {
-            if (typeof view === 'string') {
-                view = this.elems.findWhere({
-                    index: view
-                });
+        editView: function (index) {
+            this.editing = index;
+
+            return this;
+        },
+
+        /**
+         *
+         * @param {String} index
+         * @returns {Bookmarks} Chainable.
+         */
+        endEdit: function (index) {
+            var view;
+
+            if (!this.isEditing(index)) {
+                return this;
             }
 
-            view.active(true);
+            index   = index || this.editing;
+            view    = this.getView(index);
 
-            this.activeView(view);
-            this.applyState('saved');
+            view.value = view.label;
+
+            this.editing = false;
 
             return this;
         },
 
         /**
-         * Applies specified views' data on a current data object.
+         * Checks if specified view is in editing state.
          *
-         * @param {String} state - Defines what state shultd be used: default or saved.
-         * @param {String} [path] - Path to the property whose value
-         *      will be inserted to a current data object.
-         * @returns {Bookmarks} Chainable.
+         * @param {String} index - Index of a view to be checked.
+         * @returns {Bollean}
          */
-        applyState: function (state, path) {
-            var view,
-                value;
+        isEditing: function (index) {
+            return this.editing === index;
+        },
 
-            view = state === 'default' ?
-                this.defaultView :
-                this.activeView();
+        /**
+         * Generates label unique among present views, based
+         * on the incoming label pattern.
+         *
+         * @param {String} [label=this.newViewLabel] - Label pattern.
+         * @param {String} [exclude]
+         * @returns {String}
+         */
+        uniqueLabel: function (label, exclude) {
+            var labels      = _.pluck(this.views, 'label'),
+                hasParenth  = _.last(label) === ')',
+                index       = 2,
+                result,
+                suffix;
 
-            path  = removeStateNs(path);
-            value = view.getData(path);
+            labels = _.without(labels, exclude);
+            result = label = label || this.newViewLabel;
 
-            if (!_.isUndefined(value)) {
-                path = path ? 'current.' + path : 'current';
+            for (index = 2; _.contains(labels, result); index++) {
+                suffix = '(' + index + ')';
 
-                this.set(path, value);
+                if (!hasParenth) {
+                    suffix = ' ' + suffix;
+                }
+
+                result = label + suffix;
             }
 
+            return result;
+        },
+
+        /**
+         * Applies state of a specified view, without
+         * making it active.
+         *
+         * @param {String} [state=this.activeIndex]
+         * @param {String} [property]
+         * @returns {Bookmarks} Chainable.
+         */
+        applyStateOf: function (state, property) {
+            var index    = state || this.activeIndex,
+                dataPath = removeStateNs(property),
+                viewData = this.getViewData(index, dataPath);
+
+            dataPath = dataPath ?
+                'current.' + dataPath :
+                'current';
+
+            this.set(dataPath, viewData);
+
             return this;
         },
 
         /**
-         * Saves current data state.
+         * Saves current state.
          *
          * @returns {Bookmarks} Chainable.
          */
-        saveSate: function () {
+        saveState: function () {
             this.store('current');
 
             return this;
         },
 
         /**
-         * Defines whether current state is different
-         * from a saved state of an active view.
+         * Applies state of an active view.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        resetState: function () {
+            this.applyStateOf(this.activeIndex);
+
+            return this;
+        },
+
+        /**
+         * Checks if current state is different
+         * from the state of an active view.
          *
          * @returns {Bookmarks} Chainable.
          */
-        checkChanges: function () {
-            var view = this.activeView(),
-                diff = utils.compare(view.getData(), this.current);
+        checkState: function () {
+            var viewData = this.getViewData(this.activeIndex),
+                diff     = utils.compare(viewData, this.current);
 
-            this.hasChanges(!diff.equal);
+            this.hasChanges = !diff.equal;
 
             return this;
         },
 
         /**
-         * Resets current state to a saved state of an active view.
+         * Returns path to the view instance,
+         * based on a provided index.
+         *
+         * @param {String} index - Index of a view.
+         * @returns {String}
+         */
+        getViewPath: function (index) {
+            return 'views.' + index;
+        },
+
+        /**
+         * Updates the array of views.
+         *
+         * @returns {Bookmarks} Chainable
+         */
+        updateArray: function () {
+            this.viewsArray = _.values(this.views);
+
+            return this;
+        },
+
+        /**
+         * Shows custom view field and creates unique label for it.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        showCustom: function () {
+            this.customLabel    = this.uniqueLabel();
+            this.customVisible  = true;
+
+            return this;
+        },
+
+        /**
+         * Hides custom view field.
          *
          * @returns {Bookmarks} Chainable.
          */
-        discardChanges: function () {
-            this.applyState('saved');
+        hideCustom: function () {
+            this.customVisible = false;
+
+            return this;
+        },
+
+        /**
+         * Checks if custom view field is visible.
+         *
+         * @returns {Boolean}
+         */
+        isCustomVisible: function () {
+            return this.customVisible;
+        },
+
+        /**
+         * Creates new view instance with a label specified
+         * in a custom view field.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        applyCustom: function () {
+            var label = this.customLabel.trim();
+
+            this.hideCustom()
+                .addView({
+                    label: this.uniqueLabel(label)
+                }, true, true);
 
             return this;
         },
@@ -324,54 +542,37 @@ define([
          * @returns {Bookmarks} Chainbale.
          */
         _defaultPolyfill: function () {
-            var view = this.defaultView,
-                data = view.data;
-
-            if (!_.size(data.items)) {
-                data.items = utils.copy(this.current);
+            var data = this.getViewData(this.defaultIndex);
 
-                this.store('views.' + view.index, view.exportView());
+            if (!_.size(data)) {
+                this.setViewData(this.defaultIndex, this.current)
+                    .saveView(this.defaultIndex);
             }
 
             this.defaultDefined = true;
 
-            this.checkChanges();
-
             return this;
         },
 
         /**
          * Listener of the activeIndex property.
-         *
-         * @param {String} index - Index of the active view.
          */
-        onActiveIndexChange: function (index) {
-            this.store('activeIndex')
-                .applyView(index);
+        onActiveIndexChange: function () {
+            this.activeView = this.getActiveView();
+
+            this.store('activeIndex');
         },
 
         /**
-         * Listens changes of a current data object.
+         * Listener of the activeIndex property.
          */
         onStateChange: function () {
-            this.saveSate();
-
-            if (this.activeView()) {
-                this.checkChanges();
-            }
+            this.saveState()
+                .checkState();
 
             if (!this.defaultDefined) {
                 this._defaultPolyfill();
             }
-        },
-
-        /**
-         * Lsitens changes of the views' 'editing' property.
-         */
-        onEditingChange: function (view, isEditing) {
-            if (!isEditing && view.isNew) {
-                this.removeView(view);
-            }
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
deleted file mode 100644
index afd5d4276de..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'uiComponent',
-    'mageUtils'
-], function (Component, utils) {
-    'use strict';
-
-    return Component.extend({
-        defaults: {
-            template: 'ui/grid/controls/bookmarks/view',
-            value: '${ $.isNew ? "" : $.label }',
-            active: false,
-            editable: true,
-            editing: false,
-            isNew: false,
-            statesProvider: '${ $.parentName }',
-            exports: {
-                active: 'onActivate'
-            },
-            listens: {
-                'editing value': 'syncLabel',
-                '${ $.statesProvider }:activeIndex': 'onActiveChange'
-            },
-            modules: {
-                states: '${ $.statesProvider }'
-            }
-        },
-
-        /**
-         * Initializes view component.
-         *
-         * @returns {View} Chainable.
-         */
-        initialize: function () {
-            this._super();
-
-            this.data = {
-                label: this.label(),
-                items: this.data || {}
-            };
-
-            return this;
-        },
-
-        /**
-         * Creates observable properties.
-         *
-         * @returns {View} Chainable.
-         */
-        initObservable: function () {
-            this._super()
-                .observe('active label value editing');
-
-            return this;
-        },
-
-        /**
-         * Retrieves copied views' data.
-         *
-         * @param {String} [path] - Path to the specific property.
-         * @returns {*}
-         */
-        getData: function (path) {
-            var data = this.data.items;
-
-            if (path) {
-                data = utils.nested(data, path);
-            }
-
-            return utils.copy(data);
-        },
-
-        /**
-         * Replaces current data with a provided one.
-         *
-         * @param {Object} data - New data object.
-         * @returns {View} Chainable.
-         */
-        setData: function (data) {
-            if (this.editable) {
-                this.set('data.items', utils.copy(data));
-            }
-
-            return this;
-        },
-
-        /**
-         * Sets new label.
-         *
-         * @returns {View} Chainable.
-         */
-        syncLabel: function () {
-            var label = this.value();
-
-            label = label.trim() || this.data.label;
-
-            this.label(label);
-            this.value(label);
-
-            this.data.label = label;
-
-            return this;
-        },
-
-        /**
-         * Sets 'editing' flag to true.
-         *
-         * @returns {View} Chainable.
-         */
-        startEdit: function () {
-            this.editing(true);
-
-            return this;
-        },
-
-        /**
-         * Sets 'editing' flag to false.
-         *
-         * @returns {View} Chainable.
-         */
-        endEdit: function () {
-            this.editing(false);
-
-            return this;
-        },
-
-        /**
-         * Returns views' data including 'label' and 'index' properties.
-         *
-         * @returns {Object}
-         */
-        exportView: function () {
-            return {
-                index: this.index,
-                label: this.label(),
-                data: this.data.items
-            };
-        },
-
-        /**
-         * Listener of the 'active' property.
-         */
-        onActivate: function (active) {
-            if (active) {
-                this.states('set', 'activeIndex', this.index);
-            }
-        },
-
-        /**
-         * Listener of the collections' active index value.
-         */
-        onActiveChange: function (index) {
-            if (index !== this.index) {
-                this.active(false);
-            }
-        }
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
index 4673bedd251..73fe224b55e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
@@ -16,11 +16,8 @@ define([
             minVisible: 1,
             maxVisible: 30,
             viewportSize: 18,
-            columnsData: {
-                container: 'elems'
-            },
             imports: {
-                addColumns: '${ $.columnsData.provider }:${ $.columnsData.container }'
+                addColumns: '${ $.columnsData.provider }:elems'
             },
             templates: {
                 headerMsg: $t('${ $.visible } out of ${ $.total } visible')
@@ -44,7 +41,7 @@ define([
          * @returns {Columns} Chainable.
          */
         cancel: function () {
-            this.elems.each('applyState', 'saved', 'visible');
+            this.elems.each('applyState', '', 'visible');
 
             return this;
         },
@@ -86,7 +83,7 @@ define([
         isDisabled: function (elem) {
             var visible = this.countVisible();
 
-            return elem.visible() ?
+            return elem.visible ?
                     visible === this.minVisible :
                     visible === this.maxVisible;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
index fbcffc466f1..217d4bec23a 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
@@ -212,15 +212,19 @@ define([
                 return this;
             }
 
+            if (Object.hasOwnProperty(model, 'dragover')) {
+                model.track('dragover');
+            }
+
             this.columns.push(column);
 
             $(column).bindings({
                 css: {
                     '_dragover-left': ko.computed(function () {
-                        return model.dragover() === 'right';
+                        return model.dragover === 'right';
                     }),
                     '_dragover-right': ko.computed(function () {
-                        return model.dragover() === 'left';
+                        return model.dragover === 'left';
                     })
                 }
             });
@@ -468,7 +472,7 @@ define([
                 'left' :
                 'right';
 
-            getModel(dropArea.target).dragover(direction);
+            getModel(dropArea.target).dragover = direction;
         },
 
         /**
@@ -477,7 +481,7 @@ define([
          * @param {Object} dropArea
          */
         dragleave: function (dropArea) {
-            getModel(dropArea.target).dragover(false);
+            getModel(dropArea.target).dragover = false;
         },
 
         /**
@@ -511,7 +515,7 @@ define([
                 dragModel = getModel(dragArea.target);
 
             getModel(this.table).insertChild(dragModel, dropModel);
-            dropModel.dragover(false);
+            dropModel.dragover = false;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
index a31b1fd2d50..5a4499780f8 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
@@ -3,8 +3,9 @@
  * See COPYING.txt for license details.
  */
 define([
+    'underscore',
     'uiComponent'
-], function (Component) {
+], function (_, Component) {
     'use strict';
 
     return Component.extend({
@@ -18,9 +19,9 @@ define([
          *
          * @returns {Boolean}
          */
-        hasData: function () {
+        hasPreviews: function () {
             return this.elems().some(function (elem) {
-                return !!elem.previews().length;
+                return !!elem.previews.length;
             });
         },
 
@@ -30,7 +31,7 @@ define([
          * @returns {Chips} Chainable.
          */
         clear: function () {
-            this.elems.each('clear');
+            _.invoke(this.elems(), 'clear');
 
             return this;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 8c22ae9f33c..48b812a3de8 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -120,7 +120,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe({
+                .track({
                     active: [],
                     previews: []
                 });
@@ -141,27 +141,6 @@ define([
             return this;
         },
 
-        /**
-         * Creates instance of a filter associated with the provided column.
-         *
-         * @param {Column} column - Column component for which to create a filter.
-         * @returns {Filters} Chainable.
-         */
-        initFilter: function (column) {
-            var index = column.index,
-                filter;
-
-            if (!column.filter || this.getFilter(index)) {
-                return this;
-            }
-
-            filter = this.buildFilter(column);
-
-            layout([filter]);
-
-            return this;
-        },
-
         /**
          * Called when another element was added to filters collection.
          *
@@ -184,7 +163,7 @@ define([
         clear: function (filter) {
             filter ?
                 filter.clear() :
-                this.active.each('clear');
+                _.invoke(this.active, 'clear');
 
             this.apply();
 
@@ -231,6 +210,27 @@ define([
             return this;
         },
 
+        /**
+         * Creates instance of a filter associated with the provided column.
+         *
+         * @param {Column} column - Column component for which to create a filter.
+         * @returns {Filters} Chainable.
+         */
+        addFilter: function (column) {
+            var index = column.index,
+                filter;
+
+            if (!column.filter || this.hasFilter(index)) {
+                return this;
+            }
+
+            filter = this.buildFilter(column);
+
+            layout([filter]);
+
+            return this;
+        },
+
         /**
          * Creates filter component configuration associated with the provided column.
          *
@@ -268,6 +268,16 @@ define([
             });
         },
 
+        /**
+         * Checks if collection contains a specfied filter.
+         *
+         * @param {String} index - Index of a filter.
+         * @returns {Boolean}
+         */
+        hasFilter: function (index) {
+            return !!this.getFilter(index);
+        },
+
         /**
          * Returns an array of range filters.
          *
@@ -307,7 +317,7 @@ define([
          * @returns {Boolean}
          */
         isFilterActive: function (filter) {
-            return this.active.contains(filter);
+            return _.contains(this.active, filter);
         },
 
         /**
@@ -326,7 +336,7 @@ define([
          * @returns {Filters} Chainable.
          */
         updateActive: function () {
-            this.active(this.elems.filter('hasData'));
+            this.active = this.elems.filter('hasData');
 
             return this;
         },
@@ -340,7 +350,7 @@ define([
         updatePreviews: function (filters) {
             var previews = filters.map(extractPreview);
 
-            this.previews(_.compact(previews));
+            this.previews = _.compact(previews);
 
             return this;
         },
@@ -351,7 +361,7 @@ define([
          * @param {Array} columns - Current columns list.
          */
         onColumnsUpdate: function (columns) {
-            columns.forEach(this.initFilter, this);
+            columns.forEach(this.addFilter, this);
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
index 482f452044d..86aea5c6474 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
@@ -4,11 +4,12 @@
  */
 
 define([
+    'ko',
     'underscore',
     'Magento_Ui/js/lib/spinner',
     'uiLayout',
     'uiComponent'
-], function (_, loader, layout, Component) {
+], function (ko, _, loader, layout, Component) {
     'use strict';
 
     return Component.extend({
@@ -36,18 +37,13 @@ define([
                 name: '${ $.name }_resize',
                 columnsProvider: '${ $.name }',
                 component: 'Magento_Ui/js/grid/resize',
-                provider: '${ $.provider }',
-                classResize: 'shadow-div',
-                divsAttrParams: {
-                    'data-cl-elem': 'shadow-div'
-                },
                 enabled: false
             },
             imports: {
                 rows: '${ $.provider }:data.items'
             },
             listens: {
-                elems: 'setPositions',
+                elems: 'setPositions updateVisible',
                 '${ $.provider }:reload': 'showLoader',
                 '${ $.provider }:reloaded': 'hideLoader'
             },
@@ -63,6 +59,8 @@ define([
          * @returns {Listing} Chainable.
          */
         initialize: function () {
+            _.bindAll(this, 'updateVisible');
+
             this._super();
 
             if (this.resizeConfig.enabled) {
@@ -87,8 +85,9 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe({
-                    rows: []
+                .track({
+                    rows: [],
+                    visibleColumns: []
                 });
 
             return this;
@@ -106,7 +105,7 @@ define([
         },
 
         /**
-         * Creates resize widget instance.
+         * Inititalizes resize component.
          *
          * @returns {Listing} Chainable.
          */
@@ -132,7 +131,7 @@ define([
          *
          * @returns {Listing} Chainable.
          */
-        initElement: function () {
+        initElement: function (element) {
             var currentCount = this.elems().length,
                 totalCount = this.initChildCount;
 
@@ -140,6 +139,10 @@ define([
                 this.initPositions();
             }
 
+            element.on('visible', this.updateVisible);
+
+            this.updateVisible();
+
             return this._super();
         },
 
@@ -213,17 +216,13 @@ define([
         },
 
         /**
-         * Hides loader.
+         *
+         * @returns {Array}
          */
-        hideLoader: function () {
-            loader.get(this.name).hide();
-        },
+        getVisible: function () {
+            var observable = ko.getObservable(this, 'visibleColumns');
 
-        /**
-         * Shows loader.
-         */
-        showLoader: function () {
-            loader.get(this.name).show();
+            return observable || this.visibleColumns;
         },
 
         /**
@@ -232,7 +231,18 @@ define([
          * @returns {Number}
          */
         countVisible: function () {
-            return this.elems.filter('visible').length;
+            return this.visibleColumns.length;
+        },
+
+        /**
+         * Updates array of visible columns.
+         *
+         * @returns {Listing} Chainable.
+         */
+        updateVisible: function () {
+            this.visibleColumns = this.elems.filter('visible');
+
+            return this;
         },
 
         /**
@@ -241,7 +251,21 @@ define([
          * @returns {Boolean}
          */
         hasData: function () {
-            return !!this.rows().length;
+            return !!this.rows.length;
+        },
+
+        /**
+         * Hides loader.
+         */
+        hideLoader: function () {
+            loader.get(this.name).hide();
+        },
+
+        /**
+         * Shows loader.
+         */
+        showLoader: function () {
+            loader.get(this.name).show();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
index 3f8c6cd8a65..01729f4aebd 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
@@ -38,13 +38,13 @@ define([
 
             exports: {
                 pageSize: '${ $.provider }:params.paging.pageSize',
-                current: '${ $.provider }:params.paging.current',
-                pages: '${ $.provider }:data.pages'
+                current: '${ $.provider }:params.paging.current'
             },
 
             listens: {
                 'pages': 'onPagesChange',
-                'pageSize totalRecords': 'countPages',
+                'pageSize': 'onPageSizeChange',
+                'totalRecords': 'updateCounter',
                 '${ $.provider }:params.filters': 'goFirst'
             },
 
@@ -61,7 +61,7 @@ define([
         initialize: function () {
             this._super()
                 .initSizes()
-                .countPages();
+                .updateCounter();
 
             return this;
         },
@@ -73,17 +73,16 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
+                .track([
                     'totalSelected',
                     'totalRecords',
                     'pageSize',
-                    'current',
                     'pages',
-                    'options'
+                    'current'
                 ]);
 
             this._current = ko.pureComputed({
-                read: this.current,
+                read: ko.getObservable(this, 'current'),
 
                 /**
                  * Validates page change according to user's input.
@@ -91,10 +90,8 @@ define([
                  * Calls reload method then.
                  */
                 write: function (value) {
-                    value = this.normalize(value);
-
-                    this.current(value);
-                    this._current.notifySubscribers(value);
+                    this.setPage(value)
+                        ._current.notifySubscribers(this.current);
                 },
 
                 owner: this
@@ -121,7 +118,7 @@ define([
          * @returns {Paging} Chainable.
          */
         setPage: function (value) {
-            this.current(this.normalize(value));
+            this.current = this.normalize(value);
 
             return this;
         },
@@ -132,7 +129,7 @@ define([
          * @returns {Paging} Chainable.
          */
         next: function () {
-            this.setPage(this.current() + 1);
+            this.setPage(this.current + 1);
 
             return this;
         },
@@ -143,7 +140,7 @@ define([
          * @returns {Paging} Chainable.
          */
         prev: function () {
-            this.setPage(this.current() - 1);
+            this.setPage(this.current - 1);
 
             return this;
         },
@@ -154,7 +151,7 @@ define([
          * @returns {Paging} Chainable.
          */
         goFirst: function () {
-            this.current(1);
+            this.current = 1;
 
             return this;
         },
@@ -165,7 +162,7 @@ define([
          * @returns {Paging} Chainable.
          */
         goLast: function () {
-            this.current(this.pages());
+            this.current = this.pages;
 
             return this;
         },
@@ -176,7 +173,7 @@ define([
          * @returns {Boolean}
          */
         isFirst: function () {
-            return this.current() === 1;
+            return this.current === 1;
         },
 
         /**
@@ -185,7 +182,41 @@ define([
          * @returns {Boolean}
          */
         isLast: function () {
-            return this.current() === this.pages();
+            return this.current === this.pages;
+        },
+
+        /**
+         * Updates number of pages.
+         */
+        updateCounter: function () {
+            this.pages = Math.ceil(this.totalRecords / this.pageSize) || 1;
+
+            return this;
+        },
+
+        /**
+         * Calculates new page cursor based on the
+         * previous and current page size values.
+         *
+         * @returns {Number} Updated cursor value.
+         */
+        updateCursor: function () {
+            var cursor  = this.current - 1,
+                size    = this.pageSize,
+                oldSize = this.previousSize,
+                delta   = cursor * (oldSize  - size) / size;
+
+            delta = size > oldSize ?
+                Math.ceil(delta) :
+                Math.floor(delta);
+
+            cursor += delta + 1;
+
+            this.previousSize = size;
+
+            this.setPage(cursor);
+
+            return this;
         },
 
         /**
@@ -196,37 +227,28 @@ define([
          * @returns {Number}
          */
         normalize: function (value) {
-            var total = this.pages();
-
             value = +value;
 
             if (isNaN(value)) {
                 return 1;
             }
 
-            return utils.inRange(Math.round(value), 1, total);
+            return utils.inRange(Math.round(value), 1, this.pages);
         },
 
         /**
-         * Calculates number of pages.
+         * Handles changes of the page size.
          */
-        countPages: function () {
-            var pages = Math.ceil(this.totalRecords() / this.pageSize());
-
-            this.pages(pages || 1);
+        onPageSizeChange: function () {
+            this.updateCounter()
+                .updateCursor();
         },
 
         /**
-         * Listens changes of the 'pages' property.
-         * Might change current page if its' value
-         * is greater than total amount of pages.
-         *
-         * @param {Number} pages - Total amount of pages.
+         * Handles changes of the pages amount.
          */
-        onPagesChange: function (pages) {
-            var current = this.current;
-
-            current(utils.inRange(current(), 1, pages));
+        onPagesChange: function () {
+            this.updateCursor();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
index 62908da3722..02dfbf47c3a 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
@@ -16,8 +16,6 @@ define([
             value: 20,
             minSize: 1,
             maxSize: 999,
-            customVisible: false,
-            customValue: '',
             options: {
                 '20': {
                     value: 20,
@@ -40,8 +38,7 @@ define([
                     label: 200
                 }
             },
-            optionsArray: [],
-            links: {
+            statefull: {
                 options: '${ $.storageConfig.path }.options',
                 value: '${ $.storageConfig.path }.value'
             },
@@ -70,16 +67,18 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
-                    'optionsArray',
-                    'editing',
+                .track([
                     'value',
+                    'editing',
                     'customVisible',
                     'customValue'
-                ]);
+                ])
+                .track({
+                    optionsArray: []
+                });
 
             this._value = ko.pureComputed({
-                read: this.value,
+                read: ko.getObservable(this, 'value'),
 
                 /**
                  * Validates input field prior to updating 'value' property.
@@ -87,7 +86,7 @@ define([
                 write: function (value) {
                     value = this.normalize(value);
 
-                    this.value(value);
+                    this.value = value;
                     this._value.notifySubscribers(value);
                 },
 
@@ -104,7 +103,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         edit: function (value) {
-            this.editing(value);
+            this.editing = value;
 
             return this;
         },
@@ -115,7 +114,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         discardEditing: function () {
-            var value = this.editing();
+            var value = this.editing;
 
             if (value) {
                 this.updateSize(value, value);
@@ -142,7 +141,7 @@ define([
          * @returns {Number}
          */
         getFirst: function () {
-            return this.optionsArray()[0].value;
+            return this.optionsArray[0].value;
         },
 
         /**
@@ -162,7 +161,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         setSize: function (value) {
-            this.value(value);
+            this.value = value;
 
             return this;
         },
@@ -283,7 +282,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         showCustom: function () {
-            this.customVisible(true);
+            this.customVisible = true;
 
             return this;
         },
@@ -294,7 +293,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         hideCustom: function () {
-            this.customVisible(false);
+            this.customVisible = false;
 
             return this;
         },
@@ -305,7 +304,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         clearCustom: function () {
-            this.customValue('');
+            this.customValue = '';
 
             return this;
         },
@@ -316,7 +315,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         applyCustom: function () {
-            var value = this.customValue();
+            var value = this.customValue;
 
             value = this.normalize(value);
 
@@ -333,7 +332,7 @@ define([
          * @returns {Boolean}
          */
         isCustomVisible: function () {
-            return this.customVisible();
+            return this.customVisible;
         },
 
         /**
@@ -361,9 +360,7 @@ define([
         updateArray: function () {
             var array = _.values(this.options);
 
-            array = _.sortBy(array, 'value');
-
-            this.optionsArray(array);
+            this.optionsArray = _.sortBy(array, 'value');
 
             return this;
         },
@@ -375,7 +372,7 @@ define([
          * @returns {Boolean}
          */
         isEditing: function (value) {
-            return this.editing() === value;
+            return this.editing === value;
         },
 
         /**
@@ -385,7 +382,7 @@ define([
          * @returns {Boolean}
          */
         isSelected: function (value) {
-            return this.value() === value;
+            return this.value === value;
         },
 
         /**
@@ -400,8 +397,9 @@ define([
          * Listener of the 'options' object changes.
          */
         onSizesChange: function () {
-            this.editing(false)
-                .updateArray();
+            this.editing = false;
+
+            this.updateArray();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/provider.js b/app/code/Magento/Ui/view/base/web/js/grid/provider.js
index f665319bdc1..b4aa11c5111 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/provider.js
@@ -26,7 +26,7 @@ define([
          * @returns {Provider} Chainable.
          */
         initialize: function () {
-            utils.limit(this, 'reload', 200);
+            utils.limit(this, 'reload', 300);
             _.bindAll(this, 'onReload');
 
             return this._super();
@@ -40,7 +40,7 @@ define([
         initConfig: function () {
             this._super();
 
-            _.extend(this.data, {
+            this.setData({
                 items: [],
                 totalRecords: 0
             });
@@ -48,20 +48,39 @@ define([
             return this;
         },
 
+        /**
+         *
+         * @param {Object} data
+         * @returns {Provider} Chainable.
+         */
+        setData: function (data) {
+            data = this.processData(data);
+
+            this.set('data', data);
+
+            return this;
+        },
+
         /**
          * Reloads data with current parameters.
          */
         reload: function () {
             this.trigger('reload');
 
-            $.ajax({
-                url: this.update_url,
+            if (this.request && this.request.readyState !== 4) {
+                this.request.abort();
+            }
+
+            this.request = $.ajax({
+                url: this['update_url'],
                 method: 'GET',
                 data: this.get('params'),
                 dataType: 'json'
-            })
-            .error(this.onError)
-            .done(this.onReload);
+            });
+
+            this.request
+                .done(this.onReload)
+                .error(this.onError);
         },
 
         /**
@@ -83,7 +102,11 @@ define([
         /**
          * Handles reload error.
          */
-        onError: function () {
+        onError: function (xhr) {
+            if (xhr.statusText === 'abort') {
+                return;
+            }
+
             alert({
                 content: $t('Something went wrong.')
             });
@@ -95,9 +118,7 @@ define([
          * @param {Object} data - Retrieved data object.
          */
         onReload: function (data) {
-            data = this.processData(data);
-
-            this.set('data', data)
+            this.setData(data)
                 .trigger('reloaded');
         }
     });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
index cef9cb707cf..771126ff3a6 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
@@ -531,7 +531,7 @@ define([
                 nextElemData = this.hasColumn(nextElemModel, false, true);
 
             if (nextElemData) {
-                if (nextElemModel.visible()) {
+                if (nextElemModel.visible) {
                     return nextElemData;
                 }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
index 71e0570311a..9df534c8d59 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
@@ -51,11 +51,8 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
-                    'inputValue',
-                    'value'
-                ])
-                .observe({
+                .track('inputValue value')
+                .track({
                     previews: []
                 });
 
@@ -79,7 +76,7 @@ define([
          * @returns {Search} Chainable.
          */
         clear: function () {
-            this.value('');
+            this.value = '';
 
             return this;
         },
@@ -90,7 +87,7 @@ define([
          * @returns {Search} Chainable.
          */
         cancel: function () {
-            this.inputValue(this.value());
+            this.inputValue = this.value;
 
             return this;
         },
@@ -103,10 +100,9 @@ define([
          * @returns {Search} Chainable.
          */
         apply: function (value) {
-            value = value || this.inputValue();
+            value = value || this.inputValue;
 
-            this.value(value);
-            this.inputValue(value);
+            this.value = this.inputValue = value;
 
             return this;
         },
@@ -123,11 +119,11 @@ define([
                 preview.push({
                     elem: this,
                     label: this.label,
-                    preview: this.value()
+                    preview: this.value
                 });
             }
 
-            this.previews(preview);
+            this.previews = preview;
 
             return this;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js b/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
index c6c1c195186..7fc41cf7f74 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
@@ -9,35 +9,52 @@ define([
 ], function (ko, _, utils) {
     'use strict';
 
-     /**
-     * Wrapper for ko.observable and ko.observableArray.
-     * Assignes one or another ko property to obj[key]
+    /**
+     * Creates observable property using knockouts'
+     * 'observableArray' or 'observable' methods,
+     * depending on a type of 'value' parameter.
      *
-     * @param {Object} obj - object to store property to
-     * @param {String} key - key
-     * @param {*} value - initial value of observable
+     * @param {Object} obj - Object to whom property belongs.
+     * @param {String} key - Key of the property.
+     * @param {*} value - Initial value.
      */
-    function observe(obj, key, value) {
+    function observable(obj, key, value) {
         var method = Array.isArray(value) ? 'observableArray' : 'observable';
 
         if (_.isFunction(obj[key]) && !ko.isObservable(obj[key])) {
             return;
         }
 
-        if (ko.isObservable(obj[key])) {
-            if (ko.isObservable(value)) {
-                value = value();
-            }
+        if (ko.isObservable(value)) {
+            value = value();
+        }
 
-            obj[key](value);
+        ko.isObservable(obj[key]) ?
+            obj[key](value) :
+            obj[key] = ko[method](value);
+    }
 
+    /**
+     * Creates observable propery using 'track' method.
+     *
+     * @param {Object} obj - Object to whom property belongs.
+     * @param {String} key - Key of the property.
+     * @param {*} value - Initial value.
+     */
+    function accessor(obj, key, value) {
+        if (_.isFunction(obj[key]) || ko.isObservable(obj[key])) {
             return;
         }
 
-        obj[key] = ko[method](value);
+        obj[key] = value;
+
+        if (!ko.es5.isTracked(obj, key)) {
+            ko.track(obj, [key]);
+        }
     }
 
     return {
+
         /**
          * Returns value of the nested property.
          *
@@ -101,33 +118,74 @@ define([
         },
 
         /**
-         * If 2 params passed, path is considered as key.
-         * Else, path is considered as object.
-         * Assignes props to this based on incoming params
+         * Creates observable properties for the current object.
+         *
+         * If 'useTrack' flag is set to 'true' then each property will be
+         * created with a ES5 get/set accessor descriptors, instead of
+         * making them an observable functions.
+         * See 'knockout-es5' library for more information.
          *
-         * @param {(Object|String)} path
+         * @param {Boolean} [useAccessors=false] - Whether to create an
+         *      observable function or to use property accesessors.
+         * @param {(Object|String|Array)} properties - List of observable properties.
          * @returns {Component} Chainable.
+         *
+         * @example Sample declaration and equivalent knockout methods.
+         *      this.key = 'value';
+         *      this.array = ['value'];
+         *
+         *      this.observe(['key', 'array']);
+         *      =>
+         *          this.key = ko.observable('value');
+         *          this.array = ko.observableArray(['value']);
+         *
+         * @example Another syntaxes of the previous example.
+         *      this.observe({
+         *          key: 'value',
+         *          array: ['value']
+         *      });
          */
-        observe: function (path) {
-            var type = typeof path;
+        observe: function (useAccessors, properties) {
+            var model = this,
+                trackMethod;
 
-            if (type === 'string') {
-                path = path.split(' ');
+            if (typeof useAccessors !== 'boolean') {
+                properties   = useAccessors;
+                useAccessors = false;
             }
 
-            if (Array.isArray(path)) {
-                path.forEach(function (key) {
-                    observe(this, key, this[key]);
-                }, this);
-            } else if (type === 'object') {
-                _.each(path, function (value, key) {
-                    observe(this, key, value);
-                }, this);
+            trackMethod = useAccessors ? accessor : observable;
+
+            if (_.isString(properties)) {
+                properties = properties.split(' ');
+            }
+
+            if (Array.isArray(properties)) {
+                properties.forEach(function (key) {
+                    trackMethod(model, key, model[key]);
+                });
+            } else if (typeof properties === 'object') {
+                _.each(properties, function (value, key) {
+                    trackMethod(model, key, value);
+                });
             }
 
             return this;
         },
 
+        /**
+         * Delegates call to 'observe' method but
+         * with a predefined 'useAccessors' flag.
+         *
+         * @param {(String|Array|Object)} properties - List of observable properties.
+         * @returns {Component} Chainable.
+         */
+        track: function (properties) {
+            this.observe(true, properties);
+
+            return this;
+        },
+
         /**
          *
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/events.js b/app/code/Magento/Ui/view/base/web/js/lib/events.js
index 5ef76cfa2ce..98df28ffa4f 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/events.js
@@ -38,11 +38,16 @@ define([
      * @param {String} name - Name of the event.
      */
     function addHandler(obj, ns, callback, name) {
-        var events = getEvents(obj),
+        var events      = getEvents(obj),
+            observable,
             data;
 
-        if (ko.isObservable(obj[name])) {
-            obj[name].subscribe(callback);
+        observable = !ko.isObservable(obj[name]) ?
+            ko.getObservable(obj, name) :
+            obj[name];
+
+        if (observable) {
+            observable.subscribe(callback);
 
             return;
         }
@@ -86,6 +91,7 @@ define([
     }
 
     return {
+
         /**
          * Calls callback when name event is triggered.
          * @param  {String}   events
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js
new file mode 100644
index 00000000000..5a6207b4c5a
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js
@@ -0,0 +1,34 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'ko',
+    'jquery'
+], function (ko, $) {
+    'use strict';
+
+    /**
+     * 'Focus' event handler.
+     *
+     * @param {EventObject} e
+     */
+    function onFocus(e) {
+        e.target.select();
+    }
+
+    ko.bindingHandlers.autoselect = {
+
+        /**
+         * Adds event handler which automatically
+         * selects inputs' element text when field gets focused.
+         */
+        init: function (element, valueAccessor) {
+            var enabled = ko.unwrap(valueAccessor());
+
+            if (enabled !== false) {
+                $(element).on('focus', onFocus);
+            }
+        }
+    };
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
deleted file mode 100644
index 8d3b6bbfbd0..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'ko',
-    'underscore'
-], function(ko, _) {
-    'use strict';
-
-    ko.bindingHandlers['class'] = {
-        /**
-         * @param {HTMLElement} element - Element, that binding is applied to
-         * @param {Function} valueAccessor - Function that returns value, passed to binding
-         */
-        update: function (element, valueAccessor) {
-            var currentValue = ko.utils.unwrapObservable(valueAccessor()),
-                prevValue = element['__ko__previousClassValue__'],
-
-                /**
-                 * Helper for setting classes11
-                 * @param {Array|Object|String} singleValueOrArrayOrObject
-                 * @param {Boolean} shouldHaveClass
-                 */
-                addOrRemoveClasses = function addOrRemoveClassesFn (singleValueOrArrayOrObject, shouldHaveClass) {
-                    if (_.isArray(singleValueOrArrayOrObject)) {
-                        ko.utils.arrayForEach(singleValueOrArrayOrObject, function (cssClass) {
-                            var value = ko.utils.unwrapObservable(cssClass);
-                            ko.utils.toggleDomNodeCssClass(element, value, shouldHaveClass);
-                        });
-                    } else if (_.isObject(singleValueOrArrayOrObject)) {
-                        _.each(singleValueOrArrayOrObject, function(classname, condition) {
-                            if(ko.utils.unwrapObservable(condition)) {
-                                ko.utils.toggleDomNodeCssClass(element, classname, shouldHaveClass);
-                            }
-                        })
-
-                    } else if (singleValueOrArrayOrObject) {
-                        ko.utils.toggleDomNodeCssClass(element, singleValueOrArrayOrObject, shouldHaveClass);
-                    }
-                };
-
-            // Remove old value(s) (preserves any existing CSS classes)
-            addOrRemoveClasses(prevValue, false);
-
-            // Set new value(s)
-            addOrRemoveClasses(currentValue, true);
-
-            // Store a copy of the current value
-            element['__ko__previousClassValue__'] = currentValue.concat();
-        }
-    };
-});
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
new file mode 100644
index 00000000000..dc49e5575a8
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
@@ -0,0 +1,99 @@
+define([
+    'ko'
+], function (ko) {
+    'use strict';
+
+    ko.bindingHandlers.staticChecked = {
+        'after': ['value', 'attr'],
+
+        /**
+         * Implements same functionality as a standard 'checked' binding,
+         * but with a difference that it wont' change values array if
+         * value of DOM element changes.
+         */
+        init: function (element, valueAccessor, allBindings) {
+            var isCheckbox = element.type === 'checkbox',
+                isRadio = element.type === 'radio',
+                isValueArray,
+                oldElemValue,
+                useCheckedValue,
+                checkedValue,
+                updateModel,
+                updateView;
+
+            if (!isCheckbox && !isRadio) {
+                return;
+            }
+
+            checkedValue = ko.pureComputed(function () {
+                if (allBindings.has('checkedValue')) {
+                    return ko.utils.unwrapObservable(allBindings.get('checkedValue'));
+                } else if (allBindings.has('value')) {
+                    return ko.utils.unwrapObservable(allBindings.get('value'));
+                }
+
+                return element.value;
+            });
+
+            isValueArray = isCheckbox && ko.utils.unwrapObservable(valueAccessor()) instanceof Array;
+            oldElemValue = isValueArray ? checkedValue() : undefined;
+            useCheckedValue = isRadio || isValueArray;
+
+            /**
+             * Updates values array if it's necessary.
+             */
+            updateModel = function () {
+                var isChecked = element.checked,
+                    elemValue = useCheckedValue ? checkedValue() : isChecked,
+                    modelValue;
+
+                if (ko.computedContext.isInitial()) {
+                    return;
+                }
+
+                if (isRadio && !isChecked) {
+                    return;
+                }
+
+                modelValue = ko.dependencyDetection.ignore(valueAccessor);
+
+                if (isValueArray) {
+                    if (oldElemValue !== elemValue) {
+                        oldElemValue = elemValue;
+                    } else {
+                        ko.utils.addOrRemoveItem(modelValue, elemValue, isChecked);
+                    }
+                } else {
+                    ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true);
+                }
+            };
+
+            /**
+             * Updates checkbox state.
+             */
+            updateView = function () {
+                var modelValue = ko.utils.unwrapObservable(valueAccessor());
+
+                if (isValueArray) {
+                    element.checked = ko.utils.arrayIndexOf(modelValue, checkedValue()) >= 0;
+                } else if (isCheckbox) {
+                    element.checked = modelValue;
+                } else {
+                    element.checked = checkedValue() === modelValue;
+                }
+            };
+
+            ko.computed(updateModel, null, {
+                disposeWhenNodeIsRemoved: element
+            });
+
+            ko.utils.registerEventHandler(element, 'click', updateModel);
+
+            ko.computed(updateView, null, {
+                disposeWhenNodeIsRemoved: element
+            });
+        }
+    };
+
+    ko.expressionRewriting.twoWayBindings.staticChecked = true;
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
deleted file mode 100644
index 7269d7774a3..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/** Creates stopPropagation binding and registers in to ko.bindingHandlers object */
-define(['ko'], function (ko) {
-    'use strict';
-
-    ko.bindingHandlers.stopPropagation = {
-
-        /**
-         * Stops propagation on element
-         * @param  {HTMLElement} element - element to apply binding to
-         */
-        init: function (element) {
-          ko.utils.registerEventHandler(element, 'click', function (event) {
-              event.cancelBubble = true;
-              if (event.stopPropagation) {
-                 event.stopPropagation(); 
-              }
-          });
-        }
-    };
-});
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
index 2b0f3d1fc5d..3ca5a53bbb4 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
@@ -7,9 +7,12 @@
 define([
     'ko',
     './template/engine',
+    'knockoutjs/knockout-repeat',
+    'knockoutjs/knockout-fast-foreach',
+    'knockoutjs/knockout-es5',
     './bind/scope',
+    './bind/staticChecked',
     './bind/datepicker',
-    './bind/stop_propagation',
     './bind/outer_click',
     './bind/keyboard',
     './bind/optgroup',
@@ -18,6 +21,7 @@ define([
     './bind/after-render',
     './bind/i18n',
     './bind/collapsible',
+    './bind/autoselect',
     './extender/observable_array',
     './extender/bound-nodes',
     './extender/observable_array'
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
index 09c398ef01a..69fcebf547e 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
@@ -9,10 +9,13 @@ define([
 ], function (_, utils) {
     'use strict';
 
+    /**
+     * @constructor
+     */
     function Events(storage) {
         this.id = 0,
 
-        this.requests   = new Map()
+        this.requests   = new Map();
         this.map        = {};
         this.storage    = storage;
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
index e31839400d0..eb01b49615c 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
@@ -10,6 +10,19 @@ define([
 ], function (utils, _, Storage, Events) {
     'use strict';
 
+    /**
+     * Wrapper function used for convinient access to elements.
+     * See 'async' method for examples of usage and comparison
+     * with a regular 'get' method.
+     *
+     * @param {String} name - Key of the requested element.
+     * @param {Registry} registry - Instance of a registry
+     *      where to search for the element.
+     * @param {(Function|String)} [method] - Optional callback function
+     *      or a name of the elements' method which
+     *      will be invoked when element is registered.
+     * @returns {*}
+     */
     function async(name, registry, method) {
         var args = _.toArray(arguments).slice(3);
 
@@ -24,6 +37,9 @@ define([
         }
     }
 
+    /**
+     * @constructor
+     */
     function Registry() {
         this.storage = new Storage();
         this.events = new Events(this.storage);
@@ -35,15 +51,12 @@ define([
         /**
          * Retrieves data from registry.
          *
-         * @param {(String|Array)} elems -
-         *      An array of elements' names or a string of names divided by spaces.
-         * @param {Function} [callback] -
-         *      Callback function that will be triggered
-         *      when all of the elements are registered.
-         * @returns {Array|*|Undefined}
-         *      Returns either an array of elements
-         *      or an element itself if only is requested.
-         *      If callback function is specified then returns 'undefined'.
+         * @param {(String|Array)} elems - An array of elements' names or
+         *      a string of names divided by spaces.
+         * @param {Function} [callback] - Callback function that will be invoked
+         *      when all of the requested elements are registered.
+         * @returns {Array|*|Undefined} An array of elements
+         *      or an element itself if only one was requested.
          */
         get: function (elems, callback) {
             var records;
@@ -61,12 +74,12 @@ define([
             }
         },
 
-       /**
+        /**
          * Sets data to registry.
          *
          * @param {String} elem - Elements' name.
          * @param {*} value - Value that will be assigned to the element.
-         * @returns {registry} Chainable.
+         * @returns {Registry} Chainable.
          */
         set: function (elem, value) {
             this.storage.set(elem, value);
@@ -77,9 +90,10 @@ define([
 
         /**
          * Removes specified elements from a storage.
-         * @param {(String|Array)} elems -
-         *      An array of elements' names or a string of names divided by spaces.
-         * @returns {registry} Chainable.
+         *
+         * @param {(String|Array)} elems - An array of elements' names or
+         *      a string of names divided by spaces.
+         * @returns {Registry} Chainable.
          */
         remove: function (elems) {
             elems = utils.stringToArray(elems);
@@ -89,11 +103,11 @@ define([
             return this;
         },
 
-       /**
+        /**
          * Checks whether specified elements has been registered.
          *
-         * @param {(String|Array)} elems -
-         *      An array of elements' names or a string of names divided by spaces.
+         * @param {(String|Array)} elems - An array of elements' names or
+         *      a string of names divided by spaces.
          * @returns {Boolean}
          */
         has: function (elems) {
@@ -102,10 +116,40 @@ define([
             return this.storage.has(elems);
         },
 
+        /**
+         * Creates a function wrapper for the specified element,
+         * to provide more convinient access.
+         *
+         * @param {String} name - Name of the element.
+         * @returns {Function}
+         *
+         * @example Comparison with a 'get' method on requesting elements.
+         *      var module = registry.async('name');
+         *
+         *      module();
+         *      => registry.get('name');
+         *
+         * @example Requesting an element with a callback.
+         *      module(function (component) {});
+         *
+         *      => registry.get('name', function (component) {});
+         *
+         * @example Requesting an element and invoking its' method.
+         *      module('trigger', true);
+         *
+         *      => registry.get('name', function (component) {
+         *          component.trigger(true);
+         *      });
+         */
         async: function (name) {
             return async.bind(null, name, this);
         },
 
+        /**
+         * Creates new instance of a Registry.
+         *
+         * @returns {Registry} New instance.
+         */
         create: function () {
             return new Registry;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
index ae3063cb07c..5012eba16a5 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
@@ -7,6 +7,9 @@ define([
 ], function () {
     'use strict';
 
+    /**
+     * @constructor
+     */
     function Storage() {
         this.data = new Map();
     }
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html
index 22105aed42f..653696ed6fd 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html
@@ -4,50 +4,49 @@
  * See COPYING.txt for license details.
  */
 -->
+<!-- ko if: $col.isSingle($row()._rowIndex) -->
+<a
+    class="action-menu-item"
+    data-bind="
+        repeat: {
+            foreach: $col.getVisibleActions($row()._rowIndex),
+            item: '$action'
+        }"
+    data-repeat-bind="
+        attr: {
+            href: $action().href
+        },
+        click: $col.getActionHandler($action()),
+        text: $action().label"
+    ></a>
+<!-- /ko -->
 
-<td data-bind="visible: visible" class="data-grid-actions-cell">
-    <!-- ko if: isSingle(row._rowIndex) -->
-        <!-- ko foreach: getVisibleActions(row._rowIndex) -->
-    <a
-        class="action-menu-item"
+<!-- ko if: $col.isMultiple($row()._rowIndex) -->
+<div
+    class="action-select-wrap"
+    data-bind="collapsible">
+    <button class="action-select" data-bind="toggleCollapsible">
+        <span data-bind="i18n: 'Select'"></span>
+    </button>
+    <ul
+        class="action-menu"
         data-bind="
-            attr: {
-                href: $data.href
-            },
-            click: $parent.isHandlerRequired(index, rowIndex) ?
-                $parent.applyAction.bind($parent, index, rowIndex) :
-                false,
-            text: $data.label"></a>
-        <!-- /ko -->
-    <!-- /ko -->
-
-    <!-- ko if: isMultiple(row._rowIndex) -->
-    <div
-        class="action-select-wrap"
-        data-bind="collapsible">
-        <button class="action-select" data-bind="toggleCollapsible">
-            <span data-bind="i18n: 'Select'"></span>
-        </button>
-        <ul
-            class="action-menu"
-            data-bind="css: {
-            '_active': $collapsible.opened
-            },
-            foreach: getVisibleActions(row._rowIndex)"
-            >
-            <li>
-                <a
-                    class="action-menu-item"
-                    data-bind="
-                        attr: {
-                            href: $data.href
-                        },
-                        click: $parent.isHandlerRequired(index, rowIndex) ?
-                            $parent.applyAction.bind($parent, index, rowIndex) :
-                            false,
-                        text: $data.label"></a>
-            </li>
-        </ul>
-    </div>
-    <!-- /ko -->
-</td>
+            css: {'_active': $collapsible.opened}">
+        <li
+            data-bind="
+                repeat: {
+                    foreach: $col.getVisibleActions($row()._rowIndex),
+                    item: '$action'
+                }">
+            <a
+                class="action-menu-item"
+                data-bind="
+                    attr: {
+                        href: $action().href
+                    },
+                    click: $col.getActionHandler($action()),
+                    text: $action().label"></a>
+        </li>
+    </ul>
+</div>
+<!-- /ko -->
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html
index 9d5226a5e3c..5e48189716a 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html
@@ -4,16 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<td
-    data-bind="
-        visible: visible,
-        css: { _dragging: dragging },
-        click: hasFieldAction() ?
-            applyFieldAction.bind($data, row._rowIndex) :
-            false"
-    data-action="grid-row-edit">
-    <div
-            data-bind="html: getLabel(row[field.index])"
-            class="data-grid-cell-content">
-    </div>
-</td>
+<div
+    class="data-grid-cell-content"
+    data-bind="html: $col.getLabel($row())">
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html
index 242c651f006..f0964a155e1 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html
@@ -4,20 +4,16 @@
  * See COPYING.txt for license details.
  */
 -->
-
-<td class="data-grid-checkbox-cell" data-bind="visible: visible">
-    <label class="data-grid-checkbox-cell-inner">
-        <input
-            class="admin__control-checkbox"
-            type="checkbox"
-            data-action="select-row"
-            data-bind="
-                disable: disabled.indexOf(row[indexField]) != -1,
-                checked: selected,
-                value: row[indexField],
-                attr: {
-                    id: 'check' + row[indexField]
-                }">
-        <label data-bind="attr: {for: 'check' + row[indexField]}"></label>
-    </label>
-</td>
+<label class="data-grid-checkbox-cell-inner">
+    <input
+        class="admin__control-checkbox"
+        type="checkbox"
+        data-action="select-row"
+        data-bind="
+            staticChecked: $col.selected,
+            checkedValue: $row()[$col.indexField],
+            attr: {
+                id: 'check' + $row()[$col.indexField]
+            }">
+    <label data-bind="attr: {for: 'check' + $row()[$col.indexField]}"></label>
+</label>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html
index 3544f503de6..bdd0d673514 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html
@@ -4,17 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<td
-    data-bind="
-        visible: visible,
-        css: { _dragging: dragging },
-        click: hasFieldAction() ?
-            applyFieldAction.bind($data, row._rowIndex) :
-            false"
-    data-action="grid-row-edit">
-    <div
-        data-bind="
-            text: getLabel(row[field.index])"
-            class="data-grid-cell-content">
-    </div>
-</td>
+<div
+    class="data-grid-cell-content"
+    data-bind="text: $col.getLabel($row())">
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html
index d8ce11138de..e45dd5eabc3 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html
@@ -4,12 +4,11 @@
  * See COPYING.txt for license details.
  */
 -->
-<td class="data-grid-thumbnail-cell"
-    data-bind="visible: visible, click: isPreviewAvailable() ? preview.bind($data, row, $parentContext.$index()) : false"
-    data-action="grid-row-edit">
-    <img src="" class="admin__control-thumbnail" data-bind="
-    attr: {
-        src: getSrc(row),
-        alt: getAlt(row)
-    }"/>
-</td>
+<img
+    class="admin__control-thumbnail"
+    data-bind="
+        attr: {
+            src: $col.getSrc($row()),
+            alt: $col.getAlt($row())
+        }
+    "/>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html
index 4606d8e27b9..8caad7bfc09 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html
@@ -5,7 +5,7 @@
  */
 -->
 
-<th class="data-grid-multicheck-cell" data-bind="visible: visible">
+<th class="data-grid-multicheck-cell">
     <div
         class="action-multicheck-wrap"
         data-bind="css: {'_disabled': !totalRecords()},
@@ -36,4 +36,4 @@
             </li>
         </ul>
     </div>
-</th>
+</th>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html
index dfd36be3f73..318cb9d0942 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html
@@ -10,13 +10,12 @@
         css: {
             '_sortable': sortable,
             '_draggable': draggable,
-            '_ascend': sorting() === 'asc',
-            '_descend': sorting() === 'desc'
+            '_ascend': sorting === 'asc',
+            '_descend': sorting === 'desc'
         },
-        click: sort,
-        visible: visible">
+        click: sort">
     <span
         class="data-grid-cell-content"
         data-bind="text: label">
     </span>
-</th>
+</th>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html
index 850f3c2fce7..8dcb904750d 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html
@@ -15,15 +15,63 @@
         data-bind="toggleCollapsible"
         data-toggle="dropdown"
         aria-haspopup="true">
-        <span class="admin__action-dropdown-text"
-                data-bind="i18n: activeView() ? activeView().label() : 'Default View' "></span>
+        <span
+            class="admin__action-dropdown-text"
+            data-bind="text: activeView.label"></span>
     </button>
     <ul class="admin__action-dropdown-menu">
-        <!-- ko foreach: elems -->
-            <!-- ko template: getTemplate() --><!-- /ko -->
-        <!-- /ko -->
-        <li data-bind="visible: hasChanges" class="action-dropdown-menu-action action-dropdown-menu-item-last">
-            <a href="" data-bind="click: createNewView, i18n: 'Save Current View'"></a>
+        <li 
+            data-bind="repeat: {
+                foreach: viewsArray,
+                item: '$view'
+            }"
+            data-repeat-bind="
+                css: {
+                    _edit: isEditing($view().index)
+                },
+                outerClick: endEdit.bind($data, $view().index),
+                template: viewTmpl
+            ">
+        </li>
+        <li data-bind="
+                visible: hasChanges,
+                outerClick: hideCustom.bind($data),
+                css: {
+                        _edit: customVisible,
+                        'action-dropdown-menu-action action-dropdown-menu-item-last': !customVisible
+                    }
+                ">
+            <a href=""
+                data-bind="
+                    visible: !customVisible,
+                    click: showCustom,
+                    i18n: 'Save View As...'
+                "></a>
+            <div class="action-dropdown-menu-item-edit" data-bind="visible: customVisible">
+                <input
+                    class="admin__control-text"
+                    data-bind="
+                        value: customLabel,
+                        autoselect,
+                        hasFocus: isCustomVisible(),
+                        keyboard: {
+                            13: applyCustom.bind($data),
+                            27: hideCustom.bind($data)
+                        }"
+                    type="text">
+                <div class="action-dropdown-menu-item-actions">
+                   <button
+                        class="action-submit"
+                        data-bind="
+                            attr: {
+                                title: $t('Save all changes')
+                            },
+                            click: applyCustom"
+                        type="button">
+                        <span data-bind="i18n: 'Submit'"></span>
+                    </button>
+                </div>
+            </div>
         </li>
     </ul>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html
index 707fad8eabb..6aa2fc95562 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html
@@ -4,52 +4,70 @@
  * See COPYING.txt for license details.
  */
 -->
-<li
-    data-bind="css: {_edit: editing}, outerClick: endEdit.bind($data)">
-    <!-- ko if: editable -->
-    <div class="action-dropdown-menu-item-edit">
-        <input
-            class="admin__control-text"
+<!-- ko if: $view().editable -->
+<div
+    class="action-dropdown-menu-item-edit">
+    <input
+        class="admin__control-text"
+        data-bind="
+            value: $view().value,
+            hasFocus: isEditing($view().index),
+            autoselect,
+            attr: {
+                placeholder: $view().label
+            },
+            keyboard: {
+                13: updateAndSave.bind($data, $view().index),
+                27: endEdit.bind($data, $view().index)
+            }"
+        type="text">
+    <button
+        class="action-submit"
+        data-bind="
+            attr: {
+                title: $t('Save all changes')
+            },
+            click: updateAndSave.bind($data, $view().index)"
+        type="button">
+        <span data-bind="i18n: 'Submit'"></span>
+    </button>
+    <div class="action-dropdown-menu-item-actions">
+        <button
             data-bind="
-                value: value,
-                hasFocus: editing(),
                 attr: {
-                    placeholder: label
+                    title: $t('Delete bookmark')
                 },
-                keyboard: {
-                    13: function(){ $collapsible.close(); $parent.saveView($data) }
-                }"
-            type="text">
+                click: removeView.bind($data, $view().index)"
+            class="action-delete"
+            type="button">
+            <span data-bind="i18n: 'Delete'"></span>
+        </button>
+    </div>
+</div>
+<!-- /ko -->
+
+<div class="action-dropdown-menu-item">
+    <a
+        class="action-dropdown-menu-link"
+        href=""
+        data-bind="
+            text: $view().label,
+            click: applyView.bind($data, $view().index),
+            closeCollapsible">
+    </a>
+
+    <!-- ko if: $view().editable -->
+    <div class="action-dropdown-menu-item-actions">
         <button
-            class="action-submit"
-            data-bind="click: $parent.saveView.bind($parent, $data), closeCollapsible, attr: {title: $t('Save all changes')}"
+            class="action-edit"
+            data-bind="
+                attr: {
+                    title: $t('Edit bookmark')
+                },
+                click: editView.bind($data, $view().index)"
             type="button">
-            <span data-bind="i18n: 'Submit'"></span>
+            <span data-bind="i18n: 'Edit'"></span>
         </button>
-        <div class="action-dropdown-menu-item-actions">
-            <button
-                data-bind="click: $parent.removeView.bind($parent, $data), closeCollapsible, attr: {title: $t('Delete bookmark')}"
-                class="action-delete"
-                type="button">
-                <span data-bind="i18n: 'Delete'"></span>
-            </button>
-        </div>
     </div>
     <!-- /ko -->
-    <div class="action-dropdown-menu-item">
-        <a
-            class="action-dropdown-menu-link"
-            href=""
-            data-bind="text: label, click: function(){ active(true); }, closeCollapsible"></a>
-        <!-- ko if: editable -->
-        <div class="action-dropdown-menu-item-actions">
-            <button
-                class="action-edit"
-                data-bind="click: startEdit, attr: {title: $t('Edit bookmark')}"
-                type="button">
-                <span data-bind="i18n: 'Edit'"></span>
-            </button>
-        </div>
-        <!-- /ko -->
-    </div>
-</li> 
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html
index e2dcc3d8163..2eff0b40307 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html
@@ -19,21 +19,21 @@
         <div class="admin__action-dropdown-menu-header">
             <span data-bind="text: getHeaderMessage()"></span>
         </div>
-        <div class="admin__action-dropdown-menu-content" data-bind="foreach: elems">
-            <div class="admin__field-option">
+        <div class="admin__action-dropdown-menu-content">
+            <div class="admin__field-option" data-bind="repeat: {foreach: elems, item: '$col'}">
                 <input
                     class="admin__control-checkbox"
                     type="checkbox"
                     data-bind="
                         attr: {
-                                id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
+                            id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
                         },
-                        disable: $parent.isDisabled($data),
-                        checked: visible"/>
+                        disable: isDisabled($col()),
+                        checked: $col().visible"/>
                 <label
                     class="admin__field-label"
                     data-bind="
-                        text: label,
+                        text: $col().label,
                         attr: {
                             for: ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
                         }"></label>
@@ -52,4 +52,4 @@
             </div>
         </div>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
index 84df5efc722..3585d6cb5e2 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
@@ -52,4 +52,4 @@
             </button>
         </div>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html
index e396c223d8a..11ef2a9dda5 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html
@@ -6,7 +6,9 @@
 -->
 <div
     class="admin__data-grid-filters-current"
-    data-bind="css: {_show: hasData()}">
+    data-bind="css: {
+        _show: hasPreviews()
+    }">
     <div class="admin__current-filters-title-wrap">
         <span
             class="admin__current-filters-title"
@@ -50,7 +52,7 @@
                 i18n: 'Clear all',
                 click: clear,
                 attr: {
-                    'data-action': hasData() ? 'grid-filter-reset' : ''
+                    'data-action': hasPreviews() ? 'grid-filter-reset' : ''
                 }"
             ></button>
     </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
index 655e4dfbdad..06ca73a0cfb 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
@@ -63,4 +63,4 @@
             </button>
         </div>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
index 1a1428162c1..6e05a9c304b 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
@@ -6,27 +6,39 @@
 -->
 <div class="admin__data-grid-wrap" data-role="grid-wrapper">
     <table class="data-grid" data-role="grid">
-        <thead>
-            <tr data-bind="foreach: elems">
-                <!-- ko template: getHeader() --><!-- /ko -->
+       <thead>
+            <tr data-bind="
+                fastForEach: {
+                    data: getVisible(),
+                    as: '$col'
+                }">
+                <!-- ko template: $col.getHeader() --><!-- /ko -->
             </tr>
         </thead>
         <tbody>
-            <!-- ko foreach: { data: rows, as: 'row' } -->
-                <tr class="data-row"
-                    data-role="row"
-                    data-bind="
-                        css: {
-                            '_odd-row': !!($index() % 2)
-                        },
-                        foreach: {
-                            data: $parent.elems,
-                            as: 'field'
-                        }
-                        ">
-                    <!-- ko template: getBody() --><!-- /ko -->
-                </tr>
-            <!-- /ko -->
+            <tr class="data-row"
+                data-bind="
+                    repeat: {
+                        foreach: rows,
+                        item: '$row'
+                    }"
+                data-repeat-bind="
+                    css: {
+                        '_odd-row': !!($index % 2)
+                    }
+                ">
+                <!-- ko fastForEach: {
+                        data: getVisible(),
+                        as: '$col'
+                    } -->
+                <td data-bind="
+                        css: $col.getFieldClass(),
+                        click: $col.getFieldHandler($row()),
+                        template: $col.getBody()
+                    ">
+                </td>
+                <!-- /ko -->
+            </tr>
 
             <!-- ko ifnot: hasData() -->
                 <tr class="data-grid-tr-no-data">
@@ -36,4 +48,4 @@
             <!-- /ko -->
         </tbody>
     </table>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html
index 0c79131bc2f..bd2e821dbec 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html
@@ -6,8 +6,8 @@
 -->
 
 <div class="admin__control-support-text">
-    <span data-bind="i18n: totalRecords"></span> records found
+    <span data-bind="text: totalRecords"></span> records found
     <!-- ko if: totalSelected -->
-    (<span data-bind="i18n: totalSelected"></span> selected)
+    (<span data-bind="text: totalSelected"></span> selected)
     <!-- /ko -->
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html
index 1961cfff11a..10f1ff7fd63 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html
@@ -13,9 +13,14 @@
         <button
             class="action-previous"
             type="button"
-            data-bind="css: { disabled: isFirst() },
-                   click: prev">
-            <span>Previous page</span>
+            data-bind="
+                attr: {
+                    title: $t('Previous Page')
+                },
+                css: {
+                    disabled: isFirst()
+                },
+                click: prev">
         </button>
         <input
             id="pageCurrent"
@@ -27,9 +32,14 @@
         </label>
         <button
             class="action-next"
-            data-bind="css: { disabled: isLast() },
-                       click: next">
-            <span>Next page</span>
+            data-bind="
+                attr: {
+                    title: $t('Next Page')
+                },
+                css: {
+                    disabled: isLast()
+                },
+                click: next">
         </button>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html
index dcc9692793e..87f093270a5 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html
@@ -23,47 +23,58 @@
         aria-haspopup="true">
         <span data-bind="i18n: 'Select'"></span>
     </button>
-    <div class="selectmenu-items" data-bind="css: {_active: $collapsible.opened},
-        outerClick: discardAll.bind($data)"
-         data-role="toolbar-collapsible-menu">
+    <div
+        class="selectmenu-items"
+        data-role="toolbar-collapsible-menu"
+        data-bind="
+            css: {_active: $collapsible.opened},
+            outerClick: discardAll.bind($data)">
         <ul>
-            <!-- ko foreach: optionsArray -->
-            <li data-bind="css: { _edit: $parent.isEditing(value)}">
-                <!-- ko if: $data.editable -->
+            <li
+                data-bind="
+                    repeat: {
+                        foreach: optionsArray,
+                        item: '$size'
+                    }"
+                data-repeat-bind="
+                    css: {
+                        _edit: isEditing($size().value)
+                    }">
+                <!-- ko if: $size().editable -->
                 <div
                     class="selectmenu-item-edit"
-                    data-bind="keyboard: {13: $parent.updateSize.bind($parent, value, false)}">
+                    data-bind="keyboard: {13: updateSize.bind($data, $size().value, false)}">
                     <input
                         class="admin__control-text"
                         type="text"
-                        data-bind="value: _value, hasFocus: $parent.isEditing(value)"/>
+                        data-bind="value: $size()._value, hasFocus: isEditing($size().value)"/>
                     <button
                         class="action-save"
-                        data-bind="click: $parent.updateSize.bind($parent, value, false)"
+                        data-bind="click: updateSize.bind($data, $size().value, false)"
                         type="button">
                         <span data-bind="i18n: 'Save'"></span>
                     </button>
                     <button
                         class="action-delete"
-                        data-bind="click: $parent.removeSize.bind($parent, value, false)"
+                        data-bind="click: removeSize.bind($data, $size().value, false)"
                         type="button">
                         <span data-bind="i18n: 'Delete'"></span>
                     </button>
                 </div>
                 <!-- /ko -->
+
                 <div class="selectmenu-item">
                     <button
                         type="button"
                         class="selectmenu-item-action"
-                        data-bind="text: label, click: $parent.setSize.bind($parent, value)"></button>
-                    <!-- ko if: $data.editable -->
+                        data-bind="text: $size().label, click: setSize.bind($data, $size().value)"></button>
+                    
+                    <!-- ko if: $size().editable -->
                     <button
                         class="action-edit"
                         data-bind="
                             click: function () {
-                                $parent
-                                    .discardCustom()
-                                    .edit(value);
+                                discardCustom().edit($size().value);
                             }"
                         type="button">
                         <span data-bind="i18n: 'Edit'"></span>
@@ -71,7 +82,6 @@
                     <!-- /ko -->
                 </div>
             </li>
-            <!-- /ko -->
 
             <li data-bind="css: { _edit: isCustomVisible() }">
                 <div class="selectmenu-item">
@@ -102,4 +112,4 @@
         </ul>
     </div>
 </div>
-<label class="admin__control-support-text" data-bind="i18n: 'per page', attr: { for: index }"></label>
+<label class="admin__control-support-text" data-bind="i18n: 'per page', attr: { for: index }"></label>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
index fc0c43a4b43..037677c496c 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
@@ -7,7 +7,12 @@
 <div class="admin__data-grid-wrap" data-role="sticky-el-root">
     <table class="data-grid">
         <thead>
-            <tr data-bind="foreach: elems">
+            <tr data-bind="
+                foreach: {
+                    data: visibleColumns,
+                    as: '$col'
+                }"
+            >
                 <!-- ko template: getHeader() --><!-- /ko -->
             </tr>
         </thead>
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js
index ce954310178..3d1e7dcfe0d 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js
@@ -24,17 +24,17 @@ define([
         describe('sort method', function () {
             it('apply sorting first time', function () {
                 column.sort(true);
-                expect(column.sorting()).toBe('asc');
+                expect(column.sorting).toBe('asc');
             });
 
             it('apply sorting in other direction', function () {
                 column.sort(true).sort(true);
-                expect(column.sorting()).toBe('desc');
+                expect(column.sorting).toBe('desc');
             });
 
             it('remove sorting', function () {
                 column.sort(false);
-                expect(column.sorting()).toBeFalsy();
+                expect(column.sorting).toBeFalsy();
             });
         });
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
index 43df6800027..ef72deab470 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
@@ -17,7 +17,7 @@ define([
             paging = new Paging({
                 pageSize: 2
             });
-            paging.totalRecords(7);
+            paging.totalRecords = 7;
         });
 
         describe('Normalize method', function () {
@@ -42,73 +42,73 @@ define([
         describe('countPages method', function () {
             it('correct number of pages', function () {
                 paging.countPages();
-                expect(paging.pages()).toBe(4);
+                expect(paging.pages).toBe(4);
             });
 
             it('if no records', function () {
-                paging.totalRecords(0);
+                paging.totalRecords = 0;
                 paging.countPages();
-                expect(paging.pages()).toBe(1);
+                expect(paging.pages).toBe(1);
             });
         });
 
         describe('page manipualations', function () {
             it('setPage method', function () {
                 paging.setPage(2);
-                expect(paging.current()).toBe(2);
+                expect(paging.current).toBe(2);
             });
 
             it('next', function () {
-                paging.current(1);
+                paging.current = 1;
                 paging.next();
-                expect(paging.current()).toBe(2);
+                expect(paging.current).toBe(2);
             });
 
             it('next out of boundary', function () {
-                paging.current(4);
+                paging.current = 4;
                 paging.next();
-                expect(paging.current()).toBe(4);
+                expect(paging.current).toBe(4);
             });
 
             it('prev', function () {
-                paging.current(4);
+                paging.current = 4;
                 paging.prev();
-                expect(paging.current()).toBe(3);
+                expect(paging.current).toBe(3);
             });
 
             it('prev out of boundary', function () {
-                paging.current(1);
+                paging.current = 1;
                 paging.prev();
-                expect(paging.current()).toBe(1);
+                expect(paging.current).toBe(1);
             });
 
             it('goFirst', function () {
                 paging.goFirst();
-                expect(paging.current()).toBe(1);
+                expect(paging.current).toBe(1);
             });
 
             it('goLast', function () {
                 paging.goLast();
-                expect(paging.current()).toBe(4);
+                expect(paging.current).toBe(4);
             });
 
             it('isFirst for 1st page', function () {
-                paging.current(1);
+                paging.current = 1;
                 expect(paging.isFirst()).toBeTruthy();
             });
 
             it('isFirst for 2nd page', function () {
-                paging.current(2);
+                paging.current = 2;
                 expect(paging.isFirst()).toBeFalsy();
             });
 
             it('isLast for last page', function () {
-                paging.current(4);
+                paging.current = 4;
                 expect(paging.isLast()).toBeTruthy();
             });
 
             it('isLast for first page', function () {
-                paging.current(1);
+                paging.current = 1;
                 expect(paging.isLast()).toBeFalsy();
             });
         });
@@ -116,22 +116,22 @@ define([
         describe('countPages method', function () {
             it('correct number of pages', function () {
                 paging.countPages();
-                expect(paging.pages()).toBe(4);
+                expect(paging.pages).toBe(4);
             });
 
             it('if no records', function () {
-                paging.totalRecords(0);
+                paging.totalRecords = 0;
                 paging.countPages();
-                expect(paging.pages()).toBe(1);
+                expect(paging.pages).toBe(1);
             });
         });
 
         describe('onPagesChange method', function () {
             it('pages amount became less than current', function () {
-                paging.current(4);
-                expect(paging.current()).toBe(4);
+                paging.current = 4;
+                expect(paging.current).toBe(4);
                 paging.onPagesChange(2);
-                expect(paging.current()).toBe(2);
+                expect(paging.current).toBe(2);
             });
         });
 
@@ -141,7 +141,7 @@ define([
             });
 
             it('read from _current', function () {
-                paging.current(2);
+                paging.current = 2;
                 expect(paging._current()).toBe(2);
             });
 
@@ -149,7 +149,7 @@ define([
                 spyOn(paging, 'normalize').and.callThrough();
                 spyOn(paging._current, 'notifySubscribers');
                 paging._current(4);
-                expect(paging.current()).toBe(4);
+                expect(paging.current).toBe(4);
                 expect(paging._current.notifySubscribers).toHaveBeenCalledWith(4);
             });
         });
diff --git a/lib/web/knockoutjs/knockout-es5.js b/lib/web/knockoutjs/knockout-es5.js
new file mode 100644
index 00000000000..899edd79aa3
--- /dev/null
+++ b/lib/web/knockoutjs/knockout-es5.js
@@ -0,0 +1,468 @@
+/*!
+ * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5
+ * Copyright (c) Steve Sanderson
+ * MIT license
+ */
+
+(function(global, undefined) {
+  'use strict';
+
+  var ko;
+
+  // Model tracking
+  // --------------
+  //
+  // This is the central feature of Knockout-ES5. We augment model objects by converting properties
+  // into ES5 getter/setter pairs that read/write an underlying Knockout observable. This means you can
+  // use plain JavaScript syntax to read/write the property while still getting the full benefits of
+  // Knockout's automatic dependency detection and notification triggering.
+  //
+  // For comparison, here's Knockout ES3-compatible syntax:
+  //
+  //     var firstNameLength = myModel.user().firstName().length; // Read
+  //     myModel.user().firstName('Bert'); // Write
+  //
+  // ... versus Knockout-ES5 syntax:
+  //
+  //     var firstNameLength = myModel.user.firstName.length; // Read
+  //     myModel.user.firstName = 'Bert'; // Write
+
+  // `ko.track(model)` converts each property on the given model object into a getter/setter pair that
+  // wraps a Knockout observable. Optionally specify an array of property names to wrap; otherwise we
+  // wrap all properties. If any of the properties are already observables, we replace them with
+  // ES5 getter/setter pairs that wrap your original observable instances. In the case of readonly
+  // ko.computed properties, we simply do not define a setter (so attempted writes will be ignored,
+  // which is how ES5 readonly properties normally behave).
+  //
+  // By design, this does *not* recursively walk child object properties, because making literally
+  // everything everywhere independently observable is usually unhelpful. When you do want to track
+  // child object properties independently, define your own class for those child objects and put
+  // a separate ko.track call into its constructor --- this gives you far more control.
+  /**
+   * @param {object} obj
+   * @param {object|array.<string>} propertyNamesOrSettings
+   * @param {boolean} propertyNamesOrSettings.deep Use deep track.
+   * @param {array.<string>} propertyNamesOrSettings.fields Array of property names to wrap.
+   * todo: @param {array.<string>} propertyNamesOrSettings.exclude Array of exclude property names to wrap.
+   * todo: @param {function(string, *):boolean} propertyNamesOrSettings.filter Function to filter property 
+   *   names to wrap. A function that takes ... params
+   * @return {object}
+   */
+  function track(obj, propertyNamesOrSettings) {
+    if (!obj || typeof obj !== 'object') {
+      throw new Error('When calling ko.track, you must pass an object as the first parameter.');
+    }
+
+    var propertyNames;
+
+    if ( isPlainObject(propertyNamesOrSettings) ) {
+      // defaults
+      propertyNamesOrSettings.deep = propertyNamesOrSettings.deep || false;
+      propertyNamesOrSettings.fields = propertyNamesOrSettings.fields || Object.getOwnPropertyNames(obj);
+      propertyNamesOrSettings.lazy = propertyNamesOrSettings.lazy || false;
+
+      wrap(obj, propertyNamesOrSettings.fields, propertyNamesOrSettings);
+    } else {
+      propertyNames = propertyNamesOrSettings || Object.getOwnPropertyNames(obj);
+      wrap(obj, propertyNames, {});
+    }
+
+    return obj;
+  }
+
+  // fix for ie
+  var rFunctionName = /^function\s*([^\s(]+)/;
+  function getFunctionName( ctor ){
+    if (ctor.name) {
+      return ctor.name;
+    }
+    return (ctor.toString().trim().match( rFunctionName ) || [])[1];
+  }
+
+  function canTrack(obj) {
+    return obj && typeof obj === 'object' && getFunctionName(obj.constructor) === 'Object';
+  }
+
+  function createPropertyDescriptor(originalValue, prop, map) {
+    var isObservable = ko.isObservable(originalValue);
+    var isArray = !isObservable && Array.isArray(originalValue);
+    var observable = isObservable ? originalValue
+        : isArray ? ko.observableArray(originalValue)
+        : ko.observable(originalValue);
+
+    map[prop] = function () { return observable; };
+
+    // add check in case the object is already an observable array
+    if (isArray || (isObservable && 'push' in observable)) {
+      notifyWhenPresentOrFutureArrayValuesMutate(ko, observable);
+    }
+
+    return {
+      configurable: true,
+      enumerable: true,
+      get: observable,
+      set: ko.isWriteableObservable(observable) ? observable : undefined
+    };
+  }
+
+  function createLazyPropertyDescriptor(originalValue, prop, map) {
+    if (ko.isObservable(originalValue)) {
+      // no need to be lazy if we already have an observable
+      return createPropertyDescriptor(originalValue, prop, map);
+    }
+
+    var observable;
+
+    function getOrCreateObservable(value, writing) {
+      if (observable) {
+        return writing ? observable(value) : observable;
+      }
+
+      if (Array.isArray(value)) {
+        observable = ko.observableArray(value);
+        notifyWhenPresentOrFutureArrayValuesMutate(ko, observable);
+        return observable;
+      }
+
+      return (observable = ko.observable(value));
+    }
+
+    map[prop] = function () { return getOrCreateObservable(originalValue); };
+    return {
+      configurable: true,
+      enumerable: true,
+      get: function () { return getOrCreateObservable(originalValue)(); },
+      set: function (value) { getOrCreateObservable(value, true); }
+    };
+  }
+
+  function wrap(obj, props, options) {
+    if (!props.length) {
+      return;
+    }
+
+    var allObservablesForObject = getAllObservablesForObject(obj, true);
+    var descriptors = {};
+
+    props.forEach(function (prop) {
+      // Skip properties that are already tracked
+      if (prop in allObservablesForObject) {
+        return;
+      }
+
+      // Skip properties where descriptor can't be redefined
+      if (Object.getOwnPropertyDescriptor(obj, prop).configurable === false){
+        return;
+      }
+
+      var originalValue = obj[prop];
+      descriptors[prop] = (options.lazy ? createLazyPropertyDescriptor : createPropertyDescriptor)
+        (originalValue, prop, allObservablesForObject);
+
+      if (options.deep && canTrack(originalValue)) {
+        wrap(originalValue, Object.keys(originalValue), options);
+      }
+    });
+
+    Object.defineProperties(obj, descriptors);
+  }
+
+  function isPlainObject( obj ){
+    return !!obj && typeof obj === 'object' && obj.constructor === Object;
+  }
+
+  // Lazily created by `getAllObservablesForObject` below. Has to be created lazily because the
+  // WeakMap factory isn't available until the module has finished loading (may be async).
+  var objectToObservableMap;
+
+  // Gets or creates the hidden internal key-value collection of observables corresponding to
+  // properties on the model object.
+  function getAllObservablesForObject(obj, createIfNotDefined) {
+    if (!objectToObservableMap) {
+      objectToObservableMap = weakMapFactory();
+    }
+
+    var result = objectToObservableMap.get(obj);
+    if (!result && createIfNotDefined) {
+      result = {};
+      objectToObservableMap.set(obj, result);
+    }
+    return result;
+  }
+
+  // Removes the internal references to observables mapped to the specified properties
+  // or the entire object reference if no properties are passed in. This allows the
+  // observables to be replaced and tracked again.
+  function untrack(obj, propertyNames) {
+    if (!objectToObservableMap) {
+      return;
+    }
+
+    if (arguments.length === 1) {
+      objectToObservableMap['delete'](obj);
+    } else {
+      var allObservablesForObject = getAllObservablesForObject(obj, false);
+      if (allObservablesForObject) {
+        propertyNames.forEach(function(propertyName) {
+          delete allObservablesForObject[propertyName];
+        });
+      }
+    }
+  }
+
+  // Computed properties
+  // -------------------
+  //
+  // The preceding code is already sufficient to upgrade ko.computed model properties to ES5
+  // getter/setter pairs (or in the case of readonly ko.computed properties, just a getter).
+  // These then behave like a regular property with a getter function, except they are smarter:
+  // your evaluator is only invoked when one of its dependencies changes. The result is cached
+  // and used for all evaluations until the next time a dependency changes).
+  //
+  // However, instead of forcing developers to declare a ko.computed property explicitly, it's
+  // nice to offer a utility function that declares a computed getter directly.
+
+  // Implements `ko.defineProperty`
+  function defineComputedProperty(obj, propertyName, evaluatorOrOptions) {
+    var ko = this,
+      computedOptions = { owner: obj, deferEvaluation: true };
+
+    if (typeof evaluatorOrOptions === 'function') {
+      computedOptions.read = evaluatorOrOptions;
+    } else {
+      if ('value' in evaluatorOrOptions) {
+        throw new Error('For ko.defineProperty, you must not specify a "value" for the property. ' +
+                        'You must provide a "get" function.');
+      }
+
+      if (typeof evaluatorOrOptions.get !== 'function') {
+        throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, ' +
+                        'or an options object containing a function called "get".');
+      }
+
+      computedOptions.read = evaluatorOrOptions.get;
+      computedOptions.write = evaluatorOrOptions.set;
+    }
+
+    obj[propertyName] = ko.computed(computedOptions);
+    track.call(ko, obj, [propertyName]);
+    return obj;
+  }
+
+  // Array handling
+  // --------------
+  //
+  // Arrays are special, because unlike other property types, they have standard mutator functions
+  // (`push`/`pop`/`splice`/etc.) and it's desirable to trigger a change notification whenever one of
+  // those mutator functions is invoked.
+  //
+  // Traditionally, Knockout handles this by putting special versions of `push`/`pop`/etc. on observable
+  // arrays that mutate the underlying array and then trigger a notification. That approach doesn't
+  // work for Knockout-ES5 because properties now return the underlying arrays, so the mutator runs
+  // in the context of the underlying array, not any particular observable:
+  //
+  //     // Operates on the underlying array value
+  //     myModel.someCollection.push('New value');
+  //
+  // To solve this, Knockout-ES5 detects array values, and modifies them as follows:
+  //  1. Associates a hidden subscribable with each array instance that it encounters
+  //  2. Intercepts standard mutators (`push`/`pop`/etc.) and makes them trigger the subscribable
+  // Then, for model properties whose values are arrays, the property's underlying observable
+  // subscribes to the array subscribable, so it can trigger a change notification after mutation.
+
+  // Given an observable that underlies a model property, watch for any array value that might
+  // be assigned as the property value, and hook into its change events
+  function notifyWhenPresentOrFutureArrayValuesMutate(ko, observable) {
+    var watchingArraySubscription = null;
+    ko.computed(function () {
+      // Unsubscribe to any earlier array instance
+      if (watchingArraySubscription) {
+        watchingArraySubscription.dispose();
+        watchingArraySubscription = null;
+      }
+
+      // Subscribe to the new array instance
+      var newArrayInstance = observable();
+      if (newArrayInstance instanceof Array) {
+        watchingArraySubscription = startWatchingArrayInstance(ko, observable, newArrayInstance);
+      }
+    });
+  }
+
+  // Listens for array mutations, and when they happen, cause the observable to fire notifications.
+  // This is used to make model properties of type array fire notifications when the array changes.
+  // Returns a subscribable that can later be disposed.
+  function startWatchingArrayInstance(ko, observable, arrayInstance) {
+    var subscribable = getSubscribableForArray(ko, arrayInstance);
+    return subscribable.subscribe(observable);
+  }
+
+  // Lazily created by `getSubscribableForArray` below. Has to be created lazily because the
+  // WeakMap factory isn't available until the module has finished loading (may be async).
+  var arraySubscribablesMap;
+
+  // Gets or creates a subscribable that fires after each array mutation
+  function getSubscribableForArray(ko, arrayInstance) {
+    if (!arraySubscribablesMap) {
+      arraySubscribablesMap = weakMapFactory();
+    }
+
+    var subscribable = arraySubscribablesMap.get(arrayInstance);
+    if (!subscribable) {
+      subscribable = new ko.subscribable();
+      arraySubscribablesMap.set(arrayInstance, subscribable);
+
+      var notificationPauseSignal = {};
+      wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal);
+      addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal);
+    }
+
+    return subscribable;
+  }
+
+  // After each array mutation, fires a notification on the given subscribable
+  function wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal) {
+    ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'].forEach(function(fnName) {
+      var origMutator = arrayInstance[fnName];
+      arrayInstance[fnName] = function() {
+        var result = origMutator.apply(this, arguments);
+        if (notificationPauseSignal.pause !== true) {
+          subscribable.notifySubscribers(this);
+        }
+        return result;
+      };
+    });
+  }
+
+  // Adds Knockout's additional array mutation functions to the array
+  function addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal) {
+    ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'].forEach(function(fnName) {
+      // Make it a non-enumerable property for consistency with standard Array functions
+      Object.defineProperty(arrayInstance, fnName, {
+        enumerable: false,
+        value: function() {
+          var result;
+
+          // These additional array mutators are built using the underlying push/pop/etc.
+          // mutators, which are wrapped to trigger notifications. But we don't want to
+          // trigger multiple notifications, so pause the push/pop/etc. wrappers and
+          // delivery only one notification at the end of the process.
+          notificationPauseSignal.pause = true;
+          try {
+            // Creates a temporary observableArray that can perform the operation.
+            result = ko.observableArray.fn[fnName].apply(ko.observableArray(arrayInstance), arguments);
+          }
+          finally {
+            notificationPauseSignal.pause = false;
+          }
+          subscribable.notifySubscribers(arrayInstance);
+          return result;
+        }
+      });
+    });
+  }
+
+  // Static utility functions
+  // ------------------------
+  //
+  // Since Knockout-ES5 sets up properties that return values, not observables, you can't
+  // trivially subscribe to the underlying observables (e.g., `someProperty.subscribe(...)`),
+  // or tell them that object values have mutated, etc. To handle this, we set up some
+  // extra utility functions that can return or work with the underlying observables.
+
+  // Returns the underlying observable associated with a model property (or `null` if the
+  // model or property doesn't exist, or isn't associated with an observable). This means
+  // you can subscribe to the property, e.g.:
+  //
+  //     ko.getObservable(model, 'propertyName')
+  //       .subscribe(function(newValue) { ... });
+  function getObservable(obj, propertyName) {
+    if (!obj || typeof obj !== 'object') {
+      return null;
+    }
+
+    var allObservablesForObject = getAllObservablesForObject(obj, false);
+    if (allObservablesForObject && propertyName in allObservablesForObject) {
+      return allObservablesForObject[propertyName]();
+    }
+
+    return null;
+  }
+  
+  // Returns a boolean indicating whether the property on the object has an underlying
+  // observables. This does the check in a way not to create an observable if the
+  // object was created with lazily created observables
+  function isTracked(obj, propertyName) {
+    if (!obj || typeof obj !== 'object') {
+      return false;
+    }
+    
+    var allObservablesForObject = getAllObservablesForObject(obj, false);
+    return !!allObservablesForObject && propertyName in allObservablesForObject;
+  }
+
+  // Causes a property's associated observable to fire a change notification. Useful when
+  // the property value is a complex object and you've modified a child property.
+  function valueHasMutated(obj, propertyName) {
+    var observable = getObservable(obj, propertyName);
+
+    if (observable) {
+      observable.valueHasMutated();
+    }
+  }
+
+  // Module initialisation
+  // ---------------------
+  //
+  // When this script is first evaluated, it works out what kind of module loading scenario
+  // it is in (Node.js or a browser `<script>` tag), stashes a reference to its dependencies
+  // (currently that's just the WeakMap shim), and then finally attaches itself to whichever
+  // instance of Knockout.js it can find.
+
+  // A function that returns a new ES6-compatible WeakMap instance (using ES5 shim if needed).
+  // Instantiated by prepareExports, accounting for which module loader is being used.
+  var weakMapFactory;
+
+  // Extends a Knockout instance with Knockout-ES5 functionality
+  function attachToKo(ko) {
+    ko.track = track;
+    ko.untrack = untrack;
+    ko.getObservable = getObservable;
+    ko.valueHasMutated = valueHasMutated;
+    ko.defineProperty = defineComputedProperty;
+
+    // todo: test it, maybe added it to ko. directly
+    ko.es5 = {
+      getAllObservablesForObject: getAllObservablesForObject,
+      notifyWhenPresentOrFutureArrayValuesMutate: notifyWhenPresentOrFutureArrayValuesMutate,
+      isTracked: isTracked
+    };
+  }
+
+  // Determines which module loading scenario we're in, grabs dependencies, and attaches to KO
+  function prepareExports() {
+    if (typeof exports === 'object' && typeof module === 'object') {
+      // Node.js case - load KO and WeakMap modules synchronously
+      ko = require('knockout');
+      var WM = require('../lib/weakmap');
+      attachToKo(ko);
+      weakMapFactory = function() { return new WM(); };
+      module.exports = ko;
+    } else if (typeof define === 'function' && define.amd) {
+      define(['knockout'], function(koModule) {
+        ko = koModule;
+        attachToKo(koModule);
+        weakMapFactory = function() { return new global.WeakMap(); };
+        return koModule;
+      });
+    } else if ('ko' in global) {
+      // Non-module case - attach to the global instance, and assume a global WeakMap constructor
+      ko = global.ko;
+      attachToKo(global.ko);
+      weakMapFactory = function() { return new global.WeakMap(); };
+    }
+  }
+
+  prepareExports();
+
+})(this);
\ No newline at end of file
diff --git a/lib/web/knockoutjs/knockout-fast-foreach.js b/lib/web/knockoutjs/knockout-fast-foreach.js
new file mode 100644
index 00000000000..7289d46d1c2
--- /dev/null
+++ b/lib/web/knockoutjs/knockout-fast-foreach.js
@@ -0,0 +1,331 @@
+/*!
+  Knockout Fast Foreach v0.4.1 (2015-07-17T14:06:15.974Z)
+  By: Brian M Hunt (C) 2015
+  License: MIT
+
+  Adds `fastForEach` to `ko.bindingHandlers`.
+*/
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    define(['knockout'], factory);
+  } else if (typeof exports === 'object') {
+    module.exports = factory(require('knockout'));
+  } else {
+    root.KnockoutFastForeach = factory(root.ko);
+  }
+}(this, function (ko) {
+  "use strict";
+// index.js
+// --------
+// Fast For Each
+//
+// Employing sound techniques to make a faster Knockout foreach binding.
+// --------
+
+//      Utilities
+
+// from https://github.com/jonschlinkert/is-plain-object
+function isPlainObject(o) {
+  return !!o && typeof o === 'object' && o.constructor === Object;
+}
+
+// From knockout/src/virtualElements.js
+var commentNodesHaveTextProperty = document && document.createComment("test").text === "<!--test-->";
+var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\s*ko(?:\s+([\s\S]+))?\s*-->$/ : /^\s*ko(?:\s+([\s\S]+))?\s*$/;
+var supportsDocumentFragment = document && typeof document.createDocumentFragment === "function";
+function isVirtualNode(node) {
+  return (node.nodeType === 8) && startCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);
+}
+
+
+// Get a copy of the (possibly virtual) child nodes of the given element,
+// put them into a container, then empty the given node.
+function makeTemplateNode(sourceNode) {
+  var container = document.createElement("div");
+  var parentNode;
+  if (sourceNode.content) {
+    // For e.g. <template> tags
+    parentNode = sourceNode.content;
+  } else if (sourceNode.tagName === 'SCRIPT') {
+    parentNode = document.createElement("div");
+    parentNode.innerHTML = sourceNode.text;
+  } else {
+    // Anything else e.g. <div>
+    parentNode = sourceNode;
+  }
+  ko.utils.arrayForEach(ko.virtualElements.childNodes(parentNode), function (child) {
+    // FIXME - This cloneNode could be expensive; we may prefer to iterate over the
+    // parentNode children in reverse (so as not to foul the indexes as childNodes are
+    // removed from parentNode when inserted into the container)
+    if (child) {
+      container.insertBefore(child.cloneNode(true), null);
+    }
+  });
+  return container;
+}
+
+function insertAllAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode) {
+  var frag, len, i;
+  // poor man's node and array check, should be enough for this
+  if (typeof nodeOrNodeArrayToInsert.nodeType !== "undefined" && typeof nodeOrNodeArrayToInsert.length === "undefined") {
+    throw new Error("Expected a single node or a node array");
+  }
+
+  if (typeof nodeOrNodeArrayToInsert.nodeType !== "undefined") {
+    ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode);
+    return;
+  }
+
+  if (nodeOrNodeArrayToInsert.length === 1) {
+    ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert[0], insertAfterNode);
+    return;
+  }
+
+  if (supportsDocumentFragment) {
+    frag = document.createDocumentFragment();
+
+    for (i = 0, len = nodeOrNodeArrayToInsert.length; i !== len; ++i) {
+      frag.appendChild(nodeOrNodeArrayToInsert[i]);
+    }
+    ko.virtualElements.insertAfter(containerNode, frag, insertAfterNode);
+  } else {
+    // Nodes are inserted in reverse order - pushed down immediately after
+    // the last node for the previous item or as the first node of element.
+    for (i = nodeOrNodeArrayToInsert.length - 1; i >= 0; --i) {
+      var child = nodeOrNodeArrayToInsert[i];
+      if (!child) {
+        return;
+      }
+      ko.virtualElements.insertAfter(containerNode, child, insertAfterNode);
+    }
+  }
+}
+
+// Mimic a KO change item 'add'
+function valueToChangeAddItem(value, index) {
+  return {
+    status: 'added',
+    value: value,
+    index: index
+  };
+}
+
+function isAdditionAdjacentToLast(changeIndex, arrayChanges) {
+  return changeIndex > 0 &&
+    changeIndex < arrayChanges.length &&
+    arrayChanges[changeIndex].status === "added" &&
+    arrayChanges[changeIndex - 1].status === "added" &&
+    arrayChanges[changeIndex - 1].index === arrayChanges[changeIndex].index - 1;
+}
+
+function FastForEach(spec) {
+  this.element = spec.element;
+  this.container = isVirtualNode(this.element) ?
+                   this.element.parentNode : this.element;
+  this.$context = spec.$context;
+  this.data = spec.data;
+  this.as = spec.as;
+  this.noContext = spec.noContext;
+  this.templateNode = makeTemplateNode(
+    spec.name ? document.getElementById(spec.name).cloneNode(true) : spec.element
+  );
+  this.afterQueueFlush = spec.afterQueueFlush;
+  this.beforeQueueFlush = spec.beforeQueueFlush;
+  this.changeQueue = [];
+  this.lastNodesList = [];
+  this.indexesToDelete = [];
+  this.rendering_queued = false;
+
+  // Remove existing content.
+  ko.virtualElements.emptyNode(this.element);
+
+  // Prime content
+  var primeData = ko.unwrap(this.data);
+  if (primeData.map) {
+    this.onArrayChange(primeData.map(valueToChangeAddItem));
+  }
+
+  // Watch for changes
+  if (ko.isObservable(this.data)) {
+    if (!this.data.indexOf) {
+      // Make sure the observable is trackable.
+      this.data = this.data.extend({trackArrayChanges: true});
+    }
+    this.changeSubs = this.data.subscribe(this.onArrayChange, this, 'arrayChange');
+  }
+}
+
+
+FastForEach.animateFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||
+  window.mozRequestAnimationFrame || window.msRequestAnimationFrame ||
+  function(cb) { return window.setTimeout(cb, 1000 / 60); };
+
+
+FastForEach.prototype.dispose = function () {
+  if (this.changeSubs) {
+    this.changeSubs.dispose();
+  }
+};
+
+
+// If the array changes we register the change.
+FastForEach.prototype.onArrayChange = function (changeSet) {
+  var self = this;
+  var changeMap = {
+    added: [],
+    deleted: []
+  };
+  for (var i = 0, len = changeSet.length; i < len; i++) {
+    // the change is appended to a last change info object when both are 'added' and have indexes next to each other
+    // here I presume that ko is sending changes in monotonic order (in index variable) which happens to be true, tested with push and splice with multiple pushed values
+    if (isAdditionAdjacentToLast(i, changeSet)) {
+      var batchValues = changeMap.added[changeMap.added.length - 1].values;
+      if (!batchValues) {
+        // transform the last addition into a batch addition object
+        var lastAddition = changeMap.added.pop();
+        var batchAddition = {
+          isBatch: true,
+          status: 'added',
+          index: lastAddition.index,
+          values: [lastAddition.value]
+        };
+        batchValues = batchAddition.values;
+        changeMap.added.push(batchAddition);
+      }
+      batchValues.push(changeSet[i].value);
+    } else {
+      changeMap[changeSet[i].status].push(changeSet[i]);
+    }
+  }
+  if (changeMap.deleted.length > 0) {
+    this.changeQueue.push.apply(this.changeQueue, changeMap.deleted);
+    this.changeQueue.push({status: 'clearDeletedIndexes'});
+  }
+  this.changeQueue.push.apply(this.changeQueue, changeMap.added);
+  // Once a change is registered, the ticking count-down starts for the processQueue.
+  if (this.changeQueue.length > 0 && !this.rendering_queued) {
+    this.rendering_queued = true;
+    FastForEach.animateFrame.call(window, function () { self.processQueue(); });
+  }
+};
+
+
+// Reflect all the changes in the queue in the DOM, then wipe the queue.
+FastForEach.prototype.processQueue = function () {
+  var self = this;
+
+  // Callback so folks can do things before the queue flush.
+  if (typeof this.beforeQueueFlush === 'function') {
+    this.beforeQueueFlush(this.changeQueue);
+  }
+
+  ko.utils.arrayForEach(this.changeQueue, function (changeItem) {
+    // console.log(self.data(), "CI", JSON.stringify(changeItem, null, 2), JSON.stringify($(self.element).text()))
+    self[changeItem.status](changeItem);
+    // console.log("  ==> ", JSON.stringify($(self.element).text()))
+  });
+  this.rendering_queued = false;
+  // Callback so folks can do things.
+  if (typeof this.afterQueueFlush === 'function') {
+    this.afterQueueFlush(this.changeQueue);
+  }
+  this.changeQueue = [];
+};
+
+
+// Process a changeItem with {status: 'added', ...}
+FastForEach.prototype.added = function (changeItem) {
+  var index = changeItem.index;
+  var valuesToAdd = changeItem.isBatch ? changeItem.values : [changeItem.value];
+  var referenceElement = this.lastNodesList[index - 1] || null;
+  // gather all childnodes for a possible batch insertion
+  var allChildNodes = [];
+
+  for (var i = 0, len = valuesToAdd.length; i < len; ++i) {
+    var templateClone = this.templateNode.cloneNode(true);
+    var childContext;
+
+    if (this.noContext) {
+      childContext = this.$context.extend({
+        '$item': valuesToAdd[i]
+      });
+    } else {
+      childContext = this.$context.createChildContext(valuesToAdd[i], this.as || null);
+    }
+
+    // apply bindings first, and then process child nodes, because bindings can add childnodes
+    ko.applyBindingsToDescendants(childContext, templateClone);
+
+    var childNodes = ko.virtualElements.childNodes(templateClone);
+    // Note discussion at https://github.com/angular/angular.js/issues/7851
+    allChildNodes.push.apply(allChildNodes, Array.prototype.slice.call(childNodes));
+    this.lastNodesList.splice(index + i, 0, childNodes[childNodes.length - 1]);
+  }
+
+  insertAllAfter(this.element, allChildNodes, referenceElement);
+};
+
+
+// Process a changeItem with {status: 'deleted', ...}
+FastForEach.prototype.deleted = function (changeItem) {
+  var index = changeItem.index;
+  var ptr = this.lastNodesList[index],
+      // We use this.element because that will be the last previous node
+      // for virtual element lists.
+      lastNode = this.lastNodesList[index - 1] || this.element;
+  do {
+    ptr = ptr.previousSibling;
+    ko.removeNode((ptr && ptr.nextSibling) || ko.virtualElements.firstChild(this.element));
+  } while (ptr && ptr !== lastNode);
+  // The "last node" in the DOM from which we begin our delets of the next adjacent node is
+  // now the sibling that preceded the first node of this item.
+  this.lastNodesList[index] = this.lastNodesList[index - 1];
+  this.indexesToDelete.push(index);
+};
+
+
+// We batch our deletion of item indexes in our parallel array.
+// See brianmhunt/knockout-fast-foreach#6/#8
+FastForEach.prototype.clearDeletedIndexes = function () {
+  // We iterate in reverse on the presumption (following the unit tests) that KO's diff engine
+  // processes diffs (esp. deletes) monotonically ascending i.e. from index 0 -> N.
+  for (var i = this.indexesToDelete.length - 1; i >= 0; --i) {
+    this.lastNodesList.splice(this.indexesToDelete[i], 1);
+  }
+  this.indexesToDelete = [];
+};
+
+
+ko.bindingHandlers.fastForEach = {
+  // Valid valueAccessors:
+  //    []
+  //    ko.observable([])
+  //    ko.observableArray([])
+  //    ko.computed
+  //    {data: array, name: string, as: string}
+  init: function init(element, valueAccessor, bindings, vm, context) {
+    var value = valueAccessor(),
+        ffe;
+    if (isPlainObject(value)) {
+      value.element = value.element || element;
+      value.$context = context;
+      ffe = new FastForEach(value);
+    } else {
+      ffe = new FastForEach({
+        element: element,
+        data: ko.unwrap(context.$rawData) === value ? context.$rawData : value,
+        $context: context
+      });
+    }
+    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
+      ffe.dispose();
+    });
+    return {controlsDescendantBindings: true};
+  },
+
+  // Export for testing, debugging, and overloading.
+  FastForEach: FastForEach
+};
+
+ko.virtualElements.allowedBindings.fastForEach = true;
+}));
\ No newline at end of file
diff --git a/lib/web/knockoutjs/knockout-repeat.js b/lib/web/knockoutjs/knockout-repeat.js
new file mode 100644
index 00000000000..3bebceb9252
--- /dev/null
+++ b/lib/web/knockoutjs/knockout-repeat.js
@@ -0,0 +1,216 @@
+// REPEAT binding for Knockout http://knockoutjs.com/
+// (c) Michael Best
+// License: MIT (http://www.opensource.org/licenses/mit-license.php)
+// Version 2.1.0
+
+(function(factory) {
+    if (typeof define === 'function' && define.amd) {
+        // [1] AMD anonymous module
+        define(['knockout'], factory);
+    } else if (typeof exports === 'object') {
+        // [2] commonJS
+        factory(require('knockout'));
+    } else {
+        // [3] No module loader (plain <script> tag) - put directly in global namespace
+        factory(window.ko);
+    }
+})(function(ko) {
+
+if (!ko.virtualElements)
+    throw Error('Repeat requires at least Knockout 2.1');
+
+var ko_bindingFlags = ko.bindingFlags || {};
+var ko_unwrap = ko.utils.unwrapObservable;
+
+var koProtoName = '__ko_proto__';
+
+if (ko.version >= "3.0.0") {
+    // In Knockout 3.0.0, use the node preprocessor to replace a node with a repeat binding with a virtual element
+    var provider = ko.bindingProvider.instance, previousPreprocessFn = provider.preprocessNode;
+    provider.preprocessNode = function(node) {
+        var newNodes, nodeBinding;
+        if (!previousPreprocessFn || !(newNodes = previousPreprocessFn.call(this, node))) {
+            if (node.nodeType === 1 && (nodeBinding = node.getAttribute('data-bind'))) {
+                if (/^\s*repeat\s*:/.test(nodeBinding)) {
+                    var leadingComment = node.ownerDocument.createComment('ko ' + nodeBinding),
+                        trailingComment = node.ownerDocument.createComment('/ko');
+                    node.parentNode.insertBefore(leadingComment, node);
+                    node.parentNode.insertBefore(trailingComment, node.nextSibling);
+                    node.removeAttribute('data-bind');
+                    newNodes = [leadingComment, node, trailingComment];
+                }
+            }
+        }
+        return newNodes;
+    };
+}
+
+ko.virtualElements.allowedBindings.repeat = true;
+ko.bindingHandlers.repeat = {
+    flags: ko_bindingFlags.contentBind | ko_bindingFlags.canUseVirtual,
+    init: function(element, valueAccessor, allBindingsAccessor, xxx, bindingContext) {
+
+        // Read and set fixed options--these options cannot be changed
+        var repeatParam = ko_unwrap(valueAccessor());
+        if (repeatParam && typeof repeatParam == 'object' && !('length' in repeatParam)) {
+            var repeatIndex = repeatParam.index,
+                repeatData = repeatParam.item,
+                repeatStep = repeatParam.step,
+                repeatReversed = repeatParam.reverse,
+                repeatBind = repeatParam.bind,
+                repeatInit = repeatParam.init,
+                repeatUpdate = repeatParam.update;
+        }
+        // Set default values for options that need it
+        repeatIndex = repeatIndex || '$index';
+        repeatData = repeatData || ko.bindingHandlers.repeat.itemName || '$item';
+        repeatStep = repeatStep || 1;
+        repeatReversed = repeatReversed || false;
+
+        var parent = element.parentNode, placeholder;
+        if (element.nodeType == 8) {    // virtual element
+            // Extract the "children" and find the single element node
+            var childNodes = ko.utils.arrayFilter(ko.virtualElements.childNodes(element), function(node) { return node.nodeType == 1;});
+            if (childNodes.length !== 1) {
+                throw Error("Repeat binding requires a single element to repeat");
+            }
+            ko.virtualElements.emptyNode(element);
+
+            // The placeholder is the closing comment normally, or the opening comment if reversed
+            placeholder = repeatReversed ? element : element.nextSibling;
+            // The element to repeat is the contained element
+            element = childNodes[0];
+        } else {    // regular element
+            // First clean the element node and remove node's binding
+            var origBindString = element.getAttribute('data-bind');
+            ko.cleanNode(element);
+            element.removeAttribute('data-bind');
+
+            // Original element is no longer needed: delete it and create a placeholder comment
+            placeholder = element.ownerDocument.createComment('ko_repeatplaceholder ' + origBindString);
+            parent.replaceChild(placeholder, element);
+        }
+
+        // extract and remove a data-repeat-bind attribute, if present
+        if (!repeatBind) {
+            repeatBind = element.getAttribute('data-repeat-bind');
+            if (repeatBind) {
+                element.removeAttribute('data-repeat-bind');
+            }
+        }
+
+        // Make a copy of the element node to be copied for each repetition
+        var cleanNode = element.cloneNode(true);
+        if (typeof repeatBind == "string") {
+            cleanNode.setAttribute('data-bind', repeatBind);
+            repeatBind = null;
+        }
+
+        // Set up persistent data
+        var lastRepeatCount = 0,
+            notificationObservable = ko.observable(),
+            repeatArray, arrayObservable;
+
+        if (repeatInit) {
+            repeatInit(parent);
+        }
+
+        var subscribable = ko.computed(function() {
+            function makeArrayItemAccessor(index) {
+                var f = function(newValue) {
+                    var item = repeatArray[index];
+                    // Reading the value of the item
+                    if (!arguments.length) {
+                        notificationObservable();   // for dependency tracking
+                        return ko_unwrap(item);
+                    }
+                    // Writing a value to the item
+                    if (ko.isObservable(item)) {
+                        item(newValue);
+                    } else if (arrayObservable && arrayObservable.splice) {
+                        arrayObservable.splice(index, 1, newValue);
+                    } else {
+                        repeatArray[index] = newValue;
+                    }
+                    return this;
+                };
+                // Pretend that our accessor function is an observable
+                f[koProtoName] = ko.observable;
+                return f;
+            }
+
+            function makeBinding(item, index, context) {
+                return repeatArray
+                    ? function() { return repeatBind.call(bindingContext.$data, item, index, context); }
+                    : function() { return repeatBind.call(bindingContext.$data, index, context); }
+            }
+
+            // Read and set up variable options--these options can change and will update the binding
+            var paramObservable = valueAccessor(), repeatParam = ko_unwrap(paramObservable), repeatCount = 0;
+            if (repeatParam && typeof repeatParam == 'object') {
+                if ('length' in repeatParam) {
+                    repeatArray = repeatParam;
+                    repeatCount = repeatArray.length;
+                } else {
+                    if ('foreach' in repeatParam) {
+                        repeatArray = ko_unwrap(paramObservable = repeatParam.foreach);
+                        if (repeatArray && typeof repeatArray == 'object' && 'length' in repeatArray) {
+                            repeatCount = repeatArray.length || 0;
+                        } else {
+                            repeatCount = repeatArray || 0;
+                            repeatArray = null;
+                        }
+                    }
+                    // If a count value is provided (>0), always output that number of items
+                    if ('count' in repeatParam)
+                        repeatCount = ko_unwrap(repeatParam.count) || repeatCount;
+                    // If a limit is provided, don't output more than the limit
+                    if ('limit' in repeatParam)
+                        repeatCount = Math.min(repeatCount, ko_unwrap(repeatParam.limit)) || repeatCount;
+                }
+                arrayObservable = repeatArray && ko.isObservable(paramObservable) ? paramObservable : null;
+            } else {
+                repeatCount = repeatParam || 0;
+            }
+
+            // Remove nodes from end if array is shorter
+            for (; lastRepeatCount > repeatCount; lastRepeatCount-=repeatStep) {
+                ko.removeNode(repeatReversed ? placeholder.nextSibling : placeholder.previousSibling);
+            }
+
+            // Notify existing nodes of change
+            notificationObservable.notifySubscribers();
+
+            // Add nodes to end if array is longer (also initially populates nodes)
+            for (; lastRepeatCount < repeatCount; lastRepeatCount+=repeatStep) {
+                // Clone node and add to document
+                var newNode = cleanNode.cloneNode(true);
+                parent.insertBefore(newNode, repeatReversed ? placeholder.nextSibling : placeholder);
+                newNode.setAttribute('data-repeat-index', lastRepeatCount);
+
+                // Apply bindings to inserted node
+                if (repeatArray && repeatData == '$data') {
+                    var newContext = bindingContext.createChildContext(makeArrayItemAccessor(lastRepeatCount));
+                } else {
+                    var newContext = bindingContext.extend();
+                    if (repeatArray)
+                        newContext[repeatData] = makeArrayItemAccessor(lastRepeatCount);
+                }
+                newContext[repeatIndex] = lastRepeatCount;
+                if (repeatBind) {
+                    var result = ko.applyBindingsToNode(newNode, makeBinding(newContext[repeatData], lastRepeatCount, newContext), newContext, true),
+                        shouldBindDescendants = result && result.shouldBindDescendants;
+                }
+                if (!repeatBind || (result && shouldBindDescendants !== false)) {
+                    ko.applyBindings(newContext, newNode);
+                }
+            }
+            if (repeatUpdate) {
+                repeatUpdate(parent);
+            }
+        }, null, {disposeWhenNodeIsRemoved: placeholder});
+
+        return { controlsDescendantBindings: true, subscribable: subscribable };
+    }
+};
+});
\ No newline at end of file
diff --git a/lib/web/ko/ko.js b/lib/web/knockoutjs/knockout.js
similarity index 100%
rename from lib/web/ko/ko.js
rename to lib/web/knockoutjs/knockout.js
-- 
GitLab


From 14783b021dd26137a0bc8cbb58ba1aa4b9acf3e1 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 29 Sep 2015 17:16:56 +0300
Subject: [PATCH 152/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../Ui/view/base/web/js/modal/alert.js        | 13 +++++++++
 .../Ui/view/base/web/js/modal/prompt.js       | 28 +++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
index 63592e94040..dfd27afff85 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'jquery',
     'underscore',
@@ -16,16 +17,28 @@ define([
             modalClass: 'confirm',
             title: $.mage.__('Attention'),
             actions: {
+
+                /**
+                 * Callback always - called on all actions.
+                 */
                 always: function () {}
             },
             buttons: [{
                 text: $.mage.__('OK'),
                 class: 'action-secondary action-accept',
+
+                /**
+                 * Click handler.
+                 */
                 click: function () {
                     this.closeModal(true);
                 }
             }]
         },
+
+        /**
+         * Close modal window.
+         */
         closeModal: function () {
             this.options.actions.always();
             this.element.bind('alertclosed', _.bind(this._remove, this));
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index c50b2668359..2ccfb330d88 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -18,8 +18,20 @@ define([
             promptField: '[data-role="promptField"]',
             value: '',
             actions: {
+
+                /**
+                 * Callback always - called on all actions.
+                 */
                 always: function () {},
+
+                /**
+                 * Callback confirm.
+                 */
                 confirm: function () {},
+
+                /**
+                 * Callback cancel.
+                 */
                 cancel: function () {}
             },
             buttons: [{
@@ -36,6 +48,10 @@ define([
                 }
             }]
         },
+
+        /**
+         * Create widget.
+         */
         _create: function () {
             this.options.focus = this.options.promptField;
             this._super();
@@ -43,13 +59,25 @@ define([
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
+
+        /**
+         * Remove widget
+         */
         _remove: function () {
             this.modal.remove();
         },
+
+        /**
+         * Open modal window
+         */
         openModal: function () {
             this._super();
             this.modal.find(this.options.promptField).val(this.options.value);
         },
+
+        /**
+         * Close modal window
+         */
         closeModal: function (result) {
             var value;
 
-- 
GitLab


From 26704be2755a263b9c522b6c1638c7814268b2e0 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 29 Sep 2015 17:42:09 +0300
Subject: [PATCH 153/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../Magento/Ui/view/base/web/js/modal/prompt.js    | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 2ccfb330d88..7fc43693cc6 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -37,12 +37,20 @@ define([
             buttons: [{
                 text: $.mage.__('Cancel'),
                 class: 'action-tertiary action-dismiss',
+
+                /**
+                 * Click handler.
+                 */
                 click: function () {
                     this.closeModal();
                 }
             }, {
                 text: $.mage.__('OK'),
                 class: 'action-secondary action-accept',
+
+                /**
+                 * Click handler.
+                 */
                 click: function () {
                     this.closeModal(true);
                 }
@@ -55,7 +63,11 @@ define([
         _create: function () {
             this.options.focus = this.options.promptField;
             this._super();
-            this.modal.find(this.options.modalContent).append('<input data-role="promptField" type="text"/>');
+            this.modal.find(this.options.modalContent).append(
+                '<div class="prompt-message">' +
+                    '<input data-role="promptField" class="admin__control-text" type="text"/>' +
+                '</div>'
+            );
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
-- 
GitLab


From 6ec8e5376e55608c496704262f5a7bf252ed9b10 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Tue, 29 Sep 2015 17:56:12 +0300
Subject: [PATCH 154/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../testsuite/Magento/Test/Js/_files/blacklist/magento.txt     | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index f7c90d331d3..253159a4ab4 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -475,9 +475,6 @@ app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
 app/code/Magento/Ui/view/base/web/js/lib/view/utils/bindings.js
 app/code/Magento/Ui/view/base/web/js/lib/view/utils/dom-observer.js
 app/code/Magento/Ui/view/base/web/js/lib/view/utils/raf.js
-app/code/Magento/Ui/view/base/web/js/modal/alert.js
-app/code/Magento/Ui/view/base/web/js/modal/confirm.js
-app/code/Magento/Ui/view/base/web/js/modal/modal.js
 app/code/Magento/Ui/view/base/web/js/modal/modalToggle.js
 app/code/Magento/Ui/view/frontend/web/js/model/messageList.js
 app/code/Magento/Ui/view/frontend/web/js/model/messages.js
-- 
GitLab


From 0bc7b4b6e6dd2c0f1e9edc2a0cb0ba0aae686041 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Tue, 29 Sep 2015 17:58:40 +0300
Subject: [PATCH 155/420] MAGETWO-42995: Stabilize functional tests

---
 .../view/adminhtml/web/order/create/form.js   | 19 ++++++++++---------
 .../adminhtml/web/order/create/scripts.js     |  2 +-
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
index 1e041234a79..1bcd3103237 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
@@ -4,17 +4,18 @@
  */
 
 define([
-	"jquery",
-    "Magento_Sales/order/create/scripts",
-    'domReady!'
-], function(jQuery){
-	var $el = jQuery('#edit_form'),
-		config,
-		baseUrl,
+    'jquery',
+    'Magento_Sales/order/create/scripts'
+], function (jQuery) {
+    'use strict';
+
+    var $el = jQuery('#edit_form'),
+        config,
+        baseUrl,
         order,
         payment;
 
-    if( !$el.length || !$el.data('order-config') ){
+    if (!$el.length || !$el.data('order-config')) {
         return;
     }
 
@@ -23,7 +24,7 @@ define([
 
     order = new AdminOrder(config);
     order.setLoadBaseUrl(baseUrl);
-    
+
     payment = {
         switchMethod: order.switchPaymentMethod.bind(order)
     };
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 2bc3526cace..29c5a354c4b 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -36,7 +36,7 @@ AdminOrder.prototype = {
         this.isOnlyVirtualProduct = false;
         this.excludedPaymentMethods = [];
         this.summarizePrice = true;
-        window.addEventListener('load',  (function(){
+        Event.observe(window, 'load', (function(){
             this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
             this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
                 addControlButton: function(button){
-- 
GitLab


From a7b856c06948a5a3e7a579d12ac24fc7930b0681 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Tue, 29 Sep 2015 18:22:36 +0300
Subject: [PATCH 156/420] MAGETWO-42762: Improve performance of table rendering

- Clean up static tests blacklist
---
 .../base/web/js/form/element/multiselect.js   |  8 +--
 .../view/base/web/js/form/element/textarea.js |  6 +-
 .../Magento/Ui/view/base/web/js/grid/dnd.js   |  2 +-
 .../Ui/view/base/web/js/grid/editing/bulk.js  |  2 +-
 .../view/base/web/js/grid/editing/client.js   |  2 +-
 .../Magento/Ui/view/base/web/js/lib/class.js  |  1 +
 .../view/base/web/js/lib/component/manip.js   |  1 +
 .../base/web/js/lib/ko/bind/after-render.js   |  1 +
 .../web/js/lib/ko/extender/bound-nodes.js     |  2 +
 .../js/lib/ko/template/observable_source.js   | 12 ++--
 .../view/base/web/js/lib/view/utils/async.js  |  3 +-
 .../Test/Js/_files/blacklist/magento.txt      | 59 -------------------
 lib/web/mage/requirejs/mixins.js              |  1 +
 lib/web/mage/requirejs/static.js              |  1 +
 lib/web/mage/utils/compare.js                 |  2 +
 lib/web/mage/utils/objects.js                 |  2 -
 lib/web/mage/utils/strings.js                 |  3 +-
 lib/web/mage/utils/template.js                |  4 ++
 lib/web/mage/utils/wrapper.js                 |  1 +
 19 files changed, 35 insertions(+), 78 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
index 624d2df5c7e..6c5de791d1e 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
@@ -16,12 +16,11 @@ define([
         },
 
         /**
-         * Calls 'getInitialValue' of parent and if the result of it is not empty
-         * string, returs it, else returnes caption or first found option's value
+         * Splits incoming string value.
          *
-         * @returns {Array|String}
+         * @returns {Array}
          */
-        getInitialValue: function () {
+        normalizeData: function () {
             var value = this._super();
 
             return _.isString(value) ? value.split(',') : value;
@@ -29,6 +28,7 @@ define([
 
         /**
          * Defines if value has changed
+         *
          * @returns {Boolean}
          */
         hasChanged: function () {
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js b/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
index b5d263cc344..2731725ae2d 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
@@ -10,9 +10,9 @@ define([
 
     return Abstract.extend({
         defaults: {
-            cols:       15,
-            rows:       2,
-            template:   'ui/form/element/textarea'
+            cols: 15,
+            rows: 2,
+            template: 'ui/form/element/textarea'
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
index 217d4bec23a..dd85c33145d 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
@@ -212,7 +212,7 @@ define([
                 return this;
             }
 
-            if (Object.hasOwnProperty(model, 'dragover')) {
+            if (!Object.hasOwnProperty(model, 'dragover')) {
                 model.track('dragover');
             }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
index 9fd4e7e6795..f6fcc59213d 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
@@ -2,7 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
- 
+
 define([
     'underscore',
     'mageUtils',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
index c5bcbeee459..6651a605f05 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
@@ -2,7 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
- 
+
 define([
     'jquery',
     'underscore',
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/class.js b/app/code/Magento/Ui/view/base/web/js/lib/class.js
index 12b70b4a45c..f8191d57a36 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/class.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/class.js
@@ -57,6 +57,7 @@ define([
     }
 
     Class = createConstructor({
+
         /**
          * Entry point to the initialization of consturctors' instance.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js b/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
index 8bc3f881796..e3f2c5f3366 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
@@ -21,6 +21,7 @@ define([
     }
 
     return {
+
         /**
          * Retrieves requested region.
          * Creates region if it was not created yet
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
index 2297f2d5cf1..67a48c89a92 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
@@ -8,6 +8,7 @@ define([
     'use strict';
 
     ko.bindingHandlers.afterRender = {
+
         /**
          * Binding init callback.
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
index ed7b85b6f41..90605926b04 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
@@ -84,6 +84,7 @@ define([
     }
 
     wrapper.extend(ko, {
+
         /**
          * Extends kncokouts' 'applyBindings'
          * to track nodes associated with model.
@@ -132,6 +133,7 @@ define([
     });
 
     return {
+
         /**
          * Returns root nodes associated with a model. If callback is provided,
          * will iterate through all of the present nodes triggering callback
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
index d97291dcf15..251163992ba 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
@@ -5,16 +5,20 @@
 /**
  * Is being used by knockout template engine to store template to.
  */
-define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) {
+define([
+    'ko',
+    'uiClass'
+], function (ko, Class) {
     'use strict';
 
     return Class.extend({
 
         /**
          * Initializes templateName, _data, nodes properties.
+         *
          * @param  {template} template - identifier of template
          */
-        initialize: function(template) {
+        initialize: function (template) {
             this.templateName = template;
             this._data = {};
             this.nodes = ko.observable([]);
@@ -27,7 +31,7 @@ define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) {
          * @param  {*} value
          * @return {*} - if 1 arg provided, returnes _data[key] property
          */
-        data: function(key, value) {
+        data: function (key, value) {
             if (arguments.length === 1) {
                 return this._data[key];
             }
@@ -35,4 +39,4 @@ define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) {
             this._data[key] = value;
         }
     });
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
index 1b5743cd9d2..6fd7d86e2a3 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
@@ -126,7 +126,6 @@ define([
      */
     function setRootListener(data, component) {
         boundedNodes.get(component, function (root) {
-            var ctx = data.ctx || '*'
             if (!$(root).is(data.ctx || '*')) {
                 return;
             }
@@ -223,7 +222,7 @@ define([
         /**
          * Sets removal listener of the specified nodes.
          *
-         * @param {{HTMLElement|Array|ArrayLike}} nodes - Nodes whose removal to track.
+         * @param ({HTMLElement|Array|ArrayLike}) nodes - Nodes whose removal to track.
          * @param {Function} fn - Callback that will be invoked when node is removed.
          */
         remove: function (nodes, fn) {
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index f7c90d331d3..759ea7b2843 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -388,92 +388,41 @@ app/code/Magento/Ui/view/base/web/js/form/client.js
 app/code/Magento/Ui/view/base/web/js/form/components/area.js
 app/code/Magento/Ui/view/base/web/js/form/components/collection.js
 app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
-app/code/Magento/Ui/view/base/web/js/form/components/fieldset.js
-app/code/Magento/Ui/view/base/web/js/form/components/group.js
 app/code/Magento/Ui/view/base/web/js/form/components/html.js
 app/code/Magento/Ui/view/base/web/js/form/components/tab_group.js
 app/code/Magento/Ui/view/base/web/js/form/components/tab.js
 app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
-app/code/Magento/Ui/view/base/web/js/form/element/boolean.js
-app/code/Magento/Ui/view/base/web/js/form/element/date.js
 app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
-app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
 app/code/Magento/Ui/view/base/web/js/form/element/post-code.js
 app/code/Magento/Ui/view/base/web/js/form/element/region.js
 app/code/Magento/Ui/view/base/web/js/form/element/select.js
-app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
 app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
 app/code/Magento/Ui/view/base/web/js/form/form.js
 app/code/Magento/Ui/view/base/web/js/form/provider.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
 app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
-app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
 app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
-app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
-app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
-app/code/Magento/Ui/view/base/web/js/grid/dnd.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
 app/code/Magento/Ui/view/base/web/js/grid/export.js
-app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
-app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
-app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
-app/code/Magento/Ui/view/base/web/js/grid/massactions.js
-app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
-app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
-app/code/Magento/Ui/view/base/web/js/grid/provider.js
 app/code/Magento/Ui/view/base/web/js/grid/resize.js
-app/code/Magento/Ui/view/base/web/js/grid/search/search.js
 app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
-app/code/Magento/Ui/view/base/web/js/grid/tree-massactions.js
-app/code/Magento/Ui/view/base/web/js/lib/class.js
-app/code/Magento/Ui/view/base/web/js/lib/collapsible.js
-app/code/Magento/Ui/view/base/web/js/lib/component/core.js
 app/code/Magento/Ui/view/base/web/js/lib/component/links.js
-app/code/Magento/Ui/view/base/web/js/lib/component/main.js
-app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
-app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
 app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
 app/code/Magento/Ui/view/base/web/js/lib/events.js
 app/code/Magento/Ui/view/base/web/js/lib/key-codes.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/collapsible.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/datepicker.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/fadeVisible.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/i18n.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/keyboard.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/mage-init.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/outer_click.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/extender/observable_array.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
 app/code/Magento/Ui/view/base/web/js/lib/loader.js
-app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
-app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
-app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
-app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
 app/code/Magento/Ui/view/base/web/js/lib/spinner.js
 app/code/Magento/Ui/view/base/web/js/lib/step-wizard.js
 app/code/Magento/Ui/view/base/web/js/lib/storage.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/utils.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js
-app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
-app/code/Magento/Ui/view/base/web/js/lib/view/utils/bindings.js
-app/code/Magento/Ui/view/base/web/js/lib/view/utils/dom-observer.js
 app/code/Magento/Ui/view/base/web/js/lib/view/utils/raf.js
 app/code/Magento/Ui/view/base/web/js/modal/alert.js
 app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -624,10 +573,8 @@ lib/web/mage/mage.js
 lib/web/mage/menu.js
 lib/web/mage/popup-window.js
 lib/web/mage/redirect-url.js
-lib/web/mage/requirejs/mixins.js
 lib/web/mage/requirejs/plugin/id-normalizer.js
 lib/web/mage/requirejs/resolver.js
-lib/web/mage/requirejs/static.js
 lib/web/mage/smart-keyboard-handler.js
 lib/web/mage/sticky.js
 lib/web/mage/storage.js
@@ -641,13 +588,7 @@ lib/web/mage/translate-inline.js
 lib/web/mage/translate.js
 lib/web/mage/url.js
 lib/web/mage/utils/arrays.js
-lib/web/mage/utils/compare.js
-lib/web/mage/utils/main.js
 lib/web/mage/utils/misc.js
-lib/web/mage/utils/objects.js
-lib/web/mage/utils/strings.js
-lib/web/mage/utils/template.js
-lib/web/mage/utils/wrapper.js
 lib/web/mage/validation.js
 lib/web/mage/validation/validation.js
 lib/web/mage/view/composite.js
diff --git a/lib/web/mage/requirejs/mixins.js b/lib/web/mage/requirejs/mixins.js
index c3cc36a4adf..89baa793374 100644
--- a/lib/web/mage/requirejs/mixins.js
+++ b/lib/web/mage/requirejs/mixins.js
@@ -89,6 +89,7 @@ define('mixins', [
     }
 
     return {
+
         /**
          * Loads specified module along with its' mixins.
          *
diff --git a/lib/web/mage/requirejs/static.js b/lib/web/mage/requirejs/static.js
index cb579e80ece..a2ee644942a 100644
--- a/lib/web/mage/requirejs/static.js
+++ b/lib/web/mage/requirejs/static.js
@@ -158,6 +158,7 @@ define('statistician', [
     }
 
     return {
+
         /**
          * Stores keys of 'modules' object to localStorage under 'all' namespace.
          *
diff --git a/lib/web/mage/utils/compare.js b/lib/web/mage/utils/compare.js
index 38ec53b205d..2cae7362a21 100644
--- a/lib/web/mage/utils/compare.js
+++ b/lib/web/mage/utils/compare.js
@@ -185,9 +185,11 @@ define([
             addChange(ns, name, 'update', current, old);
         }
     }
+
     /*eslint-enable max-depth*/
 
     return {
+
         /**
          *
          * @returns {Object}
diff --git a/lib/web/mage/utils/objects.js b/lib/web/mage/utils/objects.js
index 92b49508b49..4ea214f0dca 100644
--- a/lib/web/mage/utils/objects.js
+++ b/lib/web/mage/utils/objects.js
@@ -326,8 +326,6 @@ define([
          * @param {Number} [maxDepth=7] - Max recursion depth.
          */
         forEachRecursive: function (data, action, maxDepth) {
-            var prop;
-
             maxDepth = typeof maxDepth === 'number' && !isNaN(maxDepth) ? maxDepth - 1 : 7;
 
             if (!_.isFunction(action) || _.isFunction(data) || maxDepth < 0) {
diff --git a/lib/web/mage/utils/strings.js b/lib/web/mage/utils/strings.js
index 89a9109f99e..8c6f8d329f6 100644
--- a/lib/web/mage/utils/strings.js
+++ b/lib/web/mage/utils/strings.js
@@ -10,6 +10,7 @@ define([
     var jsonRe = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/;
 
     return {
+
         /**
          * Attempts to convert string to one of the primitive values,
          * or to parse it as a valid json object.
@@ -95,7 +96,7 @@ define([
             return prefix ? prefix + '.' + part : part;
         },
 
-         /**
+        /**
          * Splits incoming string and returns its' part specified by offset.
          *
          * @param {String} parts
diff --git a/lib/web/mage/utils/template.js b/lib/web/mage/utils/template.js
index 85f2aeb5b03..9f0e5f656c9 100644
--- a/lib/web/mage/utils/template.js
+++ b/lib/web/mage/utils/template.js
@@ -30,6 +30,7 @@ define([
     })();
 
     if (hasStringTmpls) {
+
         /*eslint-disable no-unused-vars, no-eval*/
         /**
          * Evaluates template string using ES6 templates.
@@ -41,8 +42,10 @@ define([
         template = function (tmpl, $) {
             return eval('`' + tmpl + '`');
         };
+
         /*eslint-enable no-unused-vars, no-eval*/
     } else {
+
         /**
          * Fallback function used when ES6 templates are not supported.
          * Uses underscore templates renderer.
@@ -106,6 +109,7 @@ define([
     }
 
     return {
+
         /**
          * Applies provided data to the template.
          *
diff --git a/lib/web/mage/utils/wrapper.js b/lib/web/mage/utils/wrapper.js
index 51985cae415..4a0253701ae 100644
--- a/lib/web/mage/utils/wrapper.js
+++ b/lib/web/mage/utils/wrapper.js
@@ -43,6 +43,7 @@ define([
     var superReg = /\b_super\b/;
 
     return {
+
         /**
          * Wraps target function with a specified wrapper, which will recieve
          * reference to the original function as a first argument.
-- 
GitLab


From a808038580bfac7c74813cefbc900d07303600b3 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Mon, 21 Sep 2015 13:40:01 +0300
Subject: [PATCH 157/420] MAGETWO-42838: Combine filter and column components
 definition

---
 .../Catalog/Ui/Component/Listing/Columns.php  |  25 ++++
 .../Catalog/Ui/Component/Listing/Filters.php  |  48 -------
 .../ui_component/cms_page_listing.xml         |   3 +
 .../Listing/AssociatedProduct/Filters.php     |  42 +++---
 ...onfigurable_associated_product_listing.xml |   5 +-
 .../Unit/Ui/Component/Listing/FiltersTest.php | 135 ------------------
 .../Customer/Ui/Component/Listing/Columns.php |  28 ++++
 .../Customer/Ui/Component/Listing/Filters.php |  55 -------
 .../ui_component/customer_listing.xml         |   2 +-
 .../Ui/Component/AbstractComponent.php        |  25 ++++
 app/code/Magento/Ui/Component/Filters.php     |  94 +++++++++++-
 .../view/base/ui_component/etc/definition.xml |   3 +
 .../Test/Legacy/_files/obsolete_classes.php   |   5 +
 .../View/Element/UiComponent/Context.php      |  20 ++-
 .../Element/UiComponent/ContextInterface.php  |   8 ++
 .../Element/UiComponent/ObserverInterface.php |  22 +++
 .../Element/UiComponent/PoolInterface.php     |  29 ++++
 .../View/Element/UiComponent/Processor.php    | 106 ++++++++++++++
 .../Element/UiComponent/SubjectInterface.php  |  35 +++++
 .../Element/UiComponent/ProcessorTest.php     |  78 ++++++++++
 20 files changed, 507 insertions(+), 261 deletions(-)
 delete mode 100644 app/code/Magento/Catalog/Ui/Component/Listing/Filters.php
 delete mode 100644 app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php
 delete mode 100644 app/code/Magento/Customer/Ui/Component/Listing/Filters.php
 create mode 100644 lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php
 create mode 100644 lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php
 create mode 100644 lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php
 create mode 100644 lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php
 create mode 100644 lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php

diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
index 47b621b0bfc..2fe0907bc33 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
@@ -12,6 +12,17 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
      */
     const DEFAULT_COLUMNS_MAX_ORDER = 100;
 
+    /**
+     * @var array
+     */
+    protected $filterMap = [
+        'default' => 'text',
+        'select' => 'select',
+        'boolean' => 'select',
+        'multiselect' => 'select',
+        'date' => 'dateRange',
+    ];
+
     /**
      * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
      * @param \Magento\Catalog\Ui\Component\ColumnFactory $columnFactory
@@ -40,6 +51,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
         foreach ($this->attributeRepository->getList() as $attribute) {
             if (!isset($this->components[$attribute->getAttributeCode()])) {
                 $config['sortOrder'] = ++$columnSortOrder;
+                if ($attribute->getIsFilterableInGrid()) {
+                    $config['filter'] = $this->getFilterType($attribute->getFrontendInput());
+                }
                 $column = $this->columnFactory->create($attribute, $this->getContext(), $config);
                 $column->prepare();
                 $this->addComponent($attribute->getAttributeCode(), $column);
@@ -47,4 +61,15 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
         }
         parent::prepare();
     }
+
+    /**
+     * Retrieve filter type by $frontendInput
+     *
+     * @param string $frontendInput
+     * @return string
+     */
+    protected function getFilterType($frontendInput)
+    {
+        return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default'];
+    }
 }
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php b/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php
deleted file mode 100644
index 9c2950a596b..00000000000
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Catalog\Ui\Component\Listing;
-
-class Filters extends \Magento\Ui\Component\Filters
-{
-    /**
-     * @var AttributeRepository
-     */
-    protected $attributeRepository;
-
-    /**
-     * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
-     * @param \Magento\Catalog\Ui\Component\FilterFactory $filterFactory
-     * @param AttributeRepository $attributeRepository
-     * @param array $components
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
-        \Magento\Catalog\Ui\Component\FilterFactory $filterFactory,
-        \Magento\Catalog\Ui\Component\Listing\AttributeRepository $attributeRepository,
-        array $components = [],
-        array $data = []
-    ) {
-        parent::__construct($context, $components, $data);
-        $this->filterFactory = $filterFactory;
-        $this->attributeRepository = $attributeRepository;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function prepare()
-    {
-        foreach ($this->attributeRepository->getList() as $attribute) {
-            if (!isset($this->components[$attribute->getAttributeCode()]) && $attribute->getIsFilterableInGrid()) {
-                $filter = $this->filterFactory->create($attribute, $this->getContext());
-                $filter->prepare();
-                $this->addComponent($attribute->getAttributeCode(), $filter);
-            }
-        }
-        parent::prepare();
-    }
-}
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index 9421069dd62..9c50b63fe45 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -92,6 +92,9 @@
                         </item>
                     </item>
                 </item>
+                <item name="observers" xsi:type="array">
+                    <item name="column" xsi:type="string">column</item>
+                </item>
             </argument>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
diff --git a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
index af27ebc05c3..eacff4e7439 100644
--- a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
+++ b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
@@ -5,28 +5,31 @@
  */
 namespace Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct;
 
-class Filters extends \Magento\Ui\Component\Filters
+use Magento\Catalog\Ui\Component\FilterFactory;
+use Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
+use Magento\Framework\View\Element\UiComponentInterface;
+
+class Filters implements ObserverInterface
 {
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory
+     * @var FilterFactory
+     */
+    protected $filterFactory;
+
+    /**
+     * @var CollectionFactory
      */
     protected $attributeCollectionFactory;
 
     /**
-     * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
-     * @param \Magento\Catalog\Ui\Component\FilterFactory $filterFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param array $components
-     * @param array $data
+     * @param FilterFactory $filterFactory
+     * @param CollectionFactory $attributeCollectionFactory
      */
     public function __construct(
-        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
-        \Magento\Catalog\Ui\Component\FilterFactory $filterFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory $attributeCollectionFactory,
-        array $components = [],
-        array $data = []
+        FilterFactory $filterFactory,
+        CollectionFactory $attributeCollectionFactory
     ) {
-        parent::__construct($context, $components, $data);
         $this->filterFactory = $filterFactory;
         $this->attributeCollectionFactory = $attributeCollectionFactory;
     }
@@ -34,17 +37,20 @@ class Filters extends \Magento\Ui\Component\Filters
     /**
      * {@inheritdoc}
      */
-    public function prepare()
+    public function update(UiComponentInterface $component)
     {
-        $attributeIds = $this->context->getRequestParam('attribute_ids');
+        if (!$component instanceof \Magento\Ui\Component\Filters) {
+            return;
+        }
+
+        $attributeIds = $component->getContext()->getRequestParam('attribute_ids');
         if ($attributeIds) {
             foreach ($this->getAttributes($attributeIds) as $attribute) {
-                $filter = $this->filterFactory->create($attribute, $this->getContext());
+                $filter = $this->filterFactory->create($attribute, $component->getContext());
                 $filter->prepare();
-                $this->addComponent($attribute->getAttributeCode(), $filter);
+                $component->addComponent($attribute->getAttributeCode(), $filter);
             }
         }
-        parent::prepare();
     }
 
     /**
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index b497b3b385f..c83845a5692 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -37,7 +37,7 @@
                 <item name="template" xsi:type="string">ui/grid/toolbar</item>
             </item>
         </argument>
-        <filters name="listing_filters" class="Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters">
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns</item>
@@ -51,6 +51,9 @@
                         </item>
                     </item>
                 </item>
+                <item name="observers" xsi:type="array">
+                    <item name="filters" xsi:type="object">Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters</item>
+                </item>
             </argument>
             <filterSelect name="attribute_set_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php
deleted file mode 100644
index 2dc73c58104..00000000000
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Customer\Test\Unit\Ui\Component\Listing;
-
-use Magento\Customer\Ui\Component\Listing\Filters;
-
-class FiltersTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var \Magento\Framework\View\Element\UiComponent\ContextInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $context;
-
-    /** @var \Magento\Customer\Ui\Component\FilterFactory|\PHPUnit_Framework_MockObject_MockObject */
-    protected $filterFactory;
-
-    /** @var \Magento\Customer\Ui\Component\Listing\AttributeRepository|\PHPUnit_Framework_MockObject_MockObject */
-    protected $attributeRepository;
-
-    /** @var \Magento\Customer\Api\Data\AttributeMetadataInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $attributeMetadata;
-
-    /** @var \Magento\Ui\Component\Listing\Columns\ColumnInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $filter;
-
-    /** @var Filters */
-    protected $component;
-
-    public function setUp()
-    {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
-        $this->filterFactory = $this->getMock(
-            'Magento\Customer\Ui\Component\FilterFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->attributeRepository = $this->getMock(
-            'Magento\Customer\Ui\Component\Listing\AttributeRepository',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->attributeMetadata = $this->getMockForAbstractClass(
-            'Magento\Customer\Api\Data\AttributeMetadataInterface',
-            [],
-            '',
-            false
-        );
-        $this->filter = $this->getMockForAbstractClass(
-            'Magento\Ui\Component\Listing\Columns\ColumnInterface',
-            [],
-            '',
-            false
-        );
-
-        $this->component = new Filters(
-            $this->context,
-            $this->filterFactory,
-            $this->attributeRepository
-        );
-    }
-
-    public function testPrepare()
-    {
-        $attributeCode = 'billing_attribute_code';
-        $attributeData = [
-            'attribute_code' => $attributeCode,
-            'frontend_input' => 'frontend-input',
-            'frontend_label' => 'frontend-label',
-            'backend_type' => 'backend-type',
-            'options' => [
-                [
-                    'label' => 'Label',
-                    'value' => 'Value'
-                ]
-            ],
-            'is_used_in_grid' => true,
-            'is_visible_in_grid' => true,
-            'is_filterable_in_grid' => true,
-            'is_searchable_in_grid' => true,
-        ];
-
-        $this->attributeRepository->expects($this->atLeastOnce())
-            ->method('getList')
-            ->willReturn([$attributeCode => $attributeData]);
-        $this->filterFactory->expects($this->once())
-            ->method('create')
-            ->with($attributeData, $this->context)
-            ->willReturn($this->filter);
-        $this->filter->expects($this->once())
-            ->method('prepare');
-
-        $this->component->prepare();
-        $this->assertSame($this->filter, $this->component->getComponent($attributeCode));
-    }
-
-    public function testPrepareWithAlreadyAddedComponent()
-    {
-        $attributeCode = 'billing_attribute_code';
-        $attributeData = [
-            'attribute_code' => $attributeCode,
-            'frontend_input' => 'frontend-input',
-            'frontend_label' => 'frontend-label',
-            'backend_type' => 'backend-type',
-            'options' => [
-                [
-                    'label' => 'Label',
-                    'value' => 'Value'
-                ]
-            ],
-            'is_used_in_grid' => true,
-            'is_visible_in_grid' => true,
-            'is_filterable_in_grid' => false,
-            'is_searchable_in_grid' => true,
-        ];
-
-        $this->component->addComponent($attributeCode, $this->filter);
-
-        $this->attributeRepository->expects($this->atLeastOnce())
-            ->method('getList')
-            ->willReturn([$attributeCode => $attributeData]);
-
-        $this->component->prepare();
-        $this->assertEquals(null, $this->component->getComponent($attributeCode));
-    }
-}
diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Columns.php b/app/code/Magento/Customer/Ui/Component/Listing/Columns.php
index 36b2f42d3b0..bcb43fb4bfc 100644
--- a/app/code/Magento/Customer/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Customer/Ui/Component/Listing/Columns.php
@@ -23,6 +23,17 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     /** @var InlineEditUpdater */
     protected $inlineEditUpdater;
 
+    /**
+     * @var array
+     */
+    protected $filterMap = [
+        'default' => 'text',
+        'select' => 'select',
+        'boolean' => 'select',
+        'multiselect' => 'select',
+        'date' => 'dateRange',
+    ];
+
     /**
      * @param ContextInterface $context
      * @param ColumnFactory $columnFactory
@@ -103,6 +114,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     public function addColumn(array $attributeData, $columnName)
     {
         $config['sortOrder'] = ++$this->columnSortOrder;
+        if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) {
+            $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]);
+        }
         $column = $this->columnFactory->create($attributeData, $columnName, $this->getContext(), $config);
         $column->prepare();
         $this->addComponent($attributeData[AttributeMetadata::ATTRIBUTE_CODE], $column);
@@ -128,6 +142,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
                         'visible' => (bool)$attributeData[AttributeMetadata::IS_VISIBLE_IN_GRID]
                     ]
                 );
+                if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) {
+                    $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]);
+                }
                 $component->setData('config', $config);
             }
         } else {
@@ -168,4 +185,15 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
             );
         }
     }
+
+    /**
+     * Retrieve filter type by $frontendInput
+     *
+     * @param string $frontendInput
+     * @return string
+     */
+    protected function getFilterType($frontendInput)
+    {
+        return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default'];
+    }
 }
diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Filters.php b/app/code/Magento/Customer/Ui/Component/Listing/Filters.php
deleted file mode 100644
index 2e0816d0797..00000000000
--- a/app/code/Magento/Customer/Ui/Component/Listing/Filters.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Customer\Ui\Component\Listing;
-
-use Magento\Customer\Api\Data\AttributeMetadataInterface as AttributeMetadata;
-
-class Filters extends \Magento\Ui\Component\Filters
-{
-    /**
-     * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
-     * @param \Magento\Customer\Ui\Component\FilterFactory $filterFactory
-     * @param AttributeRepository $attributeRepository
-     * @param array $components
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
-        \Magento\Customer\Ui\Component\FilterFactory $filterFactory,
-        \Magento\Customer\Ui\Component\Listing\AttributeRepository $attributeRepository,
-        array $components = [],
-        array $data = []
-    ) {
-        parent::__construct($context, $components, $data);
-        $this->filterFactory = $filterFactory;
-        $this->attributeRepository = $attributeRepository;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function prepare()
-    {
-        /** @var \Magento\Customer\Model\Attribute $attribute */
-        foreach ($this->attributeRepository->getList() as $attributeCode => $attributeData) {
-            if (!isset($this->components[$attributeCode])) {
-                if (!$attributeData[AttributeMetadata::BACKEND_TYPE] != 'static'
-                    && $attributeData[AttributeMetadata::IS_USED_IN_GRID]
-                    && $attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]
-                ) {
-                    $filter = $this->filterFactory->create($attributeData, $this->getContext());
-                    $filter->prepare();
-                    $this->addComponent($attributeCode, $filter);
-                }
-            } elseif ($attributeData[AttributeMetadata::IS_USED_IN_GRID]
-                && !$attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]
-            ) {
-                unset($this->components[$attributeCode]);
-            }
-        }
-        parent::prepare();
-    }
-}
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index c467751948f..60b58a72a12 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -197,7 +197,7 @@
                 </item>
                 <item name="editorConfig" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
-                    <item name="enabled" xsi:type="boolean">true</item>
+                    <item name="enabled" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="clientConfig" xsi:type="array">
                         <item name="saveUrl" xsi:type="url" path="customer/index/inlineEdit"/>
diff --git a/app/code/Magento/Ui/Component/AbstractComponent.php b/app/code/Magento/Ui/Component/AbstractComponent.php
index b7a5b06c2de..610674c27b1 100644
--- a/app/code/Magento/Ui/Component/AbstractComponent.php
+++ b/app/code/Magento/Ui/Component/AbstractComponent.php
@@ -9,6 +9,7 @@ use Magento\Framework\DataObject;
 use Magento\Framework\View\Element\UiComponentInterface;
 use Magento\Framework\View\Element\UiComponent\ContextInterface;
 use Magento\Framework\View\Element\UiComponent\DataSourceInterface;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
 
 /**
  * Abstract class AbstractComponent
@@ -52,6 +53,8 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf
     ) {
         $this->context = $context;
         $this->components = $components;
+        $this->initObservers($data);
+        $this->context->getProcessor()->register($this);
         $this->_data = array_replace_recursive($this->_data, $data);
     }
 
@@ -92,6 +95,7 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf
         if ($this->hasData('buttons')) {
             $this->getContext()->addButtons($this->getData('buttons'), $this);
         }
+        $this->getContext()->getProcessor()->notify($this->getComponentName());
     }
 
     /**
@@ -240,4 +244,25 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf
     {
         return [];
     }
+
+    /**
+     * Initiate observers
+     *
+     * @param array $data
+     * @return void
+     */
+    protected function initObservers(array & $data = [])
+    {
+        if (isset($data['observers']) && is_array($data['observers'])) {
+            foreach ($data['observers'] as $observerType => $observer) {
+                if (!is_object($observer)) {
+                    $observer = $this;
+                }
+                if ($observer instanceof ObserverInterface) {
+                    $this->getContext()->getProcessor()->attach($observerType, $observer);
+                }
+                unset($data['observers']);
+            }
+        }
+    }
 }
diff --git a/app/code/Magento/Ui/Component/Filters.php b/app/code/Magento/Ui/Component/Filters.php
index c250487fc91..dadcdc2f095 100644
--- a/app/code/Magento/Ui/Component/Filters.php
+++ b/app/code/Magento/Ui/Component/Filters.php
@@ -5,13 +5,57 @@
  */
 namespace Magento\Ui\Component;
 
+use Magento\Framework\View\Element\UiComponent\ContextInterface;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
+use Magento\Framework\View\Element\UiComponentFactory;
+use Magento\Framework\View\Element\UiComponentInterface;
+use Magento\Ui\Component\Listing\Columns\ColumnInterface;
+
 /**
  * Class Filters
  */
-class Filters extends AbstractComponent
+class Filters extends AbstractComponent implements ObserverInterface
 {
     const NAME = 'filters';
 
+    /**
+     * Filters created from columns
+     *
+     * @var UiComponentInterface[]
+     */
+    protected $columnFilters = [];
+
+    /**
+     * Maps filter declaration to type
+     *
+     * @var array
+     */
+    protected $filterMap = [
+        'text' => 'filterInput',
+        'textRange' => 'filterRange',
+        'select' => 'filterSelect',
+        'dateRange' => 'filterDate',
+    ];
+
+    /**
+     * @var UiComponentFactory
+     */
+    protected $uiComponentFactory;
+
+    /**
+     * @inheritDoc
+     */
+    public function __construct(
+        ContextInterface $context,
+        UiComponentFactory $uiComponentFactory,
+        array $components = [],
+        array $data = []
+    ) {
+        parent::__construct($context, $components, $data);
+        $this->uiComponentFactory = $uiComponentFactory;
+    }
+
+
     /**
      * Get component name
      *
@@ -21,4 +65,52 @@ class Filters extends AbstractComponent
     {
         return static::NAME;
     }
+
+    /**
+     * @inheritDoc
+     */
+    public function update(UiComponentInterface $component)
+    {
+        if ($component instanceof ColumnInterface) {
+            $filterType = $component->getData('config/filter');
+            if (!$filterType) {
+                return;
+            }
+
+            if (isset($this->filterMap[$filterType])) {
+                $filterComponent = $this->uiComponentFactory->create(
+                    $component->getName(),
+                    $this->filterMap[$filterType],
+                    ['context' => $this->getContext()]
+                );
+                $filterComponent->setData('config', $component->getConfiguration());
+                $filterComponent->prepare();
+                $this->addComponent($component->getName(), $filterComponent);
+            }
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addComponent($name, UiComponentInterface $component)
+    {
+        $this->columnFilters[$name] = $component;
+        parent::addComponent($name, $component);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getChildComponents()
+    {
+        $result = parent::getChildComponents();
+        foreach (array_keys($this->columnFilters) as $componentName) {
+            if ($this->getComponent($componentName)) {
+                unset($result[$componentName]);
+            }
+        }
+
+        return $result;
+    }
 }
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index 1fb6abdb7a5..69a260ebe2d 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -34,6 +34,9 @@
                 <item name="displayArea" xsi:type="string">dataGridFilters</item>
                 <item name="dataScope" xsi:type="string">filters</item>
             </item>
+            <item name="observers" xsi:type="array">
+                <item name="column" xsi:type="string">column</item>
+            </item>
         </argument>
     </filters>
     <filterSearch class="Magento\Ui\Component\Filters\Type\Search">
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 cc7f031ee15..ace3c9c1e32 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -3844,4 +3844,9 @@ return [
         'Magento\Checkout\Model\Agreements\AgreementsProviderInterface',
         'Magento\CheckoutAgreements\Model\AgreementsProviderInterface'
     ],
+    ['Magento\Setup\Model\SampleData', 'Magento\SampleData\Model\SampleData'],
+    ['Magento\Customer\Controller\Account\ResetPassword'],
+    ['Magento\Customer\Controller\Account'],
+    ['Magento\Catalog\Ui\Component\Listing\Filters'],
+    ['Magento\Customer\Ui\Component\Listing\Filters'],
 ];
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php
index 3f725dd65c8..720acbcd38d 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php
@@ -7,6 +7,7 @@ namespace Magento\Framework\View\Element\UiComponent;
 
 use Magento\Framework\UrlInterface;
 use Magento\Framework\App\RequestInterface;
+use Magento\Framework\View\Element\UiComponent\Processor;
 use Magento\Framework\View\Element\UiComponentInterface;
 use Magento\Framework\View\Element\UiComponent\Control\ActionPoolFactory;
 use Magento\Framework\View\Element\UiComponent\Control\ActionPoolInterface;
@@ -84,6 +85,11 @@ class Context implements ContextInterface
      */
     protected $urlBuilder;
 
+    /**
+     * @var Processor
+     */
+    protected $processor;
+
     /**
      * @param PageLayoutInterface $pageLayout
      * @param RequestInterface $request
@@ -91,8 +97,9 @@ class Context implements ContextInterface
      * @param ActionPoolFactory $actionPoolFactory
      * @param ContentTypeFactory $contentTypeFactory
      * @param UrlInterface $urlBuilder
+     * @param Processor $processor
      * @param DataProviderInterface|null $dataProvider
-     * @param string $namespace
+     * @param null $namespace
      */
     public function __construct(
         PageLayoutInterface $pageLayout,
@@ -101,6 +108,7 @@ class Context implements ContextInterface
         ActionPoolFactory $actionPoolFactory,
         ContentTypeFactory $contentTypeFactory,
         UrlInterface $urlBuilder,
+        Processor $processor,
         DataProviderInterface $dataProvider = null,
         $namespace = null
     ) {
@@ -112,7 +120,7 @@ class Context implements ContextInterface
         $this->actionPool = $actionPoolFactory->create(['context' => $this]);
         $this->contentTypeFactory = $contentTypeFactory;
         $this->urlBuilder = $urlBuilder;
-
+        $this->processor = $processor;
         $this->setAcceptType();
     }
 
@@ -362,4 +370,12 @@ class Context implements ContextInterface
         }
         $component->prepareDataSource($data);
     }
+
+    /**
+     * @inheritDoc
+     */
+    public function getProcessor()
+    {
+        return $this->processor;
+    }
 }
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php
index 55ed8e0d065..bd89985dc14 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Framework\View\Element\UiComponent;
 
+use Magento\Framework\View\Element\UiComponent\Processor;
 use Magento\Framework\View\Element\UiComponentInterface;
 use Magento\Framework\View\Element\UiComponent\ContentType\ContentTypeInterface;
 use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
@@ -136,4 +137,11 @@ interface ContextInterface
      * @return  string
      */
     public function getUrl($route = '', $params = []);
+
+    /**
+     * Get component processor
+     *
+     * @return Processor
+     */
+    public function getProcessor();
 }
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php
new file mode 100644
index 00000000000..b9cbce56acb
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponentInterface;
+
+/**
+ * Interface ObserverInterface
+ */
+interface ObserverInterface
+{
+    /**
+     * Update component according to $component
+     *
+     * @param UiComponentInterface $component
+     * @return void
+     */
+    public function update(UiComponentInterface $component);
+}
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php
new file mode 100644
index 00000000000..c265025925d
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponentInterface;
+
+/**
+ * Interface PoolInterface
+ */
+interface PoolInterface
+{
+    /**
+     * Register component at pool
+     *
+     * @param UiComponentInterface $component
+     * @return void
+     */
+    public function register(UiComponentInterface $component);
+
+    /**
+     * Retrieve components pool
+     *
+     * @return UiComponentInterface[]
+     */
+    public function getComponents();
+}
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php
new file mode 100644
index 00000000000..4e7bb9d9932
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponentInterface;
+
+/**
+ * Class Processor
+ */
+class Processor implements PoolInterface, SubjectInterface
+{
+    /**
+     * @var UiComponentInterface[]
+     */
+    protected $components = [];
+
+    /**
+     * Array of observers
+     *
+     * [
+     * 'component_type1' => ObserverInterface[],
+     * 'component_type2' => ObserverInterface[],
+     * ]
+     *
+     * @var array
+     */
+    protected $observers = [];
+
+
+    /**
+     * @inheritDoc
+     */
+    public function register(UiComponentInterface $component)
+    {
+        $this->components[] = $component;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getComponents()
+    {
+        return $this->components;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function attach($type, ObserverInterface $observer)
+    {
+        $this->observers[$type][] = $observer;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function detach($type, ObserverInterface $observer)
+    {
+        if (!isset($this->observers[$type])) {
+            return;
+        }
+
+        $key = array_search($observer, $this->observers[$type], true);
+        if ($key !== false) {
+            unset($this->observers[$type][$key]);
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function notify($type)
+    {
+        $componentType = $this->normalizeType($type);
+        if (!isset($this->observers[$componentType])) {
+            return;
+        }
+
+        /** @var UiComponentInterface $component */
+        foreach ($this->getComponents() as $component) {
+            if ($component->getComponentName() != $type) {
+                continue;
+            }
+
+            /** @var ObserverInterface $observer */
+            foreach ($this->observers[$componentType] as $observer) {
+                $observer->update($component);
+            }
+        }
+    }
+
+    /**
+     * Normalize type to component type
+     *
+     * @param string $type
+     * @return string
+     */
+    protected function normalizeType($type)
+    {
+        $componentType = (strpos($type, '.') !== false) ? substr($type, 0, strpos($type, '.')) : $type;
+        return $componentType;
+    }
+}
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php
new file mode 100644
index 00000000000..6b166444053
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+/**
+ * Interface SubjectInterface
+ */
+interface SubjectInterface
+{
+    /**
+     * Attach an observer by type
+     * @param string $type
+     * @param ObserverInterface $observer
+     * @return void
+     */
+    public function attach($type, ObserverInterface $observer);
+
+    /**
+     * Detach an observer by type
+     * @param string $type
+     * @param ObserverInterface $observer
+     * @return void
+     */
+    public function detach($type, ObserverInterface $observer);
+
+    /**
+     * Notify an observer(s) by type
+     * @param string $type
+     * @return void
+     */
+    public function notify($type);
+}
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php
new file mode 100644
index 00000000000..c10d6fe61c3
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/**
+ * Test for view Messages model
+ */
+namespace Magento\Framework\View\Test\Unit\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponent\Processor;
+use Magento\Framework\View\Element\UiComponentInterface;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
+
+class ProcessorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var UiComponentInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $component;
+
+    /**
+     * @var ObserverInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $observer;
+
+    /**
+     * @var Processor
+     */
+    protected $processor;
+
+    protected function setUp()
+    {
+        $this->component = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface')
+            ->getMockForAbstractClass();
+        $this->observer = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ObserverInterface')
+            ->getMockForAbstractClass();
+        $this->processor = new Processor();
+    }
+
+    public function testRegisterGetComponents()
+    {
+        $this->assertCount(0, $this->processor->getComponents());
+        $this->processor->register($this->component);
+        $this->assertCount(1, $this->processor->getComponents());
+    }
+
+    public function testAttachAndNotify()
+    {
+        $type = 'test_type';
+        $this->component->expects($this->any())
+            ->method('getComponentName')
+            ->willReturn($type);
+        $this->observer->expects($this->any())
+            ->method('update')
+            ->with($this->component);
+        /** @var UiComponentInterface $component2 */
+        $component2 = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface')
+            ->getMockForAbstractClass();
+        $component2->expects($this->any())
+            ->method('getComponentName')
+            ->willReturn('other_type');
+
+        $this->processor->register($this->component);
+        $this->processor->register($component2);
+        $this->processor->attach($type, $this->observer);
+        $this->processor->notify($type);
+    }
+
+    public function testDetach()
+    {
+        $this->processor->detach('unexists_type', $this->observer);
+        $this->processor->attach('some_type', $this->observer);
+        $this->processor->notify('unexists_type');
+        $this->processor->detach('some_type', $this->observer);
+    }
+}
-- 
GitLab


From 10ff04e1a7e10ff76c19b910b2ca17276d8eeea0 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Tue, 29 Sep 2015 17:30:15 -0500
Subject: [PATCH 158/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

---
 .../Generator/EntityChildTestAbstract.php     |  2 +-
 .../Autoload/AutoloaderInterface.php          |  8 ++
 .../Framework/Autoload/ClassLoaderWrapper.php | 49 ++++++------
 .../Magento/Framework/Code/Generator.php      | 57 +++++++++-----
 .../Code/Generator/DefinedClasses.php         | 19 ++---
 .../Code/Generator/EntityAbstract.php         |  4 +-
 .../Unit/Generator/DefinedClassesTest.php     | 74 +++++++++++++++++++
 .../Unit/Generator/EntityAbstractTest.php     |  8 +-
 .../Code/Test/Unit/GeneratorTest.php          | 10 ++-
 .../Unit/Code/Generator/ConverterTest.php     |  2 +-
 .../Unit/Code/Generator/RepositoryTest.php    |  2 +-
 11 files changed, 168 insertions(+), 67 deletions(-)
 create mode 100644 lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php

diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
index 0265b6342ab..acbc463380d 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
@@ -126,7 +126,7 @@ abstract class EntityChildTestAbstract extends \PHPUnit_Framework_TestCase
     protected function mockDefinedClassesCall()
     {
         $this->definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+            ->method('isClassLoadable')
             ->with($this->getSourceClassName())
             ->willReturn(true);
     }
diff --git a/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php b/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php
index 6349cbbafcb..dad4426c96b 100644
--- a/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php
+++ b/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php
@@ -55,4 +55,12 @@ interface AutoloaderInterface
      * @return bool
      */
     public function loadClass($className);
+
+    /**
+     * Get filepath of class on system or false if it does not exist
+     *
+     * @param string $className
+     * @return string|bool
+     */
+    public function findFile($className);
 }
diff --git a/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php b/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php
index f96162b3500..c1f2f5d15a1 100644
--- a/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php
+++ b/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php
@@ -28,12 +28,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Adds a PSR-4 mapping from a namespace prefix to directories to search in for the corresponding class
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-4 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @param bool $prepend Whether to append the given path or paths to the paths already associated with the prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function addPsr4($nsPrefix, $paths, $prepend = false)
     {
@@ -41,12 +36,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Adds a PSR-0 mapping from a namespace prefix to directories to search in for the corresponding class
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-0 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @param bool $prepend Whether to append the given path or paths to the paths already associated with the prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function addPsr0($nsPrefix, $paths, $prepend = false)
     {
@@ -54,11 +44,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Creates new PSR-0 mappings from the given prefix to the given set of paths, eliminating previous mappings
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-0 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function setPsr0($nsPrefix, $paths)
     {
@@ -66,11 +52,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Creates new PSR-4 mappings from the given prefix to the given set of paths, eliminating previous mappings
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-0 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function setPsr4($nsPrefix, $paths)
     {
@@ -78,13 +60,28 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Attempts to load a class and returns true if successful.
-     *
-     * @param string $className
-     * @return bool
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     public function loadClass($className)
     {
         return $this->autoloader->loadClass($className) === true;
     }
+
+    /**
+     * {@inheritdoc}
+     * @codeCoverageIgnore
+     */
+    public function findFile($className)
+    {
+        /**
+         * Composer remembers that files don't exist even after they are generated. This clears the entry for
+         * $className so we can check the filesystem again for class existence.
+         */
+        if ($className[0] === '\\') {
+            $className = substr($className, 1);
+        }
+        $this->autoloader->addClassMap([$className => null]);
+        return $this->autoloader->findFile($className);
+    }
 }
diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index da6d60b14ed..2fdcd37ea11 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -74,31 +74,28 @@ class Generator
      */
     public function generateClass($className)
     {
-        // check if source class a generated entity
-        $entity = null;
-        $entityName = null;
+        $resultEntityType = null;
+        $sourceClassName = null;
         foreach ($this->_generatedEntities as $entityType => $generatorClass) {
             $entitySuffix = ucfirst($entityType);
-            // if $className string ends on $entitySuffix substring
+            // If $className string ends with $entitySuffix substring
             if (strrpos($className, $entitySuffix) === strlen($className) - strlen($entitySuffix)) {
-                $entity = $entityType;
-                $entityName = rtrim(
+                $resultEntityType = $entityType;
+                $sourceClassName = rtrim(
                     substr($className, 0, -1 * strlen($entitySuffix)),
                     '\\'
                 );
                 break;
             }
         }
-        if (!$entity || !$entityName) {
-            return self::GENERATION_ERROR;
-        } else if ($this->definedClasses->classLoadable($className)) {
-            return self::GENERATION_SKIP;
-        } else if (!isset($this->_generatedEntities[$entity])) {
-            throw new \InvalidArgumentException('Unknown generation entity.');
+
+        if ($skipReason = $this->validate($resultEntityType, $sourceClassName, $className)) {
+            return $skipReason;
         }
-        $generatorClass = $this->_generatedEntities[$entity];
+
+        $generatorClass = $this->_generatedEntities[$resultEntityType];
         /** @var EntityAbstract $generator */
-        $generator = $this->createGeneratorInstance($generatorClass, $entityName, $className);
+        $generator = $this->createGeneratorInstance($generatorClass, $sourceClassName, $className);
         if ($generator !== null) {
             $this->tryToLoadSourceClass($className, $generator);
             if (!($file = $generator->generate())) {
@@ -107,18 +104,22 @@ class Generator
                     new \Magento\Framework\Phrase(implode(' ', $errors))
                 );
             }
-            $this->includeFile($file);
+            $this->tryToIncludeFile($file, $className);
             return self::GENERATION_SUCCESS;
         }
     }
 
     /**
+     * Include file only if the class is not already defined in memory
+     *
      * @param string $fileName
      * @return void
      */
-    public function includeFile($fileName)
+    public function tryToIncludeFile($fileName, $className)
     {
-        include $fileName;
+        if (!$this->definedClasses->isClassLoadableFromMemory($className)) {
+            include $fileName;
+        }
     }
 
     /**
@@ -176,7 +177,7 @@ class Generator
     protected function tryToLoadSourceClass($className, $generator)
     {
         $sourceClassName = $generator->getSourceClassName();
-        if (!$this->definedClasses->classLoadable($sourceClassName)) {
+        if (!$this->definedClasses->isClassLoadableFromDisc($sourceClassName)) {
             if ($this->generateClass($sourceClassName) !== self::GENERATION_SUCCESS) {
                 throw new \Magento\Framework\Exception\LocalizedException(
                     new \Magento\Framework\Phrase(
@@ -187,4 +188,24 @@ class Generator
             }
         }
     }
+
+    /**
+     * Perform validation surrounding source and result classes and entity type
+     *
+     * @param string $resultEntityType
+     * @param string $sourceClassName
+     * @param string $resultClass
+     * @return string|bool
+     */
+    protected function validate($resultEntityType, $sourceClassName, $resultClass)
+    {
+        if (!$resultEntityType || !$sourceClassName) {
+            return self::GENERATION_ERROR;
+        } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
+            return self::GENERATION_SKIP;
+        } else if (!isset($this->_generatedEntities[$resultEntityType])) {
+            throw new \InvalidArgumentException('Unknown generation entity.');
+        }
+        return false;
+    }
 }
diff --git a/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php b/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php
index 20621b72ee3..d0babb79f2f 100644
--- a/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php
+++ b/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php
@@ -14,40 +14,37 @@ use Magento\Framework\Autoload\AutoloaderRegistry;
 class DefinedClasses
 {
     /**
-     * Determine if a class can be loaded without using the Code\Generator\Autoloader.
+     * Determine if a class can be loaded without using Code\Generator\Autoloader.
      *
      * @param string $className
      * @return bool
      */
-    public function classLoadable($className)
+    public function isClassLoadable($className)
     {
-        if ($this->isAlreadyDefined($className)) {
-            return true;
-        }
-        return $this->performAutoload($className);
+        return $this->isClassLoadableFromMemory($className) || $this->isClassLoadableFromDisc($className);
     }
 
     /**
-     * Checks whether class is already defined
+     * Determine if a class exists in memory
      *
      * @param string $className
      * @return bool
      */
-    protected function isAlreadyDefined($className)
+    public function isClassLoadableFromMemory($className)
     {
         return class_exists($className, false) || interface_exists($className, false);
     }
 
     /**
-     * Performs autoload for given class name
+     * Determine if a class exists on disc
      *
      * @param string $className
      * @return bool
      */
-    protected function performAutoload($className)
+    public function isClassLoadableFromDisc($className)
     {
         try {
-            return AutoloaderRegistry::getAutoloader()->loadClass($className);
+            return (bool)AutoloaderRegistry::getAutoloader()->findFile($className);
         } catch (\Exception $e) {
             // Couldn't get access to the autoloader so we need to allow class_exists to call autoloader chain
             return (class_exists($className) || interface_exists($className));
diff --git a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
index 82c7a210c0f..fee367f49ca 100644
--- a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
+++ b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
@@ -249,10 +249,10 @@ abstract class EntityAbstract
         $resultClassName = $this->_getResultClassName();
         $resultDir = $this->_ioObject->getResultFileDirectory($resultClassName);
 
-        if (!$this->definedClasses->classLoadable($sourceClassName)) {
+        if (!$this->definedClasses->isClassLoadable($sourceClassName)) {
             $this->_addError('Source class ' . $sourceClassName . ' doesn\'t exist.');
             return false;
-        } elseif ($this->definedClasses->classLoadable($resultClassName)) {
+        } elseif ($this->definedClasses->isClassLoadableFromDisc($resultClassName)) {
             $this->_addError('Result class ' . $resultClassName . ' already exists.');
             return false;
         } elseif (
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php
new file mode 100644
index 00000000000..e0f13bab0b3
--- /dev/null
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php
@@ -0,0 +1,74 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+// @codingStandardsIgnoreStart
+namespace Magento\Framework\Code\Generator {
+    use Magento\Framework\Code\Test\Unit\Generator\DefinedClassesTest;
+
+    function class_exists($className)
+    {
+        return DefinedClassesTest::$definedClassesTestActive
+            ? $className === DefinedClassesTest::$classInMemory
+            : \class_exists($className);
+    }
+}
+
+namespace Magento\Framework\Code\Test\Unit\Generator {
+    use Magento\Framework\Autoload\AutoloaderInterface;
+    use Magento\Framework\Autoload\AutoloaderRegistry;
+    use Magento\Framework\Code\Generator\DefinedClasses;
+
+    // @codingStandardsIgnoreEnd
+
+    class DefinedClassesTest extends \PHPUnit_Framework_TestCase
+    {
+        /** @var bool  */
+        public static $definedClassesTestActive = false;
+
+        public static $classInMemory = 'Class\That\Exists\In\Memory';
+
+        /** @var  DefinedClasses */
+        private $model;
+
+        /** @var  AutoloaderInterface */
+        private $initAutoloader;
+
+        public function setUp()
+        {
+            $this->model = new DefinedClasses();
+            self::$definedClassesTestActive = true;
+            $this->initAutoloader = AutoloaderRegistry::getAutoloader();
+        }
+
+        public function tearDown()
+        {
+            self::$definedClassesTestActive = false;
+            AutoloaderRegistry::registerAutoloader($this->initAutoloader);
+        }
+
+        public function testClassLoadableFromMemory()
+        {
+            $this->assertTrue($this->model->isClassLoadable(self::$classInMemory));
+        }
+
+        public function testClassLoadableFromDisc()
+        {
+            $classOnDisc = 'Class\That\Exists\On\Disc';
+            /**
+             * @var AutoloaderInterface | \PHPUnit_Framework_MockObject_MockObject $autoloaderMock
+             */
+            $autoloaderMock = $this->getMock('\Magento\Framework\Autoload\AutoloaderInterface');
+            $autoloaderMock->expects($this->once())->method('findFile')->with($classOnDisc)->willReturn(true);
+            AutoloaderRegistry::registerAutoloader($autoloaderMock);
+            $this->assertTrue($this->model->isClassLoadable($classOnDisc));
+        }
+
+        public function testClassNotLoadable()
+        {
+            $this->assertFalse($this->model->isClassLoadable('Class\Does\Not\Exist'));
+        }
+    }
+}
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index 8ed735e0af5..cf74e8a67f1 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -225,13 +225,13 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     ) {
         // Configure DefinedClasses mock
         $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses');
-        $definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+        $definedClassesMock->expects($this->once())
+            ->method('isClassLoadable')
             ->with(self::SOURCE_CLASS)
             ->willReturn($sourceClassExists);
         if ($resultClassExists) {
-            $definedClassesMock->expects($this->at(1))
-                ->method('classLoadable')
+            $definedClassesMock->expects($this->once())
+                ->method('isClassLoadableFromDisc')
                 ->with(self::RESULT_CLASS)
                 ->willReturn($resultClassExists);
         }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index e01f4c529c8..88a043753da 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -75,7 +75,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         );
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
         $fullClassName = $className . $entityType;
-        $entityGeneratorMock = $this->getMockBuilder($fullClassName)->disableOriginalConstructor()->getMock();
+        $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract')
+            ->disableOriginalConstructor()
+            ->getMock();
         $objectManagerMock->expects($this->once())->method('create')->willReturn($entityGeneratorMock);
         $this->model->setObjectManager($objectManagerMock);
         $this->model->generateClass($fullClassName);
@@ -88,7 +90,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     {
         $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses');
         $definedClassesMock->expects($this->any())
-            ->method('classLoadable')
+            ->method('isClassLoadableFromDisc')
             ->willReturn(true);
         $this->model = new \Magento\Framework\Code\Generator(
             $this->ioObjectMock,
@@ -133,7 +135,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $expectedEntities = array_values($this->expectedEntities);
         $resultClassName = self::SOURCE_CLASS . ucfirst(array_shift($expectedEntities));
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
-        $entityGeneratorMock = $this->getMockBuilder($resultClassName)->disableOriginalConstructor()->getMock();
+        $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract')
+            ->disableOriginalConstructor()
+            ->getMock();
         $objectManagerMock->expects($this->once())->method('create')->willReturn($entityGeneratorMock);
         $this->model->setObjectManager($objectManagerMock);
         $this->model->generateClass($resultClassName);
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
index c03b20e274c..10bafa24672 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
@@ -77,7 +77,7 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
 
         //Mocking _validateData call
         $this->definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+            ->method('isClassLoadable')
             ->will($this->returnValue(true));
 
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php
index 08c9586b45d..1be208085ab 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php
@@ -41,7 +41,7 @@ class RepositoryTest extends EntityChildTestAbstract
     protected function mockDefinedClassesCall()
     {
         $this->definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+            ->method('isClassLoadable')
             ->with($this->getSourceClassName() . 'Interface')
             ->willReturn(true);
     }
-- 
GitLab


From 00de00fb3026b7b4676aa98999e43b37c625fa28 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Tue, 29 Sep 2015 17:41:21 -0500
Subject: [PATCH 159/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

---
 lib/internal/Magento/Framework/Code/Generator.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 2fdcd37ea11..ae9688d2b48 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -113,6 +113,7 @@ class Generator
      * Include file only if the class is not already defined in memory
      *
      * @param string $fileName
+     * @param $className
      * @return void
      */
     public function tryToIncludeFile($fileName, $className)
-- 
GitLab


From a1256d73bdf921f2df582f1172d88ae51941e659 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 09:51:48 +0300
Subject: [PATCH 160/420] MAGETWO-42995: Stabilize functional tests

---
 .../catalog/product/composite/configure.js    | 1244 +++++----
 .../adminhtml/web/order/create/scripts.js     | 2467 ++++++++---------
 2 files changed, 1859 insertions(+), 1852 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
index 1461078d6b6..633664aefe4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
@@ -6,627 +6,651 @@ define([
     "jquery",
     "jquery/ui",
     "mage/translate",
-    "prototype",
-    'Magento_Ui/js/modal/modal'
+    "prototype"
 ], function(jQuery){
 
-window.ProductConfigure = Class.create();
-
-ProductConfigure.prototype = {
-
-    listTypes:                  $H({}),
-    current:                    $H({}),
-    itemsFilter:                $H({}),
-    blockWindow:                null,
-    blockForm:                  null,
-    blockFormFields:            null,
-    blockFormAdd:               null,
-    blockFormConfirmed:         null,
-    blockConfirmed:             null,
-    blockIFrame:                null,
-    blockCancelBtn:             null,
-    blockMask:                  null,
-    blockMsg:                   null,
-    blockMsgError:              null,
-    windowHeight:               null,
-    confirmedCurrentId:         null,
-    confirmCallback:            {},
-    cancelCallback:             {},
-    onLoadIFrameCallback:       {},
-    showWindowCallback:         {},
-    beforeSubmitCallback:       {},
-    iFrameJSVarname:            null,
-    _listTypeId:                1,
-
-    /**
-     * Initialize object
-     */
-    initialize: function() {
-        var self = this;
-
-        this.dialog = jQuery('#product_composite_configure').modal({
-            title: jQuery.mage.__('Configure Product'),
-            type: 'slide',
-            buttons: [{
-                text: jQuery.mage.__('OK'),
-                'class': 'action-primary',
-                click: function () {
-                    self.onConfirmBtn();
-                }
-            }]
-        });
-        this._initWindowElements();
-    },
-
-    /**
-     * Initialize window elements
-     */
-    _initWindowElements: function() {
-        this.blockWindow                = $('product_composite_configure');
-        this.blockForm                  = $('product_composite_configure_form');
-        this.blockFormFields            = $('product_composite_configure_form_fields');
-        this.blockFormAdd               = $('product_composite_configure_form_additional');
-        this.blockFormConfirmed         = $('product_composite_configure_form_confirmed');
-        this.blockConfirmed             = $('product_composite_configure_confirmed');
-        this.blockIFrame                = $('product_composite_configure_iframe');
-        this.blockCancelBtn             = $('product_composite_configure_form_cancel');
-        this.blockMsg                   = $('product_composite_configure_messages');
-        this.blockMsgError              = this.blockMsg.select('.message.error div')[0];
-        this.iFrameJSVarname            = this.blockForm.select('input[name="as_js_varname"]')[0].value;
-    },
-
-    /**
-    * Returns next unique list type id
-    */
-    _generateListTypeId: function () {
-        return '_internal_lt_' + (this._listTypeId++);
-    },
-
-    /**
-     * Add product list types as scope and their urls
-     * expamle: addListType('product_to_add', {urlFetch: 'http://magento...'})
-     * expamle: addListType('wishlist', {urlSubmit: 'http://magento...'})
-     *
-     * @param type types as scope
-     * @param urls obj can be
-     *             - {urlFetch: 'http://magento...'} for fetching configuration fields through ajax
-     *             - {urlConfirm: 'http://magento...'} for submit configured data through iFrame when clicked confirm button
-     *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
-     */
-    addListType: function(type, urls) {
-        if ('undefined' == typeof this.listTypes[type]) {
+    window.ProductConfigure = Class.create();
+
+    ProductConfigure.prototype = {
+
+        listTypes:                  $H({}),
+        current:                    $H({}),
+        itemsFilter:                $H({}),
+        blockWindow:                null,
+        blockForm:                  null,
+        blockFormFields:            null,
+        blockFormAdd:               null,
+        blockFormConfirmed:         null,
+        blockConfirmed:             null,
+        blockIFrame:                null,
+        blockCancelBtn:             null,
+        blockMask:                  null,
+        blockMsg:                   null,
+        blockMsgError:              null,
+        windowHeight:               null,
+        confirmedCurrentId:         null,
+        confirmCallback:            {},
+        cancelCallback:             {},
+        onLoadIFrameCallback:       {},
+        showWindowCallback:         {},
+        beforeSubmitCallback:       {},
+        iFrameJSVarname:            null,
+        _listTypeId:                1,
+
+        /**
+         * Initialize object
+         */
+        initialize: function() {
+            this._initWindowElements();
+            var self = this;
+            this.dialog = jQuery('#product_composite_configure').dialog({
+                autoOpen: false,
+                title: jQuery.mage.__('Configure Product'),
+                modal: true,
+                minWidth: 500,
+                width: '75%',
+                dialogClass: 'popup-window',
+                position: {
+                    my: 'left top',
+                    at: 'center top',
+                    of: 'body'
+                },
+                open: function () {
+                    jQuery(this).addClass('magento_message').css('max-height', '500px');
+                    jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
+
+                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
+                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
+                },
+                close: function() {
+                    jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+                },
+                buttons: [{
+                    text: jQuery.mage.__('OK'),
+                    'class': 'action-primary',
+                    click: function() {
+                        self.onConfirmBtn();
+                    }
+                }, {
+                    id: "product_composite_configure_form_cancel",
+                    text: "Cancel",
+                    'class': 'action-close',
+                    click: function() {
+                        jQuery(this).dialog("close");
+                    }
+                }]
+            });
+        },
+
+        /**
+         * Initialize window elements
+         */
+        _initWindowElements: function() {
+            this.blockWindow                = $('product_composite_configure');
+            this.blockForm                  = $('product_composite_configure_form');
+            this.blockFormFields            = $('product_composite_configure_form_fields');
+            this.blockFormAdd               = $('product_composite_configure_form_additional');
+            this.blockFormConfirmed         = $('product_composite_configure_form_confirmed');
+            this.blockConfirmed             = $('product_composite_configure_confirmed');
+            this.blockIFrame                = $('product_composite_configure_iframe');
+            this.blockCancelBtn             = $('product_composite_configure_form_cancel');
+            this.blockMsg                   = $('product_composite_configure_messages');
+            this.blockMsgError              = this.blockMsg.select('.message.error div')[0];
+            this.iFrameJSVarname            = this.blockForm.select('input[name="as_js_varname"]')[0].value;
+        },
+
+        /**
+         * Returns next unique list type id
+         */
+        _generateListTypeId: function () {
+            return '_internal_lt_' + (this._listTypeId++);
+        },
+
+        /**
+         * Add product list types as scope and their urls
+         * expamle: addListType('product_to_add', {urlFetch: 'http://magento...'})
+         * expamle: addListType('wishlist', {urlSubmit: 'http://magento...'})
+         *
+         * @param type types as scope
+         * @param urls obj can be
+         *             - {urlFetch: 'http://magento...'} for fetching configuration fields through ajax
+         *             - {urlConfirm: 'http://magento...'} for submit configured data through iFrame when clicked confirm button
+         *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
+         */
+        addListType: function(type, urls) {
+            if ('undefined' == typeof this.listTypes[type]) {
+                this.listTypes[type] = {};
+            }
+            Object.extend(this.listTypes[type], urls);
+            return this;
+        },
+
+        /**
+         * Adds complex list type - that is used to submit several list types at once
+         * Only urlSubmit is possible for this list type
+         * expamle: addComplexListType(['wishlist', 'product_list'], 'http://magento...')
+         *
+         * @param type types as scope
+         * @param urls obj can be
+         *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
+         * @return type string
+         */
+        addComplexListType: function(types, urlSubmit) {
+            var type = this._generateListTypeId();
             this.listTypes[type] = {};
-        }
-        Object.extend(this.listTypes[type], urls);
-        return this;
-    },
-
-    /**
-    * Adds complex list type - that is used to submit several list types at once
-    * Only urlSubmit is possible for this list type
-    * expamle: addComplexListType(['wishlist', 'product_list'], 'http://magento...')
-    *
-    * @param type types as scope
-    * @param urls obj can be
-    *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
-    * @return type string
-    */
-   addComplexListType: function(types, urlSubmit) {
-       var type = this._generateListTypeId();
-       this.listTypes[type] = {};
-       this.listTypes[type].complexTypes = types;
-       this.listTypes[type].urlSubmit = urlSubmit;
-       return type;
-   },
-
-    /**
-     * Add filter of items
-     *
-     * @param listType scope name
-     * @param itemsFilter
-     */
-    addItemsFilter: function(listType, itemsFilter) {
-        if (!listType || !itemsFilter) {
-            return false;
-        }
-        if ('undefined' == typeof this.itemsFilter[listType]) {
-            this.itemsFilter[listType] = [];
-        }
-        this.itemsFilter[listType] = this.itemsFilter[listType].concat(itemsFilter);
-        return this;
-    },
-
-    /**
-    * Returns id of block where configuration for an item is stored
-    *
-    * @param listType scope name
-    * @param itemId
-    * @return string
-    */
-    _getConfirmedBlockId: function (listType, itemId) {
-        return this.blockConfirmed.id + '[' + listType + '][' + itemId + ']';
-    },
-
-    /**
-    * Checks whether item has some configuration fields
-    *
-    * @param listType scope name
-    * @param itemId
-    * @return bool
-    */
-    itemConfigured: function (listType, itemId) {
-        var confirmedBlockId = this._getConfirmedBlockId(listType, itemId);
-        var itemBlock = $(confirmedBlockId);
-        return !!(itemBlock && itemBlock.innerHTML);
-    },
-
-    /**
-     * Show configuration fields of item, if it not found then get it through ajax
-     *
-     * @param listType scope name
-     * @param itemId
-     */
-    showItemConfiguration: function(listType, itemId) {
-        if (!listType || !itemId) {
-            return false;
-        }
+            this.listTypes[type].complexTypes = types;
+            this.listTypes[type].urlSubmit = urlSubmit;
+            return type;
+        },
 
-        this.initialize();
-        this.current.listType = listType;
-        this.current.itemId = itemId;
-        this.confirmedCurrentId = this._getConfirmedBlockId(listType, itemId);
+        /**
+         * Add filter of items
+         *
+         * @param listType scope name
+         * @param itemsFilter
+         */
+        addItemsFilter: function(listType, itemsFilter) {
+            if (!listType || !itemsFilter) {
+                return false;
+            }
+            if ('undefined' == typeof this.itemsFilter[listType]) {
+                this.itemsFilter[listType] = [];
+            }
+            this.itemsFilter[listType] = this.itemsFilter[listType].concat(itemsFilter);
+            return this;
+        },
 
-        if (!this.itemConfigured(listType, itemId)) {
-            this._requestItemConfiguration(listType, itemId);
-        } else {
-            this._processFieldsData('item_restore');
-            this._showWindow();
-        }
-    },
-
-    /**
-     * Get configuration fields of product through ajax and show them
-     *
-     * @param listType scope name
-     * @param itemId
-     */
-    _requestItemConfiguration: function(listType, itemId) {
-        if (!this.listTypes[listType].urlFetch) {
-            return false;
-        }
-        var url = this.listTypes[listType].urlFetch;
-        if (url) {
-            new Ajax.Request(url, {
-                parameters: {id: itemId},
-                onSuccess: function(transport) {
-                    var response = transport.responseText;
-                    if (response.isJSON()) {
-                        response = response.evalJSON();
-                        if (response.error) {
-                            this.blockMsg.show();
-                            this.blockMsgError.innerHTML = response.message;
-                            this.blockCancelBtn.hide();
-                            this.setConfirmCallback(listType, null);
-                            this._showWindow();
-                        }
-                    } else if (response) {
-                        response = response + '';
-                        this.blockFormFields.update(response);
+        /**
+         * Returns id of block where configuration for an item is stored
+         *
+         * @param listType scope name
+         * @param itemId
+         * @return string
+         */
+        _getConfirmedBlockId: function (listType, itemId) {
+            return this.blockConfirmed.id + '[' + listType + '][' + itemId + ']';
+        },
 
-                        // Add special div to hold mage data, e.g. scripts to execute on every popup show
-                        var mageData = {};
-                        var scripts = response.extractScripts();
-                        mageData.scripts = scripts;
+        /**
+         * Checks whether item has some configuration fields
+         *
+         * @param listType scope name
+         * @param itemId
+         * @return bool
+         */
+        itemConfigured: function (listType, itemId) {
+            var confirmedBlockId = this._getConfirmedBlockId(listType, itemId);
+            var itemBlock = $(confirmedBlockId);
+            return !!(itemBlock && itemBlock.innerHTML);
+        },
 
-                        var scriptHolder = new Element('div', {'style': 'display:none'});
-                        scriptHolder.mageData = mageData;
-                        this.blockFormFields.insert(scriptHolder);
+        /**
+         * Show configuration fields of item, if it not found then get it through ajax
+         *
+         * @param listType scope name
+         * @param itemId
+         */
+        showItemConfiguration: function(listType, itemId) {
+            if (!listType || !itemId) {
+                return false;
+            }
 
-                        // Show window
-                        this._showWindow();
-                    }
-                }.bind(this)
-            });
-        }
-    },
-
-    /**
-     * Triggered on confirm button click
-     * Do submit configured data through iFrame if needed
-     */
-    onConfirmBtn: function() {
-        if (jQuery(this.blockForm).valid()) {
-            if (this.listTypes[this.current.listType].urlConfirm) {
-                this.submit();
+            this.initialize();
+            this.current.listType = listType;
+            this.current.itemId = itemId;
+            this.confirmedCurrentId = this._getConfirmedBlockId(listType, itemId);
+
+            if (!this.itemConfigured(listType, itemId)) {
+                this._requestItemConfiguration(listType, itemId);
             } else {
-                this._processFieldsData('item_confirm');
-                this._closeWindow();
-                if (Object.isFunction(this.confirmCallback[this.current.listType])) {
-                    this.confirmCallback[this.current.listType]();
-                }
+                this._processFieldsData('item_restore');
+                this._showWindow();
             }
-        }
-        return this;
-    },
-
-    /**
-     * Triggered on cancel button click
-     */
-    onCancelBtn: function() {
-        this._closeWindow();
-        if (Object.isFunction(this.cancelCallback[this.current.listType])) {
-            this.cancelCallback[this.current.listType]();
-        }
-        return this;
-    },
-
-    /**
-     * Submit configured data through iFrame
-     *
-     * @param listType scope name
-     */
-    submit: function (listType) {
-        // prepare data
-        if (listType) {
-            this.current.listType = listType;
-            this.current.itemId = null;
-        }
-        var urlConfirm = this.listTypes[this.current.listType].urlConfirm;
-        var urlSubmit = this.listTypes[this.current.listType].urlSubmit;
-        if (!urlConfirm && !urlSubmit) {
-            return false;
-        }
-        if (urlConfirm) {
-            this.blockForm.action = urlConfirm;
-            this.addFields([new Element('input', {type: 'hidden', name: 'id', value: this.current.itemId})]);
-        } else {
-            this.blockForm.action = urlSubmit;
-
-            var complexTypes = this.listTypes[this.current.listType].complexTypes;
-            if (complexTypes) {
-                this.addFields([new Element('input', {type: 'hidden', name: 'configure_complex_list_types', value: complexTypes.join(',')})]);
+        },
+
+        /**
+         * Get configuration fields of product through ajax and show them
+         *
+         * @param listType scope name
+         * @param itemId
+         */
+        _requestItemConfiguration: function(listType, itemId) {
+            if (!this.listTypes[listType].urlFetch) {
+                return false;
             }
+            var url = this.listTypes[listType].urlFetch;
+            if (url) {
+                new Ajax.Request(url, {
+                    parameters: {id: itemId},
+                    onSuccess: function(transport) {
+                        var response = transport.responseText;
+                        if (response.isJSON()) {
+                            response = response.evalJSON();
+                            if (response.error) {
+                                this.blockMsg.show();
+                                this.blockMsgError.innerHTML = response.message;
+                                this.blockCancelBtn.hide();
+                                this.setConfirmCallback(listType, null);
+                                this._showWindow();
+                            }
+                        } else if (response) {
+                            response = response + '';
+                            this.blockFormFields.update(response);
 
-            this._processFieldsData('current_confirmed_to_form');
+                            // Add special div to hold mage data, e.g. scripts to execute on every popup show
+                            var mageData = {};
+                            var scripts = response.extractScripts();
+                            mageData.scripts = scripts;
 
-            // Disable item controls that duplicate added fields (e.g. sometimes qty controls can intersect)
-            // so they won't be submitted
-            var tagNames = ['input', 'select', 'textarea'];
+                            var scriptHolder = new Element('div', {'style': 'display:none'});
+                            scriptHolder.mageData = mageData;
+                            this.blockFormFields.insert(scriptHolder);
 
-            var names = {}; // Map of added field names
-            for (var i = 0, len = tagNames.length; i < len; i++) {
-                var tagName = tagNames[i];
-                var elements = this.blockFormAdd.getElementsByTagName(tagName);
-                for (var index = 0, elLen = elements.length; index < elLen; index++) {
-                    names[elements[index].name] = true;
-                }
+                            // Show window
+                            this._showWindow();
+                        }
+                    }.bind(this)
+                });
             }
+        },
 
-            for (var i = 0, len = tagNames.length; i < len; i++) {
-                var tagName = tagNames[i];
-                var elements = this.blockFormConfirmed.getElementsByTagName(tagName);
-                for (var index = 0, elLen = elements.length; index < elLen; index++) {
-                    var element = elements[index];
-                    if (names[element.name]) {
-                        element.setAttribute('configure_disabled', 1);
-                        element.setAttribute('configure_prev_disabled', element.disabled ? 1 : 0);
-                        element.disabled = true;
-                    } else {
-                        element.setAttribute('configure_disabled', 0);
-                    }
-                }
-            }
-        }
-        // do submit
-        if (Object.isFunction(this.beforeSubmitCallback[this.current.listType])) {
-            this.beforeSubmitCallback[this.current.listType]();
-        }
-        this.blockForm.submit();
-
-        // Show loader
-        jQuery(this.blockForm).trigger('processStart');
-
-        return this;
-    },
-
-    /**
-     * Add dynamically additional fields for form
-     *
-     * @param fields
-     */
-    addFields: function(fields) {
-        fields.each(function(elm) {
-            this.blockFormAdd.insert(elm);
-        }.bind(this));
-        return this;
-    },
-
-    /**
-     * Triggered when form was submitted and iFrame was loaded. Get response from iFrame and handle it
-     */
-    onLoadIFrame: function() {
-        this.blockFormConfirmed.select('[configure_disabled=1]').each(function (element) {
-            element.disabled = element.getAttribute('configure_prev_disabled') == '1';
-        });
-
-        this._processFieldsData('form_confirmed_to_confirmed');
-
-        var response = this.blockIFrame.contentWindow[this.iFrameJSVarname];
-        if (response && "object" == typeof response) {
-            if (this.listTypes[this.current.listType].urlConfirm) {
-                if (response.ok) {
+        /**
+         * Triggered on confirm button click
+         * Do submit configured data through iFrame if needed
+         */
+        onConfirmBtn: function() {
+            if (jQuery(this.blockForm).valid()) {
+                if (this.listTypes[this.current.listType].urlConfirm) {
+                    this.submit();
+                } else {
+                    this._processFieldsData('item_confirm');
                     this._closeWindow();
-                    this.clean('current');
-                } else if (response.error) {
-                    this.showItemConfiguration(this.current.listType, this.current.itemId);
-                    this.blockMsg.show();
-                    this.blockMsgError.innerHTML = response.message;
-                    this._showWindow();
-                    return false;
+                    if (Object.isFunction(this.confirmCallback[this.current.listType])) {
+                        this.confirmCallback[this.current.listType]();
+                    }
                 }
             }
-            if (Object.isFunction(this.onLoadIFrameCallback[this.current.listType])) {
-                this.onLoadIFrameCallback[this.current.listType](response);
+            return this;
+        },
+
+        /**
+         * Triggered on cancel button click
+         */
+        onCancelBtn: function() {
+            this._closeWindow();
+            if (Object.isFunction(this.cancelCallback[this.current.listType])) {
+                this.cancelCallback[this.current.listType]();
             }
-            document.fire(this.current.listType + ':afterIFrameLoaded');
-        }
-        // Hide loader
-        jQuery(this.blockForm).trigger('processStop');
-
-        this.clean('current');
-        this.initialize();
-    },
-
-    /**
-     * Helper for fetching content from iFrame
-     */
-    _getIFrameContent: function() {
-        var content = (this.blockIFrame.contentWindow || this.blockIFrame.contentDocument);
-        if (content.document) {
-            content=content.document;
-        }
-        return content;
-    },
-
-    /**
-     * Helper to find qty of currently confirmed item
-     */
-    getCurrentConfirmedQtyElement: function() {
-        var elms = $(this.confirmedCurrentId).getElementsByTagName('input');
-        for (var i = 0; i < elms.length; i++) {
-            if (elms[i].name == 'qty') {
-                return elms[i];
+            return this;
+        },
+
+        /**
+         * Submit configured data through iFrame
+         *
+         * @param listType scope name
+         */
+        submit: function (listType) {
+            // prepare data
+            if (listType) {
+                this.current.listType = listType;
+                this.current.itemId = null;
             }
-        }
-    },
-
-    /**
-     * Helper to find qty of active form
-     */
-    getCurrentFormQtyElement: function() {
-        var elms = this.blockFormFields.getElementsByTagName('input');
-        for (var i = 0; i < elms.length; i++) {
-            if (elms[i].name == 'qty') {
-                return elms[i];
+            var urlConfirm = this.listTypes[this.current.listType].urlConfirm;
+            var urlSubmit = this.listTypes[this.current.listType].urlSubmit;
+            if (!urlConfirm && !urlSubmit) {
+                return false;
             }
-        }
-    },
+            if (urlConfirm) {
+                this.blockForm.action = urlConfirm;
+                this.addFields([new Element('input', {type: 'hidden', name: 'id', value: this.current.itemId})]);
+            } else {
+                this.blockForm.action = urlSubmit;
 
-    /**
-     * Show configuration window
-     */
-    _showWindow: function() {
-        this.dialog.modal('openModal');
-        //this._toggleSelectsExceptBlock(false);
+                var complexTypes = this.listTypes[this.current.listType].complexTypes;
+                if (complexTypes) {
+                    this.addFields([new Element('input', {type: 'hidden', name: 'configure_complex_list_types', value: complexTypes.join(',')})]);
+                }
 
-        if (Object.isFunction(this.showWindowCallback[this.current.listType])) {
-            this.showWindowCallback[this.current.listType]();
-        }
-    },
-
-    /**
-     * toggles Selects states (for IE) except those to be shown in popup
-     */
-    /*_toggleSelectsExceptBlock: function(flag) {
-        if(Prototype.Browser.IE){
-            if (this.blockForm) {
-                var states = new Array;
-                var selects = this.blockForm.getElementsByTagName("select");
-                for(var i=0; i<selects.length; i++){
-                    states[i] = selects[i].style.visibility
+                this._processFieldsData('current_confirmed_to_form');
+
+                // Disable item controls that duplicate added fields (e.g. sometimes qty controls can intersect)
+                // so they won't be submitted
+                var tagNames = ['input', 'select', 'textarea'];
+
+                var names = {}; // Map of added field names
+                for (var i = 0, len = tagNames.length; i < len; i++) {
+                    var tagName = tagNames[i];
+                    var elements = this.blockFormAdd.getElementsByTagName(tagName);
+                    for (var index = 0, elLen = elements.length; index < elLen; index++) {
+                        names[elements[index].name] = true;
+                    }
                 }
+
+                for (var i = 0, len = tagNames.length; i < len; i++) {
+                    var tagName = tagNames[i];
+                    var elements = this.blockFormConfirmed.getElementsByTagName(tagName);
+                    for (var index = 0, elLen = elements.length; index < elLen; index++) {
+                        var element = elements[index];
+                        if (names[element.name]) {
+                            element.setAttribute('configure_disabled', 1);
+                            element.setAttribute('configure_prev_disabled', element.disabled ? 1 : 0);
+                            element.disabled = true;
+                        } else {
+                            element.setAttribute('configure_disabled', 0);
+                        }
+                    }
+                }
+            }
+            // do submit
+            if (Object.isFunction(this.beforeSubmitCallback[this.current.listType])) {
+                this.beforeSubmitCallback[this.current.listType]();
             }
-            if (this.blockForm) {
-                for(i=0; i<selects.length; i++){
-                    selects[i].style.visibility = states[i]
+            this.blockForm.submit();
+
+            // Show loader
+            jQuery(this.blockForm).trigger('processStart');
+
+            return this;
+        },
+
+        /**
+         * Add dynamically additional fields for form
+         *
+         * @param fields
+         */
+        addFields: function(fields) {
+            fields.each(function(elm) {
+                this.blockFormAdd.insert(elm);
+            }.bind(this));
+            return this;
+        },
+
+        /**
+         * Triggered when form was submitted and iFrame was loaded. Get response from iFrame and handle it
+         */
+        onLoadIFrame: function() {
+            this.blockFormConfirmed.select('[configure_disabled=1]').each(function (element) {
+                element.disabled = element.getAttribute('configure_prev_disabled') == '1';
+            });
+
+            this._processFieldsData('form_confirmed_to_confirmed');
+
+            var response = this.blockIFrame.contentWindow[this.iFrameJSVarname];
+            if (response && "object" == typeof response) {
+                if (this.listTypes[this.current.listType].urlConfirm) {
+                    if (response.ok) {
+                        this._closeWindow();
+                        this.clean('current');
+                    } else if (response.error) {
+                        this.showItemConfiguration(this.current.listType, this.current.itemId);
+                        this.blockMsg.show();
+                        this.blockMsgError.innerHTML = response.message;
+                        this._showWindow();
+                        return false;
+                    }
                 }
+                if (Object.isFunction(this.onLoadIFrameCallback[this.current.listType])) {
+                    this.onLoadIFrameCallback[this.current.listType](response);
+                }
+                document.fire(this.current.listType + ':afterIFrameLoaded');
             }
-        }
-    },*/
-
-    /**
-     * Close configuration window
-     */
-    _closeWindow: function() {
-        this.dialog.modal('closeModal');
-        //this.blockWindow.style.display = 'none';
-        //this.clean('window');
-    },
-
-    /**
-     * Attach callback function triggered when confirm button was clicked
-     *
-     * @param confirmCallback
-     */
-    setConfirmCallback: function(listType, confirmCallback) {
-        this.confirmCallback[listType] = confirmCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered when cancel button was clicked
-     *
-     * @param cancelCallback
-     */
-    setCancelCallback: function(listType, cancelCallback) {
-        this.cancelCallback[listType] = cancelCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered when iFrame was loaded
-     *
-     * @param onLoadIFrameCallback
-     */
-    setOnLoadIFrameCallback: function(listType, onLoadIFrameCallback) {
-        this.onLoadIFrameCallback[listType] = onLoadIFrameCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered when iFrame was loaded
-     *
-     * @param showWindowCallback
-     */
-    setShowWindowCallback: function(listType, showWindowCallback) {
-        this.showWindowCallback[listType] = showWindowCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered before submitting form
-     *
-     * @param beforeSubmitCallback
-     */
-    setBeforeSubmitCallback: function(listType, beforeSubmitCallback) {
-        this.beforeSubmitCallback[listType] = beforeSubmitCallback;
-        return this;
-    },
-
-    /**
-     * Clean object data
-     *
-     * @param method can be 'all' or 'current'
-     */
-    clean: function(method) {
-        var listInfo = null;
-        var listTypes = null;
-        var removeConfirmed = function (listTypes) {
-            this.blockConfirmed.childElements().each(function(elm) {
-                for (var i = 0, len = listTypes.length; i < len; i++) {
-                   var pattern = this.blockConfirmed.id + '[' + listTypes[i] + ']';
-                   if (elm.id.indexOf(pattern) == 0) {
-                       elm.remove();
-                       break;
-                   }
+            // Hide loader
+            jQuery(this.blockForm).trigger('processStop');
+
+            this.clean('current');
+            this.initialize();
+        },
+
+        /**
+         * Helper for fetching content from iFrame
+         */
+        _getIFrameContent: function() {
+            var content = (this.blockIFrame.contentWindow || this.blockIFrame.contentDocument);
+            if (content.document) {
+                content=content.document;
+            }
+            return content;
+        },
+
+        /**
+         * Helper to find qty of currently confirmed item
+         */
+        getCurrentConfirmedQtyElement: function() {
+            var elms = $(this.confirmedCurrentId).getElementsByTagName('input');
+            for (var i = 0; i < elms.length; i++) {
+                if (elms[i].name == 'qty') {
+                    return elms[i];
                 }
-            }.bind(this));
-        }.bind(this);
-
-        switch (method) {
-            case 'current':
-                listInfo = this.listTypes[this.current.listType];
-                listTypes = [this.current.listType];
-                if (listInfo && listInfo.complexTypes) {
-                    listTypes = listTypes.concat(listInfo.complexTypes);
+            }
+        },
+
+        /**
+         * Helper to find qty of active form
+         */
+        getCurrentFormQtyElement: function() {
+            var elms = this.blockFormFields.getElementsByTagName('input');
+            for (var i = 0; i < elms.length; i++) {
+                if (elms[i].name == 'qty') {
+                    return elms[i];
                 }
-                removeConfirmed(listTypes);
-            break;
-            case 'window':
-                    this.blockFormFields.update();
-                    this.blockMsg.hide();
-                    this.blockMsgError.update();
-                    this.blockCancelBtn.show();
-            break;
-            default:
-                // search in list types for its cleaning
-                if (this.listTypes[method]) {
-                    listInfo = this.listTypes[method];
-                    listTypes = [method];
-                    if (listInfo.complexTypes) {
+            }
+        },
+
+        /**
+         * Show configuration window
+         */
+        _showWindow: function() {
+            this.dialog.dialog('open');
+            //this._toggleSelectsExceptBlock(false);
+
+            if (Object.isFunction(this.showWindowCallback[this.current.listType])) {
+                this.showWindowCallback[this.current.listType]();
+            }
+        },
+
+        /**
+         * toggles Selects states (for IE) except those to be shown in popup
+         */
+        /*_toggleSelectsExceptBlock: function(flag) {
+         if(Prototype.Browser.IE){
+         if (this.blockForm) {
+         var states = new Array;
+         var selects = this.blockForm.getElementsByTagName("select");
+         for(var i=0; i<selects.length; i++){
+         states[i] = selects[i].style.visibility
+         }
+         }
+         if (this.blockForm) {
+         for(i=0; i<selects.length; i++){
+         selects[i].style.visibility = states[i]
+         }
+         }
+         }
+         },*/
+
+        /**
+         * Close configuration window
+         */
+        _closeWindow: function() {
+            this.dialog.dialog('close');
+            //this.blockWindow.style.display = 'none';
+            //this.clean('window');
+        },
+
+        /**
+         * Attach callback function triggered when confirm button was clicked
+         *
+         * @param confirmCallback
+         */
+        setConfirmCallback: function(listType, confirmCallback) {
+            this.confirmCallback[listType] = confirmCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered when cancel button was clicked
+         *
+         * @param cancelCallback
+         */
+        setCancelCallback: function(listType, cancelCallback) {
+            this.cancelCallback[listType] = cancelCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered when iFrame was loaded
+         *
+         * @param onLoadIFrameCallback
+         */
+        setOnLoadIFrameCallback: function(listType, onLoadIFrameCallback) {
+            this.onLoadIFrameCallback[listType] = onLoadIFrameCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered when iFrame was loaded
+         *
+         * @param showWindowCallback
+         */
+        setShowWindowCallback: function(listType, showWindowCallback) {
+            this.showWindowCallback[listType] = showWindowCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered before submitting form
+         *
+         * @param beforeSubmitCallback
+         */
+        setBeforeSubmitCallback: function(listType, beforeSubmitCallback) {
+            this.beforeSubmitCallback[listType] = beforeSubmitCallback;
+            return this;
+        },
+
+        /**
+         * Clean object data
+         *
+         * @param method can be 'all' or 'current'
+         */
+        clean: function(method) {
+            var listInfo = null;
+            var listTypes = null;
+            var removeConfirmed = function (listTypes) {
+                this.blockConfirmed.childElements().each(function(elm) {
+                    for (var i = 0, len = listTypes.length; i < len; i++) {
+                        var pattern = this.blockConfirmed.id + '[' + listTypes[i] + ']';
+                        if (elm.id.indexOf(pattern) == 0) {
+                            elm.remove();
+                            break;
+                        }
+                    }
+                }.bind(this));
+            }.bind(this);
+
+            switch (method) {
+                case 'current':
+                    listInfo = this.listTypes[this.current.listType];
+                    listTypes = [this.current.listType];
+                    if (listInfo && listInfo.complexTypes) {
                         listTypes = listTypes.concat(listInfo.complexTypes);
                     }
                     removeConfirmed(listTypes);
-                // clean all
-                } else if (!method) {
-                    this.current = $H({});
-                    this.blockConfirmed.update();
+                    break;
+                case 'window':
                     this.blockFormFields.update();
                     this.blockMsg.hide();
                     this.blockMsgError.update();
                     this.blockCancelBtn.show();
-                }
-            break;
-        }
-        this._getIFrameContent().body.innerHTML = '';
-        this.blockIFrame.contentWindow[this.iFrameJSVarname] = {};
-        this.blockFormAdd.update();
-        this.blockFormConfirmed.update();
-        this.blockForm.action = '';
-
-        return this;
-    },
-
-    /**
-     * Process fields data: save, restore, move saved to form and back
-     *
-     * @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
-     */
-    _processFieldsData: function(method) {
+                    break;
+                default:
+                    // search in list types for its cleaning
+                    if (this.listTypes[method]) {
+                        listInfo = this.listTypes[method];
+                        listTypes = [method];
+                        if (listInfo.complexTypes) {
+                            listTypes = listTypes.concat(listInfo.complexTypes);
+                        }
+                        removeConfirmed(listTypes);
+                        // clean all
+                    } else if (!method) {
+                        this.current = $H({});
+                        this.blockConfirmed.update();
+                        this.blockFormFields.update();
+                        this.blockMsg.hide();
+                        this.blockMsgError.update();
+                        this.blockCancelBtn.show();
+                    }
+                    break;
+            }
+            this._getIFrameContent().body.innerHTML = '';
+            this.blockIFrame.contentWindow[this.iFrameJSVarname] = {};
+            this.blockFormAdd.update();
+            this.blockFormConfirmed.update();
+            this.blockForm.action = '';
+
+            return this;
+        },
 
         /**
-         * Internal function for rename fields names of some list type
-         * if listType is not specified, then it won't be added as prefix to all names
+         * Process fields data: save, restore, move saved to form and back
          *
-         * @param method can be 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
-         * @param blockItem
+         * @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
          */
-        var _renameFields = function(method, blockItem, listType) {
-            var pattern         = null;
-            var patternFlat     = null;
-            var replacement     = null;
-            var replacementFlat = null
-            var scopeArr        = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/);
-            var itemId          = scopeArr[1];
-            if (method == 'current_confirmed_to_form') {
-                pattern         = RegExp('(\\w+)(\\[?)');
-                patternFlat     = RegExp('(\\w+)');
-                replacement     = 'item[' + itemId + '][$1]$2';
-                replacementFlat = 'item_' + itemId + '_$1';
-                if (listType) {
-                    replacement = 'list[' + listType + '][item][' + itemId + '][$1]$2';
-                    replacementFlat = 'list_' + listType + '_' + replacementFlat;
-                }
-            } else if (method == 'form_confirmed_to_confirmed') {
-                var stPattern = 'item\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
-                var stPatternFlat = 'item_' + itemId + '_(\\w+)';
-                if (listType) {
-                    stPattern = 'list\\[' + listType + '\\]\\[item\\]\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
-                    stPatternFlat = 'list_' + listType + '_' + stPatternFlat;
-                }
-                pattern         = new RegExp(stPattern);
-                patternFlat     = new RegExp(stPatternFlat);
-                replacement     = '$1$2';
-                replacementFlat = '$1';
-            } else {
-                return false;
-            }
-            var rename = function (elms) {
-                for (var i = 0; i < elms.length; i++) {
-                    if (elms[i].name && elms[i].type == 'file') {
-                        elms[i].name = elms[i].name.replace(patternFlat, replacementFlat);
-                    } else if (elms[i].name) {
-                        elms[i].name = elms[i].name.replace(pattern, replacement);
+        _processFieldsData: function(method) {
+
+            /**
+             * Internal function for rename fields names of some list type
+             * if listType is not specified, then it won't be added as prefix to all names
+             *
+             * @param method can be 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
+             * @param blockItem
+             */
+            var _renameFields = function(method, blockItem, listType) {
+                var pattern         = null;
+                var patternFlat     = null;
+                var replacement     = null;
+                var replacementFlat = null
+                var scopeArr        = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/);
+                var itemId          = scopeArr[1];
+                if (method == 'current_confirmed_to_form') {
+                    pattern         = RegExp('(\\w+)(\\[?)');
+                    patternFlat     = RegExp('(\\w+)');
+                    replacement     = 'item[' + itemId + '][$1]$2';
+                    replacementFlat = 'item_' + itemId + '_$1';
+                    if (listType) {
+                        replacement = 'list[' + listType + '][item][' + itemId + '][$1]$2';
+                        replacementFlat = 'list_' + listType + '_' + replacementFlat;
+                    }
+                } else if (method == 'form_confirmed_to_confirmed') {
+                    var stPattern = 'item\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
+                    var stPatternFlat = 'item_' + itemId + '_(\\w+)';
+                    if (listType) {
+                        stPattern = 'list\\[' + listType + '\\]\\[item\\]\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
+                        stPatternFlat = 'list_' + listType + '_' + stPatternFlat;
                     }
+                    pattern         = new RegExp(stPattern);
+                    patternFlat     = new RegExp(stPatternFlat);
+                    replacement     = '$1$2';
+                    replacementFlat = '$1';
+                } else {
+                    return false;
                 }
-            };
-            rename(blockItem.getElementsByTagName('input'));
-            rename(blockItem.getElementsByTagName('select'));
-            rename(blockItem.getElementsByTagName('textarea'));
-        }.bind(this);
-
-        switch (method) {
-            case 'item_confirm':
+                var rename = function (elms) {
+                    for (var i = 0; i < elms.length; i++) {
+                        if (elms[i].name && elms[i].type == 'file') {
+                            elms[i].name = elms[i].name.replace(patternFlat, replacementFlat);
+                        } else if (elms[i].name) {
+                            elms[i].name = elms[i].name.replace(pattern, replacement);
+                        }
+                    }
+                };
+                rename(blockItem.getElementsByTagName('input'));
+                rename(blockItem.getElementsByTagName('select'));
+                rename(blockItem.getElementsByTagName('textarea'));
+            }.bind(this);
+
+            switch (method) {
+                case 'item_confirm':
                     if (!$(this.confirmedCurrentId)) {
                         this.blockConfirmed.insert(new Element('div', {id: this.confirmedCurrentId}));
                     } else {
@@ -635,8 +659,8 @@ ProductConfigure.prototype = {
                     this.blockFormFields.childElements().each(function(elm) {
                         $(this.confirmedCurrentId).insert(elm);
                     }.bind(this));
-            break;
-            case 'item_restore':
+                    break;
+                case 'item_restore':
                     this.blockFormFields.update();
 
                     // clone confirmed to form
@@ -706,14 +730,14 @@ ProductConfigure.prototype = {
                         } catch (e) {}
                         this.restorePhase = false;
                     }
-            break;
-            case 'current_confirmed_to_form':
+                    break;
+                case 'current_confirmed_to_form':
                     var allowedListTypes = {};
                     allowedListTypes[this.current.listType] = true;
                     var listInfo = this.listTypes[this.current.listType];
                     if (listInfo.complexTypes) {
                         for (var i = 0, len = listInfo.complexTypes.length; i < len; i++) {
-                           allowedListTypes[listInfo.complexTypes[i]] = true;
+                            allowedListTypes[listInfo.complexTypes[i]] = true;
                         }
                     }
 
@@ -723,13 +747,13 @@ ProductConfigure.prototype = {
                         var listType    = scopeArr[1];
                         var itemId    = scopeArr[2];
                         if (allowedListTypes[listType] && (!this.itemsFilter[listType]
-                                || this.itemsFilter[listType].indexOf(itemId) != -1)) {
+                            || this.itemsFilter[listType].indexOf(itemId) != -1)) {
                             _renameFields(method, blockItem, listInfo.complexTypes ? listType : null);
                             this.blockFormConfirmed.insert(blockItem);
                         }
                     }.bind(this));
-            break;
-            case 'form_confirmed_to_confirmed':
+                    break;
+                case 'form_confirmed_to_confirmed':
                     var listInfo = this.listTypes[this.current.listType];
                     this.blockFormConfirmed.childElements().each(function(blockItem) {
                         var scopeArr = blockItem.id.match(/.*\[(\w+)\]\[([^\]]+)\]$/);
@@ -737,32 +761,32 @@ ProductConfigure.prototype = {
                         _renameFields(method, blockItem, listInfo.complexTypes ? listType : null);
                         this.blockConfirmed.insert(blockItem);
                     }.bind(this));
-            break;
-        }
-    },
-
-    /**
-     * Check if qty selected correctly
-     *
-     * @param object element
-     * @param object event
-     */
-    changeOptionQty: function(element, event)
-    {
-        var checkQty = true;
-        if ('undefined' != typeof event) {
-            if (event.keyCode == 8 || event.keyCode == 46) {
-                checkQty = false;
+                    break;
+            }
+        },
+
+        /**
+         * Check if qty selected correctly
+         *
+         * @param object element
+         * @param object event
+         */
+        changeOptionQty: function(element, event)
+        {
+            var checkQty = true;
+            if ('undefined' != typeof event) {
+                if (event.keyCode == 8 || event.keyCode == 46) {
+                    checkQty = false;
+                }
+            }
+            if (checkQty && (Number(element.value) <= 0 || isNaN(Number(element.value)))) {
+                element.value = 1;
             }
         }
-        if (checkQty && (Number(element.value) <= 0 || isNaN(Number(element.value)))) {
-            element.value = 1;
-        }
-    }
-};
+    };
 
-jQuery(document).ready(function(){
-    productConfigure = new ProductConfigure();
-});
+    jQuery(document).ready(function(){
+        productConfigure = new ProductConfigure();
+    });
 
 });
\ No newline at end of file
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 29c5a354c4b..44dcfdfd226 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -4,1384 +4,1367 @@
  */
 define([
     "jquery",
-    'Magento_Ui/js/modal/confirm',
-    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype",
     "Magento_Catalog/catalog/product/composite/configure"
-], function(jQuery, confirm, alert){
-
-window.AdminOrder = new Class.create();
-
-AdminOrder.prototype = {
-    initialize : function(data){
-        if(!data) data = {};
-        this.loadBaseUrl    = false;
-        this.customerId     = data.customer_id ? data.customer_id : false;
-        this.storeId        = data.store_id ? data.store_id : false;
-        this.currencyId     = false;
-        this.currencySymbol = data.currency_symbol ? data.currency_symbol : '';
-        this.addresses      = data.addresses ? data.addresses : $H({});
-        this.shippingAsBilling = data.shippingAsBilling ? data.shippingAsBilling : false;
-        this.gridProducts   = $H({});
-        this.gridProductsGift = $H({});
-        this.billingAddressContainer = '';
-        this.shippingAddressContainer= '';
-        this.isShippingMethodReseted = data.shipping_method_reseted ? data.shipping_method_reseted : false;
-        this.overlayData = $H({});
-        this.giftMessageDataChanged = false;
-        this.productConfigureAddFields = {};
-        this.productPriceBase = {};
-        this.collectElementsValue = true;
-        this.isOnlyVirtualProduct = false;
-        this.excludedPaymentMethods = [];
-        this.summarizePrice = true;
-        Event.observe(window, 'load', (function(){
-            this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
-            this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
-                addControlButton: function(button){
-                    var controlButtonArea = $(this.node).select('.actions')[0];
-                    if (typeof controlButtonArea != 'undefined') {
-                        var buttons = controlButtonArea.childElements();
-                        for (var i = 0; i < buttons.length; i++) {
-                            if (buttons[i].innerHTML.include(button.label)) {
-                                return ;
+], function(jQuery){
+
+    window.AdminOrder = new Class.create();
+
+    AdminOrder.prototype = {
+        initialize : function(data){
+            if(!data) data = {};
+            this.loadBaseUrl    = false;
+            this.customerId     = data.customer_id ? data.customer_id : false;
+            this.storeId        = data.store_id ? data.store_id : false;
+            this.currencyId     = false;
+            this.currencySymbol = data.currency_symbol ? data.currency_symbol : '';
+            this.addresses      = data.addresses ? data.addresses : $H({});
+            this.shippingAsBilling = data.shippingAsBilling ? data.shippingAsBilling : false;
+            this.gridProducts   = $H({});
+            this.gridProductsGift = $H({});
+            this.billingAddressContainer = '';
+            this.shippingAddressContainer= '';
+            this.isShippingMethodReseted = data.shipping_method_reseted ? data.shipping_method_reseted : false;
+            this.overlayData = $H({});
+            this.giftMessageDataChanged = false;
+            this.productConfigureAddFields = {};
+            this.productPriceBase = {};
+            this.collectElementsValue = true;
+            this.isOnlyVirtualProduct = false;
+            this.excludedPaymentMethods = [];
+            this.summarizePrice = true;
+            Event.observe(window, 'load',  (function(){
+                this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
+                this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
+                    addControlButton: function(button){
+                        var controlButtonArea = $(this.node).select('.actions')[0];
+                        if (typeof controlButtonArea != 'undefined') {
+                            var buttons = controlButtonArea.childElements();
+                            for (var i = 0; i < buttons.length; i++) {
+                                if (buttons[i].innerHTML.include(button.label)) {
+                                    return ;
+                                }
                             }
+                            button.insertIn(controlButtonArea, 'top');
                         }
-                        button.insertIn(controlButtonArea, 'top');
                     }
-                }
-            });
-
-            var searchButton = new ControlButton(jQuery.mage.__('Add Products')),
-                searchAreaId = this.getAreaId('search');
-            searchButton.onClick = function() {
-                $(searchAreaId).show();
-                var el = this;
-                window.setTimeout(function () {
-                    el.remove();
-                }, 10);
-            };
+                });
 
-            this.dataArea.onLoad = this.dataArea.onLoad.wrap(function(proceed) {
-                proceed();
-                this._parent.itemsArea.setNode($(this._parent.getAreaId('items')));
-                this._parent.itemsArea.onLoad();
-            });
+                var searchButton = new ControlButton(jQuery.mage.__('Add Products')),
+                    searchAreaId = this.getAreaId('search');
+                searchButton.onClick = function() {
+                    $(searchAreaId).show();
+                    var el = this;
+                    window.setTimeout(function () {
+                        el.remove();
+                    }, 10);
+                };
+
+                this.dataArea.onLoad = this.dataArea.onLoad.wrap(function(proceed) {
+                    proceed();
+                    this._parent.itemsArea.setNode($(this._parent.getAreaId('items')));
+                    this._parent.itemsArea.onLoad();
+                });
 
-            this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) {
-                proceed();
-                if ($(searchAreaId) && !$(searchAreaId).visible()) {
-                    this.addControlButton(searchButton);
-                }
-            });
-            this.areasLoaded();
-            this.itemsArea.onLoad();
-        }).bind(this));
-
-        jQuery('#edit_form')
-            .on('submitOrder', function(){
-                jQuery(this).trigger('realOrder');
-            })
-            .on('realOrder', this._realSubmit.bind(this));
-
-    },
-
-    areasLoaded: function(){
-    },
-
-    itemsLoaded: function(){
-    },
-
-    dataLoaded: function(){
-        this.dataShow();
-    },
-
-    setLoadBaseUrl : function(url){
-        this.loadBaseUrl = url;
-    },
-
-    setAddresses : function(addresses){
-        this.addresses = addresses;
-    },
-
-    addExcludedPaymentMethod : function(method){
-        this.excludedPaymentMethods.push(method);
-    },
-
-    setCustomerId : function(id){
-        this.customerId = id;
-        this.loadArea('header', true);
-        $(this.getAreaId('header')).callback = 'setCustomerAfter';
-        $('back_order_top_button').hide();
-        $('reset_order_top_button').show();
-    },
-
-    setCustomerAfter : function () {
-        this.customerSelectorHide();
-        if (this.storeId) {
-            $(this.getAreaId('data')).callback = 'dataLoaded';
+                this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) {
+                    proceed();
+                    if ($(searchAreaId) && !$(searchAreaId).visible()) {
+                        this.addControlButton(searchButton);
+                    }
+                });
+                this.areasLoaded();
+                this.itemsArea.onLoad();
+            }).bind(this));
+
+            jQuery('#edit_form')
+                .on('submitOrder', function(){
+                    jQuery(this).trigger('realOrder');
+                })
+                .on('realOrder', this._realSubmit.bind(this));
+
+        },
+
+        areasLoaded: function(){
+        },
+
+        itemsLoaded: function(){
+        },
+
+        dataLoaded: function(){
+            this.dataShow();
+        },
+
+        setLoadBaseUrl : function(url){
+            this.loadBaseUrl = url;
+        },
+
+        setAddresses : function(addresses){
+            this.addresses = addresses;
+        },
+
+        addExcludedPaymentMethod : function(method){
+            this.excludedPaymentMethods.push(method);
+        },
+
+        setCustomerId : function(id){
+            this.customerId = id;
+            this.loadArea('header', true);
+            $(this.getAreaId('header')).callback = 'setCustomerAfter';
+            $('back_order_top_button').hide();
+            $('reset_order_top_button').show();
+        },
+
+        setCustomerAfter : function () {
+            this.customerSelectorHide();
+            if (this.storeId) {
+                $(this.getAreaId('data')).callback = 'dataLoaded';
+                this.loadArea(['data'], true);
+            }
+            else {
+                this.storeSelectorShow();
+            }
+        },
+
+        setStoreId : function(id){
+            this.storeId = id;
+            this.storeSelectorHide();
+            this.sidebarShow();
+            //this.loadArea(['header', 'sidebar','data'], true);
+            this.dataShow();
+            this.loadArea(['header', 'data'], true);
+        },
+
+        setCurrencyId : function(id){
+            this.currencyId = id;
+            //this.loadArea(['sidebar', 'data'], true);
             this.loadArea(['data'], true);
-        }
-        else {
-            this.storeSelectorShow();
-        }
-    },
-
-    setStoreId : function(id){
-        this.storeId = id;
-        this.storeSelectorHide();
-        this.sidebarShow();
-        //this.loadArea(['header', 'sidebar','data'], true);
-        this.dataShow();
-        this.loadArea(['header', 'data'], true);
-    },
-
-    setCurrencyId : function(id){
-        this.currencyId = id;
-        //this.loadArea(['sidebar', 'data'], true);
-        this.loadArea(['data'], true);
-    },
-
-    setCurrencySymbol : function(symbol){
-        this.currencySymbol = symbol;
-    },
-
-    selectAddress : function(el, container){
-        id = el.value;
-        if (id.length == 0) {
-            id = '0';
-        }
-        if(this.addresses[id]){
-            this.fillAddressFields(container, this.addresses[id]);
-        }
-        else{
-            this.fillAddressFields(container, {});
-        }
+        },
 
-        var data = this.serializeData(container);
-        data[el.name] = id;
-        if(this.isShippingField(container) && !this.isShippingMethodReseted){
-            this.resetShippingMethod(data);
-        }
-        else{
-            this.saveData(data);
-        }
-    },
+        setCurrencySymbol : function(symbol){
+            this.currencySymbol = symbol;
+        },
 
-    isShippingField : function(fieldId){
-        if(this.shippingAsBilling){
-            return fieldId.include('billing');
-        }
-        return fieldId.include('shipping');
-    },
+        selectAddress : function(el, container){
+            id = el.value;
+            if (id.length == 0) {
+                id = '0';
+            }
+            if(this.addresses[id]){
+                this.fillAddressFields(container, this.addresses[id]);
+            }
+            else{
+                this.fillAddressFields(container, {});
+            }
 
-    isBillingField : function(fieldId){
-        return fieldId.include('billing');
-    },
+            var data = this.serializeData(container);
+            data[el.name] = id;
+            if(this.isShippingField(container) && !this.isShippingMethodReseted){
+                this.resetShippingMethod(data);
+            }
+            else{
+                this.saveData(data);
+            }
+        },
 
-    bindAddressFields : function(container) {
-        var fields = $(container).select('input', 'select', 'textarea');
-        for(var i=0;i<fields.length;i++){
-            Event.observe(fields[i], 'change', this.changeAddressField.bind(this));
-        }
-    },
+        isShippingField : function(fieldId){
+            if(this.shippingAsBilling){
+                return fieldId.include('billing');
+            }
+            return fieldId.include('shipping');
+        },
 
-    changeAddressField : function(event){
-        var field = Event.element(event);
-        var re = /[^\[]*\[([^\]]*)_address\]\[([^\]]*)\](\[(\d)\])?/;
-        var matchRes = field.name.match(re);
+        isBillingField : function(fieldId){
+            return fieldId.include('billing');
+        },
 
-        if (!matchRes) {
-            return;
-        }
+        bindAddressFields : function(container) {
+            var fields = $(container).select('input', 'select', 'textarea');
+            for(var i=0;i<fields.length;i++){
+                Event.observe(fields[i], 'change', this.changeAddressField.bind(this));
+            }
+        },
 
-        var type = matchRes[1];
-        var name = matchRes[2];
-        var data;
+        changeAddressField : function(event){
+            var field = Event.element(event);
+            var re = /[^\[]*\[([^\]]*)_address\]\[([^\]]*)\](\[(\d)\])?/;
+            var matchRes = field.name.match(re);
 
-        if(this.isBillingField(field.id)){
-            data = this.serializeData(this.billingAddressContainer)
-        }
-        else{
-            data = this.serializeData(this.shippingAddressContainer)
-        }
-        data = data.toObject();
+            if (!matchRes) {
+                return;
+            }
 
-        if( (type == 'billing' && this.shippingAsBilling)
-            || (type == 'shipping' && !this.shippingAsBilling) ) {
-            data['reset_shipping'] = true;
-        }
+            var type = matchRes[1];
+            var name = matchRes[2];
+            var data;
+
+            if(this.isBillingField(field.id)){
+                data = this.serializeData(this.billingAddressContainer)
+            }
+            else{
+                data = this.serializeData(this.shippingAddressContainer)
+            }
+            data = data.toObject();
+
+            if( (type == 'billing' && this.shippingAsBilling)
+                || (type == 'shipping' && !this.shippingAsBilling) ) {
+                data['reset_shipping'] = true;
+            }
 
-        data['order['+type+'_address][customer_address_id]'] = $('order-'+type+'_address_customer_address_id').value;
+            data['order['+type+'_address][customer_address_id]'] = $('order-'+type+'_address_customer_address_id').value;
 
-        if (data['reset_shipping']) {
-            this.resetShippingMethod(data);
-        } else {
-            this.saveData(data);
-            if (name == 'country_id' || name == 'customer_address_id') {
-                this.loadArea(['shipping_method', 'billing_method', 'totals', 'items'], true, data);
+            if (data['reset_shipping']) {
+                this.resetShippingMethod(data);
+            } else {
+                this.saveData(data);
+                if (name == 'country_id' || name == 'customer_address_id') {
+                    this.loadArea(['shipping_method', 'billing_method', 'totals', 'items'], true, data);
+                }
+                // added for reloading of default sender and default recipient for giftmessages
+                //this.loadArea(['giftmessage'], true, data);
             }
-            // added for reloading of default sender and default recipient for giftmessages
-            //this.loadArea(['giftmessage'], true, data);
-        }
-    },
-
-    fillAddressFields : function(container, data){
-        var regionIdElem = false;
-        var regionIdElemValue = false;
-
-        var fields = $(container).select('input', 'select', 'textarea');
-        var re = /[^\[]*\[[^\]]*\]\[([^\]]*)\](\[(\d)\])?/;
-        for(var i=0;i<fields.length;i++){
-            // skip input type file @Security error code: 1000
-            if (fields[i].tagName.toLowerCase() == 'input' && fields[i].type.toLowerCase() == 'file') {
-                continue;
-            }
-            var matchRes = fields[i].name.match(re);
-            if (matchRes === null) {
-                continue;
-            }
-            var name = matchRes[1];
-            var index = matchRes[3];
-
-            if (index){
-                // multiply line
-                if (data[name]){
-                    var values = data[name].split("\n");
-                    fields[i].value = values[index] ? values[index] : '';
+        },
+
+        fillAddressFields : function(container, data){
+            var regionIdElem = false;
+            var regionIdElemValue = false;
+
+            var fields = $(container).select('input', 'select', 'textarea');
+            var re = /[^\[]*\[[^\]]*\]\[([^\]]*)\](\[(\d)\])?/;
+            for(var i=0;i<fields.length;i++){
+                // skip input type file @Security error code: 1000
+                if (fields[i].tagName.toLowerCase() == 'input' && fields[i].type.toLowerCase() == 'file') {
+                    continue;
+                }
+                var matchRes = fields[i].name.match(re);
+                if (matchRes === null) {
+                    continue;
+                }
+                var name = matchRes[1];
+                var index = matchRes[3];
+
+                if (index){
+                    // multiply line
+                    if (data[name]){
+                        var values = data[name].split("\n");
+                        fields[i].value = values[index] ? values[index] : '';
+                    } else {
+                        fields[i].value = '';
+                    }
+                } else if (fields[i].tagName.toLowerCase() == 'select' && fields[i].multiple) {
+                    // multiselect
+                    if (data[name]) {
+                        values = [''];
+                        if (Object.isString(data[name])) {
+                            values = data[name].split(',');
+                        } else if (Object.isArray(data[name])) {
+                            values = data[name];
+                        }
+                        fields[i].setValue(values);
+                    }
                 } else {
-                    fields[i].value = '';
+                    fields[i].setValue(data[name] ? data[name] : '');
                 }
-            } else if (fields[i].tagName.toLowerCase() == 'select' && fields[i].multiple) {
-                // multiselect
-                if (data[name]) {
-                    values = [''];
-                    if (Object.isString(data[name])) {
-                        values = data[name].split(',');
-                    } else if (Object.isArray(data[name])) {
-                        values = data[name];
+
+                if (fields[i].changeUpdater) fields[i].changeUpdater();
+                if (name == 'region' && data['region_id'] && !data['region']){
+                    fields[i].value = data['region_id'];
+                }
+            }
+        },
+
+        disableShippingAddress : function(flag) {
+            this.shippingAsBilling = flag;
+            if ($('order-shipping_address_customer_address_id')) {
+                $('order-shipping_address_customer_address_id').disabled = flag;
+            }
+            if ($(this.shippingAddressContainer)) {
+                var dataFields = $(this.shippingAddressContainer).select('input', 'select', 'textarea');
+                for (var i = 0; i < dataFields.length; i++) {
+                    dataFields[i].disabled = flag;
+
+                    if(this.isOnlyVirtualProduct) {
+                        dataFields[i].setValue('');
                     }
-                    fields[i].setValue(values);
                 }
+                var buttons = $(this.shippingAddressContainer).select('button');
+                // Add corresponding class to buttons while disabling them
+                for (i = 0; i < buttons.length; i++) {
+                    buttons[i].disabled = flag;
+                    if (flag) {
+                        buttons[i].addClassName('disabled');
+                    } else {
+                        buttons[i].removeClassName('disabled');
+                    }
+                }
+            }
+        },
+
+        setShippingAsBilling : function(flag){
+            var data;
+            var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage'];
+            this.disableShippingAddress(flag);
+            if(flag){
+                data = this.serializeData(this.billingAddressContainer);
             } else {
-                fields[i].setValue(data[name] ? data[name] : '');
+                data = this.serializeData(this.shippingAddressContainer);
+                areasToLoad.push('shipping_method');
             }
+            data = data.toObject();
+            data['shipping_as_billing'] = flag ? 1 : 0;
+            data['reset_shipping'] = 1;
+            this.loadArea( areasToLoad, true, data);
+        },
+
+        resetShippingMethod : function(data){
+            var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage', 'items'];
+            if(!this.isOnlyVirtualProduct) {
+                areasToLoad.push('shipping_method');
+                areasToLoad.push('shipping_address');
+            }
+
+            data['reset_shipping'] = 1;
+            this.isShippingMethodReseted = true;
+            this.loadArea(areasToLoad, true, data);
+        },
+
+        loadShippingRates : function(){
+            this.isShippingMethodReseted = false;
+            this.loadArea(['shipping_method', 'totals'], true, {collect_shipping_rates: 1});
+        },
+
+        setShippingMethod : function(method){
+            var data = {};
+            data['order[shipping_method]'] = method;
+            this.loadArea(['shipping_method', 'totals', 'billing_method'], true, data);
+        },
 
-            if (fields[i].changeUpdater) fields[i].changeUpdater();
-            if (name == 'region' && data['region_id'] && !data['region']){
-                fields[i].value = data['region_id'];
+        switchPaymentMethod : function(method){
+            jQuery('#edit_form').trigger('changePaymentMethod', [method]);
+            this.setPaymentMethod(method);
+            var data = {};
+            data['order[payment_method]'] = method;
+            this.loadArea(['card_validation'], true, data);
+        },
+
+        setPaymentMethod : function(method){
+            if (this.paymentMethod && $('payment_form_'+this.paymentMethod)) {
+                var form = 'payment_form_'+this.paymentMethod;
+                [form + '_before', form, form + '_after'].each(function(el) {
+                    var block = $(el);
+                    if (block) {
+                        block.hide();
+                        block.select('input', 'select', 'textarea').each(function(field) {
+                            field.disabled = true;
+                        });
+                    }
+                });
             }
-        }
-    },
 
-    disableShippingAddress : function(flag) {
-        this.shippingAsBilling = flag;
-        if ($('order-shipping_address_customer_address_id')) {
-            $('order-shipping_address_customer_address_id').disabled = flag;
-        }
-        if ($(this.shippingAddressContainer)) {
-            var dataFields = $(this.shippingAddressContainer).select('input', 'select', 'textarea');
-            for (var i = 0; i < dataFields.length; i++) {
-                dataFields[i].disabled = flag;
+            if(!this.paymentMethod || method){
+                $('order-billing_method_form').select('input', 'select', 'textarea').each(function(elem){
+                    if(elem.type != 'radio') elem.disabled = true;
+                })
+            }
 
-                if(this.isOnlyVirtualProduct) {
-                    dataFields[i].setValue('');
-                }
+            if ($('payment_form_'+method)){
+                jQuery('#' + this.getAreaId('billing_method')).trigger('contentUpdated');
+                this.paymentMethod = method;
+                var form = 'payment_form_'+method;
+                [form + '_before', form, form + '_after'].each(function(el) {
+                    var block = $(el);
+                    if (block) {
+                        block.show();
+                        block.select('input', 'select', 'textarea').each(function(field) {
+                            field.disabled = false;
+                            if (!el.include('_before') && !el.include('_after') && !field.bindChange) {
+                                field.bindChange = true;
+                                field.paymentContainer = form;
+                                field.method = method;
+                                field.observe('change', this.changePaymentData.bind(this))
+                            }
+                        },this);
+                    }
+                },this);
             }
-            var buttons = $(this.shippingAddressContainer).select('button');
-            // Add corresponding class to buttons while disabling them
-            for (i = 0; i < buttons.length; i++) {
-                buttons[i].disabled = flag;
-                if (flag) {
-                    buttons[i].addClassName('disabled');
+        },
+
+        changePaymentData : function(event){
+            var elem = Event.element(event);
+            if(elem && elem.method){
+                var data = this.getPaymentData(elem.method);
+                if (data) {
+                    this.loadArea(['card_validation'], true, data);
                 } else {
-                    buttons[i].removeClassName('disabled');
+                    return;
                 }
             }
-        }
-    },
-
-    setShippingAsBilling : function(flag){
-        var data;
-        var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage'];
-        this.disableShippingAddress(flag);
-        if(flag){
-            data = this.serializeData(this.billingAddressContainer);
-        } else {
-            data = this.serializeData(this.shippingAddressContainer);
-            areasToLoad.push('shipping_method');
-        }
-        data = data.toObject();
-        data['shipping_as_billing'] = flag ? 1 : 0;
-        data['reset_shipping'] = 1;
-        this.loadArea( areasToLoad, true, data);
-    },
-
-    resetShippingMethod : function(data){
-        var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage', 'items'];
-        if(!this.isOnlyVirtualProduct) {
-            areasToLoad.push('shipping_method');
-            areasToLoad.push('shipping_address');
-        }
+        },
 
-        data['reset_shipping'] = 1;
-        this.isShippingMethodReseted = true;
-        this.loadArea(areasToLoad, true, data);
-    },
-
-    loadShippingRates : function(){
-        this.isShippingMethodReseted = false;
-        this.loadArea(['shipping_method', 'totals'], true, {collect_shipping_rates: 1});
-    },
-
-    setShippingMethod : function(method){
-        var data = {};
-        data['order[shipping_method]'] = method;
-        this.loadArea(['shipping_method', 'totals', 'billing_method'], true, data);
-    },
-
-    switchPaymentMethod : function(method){
-        jQuery('#edit_form').trigger('changePaymentMethod', [method]);
-        this.setPaymentMethod(method);
-        var data = {};
-        data['order[payment_method]'] = method;
-        this.loadArea(['card_validation'], true, data);
-    },
-
-    setPaymentMethod : function(method){
-        if (this.paymentMethod && $('payment_form_'+this.paymentMethod)) {
-            var form = 'payment_form_'+this.paymentMethod;
-            [form + '_before', form, form + '_after'].each(function(el) {
-                var block = $(el);
-                if (block) {
-                    block.hide();
-                    block.select('input', 'select', 'textarea').each(function(field) {
-                        field.disabled = true;
-                    });
-                }
-            });
-        }
-
-        if(!this.paymentMethod || method){
-            $('order-billing_method_form').select('input', 'select', 'textarea').each(function(elem){
-                if(elem.type != 'radio') elem.disabled = true;
-            })
-        }
-
-        if ($('payment_form_'+method)){
-            jQuery('#' + this.getAreaId('billing_method')).trigger('contentUpdated');
-            this.paymentMethod = method;
-            var form = 'payment_form_'+method;
-            [form + '_before', form, form + '_after'].each(function(el) {
-                var block = $(el);
-                if (block) {
-                   block.show();
-                   block.select('input', 'select', 'textarea').each(function(field) {
-                       field.disabled = false;
-                       if (!el.include('_before') && !el.include('_after') && !field.bindChange) {
-                           field.bindChange = true;
-                           field.paymentContainer = form; 
-                           field.method = method;
-                           field.observe('change', this.changePaymentData.bind(this))
-                        }
-                    },this);
+        getPaymentData : function(currentMethod){
+            if (typeof(currentMethod) == 'undefined') {
+                if (this.paymentMethod) {
+                    currentMethod = this.paymentMethod;
+                } else {
+                    return false;
                 }
-            },this);
-        }
-    },
-
-    changePaymentData : function(event){
-        var elem = Event.element(event);
-        if(elem && elem.method){
-            var data = this.getPaymentData(elem.method);
-            if (data) {
-                 this.loadArea(['card_validation'], true, data);
-            } else {
-                return;
             }
-        }
-    },
-
-    getPaymentData : function(currentMethod){
-        if (typeof(currentMethod) == 'undefined') {
-            if (this.paymentMethod) {
-                currentMethod = this.paymentMethod;
-            } else {
+            if (this.isPaymentValidationAvailable() == false) {
                 return false;
             }
-        }
-        if (this.isPaymentValidationAvailable() == false) {
-            return false;
-        }
-        var data = {};
-        var fields = $('payment_form_' + currentMethod).select('input', 'select');
-        for(var i=0;i<fields.length;i++){
-            data[fields[i].name] = fields[i].getValue();
-        }
-        if ((typeof data['payment[cc_type]']) != 'undefined' && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) {
-            return false;
-        }
-        return data;
-    },
-
-    applyCoupon : function(code){
-        this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {'order[coupon][code]':code, reset_shipping: true});
-        this.orderItemChanged = false;
-    },
-
-    addProduct : function(id){
-        this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {add_product:id, reset_shipping: true});
-    },
-
-    removeQuoteItem : function(id){
-        this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true,
-            {remove_item:id, from:'quote',reset_shipping: true});
-    },
-
-    moveQuoteItem : function(id, to){
-        this.loadArea(['sidebar_'+to, 'items', 'shipping_method', 'totals', 'billing_method'], this.getAreaId('items'),
-            {move_item:id, to:to, reset_shipping: true});
-    },
-
-    productGridShow : function(buttonElement){
-        this.productGridShowButton = buttonElement;
-        Element.hide(buttonElement);
-        this.showArea('search');
-    },
-
-    productGridRowInit : function(grid, row){
-        var checkbox = $(row).select('.checkbox')[0];
-        var inputs = $(row).select('.input-text');
-        if (checkbox && inputs.length > 0) {
-            checkbox.inputElements = inputs;
-            for (var i = 0; i < inputs.length; i++) {
-                var input = inputs[i];
-                input.checkboxElement = checkbox;
-
-                var product = this.gridProducts.get(checkbox.value);
-                if (product) {
-                    var defaultValue = product[input.name];
-                    if (defaultValue) {
-                        if (input.name == 'giftmessage') {
-                            input.checked = true;
-                        } else {
-                            input.value = defaultValue;
+            var data = {};
+            var fields = $('payment_form_' + currentMethod).select('input', 'select');
+            for(var i=0;i<fields.length;i++){
+                data[fields[i].name] = fields[i].getValue();
+            }
+            if ((typeof data['payment[cc_type]']) != 'undefined' && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) {
+                return false;
+            }
+            return data;
+        },
+
+        applyCoupon : function(code){
+            this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {'order[coupon][code]':code, reset_shipping: true});
+            this.orderItemChanged = false;
+        },
+
+        addProduct : function(id){
+            this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {add_product:id, reset_shipping: true});
+        },
+
+        removeQuoteItem : function(id){
+            this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true,
+                {remove_item:id, from:'quote',reset_shipping: true});
+        },
+
+        moveQuoteItem : function(id, to){
+            this.loadArea(['sidebar_'+to, 'items', 'shipping_method', 'totals', 'billing_method'], this.getAreaId('items'),
+                {move_item:id, to:to, reset_shipping: true});
+        },
+
+        productGridShow : function(buttonElement){
+            this.productGridShowButton = buttonElement;
+            Element.hide(buttonElement);
+            this.showArea('search');
+        },
+
+        productGridRowInit : function(grid, row){
+            var checkbox = $(row).select('.checkbox')[0];
+            var inputs = $(row).select('.input-text');
+            if (checkbox && inputs.length > 0) {
+                checkbox.inputElements = inputs;
+                for (var i = 0; i < inputs.length; i++) {
+                    var input = inputs[i];
+                    input.checkboxElement = checkbox;
+
+                    var product = this.gridProducts.get(checkbox.value);
+                    if (product) {
+                        var defaultValue = product[input.name];
+                        if (defaultValue) {
+                            if (input.name == 'giftmessage') {
+                                input.checked = true;
+                            } else {
+                                input.value = defaultValue;
+                            }
                         }
                     }
-                }
 
-                input.disabled = !checkbox.checked || input.hasClassName('input-inactive');
+                    input.disabled = !checkbox.checked || input.hasClassName('input-inactive');
 
-                Event.observe(input,'keyup', this.productGridRowInputChange.bind(this));
-                Event.observe(input,'change',this.productGridRowInputChange.bind(this));
+                    Event.observe(input,'keyup', this.productGridRowInputChange.bind(this));
+                    Event.observe(input,'change',this.productGridRowInputChange.bind(this));
+                }
             }
-        }
-    },
-
-    productGridRowInputChange : function(event){
-        var element = Event.element(event);
-        if (element && element.checkboxElement && element.checkboxElement.checked){
-            if (element.name!='giftmessage' || element.checked) {
-                this.gridProducts.get(element.checkboxElement.value)[element.name] = element.value;
-            } else if (element.name=='giftmessage' && this.gridProducts.get(element.checkboxElement.value)[element.name]) {
-                delete(this.gridProducts.get(element.checkboxElement.value)[element.name]);
+        },
+
+        productGridRowInputChange : function(event){
+            var element = Event.element(event);
+            if (element && element.checkboxElement && element.checkboxElement.checked){
+                if (element.name!='giftmessage' || element.checked) {
+                    this.gridProducts.get(element.checkboxElement.value)[element.name] = element.value;
+                } else if (element.name=='giftmessage' && this.gridProducts.get(element.checkboxElement.value)[element.name]) {
+                    delete(this.gridProducts.get(element.checkboxElement.value)[element.name]);
+                }
             }
-        }
-    },
-
-    productGridRowClick : function(grid, event){
-        var trElement = Event.findElement(event, 'tr');
-        var qtyElement = trElement.select('input[name="qty"]')[0];
-        var eventElement = Event.element(event);
-        var isInputCheckbox = eventElement.tagName == 'INPUT' && eventElement.type == 'checkbox';
-        var isInputQty = eventElement.tagName == 'INPUT' && eventElement.name == 'qty';
-        if (trElement && !isInputQty) {
-            var checkbox = Element.select(trElement, 'input[type="checkbox"]')[0];
-            var confLink = Element.select(trElement, 'a')[0];
-            var priceColl = Element.select(trElement, '.price')[0];
-            if (checkbox) {
-                // processing non composite product
-                if (confLink.readAttribute('disabled')) {
-                    var checked = isInputCheckbox ? checkbox.checked : !checkbox.checked;
-                    grid.setCheckboxChecked(checkbox, checked);
-                // processing composite product
-                } else if (isInputCheckbox && !checkbox.checked) {
-                    grid.setCheckboxChecked(checkbox, false);
-                // processing composite product
-                } else if (!isInputCheckbox || (isInputCheckbox && checkbox.checked)) {
-                    var listType = confLink.readAttribute('list_type');
-                    var productId = confLink.readAttribute('product_id');
-                    if (typeof this.productPriceBase[productId] == 'undefined') {
-                        var priceBase = priceColl.innerHTML.match(/.*?([\d,]+\.?\d*)/);
-                        if (!priceBase) {
-                            this.productPriceBase[productId] = 0;
-                        } else {
-                            this.productPriceBase[productId] = parseFloat(priceBase[1].replace(/,/g,''));
+        },
+
+        productGridRowClick : function(grid, event){
+            var trElement = Event.findElement(event, 'tr');
+            var qtyElement = trElement.select('input[name="qty"]')[0];
+            var eventElement = Event.element(event);
+            var isInputCheckbox = eventElement.tagName == 'INPUT' && eventElement.type == 'checkbox';
+            var isInputQty = eventElement.tagName == 'INPUT' && eventElement.name == 'qty';
+            if (trElement && !isInputQty) {
+                var checkbox = Element.select(trElement, 'input[type="checkbox"]')[0];
+                var confLink = Element.select(trElement, 'a')[0];
+                var priceColl = Element.select(trElement, '.price')[0];
+                if (checkbox) {
+                    // processing non composite product
+                    if (confLink.readAttribute('disabled')) {
+                        var checked = isInputCheckbox ? checkbox.checked : !checkbox.checked;
+                        grid.setCheckboxChecked(checkbox, checked);
+                        // processing composite product
+                    } else if (isInputCheckbox && !checkbox.checked) {
+                        grid.setCheckboxChecked(checkbox, false);
+                        // processing composite product
+                    } else if (!isInputCheckbox || (isInputCheckbox && checkbox.checked)) {
+                        var listType = confLink.readAttribute('list_type');
+                        var productId = confLink.readAttribute('product_id');
+                        if (typeof this.productPriceBase[productId] == 'undefined') {
+                            var priceBase = priceColl.innerHTML.match(/.*?([\d,]+\.?\d*)/);
+                            if (!priceBase) {
+                                this.productPriceBase[productId] = 0;
+                            } else {
+                                this.productPriceBase[productId] = parseFloat(priceBase[1].replace(/,/g,''));
+                            }
                         }
+                        productConfigure.setConfirmCallback(listType, function() {
+                            // sync qty of popup and qty of grid
+                            var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
+                            if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
+                                qtyElement.value = confirmedCurrentQty.value;
+                            }
+                            // calc and set product price
+                            var productPrice = this._calcProductPrice();
+                            if (this._isSummarizePrice()) {
+                                productPrice += this.productPriceBase[productId];
+                            }
+                            productPrice = parseFloat(productPrice);
+                            priceColl.innerHTML = this.currencySymbol + productPrice.toFixed(2);
+                            // and set checkbox checked
+                            grid.setCheckboxChecked(checkbox, true);
+                        }.bind(this));
+                        productConfigure.setCancelCallback(listType, function() {
+                            if (!$(productConfigure.confirmedCurrentId) || !$(productConfigure.confirmedCurrentId).innerHTML) {
+                                grid.setCheckboxChecked(checkbox, false);
+                            }
+                        });
+                        productConfigure.setShowWindowCallback(listType, function() {
+                            // sync qty of grid and qty of popup
+                            var formCurrentQty = productConfigure.getCurrentFormQtyElement();
+                            if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
+                                formCurrentQty.value = qtyElement.value;
+                            }
+                        }.bind(this));
+                        productConfigure.showItemConfiguration(listType, productId);
                     }
-                    productConfigure.setConfirmCallback(listType, function() {
-                        // sync qty of popup and qty of grid
-                        var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
-                        if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
-                            qtyElement.value = confirmedCurrentQty.value;
-                        }
-                        // calc and set product price
-                        var productPrice = this._calcProductPrice();
-                        if (this._isSummarizePrice()) {
-                            productPrice += this.productPriceBase[productId];
-                        }
-                        productPrice = parseFloat(productPrice);
-                        priceColl.innerHTML = this.currencySymbol + productPrice.toFixed(2);
-                        // and set checkbox checked
-                        grid.setCheckboxChecked(checkbox, true);
-                    }.bind(this));
-                    productConfigure.setCancelCallback(listType, function() {
-                        if (!$(productConfigure.confirmedCurrentId) || !$(productConfigure.confirmedCurrentId).innerHTML) {
-                            grid.setCheckboxChecked(checkbox, false);
-                        }
-                    });
-                    productConfigure.setShowWindowCallback(listType, function() {
-                        // sync qty of grid and qty of popup
-                        var formCurrentQty = productConfigure.getCurrentFormQtyElement();
-                        if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
-                            formCurrentQty.value = qtyElement.value;
-                        }
-                    }.bind(this));
-                    productConfigure.showItemConfiguration(listType, productId);
                 }
             }
-        }
-    },
-
-    /**
-     * Is need to summarize price
-     */
-    _isSummarizePrice: function(elm) {
-        if (elm && elm.hasAttribute('summarizePrice')) {
-            this.summarizePrice = parseInt(elm.readAttribute('summarizePrice'));
-        }
-        return this.summarizePrice;
-    },
-    /**
-     * Calc product price through its options
-     */
-    _calcProductPrice: function () {
-        var productPrice = 0;
-        var getPriceFields = function (elms) {
+        },
+
+        /**
+         * Is need to summarize price
+         */
+        _isSummarizePrice: function(elm) {
+            if (elm && elm.hasAttribute('summarizePrice')) {
+                this.summarizePrice = parseInt(elm.readAttribute('summarizePrice'));
+            }
+            return this.summarizePrice;
+        },
+        /**
+         * Calc product price through its options
+         */
+        _calcProductPrice: function () {
             var productPrice = 0;
-            var getPrice = function (elm) {
-                var optQty = 1;
-                if (elm.hasAttribute('qtyId')) {
-                    if (!$(elm.getAttribute('qtyId')).value) {
-                        return 0;
-                    } else {
-                        optQty = parseFloat($(elm.getAttribute('qtyId')).value);
+            var getPriceFields = function (elms) {
+                var productPrice = 0;
+                var getPrice = function (elm) {
+                    var optQty = 1;
+                    if (elm.hasAttribute('qtyId')) {
+                        if (!$(elm.getAttribute('qtyId')).value) {
+                            return 0;
+                        } else {
+                            optQty = parseFloat($(elm.getAttribute('qtyId')).value);
+                        }
                     }
-                }
-                if (elm.hasAttribute('price') && !elm.disabled) {
-                    return parseFloat(elm.readAttribute('price')) * optQty;
-                }
-                return 0;
-            };
-            for(var i = 0; i < elms.length; i++) {
-                if (elms[i].type == 'select-one' || elms[i].type == 'select-multiple') {
-                    for(var ii = 0; ii < elms[i].options.length; ii++) {
-                        if (elms[i].options[ii].selected) {
-                            if (this._isSummarizePrice(elms[i].options[ii])) {
-                                productPrice += getPrice(elms[i].options[ii]);
-                            } else {
-                                productPrice = getPrice(elms[i].options[ii]);
+                    if (elm.hasAttribute('price') && !elm.disabled) {
+                        return parseFloat(elm.readAttribute('price')) * optQty;
+                    }
+                    return 0;
+                };
+                for(var i = 0; i < elms.length; i++) {
+                    if (elms[i].type == 'select-one' || elms[i].type == 'select-multiple') {
+                        for(var ii = 0; ii < elms[i].options.length; ii++) {
+                            if (elms[i].options[ii].selected) {
+                                if (this._isSummarizePrice(elms[i].options[ii])) {
+                                    productPrice += getPrice(elms[i].options[ii]);
+                                } else {
+                                    productPrice = getPrice(elms[i].options[ii]);
+                                }
                             }
                         }
                     }
-                }
-                else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked)
+                    else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked)
                         || ((elms[i].type == 'file' || elms[i].type == 'text' || elms[i].type == 'textarea' || elms[i].type == 'hidden')
-                            && Form.Element.getValue(elms[i]))
-                ) {
-                    if (this._isSummarizePrice(elms[i])) {
-                        productPrice += getPrice(elms[i]);
-                    } else {
-                        productPrice = getPrice(elms[i]);
+                        && Form.Element.getValue(elms[i]))
+                    ) {
+                        if (this._isSummarizePrice(elms[i])) {
+                            productPrice += getPrice(elms[i]);
+                        } else {
+                            productPrice = getPrice(elms[i]);
+                        }
                     }
                 }
-            }
+                return productPrice;
+            }.bind(this);
+            productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('input'));
+            productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('select'));
+            productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('textarea'));
             return productPrice;
-        }.bind(this);
-        productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('input'));
-        productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('select'));
-        productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('textarea'));
-        return productPrice;
-    },
-
-    productGridCheckboxCheck : function(grid, element, checked){
-        if (checked) {
-            if(element.inputElements) {
-                this.gridProducts.set(element.value, {});
-                var product = this.gridProducts.get(element.value);
-                for (var i = 0; i < element.inputElements.length; i++) {
-                    var input = element.inputElements[i];
-                    if (!input.hasClassName('input-inactive')) {
-                        input.disabled = false;
-                        if (input.name == 'qty' && !input.value) {
-                            input.value = 1;
+        },
+
+        productGridCheckboxCheck : function(grid, element, checked){
+            if (checked) {
+                if(element.inputElements) {
+                    this.gridProducts.set(element.value, {});
+                    var product = this.gridProducts.get(element.value);
+                    for (var i = 0; i < element.inputElements.length; i++) {
+                        var input = element.inputElements[i];
+                        if (!input.hasClassName('input-inactive')) {
+                            input.disabled = false;
+                            if (input.name == 'qty' && !input.value) {
+                                input.value = 1;
+                            }
                         }
-                    }
 
-                    if (input.checked || input.name != 'giftmessage') {
-                        product[input.name] = input.value;
-                    } else if (product[input.name]) {
-                        delete(product[input.name]);
+                        if (input.checked || input.name != 'giftmessage') {
+                            product[input.name] = input.value;
+                        } else if (product[input.name]) {
+                            delete(product[input.name]);
+                        }
                     }
                 }
+            } else {
+                if(element.inputElements){
+                    for(var i = 0; i < element.inputElements.length; i++) {
+                        element.inputElements[i].disabled = true;
+                    }
+                }
+                this.gridProducts.unset(element.value);
             }
-        } else {
-            if(element.inputElements){
-                for(var i = 0; i < element.inputElements.length; i++) {
-                    element.inputElements[i].disabled = true;
+            grid.reloadParams = {'products[]':this.gridProducts.keys()};
+        },
+
+        /**
+         * Submit configured products to quote
+         */
+        productGridAddSelected : function(){
+            if(this.productGridShowButton) Element.show(this.productGridShowButton);
+            var area = ['search', 'items', 'shipping_method', 'totals', 'giftmessage','billing_method'];
+            // prepare additional fields and filtered items of products
+            var fieldsPrepare = {};
+            var itemsFilter = [];
+            var products = this.gridProducts.toObject();
+            for (var productId in products) {
+                itemsFilter.push(productId);
+                var paramKey = 'item['+productId+']';
+                for (var productParamKey in products[productId]) {
+                    paramKey += '['+productParamKey+']';
+                    fieldsPrepare[paramKey] = products[productId][productParamKey];
                 }
             }
-            this.gridProducts.unset(element.value);
-        }
-        grid.reloadParams = {'products[]':this.gridProducts.keys()};
-    },
-
-    /**
-     * Submit configured products to quote
-     */
-    productGridAddSelected : function(){
-        if(this.productGridShowButton) Element.show(this.productGridShowButton);
-        var area = ['search', 'items', 'shipping_method', 'totals', 'giftmessage','billing_method'];
-        // prepare additional fields and filtered items of products
-        var fieldsPrepare = {};
-        var itemsFilter = [];
-        var products = this.gridProducts.toObject();
-        for (var productId in products) {
-            itemsFilter.push(productId);
-            var paramKey = 'item['+productId+']';
-            for (var productParamKey in products[productId]) {
-                paramKey += '['+productParamKey+']';
-                fieldsPrepare[paramKey] = products[productId][productParamKey];
+            this.productConfigureSubmit('product_to_add', area, fieldsPrepare, itemsFilter);
+            productConfigure.clean('quote_items');
+            this.hideArea('search');
+            this.gridProducts = $H({});
+        },
+
+        selectCustomer : function(grid, event){
+            var element = Event.findElement(event, 'tr');
+            if (element.title){
+                this.setCustomerId(element.title);
             }
-        }
-        this.productConfigureSubmit('product_to_add', area, fieldsPrepare, itemsFilter);
-        productConfigure.clean('quote_items');
-        this.hideArea('search');
-        this.gridProducts = $H({});
-    },
-
-    selectCustomer : function(grid, event){
-        var element = Event.findElement(event, 'tr');
-        if (element.title){
-            this.setCustomerId(element.title);
-        }
-    },
+        },
 
-    customerSelectorHide : function(){
-        this.hideArea('customer-selector');
-    },
+        customerSelectorHide : function(){
+            this.hideArea('customer-selector');
+        },
 
-    customerSelectorShow : function(){
-        this.showArea('customer-selector');
-    },
+        customerSelectorShow : function(){
+            this.showArea('customer-selector');
+        },
 
-    storeSelectorHide : function(){
-        this.hideArea('store-selector');
-    },
+        storeSelectorHide : function(){
+            this.hideArea('store-selector');
+        },
 
-    storeSelectorShow : function(){
-        this.showArea('store-selector');
-    },
+        storeSelectorShow : function(){
+            this.showArea('store-selector');
+        },
 
-    dataHide : function(){
-        this.hideArea('data');
-    },
+        dataHide : function(){
+            this.hideArea('data');
+        },
 
-    dataShow : function(){
-        if ($('submit_order_top_button')) {
-            $('submit_order_top_button').show();
-        }
-        this.showArea('data');
-    },
-
-    clearShoppingCart : function(confirmMessage){
-        var self = this;
-
-        confirm({
-            content: confirmMessage,
-            actions: {
-                confirm: function() {
-                    self.collectElementsValue = false;
-                    order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
-                    self.collectElementsValue = true;
-                }
+        dataShow : function(){
+            if ($('submit_order_top_button')) {
+                $('submit_order_top_button').show();
             }
-        });
-    },
-
-    sidebarApplyChanges : function(auxiliaryParams) {
-        if ($(this.getAreaId('sidebar'))) {
-            var data = {};
-            if (this.collectElementsValue) {
-                var elems = $(this.getAreaId('sidebar')).select('input');
-                for (var i=0; i < elems.length; i++) {
-                    if (elems[i].getValue()) {
-                        data[elems[i].name] = elems[i].getValue();
+            this.showArea('data');
+        },
+
+        clearShoppingCart : function(confirmMessage){
+            if (confirm(confirmMessage)) {
+                this.collectElementsValue = false;
+                order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
+                this.collectElementsValue = true;
+            }
+        },
+
+        sidebarApplyChanges : function(auxiliaryParams) {
+            if ($(this.getAreaId('sidebar'))) {
+                var data = {};
+                if (this.collectElementsValue) {
+                    var elems = $(this.getAreaId('sidebar')).select('input');
+                    for (var i=0; i < elems.length; i++) {
+                        if (elems[i].getValue()) {
+                            data[elems[i].name] = elems[i].getValue();
+                        }
                     }
                 }
-            }
-            if (auxiliaryParams instanceof Object) {
-                for (var paramName in auxiliaryParams) {
-                    data[paramName] = String(auxiliaryParams[paramName]);
+                if (auxiliaryParams instanceof Object) {
+                    for (var paramName in auxiliaryParams) {
+                        data[paramName] = String(auxiliaryParams[paramName]);
+                    }
                 }
+                data.reset_shipping = true;
+                this.loadArea(['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true, data);
             }
-            data.reset_shipping = true;
-            this.loadArea(['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true, data);
-        }
-    },
+        },
 
-    sidebarHide : function(){
-        if(this.storeId === false && $('page:left') && $('page:container')){
-            $('page:left').hide();
-            $('page:container').removeClassName('container');
-            $('page:container').addClassName('container-collapsed');
-        }
-    },
+        sidebarHide : function(){
+            if(this.storeId === false && $('page:left') && $('page:container')){
+                $('page:left').hide();
+                $('page:container').removeClassName('container');
+                $('page:container').addClassName('container-collapsed');
+            }
+        },
 
-    sidebarShow : function(){
-        if($('page:left') && $('page:container')){
-            $('page:left').show();
-            $('page:container').removeClassName('container-collapsed');
-            $('page:container').addClassName('container');
-        }
-    },
-
-    /**
-     * Show configuration of product and add handlers on submit form
-     *
-     * @param productId
-     */
-    sidebarConfigureProduct: function (listType, productId, itemId) {
-        // create additional fields
-        var params = {};
-        params.reset_shipping = true;
-        params.add_product = productId;
-        this.prepareParams(params);
-        for (var i in params) {
-            if (params[i] === null) {
-                unset(params[i]);
-            } else if (typeof(params[i]) == 'boolean') {
-                params[i] = params[i] ? 1 : 0;
+        sidebarShow : function(){
+            if($('page:left') && $('page:container')){
+                $('page:left').show();
+                $('page:container').removeClassName('container-collapsed');
+                $('page:container').addClassName('container');
             }
-        }
-        var fields = [];
-        for (var name in params) {
-            fields.push(new Element('input', {type: 'hidden', name: name, value: params[name]}));
-        }
-        // add additional fields before triggered submit
-        productConfigure.setBeforeSubmitCallback(listType, function() {
-            productConfigure.addFields(fields);
-        }.bind(this));
-        // response handler
-        productConfigure.setOnLoadIFrameCallback(listType, function(response) {
-            if (!response.ok) {
-                return;
+        },
+
+        /**
+         * Show configuration of product and add handlers on submit form
+         *
+         * @param productId
+         */
+        sidebarConfigureProduct: function (listType, productId, itemId) {
+            // create additional fields
+            var params = {};
+            params.reset_shipping = true;
+            params.add_product = productId;
+            this.prepareParams(params);
+            for (var i in params) {
+                if (params[i] === null) {
+                    unset(params[i]);
+                } else if (typeof(params[i]) == 'boolean') {
+                    params[i] = params[i] ? 1 : 0;
+                }
             }
-            this.loadArea(['items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true);
-        }.bind(this));
-        // show item configuration
-        itemId = itemId ? itemId : productId;
-        productConfigure.showItemConfiguration(listType, itemId);
-        return false;
-    },
-
-    removeSidebarItem : function(id, from){
-        this.loadArea(['sidebar_'+from], 'sidebar_data_'+from, {remove_item:id, from:from});
-    },
-
-    itemsUpdate : function(){
-        var area = ['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'];
-        // prepare additional fields
-        var fieldsPrepare = {update_items: 1};
-        var info = $('order-items_grid').select('input', 'select', 'textarea');
-        for(var i=0; i<info.length; i++){
-            if(!info[i].disabled && (info[i].type != 'checkbox' || info[i].checked)) {
-                fieldsPrepare[info[i].name] = info[i].getValue();
+            var fields = [];
+            for (var name in params) {
+                fields.push(new Element('input', {type: 'hidden', name: name, value: params[name]}));
             }
-        }
-        fieldsPrepare = Object.extend(fieldsPrepare, this.productConfigureAddFields);
-        this.productConfigureSubmit('quote_items', area, fieldsPrepare);
-        this.orderItemChanged = false;
-    },
-
-    itemsOnchangeBind : function(){
-        var elems = $('order-items_grid').select('input', 'select', 'textarea');
-        for(var i=0; i<elems.length; i++){
-            if(!elems[i].bindOnchange){
-                elems[i].bindOnchange = true;
-                elems[i].observe('change', this.itemChange.bind(this))
+            // add additional fields before triggered submit
+            productConfigure.setBeforeSubmitCallback(listType, function() {
+                productConfigure.addFields(fields);
+            }.bind(this));
+            // response handler
+            productConfigure.setOnLoadIFrameCallback(listType, function(response) {
+                if (!response.ok) {
+                    return;
+                }
+                this.loadArea(['items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true);
+            }.bind(this));
+            // show item configuration
+            itemId = itemId ? itemId : productId;
+            productConfigure.showItemConfiguration(listType, itemId);
+            return false;
+        },
+
+        removeSidebarItem : function(id, from){
+            this.loadArea(['sidebar_'+from], 'sidebar_data_'+from, {remove_item:id, from:from});
+        },
+
+        itemsUpdate : function(){
+            var area = ['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'];
+            // prepare additional fields
+            var fieldsPrepare = {update_items: 1};
+            var info = $('order-items_grid').select('input', 'select', 'textarea');
+            for(var i=0; i<info.length; i++){
+                if(!info[i].disabled && (info[i].type != 'checkbox' || info[i].checked)) {
+                    fieldsPrepare[info[i].name] = info[i].getValue();
+                }
             }
-        }
-    },
-
-    itemChange : function(event){
-        this.giftmessageOnItemChange(event);
-        this.orderItemChanged = true;
-    },
-
-    /**
-     * Submit batch of configured products
-     *
-     * @param listType
-     * @param area
-     * @param fieldsPrepare
-     * @param itemsFilter
-     */
-    productConfigureSubmit : function(listType, area, fieldsPrepare, itemsFilter) {
-        // prepare loading areas and build url
-        area = this.prepareArea(area);
-        this.loadingAreas = area;
-        var url = this.loadBaseUrl + 'block/' + area + '?isAjax=true';
-
-        // prepare additional fields
-        fieldsPrepare = this.prepareParams(fieldsPrepare);
-        fieldsPrepare.reset_shipping = 1;
-        fieldsPrepare.json = 1;
-
-        // create fields
-        var fields = [];
-        for (var name in fieldsPrepare) {
-            fields.push(new Element('input', {type: 'hidden', name: name, value: fieldsPrepare[name]}));
-        }
-        productConfigure.addFields(fields);
+            fieldsPrepare = Object.extend(fieldsPrepare, this.productConfigureAddFields);
+            this.productConfigureSubmit('quote_items', area, fieldsPrepare);
+            this.orderItemChanged = false;
+        },
+
+        itemsOnchangeBind : function(){
+            var elems = $('order-items_grid').select('input', 'select', 'textarea');
+            for(var i=0; i<elems.length; i++){
+                if(!elems[i].bindOnchange){
+                    elems[i].bindOnchange = true;
+                    elems[i].observe('change', this.itemChange.bind(this))
+                }
+            }
+        },
+
+        itemChange : function(event){
+            this.giftmessageOnItemChange(event);
+            this.orderItemChanged = true;
+        },
+
+        /**
+         * Submit batch of configured products
+         *
+         * @param listType
+         * @param area
+         * @param fieldsPrepare
+         * @param itemsFilter
+         */
+        productConfigureSubmit : function(listType, area, fieldsPrepare, itemsFilter) {
+            // prepare loading areas and build url
+            area = this.prepareArea(area);
+            this.loadingAreas = area;
+            var url = this.loadBaseUrl + 'block/' + area + '?isAjax=true';
 
-        // filter items
-        if (itemsFilter) {
-            productConfigure.addItemsFilter(listType, itemsFilter);
-        }
+            // prepare additional fields
+            fieldsPrepare = this.prepareParams(fieldsPrepare);
+            fieldsPrepare.reset_shipping = 1;
+            fieldsPrepare.json = 1;
 
-        // prepare and do submit
-        productConfigure.addListType(listType, {urlSubmit: url});
-        productConfigure.setOnLoadIFrameCallback(listType, function(response){
-            this.loadAreaResponseHandler(response);
-        }.bind(this));
-        productConfigure.submit(listType);
-        // clean
-        this.productConfigureAddFields = {};
-    },
-
-    /**
-     * Show configuration of quote item
-     *
-     * @param itemId
-     */
-    showQuoteItemConfiguration: function(itemId){
-        var listType = 'quote_items';
-        var qtyElement = $('order-items_grid').select('input[name="item\['+itemId+'\]\[qty\]"]')[0];
-        productConfigure.setConfirmCallback(listType, function() {
-            // sync qty of popup and qty of grid
-            var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
-            if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
-                qtyElement.value = confirmedCurrentQty.value;
-            }
-            this.productConfigureAddFields['item['+itemId+'][configured]'] = 1;
-
-        }.bind(this));
-        productConfigure.setShowWindowCallback(listType, function() {
-            // sync qty of grid and qty of popup
-            var formCurrentQty = productConfigure.getCurrentFormQtyElement();
-            if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
-                formCurrentQty.value = qtyElement.value;
-            }
-        }.bind(this));
-        productConfigure.showItemConfiguration(listType, itemId);
-    },
-
-    accountFieldsBind : function(container){
-        if($(container)){
-            var fields = $(container).select('input', 'select', 'textarea');
-            for(var i=0; i<fields.length; i++){
-                if(fields[i].id == 'group_id'){
-                    fields[i].observe('change', this.accountGroupChange.bind(this))
+            // create fields
+            var fields = [];
+            for (var name in fieldsPrepare) {
+                fields.push(new Element('input', {type: 'hidden', name: name, value: fieldsPrepare[name]}));
+            }
+            productConfigure.addFields(fields);
+
+            // filter items
+            if (itemsFilter) {
+                productConfigure.addItemsFilter(listType, itemsFilter);
+            }
+
+            // prepare and do submit
+            productConfigure.addListType(listType, {urlSubmit: url});
+            productConfigure.setOnLoadIFrameCallback(listType, function(response){
+                this.loadAreaResponseHandler(response);
+            }.bind(this));
+            productConfigure.submit(listType);
+            // clean
+            this.productConfigureAddFields = {};
+        },
+
+        /**
+         * Show configuration of quote item
+         *
+         * @param itemId
+         */
+        showQuoteItemConfiguration: function(itemId){
+            var listType = 'quote_items';
+            var qtyElement = $('order-items_grid').select('input[name="item\['+itemId+'\]\[qty\]"]')[0];
+            productConfigure.setConfirmCallback(listType, function() {
+                // sync qty of popup and qty of grid
+                var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
+                if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
+                    qtyElement.value = confirmedCurrentQty.value;
                 }
-                else{
-                    fields[i].observe('change', this.accountFieldChange.bind(this))
+                this.productConfigureAddFields['item['+itemId+'][configured]'] = 1;
+
+            }.bind(this));
+            productConfigure.setShowWindowCallback(listType, function() {
+                // sync qty of grid and qty of popup
+                var formCurrentQty = productConfigure.getCurrentFormQtyElement();
+                if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
+                    formCurrentQty.value = qtyElement.value;
+                }
+            }.bind(this));
+            productConfigure.showItemConfiguration(listType, itemId);
+        },
+
+        accountFieldsBind : function(container){
+            if($(container)){
+                var fields = $(container).select('input', 'select', 'textarea');
+                for(var i=0; i<fields.length; i++){
+                    if(fields[i].id == 'group_id'){
+                        fields[i].observe('change', this.accountGroupChange.bind(this))
+                    }
+                    else{
+                        fields[i].observe('change', this.accountFieldChange.bind(this))
+                    }
                 }
             }
-        }
-    },
+        },
 
-    accountGroupChange : function(){
-        this.loadArea(['data'], true, this.serializeData('order-form_account').toObject());
-    },
+        accountGroupChange : function(){
+            this.loadArea(['data'], true, this.serializeData('order-form_account').toObject());
+        },
 
-    accountFieldChange : function(){
-        this.saveData(this.serializeData('order-form_account'));
-    },
+        accountFieldChange : function(){
+            this.saveData(this.serializeData('order-form_account'));
+        },
 
-    commentFieldsBind : function(container){
-        if($(container)){
-            var fields = $(container).select('input', 'textarea');
-            for(var i=0; i<fields.length; i++)
-                fields[i].observe('change', this.commentFieldChange.bind(this))
-        }
-    },
+        commentFieldsBind : function(container){
+            if($(container)){
+                var fields = $(container).select('input', 'textarea');
+                for(var i=0; i<fields.length; i++)
+                    fields[i].observe('change', this.commentFieldChange.bind(this))
+            }
+        },
 
-    commentFieldChange : function(){
-        this.saveData(this.serializeData('order-comment'));
-    },
+        commentFieldChange : function(){
+            this.saveData(this.serializeData('order-comment'));
+        },
 
-    giftmessageFieldsBind : function(container){
-        if($(container)){
-            var fields = $(container).select('input', 'textarea');
-            for(var i=0; i<fields.length; i++)
-                fields[i].observe('change', this.giftmessageFieldChange.bind(this))
-        }
-    },
-
-    giftmessageFieldChange : function(){
-        this.giftMessageDataChanged = true;
-    },
-
-    giftmessageOnItemChange : function(event) {
-        var element = Event.element(event);
-        if(element.name.indexOf("giftmessage") != -1 && element.type == "checkbox" && !element.checked) {
-            var messages = $("order-giftmessage").select('textarea');
-            var name;
-            for(var i=0; i<messages.length; i++) {
-                name = messages[i].id.split("_");
-                if(name.length < 2) continue;
-                if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") {
-                    alert({
-                        content: "First, clean the Message field in Gift Message form"
-                    });
-                    element.checked = true;
+        giftmessageFieldsBind : function(container){
+            if($(container)){
+                var fields = $(container).select('input', 'textarea');
+                for(var i=0; i<fields.length; i++)
+                    fields[i].observe('change', this.giftmessageFieldChange.bind(this))
+            }
+        },
+
+        giftmessageFieldChange : function(){
+            this.giftMessageDataChanged = true;
+        },
+
+        giftmessageOnItemChange : function(event) {
+            var element = Event.element(event);
+            if(element.name.indexOf("giftmessage") != -1 && element.type == "checkbox" && !element.checked) {
+                var messages = $("order-giftmessage").select('textarea');
+                var name;
+                for(var i=0; i<messages.length; i++) {
+                    name = messages[i].id.split("_");
+                    if(name.length < 2) continue;
+                    if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") {
+                        alert("First, clean the Message field in Gift Message form");
+                        element.checked = true;
+                    }
                 }
             }
-        }
-    },
+        },
+
+        loadArea : function(area, indicator, params){
+            var deferred = new jQuery.Deferred();
+            var url = this.loadBaseUrl;
+            if (area) {
+                area = this.prepareArea(area);
+                url += 'block/' + area;
+            }
+            if (indicator === true) indicator = 'html-body';
+            params = this.prepareParams(params);
+            params.json = true;
+            if (!this.loadingAreas) this.loadingAreas = [];
+            if (indicator) {
+                this.loadingAreas = area;
+                new Ajax.Request(url, {
+                    parameters:params,
+                    loaderArea: indicator,
+                    onSuccess: function(transport) {
+                        var response = transport.responseText.evalJSON();
+                        this.loadAreaResponseHandler(response);
+                        deferred.resolve();
+                    }.bind(this)
+                });
+            }
+            else {
+                new Ajax.Request(url, {
+                    parameters:params,
+                    loaderArea: indicator,
+                    onSuccess: function(transport) {
+                        deferred.resolve();
+                    }
+                });
+            }
+            if (typeof productConfigure != 'undefined' && area instanceof Array && area.indexOf('items') != -1) {
+                productConfigure.clean('quote_items');
+            }
+            return deferred.promise();
+        },
 
-    loadArea : function(area, indicator, params){
-        var deferred = new jQuery.Deferred();
-        var url = this.loadBaseUrl;
-        if (area) {
-            area = this.prepareArea(area);
-            url += 'block/' + area;
-        }
-        if (indicator === true) indicator = 'html-body';
-        params = this.prepareParams(params);
-        params.json = true;
-        if (!this.loadingAreas) this.loadingAreas = [];
-        if (indicator) {
-            this.loadingAreas = area;
-            new Ajax.Request(url, {
-                parameters:params,
-                loaderArea: indicator,
-                onSuccess: function(transport) {
-                    var response = transport.responseText.evalJSON();
-                    this.loadAreaResponseHandler(response);
-                    deferred.resolve();
-                }.bind(this)
-            });
-        }
-        else {
-            new Ajax.Request(url, {
-                parameters:params,
-                loaderArea: indicator,
-                onSuccess: function(transport) {
-                    deferred.resolve();
+        loadAreaResponseHandler : function (response) {
+            if (response.error) {
+                alert(response.message);
+            }
+            if (response.ajaxExpired && response.ajaxRedirect) {
+                setLocation(response.ajaxRedirect);
+            }
+            if (!this.loadingAreas) {
+                this.loadingAreas = [];
+            }
+            if (typeof this.loadingAreas == 'string') {
+                this.loadingAreas = [this.loadingAreas];
+            }
+            if (this.loadingAreas.indexOf('message') == -1) {
+                this.loadingAreas.push('message');
+            }
+            if (response.header) {
+                jQuery('.page-actions-inner').attr('data-title', response.header);
+            }
+
+            for (var i = 0; i < this.loadingAreas.length; i++) {
+                var id = this.loadingAreas[i];
+                if ($(this.getAreaId(id))) {
+                    if ('message' != id || response[id]) {
+                        $(this.getAreaId(id)).update(response[id]);
+                    }
+                    if ($(this.getAreaId(id)).callback) {
+                        this[$(this.getAreaId(id)).callback]();
+                    }
                 }
-            });
-        }
-        if (typeof productConfigure != 'undefined' && area instanceof Array && area.indexOf('items') != -1) {
-            productConfigure.clean('quote_items');
-        }
-        return deferred.promise();
-    },
+            }
+        },
 
-    loadAreaResponseHandler : function (response) {
-        if (response.error) {
-            alert({
-                content: response.message
-            });
-        }
-        if (response.ajaxExpired && response.ajaxRedirect) {
-            setLocation(response.ajaxRedirect);
-        }
-        if (!this.loadingAreas) {
-            this.loadingAreas = [];
-        }
-        if (typeof this.loadingAreas == 'string') {
-            this.loadingAreas = [this.loadingAreas];
-        }
-        if (this.loadingAreas.indexOf('message') == -1) {
-            this.loadingAreas.push('message');
-        }
-        if (response.header) {
-            jQuery('.page-actions-inner').attr('data-title', response.header);
-        }
+        prepareArea : function(area) {
+            if (this.giftMessageDataChanged) {
+                return area.without('giftmessage');
+            }
+            return area;
+        },
+
+        saveData : function(data){
+            this.loadArea(false, false, data);
+        },
+
+        showArea : function(area){
+            var id = this.getAreaId(area);
+            if($(id)) {
+                $(id).show();
+                this.areaOverlay();
+            }
+        },
 
-        for (var i = 0; i < this.loadingAreas.length; i++) {
-            var id = this.loadingAreas[i];
-            if ($(this.getAreaId(id))) {
-                if ('message' != id || response[id]) {
-                    $(this.getAreaId(id)).update(response[id]);
-                }
-                if ($(this.getAreaId(id)).callback) {
-                    this[$(this.getAreaId(id)).callback]();
-                }
+        hideArea : function(area){
+            var id = this.getAreaId(area);
+            if($(id)) {
+                $(id).hide();
+                this.areaOverlay();
             }
-        }
-    },
+        },
 
-    prepareArea : function(area) {
-        if (this.giftMessageDataChanged) {
-            return area.without('giftmessage');
-        }
-        return area;
-    },
-
-    saveData : function(data){
-        this.loadArea(false, false, data);
-    },
-
-    showArea : function(area){
-        var id = this.getAreaId(area);
-        if($(id)) {
-            $(id).show();
-            this.areaOverlay();
-        }
-    },
+        areaOverlay : function()
+        {
+            $H(order.overlayData).each(function(e){
+                e.value.fx();
+            });
+        },
 
-    hideArea : function(area){
-        var id = this.getAreaId(area);
-        if($(id)) {
-            $(id).hide();
-            this.areaOverlay();
-        }
-    },
-
-    areaOverlay : function()
-    {
-        $H(order.overlayData).each(function(e){
-            e.value.fx();
-        });
-    },
-
-    getAreaId : function(area){
-        return 'order-'+area;
-    },
-
-    prepareParams : function(params){
-        if (!params) {
-            params = {};
-        }
-        if (!params.customer_id) {
-            params.customer_id = this.customerId;
-        }
-        if (!params.store_id) {
-            params.store_id = this.storeId;
-        }
-        if (!params.currency_id) {
-            params.currency_id = this.currencyId;
-        }
-        if (!params.form_key) {
-            params.form_key = FORM_KEY;
-        }
+        getAreaId : function(area){
+            return 'order-'+area;
+        },
 
-        if (this.isPaymentValidationAvailable()) {
-            var data = this.serializeData('order-billing_method');
-            if (data) {
-                data.each(function(value) {
-                    params[value[0]] = value[1];
-                });
+        prepareParams : function(params){
+            if (!params) {
+                params = {};
             }
-        } else {
-            params['payment[method]'] = this.paymentMethod;
-        }
-        return params;
-    },
-
-    /**
-     * Prevent from sending credit card information to server for some payment methods
-     *
-     * @returns {boolean}
-     */
-    isPaymentValidationAvailable : function(){
-        return ((typeof this.paymentMethod) == 'undefined'
+            if (!params.customer_id) {
+                params.customer_id = this.customerId;
+            }
+            if (!params.store_id) {
+                params.store_id = this.storeId;
+            }
+            if (!params.currency_id) {
+                params.currency_id = this.currencyId;
+            }
+            if (!params.form_key) {
+                params.form_key = FORM_KEY;
+            }
+
+            if (this.isPaymentValidationAvailable()) {
+                var data = this.serializeData('order-billing_method');
+                if (data) {
+                    data.each(function(value) {
+                        params[value[0]] = value[1];
+                    });
+                }
+            } else {
+                params['payment[method]'] = this.paymentMethod;
+            }
+            return params;
+        },
+
+        /**
+         * Prevent from sending credit card information to server for some payment methods
+         *
+         * @returns {boolean}
+         */
+        isPaymentValidationAvailable : function(){
+            return ((typeof this.paymentMethod) == 'undefined'
             || this.excludedPaymentMethods.indexOf(this.paymentMethod) == -1);
-    },
+        },
 
-    serializeData : function(container){
-        var fields = $(container).select('input', 'select', 'textarea');
-        var data = Form.serializeElements(fields, true);
+        serializeData : function(container){
+            var fields = $(container).select('input', 'select', 'textarea');
+            var data = Form.serializeElements(fields, true);
 
-        return $H(data);
-    },
+            return $H(data);
+        },
 
-    toggleCustomPrice: function(checkbox, elemId, tierBlock) {
-        if (checkbox.checked) {
-            $(elemId).disabled = false;
-            $(elemId).show();
-            if($(tierBlock)) $(tierBlock).hide();
-        }
-        else {
-            $(elemId).disabled = true;
-            $(elemId).hide();
-            if($(tierBlock)) $(tierBlock).show();
-        }
-    },
-
-    submit : function()
-    {
-        jQuery('#edit_form').trigger('processStart');
-        jQuery('#edit_form').trigger('submitOrder');
-    },
-
-    _realSubmit: function () {
-        var disableAndSave = function() {
-            disableElements('save');
-            jQuery('#edit_form').on('invalid-form.validate', function() {
-                enableElements('save');
-                jQuery('#edit_form').trigger('processStop');
-                jQuery('#edit_form').off('invalid-form.validate');
-            });
-            jQuery('#edit_form').triggerHandler('save');
-        }
-        if (this.orderItemChanged) {
-            if (confirm('You have item changes')) {
+        toggleCustomPrice: function(checkbox, elemId, tierBlock) {
+            if (checkbox.checked) {
+                $(elemId).disabled = false;
+                $(elemId).show();
+                if($(tierBlock)) $(tierBlock).hide();
+            }
+            else {
+                $(elemId).disabled = true;
+                $(elemId).hide();
+                if($(tierBlock)) $(tierBlock).show();
+            }
+        },
+
+        submit : function()
+        {
+            jQuery('#edit_form').trigger('processStart');
+            jQuery('#edit_form').trigger('submitOrder');
+        },
+
+        _realSubmit: function () {
+            var disableAndSave = function() {
+                disableElements('save');
+                jQuery('#edit_form').on('invalid-form.validate', function() {
+                    enableElements('save');
+                    jQuery('#edit_form').trigger('processStop');
+                    jQuery('#edit_form').off('invalid-form.validate');
+                });
+                jQuery('#edit_form').triggerHandler('save');
+            }
+            if (this.orderItemChanged) {
+                if (confirm('You have item changes')) {
+                    disableAndSave();
+                } else {
+                    this.itemsUpdate();
+                }
+            } else {
                 disableAndSave();
+            }
+        },
+
+        overlay : function(elId, show, observe) {
+            if (typeof(show) == 'undefined') { show = true; }
+
+            var orderObj = this;
+            var obj = this.overlayData.get(elId);
+            if (!obj) {
+                obj = {
+                    show: show,
+                    el: elId,
+                    order: orderObj,
+                    fx: function(event) {
+                        this.order.processOverlay(this.el, this.show);
+                    }
+                };
+                obj.bfx = obj.fx.bindAsEventListener(obj);
+                this.overlayData.set(elId, obj);
             } else {
-                this.itemsUpdate();
+                obj.show = show;
+                Event.stopObserving(window, 'resize', obj.bfx);
             }
-        } else {
-            disableAndSave();
-        }
-    },
-
-    overlay : function(elId, show, observe) {
-        if (typeof(show) == 'undefined') { show = true; }
-
-        var orderObj = this;
-        var obj = this.overlayData.get(elId);
-        if (!obj) {
-            obj = {
-                show: show,
-                el: elId,
-                order: orderObj,
-                fx: function(event) {
-                    this.order.processOverlay(this.el, this.show);
-                }
-            };
-            obj.bfx = obj.fx.bindAsEventListener(obj);
-            this.overlayData.set(elId, obj);
-        } else {
-            obj.show = show;
-            Event.stopObserving(window, 'resize', obj.bfx);
-        }
 
-        Event.observe(window, 'resize', obj.bfx);
+            Event.observe(window, 'resize', obj.bfx);
 
-        this.processOverlay(elId, show);
-    },
+            this.processOverlay(elId, show);
+        },
 
-    processOverlay : function(elId, show) {
-        var el = $(elId);
+        processOverlay : function(elId, show) {
+            var el = $(elId);
 
-        if (!el) {
-            return;
-        }
+            if (!el) {
+                return;
+            }
 
-        var parentEl = el.up(1);
-        if (show) {
-            parentEl.removeClassName('ignore-validate');
-        } else {
-            parentEl.addClassName('ignore-validate');
-        }
+            var parentEl = el.up(1);
+            if (show) {
+                parentEl.removeClassName('ignore-validate');
+            } else {
+                parentEl.addClassName('ignore-validate');
+            }
 
-        if (Prototype.Browser.IE) {
-            parentEl.select('select').each(function (elem) {
-                if (show) {
-                    elem.needShowOnSuccess = false;
-                    elem.style.visibility = '';
-                } else {
-                    elem.style.visibility = 'hidden';
-                    elem.needShowOnSuccess = true;
-                }
+            if (Prototype.Browser.IE) {
+                parentEl.select('select').each(function (elem) {
+                    if (show) {
+                        elem.needShowOnSuccess = false;
+                        elem.style.visibility = '';
+                    } else {
+                        elem.style.visibility = 'hidden';
+                        elem.needShowOnSuccess = true;
+                    }
+                });
+            }
+
+            parentEl.setStyle({position: 'relative'});
+            el.setStyle({
+                display: show ? 'none' : ''
             });
-        }
+        },
 
-        parentEl.setStyle({position: 'relative'});
-        el.setStyle({
-            display: show ? 'none' : ''
-        });
-    },
-
-    validateVat: function(parameters)
-    {
-        var params = {
-            country: $(parameters.countryElementId).value,
-            vat: $(parameters.vatElementId).value
-        };
-
-        if (this.storeId !== false) {
-            params.store_id = this.storeId;
-        }
+        validateVat: function(parameters)
+        {
+            var params = {
+                country: $(parameters.countryElementId).value,
+                vat: $(parameters.vatElementId).value
+            };
+
+            if (this.storeId !== false) {
+                params.store_id = this.storeId;
+            }
 
-        var currentCustomerGroupId = $(parameters.groupIdHtmlId).value;
-
-        new Ajax.Request(parameters.validateUrl, {
-            parameters: params,
-            onSuccess: function(response) {
-                var message = '';
-                var groupActionRequired = null;
-                try {
-                    response = response.responseText.evalJSON();
-
-                    if (null === response.group) {
-                        if (true === response.valid) {
-                            message = parameters.vatValidMessage;
-                        } else if (true === response.success) {
-                            message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
+            var currentCustomerGroupId = $(parameters.groupIdHtmlId).value;
+
+            new Ajax.Request(parameters.validateUrl, {
+                parameters: params,
+                onSuccess: function(response) {
+                    var message = '';
+                    var groupActionRequired = null;
+                    try {
+                        response = response.responseText.evalJSON();
+
+                        if (null === response.group) {
+                            if (true === response.valid) {
+                                message = parameters.vatValidMessage;
+                            } else if (true === response.success) {
+                                message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
+                            } else {
+                                message = parameters.vatValidationFailedMessage;
+                            }
                         } else {
-                            message = parameters.vatValidationFailedMessage;
-                        }
-                    } else {
-                        if (true === response.valid) {
-                            message = parameters.vatValidAndGroupValidMessage;
-                            if (0 === response.group) {
-                                message = parameters.vatValidAndGroupInvalidMessage;
+                            if (true === response.valid) {
+                                message = parameters.vatValidAndGroupValidMessage;
+                                if (0 === response.group) {
+                                    message = parameters.vatValidAndGroupInvalidMessage;
+                                    groupActionRequired = 'inform';
+                                } else if (currentCustomerGroupId != response.group) {
+                                    message = parameters.vatValidAndGroupChangeMessage;
+                                    groupActionRequired = 'change';
+                                }
+                            } else if (response.success) {
+                                message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
+                                groupActionRequired = 'inform';
+                            } else {
+                                message = parameters.vatValidationFailedMessage;
                                 groupActionRequired = 'inform';
-                            } else if (currentCustomerGroupId != response.group) {
-                                message = parameters.vatValidAndGroupChangeMessage;
-                                groupActionRequired = 'change';
                             }
-                        } else if (response.success) {
-                            message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
-                            groupActionRequired = 'inform';
-                        } else {
-                            message = parameters.vatValidationFailedMessage;
-                            groupActionRequired = 'inform';
                         }
+                    } catch (e) {
+                        message = parameters.vatValidationFailedMessage;
+                    }
+                    if (null === groupActionRequired) {
+                        alert(message);
                     }
-                } catch (e) {
-                    message = parameters.vatValidationFailedMessage;
+                    else {
+                        this.processCustomerGroupChange(
+                            parameters.groupIdHtmlId,
+                            message,
+                            parameters.vatCustomerGroupMessage,
+                            parameters.vatGroupErrorMessage,
+                            response.group,
+                            groupActionRequired
+                        );
+                    }
+                }.bind(this)
+            });
+        },
+
+        processCustomerGroupChange: function(groupIdHtmlId, message, customerGroupMessage, errorMessage, groupId, action)
+        {
+            var groupMessage = '';
+            try {
+                var currentCustomerGroupId = $(groupIdHtmlId).value;
+                var currentCustomerGroupTitle =
+                    $$('#' + groupIdHtmlId + ' > option[value=' + currentCustomerGroupId + ']')[0].text;
+                var customerGroupOption = $$('#' + groupIdHtmlId + ' > option[value=' + groupId + ']')[0];
+                groupMessage = customerGroupMessage.replace(/%s/, customerGroupOption.text);
+            } catch (e) {
+                groupMessage = errorMessage;
+                if (action === 'change') {
+                    message = '';
+                    action = 'inform';
                 }
-                if (null === groupActionRequired) {
-                    alert({
-                        content: message
+            }
+
+            if (action === 'change') {
+                var confirmText = message.replace(/%s/, customerGroupOption.text);
+                confirmText = confirmText.replace(/%s/, currentCustomerGroupTitle);
+                if (confirm(confirmText)) {
+                    $$('#' + groupIdHtmlId + ' option').each(function (o) {
+                        o.selected = o.readAttribute('value') == groupId;
                     });
+                    this.accountGroupChange();
                 }
-                else {
-                    this.processCustomerGroupChange(
-                        parameters.groupIdHtmlId,
-                        message,
-                        parameters.vatCustomerGroupMessage,
-                        parameters.vatGroupErrorMessage,
-                        response.group,
-                        groupActionRequired
-                    );
-                }
-            }.bind(this)
-        });
-    },
-
-    processCustomerGroupChange: function(groupIdHtmlId, message, customerGroupMessage, errorMessage, groupId, action)
-    {
-        var groupMessage = '';
-        try {
-            var currentCustomerGroupId = $(groupIdHtmlId).value;
-            var currentCustomerGroupTitle =
-                $$('#' + groupIdHtmlId + ' > option[value=' + currentCustomerGroupId + ']')[0].text;
-            var customerGroupOption = $$('#' + groupIdHtmlId + ' > option[value=' + groupId + ']')[0];
-            groupMessage = customerGroupMessage.replace(/%s/, customerGroupOption.text);
-        } catch (e) {
-            groupMessage = errorMessage;
-            if (action === 'change') {
-                message = '';
-                action = 'inform';
+            } else if (action === 'inform') {
+                alert(message + '\n' + groupMessage);
             }
         }
+    };
 
-        if (action === 'change') {
-            var confirmText = message.replace(/%s/, customerGroupOption.text);
-            confirmText = confirmText.replace(/%s/, currentCustomerGroupTitle);
-            if (confirm(confirmText)) {
-                $$('#' + groupIdHtmlId + ' option').each(function (o) {
-                    o.selected = o.readAttribute('value') == groupId;
-                });
-                this.accountGroupChange();
+    window.OrderFormArea = Class.create();
+    OrderFormArea.prototype = {
+        _name: null,
+        _node: null,
+        _parent: null,
+        _callbackName: null,
+
+        initialize: function(name, node, parent){
+            if(!node)
+                return;
+            this._name = name;
+            this._parent = parent;
+            this._callbackName = node.callback;
+            if (typeof this._callbackName == 'undefined') {
+                this._callbackName = name + 'Loaded';
+                node.callback = this._callbackName;
             }
-        } else if (action === 'inform') {
-            alert({
-                content: message + '\n' + groupMessage
-            });
-        }
-    }
-};
-
-window.OrderFormArea = Class.create();
-OrderFormArea.prototype = {
-    _name: null,
-    _node: null,
-    _parent: null,
-    _callbackName: null,
-
-    initialize: function(name, node, parent){
-        if(!node)
-            return;
-        this._name = name;
-        this._parent = parent;
-        this._callbackName = node.callback;
-        if (typeof this._callbackName == 'undefined') {
-            this._callbackName = name + 'Loaded';
-            node.callback = this._callbackName;
+            parent[this._callbackName] = parent[this._callbackName].wrap((function (proceed){
+                proceed();
+                this.onLoad();
+            }).bind(this));
+
+            this.setNode(node);
+        },
+
+        setNode: function(node){
+            if (!node.callback) {
+                node.callback = this._callbackName;
+            }
+            this.node = node;
+        },
+
+        onLoad: function(){
         }
-        parent[this._callbackName] = parent[this._callbackName].wrap((function (proceed){
-            proceed();
-            this.onLoad();
-        }).bind(this));
+    };
+
+    window.ControlButton = Class.create();
+
+    ControlButton.prototype = {
+        _label: '',
+        _node: null,
+
+        initialize: function(label){
+            this._label = label;
+            this._node = new Element('button', {
+                'class': 'action-secondary action-add',
+                'type':  'button'
+            });
+        },
 
-        this.setNode(node);
-    },
+        onClick: function(){
+        },
 
-    setNode: function(node){
-        if (!node.callback) {
-            node.callback = this._callbackName;
+        insertIn: function(element, position){
+            var node = Object.extend(this._node),
+                content = {};
+            node.observe('click', this.onClick);
+            node.update('<span>' + this._label + '</span>');
+            content[position] = node;
+            Element.insert(element, content);
         }
-        this.node = node;
-    },
-
-    onLoad: function(){
-    }
-};
-
-window.ControlButton = Class.create();
-
-ControlButton.prototype = {
-    _label: '',
-    _node: null,
-
-    initialize: function(label){
-        this._label = label;
-        this._node = new Element('button', {
-            'class': 'action-secondary action-add',
-            'type':  'button'
-        });
-    },
-
-    onClick: function(){
-    },
-
-    insertIn: function(element, position){
-        var node = Object.extend(this._node),
-            content = {};
-        node.observe('click', this.onClick);
-        node.update('<span>' + this._label + '</span>');
-        content[position] = node;
-        Element.insert(element, content);
-    }
-};
+    };
 
 });
-- 
GitLab


From c693ed90e7533247dfe17beaa5c3db61bbe551a6 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 10:52:02 +0300
Subject: [PATCH 161/420] MAGETWO-42995: Stabilize functional tests

---
 .../catalog/product/composite/configure.js    | 42 ++++---------------
 .../adminhtml/web/order/create/scripts.js     | 39 ++++++++++++-----
 2 files changed, 37 insertions(+), 44 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
index 633664aefe4..3b609c83226 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
@@ -6,7 +6,8 @@ define([
     "jquery",
     "jquery/ui",
     "mage/translate",
-    "prototype"
+    "prototype",
+    'Magento_Ui/js/modal/modal'
 ], function(jQuery){
 
     window.ProductConfigure = Class.create();
@@ -41,45 +42,20 @@ define([
          * Initialize object
          */
         initialize: function() {
-            this._initWindowElements();
             var self = this;
-            this.dialog = jQuery('#product_composite_configure').dialog({
-                autoOpen: false,
+
+            this.dialog = jQuery('#product_composite_configure').modal({
                 title: jQuery.mage.__('Configure Product'),
-                modal: true,
-                minWidth: 500,
-                width: '75%',
-                dialogClass: 'popup-window',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    jQuery(this).addClass('magento_message').css('max-height', '500px');
-                    jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-                },
-                close: function() {
-                    jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                },
+                type: 'slide',
                 buttons: [{
                     text: jQuery.mage.__('OK'),
                     'class': 'action-primary',
-                    click: function() {
+                    click: function () {
                         self.onConfirmBtn();
                     }
-                }, {
-                    id: "product_composite_configure_form_cancel",
-                    text: "Cancel",
-                    'class': 'action-close',
-                    click: function() {
-                        jQuery(this).dialog("close");
-                    }
                 }]
             });
+            this._initWindowElements();
         },
 
         /**
@@ -440,7 +416,7 @@ define([
          * Show configuration window
          */
         _showWindow: function() {
-            this.dialog.dialog('open');
+            this.dialog.modal('openModal');
             //this._toggleSelectsExceptBlock(false);
 
             if (Object.isFunction(this.showWindowCallback[this.current.listType])) {
@@ -472,7 +448,7 @@ define([
          * Close configuration window
          */
         _closeWindow: function() {
-            this.dialog.dialog('close');
+            this.dialog.modal('closeModal');
             //this.blockWindow.style.display = 'none';
             //this.clean('window');
         },
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 44dcfdfd226..6e74d57c566 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -4,10 +4,12 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/confirm',
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype",
     "Magento_Catalog/catalog/product/composite/configure"
-], function(jQuery){
+], function(jQuery, confirm, alert){
 
     window.AdminOrder = new Class.create();
 
@@ -34,7 +36,7 @@ define([
             this.isOnlyVirtualProduct = false;
             this.excludedPaymentMethods = [];
             this.summarizePrice = true;
-            Event.observe(window, 'load',  (function(){
+            Event.observe(window, 'load', (function(){
                 this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
                 this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
                     addControlButton: function(button){
@@ -704,11 +706,18 @@ define([
         },
 
         clearShoppingCart : function(confirmMessage){
-            if (confirm(confirmMessage)) {
-                this.collectElementsValue = false;
-                order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
-                this.collectElementsValue = true;
-            }
+            var self = this;
+
+            confirm({
+                content: confirmMessage,
+                actions: {
+                    confirm: function() {
+                        self.collectElementsValue = false;
+                        order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
+                        self.collectElementsValue = true;
+                    }
+                }
+            });
         },
 
         sidebarApplyChanges : function(auxiliaryParams) {
@@ -944,7 +953,9 @@ define([
                     name = messages[i].id.split("_");
                     if(name.length < 2) continue;
                     if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") {
-                        alert("First, clean the Message field in Gift Message form");
+                        alert({
+                            content: "First, clean the Message field in Gift Message form"
+                        });
                         element.checked = true;
                     }
                 }
@@ -991,7 +1002,9 @@ define([
 
         loadAreaResponseHandler : function (response) {
             if (response.error) {
-                alert(response.message);
+                alert({
+                    content: response.message
+                });
             }
             if (response.ajaxExpired && response.ajaxRedirect) {
                 setLocation(response.ajaxRedirect);
@@ -1256,7 +1269,9 @@ define([
                         message = parameters.vatValidationFailedMessage;
                     }
                     if (null === groupActionRequired) {
-                        alert(message);
+                        alert({
+                            content: message
+                        });
                     }
                     else {
                         this.processCustomerGroupChange(
@@ -1299,7 +1314,9 @@ define([
                     this.accountGroupChange();
                 }
             } else if (action === 'inform') {
-                alert(message + '\n' + groupMessage);
+                alert({
+                    content: message + '\n' + groupMessage
+                });
             }
         }
     };
-- 
GitLab


From 649ccda5b09b50f86141859a0859bbe3de707d29 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Wed, 30 Sep 2015 11:23:43 +0300
Subject: [PATCH 162/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../adminhtml/templates/backup/dialogs.phtml  | 28 ++++++-----
 .../templates/catalog/category/tree.phtml     |  6 +--
 .../Ui/view/base/web/js/modal/confirm.js      |  4 +-
 .../source/components/_file-insertion.less    |  1 -
 .../css/source/components/_modals_extend.less | 47 ++++++++++++-------
 5 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index 87e5e91454e..a1653c260bf 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -65,12 +65,12 @@
                     <div class="message message-warning"><?php /* @escapeNotVerified */ echo __('Please specify backup creation option.')?></div>
                 </div>
                 <form action="" method="post" id="backup-form" class="form-inline">
-                    <fieldset class="fieldset form-list question">
-                        <div class="field">
-                            <label for="backup_name" class="label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label>
-                            <div class="control">
+                    <fieldset class="admin__fieldset form-list question">
+                        <div class="admin__field field">
+                            <label for="backup_name" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label>
+                            <div class="admin__field-control">
                                 <input type="text" name="backup_name" id="backup_name"
-                                       class="required-entry validate-alphanum-with-spaces validate-length maximum-length-50"
+                                       class="admin__control-text required-entry validate-alphanum-with-spaces validate-length maximum-length-50"
                                        maxlength="50" />
                                 <div class="note">
                                     <?php /* @escapeNotVerified */ echo __('Please use only letters (a-z or A-Z), numbers (0-9) or spaces in this field.'); ?>
@@ -78,17 +78,19 @@
                             </div>
                         </div>
 
-                        <div class="field maintenance-checkbox-container">
-                            <div class="control">
-                                <input type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
-                                <label for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __('Please put your store into maintenance mode during backup.')?></label>
+                        <div class="admin__field field maintenance-checkbox-container">
+                            <label for="backup_maintenance_mode" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Maintenance mode')?></span></label>
+                            <div class="admin__field-control admin__field-option">
+                                <input class="admin__control-checkbox" type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
+                                <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __(' Please put your store into maintenance mode during backup.')?></label>
                             </div>
                         </div>
 
-                        <div class="field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;">
-                            <div class="control">
-                                <input type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
-                                <label for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label>
+                        <div class="admin__field field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;">
+                            <label for="exclude_media" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Exclude')?></span></label>
+                            <div class="admin__field-control admin__field-option">
+                                <input class="admin__control-checkbox" type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
+                                <label class="admin__field-label" for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label>
                             </div>
                         </div>
                     </fieldset>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 488cd41ef3a..f4a8af62a1f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -444,18 +444,18 @@
                 pd.splice(pd.length - 1, 1);
 
                 jQuery('[data-id="information-dialog-category"]').modal({
-                    modalClass: 'modal-system-messages confirm',
+                    modalClass: 'confirm',
                     title:  jQuery.mage.__('Warning message'),
                     buttons: [{
                         text: 'Cancel',
-                        class: 'action-tertiary',
+                        class: 'action-secondary',
                         click: function () {
                             reRenderTree();
                             this.closeModal();
                         }
                     }, {
                         text: 'Ok',
-                        class: 'action-secondary',
+                        class: 'action-primary',
                         click: function () {
                             (function ($) {
                                 $.ajax({
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
index 73994016418..098cb866974 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -35,7 +35,7 @@ define([
             },
             buttons: [{
                 text: $.mage.__('Cancel'),
-                class: 'action-tertiary action-dismiss',
+                class: 'action-secondary action-dismiss',
 
                 /**
                  * Click handler.
@@ -45,7 +45,7 @@ define([
                 }
             }, {
                 text: $.mage.__('OK'),
-                class: 'action-secondary action-accept',
+                class: 'action-primary action-accept',
 
                 /**
                  * Click handler.
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
index 76b8b557f2c..47a4c425614 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -26,7 +26,6 @@
     }
 }
 
-
 .file-row {
     border: 1px solid @color-gray68;
     margin: @indent__xs 0;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 06f270e7973..6e4eb905c8e 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -24,6 +24,9 @@
 @modal-popup-footer-button__margin: 2rem;
 @modal-popup-footer-button__padding: 1.4rem;
 @modal-popup-footer-button__font-size: 1.5rem;
+@modal-popup-footer-button__color: @color-brownie;
+@modal-prompt-message__padding: 2rem;
+//
 
 .modal-popup,
 .modal-slide {
@@ -51,11 +54,20 @@
 }
 
 .modal-popup {
-    &.confirm {
+    &.prompt {
+        .prompt-message {
+            padding: @modal-prompt-message__padding 0;
+            input[type="text"] {
+                width: 100%;
+            }
+        }
+    }
+    &.confirm,
+    &.prompt {
         .modal-inner-wrap {
-            left: 50%;
-            margin-left: -(@modal-popup-confirm__width / 2);
-            width: @modal-popup-confirm__width;
+            .message {
+                background: @color-white;
+            }
         }
     }
     &.modal-system-messages {
@@ -83,32 +95,31 @@
             }
         }
     }
+
     .modal-title {
         font-size: @modal-popup-title__font-size;
         margin-right: @modal-popup-title__font-size + @modal-popup__padding + 1rem;
     }
-    .modal-title + .action-close {
-        padding: @modal-popup__padding;
+
+    .action-close {
+        padding: @modal-popup__padding @modal-popup__padding 0 0;
         &:active{
             padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
             padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
         }
     }
-    .action-close {
-        padding: @modal-popup__padding / 2.5;
-        &:active {
-            padding-top: @modal-popup__padding / 3 + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-            padding-right: @modal-popup__padding / 3 + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
-        }
-    }
+
     .modal-footer {
         text-align: right;
         padding-top: 0;
-        button {
-            font-size: @modal-popup-footer-button__font-size;
-            margin-left: @modal-popup-footer-button__margin;
-            padding-bottom: @modal-popup-footer-button__padding;
-            padding-top: @modal-popup-footer-button__padding;
+
+        .action-primary {
+            &:extend(.abs-action-secondary all);
+            &:extend(.abs-action-l all);
+        }
+        .action-secondary {
+            &:extend(.abs-action-tertiary all);
+            &:extend(.abs-action-l all);
         }
     }
 }
-- 
GitLab


From 0ff20610e41351d0cf8632ae7fe41340e7351276 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 11:49:56 +0300
Subject: [PATCH 163/420] MAGETWO-42995: Stabilize functional tests

---
 .../view/adminhtml/web/catalog/product/composite/configure.js   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
index 3b609c83226..030962f2f06 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
@@ -44,6 +44,7 @@ define([
         initialize: function() {
             var self = this;
 
+            this._initWindowElements();
             this.dialog = jQuery('#product_composite_configure').modal({
                 title: jQuery.mage.__('Configure Product'),
                 type: 'slide',
@@ -55,7 +56,6 @@ define([
                     }
                 }]
             });
-            this._initWindowElements();
         },
 
         /**
-- 
GitLab


From c452ebc4919c0be0a1ee45592fbde8f87a117feb Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Wed, 30 Sep 2015 12:32:30 +0300
Subject: [PATCH 164/420] MAGETWO-39933: [static scan] Dom XSS: #15723873 and
 #15723887

---
 .../adminhtml/templates/page/locale.phtml     | 21 +++++---
 lib/web/mage/validation/url.js                | 50 +++++++++++++++++++
 2 files changed, 63 insertions(+), 8 deletions(-)
 create mode 100644 lib/web/mage/validation/url.js

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
index fd4ac471185..03347fbcbe6 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
@@ -11,16 +11,21 @@
     <label class="label" for="footer_interface_locale"><span><?php /* @escapeNotVerified */ echo __('Interface Locale'); ?></span></label>
     <?php /* @escapeNotVerified */ echo $block->getLocaleSelect(); ?>
     <script>
-        (function () {
-            'use strict';
+        require([
+                'mage/validation/url'
+            ],
+            function (urlValidator) {
+                'use strict';
 
-            var elem = document.getElementById('footer_interface_locale');
+                var elem = document.getElementById('footer_interface_locale');
 
-            function onChange() {
-                window.location.href = '<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' + elem.value + '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>';
-            }
+                function onChange() {
+                    urlValidator.redirect('<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' +
+                    elem.value +
+                    '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>');
+                }
 
-            elem.addEventListener('change', onChange);
-        })();
+                elem.addEventListener('change', onChange);
+            });
     </script>
 </div>
diff --git a/lib/web/mage/validation/url.js b/lib/web/mage/validation/url.js
new file mode 100644
index 00000000000..5361d952278
--- /dev/null
+++ b/lib/web/mage/validation/url.js
@@ -0,0 +1,50 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([], function () {
+    'use strict';
+
+    return {
+
+        /**
+         * Redirects to the url if it is considered safe
+         *
+         * @param {String} path - url to be redirected to
+         */
+        redirect: function (path) {
+            path = this.sanitize(path);
+
+            if (this.validate(path)) {
+                window.location.href = path;
+            }
+        },
+
+        /**
+         * Validates url
+         *
+         * @param {Object} path - url to be validated
+         * @returns {Boolean}
+         */
+        validate: function (path) {
+            var hostname = window.location.hostname;
+
+            if (path.indexOf(hostname) === -1 ||
+                path.indexOf('javascript:') !== -1 ||
+                path.indexOf('vbscript:') !== -1) {
+                return false;
+            }
+        },
+
+        /**
+         * Sanitize url, replacing disallowed chars
+         *
+         * @param {Sring} path - url to be normalized
+         * @returns {String}
+         */
+        sanitize: function (path) {
+            return path.Replace('[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]', '');
+        }
+    };
+});
-- 
GitLab


From 2cd7c0907c7f79f13c0ebce878fdd4cbc56c2a74 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Wed, 30 Sep 2015 13:05:24 +0300
Subject: [PATCH 165/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Corrected layout on Backup
- Added correct button classes on Prompt
---
 .../adminhtml/templates/backup/dialogs.phtml  | 20 +++++++++++--------
 .../Ui/view/base/web/js/modal/prompt.js       |  4 ++--
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index a1653c260bf..c4829a4305a 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -66,13 +66,13 @@
                 </div>
                 <form action="" method="post" id="backup-form" class="form-inline">
                     <fieldset class="admin__fieldset form-list question">
-                        <div class="admin__field field">
+                        <div class="admin__field field _required">
                             <label for="backup_name" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label>
                             <div class="admin__field-control">
                                 <input type="text" name="backup_name" id="backup_name"
                                        class="admin__control-text required-entry validate-alphanum-with-spaces validate-length maximum-length-50"
                                        maxlength="50" />
-                                <div class="note">
+                                <div class="admin__field-note">
                                     <?php /* @escapeNotVerified */ echo __('Please use only letters (a-z or A-Z), numbers (0-9) or spaces in this field.'); ?>
                                 </div>
                             </div>
@@ -80,17 +80,21 @@
 
                         <div class="admin__field field maintenance-checkbox-container">
                             <label for="backup_maintenance_mode" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Maintenance mode')?></span></label>
-                            <div class="admin__field-control admin__field-option">
-                                <input class="admin__control-checkbox" type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
-                                <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __(' Please put your store into maintenance mode during backup.')?></label>
+                            <div class="admin__field-control">
+                                <div class="admin__field-option">
+                                    <input class="admin__control-checkbox" type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
+                                    <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __(' Please put your store into maintenance mode during backup.')?></label>
+                                </div>
                             </div>
                         </div>
 
                         <div class="admin__field field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;">
                             <label for="exclude_media" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Exclude')?></span></label>
-                            <div class="admin__field-control admin__field-option">
-                                <input class="admin__control-checkbox" type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
-                                <label class="admin__field-label" for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label>
+                            <div class="admin__field-control">
+                                <div class="admin__field-option">
+                                    <input class="admin__control-checkbox" type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
+                                    <label class="admin__field-label" for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label>
+                                </div>
                             </div>
                         </div>
                     </fieldset>
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 7fc43693cc6..2d4b9411ffb 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -36,7 +36,7 @@ define([
             },
             buttons: [{
                 text: $.mage.__('Cancel'),
-                class: 'action-tertiary action-dismiss',
+                class: 'action-secondary action-dismiss',
 
                 /**
                  * Click handler.
@@ -46,7 +46,7 @@ define([
                 }
             }, {
                 text: $.mage.__('OK'),
-                class: 'action-secondary action-accept',
+                class: 'action-primary action-accept',
 
                 /**
                  * Click handler.
-- 
GitLab


From bdb42b72787bfa8d6f243d266470379ac8ab410a Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Wed, 30 Sep 2015 13:23:09 +0300
Subject: [PATCH 166/420] MAGETWO-42990: Stabilization

---
 .../view/adminhtml/web/js/new-category-dialog.js       |  1 -
 app/code/Magento/Ui/view/base/web/js/modal/modal.js    | 10 ++++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js b/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js
index d70f2e17193..44f3371cf93 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js
@@ -32,7 +32,6 @@ define([
                 .on('suggestbeforeselect', function (event) {
                     clearParentCategory();
                     $(event.target).treeSuggest('close');
-                    $('#new_category_name').focus();
                 });
 
             $.validator.addMethod('validate-parent-category', function () {
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 6fa55677176..7f5ca9d373a 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -255,8 +255,8 @@ define([
          * Remove events listener when modal is closed.
          */
         _removeKeyListener: function () {
-            this.modal.find(this.options.focusableStart).bind('focusin', this._tabSwitcher);
-            this.modal.find(this.options.focusableEnd).bind('focusin', this._tabSwitcher);
+            this.modal.find(this.options.focusableStart).unbind('focusin', this._tabSwitcher);
+            this.modal.find(this.options.focusableEnd).unbind('focusin', this._tabSwitcher);
             this.modal.unbind('keydown', this.keyEventSwitcher);
         },
 
@@ -265,9 +265,11 @@ define([
          * @param {Object} e - event
          */
         _tabSwitcher: function(e){
-            if ($(e.target).is(this.options.focusableStart)) {
+            var target = $(e.target);
+
+            if (target.is(this.options.focusableStart)) {
                 this._setFocus('start');
-            } else if ($(e.target).is(this.options.focusableEnd)) {
+            } else if (target.is(this.options.focusableEnd)) {
                 this._setFocus('end');
             }
         },
-- 
GitLab


From 1030dd5a1de2575af3baa77e318b4de50eff46b1 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 13:38:09 +0300
Subject: [PATCH 167/420] MAGETWO-42995: Stabilize functional tests

---
 .../Sales/view/adminhtml/web/order/create/scripts.js       | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 6e74d57c566..79cda24e8a6 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -8,7 +8,8 @@ define([
     'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype",
-    "Magento_Catalog/catalog/product/composite/configure"
+    "Magento_Catalog/catalog/product/composite/configure",
+    'Magento_Ui/js/lib/view/utils/async'
 ], function(jQuery, confirm, alert){
 
     window.AdminOrder = new Class.create();
@@ -36,10 +37,11 @@ define([
             this.isOnlyVirtualProduct = false;
             this.excludedPaymentMethods = [];
             this.summarizePrice = true;
-            Event.observe(window, 'load', (function(){
+            jQuery.async('#order-items', (function(){
                 this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
                 this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
                     addControlButton: function(button){
+                        console.log(this.node)
                         var controlButtonArea = $(this.node).select('.actions')[0];
                         if (typeof controlButtonArea != 'undefined') {
                             var buttons = controlButtonArea.childElements();
@@ -72,6 +74,7 @@ define([
                 this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) {
                     proceed();
                     if ($(searchAreaId) && !$(searchAreaId).visible()) {
+                        console.log(searchButton)
                         this.addControlButton(searchButton);
                     }
                 });
-- 
GitLab


From d7712646afd777b481b6406567c7aa923ebe8cca Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Wed, 30 Sep 2015 13:41:57 +0300
Subject: [PATCH 168/420] MAGETWO-42762: Improve performance of table rendering

- Partially fix sticky header bugs
- Add basic rendering of inline editing
- Remove unused plugin
---
 .../Theme/view/base/requirejs-config.js       |  1 -
 .../base/web/js/grid/columns/multiselect.js   |  2 +-
 .../base/web/js/grid/editing/editor-view.js   | 14 ++++---
 .../view/base/web/js/grid/filters/filters.js  |  9 ++++
 .../Ui/view/base/web/js/grid/search/search.js |  2 +-
 .../Ui/view/base/web/js/lib/ko/bind/scope.js  | 34 ++-------------
 .../web/templates/grid/editing/field.html     | 24 +++++------
 .../base/web/templates/grid/editing/row.html  | 19 ++++++---
 .../base/web/templates/grid/sticky/chips.html |  4 +-
 .../web/templates/grid/sticky/filters.html    |  2 +-
 .../web/templates/grid/sticky/listing.html    |  7 +---
 .../User/view/adminhtml/web/app-config.js     |  1 -
 .../requirejs/plugin/id-normalizer-test.js    | 42 -------------------
 .../Test/Js/_files/blacklist/magento.txt      |  2 -
 .../mage/requirejs/plugin/id-normalizer.js    | 28 -------------
 15 files changed, 50 insertions(+), 141 deletions(-)
 delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
 delete mode 100644 lib/web/mage/requirejs/plugin/id-normalizer.js

diff --git a/app/code/Magento/Theme/view/base/requirejs-config.js b/app/code/Magento/Theme/view/base/requirejs-config.js
index c40eb944f07..f1f164431d4 100644
--- a/app/code/Magento/Theme/view/base/requirejs-config.js
+++ b/app/code/Magento/Theme/view/base/requirejs-config.js
@@ -21,7 +21,6 @@ var config = {
         "mage/captcha": ["prototype"],
         "mage/common": ["jquery"],
         "mage/new-gallery": ["jquery"],
-        "mage/requirejs/plugin/id-normalizer": ["jquery"],
         "mage/webapi": ["jquery"],
         "jquery/ui": ["jquery"],
         "MutationObserver": ["es6-collections"],
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
index 0563dd0fbb8..80ab7e814ae 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
@@ -441,7 +441,7 @@ define([
         },
 
         /**
-         * Overrides base method, cause this component
+         * Overrides base method, because this component
          * can't have global field action.
          *
          * @returns {Boolean} False.
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
index 9bd9d5318fe..608cf7257b9 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
@@ -25,11 +25,13 @@ define([
                 '<!-- /ko -->',
             rowTmpl:
                 '<!-- ko with: _editor -->' +
-                    '<!-- ko scope: formRecordName($index(), true) -->' +
-                        '<!-- ko template: rowTmpl --><!-- /ko -->' +
-                    '<!-- /ko -->' +
-                    '<!-- ko if: isActive($index(), true) && isSingleEditing() -->' +
-                        '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' +
+                    '<!-- ko if: isActive($row()._rowIndex, true) -->' +
+                        '<!-- ko scope: formRecordName($row()._rowIndex, true) -->' +
+                            '<!-- ko template: rowTmpl --><!-- /ko -->' +
+                        '<!-- /ko -->' +
+                        '<!-- ko if: isSingleEditing() -->' +
+                            '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' +
+                        '<!-- /ko -->' +
                     '<!-- /ko -->' +
                '<!-- /ko -->'
         },
@@ -134,7 +136,7 @@ define([
 
             return {
                 visible: ko.computed(function () {
-                    return !model.isActive(ctx.$index(), true);
+                    return !model.isActive(ctx.$row()._rowIndex, true);
                 })
             };
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 48b812a3de8..bcfbf06de08 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -341,6 +341,15 @@ define([
             return this;
         },
 
+        /**
+         * Returns number of applied filters.
+         *
+         * @returns {Number}
+         */
+        countActive: function () {
+            return this.active.length;
+        },
+
         /**
          * Extract previews of a specified filters.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
index 9df534c8d59..f273c6dcd37 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
@@ -115,7 +115,7 @@ define([
         updatePreview: function () {
             var preview = [];
 
-            if (this.value()) {
+            if (this.value) {
                 preview.push({
                     elem: this,
                     label: this.label,
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
index 2f9d78541d7..1e8ce81a7e0 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
@@ -1,6 +1,4 @@
 /**
- * @category    storage
- * @package     test
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
@@ -15,30 +13,6 @@ define([
 
     var i18n = $.mage.__;
 
-    /**
-     * Fetches components from registry and stores them to context object, then passes it to callback function.
-     * @param {Object} components - map, representing components to be attached to the new context.
-     * @param {Function} callback - Function to be called when components are fetched.
-     */
-    function getMultiple(components, callback) {
-        var key,
-            paths = [],
-            context = {};
-
-        for (key in components) {
-            paths.push(components[key]);
-        }
-
-        registry.get(paths, function () {
-
-            for (key in components) {
-                context[key] = registry.get(components[key]);
-            }
-
-            callback(context);
-        });
-    }
-
     /**
      * Creates child context with passed component param as $data. Extends context with $t helper.
      * Applies bindings to descendant nodes.
@@ -58,8 +32,6 @@ define([
         ko.applyBindingsToDescendants(component, el);
     }
 
-    ko.virtualElements.allowedBindings.scope = true;
-
     ko.bindingHandlers.scope = {
 
         /**
@@ -85,13 +57,13 @@ define([
             var component = valueAccessor(),
                 apply = applyComponents.bind(this, el, bindingContext);
 
-            if (typeof component === 'object') {
-                getMultiple(component, apply);
-            } else if (typeof component === 'string') {
+            if (typeof component === 'string') {
                 registry.get(component, apply);
             } else if (typeof component === 'function') {
                 component(apply);
             }
         }
     };
+
+    ko.virtualElements.allowedBindings.scope = true;
 });
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html
index 77cc47351c8..a01514ff191 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html
@@ -5,16 +5,14 @@
  */
 -->
 
-<td data-bind="visible: $parent.getColumn(index).visible">
-    <div
-        class="admin__field-control"
-        data-bind="css: {
-            _error: error(),
-            _focus: focused()
-        }">
-        <!-- ko template: getTemplate() --><!-- /ko -->
-        <label
-            class="admin__field-error"
-            data-bind="attr: { for: uid }, text: error, visible: error() && focused()"></label>
-    </div>
-</td>
+<div
+    class="admin__field-control"
+    data-bind="css: {
+        _error: error(),
+        _focus: focused()
+    }">
+    <!-- ko template: getTemplate() --><!-- /ko -->
+    <label
+        class="admin__field-error"
+        data-bind="attr: { for: uid }, text: error, visible: error() && focused()"></label>
+</div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
index 892eaf35872..96223e79c71 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
@@ -8,21 +8,28 @@
     data-part="body.row"
     class="data-grid-editable-row"
     data-bind="
-        visible: active,
-        '_odd-row': !!($index() % 2),
+        '_odd-row': !!($row()._rowIndex % 2),
         foreach: {
             data: fields,
-            as: 'field'
+            as: '$col'
         }">
+    <!-- ko if: $parent.getColumn(index).visible -->
+
     <!-- ko if: $parent.isActionsColumn($data) -->
     <td class="data-grid-actions-cell">
-        <span class="data-grid-row-changed" data-bind="css: { _changed: $parent.hasChanges() }">
+        <span class="data-grid-row-changed" data-bind="css: {_changed: $parent.hasChanges()}">
             <span class="data-grid-row-changed-tooltip" data-bind="i18n: 'Record contains unsaved changes.'"></span>
         </span>
     </td>
     <!-- /ko -->
-
     <!-- ko ifnot: $parent.isActionsColumn($data) -->
-        <!-- ko template: $data.isEditor ? $parent.fieldTmpl : getBody() --><!-- /ko -->
+        <!-- ko if: $col.isEditor -->
+        <td data-bind="template: $parent.fieldTmpl"></td>
+        <!-- /ko -->
+        <!-- ko ifnot: $col.isEditor -->
+        <td data-bind="template: $col.getBody(), css: $col.getFieldClass()"></td>
+        <!-- /ko -->
+    <!-- /ko -->
+
     <!-- /ko -->
 </tr>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html
index e396c223d8a..178e9309796 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html
@@ -6,7 +6,7 @@
 -->
 <div
     class="admin__data-grid-filters-current"
-    data-bind="css: {_show: hasData()}">
+    data-bind="css: {_show: hasPreviews()}">
     <div class="admin__current-filters-title-wrap">
         <span
             class="admin__current-filters-title"
@@ -50,7 +50,7 @@
                 i18n: 'Clear all',
                 click: clear,
                 attr: {
-                    'data-action': hasData() ? 'grid-filter-reset' : ''
+                    'data-action': hasPreviews() ? 'grid-filter-reset' : ''
                 }"
             ></button>
     </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html
index 9a7e06d5699..25c27cfb3ca 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html
@@ -17,6 +17,6 @@
                  attr: {disabled: !hasVisible()}">
             <span data-bind="i18n: 'Filters'"></span>
         </button>
-        <span class="filters-active" data-bind="text: $data.active().length || ''"></span> <!-- Added the amount of selected filters -->
+        <span class="filters-active" data-bind="text: countActive() || ''"></span> <!-- Added the amount of selected filters -->
     </div>
 </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
index 037677c496c..880b52f4dcd 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
@@ -7,12 +7,7 @@
 <div class="admin__data-grid-wrap" data-role="sticky-el-root">
     <table class="data-grid">
         <thead>
-            <tr data-bind="
-                foreach: {
-                    data: visibleColumns,
-                    as: '$col'
-                }"
-            >
+            <tr data-bind="foreach: {data: visibleColumns, as: '$col'}">
                 <!-- ko template: getHeader() --><!-- /ko -->
             </tr>
         </thead>
diff --git a/app/code/Magento/User/view/adminhtml/web/app-config.js b/app/code/Magento/User/view/adminhtml/web/app-config.js
index 25bc4e7b6ca..378afec02a6 100644
--- a/app/code/Magento/User/view/adminhtml/web/app-config.js
+++ b/app/code/Magento/User/view/adminhtml/web/app-config.js
@@ -11,7 +11,6 @@ require.config({
         "mage/adminhtml/backup": ["prototype"],
         "mage/captcha": ["prototype"],
         "mage/common": ["jquery"],
-        "mage/requirejs/plugin/id-normalizer": ["jquery"],
         "mage/webapi": ["jquery"],
         "ko": { exports: "ko" },
         "moment": { exports: "moment" }
diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
deleted file mode 100644
index a52466bda12..00000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint globalstrict: true*/
-
-"use strict";
-
-/*jshint undef: false, newcap: false*/
-var IdNormalizerTest = TestCase('IdNormalizerTest');
-
-IdNormalizerTest.prototype.setUp = function() {
-    var defineArgs = jsunit.requirejsUtil.getDefineArgsInScript('lib/web/mage/requirejs/plugin/id-normalizer.js');
-    assertNotUndefined('There expected to be a define() call', defineArgs);
-    assertEquals('Wrong number of arguments in the define() call', 1, defineArgs.length);
-
-    this.normalizer = defineArgs[0];
-    assertObject(this.normalizer);
-    assertFunction(this.normalizer.normalize);
-    assertFunction(this.normalizer.load);
-};
-
-IdNormalizerTest.prototype.testNormalize = function () {
-    var actual = this.normalizer.normalize('Magento_Catalog::foo/bar.js');
-    assertEquals('Magento_Catalog/foo/bar.js', actual);
-};
-
-IdNormalizerTest.prototype.testLoad = function () {
-    // Check that load() is just a proxy
-    var modulePassed, onloadPassed;
-    var parentRequire = function (moduleIn, onloadIn) {
-        modulePassed = moduleIn;
-        onloadPassed = onloadIn;
-    };
-    var onload = function (){};
-
-    this.normalizer.load('module', parentRequire, onload);
-
-    assertEquals('module', modulePassed);
-    assertSame(onload, onloadPassed);
-};
-
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index 759ea7b2843..187af92e37a 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -414,7 +414,6 @@ app/code/Magento/Ui/view/base/web/js/lib/ko/bind/i18n.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/keyboard.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/mage-init.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/extender/observable_array.js
 app/code/Magento/Ui/view/base/web/js/lib/loader.js
 app/code/Magento/Ui/view/base/web/js/lib/spinner.js
@@ -573,7 +572,6 @@ lib/web/mage/mage.js
 lib/web/mage/menu.js
 lib/web/mage/popup-window.js
 lib/web/mage/redirect-url.js
-lib/web/mage/requirejs/plugin/id-normalizer.js
 lib/web/mage/requirejs/resolver.js
 lib/web/mage/smart-keyboard-handler.js
 lib/web/mage/sticky.js
diff --git a/lib/web/mage/requirejs/plugin/id-normalizer.js b/lib/web/mage/requirejs/plugin/id-normalizer.js
deleted file mode 100644
index b9c44c68e33..00000000000
--- a/lib/web/mage/requirejs/plugin/id-normalizer.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint globalstrict: true*/
-/*global define: false*/
-"use strict";
-
-/**
- * This is simple normalization plugin for RequireJS, which converts Magento modular references to normalized paths.
- * E.g. 'Magento_Catalog::js/scripts.js' -> 'Magento_Catalog/js/scripts.js'.
- */
-define({
-    /**
-     * Normalize Magento modular ID
-     */
-    normalize: function (name, normalize) {
-        return name.replace('::', '/');
-    },
-
-    /**
-     * load() is not needed for this plugin, but is required by RequireJS.
-     * So it is just proxy over default implementation.
-     */
-    load: function (name, parentRequire, onload, config) {
-        parentRequire([name], onload);
-    }
-});
-- 
GitLab


From 58f893c1892cbc5478a357b6f4c07eb1e2fe1438 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Wed, 30 Sep 2015 14:29:58 +0300
Subject: [PATCH 169/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../templates/catalog/product/attribute/set/main.phtml |  2 +-
 app/code/Magento/Ui/view/base/web/js/modal/prompt.js   | 10 +++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index 35ecbf32540..06edcfbaa25 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -248,7 +248,7 @@
                         addGroup : function() {
                             prompt({
                                 content: "<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>",
-                                value: "Some value",
+                                value: "",
                                 actions: {
                                     confirm: function (group_name) {
                                         group_name = group_name.strip();
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
index 2d4b9411ffb..0866050dcaf 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -65,13 +65,21 @@ define([
             this._super();
             this.modal.find(this.options.modalContent).append(
                 '<div class="prompt-message">' +
-                    '<input data-role="promptField" class="admin__control-text" type="text"/>' +
+                    '<input data-role="promptField" id="prompt-field" class="admin__control-text" type="text"/>' +
                 '</div>'
             );
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
 
+        /**
+         * Compile template and append to wrapper.
+         */
+        _renderModal: function () {
+            this._super();
+            this.element.wrap('<label for="prompt-field"></label>');
+        },
+
         /**
          * Remove widget
          */
-- 
GitLab


From 9d0d453e5423cc782acf88ac9c9d2c3f23762013 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Wed, 30 Sep 2015 14:33:21 +0300
Subject: [PATCH 170/420] MAGETWO-42838: Combine filter and column components
 definition

---
 ...onfigurable_associated_product_listing.xml | 31 -------------------
 .../ui_component/customer_online_grid.xml     | 30 ------------------
 .../sales_order_creditmemo_grid.xml           |  9 +-----
 .../ui_component/sales_order_grid.xml         |  9 +-----
 .../ui_component/sales_order_invoice_grid.xml |  9 +-----
 .../sales_order_shipment_grid.xml             |  9 +-----
 .../sales_order_view_creditmemo_grid.xml      |  9 +-----
 .../sales_order_view_invoice_grid.xml         |  9 +-----
 .../sales_order_view_shipment_grid.xml        |  9 +-----
 9 files changed, 7 insertions(+), 117 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index 789c0308c18..f249e5a013f 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -40,17 +40,6 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-<<<<<<< HEAD
-                    <item name="columnsProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns</item>
-                    <item name="links" xsi:type="array">
-                        <item name="applied" xsi:type="string">not-save-filter</item>
-                    </item>
-                    <item name="childDefaults" xsi:type="array">
-                        <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item>
-                        <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.${ $.index }:visible</item>
-                        </item>
-=======
                     <item name="params" xsi:type="array">
                         <item name="filters_modifier" xsi:type="array" />
                     </item>
@@ -58,19 +47,12 @@
                     <item name="dataScope" xsi:type="string">filters</item>
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item>
->>>>>>> magento2/develop
                     </item>
                 </item>
                 <item name="observers" xsi:type="array">
                     <item name="filters" xsi:type="object">Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters</item>
                 </item>
             </argument>
-<<<<<<< HEAD
-            <filterSelect name="attribute_set_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\AttributeSet\Options</argument>
-                </argument>
-=======
             <filterInput name="entity_id">
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
@@ -81,16 +63,12 @@
                 </argument>
             </filterInput>
             <filterInput name="name">
->>>>>>> magento2/develop
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
                         <item name="dataScope" xsi:type="string">name</item>
                         <item name="label" xsi:type="string" translate="true">Name</item>
                     </item>
                 </argument>
-<<<<<<< HEAD
-            </filterSelect>
-=======
             </filterInput>
             <filterInput name="sku">
                 <argument name="data" xsi:type="array">
@@ -129,7 +107,6 @@
                     </argument>
                 </filterInput>
             </filterRange>
->>>>>>> magento2/develop
             <filterSelect name="status">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument>
@@ -147,8 +124,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.ids</item>
-<<<<<<< HEAD
-=======
                     <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
@@ -172,7 +147,6 @@
                             <item name="label" xsi:type="string" translate="true">200</item>
                         </item>
                     </item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </paging>
@@ -188,10 +162,7 @@
                             <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
                         </item>
                     </item>
-<<<<<<< HEAD
-=======
                     <item name="controlVisibility" xsi:type="boolean">true</item>
->>>>>>> magento2/develop
                 </item>
             </item>
         </argument>
@@ -228,7 +199,6 @@
         <column name="name">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="filter" xsi:type="string">text</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
@@ -247,7 +217,6 @@
         <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
                     <item name="sortOrder" xsi:type="number">70</item>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
index 21d5374a9c1..fa20b95ee7f 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
@@ -135,7 +135,6 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
         <column name="remote_addr">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -143,20 +142,6 @@
                 </item>
             </argument>
         </column>
-=======
-        <!--<column name="remote_addr">-->
-            <!--<argument name="data" xsi:type="array">-->
-                <!--<item name="js_config" xsi:type="array">-->
-                    <!--<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>-->
-                <!--</item>-->
-                <!--<item name="config" xsi:type="array">-->
-                    <!--<item name="dataType" xsi:type="string">text</item>-->
-                    <!--<item name="align" xsi:type="string">left</item>-->
-                    <!--<item name="label" xsi:type="string" translate="true">IP Address</item>-->
-                <!--</item>-->
-            <!--</argument>-->
-        <!--</column>-->
->>>>>>> magento2/develop
         <column name="first_visit_at">
             <argument name="data" xsi:type="array">                
                 <item name="config" xsi:type="array">
@@ -185,7 +170,6 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
         <column name="last_url">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -193,19 +177,5 @@
                 </item>
             </argument>
         </column>
-=======
-        <!--<column name="last_url">-->
-            <!--<argument name="data" xsi:type="array">-->
-                <!--<item name="js_config" xsi:type="array">-->
-                    <!--<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>-->
-                <!--</item>-->
-                <!--<item name="config" xsi:type="array">-->
-                    <!--<item name="dataType" xsi:type="string">text</item>-->
-                    <!--<item name="align" xsi:type="string">left</item>-->
-                    <!--<item name="label" xsi:type="string" translate="true">Last URL</item>-->
-                <!--</item>-->
-            <!--</argument>-->
-        <!--</column>-->
->>>>>>> magento2/develop
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
index 8a6050218d4..a460290d3d3 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
@@ -366,16 +366,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -383,7 +377,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/creditmemo/view</item>
                     <item name="urlEntityParamName" xsi:type="string">creditmemo_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index 825f60395a8..7f3c8f82e49 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -405,16 +405,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -422,7 +416,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/order/view</item>
                     <item name="urlEntityParamName" xsi:type="string">order_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
index 5b594ae7e7f..c1c95bc9dcf 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
@@ -327,16 +327,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">increment_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -344,7 +338,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/invoice/view</item>
                     <item name="urlEntityParamName" xsi:type="string">invoice_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
index 6ace208430b..c54aa1fc54a 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
@@ -320,16 +320,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -337,7 +331,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/shipment/view</item>
                     <item name="urlEntityParamName" xsi:type="string">shipment_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
index f7f38e2291b..5f4a803aaca 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
@@ -369,16 +369,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderCreditmemoActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -386,7 +380,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/order_creditmemo/view</item>
                     <item name="urlEntityParamName" xsi:type="string">creditmemo_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
index c6bcaeb4cb2..4d4ae3fcec5 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
@@ -330,16 +330,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderInvoiceActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">increment_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -347,7 +341,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/order_invoice/view</item>
                     <item name="urlEntityParamName" xsi:type="string">invoice_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index e357d0e3b75..c408a7cd5ae 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -318,16 +318,10 @@
                 </item>
             </argument>
         </column>
-<<<<<<< HEAD
-        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\OrderShipmentActions">
-=======
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
->>>>>>> magento2/develop
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-<<<<<<< HEAD
-=======
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Action</item>
                     <item name="data_type" xsi:type="string">actions</item>
@@ -335,7 +329,6 @@
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">adminhtml/order_shipment/view</item>
                     <item name="urlEntityParamName" xsi:type="string">shipment_id</item>
->>>>>>> magento2/develop
                 </item>
             </argument>
         </actionsColumn>
-- 
GitLab


From 5758a10ab15747a5d90f8398555b1987cbfd0431 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Wed, 30 Sep 2015 14:44:11 +0300
Subject: [PATCH 171/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../backend/web/css/source/components/_file-insertion.less      | 2 +-
 .../backend/web/css/source/components/_modals_extend.less       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
index 47a4c425614..cdc66d47755 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -18,8 +18,8 @@
             display: none;
         }
         input {
+            -moz-transforms: none;
             border: none;
-            -moz-transform: none;
             opacity: 1;
             position: static;
         }
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 6e4eb905c8e..e095afd0a1e 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -111,7 +111,7 @@
 
     .modal-footer {
         text-align: right;
-        padding-top: 0;
+        padding-top: @modal-slide__padding;
 
         .action-primary {
             &:extend(.abs-action-secondary all);
-- 
GitLab


From 1a8861d0eac38cb55f77643bf61ec33897d893d0 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Wed, 30 Sep 2015 14:49:47 +0300
Subject: [PATCH 172/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../backend/web/css/source/components/_modals_extend.less        | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index e095afd0a1e..26853322da6 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -26,6 +26,7 @@
 @modal-popup-footer-button__font-size: 1.5rem;
 @modal-popup-footer-button__color: @color-brownie;
 @modal-prompt-message__padding: 2rem;
+
 //
 
 .modal-popup,
-- 
GitLab


From cc3ff48a77575ae240ed4a019539f95ebde79b4b Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Wed, 30 Sep 2015 14:55:45 +0300
Subject: [PATCH 173/420] MAGETWO-42762: Improve performance of table rendering

- Commit not related to the main story
- Fix sticky header rendering (was not smooth enough)
---
 .../Ui/view/base/web/js/grid/sticky/sticky.js | 20 +++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
index e779851a931..03dd04d5385 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
@@ -364,13 +364,22 @@ define([
             return this.otherStickyElsSize;
         },
 
+        /**
+         * Get original bulk row height, if is visible
+         *
+         * @returns {Number}.
+         */
+        getBulkRowHeight: function () {
+            return this.listingNode.find(this.bulkRowSelector).filter(':visible').height();
+        },
+
         /**
          * Get top Y coord of the sticky header
          *
          * @returns {Number}.
          */
         getListingTopYCoord: function () {
-            var bulkRowHeight = (this.listingNode.find(this.bulkRowSelector) || {}).height();
+            var bulkRowHeight = this.getBulkRowHeight();
 
             return this.listingNode.find('tbody').offset().top -
                 this.containerNode.height() -
@@ -387,8 +396,8 @@ define([
             var stickyTopCondition = this.getListingTopYCoord() - this.getOtherStickyElementsSize(),
                 stickyBottomCondition = this.listingNode.offset().top +
                     this.listingNode.height() -
-                    $(window).scrollTop() -
-                    (this.listingNode.find(this.bulkRowSelector) || {}).height() -
+                    $(window).scrollTop() +
+                    this.getBulkRowHeight() -
                     this.getOtherStickyElementsSize();
 
             return stickyTopCondition < 0 && stickyBottomCondition > 0;
@@ -449,9 +458,12 @@ define([
          */
         resizeBulk: function () {
             var bulk = this.containerNode.find(this.bulkRowHeaderSelector)[0];
-            if (bulk){
+
+            if (bulk) {
                 $(bulk).innerWidth(this.getListingWidth());
             }
+
+            return this;
         },
 
         /**
-- 
GitLab


From 87ed57f03b0693ddd8cfc120b068f5ed98df4100 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 15:05:13 +0300
Subject: [PATCH 174/420] MAGETWO-42995: Stabilize functional tests

---
 .../Magento/Sales/view/adminhtml/web/order/create/scripts.js    | 2 --
 1 file changed, 2 deletions(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 79cda24e8a6..90f8b04c5c7 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -41,7 +41,6 @@ define([
                 this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
                 this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
                     addControlButton: function(button){
-                        console.log(this.node)
                         var controlButtonArea = $(this.node).select('.actions')[0];
                         if (typeof controlButtonArea != 'undefined') {
                             var buttons = controlButtonArea.childElements();
@@ -74,7 +73,6 @@ define([
                 this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) {
                     proceed();
                     if ($(searchAreaId) && !$(searchAreaId).visible()) {
-                        console.log(searchButton)
                         this.addControlButton(searchButton);
                     }
                 });
-- 
GitLab


From b6fe3faae8f3546b0ea4f18ec398c9c42e3ca019 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 15:18:16 +0300
Subject: [PATCH 175/420] MAGETWO-42995: Stabilize functional tests

---
 app/code/Magento/Review/Block/Adminhtml/Edit.php | 2 --
 1 file changed, 2 deletions(-)

diff --git a/app/code/Magento/Review/Block/Adminhtml/Edit.php b/app/code/Magento/Review/Block/Adminhtml/Edit.php
index 1bb6c7a8e47..6f2e129b0b6 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Edit.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Edit.php
@@ -179,7 +179,6 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container
         }
 
         $this->_formInitScripts[] = '
-            require(["prototype"], function() {
             var review = {
                 updateRating: function() {
                         elements = [
@@ -206,7 +205,6 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container
            Event.observe(window, \'load\', function(){
                  Event.observe($("select_stores"), \'change\', review.updateRating);
            });
-           });
         ';
     }
 
-- 
GitLab


From e10d00447ad01508a0aac87bb0fc4e046946252a Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 15:38:48 +0300
Subject: [PATCH 176/420] MAGETWO-42995: Stabilize functional tests

---
 .../app/Magento/Ui/Test/Block/Adminhtml/Modal.php     | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
index 928a74c283a..96ed46ae296 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
@@ -7,7 +7,6 @@
 namespace Magento\Ui\Test\Block\Adminhtml;
 
 use Magento\Mtf\Block\Block;
-use Magento\Mtf\Client\Locator;
 
 /**
  * Alert, confirm, prompt block.
@@ -43,7 +42,7 @@ class Modal extends Block
     protected $inputFieldSelector = '[data-role="promptField"]';
 
     /**
-     * Press OK on an alert, confirm, prompt a dialog
+     * Press OK on an alert, confirm, prompt a dialog.
      *
      * @return void
      */
@@ -53,7 +52,7 @@ class Modal extends Block
     }
 
     /**
-     * Press Cancel on an alert, confirm, prompt a dialog
+     * Press Cancel on an alert, confirm, prompt a dialog.
      *
      * @return void
      */
@@ -63,7 +62,7 @@ class Modal extends Block
     }
 
     /**
-     * Press Close on an alert, confirm, prompt a dialog
+     * Press Close on an alert, confirm, prompt a dialog.
      *
      * @return void
      */
@@ -73,7 +72,7 @@ class Modal extends Block
     }
 
     /**
-     * Get the alert dialog text
+     * Get the alert dialog text.
      *
      * @return string
      */
@@ -83,7 +82,7 @@ class Modal extends Block
     }
 
     /**
-     * Set the text to a prompt popup
+     * Set the text to a prompt popup.
      *
      * @param string $text
      * @return void
-- 
GitLab


From e9f8e529a137747adba0a947ef5a5fa375b28e62 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Wed, 30 Sep 2015 15:44:00 +0300
Subject: [PATCH 177/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

---
 .../Backup/view/adminhtml/templates/backup/dialogs.phtml  | 2 +-
 .../backend/web/css/source/components/_modals_extend.less | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index c4829a4305a..d5dcd13cf0f 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -83,7 +83,7 @@
                             <div class="admin__field-control">
                                 <div class="admin__field-option">
                                     <input class="admin__control-checkbox" type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
-                                    <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __(' Please put your store into maintenance mode during backup.')?></label>
+                                    <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __('Please put your store into maintenance mode during backup.')?></label>
                                 </div>
                             </div>
                         </div>
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 26853322da6..2a009ea2f11 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -25,6 +25,8 @@
 @modal-popup-footer-button__padding: 1.4rem;
 @modal-popup-footer-button__font-size: 1.5rem;
 @modal-popup-footer-button__color: @color-brownie;
+@modal-popup-colored__background: @color-lazy-sun;
+@modal-popup-colorless__background: @color-white;
 @modal-prompt-message__padding: 2rem;
 
 //
@@ -58,7 +60,7 @@
     &.prompt {
         .prompt-message {
             padding: @modal-prompt-message__padding 0;
-            input[type="text"] {
+            input {
                 width: 100%;
             }
         }
@@ -67,13 +69,13 @@
     &.prompt {
         .modal-inner-wrap {
             .message {
-                background: @color-white;
+                background: @modal-popup-colorless__background;
             }
         }
     }
     &.modal-system-messages {
         .modal-inner-wrap {
-            background: @color-lazy-sun;
+            background: @modal-popup-colored__background;
         }
     }
     &._image-box {
-- 
GitLab


From a8a483447d8c8095c8a6ff6f36b2803973024830 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 15:46:41 +0300
Subject: [PATCH 178/420] MAGETWO-42995: Stabilize functional tests

---
 .../tests/app/Magento/Backend/Test/Block/Widget/Grid.php | 9 ++++++++-
 .../app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php     | 9 ++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index 0f41bf8b978..65017b9c85d 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -188,6 +188,13 @@ abstract class Grid extends Block
      */
     protected $rowPattern = '//tbody/tr[%s]';
 
+    /**
+     *  Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Get backend abstract block
      *
@@ -340,7 +347,7 @@ abstract class Grid extends Block
     {
         $this->_rootElement->find($this->massactionSubmit, Locator::SELECTOR_CSS)->click();
         if ($acceptAlert) {
-            $element = $this->browser->find('.confirm._show[data-role=modal]');
+            $element = $this->browser->find($this->confirmModal);
             /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
             $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
             $modal->acceptAlert();
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 837a0abcb0e..10892724bd5 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -121,6 +121,13 @@ class DataGrid extends Grid
      */
     protected $noRecords = '[class$=no-data]';
 
+    /**
+     * Selector for alert.
+     *
+     * @var string
+     */
+    protected $alertModal = '._show[data-role=modal]';
+
     /**
      * Clear all applied Filters.
      *
@@ -250,7 +257,7 @@ class DataGrid extends Grid
             ->find(sprintf($this->massActionToggleList, $actionType), Locator::SELECTOR_XPATH)
             ->click();
         if ($acceptAlert) {
-            $element = $this->browser->find('._show[data-role=modal]');
+            $element = $this->browser->find($this->alertModal);
             /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
             $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
             $modal->acceptAlert();
-- 
GitLab


From 06991838094b8fc2490cb466b7c9ed8f94d769c3 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 30 Sep 2015 15:49:23 +0300
Subject: [PATCH 179/420] MAGETWO-42995: Stabilize functional tests

---
 .../Test/Block/Adminhtml/Product/Attribute/Set/Main.php  | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
index 998117a082c..58128695cc3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
@@ -50,6 +50,13 @@ class Main extends Block
      */
     protected $noteBlock = '.attribute-set .title';
 
+    /**
+     * Selector for prompt.
+     *
+     * @var string
+     */
+    protected $promptModal = '.prompt._show[data-role=modal]';
+
     /**
      * Move Attribute to Attribute Group
      *
@@ -123,7 +130,7 @@ class Main extends Block
     public function addAttributeSetGroup($groupName)
     {
         $this->_rootElement->find($this->addGroupButton)->click();
-        $element = $this->browser->find('.prompt._show[data-role=modal]');
+        $element = $this->browser->find($this->promptModal);
         /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
         $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
         $modal->setAlertText($groupName);
-- 
GitLab


From c12ee0e4442649b2492ba005c87219b094e36f28 Mon Sep 17 00:00:00 2001
From: Zaets Volodymyr <vzaets@ebay.com>
Date: Wed, 30 Sep 2015 15:56:40 +0300
Subject: [PATCH 180/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../view/adminhtml/templates/catalog/category/edit.phtml      | 2 +-
 .../Magento/Checkout/view/frontend/web/js/opc-payment-info.js | 2 +-
 .../Checkout/view/frontend/web/js/opc-shipping-method.js      | 2 ++
 .../Magento/Customer/view/adminhtml/templates/tab/cart.phtml  | 4 +---
 .../Newsletter/view/adminhtml/templates/template/edit.phtml   | 2 --
 app/code/Magento/Payment/view/adminhtml/web/transparent.js    | 2 +-
 6 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
index 7b7a22849be..569e0e88458 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
@@ -45,7 +45,7 @@ require([
         confirm({
             content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>',
             actions: {
-                confirm: function(){
+                confirm: function () {
                     location.href = url;
                 }
             }
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
index 8b43ffa8625..a3c54de39c8 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
@@ -136,7 +136,7 @@ define([
             }
 
             alert({
-                content:$.mage.__('Please choose a payment method.')
+                content: $.mage.__('Please choose a payment method.')
             });
 
             return false;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
index 385bc3fd273..3b8e507c819 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
@@ -67,8 +67,10 @@ define([
                 alert({
                     content: $.mage.__('We can\'t ship to this address. Please enter another address or edit this one.')
                 });
+
                 return false;
             }
+
             if (methods.filter(':checked').length) {
                 return true;
             }
diff --git a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
index 4ce0e769faf..f7d93b699c1 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
@@ -57,7 +57,7 @@ require([
 
         if (!itemId) {
             alert({
-                content:'<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>'
+                content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>'
             });
 
             return false;
@@ -68,8 +68,6 @@ require([
             actions: {
                 confirm: function(){
                     self.reload({'delete':itemId});
-
-                    return false;
                 }
             }
         });
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
index ef4917d29dc..26ac1a28b3c 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
@@ -99,8 +99,6 @@ require([
                         $(self.id).value =  $(self.id).value.stripScripts().stripTags();
                         $('field_template_styles').hide();
                         self.typeChange = true;
-
-                        return false;
                     }
                 }
             });
diff --git a/app/code/Magento/Payment/view/adminhtml/web/transparent.js b/app/code/Magento/Payment/view/adminhtml/web/transparent.js
index e97038d2245..11593e2a5b5 100644
--- a/app/code/Magento/Payment/view/adminhtml/web/transparent.js
+++ b/app/code/Magento/Payment/view/adminhtml/web/transparent.js
@@ -159,7 +159,7 @@ define([
             var msg = response.error_messages;
             if (typeof (msg) === 'object') {
                 alert({
-                    content:msg.join("\n")
+                    content: msg.join("\n")
                 });
             }
             if (msg) {
-- 
GitLab


From bfedaa59717e9c2d91470b25fdb47043ba7f76ab Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 30 Sep 2015 16:24:03 +0300
Subject: [PATCH 181/420] JS-53: Enhanced Thumbnails

---
 lib/web/fotorama/fotorama.js      | 49 +++++++++++++++++++++++--------
 lib/web/mage/gallery/gallery.html | 10 +++----
 lib/web/mage/gallery/gallery.less | 16 +++++-----
 3 files changed, 48 insertions(+), 27 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 512886e5df4..0898f37cf79 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -39,11 +39,10 @@ fotoramaVersion = '4.6.4';
         navShaftClass = navClass + '__shaft',
         navShaftVerticalClass = navWrapClass + '--vertical',
         navShaftListClass = navWrapClass + '--list',
-        navShaftHorisontalClass = navWrapClass + '--horisontal',
+        navShafthorizontalClass = navWrapClass + '--horizontal',
         navDotsClass = navClass + '--dots',
         navThumbsClass = navClass + '--thumbs',
         navFrameClass = navClass + '__frame',
-        navFrameThumbClass = navFrameClass + '--thumb',
 
         fadeClass = _fotoramaClass + '__fade',
         fadeFrontClass = fadeClass + '-front',
@@ -89,7 +88,7 @@ fotoramaVersion = '4.6.4';
 
         spinnerClass = _fotoramaClass + '__spinner',
 
-        horizontalImageClass = _fotoramaClass + '_horisontal_ratio',
+        horizontalImageClass = _fotoramaClass + '_horizontal_ratio',
         verticalImageClass = _fotoramaClass + '_vertical_ratio';
     var JQUERY_VERSION = $ && $.fn.jquery.split('.');
 
@@ -1006,7 +1005,7 @@ fotoramaVersion = '4.6.4';
             /**
              * Set type of thumbnail navigation
              */
-            navdir: 'horisontal',
+            navdir: 'horizontal',
 
             /**
              * Set configuration to show or hide arrows in thumb navigation
@@ -1537,7 +1536,7 @@ fotoramaVersion = '4.6.4';
         var position,
             size,
             wrapSize;
-        if (dir === 'horisontal') {
+        if (dir === 'horizontal') {
             size = opt.thumbwidth;
             wrapSize = $navWrap.width();
         } else {
@@ -1545,14 +1544,14 @@ fotoramaVersion = '4.6.4';
             wrapSize = $navWrap.height();
         }
         if ((size + opt.margin) * (guessIndex + 1) >= wrapSize - offsetNav) {
-            if (dir === 'horisontal') {
+            if (dir === 'horizontal') {
                 position = -$guessNavFrame.position().left;
             } else {
                 position = -$guessNavFrame.position().top;
             }
         }
         if ((size + opt.margin) * (guessIndex) <= Math.abs(offsetNav)) {
-            if (dir === 'horisontal') {
+            if (dir === 'horizontal') {
                 position = -$guessNavFrame.position().left + wrapSize - (size + opt.margin);
             } else {
                 position = -$guessNavFrame.position().top + wrapSize - (size + opt.margin);
@@ -1677,7 +1676,6 @@ fotoramaVersion = '4.6.4';
         }
 
         if (CSS3) {
-
             $el.css($.extend(getDuration(options.time), translate));
 
             if (options.time > 10) {
@@ -2446,7 +2444,7 @@ fotoramaVersion = '4.6.4';
 
             arrsUpdate();
             stageWheelUpdate();
-
+            thumbArrUpdate();
             if (opts.autoplay) setAutoplayInterval(opts.autoplay);
 
             o_thumbSide = numberFromMeasure(opts.thumbwidth) || THUMB_SIZE;
@@ -2986,6 +2984,26 @@ fotoramaVersion = '4.6.4';
                 .attr(disableAttr(disableNext));
         }
 
+        function thumbArrUpdate() {
+            var isLeftDisable = false,
+                isRightDisable = false;
+            if (opts.navtype === 'thumbs' && !opts.loop) {
+                (activeIndex == 0) ? isLeftDisable = true: isLeftDisable = false;
+                (activeIndex == opts.data.length - 1) ? isRightDisable = true: isRightDisable = false;
+            }
+            if (opts.navtype === 'slides') {
+                var pos = readPosition($navShaft, opts.navdir);
+                pos >= navShaftTouchTail.max ? isLeftDisable = true: isLeftDisable = false;
+                pos <= navShaftTouchTail.min ? isRightDisable = true: isRightDisable = false;
+            }
+            $thumbArrLeft
+                .toggleClass(arrDisabledClass, isLeftDisable)
+                .attr(disableAttr(isLeftDisable));
+            $thumbArrRight
+                .toggleClass(arrDisabledClass, isRightDisable)
+                .attr(disableAttr(isRightDisable));
+        }
+
         function stageWheelUpdate() {
             if (stageWheelTail.ok) {
                 stageWheelTail.prevent = {'<': disableDirrection(0), '>': disableDirrection(1)};
@@ -3063,6 +3081,7 @@ fotoramaVersion = '4.6.4';
                         direction: opts.navdir,
                         onEnd: function () {
                             thumbsDraw(pos, true);
+                            thumbArrUpdate();
                         }
                     });
 
@@ -3081,6 +3100,7 @@ fotoramaVersion = '4.6.4';
                             direction: opts.navdir,
                             onEnd: function () {
                                 thumbsDraw(pos, true);
+                                thumbArrUpdate();
                             }
                         });
                     }
@@ -3254,9 +3274,10 @@ fotoramaVersion = '4.6.4';
             var currentPosition = readPosition($navShaft, opts.navdir),
                 pos,
                 time = 500 * 1.1,
-                size = opts.navdir === 'horisontal' ? opts.thumbwidth : opts.thumbheight,
+                size = opts.navdir === 'horizontal' ? opts.thumbwidth : opts.thumbheight,
                 onEnd = function (pos) {
                     thumbsDraw(pos, true);
+                    thumbArrUpdate();
                 };
             if (slideDir === 'next') {
                 pos = currentPosition - (size + opts.margin) * thumbsPerSlide;
@@ -3369,6 +3390,7 @@ fotoramaVersion = '4.6.4';
 
             arrsUpdate();
 
+            thumbArrUpdate();
             if (o_nav) {
                 navUpdate();
 
@@ -3540,7 +3562,7 @@ fotoramaVersion = '4.6.4';
                     if (o_nav) {
                         switch (opts.navdir) {
                             case 'vertical':
-                                $navWrap.removeClass(navShaftHorisontalClass);
+                                $navWrap.removeClass(navShafthorizontalClass);
                                 $navWrap.removeClass(navShaftListClass);
                                 $navWrap.addClass(navShaftVerticalClass);
                                 $nav
@@ -3549,13 +3571,13 @@ fotoramaVersion = '4.6.4';
                                 break;
                             case 'list':
                                 $navWrap.removeClass(navShaftVerticalClass);
-                                $navWrap.removeClass(navShaftHorisontalClass);
+                                $navWrap.removeClass(navShafthorizontalClass);
                                 $navWrap.addClass(navShaftListClass);
                                 break;
                             default:
                                 $navWrap.removeClass(navShaftVerticalClass);
                                 $navWrap.removeClass(navShaftListClass);
-                                $navWrap.addClass(navShaftHorisontalClass);
+                                $navWrap.addClass(navShafthorizontalClass);
                                 $nav
                                     .stop()
                                     .animate({width: measures.nw}, time);
@@ -3783,6 +3805,7 @@ fotoramaVersion = '4.6.4';
                     releaseAutoplay();
                     changeAutoplay();
                     thumbsDraw(result.newPos, true);
+                    thumbArrUpdate();
                 }
 
                 if (!result.moved) {
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 14381c41423..11b2ad5fd07 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -23,15 +23,15 @@
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
                 <div class="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
-                <div class="fotorama__thumb__arr--left" tabindex="0" role="button">
-                    <div class="fotorama__thumb__arr">Left</div>
-                </div>
-                <div class="fotorama__thumb__arr--right" tabindex="0" role="button">
-                    <div class="fotorama__thumb__arr">Right</div>
+                <div class="fotorama__thumb__arr--left" tabindex="0" role="button" aria-label="Previos">
+                    <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
                 </div>
                 <div class="fotorama__nav__shaft">
                     <div class="fotorama__thumb-border"></div>
                 </div>
+                <div class="fotorama__thumb__arr--right" tabindex="0" role="button" aria-label="Next">
+                    <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
+                </div>
             </div>
         </div>
     </div>
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index df162ed3db9..c9d6c128247 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -22,9 +22,8 @@
 
 .fotorama-rotate (@deg) {
     -webkit-transform: rotate(@deg);
-    -moz-transform: 	 rotate(@deg);
-    -ms-transform: 		 rotate(@deg);
-    -o-transform: 		 rotate(@deg);
+    -ms-transform: rotate(@deg);
+    transform: rotate(@deg);
 }
 
 .translateX(@value) {
@@ -47,9 +46,7 @@
 
 .fotorama-arrow-gradient(@d){
     background-image: -webkit-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
-    background-image: -moz-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
     background-image: -ms-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
-    background-image: -o-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
     background-image: linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
 }
 
@@ -74,7 +71,7 @@
         height: 50px;
         display: block;
         margin-left: 20px;
-        z-index:1000;
+        z-index: 1000;
     }
     .fotorama__zoom-out {
         top: 51px;
@@ -440,7 +437,6 @@
     &:extend(.fotorama-focus);
     &:extend(.fotorama-inline-block);
     &:extend(.fotorama-no-tap);
-    cursor: pointer;
     position: relative;
 }
 
@@ -1005,7 +1001,7 @@
             width: 100%;
         }
     }
-    .fotorama_horisontal_ratio {
+    .fotorama_horizontal_ratio {
         .fotorama__img {
             .translateX(-50%);
             height: 100%;
@@ -1123,7 +1119,7 @@
     }
 }
 
-.fotorama__nav-wrap--horisontal {
+.fotorama__nav-wrap--horizontal {
     .fotorama__thumb__arr--left,
     .fotorama__thumb__arr--right {
         bottom: 0;
@@ -1131,6 +1127,7 @@
         top: 0;
         width: @fotorama-thumb-arrow;
         z-index: @z-index-10;
+        cursor: pointer;
         .fotorama__thumb__arr {
             width: 100%;
             .fotorama-abs-center();
@@ -1159,6 +1156,7 @@
         left: 0;
         position: absolute;
         right: 0;
+        cursor: pointer;
         z-index: @z-index-10;
         .fotorama__thumb__arr {
             .fotorama-rotate(90deg);
-- 
GitLab


From 3f4c9fbbb889234c67c4c85a93846d3322210532 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Wed, 30 Sep 2015 16:30:57 +0300
Subject: [PATCH 182/420] MAGETWO-42762: Improve performance of table rendering

- Commit not related to the main story
- Improve sticky header observables calls
---
 .../Magento/Ui/view/base/web/js/grid/sticky/sticky.js     | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
index 03dd04d5385..8b63fcdd4ac 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
@@ -89,7 +89,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe(['visible']);
+                .track('visible');
 
             return this;
         },
@@ -237,7 +237,7 @@ define([
                 this.checkPos();
             }
 
-            if (this.visible()) {
+            if (this.visible) {
                 this.checkTableElemsWidth();
 
                 if (this.flags.originalWidthChanged) {
@@ -554,7 +554,7 @@ define([
          * @returns {Object} Chainable.
          */
         toggleContainerVisibility: function () {
-            this.visible(!this.visible());
+            this.visible = !this.visible;
 
             return this;
         },
@@ -565,7 +565,7 @@ define([
          * @returns {Boolean} whether the visibility of the sticky header was toggled.
          */
         checkPos: function () {
-            var isSticky = this.visible(),
+            var isSticky = this.visible,
                 mustBeSticky = this.getMustBeSticky(),
                 needChange = isSticky !== mustBeSticky;
 
-- 
GitLab


From edf52cafb7db4d685f2d5e2d320641308567ba15 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Wed, 30 Sep 2015 17:18:45 +0300
Subject: [PATCH 183/420] MAGETWO-42762: Improve performance of table rendering

- Fix inline editing rendering issues
---
 .../Magento/Ui/view/base/web/js/grid/dnd.js   |  2 +-
 .../Ui/view/base/web/js/grid/editing/bulk.js  |  4 +--
 .../base/web/js/grid/editing/editor-view.js   | 24 +++++++++++---
 .../view/base/web/js/grid/editing/editor.js   | 33 +++++++++----------
 .../view/base/web/js/grid/editing/record.js   |  7 ++--
 .../Ui/view/base/web/js/grid/paging/sizes.js  |  2 +-
 .../base/web/templates/grid/editing/bulk.html | 14 +++++---
 .../grid/editing/header-buttons.html          |  2 +-
 .../base/web/templates/grid/editing/row.html  |  2 +-
 .../view/base/web/templates/grid/listing.html | 12 ++-----
 10 files changed, 58 insertions(+), 44 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
index dd85c33145d..0f10358bb7d 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
@@ -212,7 +212,7 @@ define([
                 return this;
             }
 
-            if (!Object.hasOwnProperty(model, 'dragover')) {
+            if (!ko.es5.isTracked(model, 'dragover')) {
                 model.track('dragover');
             }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
index f6fcc59213d..9c259144b84 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
@@ -50,7 +50,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe({
+                .track({
                     hasData: false
                 });
 
@@ -121,7 +121,7 @@ define([
             var fields  = _.keys(this.getData()),
                 hasData = !!fields.length;
 
-            this.hasData(hasData);
+            this.hasData = hasData;
 
             if (!this.active()) {
                 fields = [];
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
index 608cf7257b9..64fa58ac17c 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
@@ -26,10 +26,10 @@ define([
             rowTmpl:
                 '<!-- ko with: _editor -->' +
                     '<!-- ko if: isActive($row()._rowIndex, true) -->' +
-                        '<!-- ko scope: formRecordName($row()._rowIndex, true) -->' +
+                        '<!-- ko with: getRecord($row()._rowIndex, true) -->' +
                             '<!-- ko template: rowTmpl --><!-- /ko -->' +
                         '<!-- /ko -->' +
-                        '<!-- ko if: isSingleEditing() -->' +
+                        '<!-- ko if: isSingleEditing -->' +
                             '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' +
                         '<!-- /ko -->' +
                     '<!-- /ko -->' +
@@ -114,14 +114,18 @@ define([
          * @returns {View} Chainable.
          */
         initRow: function (row) {
+            var $editingRow;
+
             $(row).extendCtx({
                     _editor: this.model
                 }).bindings(this.rowBindings);
 
-            $(this.rowTmpl)
+            $editingRow = $(this.rowTmpl)
                 .insertBefore(row)
                 .applyBindings(row);
 
+            ko.utils.domNodeDisposal.addDisposeCallback(row, this.removeEditingRow.bind(this, $editingRow));
+
             return this;
         },
 
@@ -136,7 +140,10 @@ define([
 
             return {
                 visible: ko.computed(function () {
-                    return !model.isActive(ctx.$row()._rowIndex, true);
+                    var record = ctx.$row(),
+                        index = record && record._rowIndex;
+
+                    return !model.isActive(index, true);
                 })
             };
         },
@@ -156,6 +163,15 @@ define([
                     })
                 }
             };
+        },
+
+        /**
+         * Removes specified array of nodes.
+         *
+         * @param {ArrayLike} row
+         */
+        removeEditingRow: function (row) {
+            _.toArray(row).forEach(ko.removeNode);
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
index 5bfde4f5705..674c8d93e7d 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
@@ -18,7 +18,6 @@ define([
             headerButtonsTmpl: 'ui/grid/editing/header-buttons',
             successMsg: $t('You have successfully saved your edits.'),
             errorsCount: 0,
-            canSave: true,
             isMultiEditing: false,
             isSingleEditing: false,
             rowsData: [],
@@ -91,14 +90,14 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
-                    'canSave',
+                .track([
                     'errorsCount',
                     'isMultiEditing',
                     'isSingleEditing'
                 ])
                 .observe({
-                    active: [],
+                    canSave: true,
+                    activeRecords: [],
                     messages: []
                 });
 
@@ -253,7 +252,7 @@ define([
          * @returns {Editor} Chainable.
          */
         hide: function () {
-            this.active.each('active', false);
+            this.activeRecords.each('active', false);
 
             return this;
         },
@@ -304,7 +303,7 @@ define([
          * @returns {Array} An array of records and theirs validation results.
          */
         validate: function () {
-            return this.active.map(function (record) {
+            return this.activeRecords.map(function (record) {
                 return {
                     target: record,
                     valid: record.isValid()
@@ -327,7 +326,7 @@ define([
          * @returns {Object} Collection of records data.
          */
         getData: function () {
-            var data = this.active.map('getData');
+            var data = this.activeRecords.map('getData');
 
             return _.indexBy(data, this.indexField);
         },
@@ -340,7 +339,7 @@ define([
          * @returns {Editor} Chainable.
          */
         setData: function (data, partial) {
-            this.active.each('setData', data, partial);
+            this.activeRecords.each('setData', data, partial);
 
             return this;
         },
@@ -457,7 +456,7 @@ define([
         isActive: function (id, isIndex) {
             var record = this.getRecord(id, isIndex);
 
-            return record && record.active();
+            return _.contains(this.activeRecords(), record);
         },
 
         /**
@@ -466,7 +465,7 @@ define([
          * @returns {Boolean}
          */
         hasActive: function () {
-            return !!this.active().length;
+            return !!this.activeRecords().length;
         },
 
         /**
@@ -475,7 +474,7 @@ define([
          * @returns {Number}
          */
         countActive: function () {
-            return this.active().length;
+            return this.activeRecords().length;
         },
 
         /**
@@ -486,11 +485,11 @@ define([
         countErrors: function () {
             var errorsCount = 0;
 
-            this.active.each(function (record) {
-                errorsCount += record.errorsCount();
+            this.activeRecords.each(function (record) {
+                errorsCount += record.errorsCount;
             });
 
-            this.errorsCount(errorsCount);
+            this.errorsCount = errorsCount;
 
             return errorsCount;
         },
@@ -516,10 +515,10 @@ define([
 
             columns.each('disableAction', !!activeCount);
 
-            this.isMultiEditing(activeCount > 1);
-            this.isSingleEditing(activeCount === 1);
+            this.isMultiEditing = activeCount > 1;
+            this.isSingleEditing = activeCount === 1;
 
-            this.active(active);
+            this.activeRecords(active);
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
index 21b24b0873f..434dda5349e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
@@ -79,7 +79,8 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('active fields errorsCount hasChanges');
+                .track('errorsCount hasChanges')
+                .observe('active fields');
 
             return this;
         },
@@ -291,7 +292,7 @@ define([
         countErrors: function () {
             var errorsCount = this.elems.filter('error').length;
 
-            this.errorsCount(errorsCount);
+            this.errorsCount = errorsCount;
 
             return errorsCount;
         },
@@ -335,7 +336,7 @@ define([
         updateState: function () {
             var diff = this.checkChanges();
 
-            this.hasChanges(!diff.equal);
+            this.hasChanges = !diff.equal;
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
index 02dfbf47c3a..df287a12703 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
@@ -38,7 +38,7 @@ define([
                     label: 200
                 }
             },
-            statefull: {
+            links: {
                 options: '${ $.storageConfig.path }.options',
                 value: '${ $.storageConfig.path }.value'
             },
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html
index fe3d785f3d2..951e0af5cd1 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html
@@ -8,15 +8,18 @@
     class="data-grid-bulk-edit-panel data-grid-editable-row"
     data-bind="
         visible: active,
-        foreach: fields"
+        foreach: {
+            data: fields,
+            as: '$col'
+        }"
         data-role="data-grid-bulk-row">
+    <!-- ko if: $parent.getColumn(index).visible -->
     <td
         data-bind="
-            visible: $parent.getColumn(index).visible,
             css: {
-                'data-grid-actions-cell': $parent.isActionsColumn($data)
+                'data-grid-actions-cell': $parent.isActionsColumn($col)
             }">
-        <!-- ko if: $parent.isActionsColumn($data) -->
+        <!-- ko if: $parent.isActionsColumn($col) -->
             <!-- ko with: $parent -->
                 <button
                     class="action-default"
@@ -24,7 +27,7 @@
                     data-bind="
                         click: apply,
                         attr: {
-                            disabled: !hasData()
+                            disabled: !hasData
                         }">
                     <span data-bind="i18n: 'Apply'"></span>
                 </button>
@@ -43,4 +46,5 @@
             <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
     </td>
+    <!-- /ko -->
 </tr>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html
index 834ef42fdbf..cb41d2538e8 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="data-grid-info-panel" data-bind="visible: isMultiEditing() || (hasActive() && (hasMessages() || hasErrors() ))">
+<div class="data-grid-info-panel" data-bind="visible: isMultiEditing || (hasActive() && (hasMessages() || hasErrors() ))">
     <div class="messages" data-bind="visible: hasMessages() || hasErrors()">
         <div class="message message-warning" data-bind="visible: hasErrors()">
             <strong>There are <!-- ko text: countErrors() --><!-- /ko --> meesages requires your attention.</strong>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
index 96223e79c71..ad64b2a630e 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
@@ -17,7 +17,7 @@
 
     <!-- ko if: $parent.isActionsColumn($data) -->
     <td class="data-grid-actions-cell">
-        <span class="data-grid-row-changed" data-bind="css: {_changed: $parent.hasChanges()}">
+        <span class="data-grid-row-changed" data-bind="css: {_changed: $parent.hasChanges}">
             <span class="data-grid-row-changed-tooltip" data-bind="i18n: 'Record contains unsaved changes.'"></span>
         </span>
     </td>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
index 6e05a9c304b..875fc0e41c7 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
@@ -16,21 +16,14 @@
             </tr>
         </thead>
         <tbody>
+            <!-- ko repeat: {foreach: rows, item: '$row'} -->
             <tr class="data-row"
                 data-bind="
-                    repeat: {
-                        foreach: rows,
-                        item: '$row'
-                    }"
-                data-repeat-bind="
                     css: {
                         '_odd-row': !!($index % 2)
                     }
                 ">
-                <!-- ko fastForEach: {
-                        data: getVisible(),
-                        as: '$col'
-                    } -->
+                <!-- ko fastForEach: {data: getVisible(), as: '$col'} -->
                 <td data-bind="
                         css: $col.getFieldClass(),
                         click: $col.getFieldHandler($row()),
@@ -39,6 +32,7 @@
                 </td>
                 <!-- /ko -->
             </tr>
+            <!-- /ko -->
 
             <!-- ko ifnot: hasData() -->
                 <tr class="data-grid-tr-no-data">
-- 
GitLab


From dd1e5ecec1f41ee73d261e7fb5ed03918e36e08d Mon Sep 17 00:00:00 2001
From: AnastasiaBuniak <Anastasiia_Buniak@epam.com>
Date: Wed, 30 Sep 2015 18:24:29 +0300
Subject: [PATCH 184/420] JS-206: Open full-screen on enter key

---
 lib/web/fotorama/fotorama.js      | 11 ++++++++++-
 lib/web/mage/gallery/gallery.less |  1 +
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 0898f37cf79..ea23322ad9e 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -3156,6 +3156,12 @@ fotoramaVersion = '4.6.4';
                 stageFramePosition(activeIndexes);
                 setStageShaftMinmaxAndSnap();
                 setNavShaftMinMax();
+                addEnterUp($stageShaft[0], function() {
+                    if (!$fotorama.hasClass(fullscreenClass)) {
+                        that.requestFullScreen();
+                        $(fullscreenIcon).trigger('focus');
+                    }
+                });
             }
         }
 
@@ -3929,7 +3935,10 @@ fotoramaVersion = '4.6.4';
             addFocusOnControls(this);
         });
 
-        addEnterUp(fullscreenIcon, that.toggleFullScreen);
+        addEnterUp(fullscreenIcon, function() {
+            that.toggleFullScreen();
+            $(fullscreenIcon).trigger('focus');
+        });
         addFocusOnControls(fullscreenIcon);
 
         function reset() {
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index c9d6c128247..a701e89c4c8 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -196,6 +196,7 @@
     height: 100%;
     position: absolute;
     width: 100%;
+    left:0;
 }
 
 .fotorama-transform-disabled {
-- 
GitLab


From 001544daf1de78f58be840ea6d1808cded44794b Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Wed, 30 Sep 2015 19:10:57 +0300
Subject: [PATCH 185/420] MAGETWO-42838: Combine filter and column components
 definition

---
 .../Ui/Test/Unit/Component/Control/ActionTest.php      |  9 +++++++--
 .../Ui/Test/Unit/Component/Control/LinkTest.php        | 10 ++++++++--
 .../Ui/Test/Unit/Component/ExportButtonTest.php        |  9 ++++++++-
 .../Test/Unit/Component/Filters/Type/DateRangeTest.php |  4 ++++
 .../Ui/Test/Unit/Component/Filters/Type/DateTest.php   |  4 ++++
 .../Ui/Test/Unit/Component/Filters/Type/InputTest.php  |  4 ++++
 .../Ui/Test/Unit/Component/Filters/Type/RangeTest.php  |  5 ++++-
 .../Ui/Test/Unit/Component/Filters/Type/SelectTest.php |  4 ++++
 .../Test/Unit/Component/Form/Field/MultilineTest.php   |  4 ++++
 .../Magento/Ui/Test/Unit/Component/Form/FieldTest.php  |  6 +++++-
 .../Test/Unit/Component/Listing/Columns/ColumnTest.php |  9 ++++++++-
 .../Ui/Test/Unit/Component/Listing/ColumnsTest.php     | 10 +++++-----
 .../Magento/Ui/Test/Unit/Component/ListingTest.php     |  4 ++++
 .../Unit/Component/MassAction/Columns/ColumnTest.php   |  4 ++++
 .../Magento/Ui/Test/Unit/Component/MassActionTest.php  |  4 ++++
 app/code/Magento/Ui/Test/Unit/Component/PagingTest.php |  4 ++++
 16 files changed, 81 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php b/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php
index be25a5957f1..6d02b1395ba 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php
@@ -28,9 +28,14 @@ class ActionTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
+        $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->objectManager = new ObjectManager($this);
-
-        $this->action = $this->objectManager->getObject('Magento\Ui\Component\Control\Action');
+        $this->action = $this->objectManager->getObject('Magento\Ui\Component\Control\Action', ['context' => $context]);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php b/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php
index 1615690f867..00cd56b56f8 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php
@@ -28,9 +28,15 @@ class LinkTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->objectManager = new ObjectManager($this);
+        $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $context->expects($this->any())->method('getProcessor')->willReturn($processor);
 
-        $this->link = $this->objectManager->getObject('Magento\Ui\Component\Control\Link');
+        $this->objectManager = new ObjectManager($this);
+        $this->link = $this->objectManager->getObject('Magento\Ui\Component\Control\Link', ['context' => $context]);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php b/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php
index 0e65e804ce8..dc6a1004b69 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php
@@ -29,6 +29,12 @@ class ExportButtonTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->objectManager = new ObjectManager($this);
 
         $this->urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface')
@@ -37,7 +43,8 @@ class ExportButtonTest extends \PHPUnit_Framework_TestCase
         $this->model = $this->objectManager->getObject(
             'Magento\Ui\Component\ExportButton',
             [
-                'urlBuilder' => $this->urlBuilderMock
+                'urlBuilder' => $this->urlBuilderMock,
+                'context' => $context,
             ]
         );
     }
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php
index 6a2a0b54567..29262bc9e3f 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php
@@ -48,6 +48,10 @@ class DateRangeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
index 79af8056579..e921d1d52d1 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
@@ -48,6 +48,10 @@ class DateTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php
index a3736ad6bd5..e4b291134e6 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php
@@ -48,6 +48,10 @@ class InputTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php
index d28cb78ee21..8907f0c02aa 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php
@@ -47,7 +47,10 @@ class RangeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             [],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php
index 45b200fc584..469e8ef5696 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php
@@ -48,6 +48,10 @@ class SelectTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php b/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php
index c1e717c1525..c724bc049fe 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php
@@ -47,6 +47,10 @@ class MultilineTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
             ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         $this->multiline = new Multiline(
             $this->contextMock,
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php b/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php
index 86a47115d31..a5462493e45 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php
@@ -56,6 +56,10 @@ class FieldTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
             ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         $this->field = new Field(
             $this->contextMock,
@@ -138,7 +142,7 @@ class FieldTest extends \PHPUnit_Framework_TestCase
         $wrappedComponentMock->expects($this->once())
             ->method('getChildComponents')
             ->willReturn($this->getComponentsMock());
-        $wrappedComponentMock->expects($this->exactly(2))
+        $wrappedComponentMock->expects($this->any())
             ->method('getComponentName')
             ->willReturn(self::COMPONENT_NAME);
         $wrappedComponentMock->expects($this->once())
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php b/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php
index 98005246955..c42ba043d2d 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php
@@ -43,6 +43,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
@@ -78,7 +82,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     public function testPrepareItems()
     {
         $testItems = ['item1','item2', 'item3'];
-        $column = $this->objectManager->getObject('Magento\Ui\Component\Listing\Columns\Column');
+        $column = $this->objectManager->getObject(
+            'Magento\Ui\Component\Listing\Columns\Column',
+            ['context' => $this->contextMock]
+        );
 
         $this->assertEquals($testItems, $column->prepareItems($testItems));
     }
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php b/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php
index fca1b2a4ede..e381cc7a096 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php
@@ -42,6 +42,10 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
@@ -105,10 +109,6 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->once())
             ->method('addComponentDefinition')
             ->with('columns', ['extends' => 'test_config_extends']);
-        $this->contextMock->expects($this->once())
-            ->method('getUrl')
-            ->with($saveUrl)
-            ->willReturn('http://localhost.com/admin/' . $saveUrl);
 
         $dataProviderMock->expects($this->once())
             ->method('getFieldMetaInfo')
@@ -152,7 +152,7 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
                 'test_config_data' => 'test_config_value',
                 'editorConfig' => [
                     'clientConfig' => [
-                        'saveUrl' => 'http://localhost.com/admin/' . $saveUrl,
+                        'saveUrl' => $saveUrl,
                     ]
                 ]
             ],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php b/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php
index 9ee36c9ad4a..530e02138f1 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php
@@ -38,6 +38,10 @@ class ListingTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php b/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php
index 43b9271d4e0..2d35559c0c1 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php
@@ -45,6 +45,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         $this->column = $this->objectManager->getObject(
             'Magento\Ui\Component\MassAction\Columns\Column',
diff --git a/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php b/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php
index a2d2401fed7..5f4174a99b5 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php
@@ -33,6 +33,10 @@ class MassActionTest extends \PHPUnit_Framework_TestCase
 
         $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
             ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
index fd4c63c3b28..3992644a9b6 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
@@ -41,6 +41,10 @@ class PagingTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
-- 
GitLab


From a2812e06bd8d66526e0d1d999847a742200a6011 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 30 Sep 2015 14:26:59 -0500
Subject: [PATCH 186/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

---
 lib/internal/Magento/Framework/Code/Generator.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index ae9688d2b48..63ed179867d 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -178,7 +178,7 @@ class Generator
     protected function tryToLoadSourceClass($className, $generator)
     {
         $sourceClassName = $generator->getSourceClassName();
-        if (!$this->definedClasses->isClassLoadableFromDisc($sourceClassName)) {
+        if (!$this->definedClasses->isClassLoadable($sourceClassName)) {
             if ($this->generateClass($sourceClassName) !== self::GENERATION_SUCCESS) {
                 throw new \Magento\Framework\Exception\LocalizedException(
                     new \Magento\Framework\Phrase(
-- 
GitLab


From ddbe874c25540836840768bfc3b6bd257a79c9d8 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 30 Sep 2015 16:30:44 -0500
Subject: [PATCH 187/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile  - static test fix

---
 lib/internal/Magento/Framework/Code/Generator.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 63ed179867d..ed16a98977c 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -113,7 +113,7 @@ class Generator
      * Include file only if the class is not already defined in memory
      *
      * @param string $fileName
-     * @param $className
+     * @param string $className
      * @return void
      */
     public function tryToIncludeFile($fileName, $className)
-- 
GitLab


From 269e14e5135c79dd32f249280d2c58c66c0f831f Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Thu, 1 Oct 2015 09:12:22 +0300
Subject: [PATCH 188/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../view/adminhtml/templates/catalog/category/tree.phtml        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index eeefa9796b4..742336e8e0d 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -225,7 +225,7 @@ function reRenderTree(switcherParams) {
                 parameters:params,
                 method:'post',
                 onComplete:function (transport) {
-                    var response = eval('(' + transport.responseText + ')');
+                    var response = JSON.parse(transport.responseText);
                     if (!response['parameters']) {
                         return false;
                     }
-- 
GitLab


From 1e4552fa8b5c9da1ed04950bc90fc13061df2a80 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Thu, 1 Oct 2015 09:23:26 +0300
Subject: [PATCH 189/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../system/config/system/storage/media/synchronize.phtml        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml b/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml
index 0c9080bc8db..316c5fa5b3d 100644
--- a/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml
+++ b/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml
@@ -102,7 +102,7 @@ require([
                 var response;
 
                 try {
-                    response = eval('(' + transport.responseText + ')');
+                    response = JSON.parse(transport.responseText);
                     if (response.state == '<?php /* @escapeNotVerified */ echo \Magento\MediaStorage\Model\File\Storage\Flag::STATE_RUNNING ?>'
                         && response.message
                     ) {
-- 
GitLab


From 1cd587c8da0d6417be5a7dca1747f899b8495300 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Thu, 1 Oct 2015 09:42:16 +0300
Subject: [PATCH 190/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../view/adminhtml/templates/catalog/category/tree.phtml | 9 +++++++--
 .../view/adminhtml/templates/promo/salesrulejs.phtml     | 4 +++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 742336e8e0d..249f02f6e3f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -225,8 +225,13 @@ function reRenderTree(switcherParams) {
                 parameters:params,
                 method:'post',
                 onComplete:function (transport) {
-                    var response = JSON.parse(transport.responseText);
-                    if (!response['parameters']) {
+                    var response;
+
+                    try {
+                        response = JSON.parse(transport.responseText);
+                    }
+
+                    if (!response || !response['parameters']) {
                         return false;
                     }
 
diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
index f2a8fc4b3f0..fea5d38e825 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
+++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
@@ -80,7 +80,9 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
         onComplete : function (transport, param){
             var response = false;
             if (transport && transport.responseText) {
-                response = eval('(' + transport.responseText + ')');
+                try {
+                    response = JSON.parse(transport.responseText);
+                }
             }
             if (couponCodesGrid) {
                 couponCodesGrid.reload();
-- 
GitLab


From 936ce6669d9974d948a82d59370330a132d945e5 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Thu, 1 Oct 2015 10:42:26 +0300
Subject: [PATCH 191/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Corrected Close button padding
- Changed class on button
---
 .../view/adminhtml/web/js/custom-options.js       | 15 +++++++++++++--
 .../web/css/source/components/_modals_extend.less |  2 +-
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index d68497046a5..fc77470403a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -127,7 +127,7 @@ define([
                         type: 'slide',
                         opened: function () {
                             $(document).off().on('click', '#productGrid_massaction-form button', function () {
-                                $('.import-custom-options-apply-button').trigger('click', 'massActionTrigger');
+                                $('. import-custom-options-apply-button').trigger('click', 'massActionTrigger');
                             });
                         },
                         buttons: [{
@@ -146,7 +146,18 @@ define([
                                 if (request.length === 0) {
                                     if (!massActionTrigger) {
                                         alert({
-                                            content: $.mage.__('Please select items.')
+                                            content: $.mage.__('Please select items.'),
+                                            buttons: [{
+                                                text: $.mage.__('OK'),
+                                                class: 'action-primary action-accept',
+
+                                                /**
+                                                 * Click handler.
+                                                 */
+                                                click: function () {
+                                                    this.closeModal(true);
+                                                }
+                                            }]
                                         });
                                     }
 
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 2a009ea2f11..8a7d177529e 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -105,7 +105,7 @@
     }
 
     .action-close {
-        padding: @modal-popup__padding @modal-popup__padding 0 0;
+        padding: @modal-popup__padding @modal-popup__padding;
         &:active{
             padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
             padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
-- 
GitLab


From a09a3ef95020b300273fda54e023c94585036763 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Thu, 1 Oct 2015 12:06:14 +0300
Subject: [PATCH 192/420] MAGETWO-42838: Combine filter and column components
 definition

---
 .../Ui/Component/Listing/Column/PageActionsTest.php |  7 +++++++
 .../Ui/Component/Listing/Column/ActionsTest.php     | 12 ++++++------
 .../Listing/Column/AttributeColumnTest.php          | 12 ++++++------
 .../Test/Unit/Ui/Component/Listing/ColumnsTest.php  | 13 +++++++------
 .../Ui/Component/Listing/Column/AddressTest.php     | 11 ++++++++++-
 .../Component/Listing/Column/CustomerGroupTest.php  |  8 +++++++-
 .../Component/Listing/Column/PaymentMethodTest.php  |  8 +++++++-
 .../Unit/Ui/Component/Listing/Column/PriceTest.php  |  8 +++++++-
 .../Unit/Ui/Component/Listing/Column/StatusTest.php |  8 +++++++-
 .../Ui/Component/Listing/Column/ViewActionTest.php  |  9 ++++++++-
 10 files changed, 72 insertions(+), 24 deletions(-)

diff --git a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php
index fdc87499f58..999b6f828d0 100644
--- a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php
@@ -18,12 +18,19 @@ class PageActionsTest extends \PHPUnit_Framework_TestCase
         $urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface')
             ->disableOriginalConstructor()
             ->getMock();
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         /** @var \Magento\Cms\Ui\Component\Listing\Column\PageActions $model */
         $model = $objectManager->getObject(
             'Magento\Cms\Ui\Component\Listing\Column\PageActions',
             [
                 'urlBuilder' => $urlBuilderMock,
+                'context' => $contextMock,
             ]
         );
 
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php
index d329c4befd1..011cd5c61ff 100644
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php
@@ -23,12 +23,12 @@ class ActionsTest extends \PHPUnit_Framework_TestCase
 
     public function setup()
     {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php
index ec5772d9d09..d0516987bf7 100644
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php
@@ -27,12 +27,12 @@ class AttributeColumnTest extends \PHPUnit_Framework_TestCase
 
     public function setup()
     {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php
index fbdfdf3ff47..2ff207ba75f 100644
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php
@@ -32,12 +32,12 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->columnFactory = $this->getMock(
             'Magento\Customer\Ui\Component\ColumnFactory',
             ['create'],
@@ -173,6 +173,7 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
                 [
                     'name' => $attributeCode,
                     'dataType' => $backendType,
+                    'filter' => 'text',
                     'visible' => true
                 ]
             );
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php
index 592116ce928..cfeef76ec83 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php
@@ -22,7 +22,16 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
-        $this->model = $objectManager->getObject('Magento\Sales\Ui\Component\Listing\Column\Address');
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
+        $this->model = $objectManager->getObject(
+            'Magento\Sales\Ui\Component\Listing\Column\Address',
+            ['context' => $contextMock]
+        );
     }
 
     public function testPrepareDataSource()
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php
index 0ef21fae35f..4e24091865c 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php
@@ -27,10 +27,16 @@ class CustomerGroupTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->groupRepository = $this->getMockForAbstractClass('Magento\Customer\Api\GroupRepositoryInterface');
         $this->model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\CustomerGroup',
-            ['groupRepository' => $this->groupRepository]
+            ['groupRepository' => $this->groupRepository, 'context' => $contextMock]
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php
index 5d6f5195f2f..7eb1fb7c937 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php
@@ -27,10 +27,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->paymentHelper = $this->getMock('Magento\Payment\Helper\Data', [], [], '', false);
         $this->model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\PaymentMethod',
-            ['paymentHelper' => $this->paymentHelper]
+            ['paymentHelper' => $this->paymentHelper, 'context' => $contextMock]
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php
index 4efffe34f63..5d47b90eec0 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php
@@ -27,10 +27,16 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->priceFormatterMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\PriceCurrencyInterface');
         $this->model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\Price',
-            ['priceFormatter' => $this->priceFormatterMock]
+            ['priceFormatter' => $this->priceFormatterMock, 'context' => $contextMock]
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php
index 905a4561ac2..8d03782f6ba 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php
@@ -43,9 +43,15 @@ class StatusTest extends \PHPUnit_Framework_TestCase
             ->willReturn($collection);
 
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\Status',
-            ['collectionFactory' => $collectionFactoryMock]
+            ['collectionFactory' => $collectionFactoryMock, 'context' => $contextMock]
         );
         $model->setData('name', $itemName);
         $model->prepareDataSource($dataSource);
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php
index bf6e0ee16bd..3cd982c8b7f 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php
@@ -50,11 +50,18 @@ class ViewActionTest extends \PHPUnit_Framework_TestCase
         $expectedUrlPath,
         $expectedUrlParam
     ) {
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->model = $this->objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\ViewAction',
             [
                 'urlBuilder' => $this->urlBuilder,
-                'data' => $data
+                'data' => $data,
+                'context' => $contextMock,
             ]
         );
 
-- 
GitLab


From d1672cf167d1eb3632f24e82cd8df7945d07ef8f Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Thu, 1 Oct 2015 12:23:02 +0300
Subject: [PATCH 193/420] MAGETWO-42762: Improve performance of table rendering
 - Commit not related to the main story - Improve sticky header columns resize

---
 .../Magento/Ui/view/base/web/js/grid/sticky/sticky.js | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
index 8b63fcdd4ac..8daa9999633 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
@@ -58,6 +58,7 @@ define([
                 'initListingNode',
                 'initToolbarNode',
                 'initContainerNode',
+                'initColumns',
                 'initStickyListingNode',
                 'initStickyToolbarNode',
                 'initLeftDataGridCap',
@@ -104,7 +105,7 @@ define([
                 return;
             }
             this.listingNode = $(node);
-            this.columns = this.listingNode.find(this.columnSelector);
+            $.async(this.columnSelector, node, this.initColumns);
         },
 
         /**
@@ -155,6 +156,14 @@ define([
                 this.initRightDataGridCap);
         },
 
+        /**
+         * Init columns (each time when amount of columns is changed)
+         *
+         */
+        initColumns: function () {
+            this.columns = this.listingNode.find(this.columnSelector);
+        },
+
         /**
          * Init left DataGridCap
          *
-- 
GitLab


From 64ca89bb1ad2eb3903b404786db4669e468466f2 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Thu, 1 Oct 2015 12:28:56 +0300
Subject: [PATCH 194/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

- Fix typos
---
 .../templates/product/view/gallery.phtml      | 23 +++++++++----------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index c995c900a1a..0f21866f808 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -34,20 +34,19 @@
                     "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height')
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/duration"); ?>,
-                    "transition": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/effect"); ?>,
-                    "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>,
-                    "navtype": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>,
-                    "navdir": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>,
-
+                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/effect"); ?>",
+                    "navarrows": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>",
+                    "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
+                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>"
                 },
                 "fullscreen": {
-                    "nav": "<?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navigation"); ?>",
-                    "loop": <?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/loop"); ?>,
-                    "navdir": "<?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navdir"); ?>",
-                    "arrows": <?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/arrows"); ?>,
-                    "showCaption": <?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/caption"); ?>,
-                    "transitionduration": <?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/duration"); ?>,
-                    "transition": "<?php/* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/effect"); ?>"
+                    "nav": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navigation"); ?>",
+                    "loop": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/loop"); ?>,
+                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navdir"); ?>",
+                    "arrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/arrows"); ?>,
+                    "showCaption": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/caption"); ?>,
+                    "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/duration"); ?>,
+                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/effect"); ?>"
                 }
                 "breakpoints": <?php /* @escapeNotVerified */ echo $block->getBreakpoints(); ?>
             }
-- 
GitLab


From 8f303076d39ae600dd2e81a104359b5d8dc91425 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 1 Oct 2015 12:42:09 +0300
Subject: [PATCH 195/420] MAGETWO-43415: Admin menu items in the bottom is not
 accessible if windows height is 800px

---
 app/design/adminhtml/Magento/backend/web/js/theme.js | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/web/js/theme.js b/app/design/adminhtml/Magento/backend/web/js/theme.js
index 9d1524c4e23..5fdaa4c5824 100644
--- a/app/design/adminhtml/Magento/backend/web/js/theme.js
+++ b/app/design/adminhtml/Magento/backend/web/js/theme.js
@@ -126,12 +126,13 @@ define('globalNavigationScroll', [
     menuItems.on('click', function (e) {
 
         var submenu = $(this).children(subMenuClass),
-            delta;
+            delta,
+            logo = $('.logo')[0].offsetHeight;
 
         submenuHeight = submenu.height();
 
-        if (submenuHeight > menuHeight && menuHeight > winHeight) {
-            menu.height(submenuHeight - $('.logo')[0].offsetHeight);
+        if (submenuHeight > menuHeight && menuHeight + logo > winHeight) {
+            menu.height(submenuHeight - logo);
             delta = -menu.position().top;
             window.scrollTo(0, 0);
             positionMenu();
-- 
GitLab


From ae07aaea2bf7f41a1faa2c2a24ae7f7d3fdf211c Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Thu, 1 Oct 2015 12:55:32 +0300
Subject: [PATCH 196/420] MAGETWO-42762: Improve performance of table rendering

- Add missing filters on customer grid
- Fix price filter on products
---
 .../Catalog/Ui/Component/Listing/Columns/Price.php   |  2 +-
 .../view/adminhtml/ui_component/product_listing.xml  | 11 ++---------
 .../view/adminhtml/ui_component/customer_listing.xml | 12 +++++++++++-
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
index 1e8b7fb4a7f..2c9294a3466 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
@@ -13,7 +13,7 @@ class Price extends \Magento\Ui\Component\Listing\Columns\Column
     /**
      * Column name
      */
-    const NAME = 'price';
+    const NAME = 'column.price';
 
     /**
      * @var \Magento\Framework\Locale\CurrencyInterface
diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index a8c6a7c5281..b5cc8a86dc5 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -65,12 +65,6 @@
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
                     </item>
-                    <item name="childDefaults" xsi:type="array">
-                        <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
-                        <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">product_listing.product_listing.product_columns.${ $.index }:visible</item>
-                        </item>
-                    </item>
                 </item>
             </argument>
             <filterSelect name="store_id">
@@ -79,12 +73,10 @@
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
+                        <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="caption" xsi:type="string" translate="true">Select...</item>
                         <item name="label" xsi:type="string" translate="true">Store View</item>
-                        <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string"></item>
-                        </item>
                     </item>
                 </argument>
             </filterSelect>
@@ -191,6 +183,7 @@
         <column name="entity_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index c467751948f..e213905234b 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -336,6 +336,7 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="label" xsi:type="string" translate="true">Last Logged In</item>
@@ -384,8 +385,9 @@
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="label" xsi:type="string" translate="true">Date Of Birth</item>
+                    <item name="label" xsi:type="string" translate="true">Date of Birth</item>
                     <item name="sortOrder" xsi:type="number">170</item>
                 </item>
             </argument>
@@ -393,6 +395,7 @@
         <column name="taxvat">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
@@ -404,6 +407,7 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">select</item>
@@ -424,6 +428,7 @@
         <column name="billing_city">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
@@ -434,6 +439,7 @@
         <column name="billing_fax">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
@@ -444,6 +450,7 @@
         <column name="billing_vat_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
@@ -454,6 +461,7 @@
         <column name="billing_company">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
@@ -464,6 +472,7 @@
         <column name="billing_firstname">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Billing Firstname</item>
@@ -474,6 +483,7 @@
         <column name="billing_lastname">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="label" xsi:type="string" translate="true">Billing Lastname</item>
-- 
GitLab


From ff20579961145ef022cbb55d05906233086924e3 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Thu, 1 Oct 2015 12:55:58 +0300
Subject: [PATCH 197/420] MAGETWO-42995: Stabilize functional tests

---
 .../Test/Block/Product/Compare/Sidebar.php    | 12 +++-
 .../Checkout/Test/Block/Cart/Sidebar/Item.php | 12 +++-
 .../Block/Account/AddressesAdditional.php     | 12 +++-
 .../Adminhtml/Integration/IntegrationGrid.php | 18 +++---
 .../Test/Block/Adminhtml/Order/Actions.php    | 12 +++-
 .../Block/Adminhtml/User/Edit/PageActions.php | 12 +++-
 .../System/Variable/FormPageActions.php       | 14 ++++-
 .../Customer/Edit/Tab/Wishlist/Grid.php       | 12 +++-
 lib/web/mage/adminhtml/grid.js                | 55 ++++++++++---------
 9 files changed, 118 insertions(+), 41 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php
index ea1a27a09e2..eec1be1fcf5 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php
@@ -32,6 +32,13 @@ class Sidebar extends ListCompare
      */
     protected $clearAll = '#compare-clear-all';
 
+    /**
+     * Selector for alert.
+     *
+     * @var string
+     */
+    protected $alertModal = '._show[data-role=modal]';
+
     /**
      * Get compare products block content.
      *
@@ -79,6 +86,9 @@ class Sidebar extends ListCompare
             }
         );
         $this->_rootElement->find($this->clearAll)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->alertModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
index 7d0966f1535..43dbd23499a 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
@@ -28,6 +28,13 @@ class Item extends Sidebar
      */
     protected $editItem = '.action.edit';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Remove product item from mini cart
      *
@@ -36,7 +43,10 @@ class Item extends Sidebar
     public function removeItemFromMiniCart()
     {
         $this->_rootElement->find($this->removeItem)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php
index 89292194978..9e316ceabea 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php
@@ -36,6 +36,13 @@ class AddressesAdditional extends Block
      */
     protected $additionalAddressContent = '.block-content';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Delete Additional Address
      *
@@ -46,7 +53,10 @@ class AddressesAdditional extends Block
     {
         $this->_rootElement->find(sprintf($this->addressSelector, $address->getStreet()), Locator::SELECTOR_XPATH)
             ->find($this->deleteAddressLink)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php
index fa5f9a0e4a2..73c66f0af0a 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php
@@ -74,6 +74,13 @@ class IntegrationGrid extends Grid
      */
     protected $tokensPopupSelector = './/ancestor::body/div[descendant::fieldset[contains(@id,"integration_token")]]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Search and delete current item
      *
@@ -84,13 +91,10 @@ class IntegrationGrid extends Grid
     {
         $this->search($item);
         $this->_rootElement->find($this->deleteLink)->click();
-
-        /** @var \Magento\Integration\Test\Block\Adminhtml\Integration\IntegrationGrid\DeleteDialog $deleteDialog */
-        $deleteDialog = $this->blockFactory->create(
-            'Magento\Integration\Test\Block\Adminhtml\Integration\IntegrationGrid\DeleteDialog',
-            ['element' => $this->_rootElement->find($this->deleteBlockSelector, Locator::SELECTOR_XPATH)]
-        );
-        $deleteDialog->acceptDeletion();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
index 4d5bf937f8f..2a1942e9f72 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
@@ -113,6 +113,13 @@ class Actions extends Block
      */
     protected $button = 'button[data-ui-id$="%s-button"]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Ship order
      *
@@ -171,7 +178,10 @@ class Actions extends Block
     public function cancel()
     {
         $this->_rootElement->find($this->cancel)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php
index c2cf7eaf643..4c75ccbc6e1 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php
@@ -21,6 +21,13 @@ class PageActions extends FormPageActions
      */
     protected $forceSignIn = '#invalidate';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Click on 'Force Sign-In' button.
      *
@@ -29,6 +36,9 @@ class PageActions extends FormPageActions
     public function forceSignIn()
     {
         $this->_rootElement->find($this->forceSignIn)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
index 8fa7f1fc390..a1befbd3759 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
@@ -33,7 +33,14 @@ class FormPageActions extends AbstractFormPageActions
      *
      * @var string
      */
-    protected $storeView = './/*/a[contains(text(),"%s")]';
+    protected  $storeView = './/*/a[contains(text(),"%s")]';
+
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
 
     /**
      * Select Store View.
@@ -56,7 +63,10 @@ class FormPageActions extends AbstractFormPageActions
         } else {
             throw new \Exception('Store View with name \'' . $storeName . '\' is not visible!');
         }
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
 
         return null;
     }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php
index e7147535ce1..a13e0feda85 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php
@@ -57,6 +57,13 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid
      */
     protected $rowTemplateStrict = 'td[contains(.,normalize-space("%s"))]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Delete product
      *
@@ -65,7 +72,10 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid
     protected function delete()
     {
         $this->_rootElement->find($this->rowItem . ' ' . $this->deleteLink)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/lib/web/mage/adminhtml/grid.js b/lib/web/mage/adminhtml/grid.js
index a8494b7c078..44d61e001aa 100644
--- a/lib/web/mage/adminhtml/grid.js
+++ b/lib/web/mage/adminhtml/grid.js
@@ -667,34 +667,37 @@ varienGridMassaction.prototype = {
             confirm({
                 content: this.currentItem.confirm,
                 actions: {
-                    confirm: function () {
-                        self.formHiddens.update('');
-                        new Insertion.Bottom(self.formHiddens, self.fieldTemplate({
-                            name: fieldName,
-                            value: self.checkedString
-                        }));
-                        new Insertion.Bottom(self.formHiddens, self.fieldTemplate({
-                            name: 'massaction_prepare_key',
-                            value: fieldName
-                        }));
-
-                        if (!jQuery(self.form).valid()) {
-                            return;
-                        }
-
-                        if (self.useAjax && item.url) {
-                            new Ajax.Request(item.url, {
-                                'method': 'post',
-                                'parameters': self.form.serialize(true),
-                                'onComplete': self.onMassactionComplete.bind(self)
-                            });
-                        } else if (item.url) {
-                            self.form.action = item.url;
-                            self.form.submit();
-                        }
-                    }
+                    confirm: this.onConfirm.bind(this, fieldName, item)
                 }
             });
+        } else {
+            this.onConfirm(fieldName, item);
+        }
+    },
+    onConfirm: function(fieldName, item) {
+        this.formHiddens.update('');
+        new Insertion.Bottom(this.formHiddens, this.fieldTemplate({
+            name: fieldName,
+            value: this.checkedString
+        }));
+        new Insertion.Bottom(this.formHiddens, this.fieldTemplate({
+            name: 'massaction_prepare_key',
+            value: fieldName
+        }));
+
+        if (!jQuery(this.form).valid()) {
+            return;
+        }
+
+        if (this.useAjax && item.url) {
+            new Ajax.Request(item.url, {
+                'method': 'post',
+                'parameters': this.form.serialize(true),
+                'onComplete': this.onMassactionComplete.bind(this)
+            });
+        } else if (item.url) {
+            this.form.action = item.url;
+            this.form.submit();
         }
     },
     onMassactionComplete: function(transport) {
-- 
GitLab


From 0ee6b941b47f33bb6be6ed78e52f5556800ff858 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Thu, 1 Oct 2015 12:57:34 +0300
Subject: [PATCH 198/420] MAGETWO-34040: [UI] Assistance with applying new
 style for Modal Window JS Widget

- Corrected button class
---
 .../view/adminhtml/web/js/custom-options.js       | 15 ++-------------
 .../Magento/Ui/view/base/web/js/modal/alert.js    |  2 +-
 2 files changed, 3 insertions(+), 14 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index fc77470403a..d68497046a5 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -127,7 +127,7 @@ define([
                         type: 'slide',
                         opened: function () {
                             $(document).off().on('click', '#productGrid_massaction-form button', function () {
-                                $('. import-custom-options-apply-button').trigger('click', 'massActionTrigger');
+                                $('.import-custom-options-apply-button').trigger('click', 'massActionTrigger');
                             });
                         },
                         buttons: [{
@@ -146,18 +146,7 @@ define([
                                 if (request.length === 0) {
                                     if (!massActionTrigger) {
                                         alert({
-                                            content: $.mage.__('Please select items.'),
-                                            buttons: [{
-                                                text: $.mage.__('OK'),
-                                                class: 'action-primary action-accept',
-
-                                                /**
-                                                 * Click handler.
-                                                 */
-                                                click: function () {
-                                                    this.closeModal(true);
-                                                }
-                                            }]
+                                            content: $.mage.__('Please select items.')
                                         });
                                     }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
index dfd27afff85..f422083aab9 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
@@ -25,7 +25,7 @@ define([
             },
             buttons: [{
                 text: $.mage.__('OK'),
-                class: 'action-secondary action-accept',
+                class: 'action-primary action-accept',
 
                 /**
                  * Click handler.
-- 
GitLab


From 2dc87ce44ae12f5108cc534050ee7e211759070c Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Thu, 1 Oct 2015 13:55:40 +0300
Subject: [PATCH 199/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../customer/edit/tab/wishlist.phtml          | 78 ++++++++++---------
 lib/web/mage/backend/suggest.js               |  5 ++
 2 files changed, 47 insertions(+), 36 deletions(-)

diff --git a/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml b/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml
index ff2714c07c9..0262fe571fd 100644
--- a/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml
+++ b/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml
@@ -11,30 +11,31 @@
  */
 ?>
 <script>
-require([
-    "prototype",
-    "Magento_Catalog/catalog/product/composite/configure"
-], function(){
+    require([
+            "Magento_Ui/js/modal/confirm",
+            "prototype",
+            "Magento_Catalog/catalog/product/composite/configure"
+        ], function(confirm){
 
 //<!--
-wishlistControl = {
-    reload: function (urlParams) {
-        if (!urlParams) {
-            urlParams = '';
-        }
-        var url = <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.url + '?ajax=true' + urlParams;
-        new Ajax.Updater(
-            <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.containerId,
-            url,
-            {
-                parameters: {form_key: FORM_KEY},
-                onComplete: <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.initGrid.bind(<?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>),
-                evalScripts:true
-            }
-        );
-    },
+            wishlistControl = {
+                reload: function (urlParams) {
+                    if (!urlParams) {
+                        urlParams = '';
+                    }
+                    var url = <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.url + '?ajax=true' + urlParams;
+                    new Ajax.Updater(
+                        <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.containerId,
+                        url,
+                        {
+                            parameters: {form_key: FORM_KEY},
+                            onComplete: <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.initGrid.bind(<?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>),
+                        evalScripts:true
+                }
+            );
+        },
 
-    configureItem: function (itemId) {
+        configureItem: function (itemId) {
         productConfigure.setOnLoadIFrameCallback('wishlist', this.cbOnLoadIframe.bind(this));
         productConfigure.showItemConfiguration('wishlist', itemId);
         return false;
@@ -48,22 +49,27 @@ wishlistControl = {
     },
 
     removeItem: function (itemId) {
-        if(!confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to remove this item?') ?>')) {
-            return false;
-        }
-        this.reload('&delete=' + itemId);
-        return false;
-    }
-}
+        var self = this;
 
-productConfigure.addListType(
-    'wishlist',
-    {
-        urlFetch: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/configure') ?>',
-        urlConfirm: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/update') ?>'
+        confirm({
+            content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to remove this item?') ?>',
+            actions: {
+                confirm: function () {
+                    self.reload('&delete=' + itemId);
+                }
+            }
+        });
+    }
     }
-);
-//-->
 
-});
+    productConfigure.addListType(
+        'wishlist',
+        {
+            urlFetch: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/configure') ?>',
+            urlConfirm: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/update') ?>'
+        }
+    );
+    //-->
+
+    });
 </script>
diff --git a/lib/web/mage/backend/suggest.js b/lib/web/mage/backend/suggest.js
index f4efd126939..cc9184d33dd 100644
--- a/lib/web/mage/backend/suggest.js
+++ b/lib/web/mage/backend/suggest.js
@@ -235,6 +235,9 @@
                             }
                             break;
                         case keyCode.ESCAPE:
+                            if (this.isDropdownShown()) {
+                                event.stopPropagation();
+                            }
                             this.close(event);
                             this._blurItem();
                             break;
@@ -445,6 +448,7 @@
          */
         open: function (e) {
             if (!this.isDropdownShown()) {
+                this.element.addClass('_suggest-dropdown-open');
                 this.dropdown.show();
                 this._trigger('open', e);
             }
@@ -459,6 +463,7 @@
             this._renderedContext = null;
 
             if (this.dropdown.length) {
+                this.element.removeClass('_suggest-dropdown-open');
                 this.dropdown.hide().empty();
             }
 
-- 
GitLab


From 4603f68ecf4c728733e0f30512fdf536e2ae03eb Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Thu, 1 Oct 2015 15:03:13 +0300
Subject: [PATCH 200/420] MAGETWO-42995: Stabilize functional tests

---
 .../adminhtml/templates/backup/dialogs.phtml  |  4 ++-
 lib/web/mage/adminhtml/backup.js              | 28 ++++++-------------
 2 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index d5dcd13cf0f..dc04861bece 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -62,7 +62,9 @@
             <div class="popup-content">
                 <div class="backup-messages" style="display: none;"><div class="messages"></div></div>
                 <div class="messages">
-                    <div class="message message-warning"><?php /* @escapeNotVerified */ echo __('Please specify backup creation option.')?></div>
+                    <div class="message message-warning">
+                        <?php /* @escapeNotVerified */ echo __('This may take a few moments.')?>
+                        <?php /* @escapeNotVerified */ echo __('Be sure your store is in maintenance mode during backup.')?></div>
                 </div>
                 <form action="" method="post" id="backup-form" class="form-inline">
                     <fieldset class="admin__fieldset form-list question">
diff --git a/lib/web/mage/adminhtml/backup.js b/lib/web/mage/adminhtml/backup.js
index 9a820297fdd..fece6796d29 100644
--- a/lib/web/mage/adminhtml/backup.js
+++ b/lib/web/mage/adminhtml/backup.js
@@ -164,13 +164,18 @@ define([
         },
         backupConfig: {
             'backup-warning': {
-                title: jQuery.mage.__('Warning'),
+                title: jQuery.mage.__('Backup options'),
                 content: function () {
-                    return jQuery('#backup-warning .message.message-warning').html();
+                    return jQuery('#backup-options .popup-content').html();
                 },
                 actionOk: function () {
-                    this.modal.modal('closeModal');
-                    this.requestBackupOptions();
+                    this.modal.find('#backup-form').validation({
+                        submitHandler: jQuery.proxy(this.submitBackup, this)
+                    });
+                    this.modal.find('#backup-form').submit();
+                },
+                opened: function () {
+                    this.modal.find(':hidden').show();
                 }
             },
             'rollback-warning': {
@@ -183,21 +188,6 @@ define([
                     this.requestPassword();
                 }
             },
-            'backup-options': {
-                title: jQuery.mage.__('Backup options'),
-                content: function () {
-                    return jQuery('#backup-options .popup-content').html();
-                },
-                actionOk: function () {
-                    this.modal.find('#backup-form').validation({
-                        submitHandler: jQuery.proxy(this.submitBackup, this)
-                    });
-                    this.modal.find('#backup-form').submit();
-                },
-                opened: function () {
-                    this.modal.find('*:hidden').show();
-                }
-            },
             'rollback-request-password': {
                 title: jQuery.mage.__('Backup options'),
                 content: function () {
-- 
GitLab


From f860e5b018a9f8c3b20929660f0c0a25d6d93162 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Thu, 1 Oct 2015 15:04:02 +0300
Subject: [PATCH 201/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

- Fix typos
---
 app/design/frontend/Magento/blank/etc/view.xml | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 1eac995c11c..805f28e906f 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -201,14 +201,15 @@
                 <var name="arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
                 <var name="caption">null</var> <!-- Display alt text as image title (true/false/null) -->
                 <var name="navdir">vertical</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
-                <var name="navdir">horizontal</var> <!--Sliding direction of thumbnails in fullscreen(horizontal/vertical)  -->
                 <var name="thumbwidth">100</var> <!-- Width of thumbnails in fullscreen -->
                 <var name="thumbheight">100</var> <!-- Height of thumbnails in fullscreen -->
-                <var name="transition:effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
-                <var name="transition:duration">500</var> <!-- Sets transition duration in ms -->
-                <var name="navigation:carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
+                <var name="transition">
+                    <var name="effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+                    <var name="duration">500</var> <!-- Sets transition duration in ms -->
+                    <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
+                </var>
             </var>
-            
+
         </var>
 
         <var name="magnifier">
-- 
GitLab


From 55f8060233cd2649c844b8aa456f26fd5b4f7f12 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Thu, 1 Oct 2015 15:48:55 +0300
Subject: [PATCH 202/420] MAGETWO-42762: Improve performance of table rendering

- Remove unused test reference
- Add missing copyright
---
 .../Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js  | 4 ++++
 dev/tests/js/JsTestDriver/jsTestDriverOrder.php               | 3 +--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
index dc49e5575a8..b766fcfa870 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
@@ -1,3 +1,7 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
 define([
     'ko'
 ], function (ko) {
diff --git a/dev/tests/js/JsTestDriver/jsTestDriverOrder.php b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
index b12aef10f57..6314b1dbd16 100644
--- a/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
+++ b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
@@ -21,6 +21,5 @@ return [
     '/lib/web/mage/decorate.js',
     '/lib/web/jquery/jquery.validate.js',
     '/lib/web/jquery/jquery.metadata.js',
-    '/lib/web/mage/translate.js',
-    '/lib/web/mage/requirejs/plugin/id-normalizer.js',
+    '/lib/web/mage/translate.js'
 ];
-- 
GitLab


From 8112d00eaf60f7eccb95c20e32bc4617ee34af32 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Thu, 1 Oct 2015 16:46:02 +0300
Subject: [PATCH 203/420] MAGETWO-42995: Stabilize functional tests

---
 .../Test/Block/Adminhtml/System/Variable/FormPageActions.php    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
index a1befbd3759..fab74ada1dc 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
@@ -33,7 +33,7 @@ class FormPageActions extends AbstractFormPageActions
      *
      * @var string
      */
-    protected  $storeView = './/*/a[contains(text(),"%s")]';
+    protected $storeView = './/*/a[contains(text(),"%s")]';
 
     /**
      * Selector for confirm.
-- 
GitLab


From d95c5b8bce5027ee354ec989ea446f639c75c433 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Thu, 1 Oct 2015 16:46:30 +0300
Subject: [PATCH 204/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

- Fix unexpected loader
---
 .../web/css/source/_module.less               | 34 -------------------
 1 file changed, 34 deletions(-)

diff --git a/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less
index 7149c5d38d8..2dea6077b72 100644
--- a/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less
@@ -38,40 +38,6 @@
     }
 }
 
-//
-//    Reviews list and form
-//--------------------------------------
-
-.catalog-product-view.ajax-loading {
-    height: 100%;
-    overflow: hidden;
-    &:after {
-        content: "";
-        position:fixed;
-        height: 100%;
-        display: block;
-        width: 100%;
-        z-index: 998;
-        background: rgba(255,255,255,.4);
-    }
-    &:before {
-        content: "";
-        position:fixed;
-        top: 0;
-        left: 0;
-        bottom: 0;
-        right: 0;
-        margin:auto;
-        display: block;
-        @loading__size: 74px;
-        width: @loading__size;
-        height: @loading__size;
-        border-radius: @loading__size/2;
-        z-index: 999;
-        background: rgba(255, 255, 255, .7) url('../images/loader-1.gif') no-repeat 50% 50%;
-    }
-}
-
 //
 //    Review product page
 //--------------------------------------
-- 
GitLab


From 578817f5971eb8818d13219893c41775062598a6 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Thu, 1 Oct 2015 16:55:43 +0300
Subject: [PATCH 205/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 .../Magento/Ui/view/base/web/js/modal/modal.js   | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 7f5ca9d373a..3759c2d4ba6 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -231,14 +231,12 @@ define([
                 } else {
                     this.modal.find(this.options.focusableScope).focus();
                 }
-            } else {
-                if (position === 'end') {
-                    this.modal.find(this.options.modalCloseBtn).focus();
-                } else if (position === 'start') {
-                    infelicity = 2; //Constant for find last focusable element
-                    focusableElements = this.modal.find(':focusable');
-                    focusableElements.eq(focusableElements.length - infelicity).focus();
-                }
+            } else if (position === 'end') {
+                this.modal.find(this.options.modalCloseBtn).focus();
+            } else if (position === 'start') {
+                infelicity = 2; //Constant for find last focusable element
+                focusableElements = this.modal.find(':focusable');
+                focusableElements.eq(focusableElements.length - infelicity).focus();
             }
         },
 
@@ -264,7 +262,7 @@ define([
          * Switcher for focus event.
          * @param {Object} e - event
          */
-        _tabSwitcher: function(e){
+        _tabSwitcher: function (e) {
             var target = $(e.target);
 
             if (target.is(this.options.focusableStart)) {
-- 
GitLab


From bcd9adfd38238ae86cb5a7746b4c4bf912986c94 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Thu, 1 Oct 2015 17:41:12 +0300
Subject: [PATCH 206/420] MAGETWO-42996: Implement prompt, alert, confirm
 dialogs

---
 app/code/Magento/Ui/view/base/web/js/modal/modal.js           | 4 ++--
 .../tests/app/code/Magento/Ui/base/js/modal/alert.test.js     | 2 +-
 .../tests/app/code/Magento/Ui/base/js/modal/confirm.test.js   | 2 +-
 .../tests/app/code/Magento/Ui/base/js/modal/modal.test.js     | 2 +-
 .../tests/app/code/Magento/Ui/base/js/modal/prompt.test.js    | 2 +-
 5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 3759c2d4ba6..0fd610909fa 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -208,14 +208,14 @@ define([
 
         /**
          * Set focus to element.
-         * @param {string} position - can be "start" and "end"
+         * @param {String} position - can be "start" and "end"
          *      positions.
          *      If position is "end" - sets focus to first
          *      focusable element in modal window scope.
          *      If position is "start" - sets focus to last
          *      focusable element in modal window scope
          *
-         *  @param {string} type - can be "opened" or false
+         *  @param {String} type - can be "opened" or false
          *      If type is "opened" - looks to "this.options.focus"
          *      property and sets focus
          */
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
index d5f32f1e3b3..548d093942f 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
@@ -20,7 +20,7 @@ define([
             expect(element.trigger('openModal')).toBe(element);
             expect(element.trigger('closeModal')).toBe(element);
         });
-        it('Integration: modal created on page', function(){
+        it('Integration: modal created on page', function () {
             expect(alert.length).toEqual(1);
         });
     });
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
index 866bd215a45..922a14f54f9 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
@@ -20,7 +20,7 @@ define([
             expect(element.trigger('openModal')).toBe(element);
             expect(element.trigger('closeModal')).toBe(element);
         });
-        it('Integration: modal created on page', function(){
+        it('Integration: modal created on page', function () {
             expect(confirm.length).toEqual(1);
         });
     });
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
index ee0c8d2894f..a8f4a13979d 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
@@ -20,7 +20,7 @@ define([
             expect(element.trigger('openModal')).toBe(element);
             expect(element.trigger('closeModal')).toBe(element);
         });
-        it('Integration: modal created on page', function(){
+        it('Integration: modal created on page', function () {
             expect($(modal).length).toEqual(1);
         });
     });
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
index e2783b2e49d..1d61f4c7354 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
@@ -20,7 +20,7 @@ define([
             expect(element.trigger('openModal')).toBe(element);
             expect(element.trigger('closeModal')).toBe(element);
         });
-        it('Integration: modal created on page', function(){
+        it('Integration: modal created on page', function () {
             expect(prompt.length).toEqual(1);
         });
     });
-- 
GitLab


From f0871abd51b42413c26325ac47fdec09b21ec9f5 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Thu, 1 Oct 2015 18:43:48 +0300
Subject: [PATCH 207/420] MAGETWO-42762: Improve performance of table rendering

- Fix static tests
- Rework component structure
---
 .../frontend/web/js/view/payment/default.js   |   2 +-
 .../view/frontend/web/js/view/payment/list.js |   2 +-
 .../web/js/view/shipping-address/list.js      |   2 +-
 .../web/js/view/shipping-information/list.js  |   2 +-
 .../templates/system/config/edit.phtml        |   2 +-
 .../web/js/variations/product-grid.js         |   5 +-
 .../templates/product/edit/downloadable.phtml |   2 +-
 .../product/edit/downloadable/links.phtml     |   2 +-
 .../product/edit/downloadable/samples.phtml   |   2 +-
 .../frontend/web/js/model/gift-message.js     |   9 +-
 .../Paypal/view/adminhtml/web/js/rule.js      |   2 +-
 .../Paypal/view/adminhtml/web/js/solution.js  |   2 +-
 .../Paypal/view/adminhtml/web/js/solutions.js |   2 +-
 .../Magento/Ui/view/base/requirejs-config.js  |  10 +-
 .../Ui/view/base/web/js/form/client.js        |   2 +-
 .../base/web/js/form/components/collection.js |   3 +-
 .../web/js/form/components/collection/item.js |  21 +
 .../view/base/web/js/form/element/select.js   |   2 +-
 .../js/grid/controls/bookmarks/bookmarks.js   |   8 +-
 .../web/js/grid/controls/bookmarks/storage.js |   4 +-
 .../Ui/view/base/web/js/lib/component/core.js | 184 ---------
 .../Ui/view/base/web/js/lib/component/main.js |  22 --
 .../view/base/web/js/lib/component/manip.js   | 198 ----------
 .../base/web/js/lib/component/traversal.js    |  76 ----
 .../view/base/web/js/lib/{ => core}/class.js  |   1 +
 .../web/js/lib/core/component/component.js    | 374 ++++++++++++++++++
 .../view/base/web/js/lib/{ => core}/events.js |   2 +-
 .../js/lib/{component => core/model}/links.js |   7 -
 .../provider.js => core/model/model.js}       | 111 +++++-
 .../web/js/lib/{ => core/model}/storage.js    |  14 +-
 .../Ui/view/base/web/js/lib/ko/bind/scope.js  |   2 +-
 .../web/js/lib/ko/extender/bound-nodes.js     |   2 +-
 .../base/web/js/lib/ko/template/engine.js     |  27 +-
 .../view/base/web/js/lib/renderer/renderer.js |   5 +-
 .../view/base/web/js/lib/view/utils/async.js  |   2 +-
 .../Magento/Ui/base/js/core/layout.test.js    |   2 +-
 .../Ui/base/js/lib/component/links.test.js    |   4 +-
 .../Magento/Ui/base/js/lib/events.test.js     |   4 +-
 .../Ui/base/js/lib/registry/registry.test.js  |   2 +-
 .../Test/Js/_files/blacklist/magento.txt      |   9 +-
 lib/web/mage/gallery/gallery.js               |   2 +-
 41 files changed, 576 insertions(+), 560 deletions(-)
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/lib/component/core.js
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/lib/component/main.js
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
 rename app/code/Magento/Ui/view/base/web/js/lib/{ => core}/class.js (99%)
 create mode 100644 app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
 rename app/code/Magento/Ui/view/base/web/js/lib/{ => core}/events.js (98%)
 rename app/code/Magento/Ui/view/base/web/js/lib/{component => core/model}/links.js (97%)
 rename app/code/Magento/Ui/view/base/web/js/lib/{component/provider.js => core/model/model.js} (72%)
 rename app/code/Magento/Ui/view/base/web/js/lib/{ => core/model}/storage.js (89%)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
index 542cbd1100e..16418ed4dc9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
@@ -17,7 +17,7 @@ define(
         'uiRegistry',
         'Magento_Checkout/js/model/payment/additional-validators',
         'Magento_Ui/js/model/messages',
-        'Magento_Ui/js/core/renderer/layout'
+        'uiLayout'
     ],
     function (
         ko,
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
index 4559bbbc745..7764f5ec9e0 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
@@ -9,7 +9,7 @@ define([
     'uiComponent',
     'Magento_Checkout/js/model/payment/method-list',
     'Magento_Checkout/js/model/payment/renderer-list',
-    'Magento_Ui/js/core/renderer/layout',
+    'uiLayout',
     'Magento_Checkout/js/model/checkout-data-resolver'
 ], function (_, ko, utils, Component, paymentMethods, rendererList, layout, checkoutDataResolver) {
     'use strict';
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
index 352d8e628e3..639d4823c75 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
@@ -8,7 +8,7 @@ define([
     'ko',
     'mageUtils',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout',
+    'uiLayout',
     'Magento_Customer/js/model/address-list'
 ], function (_, ko, utils, Component, layout, addressList) {
     'use strict';
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
index 36342149c66..1d357ca80e9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
@@ -8,7 +8,7 @@ define([
     'ko',
     'mageUtils',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout',
+    'uiLayout',
     'Magento_Checkout/js/model/quote'
 ], function ($, ko, utils, Component, layout, quote) {
     'use strict';
diff --git a/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml b/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml
index dc585c33cea..5c2157d83a9 100644
--- a/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml
+++ b/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml
@@ -25,7 +25,7 @@
 <script>
 require([
     "jquery",
-    "Magento_Ui/js/lib/registry/registry",
+    "uiRegistry",
     "jquery/jquery.hashchange",
     "mage/mage",
     "prototype",
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
index 3003ff253fe..37d52c6e146 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
@@ -336,9 +336,10 @@ define([
             }.bind(this));
 
             this.productsFilter(function (filter) {
-                filter.setData({
+                filter.set('filters', _.extend({
                     'filters_modifier': filterData['filters_modifier']
-                }, true).apply();
+                }, filterData.filters))
+                    .apply();
             });
         }
     });
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
index 6892c319357..61508611159 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
@@ -16,7 +16,7 @@
 <script>
 require([
     'jquery',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'mage/template',
     'mage/mage',
     'prototype'
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index 697c74ccb9d..6c76b6fb5ab 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -72,7 +72,7 @@
 <script>
 require([
     'jquery',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'mage/template',
     'jquery/file-uploader',
     'mage/mage',
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
index dc7a5bfebe2..6821b4827a1 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
@@ -58,7 +58,7 @@ $block->getConfigJson();
 <script>
 require([
     'jquery',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'mage/template',
     'jquery/file-uploader',
     'prototype'
diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
index ad91613b136..d72057e2b85 100644
--- a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
+++ b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
@@ -3,9 +3,12 @@
  * See COPYING.txt for license details.
  */
 /*global define*/
-define(['Magento_Ui/js/lib/component/provider', 'underscore', 'mage/url'],
-    function (provider, _, url) {
-        "use strict";
+define(['uiModel', 'underscore', 'mage/url'],
+    function (uiModel, _, url) {
+        'use strict';
+
+        var provider = uiModel();
+
         return function (itemId) {
             var model = {
                 id: 'message-' + itemId,
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
index 0c49932d489..b565aa2d66d 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
@@ -3,7 +3,7 @@
  * See COPYING.txt for license details.
  */
 define([
-    "Magento_Ui/js/lib/class",
+    "uiClass",
     "underscore"
 ], function (Class, _) {
     "use strict";
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
index a5a98e899e9..1983f6c3ccb 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
@@ -4,7 +4,7 @@
  */
 define([
     "jquery",
-    "Magento_Ui/js/lib/class",
+    "uiClass",
     "Magento_Paypal/js/rule",
     "mageUtils",
     "underscore"
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
index fc688c2da2a..b1e124aca38 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
@@ -4,7 +4,7 @@
  */
 define([
     "jquery",
-    "Magento_Ui/js/lib/class",
+    "uiClass",
     "Magento_Paypal/js/solution",
     "underscore"
 ], function ($, Class, Solution, _) {
diff --git a/app/code/Magento/Ui/view/base/requirejs-config.js b/app/code/Magento/Ui/view/base/requirejs-config.js
index b96c395b7c5..e704a698879 100644
--- a/app/code/Magento/Ui/view/base/requirejs-config.js
+++ b/app/code/Magento/Ui/view/base/requirejs-config.js
@@ -9,10 +9,12 @@ var config = {
     },
     map: {
         '*': {
-            uiComponent: 'Magento_Ui/js/lib/component/main',
-            uiRegistry: 'Magento_Ui/js/lib/registry/registry',
-            uiLayout: 'Magento_Ui/js/core/renderer/layout',
-            uiClass: 'Magento_Ui/js/lib/class'
+            uiComponent:    'Magento_Ui/js/lib/core/component/component',
+            uiClass:        'Magento_Ui/js/lib/core/class',
+            uiModel:        'Magento_Ui/js/lib/core/model/model',
+            uiEvents:       'Magento_Ui/js/lib/core/events',
+            uiRegistry:     'Magento_Ui/js/lib/registry/registry',
+            uiLayout:       'Magento_Ui/js/core/renderer/layout'
         }
     }
 };
diff --git a/app/code/Magento/Ui/view/base/web/js/form/client.js b/app/code/Magento/Ui/view/base/web/js/form/client.js
index 6c6bdbfcf30..bb79b12dbde 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/client.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/client.js
@@ -6,7 +6,7 @@ define([
     'jquery',
     'underscore',
     'mageUtils',
-    'Magento_Ui/js/lib/class'
+    'uiClass'
 ], function ($, _, utils, Class) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
index bf10209d9d9..e5f84229320 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
@@ -7,7 +7,7 @@ define([
     'mageUtils',
     'uiRegistry',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout'
+    'uiLayout'
 ], function (_, utils, registry, Component, layout) {
     'use strict';
 
@@ -67,6 +67,7 @@ define([
 
             return this;
         },
+
         /**
          * Creates new item of collection, based on incoming 'index'.
          * If not passed creates one with 'new_' prefix.
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
index 4f7c38f4adb..41c246cdea6 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
@@ -109,6 +109,27 @@ define([
             return this;
         },
 
+        /**
+         * Destroys current instance along with all of its' children.
+         * Overrides base method to clear data when this method is called.
+         */
+        destroy: function () {
+            this._super();
+            this._clearData();
+        },
+
+        /**
+         * Clears all data associated with component.
+         * @private
+         *
+         * @returns {Component} Chainable.
+         */
+        _clearData: function () {
+            this.source('remove', this.dataScope);
+
+            return this;
+        },
+
         /**
          * Formats incoming previews array via parsePreview function.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/select.js b/app/code/Magento/Ui/view/base/web/js/form/element/select.js
index 1298d5fd2b4..f0f6d762000 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/select.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/select.js
@@ -7,7 +7,7 @@ define([
     'mageUtils',
     'uiRegistry',
     './abstract',
-    'Magento_Ui/js/core/renderer/layout'
+    'uiLayout'
 ], function (_, utils, registry, Abstract, layout) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
index 70a630b3532..d9cd0f66a39 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
@@ -61,8 +61,8 @@ define([
          */
         initialize: function () {
             utils.limit(this, 'checkState', 5);
-            utils.limit(this, 'saveSate', 2000);
-            utils.limit(this, '_defaultPolyfill', 2000);
+            utils.limit(this, 'saveState', 2000);
+            utils.limit(this, '_defaultPolyfill', 3000);
 
             this._super()
                 .restore()
@@ -567,8 +567,8 @@ define([
          * Listener of the activeIndex property.
          */
         onStateChange: function () {
-            this.saveState()
-                .checkState();
+            this.checkState();
+            this.saveState();
 
             if (!this.defaultDefined) {
                 this._defaultPolyfill();
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
index ac0656ec5a4..4a7eef274f8 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
@@ -5,8 +5,8 @@
 define([
     'jquery',
     'mageUtils',
-    'Magento_Ui/js/lib/storage',
-    'Magento_Ui/js/lib/class'
+    'Magento_Ui/js/lib/core/model/storage',
+    'uiClass'
 ], function ($, utils, storage, Class) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/core.js b/app/code/Magento/Ui/view/base/web/js/lib/component/core.js
deleted file mode 100644
index 65eca7b967d..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/core.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'underscore',
-    'uiRegistry',
-    'Magento_Ui/js/lib/storage'
-], function (_, registry) {
-    'use strict';
-
-    return {
-        defaults: {
-            template: 'ui/collection',
-            registerNodes: true,
-            ignoreTmpls: {
-                childDefaults: true
-            },
-            storageConfig: {
-                provider: 'localStorage',
-                namespace: '${ $.name }',
-                path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }'
-            },
-            modules: {
-                storage: '${ $.storageConfig.provider }'
-            },
-            componentType: 'container'
-        },
-
-        /**
-         * Initializes component.
-         *
-         * @returns {Component} Chainable.
-         */
-        initialize: function () {
-            this._super()
-                .initProperties()
-                .initObservable()
-                .initModules()
-                .initUnique()
-                .setListeners(this.listens)
-                .initLinks();
-
-            return this;
-        },
-
-        /**
-         * Defines various properties.
-         *
-         * @returns {Component} Chainable.
-         */
-        initProperties: function () {
-            _.extend(this, {
-                source: registry.get(this.provider),
-                containers: [],
-                _elems: []
-            });
-
-            return this;
-        },
-
-        /**
-         * Initializes observable properties.
-         *
-         * @returns {Component} Chainable.
-         */
-        initObservable: function () {
-            this.observe({
-                elems: []
-            });
-
-            return this;
-        },
-
-        /**
-         * Initializes links between properties.
-         *
-         * @returns {Component} Chainbale.
-         */
-        initLinks: function () {
-            this.setLinks(this.links, 'imports')
-                .setLinks(this.links, 'exports');
-
-            _.each({
-                exports: this.exports,
-                imports: this.imports
-            }, this.setLinks, this);
-
-            return this;
-        },
-
-        /**
-         * Parses 'modules' object and creates
-         * async wrappers on specified components.
-         *
-         * @returns {Component} Chainable.
-         */
-        initModules: function () {
-            var modules = this.modules || {};
-
-            _.each(modules, function (component, property) {
-                this[property] = registry.async(component);
-            }, this);
-
-            return this;
-        },
-
-        /**
-         * Initializes listeners of the unique property.
-         *
-         * @returns {Component} Chainable.
-         */
-        initUnique: function () {
-            var update = this.onUniqueUpdate.bind(this),
-                uniqueNs = this.uniqueNs;
-
-            this.hasUnique = this.uniqueProp && uniqueNs;
-
-            if (this.hasUnique) {
-                this.source.on(uniqueNs, update, this.name);
-            }
-
-            return this;
-        },
-
-        /**
-         * Called when current element was injected to another component.
-         *
-         * @param {Object} parent - Instance of a 'parent' component.
-         * @returns {Component} Chainable.
-         */
-        initContainer: function (parent) {
-            this.containers.push(parent);
-
-            return this;
-        },
-
-        /**
-         * Called when another element was added to current component.
-         *
-         * @param {Object} elem - Instance of an element that was added.
-         * @returns {Component} Chainable.
-         */
-        initElement: function (elem) {
-            elem.initContainer(this);
-
-            return this;
-        },
-
-        /**
-         * Returns path to components' template.
-         * @returns {String}
-         */
-        getTemplate: function () {
-            return this.template;
-        },
-
-        /**
-         * Updates property specified in uniqueNs
-         * if components' unique property is set to 'true'.
-         *
-         * @returns {Component} Chainable.
-         */
-        setUnique: function () {
-            var property = this.uniqueProp;
-
-            if (this[property]()) {
-                this.source.set(this.uniqueNs, this.name);
-            }
-
-            return this;
-        },
-
-        /**
-         * Callback which fires when property under uniqueNs has changed.
-         */
-        onUniqueUpdate: function (name) {
-            var active = name === this.name,
-                property = this.uniqueProp;
-
-            this[property](active);
-        }
-    };
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/main.js b/app/code/Magento/Ui/view/base/web/js/lib/component/main.js
deleted file mode 100644
index a48220b0194..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/main.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'mageUtils',
-    './core',
-    './links',
-    './manip',
-    './traversal',
-    './provider',
-    'uiClass',
-    'Magento_Ui/js/lib/ko/initialize'
-], function (utils, core, links, manip, traversal, provider, Class) {
-    'use strict';
-
-    var extenders;
-
-    extenders = utils.extend({}, core, links, manip, traversal, provider);
-
-    return Class.extend(extenders);
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js b/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
deleted file mode 100644
index e3f2c5f3366..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
+++ /dev/null
@@ -1,198 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'ko',
-    'underscore',
-    'mageUtils',
-    'uiRegistry'
-], function (ko, _, utils, registry) {
-    'use strict';
-
-    /**
-     * Removes non plain object items from the specfied array.
-     *
-     * @param {Array} container - Array whose value should be filtered.
-     * @returns {Array}
-     */
-    function compact(container) {
-        return container.filter(utils.isObject);
-    }
-
-    return {
-
-        /**
-         * Retrieves requested region.
-         * Creates region if it was not created yet
-         *
-         * @returns {ObservableArray}.
-         */
-        getRegion: function (name) {
-            var regions = this.regions = this.regions || {};
-
-            if (!regions[name]) {
-                regions[name] = ko.observable([]);
-            }
-
-            return regions[name];
-        },
-
-        /**
-         * Replaces specified regions' data with a provided one.
-         * Creates region if it was not created yet.
-         *
-         * @param {Array} items - New regions' data.
-         * @param {String} name - Name of the region.
-         * @returns {Component} Chainable.
-         */
-        updateRegion: function (items, name) {
-            var region = this.getRegion(name);
-
-            region(items);
-
-            return this;
-        },
-
-        /**
-         * Requests specified components to insert
-         * them into 'elems' array starting from provided position.
-         *
-         * @param {(String|Array)} elems - Name of the component to insert.
-         * @param {Number} [position=-1] - Position at which to insert elements.
-         * @returns {Component} Chainable.
-         */
-        insertChild: function (elems, position) {
-            var container   = this._elems,
-                insert      = this._insert.bind(this),
-                update;
-
-            if (!Array.isArray(elems)) {
-                elems = [elems];
-            }
-
-            elems.map(function (item) {
-                return item.elem ?
-                    utils.insert(item.elem, container, item.position) :
-                    utils.insert(item, container, position);
-            }).forEach(function (item) {
-                if (item === true) {
-                    update = true;
-                } else if (_.isString(item)) {
-                    registry.get(item, insert);
-                } else if (utils.isObject(item)) {
-                    insert(item);
-                }
-            });
-
-            if (update) {
-                this._update();
-            }
-
-            return this;
-        },
-
-        /**
-         * Removes specified element from the 'elems' array.
-         *
-         * @param {Object} elem - Element to be removed.
-         * @returns {Component} Chainable.
-         */
-        removeChild: function (elem) {
-            utils.remove(this._elems, elem);
-            this._update();
-
-            return this;
-        },
-
-        /**
-         * Destroys current instance along with all of its' children.
-         */
-        destroy: function () {
-            this._dropHandlers()
-                ._clearData()
-                ._clearRefs();
-        },
-
-        /**
-         * Removes events listeners.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _dropHandlers: function () {
-            this.off();
-
-            this.source.off(this.name);
-
-            return this;
-        },
-
-        /**
-         * Clears all data associated with component.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _clearData: function () {
-            this.source.remove(this.dataScope);
-            this.source.remove('params.' + this.name);
-
-            return this;
-        },
-
-        /**
-         * Removes all references to current instance and
-         * calls 'destroy' method on all of its' children.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _clearRefs: function () {
-            registry.remove(this.name);
-
-            this.containers.forEach(function (parent) {
-                parent.removeChild(this);
-            }, this);
-
-            this.elems.each('destroy');
-
-            return this;
-        },
-
-        /**
-         * Inserts provided component into 'elems' array at a specified position.
-         * @private
-         *
-         * @param {Object} elem - Element to insert.
-         */
-        _insert: function (elem) {
-            var index = this._elems.indexOf(elem.name);
-
-            if (~index) {
-                this._elems[index] = elem;
-            }
-
-            this._update()
-                .initElement(elem);
-        },
-
-        /**
-         * Synchronizes multiple elements arrays with a core '_elems' container.
-         * Performs elemets grouping by theirs 'displayArea' property.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _update: function () {
-            var _elems = compact(this._elems),
-                grouped = _.groupBy(_elems, 'displayArea');
-
-            _.each(grouped, this.updateRegion, this);
-
-            this.elems(_elems);
-
-            return this;
-        }
-    };
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js b/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
deleted file mode 100644
index cb17ce3e2de..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'underscore',
-    'Magento_Ui/js/lib/events'
-], function (_, EventsBus) {
-    'use strict';
-
-    return _.extend({}, EventsBus, {
-        /**
-         * Tries to call specified method of a current component,
-         * otherwise delegates attempt to its' children.
-         *
-         * @param {String} target - Name of the method.
-         * @param [...] Arguments that will be passed to method.
-         * @returns {*} Result of the method calls.
-         */
-        delegate: function (target) {
-            var args = _.toArray(arguments);
-
-            target = this[target];
-
-            if (_.isFunction(target)) {
-                return target.apply(this, args.slice(1));
-            }
-
-            return this._delegate(args);
-        },
-
-        /**
-         * Calls 'delegate' method of all of it's children components.
-         * @private
-         *
-         * @param {Array} args - An array of arguments to pass to the next delegation call.
-         * @returns {Array} An array of delegation resutls.
-         */
-        _delegate: function (args) {
-            var result;
-
-            result = this.elems.map(function (elem) {
-                return elem.delegate.apply(elem, args);
-            });
-
-            return _.flatten(result);
-        },
-
-        /**
-         * Overrides 'EventsBus.trigger' method to implement events bubbling.
-         *
-         * @param {String} name - Name of the event.
-         * @param [...] Any number of arguments that should be to the events' handler.
-         * @returns {Boolean} False if event bubbling was canceled.
-         */
-        bubble: function () {
-            var args = _.toArray(arguments),
-                bubble = this.trigger.apply(this, args),
-                result;
-
-            if (!bubble) {
-                return false;
-            }
-
-            this.containers.forEach(function (parent) {
-                result = parent.bubble.apply(parent, args);
-
-                if (result === false) {
-                    bubble = false;
-                }
-            });
-
-            return !!bubble;
-        }
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/class.js b/app/code/Magento/Ui/view/base/web/js/lib/core/class.js
similarity index 99%
rename from app/code/Magento/Ui/view/base/web/js/lib/class.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/class.js
index f8191d57a36..38dce34526e 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/class.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/class.js
@@ -34,6 +34,7 @@ define([
         var constr = consturctor;
 
         if (!constr) {
+
             /**
              * Default constructor function.
              */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js b/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
new file mode 100644
index 00000000000..b86ffa340da
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
@@ -0,0 +1,374 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'underscore',
+    'mageUtils',
+    'uiRegistry',
+    'uiModel',
+    'Magento_Ui/js/lib/ko/initialize'
+], function (_, utils, registry, Model) {
+    'use strict';
+
+    /**
+     * Removes non plain object items from the specfied array.
+     *
+     * @param {Array} container - Array whose value should be filtered.
+     * @returns {Array}
+     */
+    function compact(container) {
+        return container.filter(utils.isObject);
+    }
+
+    return Model.extend({
+        defaults: {
+            template: 'ui/collection',
+            componentType: 'container',
+            registerNodes: true,
+            ignoreTmpls: {
+                childDefaults: true
+            }
+        },
+
+        /**
+         * Initializes component.
+         *
+         * @returns {Component} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initProperties()
+                .initUnique();
+
+            return this;
+        },
+
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {Model} Chainable.
+         */
+        initObservable: function () {
+            this._super()
+                .observe({
+                    elems: []
+                });
+
+            return this;
+        },
+
+        /**
+         * Defines various properties.
+         *
+         * @returns {Component} Chainable.
+         */
+        initProperties: function () {
+            _.extend(this, {
+                source: registry.get(this.provider),
+                containers: [],
+                _elems: []
+            });
+
+            return this;
+        },
+
+        /**
+         * Initializes listeners of the unique property.
+         *
+         * @returns {Component} Chainable.
+         */
+        initUnique: function () {
+            var update = this.onUniqueUpdate.bind(this),
+                uniqueNs = this.uniqueNs;
+
+            this.hasUnique = this.uniqueProp && uniqueNs;
+
+            if (this.hasUnique) {
+                this.source.on(uniqueNs, update, this.name);
+            }
+
+            return this;
+        },
+
+        /**
+         * Called when current element was injected to another component.
+         *
+         * @param {Object} parent - Instance of a 'parent' component.
+         * @returns {Component} Chainable.
+         */
+        initContainer: function (parent) {
+            this.containers.push(parent);
+
+            return this;
+        },
+
+        /**
+         * Called when another element was added to current component.
+         *
+         * @param {Object} elem - Instance of an element that was added.
+         * @returns {Component} Chainable.
+         */
+        initElement: function (elem) {
+            elem.initContainer(this);
+
+            return this;
+        },
+
+        /**
+         * Returns path to components' template.
+         * @returns {String}
+         */
+        getTemplate: function () {
+            return this.template;
+        },
+
+        /**
+         * Updates property specified in uniqueNs
+         * if components' unique property is set to 'true'.
+         *
+         * @returns {Component} Chainable.
+         */
+        setUnique: function () {
+            var property = this.uniqueProp;
+
+            if (this[property]()) {
+                this.source.set(this.uniqueNs, this.name);
+            }
+
+            return this;
+        },
+
+        /**
+         * Callback which fires when property under uniqueNs has changed.
+         */
+        onUniqueUpdate: function (name) {
+            var active = name === this.name,
+                property = this.uniqueProp;
+
+            this[property](active);
+        },
+
+        /**
+         * Retrieves requested region.
+         * Creates region if it was not created yet
+         *
+         * @returns {ObservableArray}.
+         */
+        getRegion: function (name) {
+            var regions = this.regions = this.regions || {};
+
+            if (!regions[name]) {
+                this.observe.call(regions, name, []);
+            }
+
+            return regions[name];
+        },
+
+        /**
+         * Replaces specified regions' data with a provided one.
+         * Creates region if it was not created yet.
+         *
+         * @param {Array} items - New regions' data.
+         * @param {String} name - Name of the region.
+         * @returns {Component} Chainable.
+         */
+        updateRegion: function (items, name) {
+            if (name) {
+                this.getRegion(name)(items);
+            }
+
+            return this;
+        },
+
+        /**
+         * Requests specified components to insert
+         * them into 'elems' array starting from provided position.
+         *
+         * @param {(String|Array)} elems - Name of the component to insert.
+         * @param {Number} [position=-1] - Position at which to insert elements.
+         * @returns {Component} Chainable.
+         */
+        insertChild: function (elems, position) {
+            var container   = this._elems,
+                insert      = this._insert.bind(this),
+                update;
+
+            if (!Array.isArray(elems)) {
+                elems = [elems];
+            }
+
+            elems.map(function (item) {
+                return item.elem ?
+                    utils.insert(item.elem, container, item.position) :
+                    utils.insert(item, container, position);
+            }).forEach(function (item) {
+                if (item === true) {
+                    update = true;
+                } else if (_.isString(item)) {
+                    registry.get(item, insert);
+                } else if (utils.isObject(item)) {
+                    insert(item);
+                }
+            });
+
+            if (update) {
+                this._update();
+            }
+
+            return this;
+        },
+
+        /**
+         * Removes specified element from the 'elems' array.
+         *
+         * @param {Object} elem - Element to be removed.
+         * @returns {Component} Chainable.
+         */
+        removeChild: function (elem) {
+            utils.remove(this._elems, elem);
+            this._update();
+
+            return this;
+        },
+
+        /**
+         * Destroys current instance along with all of its' children.
+         */
+        destroy: function () {
+            this._dropHandlers()
+                ._clearRefs();
+        },
+
+        /**
+         * Removes events listeners.
+         * @private
+         *
+         * @returns {Component} Chainable.
+         */
+        _dropHandlers: function () {
+            this.off();
+
+            this.source.off(this.name);
+
+            return this;
+        },
+
+        /**
+         * Removes all references to current instance and
+         * calls 'destroy' method on all of its' children.
+         * @private
+         *
+         * @returns {Component} Chainable.
+         */
+        _clearRefs: function () {
+            registry.remove(this.name);
+
+            this.containers.forEach(function (parent) {
+                parent.removeChild(this);
+            }, this);
+
+            this.elems.each('destroy');
+
+            return this;
+        },
+
+        /**
+         * Inserts provided component into 'elems' array at a specified position.
+         * @private
+         *
+         * @param {Object} elem - Element to insert.
+         */
+        _insert: function (elem) {
+            var index = this._elems.indexOf(elem.name);
+
+            if (~index) {
+                this._elems[index] = elem;
+            }
+
+            this._update()
+                .initElement(elem);
+        },
+
+        /**
+         * Synchronizes multiple elements arrays with a core '_elems' container.
+         * Performs elemets grouping by theirs 'displayArea' property.
+         * @private
+         *
+         * @returns {Component} Chainable.
+         */
+        _update: function () {
+            var _elems = compact(this._elems),
+                grouped = _.groupBy(_elems, 'displayArea');
+
+            _.each(grouped, this.updateRegion, this);
+
+            this.elems(_elems);
+
+            return this;
+        },
+
+        /**
+         * Tries to call specified method of a current component,
+         * otherwise delegates attempt to its' children.
+         *
+         * @param {String} target - Name of the method.
+         * @param {...*} parameters - Arguments that will be passed to method.
+         * @returns {*} Result of the method calls.
+         */
+        delegate: function (target) {
+            var args = _.toArray(arguments);
+
+            target = this[target];
+
+            if (_.isFunction(target)) {
+                return target.apply(this, args.slice(1));
+            }
+
+            return this._delegate(args);
+        },
+
+        /**
+         * Calls 'delegate' method of all of it's children components.
+         * @private
+         *
+         * @param {Array} args - An array of arguments to pass to the next delegation call.
+         * @returns {Array} An array of delegation resutls.
+         */
+        _delegate: function (args) {
+            var result;
+
+            result = this.elems.map(function (elem) {
+                return elem.delegate.apply(elem, args);
+            });
+
+            return _.flatten(result);
+        },
+
+        /**
+         * Overrides 'EventsBus.trigger' method to implement events bubbling.
+         *
+         * @param {...*} parameters - Any number of arguments that should be passed to the events' handler.
+         * @returns {Boolean} False if event bubbling was canceled.
+         */
+        bubble: function () {
+            var args = _.toArray(arguments),
+                bubble = this.trigger.apply(this, args),
+                result;
+
+            if (!bubble) {
+                return false;
+            }
+
+            this.containers.forEach(function (parent) {
+                result = parent.bubble.apply(parent, args);
+
+                if (result === false) {
+                    bubble = false;
+                }
+            });
+
+            return !!bubble;
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/events.js b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
similarity index 98%
rename from app/code/Magento/Ui/view/base/web/js/lib/events.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/events.js
index 98df28ffa4f..42e06915c37 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
@@ -142,7 +142,7 @@ define([
         /**
          * Triggers event and executes all attached callbacks
          * @param  {String} name
-         * @return {Object} reference to this
+         * @returns {Boolean}
          */
         trigger: function (name) {
             var handlers,
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js b/app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js
similarity index 97%
rename from app/code/Magento/Ui/view/base/web/js/lib/component/links.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js
index 83e963dfcb2..c769be3775f 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js
@@ -163,13 +163,6 @@ define([
     }
 
     return {
-        defaults: {
-            maps: {
-                exports: {},
-                imports: {}
-            }
-        },
-
         setListeners: function (listeners) {
             var owner = this,
                 data;
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js b/app/code/Magento/Ui/view/base/web/js/lib/core/model/model.js
similarity index 72%
rename from app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/model/model.js
index 7fc41cf7f74..fd196863cc7 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/model/model.js
@@ -5,10 +5,17 @@
 define([
     'ko',
     'underscore',
-    'mageUtils'
-], function (ko, _, utils) {
+    'mageUtils',
+    'uiRegistry',
+    'uiEvents',
+    'uiClass',
+    './links',
+    './storage'
+], function (ko, _, utils, registry, Events, Class, links) {
     'use strict';
 
+    var Model;
+
     /**
      * Creates observable property using knockouts'
      * 'observableArray' or 'observable' methods,
@@ -53,7 +60,78 @@ define([
         }
     }
 
-    return {
+    Model = {
+        defaults: {
+            storageConfig: {
+                provider: 'localStorage',
+                namespace: '${ $.name }',
+                path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }'
+            },
+            maps: {
+                exports: {},
+                imports: {}
+            },
+            modules: {
+                storage: '${ $.storageConfig.provider }'
+            }
+        },
+
+        /**
+         * Initializes model instance.
+         *
+         * @returns {Model} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initObservable()
+                .initModules()
+                .setListeners(this.listens)
+                .initLinks();
+
+            return this;
+        },
+
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {Model} Chainable.
+         */
+        initObservable: function () {
+            return this;
+        },
+
+        /**
+         * Parses 'modules' object and creates
+         * async wrappers on specified components.
+         *
+         * @returns {Component} Chainable.
+         */
+        initModules: function () {
+            var modules = this.modules || {};
+
+            _.each(modules, function (component, property) {
+                this[property] = registry.async(component);
+            }, this);
+
+            return this;
+        },
+
+        /**
+         * Initializes links between properties.
+         *
+         * @returns {Component} Chainbale.
+         */
+        initLinks: function () {
+            this.setLinks(this.links, 'imports')
+                .setLinks(this.links, 'exports');
+
+            _.each({
+                exports: this.exports,
+                imports: this.imports
+            }, this.setLinks, this);
+
+            return this;
+        },
 
         /**
          * Returns value of the nested property.
@@ -71,7 +149,7 @@ define([
          *
          * @param {String} path - Path to property.
          * @param {*} value - New value of the property.
-         * @returns {Component} Chainable.
+         * @returns {Model} Chainable.
          */
         set: function (path, value) {
             var data = utils.nested(this, path),
@@ -82,7 +160,7 @@ define([
 
                 utils.nested(this, path, value);
 
-                this._notify(diffs);
+                this._notifyChanges(diffs);
             } else {
                 utils.nested(this, path, value);
             }
@@ -94,7 +172,7 @@ define([
          * Removes nested property from the object.
          *
          * @param {String} path - Path to the property.
-         * @returns {Component} Chainable.
+         * @returns {Model} Chainable.
          */
         remove: function (path) {
             var data,
@@ -111,7 +189,7 @@ define([
 
                 utils.nestedRemove(this, path);
 
-                this._notify(diffs);
+                this._notifyChanges(diffs);
             }
 
             return this;
@@ -128,7 +206,7 @@ define([
          * @param {Boolean} [useAccessors=false] - Whether to create an
          *      observable function or to use property accesessors.
          * @param {(Object|String|Array)} properties - List of observable properties.
-         * @returns {Component} Chainable.
+         * @returns {Model} Chainable.
          *
          * @example Sample declaration and equivalent knockout methods.
          *      this.key = 'value';
@@ -178,7 +256,7 @@ define([
          * with a predefined 'useAccessors' flag.
          *
          * @param {(String|Array|Object)} properties - List of observable properties.
-         * @returns {Component} Chainable.
+         * @returns {Model} Chainable.
          */
         track: function (properties) {
             this.observe(true, properties);
@@ -187,9 +265,12 @@ define([
         },
 
         /**
+         * Invokes subscribers for the provided changes.
          *
+         * @param {Object} diffs - Object with changes descriptions.
+         * @returns {Model} Chainable.
          */
-        _notify: function (diffs) {
+        _notifyChanges: function (diffs) {
             diffs.changes.forEach(function (change) {
                 this.trigger(change.path, change.value, change);
             }, this);
@@ -199,6 +280,8 @@ define([
 
                 this.trigger(name, value, changes);
             }, this);
+
+            return this;
         },
 
         /**
@@ -220,7 +303,7 @@ define([
          *
          * @param {String} property
          * @param {*} [data=this[property]]
-         * @returns {Component} Chainable.
+         * @returns {Model} Chainable.
          */
         store: function (property, data) {
             var ns = this.storageConfig.namespace,
@@ -237,7 +320,7 @@ define([
          * Removes stored property.
          *
          * @param {String} property - Property to be removed from storage.
-         * @returns {Component} Chainable.
+         * @returns {Model} Chainable.
          */
         removeStored: function (property) {
             var ns = this.storageConfig.namespace,
@@ -248,4 +331,8 @@ define([
             return this;
         }
     };
+
+    _.extend(Model, Events, links);
+
+    return Class.extend(Model);
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/core/model/storage.js
similarity index 89%
rename from app/code/Magento/Ui/view/base/web/js/lib/storage.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/model/storage.js
index a41bad442f1..62f87dcd432 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/model/storage.js
@@ -6,19 +6,30 @@ define([
     'underscore',
     'uiRegistry',
     'mageUtils',
-    'Magento_Ui/js/lib/events'
+    'uiEvents'
 ], function (_, registry, utils, EventsBus) {
     'use strict';
 
     var root = 'appData',
         storage;
 
+    /**
+     * Extracts and parses data stored in localStorage by the
+     * key specified in 'root' varaible.
+     *
+     * @returns {Object}
+     */
     function getRoot() {
         var data = localStorage.getItem(root);
 
         return !_.isNull(data) ? JSON.parse(data) : {};
     }
 
+    /**
+     * Writes provided data to the localStorage.
+     *
+     * @param {*} data - Data to be stored.
+     */
     function setRoot(data) {
         localStorage.setItem(root, JSON.stringify(data));
     }
@@ -28,6 +39,7 @@ define([
      * as a single nested structure.
      */
     storage = _.extend({
+
         /**
          * Retrieves value of the specified property.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
index 1e8ce81a7e0..aae69f9fe18 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
@@ -5,7 +5,7 @@
 /** Creates scope binding and registers in to ko.bindingHandlers object */
 define([
     'ko',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'jquery',
     'mage/translate'
 ], function (ko, registry, $) {
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
index 90605926b04..62a13e52add 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
@@ -7,7 +7,7 @@ define([
     'ko',
     'underscore',
     'mage/utils/wrapper',
-    'Magento_Ui/js/lib/events',
+    'uiEvents',
     'es6-collections'
 ], function (ko, _, wrapper, Events) {
     'use strict';
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
index 213d0ea8a7f..794a62b4d25 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
@@ -9,7 +9,14 @@ define([
 ], function (ko, Source, Renderer) {
     'use strict';
 
-    var sources = {};
+    var RemoteTemplateEngine,
+        NativeTemplateEngine = ko.nativeTemplateEngine,
+        sources = {};
+
+    /**
+     * Remote template engine class. Is used to be able to load remote templates via knockout template binding.
+     */
+    RemoteTemplateEngine = function () {};
 
     /**
      * Creates unique template identifier based on template name and it's extenders (optional)
@@ -20,12 +27,6 @@ define([
         return templateName;
     }
 
-    /**
-     * Remote template engine class. Is used to be able to load remote templates via knockout template binding.
-     */
-    var RemoteTemplateEngine = function () {};
-    var NativeTemplateEngine = ko.nativeTemplateEngine;
-
     RemoteTemplateEngine.prototype = new NativeTemplateEngine;
     RemoteTemplateEngine.prototype.constructor = RemoteTemplateEngine;
 
@@ -34,7 +35,7 @@ define([
      * Caches template after it's unique name and renders in once.
      * If template name is not typeof string, delegates work to knockout.templateSources.anonymousTemplate.
      * @param  {*} template
-     * @return {TemplateSource} - object with methods 'nodes' and 'data'.
+     * @returns {TemplateSource} Object with methods 'nodes' and 'data'.
      */
     RemoteTemplateEngine.prototype.makeTemplateSource = function (template) {
         var source,
@@ -54,11 +55,13 @@ define([
             }
 
             return source;
-        } else if ((template.nodeType == 1) || (template.nodeType == 8)) {
-            return new ko.templateSources.anonymousTemplate(template);
-        } else {
-            throw new Error("Unknown template type: " + template);
+        } else if (template.nodeType === 1 || template.nodeType === 8) {
+            source = new ko.templateSources.anonymousTemplate(template);
+
+            return source;
         }
+
+        throw new Error('Unknown template type: ' + template);
     };
 
     /**
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js b/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
index 9da1291111f..4445e7f3936 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
@@ -10,10 +10,13 @@ define([
     'use strict';
 
     return {
+
         /**
          * Renders template and it's extenders using this._parse function.
-         * Loads all extenders then merges them and wraps into div[data-template-extend="parent"] where parent is target template.
+         * Loads all extenders then merges them and wraps into
+         * div[data-template-extend="parent"] where parent is target template.
          * If no extenders provider, simply loads target template and passes execution to _parse.
+         *
          * @param {String} template - string, representing path to core template and it's extenders.
          * @returns {Deferred} - Promise of template to be rendered. Is being resolved with array of HTML elements.
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
index 6fd7d86e2a3..7986b187806 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
@@ -222,7 +222,7 @@ define([
         /**
          * Sets removal listener of the specified nodes.
          *
-         * @param ({HTMLElement|Array|ArrayLike}) nodes - Nodes whose removal to track.
+         * @param {(HTMLElement|Array|ArrayLike)} nodes - Nodes whose removal to track.
          * @param {Function} fn - Callback that will be invoked when node is removed.
          */
         remove: function (nodes, fn) {
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js
index a39203675c2..f2edf7f7065 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js
@@ -4,7 +4,7 @@
  */
 define([
     'underscore',
-    'Magento_Ui/js/core/renderer/layout'
+    'uiLayout'
 ], function (_, layout) {
     'use strict';
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
index 04b7f0ebe5a..edc08dc3de7 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
@@ -3,11 +3,11 @@
  * See COPYING.txt for license details.
  */
 define([
-    'Magento_Ui/js/lib/component/links'
+    'Magento_Ui/js/lib/core/model/links'
 ], function (links) {
     'use strict';
 
-    describe('Magento_Ui/js/lib/component/links', function () {
+    describe('Magento_Ui/js/lib/core/model/links', function () {
         var linksObj,
             returnedValue;
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
index bc2f08748f4..4ae9b212142 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
@@ -4,13 +4,13 @@
  */
 
 define([
-    'Magento_Ui/js/lib/events'
+    'Magento_Ui/js/lib/core/events'
 ], function (EventBus) {
     'use strict';
 
     var EVENT = 'testEvent';
 
-    describe('Magento_Ui/js/lib/events', function () {
+    describe('Magento_Ui/js/lib/core/events', function () {
         describe('"on" method', function () {
             afterEach(function () {
                 EventBus.off(EVENT);
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js
index 196bdd121dc..ac02100dffa 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js
@@ -6,7 +6,7 @@
 /*eslint max-nested-callbacks: 0*/
 
 define([
-    'Magento_Ui/js/lib/registry/registry'
+    'uiRegistry'
 ], function (registry) {
     'use strict';
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index 80d91e72d5e..b25abe1110b 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -384,11 +384,8 @@ app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
 app/code/Magento/Ui/view/base/web/js/core/renderer/types.js
 app/code/Magento/Ui/view/base/web/js/form/adapter.js
 app/code/Magento/Ui/view/base/web/js/form/client.js
-app/code/Magento/Ui/view/base/web/js/form/components/area.js
 app/code/Magento/Ui/view/base/web/js/form/components/collection.js
-app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
 app/code/Magento/Ui/view/base/web/js/form/components/html.js
-app/code/Magento/Ui/view/base/web/js/form/components/tab_group.js
 app/code/Magento/Ui/view/base/web/js/form/components/tab.js
 app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
 app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
@@ -403,8 +400,7 @@ app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
 app/code/Magento/Ui/view/base/web/js/grid/export.js
 app/code/Magento/Ui/view/base/web/js/grid/resize.js
 app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
-app/code/Magento/Ui/view/base/web/js/lib/component/links.js
-app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
+app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js
 app/code/Magento/Ui/view/base/web/js/lib/events.js
 app/code/Magento/Ui/view/base/web/js/lib/key-codes.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/datepicker.js
@@ -417,7 +413,6 @@ app/code/Magento/Ui/view/base/web/js/lib/ko/extender/observable_array.js
 app/code/Magento/Ui/view/base/web/js/lib/loader.js
 app/code/Magento/Ui/view/base/web/js/lib/spinner.js
 app/code/Magento/Ui/view/base/web/js/lib/step-wizard.js
-app/code/Magento/Ui/view/base/web/js/lib/storage.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/utils.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js
@@ -491,7 +486,7 @@ dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/v
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/columns.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js
-dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js
+dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9f81daba85b..9c10b3c747f 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -8,7 +8,7 @@ define([
     'underscore',
     'matchMedia',
     'text!mage/gallery/gallery.html',
-    'Magento_Ui/js/lib/class'
+    'uiClass'
 ], function ($, fotorama, _, mediaCheck, template, Class) {
     'use strict';
 
-- 
GitLab


From 7143f18f49c42d73481db751357133cb819ffac5 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Thu, 1 Oct 2015 19:09:56 +0300
Subject: [PATCH 208/420] MAGETWO-43528: Randomly re-sized grid

---
 .../Ui/view/base/web/js/grid/resize.js        | 35 +++++++++++++------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
index cef9cb707cf..cf2273c7271 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
@@ -37,6 +37,7 @@ define([
             visibleClass: '_resize-visible',
             cellContentElement: 'div.data-grid-cell-content',
             minColumnWidth: 40,
+            mozillaHackIterator: 0,
             windowResize: false,
             resizable: false,
             resizeConfig: {
@@ -92,6 +93,12 @@ define([
                 $(window).resize(this.checkAfterResize);
             }
 
+            //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed
+            //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068
+            if (navigator.userAgent.search(/Firefox/) > -1) {
+                this._mozillaHack();
+            }
+
             $(table).addClass(this.fixedLayoutClass);
 
             return this;
@@ -224,21 +231,27 @@ define([
             this.refreshLastColumn(column);
             this.preprocessingWidth();
 
-            //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed
-            //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068
-            if (navigator.userAgent.search(/Firefox/) > -1) {
-                setTimeout(function () {
-                    $(table).css('table-layout', 'auto');
-                    setTimeout(function () {
-                        $(table).css('table-layout', 'fixed');
-                    }, 500);
-                }, 500);
-            }
-
             model.on('visible', this.refreshLastColumn.bind(this, column));
             model.on('visible', this.preprocessingWidth.bind(this));
         },
 
+        /**
+         * Hack for mozilla firefox
+         */
+        _mozillaHack: function () {
+            var self = this;
+
+            setTimeout(function () {
+                if (self.mozillaHackIterator < 10) {
+                    $(window).resize();
+                    self.mozillaHackIterator++;
+                    self._mozillaHack();
+                } else {
+                    return false;
+                }
+            }, 500);
+        },
+
         /**
          * Check element is resizable or not
          * and append resizable element to DOM
-- 
GitLab


From d6faf2479349add5932ae83aa1e57b1202b692f4 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Thu, 1 Oct 2015 19:12:40 +0300
Subject: [PATCH 209/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

- Fix typos
---
 .../Catalog/view/frontend/templates/product/view/gallery.phtml  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 0f21866f808..1e7cd3db22f 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -47,7 +47,7 @@
                     "showCaption": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/caption"); ?>,
                     "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/duration"); ?>,
                     "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/effect"); ?>"
-                }
+                },
                 "breakpoints": <?php /* @escapeNotVerified */ echo $block->getBreakpoints(); ?>
             }
         }
-- 
GitLab


From 961464d068e4d04cb5b0859a9d51070567f9703b Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Thu, 1 Oct 2015 19:18:23 +0300
Subject: [PATCH 210/420] MAGETWO-43528: Randomly re-sized grid

---
 app/code/Magento/Ui/view/base/web/js/grid/resize.js | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
index cf2273c7271..98ac631409f 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
@@ -37,7 +37,7 @@ define([
             visibleClass: '_resize-visible',
             cellContentElement: 'div.data-grid-cell-content',
             minColumnWidth: 40,
-            mozillaHackIterator: 0,
+            layoutFixedPolyfillIterator: 0,
             windowResize: false,
             resizable: false,
             resizeConfig: {
@@ -96,7 +96,7 @@ define([
             //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed
             //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068
             if (navigator.userAgent.search(/Firefox/) > -1) {
-                this._mozillaHack();
+                this._layoutFixedPolyfill();
             }
 
             $(table).addClass(this.fixedLayoutClass);
@@ -238,14 +238,14 @@ define([
         /**
          * Hack for mozilla firefox
          */
-        _mozillaHack: function () {
+        _layoutFixedPolyfill: function () {
             var self = this;
 
             setTimeout(function () {
-                if (self.mozillaHackIterator < 10) {
+                if (self.layoutFixedPolyfillIterator < 10) {
                     $(window).resize();
-                    self.mozillaHackIterator++;
-                    self._mozillaHack();
+                    self.layoutFixedPolyfillIterator++;
+                    self._layoutFixedPolyfill();
                 } else {
                     return false;
                 }
-- 
GitLab


From 1af85c6addbb26f9f86d5568deacc8572682d017 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Thu, 1 Oct 2015 19:31:37 +0300
Subject: [PATCH 211/420] MAGETWO-42762: Improve performance of table rendering

- Fix bug
---
 .../Ui/view/base/web/js/lib/core/component/component.js  | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js b/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
index b86ffa340da..9cd1bcfee3c 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
@@ -64,8 +64,11 @@ define([
          * @returns {Component} Chainable.
          */
         initProperties: function () {
+            if (!this.source) {
+                this.source = registry.get(this.provider);
+            }
+
             _.extend(this, {
-                source: registry.get(this.provider),
                 containers: [],
                 _elems: []
             });
@@ -159,7 +162,9 @@ define([
             var regions = this.regions = this.regions || {};
 
             if (!regions[name]) {
-                this.observe.call(regions, name, []);
+                regions[name] = [];
+
+                this.observe.call(regions, name);
             }
 
             return regions[name];
-- 
GitLab


From cc38a4a3a66fb0fe9a94e084a78af11247de6ee2 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Thu, 1 Oct 2015 20:15:23 +0300
Subject: [PATCH 212/420] MAGETWO-42762: Improve performance of table rendering

- Fix configurable product grid
---
 ...onfigurable_associated_product_listing.xml |  5 +++-
 .../base/web/js/form/element/ui-select.js     | 28 ++-----------------
 .../view/base/web/js/grid/filters/filters.js  |  7 +++--
 3 files changed, 10 insertions(+), 30 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index 969a2a5fb9a..9c2e8d868fd 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -37,7 +37,7 @@
                 <item name="template" xsi:type="string">ui/grid/toolbar</item>
             </item>
         </argument>
-        <filters name="listing_filters" class="Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters">
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns</item>
@@ -50,6 +50,9 @@
                             <item name="visible" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.${ $.index }:visible</item>
                         </item>
                     </item>
+                    <item name="observers" xsi:type="array">
+                        <item name="filters" xsi:type="object">Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters</item>
+                    </item>
                 </item>
             </argument>
             <filterSelect name="status">
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
index 638f78341d6..550ca108b20 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
@@ -5,12 +5,10 @@
 
 define([
     'underscore',
-    'ko',
     './abstract',
     'Magento_Ui/js/lib/key-codes',
-    'mage/translate',
-    'uiLayout'
-], function (_, ko, Abstract, keyCodes, $t, layout) {
+    'mage/translate'
+], function (_, Abstract, keyCodes, $t) {
     'use strict';
 
     /**
@@ -52,20 +50,10 @@ define([
                 defaultPlaceholder: $t('Select...'),
                 lotPlaceholders: $t('Selected')
             },
-            optionsConfig: {
-                name: '${ $.name }_options',
-                component: 'Magento_Ui/js/form/element/helpers/options'
-            },
             hoverElIndex: null,
             listens: {
                 listVisible: 'cleanHoveredElement',
                 filterInputValue: 'filterOptionsList'
-            },
-            imports: {
-                options: '${ $.optionsConfig.name }:options'
-            },
-            modules: {
-                optionsProvider: '${ $.optionsConfig.name }'
             }
         },
 
@@ -134,18 +122,6 @@ define([
             return this;
         },
 
-        /**
-         * Initializes optionsProvider
-         *
-         * @returns {Object} Chainable.
-         */
-        initOptions: function () {
-            this.optionsConfig.options = this.options();
-            layout([this.optionsConfig]);
-
-            return this;
-        },
-
         /**
          * Handler outerClick event. Closed options list
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index bcfbf06de08..42ec8cf7513 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -61,9 +61,10 @@ define([
                         template: 'ui/grid/filters/elements/input'
                     },
                     select: {
-                        component: 'Magento_Ui/js/form/element/ui-select',
-                        template: 'ui/grid/filters/elements/ui-select',
-                        options: '${ JSON.stringify($.$data.column.options) }'
+                        component: 'Magento_Ui/js/form/element/select',
+                        template: 'ui/grid/filters/elements/select',
+                        options: '${ JSON.stringify($.$data.column.options) }',
+                        caption: ' '
                     },
                     dateRange: {
                         component: 'Magento_Ui/js/grid/filters/range',
-- 
GitLab


From 4557e008ab2369227d3d9bd514c489365f5126bd Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 1 Oct 2015 13:45:56 -0500
Subject: [PATCH 213/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

---
 lib/internal/Magento/Framework/Code/Generator.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index ed16a98977c..edd02f6c204 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -89,7 +89,7 @@ class Generator
             }
         }
 
-        if ($skipReason = $this->validate($resultEntityType, $sourceClassName, $className)) {
+        if ($skipReason = $this->shouldSkipGeneration($resultEntityType, $sourceClassName, $className)) {
             return $skipReason;
         }
 
@@ -198,7 +198,7 @@ class Generator
      * @param string $resultClass
      * @return string|bool
      */
-    protected function validate($resultEntityType, $sourceClassName, $resultClass)
+    protected function shouldSkipGeneration($resultEntityType, $sourceClassName, $resultClass)
     {
         if (!$resultEntityType || !$sourceClassName) {
             return self::GENERATION_ERROR;
-- 
GitLab


From fe49f3d61f7fb24b947d69afbb4cac64a072b4d9 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Thu, 1 Oct 2015 22:00:50 +0300
Subject: [PATCH 214/420] MAGETWO-42607: MAP popup isn't displayed for Tier
 Prices on "view Product" Storefront page

---
 .../templates/product/price/tier_prices.phtml |   3 +-
 .../Catalog/view/frontend/requirejs-config.js |   1 +
 .../Magento/Msrp/view/base/web/js/msrp.js     | 197 ++++++++++++++----
 .../Msrp/view/frontend/templates/popup.phtml  |   5 +-
 4 files changed, 160 insertions(+), 46 deletions(-)

diff --git a/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml b/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml
index c0b494718c0..030e663359f 100644
--- a/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml
+++ b/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml
@@ -86,8 +86,9 @@ $product = $block->getSaleableItem();
         <script type="text/x-magento-init">
             {
                 ".product-info-main": {
-                    "tierPrice": {
+                    "addToCart": {
                         "inputQty": "#qty",
+                        "attr": "[data-tier-price]",
                         "productForm": "#product_addtocart_form"
                     }
                 }
diff --git a/app/code/Magento/Catalog/view/frontend/requirejs-config.js b/app/code/Magento/Catalog/view/frontend/requirejs-config.js
index a840a196c6a..3c0ffa65c8d 100644
--- a/app/code/Magento/Catalog/view/frontend/requirejs-config.js
+++ b/app/code/Magento/Catalog/view/frontend/requirejs-config.js
@@ -12,6 +12,7 @@ var config = {
             upsellProducts:         'Magento_Catalog/js/upsell-products',
             productListToolbarForm: 'Magento_Catalog/js/product/list/toolbar',
             tierPrice:              'Magento_Catalog/js/tier-price',
+            addToCart:              'Magento_Msrp/js/msrp',
             catalogGallery:         'Magento_Catalog/js/gallery',
             priceBox:               'Magento_Catalog/js/price-box',
             priceOptionDate:        'Magento_Catalog/js/price-option-date',
diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js
index 8bad507ec07..42603c231fb 100644
--- a/app/code/Magento/Msrp/view/base/web/js/msrp.js
+++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js
@@ -6,7 +6,8 @@ define([
     'jquery',
     'underscore',
     'jquery/ui',
-    'mage/dropdown'
+    'mage/dropdown',
+    'mage/template'
 ], function ($, _) {
     'use strict';
 
@@ -31,56 +32,163 @@ define([
             // Text options
             productName: '',
             addToCartUrl: ''
+
         },
 
         openDropDown: null,
+        triggerClass:'dropdown-active',
 
+        popUpOptions: {
+            appendTo: 'body',
+            dialogContentClass: 'active',
+            closeOnMouseLeave: false,
+            autoPosition: true,
+            closeOnClickOutside: false,
+            'dialogClass': 'popup map-popup-wrapper',
+            position: {
+                my: 'left top',
+                collision: 'fit none',
+                at: 'left bottom',
+                within: 'body'
+            },
+            shadowHinter: 'popup popup-pointer'
+        },
+        popupOpened: false,
         /**
          * Creates widget instance
          * @private
          */
         _create: function () {
-            $(this.options.cartButtonId).on('click', this._addToCartSubmit.bind(this));
+            this.popupDOM = $('[data-role=msrp-popup-template]')[0];
+            this.infoPopupDOM = $('[data-role=msrp-info-template]')[0];
 
-            $(this.options.popupId).on('click', function (event) {
-                var dialog;
-                event.preventDefault();
+            if(this.options.popupId){
+                this.$popup = $(this.popupDOM.innerText).appendTo('body');
 
-                if (this.options.submitUrl) {
-                    location.href = this.options.submitUrl;
-                } else {
-                    $(this.options.popupCartButtonId)
-                        .off('click')
-                        .on('click', this._addToCartSubmit.bind(this));
-                    $('#map-popup-heading-price').text(this.options.productName);
-                    $('#map-popup-price').html($(this.options.realPrice).html().trim());
-                    $('#map-popup-msrp > span.price').html(this.options.msrpPrice);
 
-                    this.element.trigger('reloadPrice');
+                    //.on('dropdowndialogclose', function () {
+                    //    this.$popup.removeClass(this.triggerClass);
+                    //}.bind(this))
+                    //.on('dropdowndialogopen', function () {
+                    //    this.$popup.addClass(this.triggerClass);
+                    //}.bind(this)).dropdownDialog('open');
 
-                    dialog = $('#map-popup-click-for-price');
-                    this._popupDialog(dialog, this.options.popupId);
+                $(this.options.popupId).on('click', function(e){
+                        this.popUpOptions.position.of = $(e.target);
+                        this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
+                        this._toggle(this.$popup);
+                }.bind(this));
+            }
 
-                    if (this.options.addToCartUrl) {
-                        $(this.options.cartForm).attr('action', this.options.addToCartUrl);
-                    }
+            if(this.options.helpLinkId) {
+                this.$infoPopup = $(this.infoPopupDOM.innerText).appendTo('body');
 
-                    if (!this.options.showAddToCart) {
-                        $('#product_addtocart_form_from_popup').hide();
-                    }
+                $(this.options.helpLinkId).on('click', function(e){
+                    this.popUpOptions.position.of = $(e.target);
+                    this.$infoPopup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
+                    this._toggle(this.$infoPopup);
+                }.bind(this));
+            }
 
-                    return false;
-                }
-            }.bind(this));
+            if(this.options.attr){
+                this.popupDOM = $('[data-role=msrp-popup-template]')[0];
+                this.$popup = $(this.popupDOM.innerText).appendTo('body');
+                //$(this.options.attr).on('mousedown', function(e){
+                //    this.drawPopup(e);
+                //}.bind(this));
 
-            $(this.options.helpLinkId).on('click', function () {
-                $('#map-popup-heading-what-this').text(this.options.productName);
-                this._popupDialog($('#map-popup-what-this'), this.options.helpLinkId);
+                this.popUpOptions.position.of = $(this.options.helpLinkId);
+
+                $(this.options.attr).on('click', function(e){
+                    this.popUpOptions.position.of = $(e.target);
+                    this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
+                    this._toggle(this.$popup);
+
+                }.bind(this));
+            }
+            //console.log(popup.innerHTML);
+            //console.log(infoPopup.innerHTML);
+            //document.body.innerHTML += data.innerHTML;
+
+            //$(this.options.cartButtonId).on('click', this._addToCartSubmit.bind(this));
+            //
+            //$(this.options.popupId).on('click', function (event) {
+            //    var dialog;
+            //    event.preventDefault();
+            //
+            //    if (this.options.submitUrl) {
+            //        location.href = this.options.submitUrl;
+            //    } else {
+            //        $(this.options.popupCartButtonId)
+            //            .off('click')
+            //            .on('click', this._addToCartSubmit.bind(this));
+            //        $('#map-popup-heading-price').text(this.options.productName);
+            //        $('#map-popup-price').html($(this.options.realPrice).html().trim());
+            //        $('#map-popup-msrp > span.price').html(this.options.msrpPrice);
+            //
+            //        this.element.trigger('reloadPrice');
+            //
+            //        dialog = $('#map-popup-click-for-price');
+            //        this._popupDialog(dialog, this.options.popupId);
+            //
+            //        if (this.options.addToCartUrl) {
+            //            $(this.options.cartForm).attr('action', this.options.addToCartUrl);
+            //        }
+            //
+            //        if (!this.options.showAddToCart) {
+            //            $('#product_addtocart_form_from_popup').hide();
+            //        }
+            //
+            //        return false;
+            //    }
+            //}.bind(this));
+            //
+            //$(this.options.helpLinkId).on('click', function () {
+            //    $('#map-popup-heading-what-this').text(this.options.productName);
+            //    this._popupDialog($('#map-popup-what-this'), this.options.helpLinkId);
+            //
+            //    return false;
+            //}.bind(this));
+        },
+        _toggle: function($elem){
+            $(document).on('mouseup', function(e){
+
+                if (!$elem.is(e.target) && $elem.has(e.target).length === 0) {
+                    $elem.dropdownDialog('close');
+                    $(document).off('mouseup');
+                }
 
-                return false;
             }.bind(this));
         },
+        initDropDown: function(){
+            this.popUpOptions.position.of = $(this.options.popupId);
+            this.dropdown = this.$popup.dropdownDialog(this.popUpOptions)
+                .on('dropdowndialogclose', function () {
+                    this.$popup.removeClass(this.triggerClass);
+                }.bind(this))
+                .on('dropdowndialogopen', function () {
+                    this.$popup.addClass(this.triggerClass);
+                }.bind(this));
+        },
+        drawPopup: function(e){
+            //this.popUpOptions.position.of = $(e.target);
+            this.dropdown.dropdownDialog('open');
+        },
+
+        drawInfo: function(e){
+            this.popUpOptions.position.of = $(e.target);
+            openDropDown = this.$infoPopup.dropdownDialog(this.popUpOptions)
 
+                .on('dropdowndialogclose', function () {
+
+                    this.$infoPopup.removeClass(this.triggerClass);
+                }.bind(this))
+                .on('dropdowndialogopen', function () {
+                    this.$infoPopup.addClass(this.triggerClass);
+                }.bind(this))
+                .dropdownDialog('open');
+
+        },
         /**
          * Handler for dialog popup
          * @param {jQuery} elementTarget
@@ -153,21 +261,22 @@ define([
          * @private
          */
         _addToCartSubmit: function () {
-            this.element.trigger('addToCart', this.element);
-            if (this.element.data('stop-processing')) {
-                return false;
-            }
-
-            if (this.options.addToCartButton) {
-                $(this.options.addToCartButton).click();
+            //this.element.trigger('addToCart', this.element);
+            //if (this.element.data('stop-processing')) {
+            //    return false;
+            //}
+            //
+            //if (this.options.addToCartButton) {
+            //    $(this.options.addToCartButton).click();
+            //
+            //    return;
+            //}
+            //
+            //if (this.options.addToCartUrl) {
+            //    $('.mage-dropdown-dialog > .ui-dialog-content').dropdownDialog('close');
+            //}
+            //$(this.options.cartForm).submit();
 
-                return;
-            }
-
-            if (this.options.addToCartUrl) {
-                $('.mage-dropdown-dialog > .ui-dialog-content').dropdownDialog('close');
-            }
-            $(this.options.cartForm).submit();
         }
     });
 
diff --git a/app/code/Magento/Msrp/view/frontend/templates/popup.phtml b/app/code/Magento/Msrp/view/frontend/templates/popup.phtml
index 07230989e18..521f17e4971 100644
--- a/app/code/Magento/Msrp/view/frontend/templates/popup.phtml
+++ b/app/code/Magento/Msrp/view/frontend/templates/popup.phtml
@@ -11,6 +11,7 @@
 /** @var \Magento\Msrp\Block\Popup $block */
 ?>
 <?php if ($block->isEnabled()): ?>
+    <script data-role="msrp-popup-template" type="text/x-magento-template">
     <div id="map-popup-click-for-price" class="map-popup">
         <div class="popup-header">
             <strong class="title" id="map-popup-heading-price"></strong>
@@ -47,7 +48,8 @@
             </div>
         </div>
     </div>
-
+    </script>
+    <script data-role="msrp-info-template" type="text/x-magento-template">
     <div id="map-popup-what-this" class="map-popup">
         <div class="popup-header">
             <strong class="title" id="map-popup-heading-what-this"></strong>
@@ -58,4 +60,5 @@
             </div>
         </div>
     </div>
+    </script>
 <?php endif; ?>
-- 
GitLab


From dcb04da5585a3ce8a7d4a19c584370576d93643f Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 2 Oct 2015 09:21:30 +0300
Subject: [PATCH 215/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../view/adminhtml/templates/catalog/category/tree.phtml        | 2 ++
 .../SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml  | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 249f02f6e3f..63927772b31 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -229,6 +229,8 @@ function reRenderTree(switcherParams) {
 
                     try {
                         response = JSON.parse(transport.responseText);
+                    } catch {
+                        console.warn('error when parse response');
                     }
 
                     if (!response || !response['parameters']) {
diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
index fea5d38e825..ae7deb609bb 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
+++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
@@ -82,6 +82,8 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
             if (transport && transport.responseText) {
                 try {
                     response = JSON.parse(transport.responseText);
+                } catch {
+                    console.warn('error when parse response');
                 }
             }
             if (couponCodesGrid) {
-- 
GitLab


From bda701f33255178512fc27ab0fe42b54e5510ab3 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 2 Oct 2015 09:25:32 +0300
Subject: [PATCH 216/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../view/adminhtml/templates/catalog/category/tree.phtml        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 63927772b31..92559461ed1 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -229,7 +229,7 @@ function reRenderTree(switcherParams) {
 
                     try {
                         response = JSON.parse(transport.responseText);
-                    } catch {
+                    } catch (e) {
                         console.warn('error when parse response');
                     }
 
-- 
GitLab


From 8dd8cd533b102533c36b63a356b4a2016844d191 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 2 Oct 2015 09:26:09 +0300
Subject: [PATCH 217/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
index ae7deb609bb..c0bf9182600 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
+++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
@@ -82,7 +82,7 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
             if (transport && transport.responseText) {
                 try {
                     response = JSON.parse(transport.responseText);
-                } catch {
+                } catch (e) {
                     console.warn('error when parse response');
                 }
             }
-- 
GitLab


From 570bc60556978a97beee3f1e28931c34394702e7 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Fri, 2 Oct 2015 09:31:59 +0300
Subject: [PATCH 218/420] MAGETWO-43528: Randomly re-sized grid

---
 app/code/Magento/Ui/view/base/web/js/grid/resize.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
index 98ac631409f..6f0ea9bd337 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
@@ -242,7 +242,7 @@ define([
             var self = this;
 
             setTimeout(function () {
-                if (self.layoutFixedPolyfillIterator < 10) {
+                if (self.layoutFixedPolyfillIterator < 20) {
                     $(window).resize();
                     self.layoutFixedPolyfillIterator++;
                     self._layoutFixedPolyfill();
-- 
GitLab


From f8aee1be6e732ab8b7a1f39206f0a297bc741989 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 2 Oct 2015 10:44:26 +0300
Subject: [PATCH 219/420] MAGETWO-39938: [static scan] Code injection:
 #15723895, #15723900, #15723908

---
 .../view/adminhtml/templates/catalog/category/tree.phtml        | 2 +-
 .../SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 92559461ed1..36a55789dfd 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -230,7 +230,7 @@ function reRenderTree(switcherParams) {
                     try {
                         response = JSON.parse(transport.responseText);
                     } catch (e) {
-                        console.warn('error when parse response');
+                        console.warn('An error occured while parsing response');
                     }
 
                     if (!response || !response['parameters']) {
diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
index c0bf9182600..2fd5b395e3b 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
+++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
@@ -83,7 +83,7 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
                 try {
                     response = JSON.parse(transport.responseText);
                 } catch (e) {
-                    console.warn('error when parse response');
+                    console.warn('An error occured while parsing response');
                 }
             }
             if (couponCodesGrid) {
-- 
GitLab


From 295fb0baebf7d7da96888e51a347c703c11c1ed6 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 2 Oct 2015 11:09:04 +0300
Subject: [PATCH 220/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

- Fix typos
---
 app/design/frontend/Magento/luma/etc/view.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index e6f6ef625a4..29336ddfbd2 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -211,6 +211,7 @@
                 <var name="transition">
                     <var name="effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
                     <var name="duration">500</var> <!-- Sets transition duration in ms -->
+                    <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
                 </var>
             </var>
         </var>
-- 
GitLab


From 43886c03e2114d35d07fa66e34fd6760db7d830c Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 2 Oct 2015 11:16:55 +0300
Subject: [PATCH 221/420] JS-51: Gallery Widget Configuration and Extension on
 theme level

- Fix typos
---
 app/design/frontend/Magento/blank/etc/view.xml | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 805f28e906f..83600f8db5e 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -196,15 +196,16 @@
             </var>
             <var name="fullscreen">
                 <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
-                <var name="loop">false</var> <!-- Fullscreen navigation loop (true/false) -->
+                <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
                 <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
-                <var name="arrows">null</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
-                <var name="caption">null</var> <!-- Display alt text as image title (true/false/null) -->
-                <var name="navdir">vertical</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
-                <var name="thumbwidth">100</var> <!-- Width of thumbnails in fullscreen -->
-                <var name="thumbheight">100</var> <!-- Height of thumbnails in fullscreen -->
+                <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+                <var name="caption">false</var> <!-- Display alt text as image title (true/false) -->
+                <var name="navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+                <var name="thumbwidth">150</var> <!-- Width of thumbnails in fullscreen -->
+                <var name="thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
+                <var name="navigation_carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
                 <var name="transition">
-                    <var name="effect">crossfade</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+                    <var name="effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
                     <var name="duration">500</var> <!-- Sets transition duration in ms -->
                     <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
                 </var>
-- 
GitLab


From 2fd8ef5a7a5db6a41ab0d3069b4777de334ec312 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 2 Oct 2015 12:33:07 +0300
Subject: [PATCH 222/420] MAGETWO-42762: Improve performance of table rendering

- Change format of statefull properties
- Move core functionality to uiElement
---
 .../frontend/web/js/model/gift-message.js     |   6 +-
 .../Magento/Ui/view/base/requirejs-config.js  |   5 +-
 .../Magento/Ui/view/base/web/js/core/app.js   |   3 +-
 .../view/base/web/js/form/components/group.js |   6 +-
 .../view/base/web/js/form/components/tab.js   |   6 +-
 .../web/js/form/element/helpers/options.js    |  13 --
 .../Magento/Ui/view/base/web/js/form/form.js  |   6 +-
 .../Ui/view/base/web/js/form/provider.js      |   6 +-
 .../view/base/web/js/grid/columns/column.js   |  12 +-
 .../Ui/view/base/web/js/grid/columns/date.js  |   8 +-
 .../js/grid/controls/bookmarks/bookmarks.js   |   6 +-
 .../web/js/grid/controls/bookmarks/storage.js |   2 +-
 .../view/base/web/js/grid/controls/columns.js |   6 +-
 .../view/base/web/js/grid/editing/editor.js   |   6 +-
 .../view/base/web/js/grid/editing/record.js   |   6 +-
 .../Ui/view/base/web/js/grid/export.js        |   7 +-
 .../Ui/view/base/web/js/grid/filters/chips.js |   6 +-
 .../view/base/web/js/grid/filters/filters.js  |  10 +-
 .../Ui/view/base/web/js/grid/listing.js       |  18 +--
 .../Ui/view/base/web/js/grid/paging/paging.js |   6 +-
 .../Ui/view/base/web/js/grid/paging/sizes.js  |  12 +-
 .../Ui/view/base/web/js/grid/provider.js      |   6 +-
 .../Ui/view/base/web/js/grid/resize.js        |   6 +-
 .../Ui/view/base/web/js/grid/search/search.js |  12 +-
 .../{component/component.js => collection.js} |  43 +++----
 .../{model/model.js => element/element.js}    | 120 ++++++++++++++----
 .../js/lib/core/{model => element}/links.js   |   0
 .../Ui/view/base/web/js/lib/core/events.js    |   5 +-
 .../web/js/lib/core/{model => }/storage.js    |   0
 .../Ui/view/base/web/js/lib/ko/initialize.js  |   3 +-
 .../base/web/js/lib/ko/template/engine.js     |   2 +-
 .../web/js/lib/{ => ko/template}/loader.js    |   1 +
 .../lib/{renderer => ko/template}/renderer.js |   2 +-
 .../Ui/base/js/lib/component/links.test.js    |   4 +-
 .../Test/Js/_files/blacklist/magento.txt      |   4 +-
 35 files changed, 204 insertions(+), 160 deletions(-)
 delete mode 100644 app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
 rename app/code/Magento/Ui/view/base/web/js/lib/core/{component/component.js => collection.js} (91%)
 rename app/code/Magento/Ui/view/base/web/js/lib/core/{model/model.js => element/element.js} (75%)
 rename app/code/Magento/Ui/view/base/web/js/lib/core/{model => element}/links.js (100%)
 rename app/code/Magento/Ui/view/base/web/js/lib/core/{model => }/storage.js (100%)
 rename app/code/Magento/Ui/view/base/web/js/lib/{ => ko/template}/loader.js (99%)
 rename app/code/Magento/Ui/view/base/web/js/lib/{renderer => ko/template}/renderer.js (99%)

diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
index d72057e2b85..502e3ab77d2 100644
--- a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
+++ b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
@@ -3,11 +3,11 @@
  * See COPYING.txt for license details.
  */
 /*global define*/
-define(['uiModel', 'underscore', 'mage/url'],
-    function (uiModel, _, url) {
+define(['uiElement', 'underscore', 'mage/url'],
+    function (uiElement, _, url) {
         'use strict';
 
-        var provider = uiModel();
+        var provider = uiElement();
 
         return function (itemId) {
             var model = {
diff --git a/app/code/Magento/Ui/view/base/requirejs-config.js b/app/code/Magento/Ui/view/base/requirejs-config.js
index e704a698879..604ed1e5904 100644
--- a/app/code/Magento/Ui/view/base/requirejs-config.js
+++ b/app/code/Magento/Ui/view/base/requirejs-config.js
@@ -9,9 +9,10 @@ var config = {
     },
     map: {
         '*': {
-            uiComponent:    'Magento_Ui/js/lib/core/component/component',
+            uiElement:      'Magento_Ui/js/lib/core/element/element',
+            uiCollection:   'Magento_Ui/js/lib/core/collection',
+            uiComponent:    'Magento_Ui/js/lib/core/collection',
             uiClass:        'Magento_Ui/js/lib/core/class',
-            uiModel:        'Magento_Ui/js/lib/core/model/model',
             uiEvents:       'Magento_Ui/js/lib/core/events',
             uiRegistry:     'Magento_Ui/js/lib/registry/registry',
             uiLayout:       'Magento_Ui/js/core/renderer/layout'
diff --git a/app/code/Magento/Ui/view/base/web/js/core/app.js b/app/code/Magento/Ui/view/base/web/js/core/app.js
index 5c4593bd486..b009aca28d2 100644
--- a/app/code/Magento/Ui/view/base/web/js/core/app.js
+++ b/app/code/Magento/Ui/view/base/web/js/core/app.js
@@ -4,7 +4,8 @@
  */
 define([
     './renderer/types',
-    './renderer/layout'
+    './renderer/layout',
+    'Magento_Ui/js/lib/ko/initialize'
 ], function (types, layout) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/group.js b/app/code/Magento/Ui/view/base/web/js/form/components/group.js
index daf56e7e564..18bc1779477 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/group.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/group.js
@@ -4,11 +4,11 @@
  */
 define([
     'underscore',
-    'uiComponent'
-], function (_, Component) {
+    'uiCollection'
+], function (_, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             visible: true,
             label: '',
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
index 61560892e3e..8559e658835 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
@@ -3,11 +3,11 @@
  * See COPYING.txt for license details.
  */
 define([
-    'uiComponent'
-], function (Component) {
+    'uiCollection'
+], function (Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             uniqueProp:     'active',
             active:         false,
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js b/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
deleted file mode 100644
index 99b14e19582..00000000000
--- a/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-define([
-    'uiComponent'
-], function (Component) {
-    'use strict';
-
-    return Component.extend({
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/form/form.js b/app/code/Magento/Ui/view/base/web/js/form/form.js
index 2a192c20c24..692f92d6a02 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/form.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/form.js
@@ -4,10 +4,10 @@
  */
 define([
     'underscore',
-    'uiComponent',
+    'uiCollection',
     'Magento_Ui/js/lib/spinner',
     './adapter'
-], function (_, Component, loader, adapter) {
+], function (_, Collection, loader, adapter) {
     'use strict';
 
     function collectData(selector) {
@@ -23,7 +23,7 @@ define([
         return result;
     }
 
-    return Component.extend({
+    return Collection.extend({
         initialize: function () {
             this._super()
                 .initAdapter()
diff --git a/app/code/Magento/Ui/view/base/web/js/form/provider.js b/app/code/Magento/Ui/view/base/web/js/form/provider.js
index 8b182d2b8f2..0acd2dac31d 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/provider.js
@@ -4,12 +4,12 @@
  */
 define([
     'underscore',
-    'uiComponent',
+    'uiElement',
     './client'
-], function (_, Component, Client) {
+], function (_, Element, Client) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         initialize: function () {
             this._super()
                 .initClient();
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
index 8cb07d8a714..0d113fdbae5 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
@@ -6,11 +6,11 @@ define([
     'underscore',
     'uiRegistry',
     'mageUtils',
-    'uiComponent'
-], function (_, registry, utils, Component) {
+    'uiElement'
+], function (_, registry, utils, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             headerTmpl: 'ui/grid/columns/text',
             bodyTmpl: 'ui/grid/cells/text',
@@ -24,9 +24,9 @@ define([
             ignoreTmpls: {
                 fieldAction: true
             },
-            links: {
-                visible: '${ $.storageConfig.path }.visible',
-                sorting: '${ $.storageConfig.path }.sorting'
+            statefull: {
+                visible: true,
+                sorting: true
             },
             imports: {
                 exportSorting: 'sorting'
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
index a12e0436eec..19ac459e2dc 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
@@ -15,14 +15,16 @@ define([
         },
 
         /**
-         * Initializes components' static properties.
+         * Overrides base method to normalize date format.
          *
          * @returns {DateColumn} Chainable.
          */
-        initProperties: function () {
+        initConfig: function () {
+            this._super();
+
             this.dateFormat = utils.normalizeDate(this.dateFormat);
 
-            return this._super();
+            return this;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
index d9cd0f66a39..81759664b63 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
@@ -7,8 +7,8 @@ define([
     'mageUtils',
     'mage/translate',
     'uiLayout',
-    'uiComponent'
-], function (_, utils, $t, layout, Component) {
+    'uiCollection'
+], function (_, utils, $t, layout, Collection) {
     'use strict';
 
     /**
@@ -27,7 +27,7 @@ define([
         return path.join('.');
     }
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/controls/bookmarks/bookmarks',
             viewTmpl: 'ui/grid/controls/bookmarks/view',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
index 4a7eef274f8..48d3e7fa73d 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
@@ -5,7 +5,7 @@
 define([
     'jquery',
     'mageUtils',
-    'Magento_Ui/js/lib/core/model/storage',
+    'Magento_Ui/js/lib/core/storage',
     'uiClass'
 ], function ($, utils, storage, Class) {
     'use strict';
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
index 73fe224b55e..9965231c535 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
@@ -6,11 +6,11 @@ define([
     'underscore',
     'mageUtils',
     'mage/translate',
-    'uiComponent'
-], function (_, utils, $t, Component) {
+    'uiCollection'
+], function (_, utils, $t, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/controls/columns',
             minVisible: 1,
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
index 674c8d93e7d..38c36ae137b 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
@@ -8,11 +8,11 @@ define([
     'mageUtils',
     'uiLayout',
     'mage/translate',
-    'uiComponent'
-], function (_, utils, layout, $t, Component) {
+    'uiCollection'
+], function (_, utils, layout, $t, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             rowButtonsTmpl: 'ui/grid/editing/row-buttons',
             headerButtonsTmpl: 'ui/grid/editing/header-buttons',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
index 434dda5349e..2097ee77947 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
@@ -7,11 +7,11 @@ define([
     'underscore',
     'mageUtils',
     'uiLayout',
-    'uiComponent'
-], function (_, utils, layout, Component) {
+    'uiCollection'
+], function (_, utils, layout, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             active: true,
             hasChanges: false,
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/export.js b/app/code/Magento/Ui/view/base/web/js/grid/export.js
index 032f5fcc367..cbc99b0319e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/export.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/export.js
@@ -5,12 +5,11 @@
 define([
     'jquery',
     'underscore',
-    'uiComponent'
-], function ($, _, Component) {
+    'uiElement'
+], function ($, _, Element) {
     'use strict';
 
-    return Component.extend({
-
+    return Element.extend({
         defaults: {
             template: 'ui/grid/exportButton',
             checked: '',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
index 5a4499780f8..e7617aadf95 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
@@ -4,11 +4,11 @@
  */
 define([
     'underscore',
-    'uiComponent'
-], function (_, Component) {
+    'uiCollection'
+], function (_, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/filters/chips',
             stickyTmpl: 'ui/grid/sticky/chips'
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 42ec8cf7513..8decc3f0849 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -6,8 +6,8 @@ define([
     'underscore',
     'mageUtils',
     'uiLayout',
-    'uiComponent'
-], function (_, utils, layout, Component) {
+    'uiCollection'
+], function (_, utils, layout, Collection) {
     'use strict';
 
     /**
@@ -34,7 +34,7 @@ define([
         return utils.mapRecursive(data, utils.removeEmptyValues.bind(utils));
     }
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/filters/filters',
             stickyTmpl: 'ui/grid/sticky/filters',
@@ -85,8 +85,8 @@ define([
                 active: 'updatePreviews',
                 applied: 'cancel updateActive'
             },
-            links: {
-                applied: '${ $.storageConfig.path }'
+            statefull: {
+                applied: true
             },
             exports: {
                 applied: '${ $.provider }:params.filters'
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
index 86aea5c6474..6188522e960 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
@@ -8,18 +8,15 @@ define([
     'underscore',
     'Magento_Ui/js/lib/spinner',
     'uiLayout',
-    'uiComponent'
-], function (ko, _, loader, layout, Component) {
+    'uiCollection'
+], function (ko, _, loader, layout, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/listing',
             stickyTmpl: 'ui/grid/sticky/listing',
             positions: false,
-            storageConfig: {
-                positions: '${ $.storageConfig.path }.positions'
-            },
             dndConfig: {
                 name: '${ $.name }_dnd',
                 component: 'Magento_Ui/js/grid/dnd',
@@ -141,8 +138,6 @@ define([
 
             element.on('visible', this.updateVisible);
 
-            this.updateVisible();
-
             return this._super();
         },
 
@@ -152,14 +147,9 @@ define([
          * @returns {Listing} Chainable.
          */
         initPositions: function () {
-            var link = {
-                positions: this.storageConfig.positions
-            };
-
             this.on('positions', this.applyPositions.bind(this));
 
-            this.setLinks(link, 'imports')
-                .setLinks(link, 'exports');
+            this.setStatefull('positions');
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
index 01729f4aebd..e121aeb5407 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
@@ -8,11 +8,11 @@ define([
     'underscore',
     'mageUtils',
     'uiLayout',
-    'uiComponent'
-], function (ko, _, utils, layout, Component) {
+    'uiElement'
+], function (ko, _, utils, layout, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/grid/paging/paging',
             totalTmpl: 'ui/grid/paging-total',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
index df287a12703..0354dd4517e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
@@ -6,11 +6,11 @@ define([
     'ko',
     'underscore',
     'mageUtils',
-    'uiComponent'
-], function (ko, _, utils, Component) {
+    'uiElement'
+], function (ko, _, utils, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/grid/paging/sizes',
             value: 20,
@@ -38,9 +38,9 @@ define([
                     label: 200
                 }
             },
-            links: {
-                options: '${ $.storageConfig.path }.options',
-                value: '${ $.storageConfig.path }.value'
+            statefull: {
+                options: true,
+                value: true
             },
             listens: {
                 value: 'onValueChange',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/provider.js b/app/code/Magento/Ui/view/base/web/js/grid/provider.js
index b4aa11c5111..9232347df83 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/provider.js
@@ -7,13 +7,13 @@ define([
     'jquery',
     'underscore',
     'mageUtils',
-    'uiComponent',
+    'uiElement',
     'Magento_Ui/js/modal/alert',
     'mage/translate'
-], function ($, _, utils, Component, alert, $t) {
+], function ($, _, utils, Element, alert, $t) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             listens: {
                 params: 'reload'
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
index 771126ff3a6..01faaedebe0 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
@@ -10,11 +10,11 @@ define([
     'mageUtils',
     'uiRegistry',
     'Magento_Ui/js/lib/ko/extender/bound-nodes',
-    'uiComponent'
-], function ($, ko, _, utils, registry, boundedNodes, Component) {
+    'uiElement'
+], function ($, ko, _, utils, registry, boundedNodes, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             rootSelector: '${ $.columnsProvider }:.admin__data-grid-wrap',
             tableSelector: '${ $.rootSelector } -> table.data-grid',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
index f273c6dcd37..88c6bf6e449 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
@@ -7,16 +7,19 @@ define([
     'uiLayout',
     'mage/translate',
     'mageUtils',
-    'uiComponent'
-], function (_, layout, $t, utils, Component) {
+    'uiElement'
+], function (_, layout, $t, utils, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/grid/search/search',
             placeholder: $t('Search by keyword'),
             label: $t('Keyword'),
             value: '',
+            statefull: {
+                value: true
+            },
             imports: {
                 inputValue: 'value',
                 updatePreview: 'value'
@@ -24,9 +27,6 @@ define([
             exports: {
                 value: '${ $.provider }:params.search'
             },
-            links: {
-                value: '${ $.storageConfig.path }'
-            },
             modules: {
                 chips: '${ $.chipsProvider }'
             }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
similarity index 91%
rename from app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
index 9cd1bcfee3c..af637dacc0c 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/component/component.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
@@ -6,9 +6,8 @@ define([
     'underscore',
     'mageUtils',
     'uiRegistry',
-    'uiModel',
-    'Magento_Ui/js/lib/ko/initialize'
-], function (_, utils, registry, Model) {
+    'uiElement'
+], function (_, utils, registry, Element) {
     'use strict';
 
     /**
@@ -21,7 +20,7 @@ define([
         return container.filter(utils.isObject);
     }
 
-    return Model.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/collection',
             componentType: 'container',
@@ -34,7 +33,7 @@ define([
         /**
          * Initializes component.
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         initialize: function () {
             this._super()
@@ -61,7 +60,7 @@ define([
         /**
          * Defines various properties.
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         initProperties: function () {
             if (!this.source) {
@@ -79,7 +78,7 @@ define([
         /**
          * Initializes listeners of the unique property.
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         initUnique: function () {
             var update = this.onUniqueUpdate.bind(this),
@@ -98,7 +97,7 @@ define([
          * Called when current element was injected to another component.
          *
          * @param {Object} parent - Instance of a 'parent' component.
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         initContainer: function (parent) {
             this.containers.push(parent);
@@ -110,27 +109,21 @@ define([
          * Called when another element was added to current component.
          *
          * @param {Object} elem - Instance of an element that was added.
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         initElement: function (elem) {
-            elem.initContainer(this);
+            if (_.isFunction(elem.initContainer)) {
+                elem.initContainer(this);
+            }
 
             return this;
         },
 
-        /**
-         * Returns path to components' template.
-         * @returns {String}
-         */
-        getTemplate: function () {
-            return this.template;
-        },
-
         /**
          * Updates property specified in uniqueNs
          * if components' unique property is set to 'true'.
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         setUnique: function () {
             var property = this.uniqueProp;
@@ -176,7 +169,7 @@ define([
          *
          * @param {Array} items - New regions' data.
          * @param {String} name - Name of the region.
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         updateRegion: function (items, name) {
             if (name) {
@@ -192,7 +185,7 @@ define([
          *
          * @param {(String|Array)} elems - Name of the component to insert.
          * @param {Number} [position=-1] - Position at which to insert elements.
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         insertChild: function (elems, position) {
             var container   = this._elems,
@@ -228,7 +221,7 @@ define([
          * Removes specified element from the 'elems' array.
          *
          * @param {Object} elem - Element to be removed.
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         removeChild: function (elem) {
             utils.remove(this._elems, elem);
@@ -249,7 +242,7 @@ define([
          * Removes events listeners.
          * @private
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         _dropHandlers: function () {
             this.off();
@@ -264,7 +257,7 @@ define([
          * calls 'destroy' method on all of its' children.
          * @private
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         _clearRefs: function () {
             registry.remove(this.name);
@@ -300,7 +293,7 @@ define([
          * Performs elemets grouping by theirs 'displayArea' property.
          * @private
          *
-         * @returns {Component} Chainable.
+         * @returns {Collection} Chainable.
          */
         _update: function () {
             var _elems = compact(this._elems),
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/model/model.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
similarity index 75%
rename from app/code/Magento/Ui/view/base/web/js/lib/core/model/model.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index fd196863cc7..93371c5145b 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/model/model.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -10,11 +10,11 @@ define([
     'uiEvents',
     'uiClass',
     './links',
-    './storage'
+    '../storage'
 ], function (ko, _, utils, registry, Events, Class, links) {
     'use strict';
 
-    var Model;
+    var Module;
 
     /**
      * Creates observable property using knockouts'
@@ -60,16 +60,17 @@ define([
         }
     }
 
-    Model = {
+    Module = _.extend({
         defaults: {
+            template: '',
             storageConfig: {
                 provider: 'localStorage',
                 namespace: '${ $.name }',
                 path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }'
             },
             maps: {
-                exports: {},
-                imports: {}
+                imports: {},
+                exports: {}
             },
             modules: {
                 storage: '${ $.storageConfig.provider }'
@@ -79,13 +80,13 @@ define([
         /**
          * Initializes model instance.
          *
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         initialize: function () {
             this._super()
                 .initObservable()
                 .initModules()
-                .setListeners(this.listens)
+                .initStatefull()
                 .initLinks();
 
             return this;
@@ -94,17 +95,37 @@ define([
         /**
          * Initializes observable properties.
          *
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         initObservable: function () {
             return this;
         },
 
+        /**
+         * Initializes statefull properties,
+         * based on the keys of 'statefull' object.
+         *
+         * @returns {Element} Chainable.
+         */
+        initStatefull: function () {
+            var statefull = this.statefull || {};
+
+            _.each(statefull, function (path, key) {
+                if (!path) {
+                    return;
+                }
+
+                this.setStatefull(key, path);
+            }, this);
+
+            return this;
+        },
+
         /**
          * Parses 'modules' object and creates
          * async wrappers on specified components.
          *
-         * @returns {Component} Chainable.
+         * @returns {Element} Chainable.
          */
         initModules: function () {
             var modules = this.modules || {};
@@ -119,10 +140,11 @@ define([
         /**
          * Initializes links between properties.
          *
-         * @returns {Component} Chainbale.
+         * @returns {Element} Chainbale.
          */
         initLinks: function () {
-            this.setLinks(this.links, 'imports')
+            this.setListeners(this.listens)
+                .setLinks(this.links, 'imports')
                 .setLinks(this.links, 'exports');
 
             _.each({
@@ -133,6 +155,35 @@ define([
             return this;
         },
 
+        /**
+         * Makes specified property to be statefull.
+         *
+         * @param {String} key - Name of the property
+         *      that will be stored.
+         * @param {String} [path=key] - Path to the property in storage.
+         * @returns {Element} Chainable.
+         */
+        setStatefull: function (key, path) {
+            var link = {};
+
+            path        = !_.isString(path) || !path ? key : path;
+            link[key]   = this.storageConfig.path + '.' + path;
+
+            this.setLinks(link, 'imports')
+                .setLinks(link, 'exports');
+
+            return this;
+        },
+
+        /**
+         * Returns path to elements' template.
+         *
+         * @returns {String}
+         */
+        getTemplate: function () {
+            return this.template;
+        },
+
         /**
          * Returns value of the nested property.
          *
@@ -149,10 +200,10 @@ define([
          *
          * @param {String} path - Path to property.
          * @param {*} value - New value of the property.
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         set: function (path, value) {
-            var data = utils.nested(this, path),
+            var data = this.get(path),
                 diffs;
 
             if (!_.isFunction(data)) {
@@ -172,7 +223,7 @@ define([
          * Removes nested property from the object.
          *
          * @param {String} path - Path to the property.
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         remove: function (path) {
             var data,
@@ -206,7 +257,7 @@ define([
          * @param {Boolean} [useAccessors=false] - Whether to create an
          *      observable function or to use property accesessors.
          * @param {(Object|String|Array)} properties - List of observable properties.
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          *
          * @example Sample declaration and equivalent knockout methods.
          *      this.key = 'value';
@@ -256,7 +307,7 @@ define([
          * with a predefined 'useAccessors' flag.
          *
          * @param {(String|Array|Object)} properties - List of observable properties.
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         track: function (properties) {
             this.observe(true, properties);
@@ -268,7 +319,7 @@ define([
          * Invokes subscribers for the provided changes.
          *
          * @param {Object} diffs - Object with changes descriptions.
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         _notifyChanges: function (diffs) {
             diffs.changes.forEach(function (change) {
@@ -303,24 +354,47 @@ define([
          *
          * @param {String} property
          * @param {*} [data=this[property]]
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         store: function (property, data) {
             var ns = this.storageConfig.namespace,
                 path = utils.fullPath(ns, property);
 
-            data = data || this.get(property);
+            if (arguments.length < 2) {
+                data = this.get(property);
+            }
 
             this.storage('set', path, data);
 
             return this;
         },
 
+        /**
+         * Extracts specified property from storage.
+         *
+         * @param {String} [property] - Name of the property
+         *      to be extracted. If not specified then all of the
+         *      stored will be returned.
+         * @returns {*}
+         */
+        getStored: function (property) {
+            var ns = this.storageConfig.namespace,
+                path = utils.fullPath(ns, property),
+                storage = this.storage(),
+                data;
+
+            if (storage) {
+                data = storage.get(path);
+            }
+
+            return data;
+        },
+
         /**
          * Removes stored property.
          *
          * @param {String} property - Property to be removed from storage.
-         * @returns {Model} Chainable.
+         * @returns {Element} Chainable.
          */
         removeStored: function (property) {
             var ns = this.storageConfig.namespace,
@@ -330,9 +404,7 @@ define([
 
             return this;
         }
-    };
-
-    _.extend(Model, Events, links);
+    }, Events, links);
 
-    return Class.extend(Model);
+    return Class.extend(Module);
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
similarity index 100%
rename from app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/events.js b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
index 42e06915c37..f5e08657552 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
@@ -140,8 +140,9 @@ define([
         },
 
         /**
-         * Triggers event and executes all attached callbacks
-         * @param  {String} name
+         * Triggers event and executes all attached callbacks.
+         *
+         * @param {String} name - Name of the event to be triggered.
          * @returns {Boolean}
          */
         trigger: function (name) {
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/model/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/core/storage.js
similarity index 100%
rename from app/code/Magento/Ui/view/base/web/js/lib/core/model/storage.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/storage.js
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
index 3ca5a53bbb4..7a4dbb25680 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
@@ -23,8 +23,7 @@ define([
     './bind/collapsible',
     './bind/autoselect',
     './extender/observable_array',
-    './extender/bound-nodes',
-    './extender/observable_array'
+    './extender/bound-nodes'
 ], function (ko, templateEngine) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
index 794a62b4d25..ad56e701e37 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
@@ -5,7 +5,7 @@
 define([
     'ko',
     './observable_source',
-    '../../renderer/renderer'
+    './renderer'
 ], function (ko, Source, Renderer) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/loader.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js
similarity index 99%
rename from app/code/Magento/Ui/view/base/web/js/lib/loader.js
rename to app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js
index 03d97b399d7..da06db38124 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/loader.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js
@@ -46,6 +46,7 @@ define([
     }
 
     return {
+
         /**
          * Loops over arguments and loads template for each.
          * @return {Deferred} - promise of templates to be loaded
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js
similarity index 99%
rename from app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
rename to app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js
index 4445e7f3936..55bf6399847 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js
@@ -3,7 +3,7 @@
  * See COPYING.txt for license details.
  */
 define([
-    '../loader',
+    './loader',
     'jquery',
     'underscore'
 ], function (loader, $, _) {
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
index edc08dc3de7..90e17a46a65 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
@@ -3,11 +3,11 @@
  * See COPYING.txt for license details.
  */
 define([
-    'Magento_Ui/js/lib/core/model/links'
+    'Magento_Ui/js/lib/core/element/links'
 ], function (links) {
     'use strict';
 
-    describe('Magento_Ui/js/lib/core/model/links', function () {
+    describe('Magento_Ui/js/lib/core/element/links', function () {
         var linksObj,
             returnedValue;
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index b25abe1110b..117b383ade0 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -400,8 +400,7 @@ app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
 app/code/Magento/Ui/view/base/web/js/grid/export.js
 app/code/Magento/Ui/view/base/web/js/grid/resize.js
 app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
-app/code/Magento/Ui/view/base/web/js/lib/core/model/links.js
-app/code/Magento/Ui/view/base/web/js/lib/events.js
+app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
 app/code/Magento/Ui/view/base/web/js/lib/key-codes.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/datepicker.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/fadeVisible.js
@@ -410,7 +409,6 @@ app/code/Magento/Ui/view/base/web/js/lib/ko/bind/keyboard.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/mage-init.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/extender/observable_array.js
-app/code/Magento/Ui/view/base/web/js/lib/loader.js
 app/code/Magento/Ui/view/base/web/js/lib/spinner.js
 app/code/Magento/Ui/view/base/web/js/lib/step-wizard.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js
-- 
GitLab


From ce8ba925c09513d00c48f080c77d61a5b2aace97 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Fri, 2 Oct 2015 13:01:44 +0300
Subject: [PATCH 223/420] MAGETWO-42838: Combine filter and column components
 definition

---
 app/code/Magento/Catalog/Ui/Component/Listing/Columns.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
index 01c0cc07296..04e58709d40 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
@@ -52,6 +52,7 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     {
         $columnSortOrder = self::DEFAULT_COLUMNS_MAX_ORDER;
         foreach ($this->attributeRepository->getList() as $attribute) {
+            $config = [];
             if (!isset($this->components[$attribute->getAttributeCode()])) {
                 $config['sortOrder'] = ++$columnSortOrder;
                 if ($attribute->getIsFilterableInGrid()) {
-- 
GitLab


From 8fe8a80c73d9abd7abadd984a5243176eac6470d Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 2 Oct 2015 13:14:16 +0300
Subject: [PATCH 224/420] JS-245: Thumbnail change moves active thumbnail out
 of view

---
 lib/web/fotorama/fotorama.js | 105 +++++++++++++++++++++--------------
 1 file changed, 62 insertions(+), 43 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index ea23322ad9e..24872dc0137 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -866,6 +866,7 @@ fotoramaVersion = '4.6.4';
         }
         return encodedFuncName;
     }
+
     var $WINDOW = $(window),
         $DOCUMENT = $(document),
         $HTML,
@@ -1028,6 +1029,7 @@ fotoramaVersion = '4.6.4';
             home: false,
             end: false
         };
+
     function noop() {
     }
 
@@ -1037,7 +1039,7 @@ fotoramaVersion = '4.6.4';
 
     function readTransform(css, dir) {
         return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ?
-                (dir === 'vertical' ? 13: 12) : (dir === 'vertical' ? 5 : 4)
+                (dir === 'vertical' ? 13 : 12) : (dir === 'vertical' ? 5 : 4)
                 ]
     }
 
@@ -1045,7 +1047,7 @@ fotoramaVersion = '4.6.4';
         if (CSS3) {
             return +readTransform($el.css('transform'), dir);
         } else {
-            return +$el.css(dir === 'vertical' ? 'top': 'left').replace('px', '');
+            return +$el.css(dir === 'vertical' ? 'top' : 'left').replace('px', '');
         }
     }
 
@@ -1054,7 +1056,7 @@ fotoramaVersion = '4.6.4';
 
         if (CSS3) {
 
-            switch (direction){
+            switch (direction) {
                 case 'vertical':
                     obj.transform = 'translate3d(0, ' + (pos) + 'px,0)';
                     break;
@@ -1240,7 +1242,10 @@ fotoramaVersion = '4.6.4';
                 dataType: 'jsonp',
                 success: function (json) {
                     dataFrame.thumbsReady = true;
-                    updateData(data, {img: json[0].thumbnail_large, thumb: json[0].thumbnail_small}, dataFrame.i, fotorama);
+                    updateData(data, {
+                        img: json[0].thumbnail_large,
+                        thumb: json[0].thumbnail_small
+                    }, dataFrame.i, fotorama);
                 }
             });
         } else {
@@ -1532,7 +1537,7 @@ fotoramaVersion = '4.6.4';
         return position;
     }
 
-    function validateSlidePos(opt, navShaftTouchTail, guessIndex, offsetNav, $guessNavFrame, $navWrap, dir){
+    function validateSlidePos(opt, navShaftTouchTail, guessIndex, offsetNav, $guessNavFrame, $navWrap, dir) {
         var position,
             size,
             wrapSize;
@@ -1656,6 +1661,7 @@ fotoramaVersion = '4.6.4';
         };
 
     }(UTIL || {}, jQuery));
+
     function slide($el, options) {
         var elData = $el.data(),
             elPos = Math.round(options.pos),
@@ -1728,6 +1734,7 @@ fotoramaVersion = '4.6.4';
 
         (_$el1 && crossfadeFLAG) || _$el2 || onEndFn();
     }
+
     var lastEvent,
         moveEventType,
         preventEvent,
@@ -1933,8 +1940,8 @@ fotoramaVersion = '4.6.4';
             min = tail.min;
             max = tail.max;
             snap = tail.snap,
-            dir = tail.direction || 'horizontal',
-            $el.navdir = dir;
+                dir = tail.direction || 'horizontal',
+                $el.navdir = dir;
 
             slowFLAG = e.altKey;
             tracked = moved = false;
@@ -2056,7 +2063,7 @@ fotoramaVersion = '4.6.4';
                 newPos: newPos,
                 overPos: overPos,
                 time: time,
-                dir:dir
+                dir: dir
             }));
         }
 
@@ -2068,6 +2075,7 @@ fotoramaVersion = '4.6.4';
 
         return tail;
     }
+
     function wheel($el, options) {
         var el = $el[0],
             lockFLAG,
@@ -2112,6 +2120,7 @@ fotoramaVersion = '4.6.4';
 
         return tail;
     }
+
     jQuery.Fotorama = function ($fotorama, opts) {
         $HTML = $('html');
         $BODY = $('body');
@@ -2668,10 +2677,10 @@ fotoramaVersion = '4.6.4';
 
                 function loaded() {
                     $.Fotorama.measures[src] = imgData.measures = $.Fotorama.measures[src] || {
-                        width: img.width,
-                        height: img.height,
-                        ratio: img.width / img.height
-                    };
+                            width: img.width,
+                            height: img.height,
+                            ratio: img.width / img.height
+                        };
 
                     setMeasures(imgData.measures.width, imgData.measures.height, imgData.measures.ratio, index);
 
@@ -2685,7 +2694,7 @@ fotoramaVersion = '4.6.4';
                     }
 
                     fit($img, (
-                        $.isFunction(specialMeasures) ? specialMeasures() : specialMeasures) || measures);
+                            $.isFunction(specialMeasures) ? specialMeasures() : specialMeasures) || measures);
 
                     $.Fotorama.cache[src] = frameData.state = 'loaded';
 
@@ -2988,13 +2997,13 @@ fotoramaVersion = '4.6.4';
             var isLeftDisable = false,
                 isRightDisable = false;
             if (opts.navtype === 'thumbs' && !opts.loop) {
-                (activeIndex == 0) ? isLeftDisable = true: isLeftDisable = false;
-                (activeIndex == opts.data.length - 1) ? isRightDisable = true: isRightDisable = false;
+                (activeIndex == 0) ? isLeftDisable = true : isLeftDisable = false;
+                (activeIndex == opts.data.length - 1) ? isRightDisable = true : isRightDisable = false;
             }
             if (opts.navtype === 'slides') {
                 var pos = readPosition($navShaft, opts.navdir);
-                pos >= navShaftTouchTail.max ? isLeftDisable = true: isLeftDisable = false;
-                pos <= navShaftTouchTail.min ? isRightDisable = true: isRightDisable = false;
+                pos >= navShaftTouchTail.max ? isLeftDisable = true : isLeftDisable = false;
+                pos <= navShaftTouchTail.min ? isRightDisable = true : isRightDisable = false;
             }
             $thumbArrLeft
                 .toggleClass(arrDisabledClass, isLeftDisable)
@@ -3156,7 +3165,7 @@ fotoramaVersion = '4.6.4';
                 stageFramePosition(activeIndexes);
                 setStageShaftMinmaxAndSnap();
                 setNavShaftMinMax();
-                addEnterUp($stageShaft[0], function() {
+                addEnterUp($stageShaft[0], function () {
                     if (!$fotorama.hasClass(fullscreenClass)) {
                         that.requestFullScreen();
                         $(fullscreenIcon).trigger('focus');
@@ -3756,7 +3765,11 @@ fotoramaVersion = '4.6.4';
                     toggleControlsClass();
                 } else if (opts.click) {
 
-                    clickToShow({index: e.shiftKey || getDirectionSign(getDirection(e._x)), slow: e.altKey, user: true});
+                    clickToShow({
+                        index: e.shiftKey || getDirectionSign(getDirection(e._x)),
+                        slow: e.altKey,
+                        user: true
+                    });
                 }
             }
         }
@@ -3880,7 +3893,12 @@ fotoramaVersion = '4.6.4';
 
         function onNavFrameClick(e) {
             var index = $(this).data().eq;
-            clickToShow({index: index, slow: e.altKey, user: true, coo: e._x - $nav.offset().left});
+
+            if (opts.navtype === 'thumbs') {
+                clickToShow({index: index, slow: e.altKey, user: true, coo: e._x - $nav.offset().left});
+            } else {
+                clickToShow({index: index, slow: e.altKey, user: true});
+            }
         }
 
         function onArrClick(e) {
@@ -3935,7 +3953,7 @@ fotoramaVersion = '4.6.4';
             addFocusOnControls(this);
         });
 
-        addEnterUp(fullscreenIcon, function() {
+        addEnterUp(fullscreenIcon, function () {
             that.toggleFullScreen();
             $(fullscreenIcon).trigger('focus');
         });
@@ -4049,49 +4067,50 @@ fotoramaVersion = '4.6.4';
         $.Fotorama.instances.splice(instance.index, 1);
         calculateIndexes();
     }
+
     $.Fotorama.cache = {};
     $.Fotorama.measures = {};
     $ = $ || {};
     $.Fotorama = $.Fotorama || {};
     $.Fotorama.jst = $.Fotorama.jst || {};
 
-    $.Fotorama.jst.dots = function(v) {
+    $.Fotorama.jst.dots = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
         return __p
     };
 
-    $.Fotorama.jst.frameCaption = function(v) {
+    $.Fotorama.jst.frameCaption = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '<div class="fotorama__caption" aria-hidden="true">\r\n    <div class="fotorama__caption__wrap" id="' +
-        ((__t = ( v.labelledby )) == null ? '' : __t) +
-        '">' +
-        ((__t = ( v.caption )) == null ? '' : __t) +
-        '</div>\r\n</div>\r\n';
+            ((__t = ( v.labelledby )) == null ? '' : __t) +
+            '">' +
+            ((__t = ( v.caption )) == null ? '' : __t) +
+            '</div>\r\n</div>\r\n';
         return __p
     };
 
-    $.Fotorama.jst.style = function(v) {
+    $.Fotorama.jst.style = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '.fotorama' +
-        ((__t = ( v.s )) == null ? '' : __t) +
-        ' .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:' +
-        ((__t = ( v.m )) == null ? '' : __t) +
-        'px;\r\nheight:' +
-        ((__t = ( v.h )) == null ? '' : __t) +
-        'px}\r\n.fotorama' +
-        ((__t = ( v.s )) == null ? '' : __t) +
-        ' .fotorama__thumb-border{\r\nheight:' +
-        ((__t = ( v.h )) == null ? '' : __t) +
-        'px;\r\nborder-width:' +
-        ((__t = ( v.b )) == null ? '' : __t) +
-        'px;\r\nmargin-top:' +
-        ((__t = ( v.m )) == null ? '' : __t) +
-        'px}';
+            ((__t = ( v.s )) == null ? '' : __t) +
+            ' .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:' +
+            ((__t = ( v.m )) == null ? '' : __t) +
+            'px;\r\nheight:' +
+            ((__t = ( v.h )) == null ? '' : __t) +
+            'px}\r\n.fotorama' +
+            ((__t = ( v.s )) == null ? '' : __t) +
+            ' .fotorama__thumb-border{\r\nheight:' +
+            ((__t = ( v.h )) == null ? '' : __t) +
+            'px;\r\nborder-width:' +
+            ((__t = ( v.b )) == null ? '' : __t) +
+            'px;\r\nmargin-top:' +
+            ((__t = ( v.m )) == null ? '' : __t) +
+            'px}';
         return __p
     };
 
-    $.Fotorama.jst.thumb = function(v) {
+    $.Fotorama.jst.thumb = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '<div class="fotorama__nav__frame fotorama__nav__frame--thumb" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__thumb">\r\n    </div>\r\n</div>';
         return __p
-- 
GitLab


From 20e9f38a978b11caa682318f8eba1851a08e13b6 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 2 Oct 2015 14:04:53 +0300
Subject: [PATCH 225/420] MAGETWO-42607: MAP popup isn't displayed for Tier
 Prices on "view Product" Storefront page

---
 .../Catalog/view/base/web/js/tier-price.js    |  60 -----
 .../Magento/Msrp/view/base/web/js/msrp.js     | 238 ++++--------------
 .../Magento_Msrp/web/css/source/_module.less  |   2 +
 .../Magento_Msrp/web/css/source/_module.less  |   2 +
 lib/web/css/source/lib/variables/_popups.less |   2 +-
 5 files changed, 53 insertions(+), 251 deletions(-)
 delete mode 100644 app/code/Magento/Catalog/view/base/web/js/tier-price.js

diff --git a/app/code/Magento/Catalog/view/base/web/js/tier-price.js b/app/code/Magento/Catalog/view/base/web/js/tier-price.js
deleted file mode 100644
index 95622a56f6c..00000000000
--- a/app/code/Magento/Catalog/view/base/web/js/tier-price.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true*/
-define([
-    "jquery",
-    "jquery/ui"
-], function($){
-    "use strict";
-
-    $.widget('mage.tierPrice', {
-        options: {
-            popupHeading: '#map-popup-heading',
-            productForm: '#product_addtocart_form',
-            popupPrice: '#map-popup-price',
-            popupMsrp: '#map-popup-msrp',
-            popup: '#map-popup',
-            popupContent: '#map-popup-content',
-            popupText: '#map-popup-text',
-            popupOnlyText: 'map-popup-only-text',
-            popupTextWhatThis: '#map-popup-text-what-this',
-            popupCartButtonId: '#map-popup-button'
-        },
-
-        _create: function() {
-            this.element.on('click', '[data-tier-price]', $.proxy(this._showTierPrice, this));
-        },
-
-        /**
-         * Show tier price popup on gesture
-         * @private
-         * @param e - element got the clicked on
-         * @return {Boolean}
-         */
-        _showTierPrice: function(e) {
-            var data = $(e.target).data('tier-price');
-            $(this.options.popupCartButtonId).off('click');
-            $(this.options.popupCartButtonId).on('click', $.proxy(function() {
-                this.element.find(this.options.inputQty).val(data.qty);
-                this.element.find(this.options.productForm).submit();
-            }, this));
-            $(this.options.popupHeading).text(data.name);
-            $(this.options.popupPrice).html($(data.price)).find('[id^="product-price-"]').attr('id', function() {
-                // change price element id, so price option won't update the tier price
-                return 'tier' + $(this).attr('id');
-            });
-            $(this.options.popupMsrp).html(data.msrp);
-            var width = $(this.options.popup).width();
-            var offsetX = e.pageX - (width / 2) + "px";
-            $(this.options.popup).css({left: offsetX, top: e.pageY}).addClass('active').show();
-            $(this.options.popupContent).show();
-            $(this.options.popupText).addClass(this.options.popupOnlyText).show();
-            $(this.options.popupTextWhatThis).hide();
-            return false;
-        }
-    });
-    
-    return $.mage.tierPrice;
-});
\ No newline at end of file
diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js
index 42603c231fb..11fe0848ce1 100644
--- a/app/code/Magento/Msrp/view/base/web/js/msrp.js
+++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js
@@ -22,6 +22,9 @@ define([
 
             // Selectors
             cartForm: '.form.map.checkout',
+            msrpLabelId: '#map-popup-msrp',
+            priceLabelId: '#map-popup-price',
+            popUpAttr: '[data-role=msrp-popup-template]',
             cartButtonId: '', // better to be cartButton
             popupId: '', // better to be popup
             realPrice: '',
@@ -36,7 +39,7 @@ define([
         },
 
         openDropDown: null,
-        triggerClass:'dropdown-active',
+        triggerClass: 'dropdown-active',
 
         popUpOptions: {
             appendTo: 'body',
@@ -54,229 +57,84 @@ define([
             shadowHinter: 'popup popup-pointer'
         },
         popupOpened: false,
+
         /**
          * Creates widget instance
          * @private
          */
         _create: function () {
-            this.popupDOM = $('[data-role=msrp-popup-template]')[0];
+            var tierOptions;
+
+            this.popupDOM = $(this.options.popUpAttr)[0];
             this.infoPopupDOM = $('[data-role=msrp-info-template]')[0];
 
-            if(this.options.popupId){
+            if (this.options.popupId) {
                 this.$popup = $(this.popupDOM.innerText).appendTo('body');
+                $(this.options.popupId).on('click', function (e) {
+                    this.popUpOptions.position.of = $(e.target);
+                    this.$popup.find(this.options.msrpLabelId).html(this.options.msrpPrice);
+                    this.$popup.find(this.options.priceLabelId).html(this.options.realPrice);
+                    this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
 
-
-                    //.on('dropdowndialogclose', function () {
-                    //    this.$popup.removeClass(this.triggerClass);
-                    //}.bind(this))
-                    //.on('dropdowndialogopen', function () {
-                    //    this.$popup.addClass(this.triggerClass);
-                    //}.bind(this)).dropdownDialog('open');
-
-                $(this.options.popupId).on('click', function(e){
-                        this.popUpOptions.position.of = $(e.target);
-                        this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
-                        this._toggle(this.$popup);
+                    this.$popup.find('button').on('click', function () {
+                        if (this.options.addToCartButton) {
+                            $(this.options.addToCartButton).click();
+                        }
+                    }.bind(this));
+                    this._toggle(this.$popup);
                 }.bind(this));
             }
 
-            if(this.options.helpLinkId) {
+            if (this.options.helpLinkId) {
                 this.$infoPopup = $(this.infoPopupDOM.innerText).appendTo('body');
-
-                $(this.options.helpLinkId).on('click', function(e){
+                $(this.options.helpLinkId).on('click', function (e) {
                     this.popUpOptions.position.of = $(e.target);
                     this.$infoPopup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
                     this._toggle(this.$infoPopup);
                 }.bind(this));
             }
 
-            if(this.options.attr){
-                this.popupDOM = $('[data-role=msrp-popup-template]')[0];
+            if (this.options.attr) {
+                this.popupDOM = $(this.options.popUpAttr)[0];
                 this.$popup = $(this.popupDOM.innerText).appendTo('body');
-                //$(this.options.attr).on('mousedown', function(e){
-                //    this.drawPopup(e);
-                //}.bind(this));
-
                 this.popUpOptions.position.of = $(this.options.helpLinkId);
-
-                $(this.options.attr).on('click', function(e){
+                $(this.options.attr).on('click', function (e) {
                     this.popUpOptions.position.of = $(e.target);
+                    tierOptions = JSON.parse($(e.target).attr('data-tier-price'));
+                    this.$popup.find(this.options.msrpLabelId).html(tierOptions.msrp);
+                    this.$popup.find(this.options.priceLabelId).html(tierOptions.price);
+                    this.$popup.find('button').on('click', function (e) {
+                        e.preventDefault();
+                        this.$popup.find('form').attr('action', tierOptions.addToCartUrl).submit();
+                    }.bind(this));
                     this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
                     this._toggle(this.$popup);
-
                 }.bind(this));
             }
-            //console.log(popup.innerHTML);
-            //console.log(infoPopup.innerHTML);
-            //document.body.innerHTML += data.innerHTML;
-
-            //$(this.options.cartButtonId).on('click', this._addToCartSubmit.bind(this));
-            //
-            //$(this.options.popupId).on('click', function (event) {
-            //    var dialog;
-            //    event.preventDefault();
-            //
-            //    if (this.options.submitUrl) {
-            //        location.href = this.options.submitUrl;
-            //    } else {
-            //        $(this.options.popupCartButtonId)
-            //            .off('click')
-            //            .on('click', this._addToCartSubmit.bind(this));
-            //        $('#map-popup-heading-price').text(this.options.productName);
-            //        $('#map-popup-price').html($(this.options.realPrice).html().trim());
-            //        $('#map-popup-msrp > span.price').html(this.options.msrpPrice);
-            //
-            //        this.element.trigger('reloadPrice');
-            //
-            //        dialog = $('#map-popup-click-for-price');
-            //        this._popupDialog(dialog, this.options.popupId);
-            //
-            //        if (this.options.addToCartUrl) {
-            //            $(this.options.cartForm).attr('action', this.options.addToCartUrl);
-            //        }
-            //
-            //        if (!this.options.showAddToCart) {
-            //            $('#product_addtocart_form_from_popup').hide();
-            //        }
-            //
-            //        return false;
-            //    }
-            //}.bind(this));
-            //
-            //$(this.options.helpLinkId).on('click', function () {
-            //    $('#map-popup-heading-what-this').text(this.options.productName);
-            //    this._popupDialog($('#map-popup-what-this'), this.options.helpLinkId);
-            //
-            //    return false;
-            //}.bind(this));
         },
-        _toggle: function($elem){
-            $(document).on('mouseup', function(e){
-
-                if (!$elem.is(e.target) && $elem.has(e.target).length === 0) {
-                    $elem.dropdownDialog('close');
-                    $(document).off('mouseup');
-                }
 
-            }.bind(this));
-        },
-        initDropDown: function(){
-            this.popUpOptions.position.of = $(this.options.popupId);
-            this.dropdown = this.$popup.dropdownDialog(this.popUpOptions)
-                .on('dropdowndialogclose', function () {
-                    this.$popup.removeClass(this.triggerClass);
-                }.bind(this))
-                .on('dropdowndialogopen', function () {
-                    this.$popup.addClass(this.triggerClass);
-                }.bind(this));
-        },
-        drawPopup: function(e){
-            //this.popUpOptions.position.of = $(e.target);
-            this.dropdown.dropdownDialog('open');
-        },
-
-        drawInfo: function(e){
-            this.popUpOptions.position.of = $(e.target);
-            openDropDown = this.$infoPopup.dropdownDialog(this.popUpOptions)
-
-                .on('dropdowndialogclose', function () {
-
-                    this.$infoPopup.removeClass(this.triggerClass);
-                }.bind(this))
-                .on('dropdowndialogopen', function () {
-                    this.$infoPopup.addClass(this.triggerClass);
-                }.bind(this))
-                .dropdownDialog('open');
-
-        },
         /**
-         * Handler for dialog popup
-         * @param {jQuery} elementTarget
-         * @param {jQuery} elementTrigger
+         *
+         * @param $elem
          * @private
          */
-        _popupDialog: function (elementTarget, elementTrigger) {
-            var target = $(elementTarget),
-                trigger = $(elementTrigger),
-                counter = 0,
-                triggerClass = 'dropdown-active',
-                options;
-
-            options = {
-                appendTo: 'body',
-                dialogContentClass: 'active',
-                closeOnMouseLeave: false,
-                autoPosition: true,
-                'dialogClass': 'popup map-popup-wrapper',
-                position: {
-                    my: 'left top',
-                    collision: 'fit none',
-                    at: 'left bottom',
-                    within: 'body',
-                    of: trigger
-                },
-                shadowHinter: 'popup popup-pointer'
-            };
-            options = _.extend(options, this.options.dialog);
-
-            if (openDropDown && openDropDown.is(':data(mage-dropdownDialog)')) {
-                openDropDown.dropdownDialog('close');
-            }
-
-            if (this.options.singleOpenDropDown) {
-                this.openDropDown = openDropDown;
-            }
-            openDropDown = target
-                .dropdownDialog(options)
-                .off('dropdowndialogclose')
-                .on('dropdowndialogclose', function () {
-                    if (!counter) {
-                        openDropDown = null;
-                        $(window).off('resize');
-                    }
-                    trigger.removeClass(triggerClass);
-                })
-                .on('dropdowndialogopen', function () {
-                    trigger.addClass(triggerClass);
-                })
-                .dropdownDialog('open');
-
-            $(window)
-                .resize(_.debounce(function () {
-                    if (openDropDown) {
-                        counter--;
-                        openDropDown.dropdownDialog('open');
-                    }
-                }, this.options.dialogDelay))
-                .resize(_.debounce(function () {
-                    if (openDropDown) {
-                        counter++;
-                        openDropDown.dropdownDialog('close');
-                    }
-                }, this.options.dialogDelay, true));
+        _toggle: function ($elem) {
+            $(document).on('mouseup', function (e) {
+                if (!$elem.is(e.target) && $elem.has(e.target).length === 0) {
+                    this.closePopup($elem);
+                }
+            }.bind(this));
+            $(window).on('resize', function () {
+                this.closePopup($elem);
+            }.bind(this))
         },
-
         /**
-         * Handler for addToCart action
-         * @private
+         *
+         * @param $elem
          */
-        _addToCartSubmit: function () {
-            //this.element.trigger('addToCart', this.element);
-            //if (this.element.data('stop-processing')) {
-            //    return false;
-            //}
-            //
-            //if (this.options.addToCartButton) {
-            //    $(this.options.addToCartButton).click();
-            //
-            //    return;
-            //}
-            //
-            //if (this.options.addToCartUrl) {
-            //    $('.mage-dropdown-dialog > .ui-dialog-content').dropdownDialog('close');
-            //}
-            //$(this.options.cartForm).submit();
-
+        closePopup: function ($elem) {
+            $elem.dropdownDialog('close');
+            $(document).off('mouseup');
         }
     });
 
diff --git a/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
index ff6f64201fa..a264096d77b 100644
--- a/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
@@ -28,6 +28,8 @@
         @_popup-position-right: false,
         @_popup-position: absolute
     );
+    box-sizing: border-box;
+    word-wrap: break-word;
     .map-info-price {
         &:extend(.abs-add-clearfix all);
         margin-bottom: 15px;
diff --git a/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
index bdc3e39e975..fad67e2cd7c 100644
--- a/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
@@ -28,6 +28,8 @@
         @_popup-position-right: false,
         @_popup-position: absolute
     );
+    box-sizing: border-box;
+    word-wrap: break-word;
     .map-info-price {
         &:extend(.abs-add-clearfix all);
         margin: 0 0 @indent__base;
diff --git a/lib/web/css/source/lib/variables/_popups.less b/lib/web/css/source/lib/variables/_popups.less
index bd574bd0930..7769ae923a9 100644
--- a/lib/web/css/source/lib/variables/_popups.less
+++ b/lib/web/css/source/lib/variables/_popups.less
@@ -7,7 +7,7 @@
 //  Popup variables
 //  _____________________________________________
 
-@popup__width: auto;
+@popup__width: 100%;
 @popup__height: auto;
 @popup__padding: 22px;
 @popup__background: @color-white;
-- 
GitLab


From 25bd83b7b845db52db6675382d357b1b1b395182 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 2 Oct 2015 14:05:48 +0300
Subject: [PATCH 226/420] MAGETWO-42607: MAP popup isn't displayed for Tier
 Prices on "view Product" Storefront page

---
 app/code/Magento/Msrp/view/base/web/js/msrp.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js
index 11fe0848ce1..06bf5bda508 100644
--- a/app/code/Magento/Msrp/view/base/web/js/msrp.js
+++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js
@@ -11,7 +11,6 @@ define([
 ], function ($, _) {
     'use strict';
 
-    var openDropDown = null;
     $.widget('mage.addToCart', {
         options: {
             showAddToCart: true,
@@ -128,6 +127,7 @@ define([
                 this.closePopup($elem);
             }.bind(this))
         },
+
         /**
          *
          * @param $elem
-- 
GitLab


From d3afdfc1089040ad020fc7898ffd2554f94179d3 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 2 Oct 2015 14:41:39 +0300
Subject: [PATCH 227/420] MAGETWO-42762: Improve performance of table rendering

- Fix block-loader issue
- Fix namespace for export component radio buttons
- Add comments
---
 ...onfigurable_associated_product_listing.xml |  2 +-
 .../Ui/view/base/web/js/block-loader.js       |  2 +-
 .../js/grid/controls/bookmarks/bookmarks.js   | 10 +++-
 .../view/base/web/js/lib/core/collection.js   | 57 +++++++++----------
 .../base/web/js/lib/core/element/element.js   | 42 +++++++++++++-
 .../base/web/templates/grid/exportButton.html |  6 +-
 6 files changed, 79 insertions(+), 40 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index 9c2e8d868fd..6b66ea5031f 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -101,7 +101,7 @@
         <column name="entity_id">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="filter" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
diff --git a/app/code/Magento/Ui/view/base/web/js/block-loader.js b/app/code/Magento/Ui/view/base/web/js/block-loader.js
index e3cb1b422bb..bc1d30db768 100644
--- a/app/code/Magento/Ui/view/base/web/js/block-loader.js
+++ b/app/code/Magento/Ui/view/base/web/js/block-loader.js
@@ -5,7 +5,7 @@
 define([
     'ko',
     'jquery',
-    'Magento_Ui/js/lib/loader',
+    'Magento_Ui/js/lib/ko/template/loader',
     'mage/template'
 ], function (ko, $, templateLoader, template) {
     'use strict';
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
index 81759664b63..02ab2b1ec16 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
@@ -318,7 +318,10 @@ define([
         },
 
         /**
+         * Sets data to the specified view.
          *
+         * @param {String} index - Index of a view whose data will be replaced.
+         * @param {Object} data - New view data.
          * @returns {Bookmarks} Chainable.
          */
         setViewData: function (index, data) {
@@ -330,8 +333,9 @@ define([
         },
 
         /**
+         * Starts editing of a specified view.
          *
-         * @param {String} index
+         * @param {String} index - Index of a view.
          * @returns {Bookmarks} Chainable.
          */
         editView: function (index) {
@@ -341,8 +345,10 @@ define([
         },
 
         /**
+         * Ends editing of specified view
+         * and restores its' label.
          *
-         * @param {String} index
+         * @param {String} index - Index of a view.
          * @returns {Bookmarks} Chainable.
          */
         endEdit: function (index) {
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
index af637dacc0c..403b98656ff 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
@@ -24,7 +24,6 @@ define([
         defaults: {
             template: 'ui/collection',
             componentType: 'container',
-            registerNodes: true,
             ignoreTmpls: {
                 childDefaults: true
             }
@@ -135,16 +134,6 @@ define([
             return this;
         },
 
-        /**
-         * Callback which fires when property under uniqueNs has changed.
-         */
-        onUniqueUpdate: function (name) {
-            var active = name === this.name,
-                property = this.uniqueProp;
-
-            this[property](active);
-        },
-
         /**
          * Retrieves requested region.
          * Creates region if it was not created yet
@@ -152,15 +141,20 @@ define([
          * @returns {ObservableArray}.
          */
         getRegion: function (name) {
-            var regions = this.regions = this.regions || {};
+            var regions = this.regions = this.regions || {},
+                region;
+
+            if (name) {
+                if (!regions[name]) {
+                    regions[name] = [];
 
-            if (!regions[name]) {
-                regions[name] = [];
+                    this.observe.call(regions, name);
+                }
 
-                this.observe.call(regions, name);
+                region = regions[name];
             }
 
-            return regions[name];
+            return region;
         },
 
         /**
@@ -172,8 +166,10 @@ define([
          * @returns {Collection} Chainable.
          */
         updateRegion: function (items, name) {
-            if (name) {
-                this.getRegion(name)(items);
+            var region = this.getRegion(name);
+
+            if (region) {
+                region(items);
             }
 
             return this;
@@ -230,14 +226,6 @@ define([
             return this;
         },
 
-        /**
-         * Destroys current instance along with all of its' children.
-         */
-        destroy: function () {
-            this._dropHandlers()
-                ._clearRefs();
-        },
-
         /**
          * Removes events listeners.
          * @private
@@ -245,9 +233,8 @@ define([
          * @returns {Collection} Chainable.
          */
         _dropHandlers: function () {
-            this.off();
-
-            this.source.off(this.name);
+            this._super()
+                .source.off(this.name);
 
             return this;
         },
@@ -260,7 +247,7 @@ define([
          * @returns {Collection} Chainable.
          */
         _clearRefs: function () {
-            registry.remove(this.name);
+            this._super();
 
             this.containers.forEach(function (parent) {
                 parent.removeChild(this);
@@ -367,6 +354,16 @@ define([
             });
 
             return !!bubble;
+        },
+
+        /**
+         * Callback which fires when property under uniqueNs has changed.
+         */
+        onUniqueUpdate: function (name) {
+            var active = name === this.name,
+                property = this.uniqueProp;
+
+            this[property](active);
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index 93371c5145b..edb013f5199 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -63,6 +63,7 @@ define([
     Module = _.extend({
         defaults: {
             template: '',
+            registerNodes: true,
             storageConfig: {
                 provider: 'localStorage',
                 namespace: '${ $.name }',
@@ -102,7 +103,7 @@ define([
         },
 
         /**
-         * Initializes statefull properties,
+         * Initializes statefull properties
          * based on the keys of 'statefull' object.
          *
          * @returns {Element} Chainable.
@@ -123,7 +124,7 @@ define([
 
         /**
          * Parses 'modules' object and creates
-         * async wrappers on specified components.
+         * async wrappers for specified components.
          *
          * @returns {Element} Chainable.
          */
@@ -156,7 +157,7 @@ define([
         },
 
         /**
-         * Makes specified property to be statefull.
+         * Makes specified property to be stored automatically.
          *
          * @param {String} key - Name of the property
          *      that will be stored.
@@ -246,6 +247,39 @@ define([
             return this;
         },
 
+        /**
+         * Destroys current instance along with all of its' children.
+         */
+        destroy: function () {
+            this._dropHandlers()
+                ._clearRefs();
+        },
+
+        /**
+         * Removes events listeners.
+         * @private
+         *
+         * @returns {Element} Chainable.
+         */
+        _dropHandlers: function () {
+            this.off();
+
+            return this;
+        },
+
+        /**
+         * Removes all references to current instance and
+         * calls 'destroy' method on all of its' children.
+         * @private
+         *
+         * @returns {Element} Chainable.
+         */
+        _clearRefs: function () {
+            registry.remove(this.name);
+
+            return this;
+        },
+
         /**
          * Creates observable properties for the current object.
          *
@@ -336,7 +370,9 @@ define([
         },
 
         /**
+         * Extracts all stored data and sets it to element.
          *
+         * @returns {Element} Chainable.
          */
         restore: function () {
             var ns = this.storageConfig.namespace,
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
index 3585d6cb5e2..b77069084f4 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
@@ -23,8 +23,8 @@
                 class="admin__control-radio"
                 data-bind="
                     attr: {
-                        id: 'export-field-' + value + $index(),
-                        name: 'export'
+                        id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid',
+                        name: $parent.name
                     },
                     checkedValue: value,
                     checked: $parent.checked"
@@ -34,7 +34,7 @@
                 data-bind="
                     text: label,
                     attr: {
-                        for:  'export-field-' + value + $index()
+                        for:  ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
                     }"></label>
         </div>
         <!-- /ko -->
-- 
GitLab


From 590bb7039b4d4042bd3e0048548879ab063f47bc Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 2 Oct 2015 16:02:52 +0300
Subject: [PATCH 228/420] JS-241: Various rendering bugs with Fullscreen
 Gallery

---
 lib/web/fotorama/fotorama.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 24872dc0137..ae1de488584 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -3390,11 +3390,11 @@ fotoramaVersion = '4.6.4';
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
                     time: time,
-                    onEnd: onEnd,
+                    onEnd: onEnd
                 });
             } else {
                 var $activeFrame = activeFrame[STAGE_FRAME_KEY],
-                    $prevActiveFrame = activeIndex !== lastActiveIndex ? data[lastActiveIndex][STAGE_FRAME_KEY] : null;
+                    $prevActiveFrame = data[lastActiveIndex] && activeIndex !== lastActiveIndex ? data[lastActiveIndex][STAGE_FRAME_KEY] : null;
 
                 fade($activeFrame, $prevActiveFrame, $stageFrame, {
                     time: time,
-- 
GitLab


From fc3caede7b7575ef59d107516ec52edf6a4e4b4f Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 2 Oct 2015 16:23:20 +0300
Subject: [PATCH 229/420] JS-248: Image size in gallery

---
 .../Magento/Catalog/Block/Product/View/Gallery.php  | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index 4b5fad3db27..42e4e73d4fc 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -26,13 +26,18 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
      */
     protected $jsonEncoder;
 
+    /**
+     * @param \Magento\Catalog\Block\Product\Context $context
+     * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils
+     * @param EncoderInterface $jsonEncoder
+     * @param array $data
+     */
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
         \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
         EncoderInterface $jsonEncoder,
         array $data = []
-    )
-    {
+    ) {
         $this->jsonEncoder = $jsonEncoder;
         parent::__construct($context, $arrayUtils, $data);
     }
@@ -111,7 +116,7 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
                 'isMain' => $this->isMainImage($image),
             ];
         }
-        if(empty($imagesItems)) {
+        if (empty($imagesItems)) {
             $imagesItems[] = [
                 'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('thumbnail'),
                 'img' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
@@ -175,4 +180,4 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
         }
         return $this->configView;
     }
-}
\ No newline at end of file
+}
-- 
GitLab


From fc33b099a02fe18a199bef0af75b764d7891529c Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 2 Oct 2015 16:31:28 +0300
Subject: [PATCH 230/420] JS-251: Base image is not respected

---
 lib/web/mage/gallery/gallery.js | 36 +++++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 0b585c192fa..c4fb263b4ba 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -12,6 +12,28 @@ define([
 ], function ($, fotorama, _, mediaCheck, template, Class) {
     'use strict';
 
+    /**
+     * Set main item first in order.
+     * @param {Array.<Object>} data - Set of gallery items to update.
+     */
+    var pushMainFirst = function(data){
+        var mainIndex;
+
+        if(!_.every(data, function(item){
+                return _.isObject(item);
+            }))
+        {
+            return data;
+        }
+
+        mainIndex = _.findIndex(data, function(item){
+            return item.isMain;
+        });
+        if(mainIndex > -1){
+            data.unshift(data.splice(mainIndex, 1)[0]);
+        }
+    };
+
     return Class.extend({
 
         defaults: {
@@ -51,7 +73,7 @@ define([
                 fotoramaApi: null,
                 isFullscreen: false,
                 api: null,
-                data: _.clone(config.data),
+                data: _.clone(pushMainFirst(config.data)),
                 fullscreenData: []
             };
 
@@ -112,8 +134,7 @@ define([
         initGallery: function () {
             var breakpoints = {},
                 settings = this.settings,
-                config = this.config,
-                mainImage;
+                config = this.config;
 
             if (settings.breakpoints) {
                 _.each(_.values(settings.breakpoints), function (breakpoint) {
@@ -134,16 +155,8 @@ define([
                 config.arrows = false;
             }
 
-            /**
-             * Returns index of main image.
-             */
-            mainImage = _.findIndex(config.data, function (obj) {
-                return obj.isMain === true;
-            });
-
             config.click = false;
             config.breakpoints = null;
-            config.startindex = mainImage;
             settings.currentConfig = config;
             settings.$element.html(template);
             settings.$elementF = $(settings.$element.children()[0]);
@@ -289,6 +302,7 @@ define([
                      */
                     updateData: function (data) {
                         if (_.isArray(data)) {
+                            pushMainFirst(data);
                             settings.fotoramaApi.load(data);
                             $.extend(false, settings.defaultConfig, {
                                 data: data
-- 
GitLab


From 13291bb5badb293f718a6b84c23c31783db531a6 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 2 Oct 2015 17:17:22 +0300
Subject: [PATCH 231/420] MAGETWO-42762: Improve performance of table rendering

- Fix customer form issue
- Fix invalid values in options column
- Fix sales shipments massactions
---
 .../sales_order_view_shipment_grid.xml        |  4 -
 app/code/Magento/Ui/Component/MassAction.php  |  3 +-
 .../web/js/form/components/collection/item.js |  2 +-
 .../view/base/web/js/grid/columns/select.js   | 23 +++--
 .../Ui/view/base/web/js/grid/listing.js       | 30 +++---
 .../view/base/web/js/lib/core/collection.js   |  2 +-
 .../base/web/js/lib/core/element/element.js   | 92 ++++++++++---------
 .../web/templates/form/element/checkbox.html  |  3 +-
 .../view/base/web/templates/grid/listing.html |  6 +-
 9 files changed, 87 insertions(+), 78 deletions(-)

diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index 2c919506f81..24ad769cca7 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -112,10 +112,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="actions" xsi:type="array">
-                        <item name="pdfshipments_order" xsi:type="array">
-                        </item>
-                    </item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/Ui/Component/MassAction.php b/app/code/Magento/Ui/Component/MassAction.php
index 025c9987871..c1e08af04c0 100644
--- a/app/code/Magento/Ui/Component/MassAction.php
+++ b/app/code/Magento/Ui/Component/MassAction.php
@@ -24,7 +24,8 @@ class MassAction extends AbstractComponent
         };
 
         $this->setData('config', array_replace_recursive($config, $this->getConfiguration()));
-
+        $this->components = [];
+        
         parent::prepare();
     }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
index 41c246cdea6..c13d5a0a77d 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
@@ -125,7 +125,7 @@ define([
          * @returns {Component} Chainable.
          */
         _clearData: function () {
-            this.source('remove', this.dataScope);
+            this.source.remove(this.dataScope);
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
index 195fc0c1d54..afa8831e510 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
@@ -3,8 +3,9 @@
  * See COPYING.txt for license details.
  */
 define([
+    'underscore',
     './column'
-], function (Column) {
+], function (_, Column) {
     'use strict';
 
     return Column.extend({
@@ -17,16 +18,24 @@ define([
          */
         getLabel: function () {
             var options = this.options || [],
-                label = '',
-                value = this._super();
+                values = this._super(),
+                label = [];
 
-            options.some(function (item) {
-                label = item.label;
+            if (!Array.isArray(values)) {
+                values = [values];
+            }
 
-                return item.value == value;
+            values = values.map(function (value) {
+                return value + '';
             });
 
-            return label;
+            options.forEach(function (item) {
+                if (_.contains(values, item.value + '')) {
+                    label.push(item.label);
+                }
+            });
+
+            return label.join(', ');
         }
 
         /*eslint-enable eqeqeq*/
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
index 6188522e960..a972f3cfbf1 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
@@ -58,19 +58,10 @@ define([
         initialize: function () {
             _.bindAll(this, 'updateVisible');
 
-            this._super();
-
-            if (this.resizeConfig.enabled) {
-                this.initResize();
-            }
-
-            if (this.dndConfig.enabled) {
-                this.initDnd();
-            }
-
-            if (this.editorConfig.enabled) {
-                this.initEditor();
-            }
+            this._super()
+                .initDnd()
+                .initEditor()
+                .initResize();
 
             return this;
         },
@@ -96,7 +87,9 @@ define([
          * @returns {Listing} Chainable.
          */
         initDnd: function () {
-            layout([this.dndConfig]);
+            if (this.dndConfig.enabled) {
+                layout([this.dndConfig]);
+            }
 
             return this;
         },
@@ -107,7 +100,9 @@ define([
          * @returns {Listing} Chainable.
          */
         initResize: function () {
-            layout([this.resizeConfig]);
+            if (this.resizeConfig.enabled) {
+                layout([this.resizeConfig]);
+            }
 
             return this;
         },
@@ -118,7 +113,9 @@ define([
          * @returns {Listing} Chainable.
          */
         initEditor: function () {
-            layout([this.editorConfig]);
+            if (this.editorConfig.enabled) {
+                layout([this.editorConfig]);
+            }
 
             return this;
         },
@@ -206,6 +203,7 @@ define([
         },
 
         /**
+         * Returns reference to 'visibleColumns' array.
          *
          * @returns {Array}
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
index 403b98656ff..514cd061807 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
@@ -62,7 +62,7 @@ define([
          * @returns {Collection} Chainable.
          */
         initProperties: function () {
-            if (!this.source) {
+            if (!_.isFunction(this.source)) {
                 this.source = registry.get(this.provider);
             }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index edb013f5199..adf2ddeb8e2 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -14,7 +14,7 @@ define([
 ], function (ko, _, utils, registry, Events, Class, links) {
     'use strict';
 
-    var Module;
+    var Element;
 
     /**
      * Creates observable property using knockouts'
@@ -60,7 +60,7 @@ define([
         }
     }
 
-    Module = _.extend({
+    Element = _.extend({
         defaults: {
             template: '',
             registerNodes: true,
@@ -207,14 +207,14 @@ define([
             var data = this.get(path),
                 diffs;
 
-            if (!_.isFunction(data)) {
-                diffs = utils.compare(data, value, path);
+            diffs = !_.isFunction(data) && !this.isTracked(path) ?
+                utils.compare(data, value, path) :
+                false;
 
-                utils.nested(this, path, value);
+            utils.nested(this, path, value);
 
+            if (diffs) {
                 this._notifyChanges(diffs);
-            } else {
-                utils.nested(this, path, value);
             }
 
             return this;
@@ -247,39 +247,6 @@ define([
             return this;
         },
 
-        /**
-         * Destroys current instance along with all of its' children.
-         */
-        destroy: function () {
-            this._dropHandlers()
-                ._clearRefs();
-        },
-
-        /**
-         * Removes events listeners.
-         * @private
-         *
-         * @returns {Element} Chainable.
-         */
-        _dropHandlers: function () {
-            this.off();
-
-            return this;
-        },
-
-        /**
-         * Removes all references to current instance and
-         * calls 'destroy' method on all of its' children.
-         * @private
-         *
-         * @returns {Element} Chainable.
-         */
-        _clearRefs: function () {
-            registry.remove(this.name);
-
-            return this;
-        },
-
         /**
          * Creates observable properties for the current object.
          *
@@ -349,6 +316,16 @@ define([
             return this;
         },
 
+        /**
+         * Checks if specified property is tracked.
+         *
+         * @param {String} property - Property to be checked.
+         * @returns {Boolean}
+         */
+        isTracked: function (property) {
+            return ko.es5.isTracked(this, property);
+        },
+
         /**
          * Invokes subscribers for the provided changes.
          *
@@ -438,9 +415,42 @@ define([
 
             this.storage('remove', path);
 
+            return this;
+        },
+
+        /**
+         * Destroys current instance along with all of its' children.
+         */
+        destroy: function () {
+            this._dropHandlers()
+                ._clearRefs();
+        },
+
+        /**
+         * Removes events listeners.
+         * @private
+         *
+         * @returns {Element} Chainable.
+         */
+        _dropHandlers: function () {
+            this.off();
+
+            return this;
+        },
+
+        /**
+         * Removes all references to current instance and
+         * calls 'destroy' method on all of its' children.
+         * @private
+         *
+         * @returns {Element} Chainable.
+         */
+        _clearRefs: function () {
+            registry.remove(this.name);
+
             return this;
         }
     }, Events, links);
 
-    return Class.extend(Module);
+    return Class.extend(Element);
 });
diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html b/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html
index 01dca8a5b93..1d00fae66ae 100644
--- a/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html
+++ b/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html
@@ -7,8 +7,7 @@
 <div class="admin__field admin__field-option">
     <input type="checkbox" class="admin__control-checkbox" data-bind="checked: value, attr: { id: uid, disabled: disabled, name: inputName }, hasFocus: focused">
 
-    <label class="admin__field-label" data-bind="checked: value, attr: { for: uid }">
-        <span data-bind="text: description || label"></span>
+    <label class="admin__field-label" data-bind="text: description || label, attr: { for: uid }">
     </label>
 
     <!-- ko if: notice -->
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
index 875fc0e41c7..68595ee8784 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
@@ -7,11 +7,7 @@
 <div class="admin__data-grid-wrap" data-role="grid-wrapper">
     <table class="data-grid" data-role="grid">
        <thead>
-            <tr data-bind="
-                fastForEach: {
-                    data: getVisible(),
-                    as: '$col'
-                }">
+            <tr data-bind="fastForEach: {data: getVisible(), as: '$col'}">
                 <!-- ko template: $col.getHeader() --><!-- /ko -->
             </tr>
         </thead>
-- 
GitLab


From 50be205b8382c750b8b47322539341caa276dd4b Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Fri, 2 Oct 2015 17:27:34 +0300
Subject: [PATCH 232/420] MAGETWO-43593: PR

---
 app/code/Magento/Ui/view/base/web/js/modal/modal.js | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 0fd610909fa..e99f8180685 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -45,7 +45,7 @@ define([
             type: 'popup',
             title: '',
             modalClass: '',
-            focus: '',
+            focus: '[data-role="closeBtn"]',
             autoOpen: false,
             clickableOverlay: true,
             popupTpl: popupTpl,
@@ -224,13 +224,9 @@ define([
                 infelicity;
 
             if (type === 'opened' && this.options.focus) {
-                if (typeof this.options.focus === 'object') {
-                    this.options.focus.focus();
-                } else if (this.options.focus !== 'none') {
-                    this.modal.find(this.options.focus).focus();
-                } else {
-                    this.modal.find(this.options.focusableScope).focus();
-                }
+                this.modal.find($(this.options.focus)).focus();
+            } else if (type === 'opened' && !this.options.focus) {
+                this.modal.find(this.options.focusableScope).focus();
             } else if (position === 'end') {
                 this.modal.find(this.options.modalCloseBtn).focus();
             } else if (position === 'start') {
-- 
GitLab


From ae649f7828245a438397e89f8b92bf9e707fa02a Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 2 Oct 2015 17:59:13 +0300
Subject: [PATCH 233/420] MAGETWO-42762: Improve performance of table rendering

- Fix issue with a default billing/shipping checkboxes
---
 .../base/web/js/form/components/collection/item.js  | 13 ++++++-------
 .../Ui/view/base/web/js/form/components/tab.js      | 10 ++--------
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
index c13d5a0a77d..2ad6566d15a 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
@@ -69,12 +69,11 @@ define([
          * @return {Object} - reference to instance
          */
         initObservable: function () {
-            this._super();
-
-            this.observe({
-                'noPreview': true,
-                'indexed': {}
-            });
+            this._super()
+                .observe({
+                    noPreview: true,
+                    indexed: {}
+                });
 
             return this;
         },
@@ -122,7 +121,7 @@ define([
          * Clears all data associated with component.
          * @private
          *
-         * @returns {Component} Chainable.
+         * @returns {Item} Chainable.
          */
         _clearData: function () {
             this.source.remove(this.dataScope);
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
index 8559e658835..bd9537f747e 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
@@ -35,14 +35,6 @@ define([
             return this;
         },
 
-        onUniqueUpdate: function (name) {
-            var active = name === this.name;
-
-            this._super();
-
-            this.trigger('active', active);
-        },
-
         /**
          * Sets active property to true, then invokes pushParams method.
          */
@@ -51,6 +43,8 @@ define([
             this.wasActivated(true);
 
             this.setUnique();
+
+            return true;
         }
     });
 });
-- 
GitLab


From 780e968407bce98288dc6746228060184f0c582b Mon Sep 17 00:00:00 2001
From: Evgeniy Kolesov <ikolesov@ebay.com>
Date: Fri, 2 Oct 2015 18:50:39 +0300
Subject: [PATCH 234/420] MAGETWO-43358: Shipment packages cannot be shown in
 Admin

---
 .../templates/order/packaging/packed.phtml    | 322 +++++++++---------
 .../view/adminhtml/web/js/packages.js         |  39 +++
 .../Magento_Sales/web/css/source/_email.less  |   6 +-
 3 files changed, 196 insertions(+), 171 deletions(-)
 create mode 100644 app/code/Magento/Shipping/view/adminhtml/web/js/packages.js

diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml
index 821d5065ac6..1779164460f 100644
--- a/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml
+++ b/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml
@@ -7,184 +7,170 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div id="popup-window-mask" style="display:none;"></div>
-<div id="packed_window" style="display:none;" class="packed-window">
-    <div class="popup-window-wrapper">
-        <div class="popup-window-title">
-            <span class="title"><?php /* @escapeNotVerified */ echo __('Packages') ?></span>
+
+<div id="packed_window">
+<?php foreach ($block->getPackages() as $packageId => $package): ?>
+    <?php $package = new \Magento\Framework\DataObject($package) ?>
+    <?php $params = new \Magento\Framework\DataObject($package->getParams()) ?>
+    <section class="admin__page-section">
+        <div class="admin__page-section-title">
+            <span class="title"><?php /* @escapeNotVerified */ echo __('Package') . ' ' . $packageId ?></span>
         </div>
-        <div class="packed-content">
-            <div class="popup-window-content">
-            <?php foreach ($block->getPackages() as $packageId => $package): ?>
-                <div class="package">
-                    <?php $package = new \Magento\Framework\DataObject($package) ?>
-                    <?php $params = new \Magento\Framework\DataObject($package->getParams()) ?>
-                    <div class="package-number popup-fieldset-title">
-                        <div class="title"><?php /* @escapeNotVerified */ echo __('Package') . ' ' . $packageId ?></div>
-                    </div>
-                    <div class="package-info">
-                        <table class="package-options">
-                            <tbody>
-                                <tr>
-                                    <th><?php /* @escapeNotVerified */ echo __('Type') ?></th>
-                                    <td><?php /* @escapeNotVerified */ echo $block->getContainerTypeByCode($params->getContainer()) ?></td>
-                                    <th><?php /* @escapeNotVerified */ echo __('Length') ?></th>
-                                    <td>
-                                        <?php if ($params->getLength() != null): ?>
-                                            <?php /* @escapeNotVerified */ echo $params->getLength() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
-                                        <?php else: ?>
-                                            --
-                                        <?php endif; ?>
-                                    </td>
-                                    <?php if ($params->getDeliveryConfirmation() != null): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Signature Confirmation') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $block->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                </tr>
-                                <tr>
-                                    <?php if ($block->displayCustomsValue()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Customs Value') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($params->getCustomsValue()) ?></td>
-                                    <?php else: ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td>
-                                    <?php endif; ?>
-                                    <th><?php /* @escapeNotVerified */ echo __('Width') ?></th>
-                                    <td>
-                                        <?php if ($params->getWidth() != null): ?>
-                                            <?php /* @escapeNotVerified */ echo $params->getWidth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
-                                        <?php else: ?>
-                                            --
-                                        <?php endif; ?>
-                                    </td>
-                                    <?php if ($params->getContentType() != null): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Contents') ?></th>
-                                        <?php if ($params->getContentType() == 'OTHER'): ?>
-                                            <td><?php echo $block->escapeHtml($params->getContentTypeOther()) ?></td>
-                                        <?php else: ?>
-                                            <td><?php /* @escapeNotVerified */ echo $block->getContentTypeByCode($params->getContentType()) ?></td>
-                                        <?php endif; ?>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                </tr>
-                                <tr>
-                                    <?php if ($block->displayCustomsValue()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                    <th><?php /* @escapeNotVerified */ echo __('Height') ?></th>
-                                    <td>
-                                        <?php if ($params->getHeight() != null): ?>
-                                            <?php /* @escapeNotVerified */ echo $params->getHeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
-                                        <?php else: ?>
-                                            --
-                                        <?php endif; ?>
-                                    <td>
-                                    <th>&nbsp;</th>
-                                    <td>&nbsp;</td>
-                                </tr>
-                                <tr>
-                                    <?php if ($params->getSize()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Size') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo ucfirst(strtolower($params->getSize())) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                    <?php if ($params->getGirth()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Girth') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $params->getGirth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getGirthDimensionUnits()) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                    <th>&nbsp;</th>
-                                    <td>&nbsp;</td>
-                                </tr>
-                            </tbody>
-                        </table>
-                    </div>
-                    <div class="package-number popup-fieldset-title">
-                        <div class="title"><?php /* @escapeNotVerified */ echo __('Items in the Package') ?></div>
-                    </div>
-                    <div class="grid">
-                        <table class="data">
-                            <thead>
-                            <tr class="headings">
-                                <th class="col-product no-link"><span><?php /* @escapeNotVerified */ echo __('Product') ?></span></th>
-                                <th class="col-weight no-link"><span><?php /* @escapeNotVerified */ echo __('Weight') ?></span></th>
-                                <?php if ($block->displayCustomsValue()): ?>
-                                    <th class="col-custom no-link"><span><?php /* @escapeNotVerified */ echo __('Customs Value') ?></span></th>
+        <div class="admin__page-section-content">
+            <div class="row row-gutter">
+                <div class="col-m-4">
+                    <table class="admin__table-secondary">
+                        <tbody>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Type') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $block->getContainerTypeByCode($params->getContainer()) ?></td>
+                            </tr>
+                            <tr>
+                            <?php if ($block->displayCustomsValue()): ?>
+                                <th><?php /* @escapeNotVerified */ echo __('Customs Value') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($params->getCustomsValue()) ?></td>
+                            <?php else: ?>
+                                <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td>
+                            <?php endif; ?>
+                            </tr>
+                        <?php if ($params->getSize()): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Size') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo ucfirst(strtolower($params->getSize())) ?></td>
+                            </tr>
+                        <?php endif; ?>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="col-m-4">
+                    <table class="admin__table-secondary">
+                        <tbody>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Length') ?></th>
+                                <td>
+                                <?php if ($params->getLength() != null): ?>
+                                    <?php /* @escapeNotVerified */ echo $params->getLength() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
+                                <?php else: ?>
+                                    --
                                 <?php endif; ?>
-                                <th class="col-qty_ordered no-link"><span><?php /* @escapeNotVerified */ echo __('Qty Ordered') ?></span></th>
-                                <th class="col-qty no-link last"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></th>
+                                </td>
                             </tr>
-                            </thead>
-                            <tbody id="">
-                            <?php foreach ($package->getItems() as $itemId => $item) : ?>
-                                <?php $item = new \Magento\Framework\DataObject($item) ?>
-                                <tr title="#" id="" class="">
-                                    <td class="col-product name">
-                                        <?php /* @escapeNotVerified */ echo $item->getName(); ?>
-                                    </td>
-                                    <td class="col-weight weight ">
-                                        <?php /* @escapeNotVerified */ echo $item->getWeight(); ?>
-                                    </td>
-                                    <?php if ($block->displayCustomsValue()): ?>
-                                        <td class="col-custom "><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($item->getCustomsValue()) ?></td>
-                                    <?php endif; ?>
-                                    <td class="col-qty_ordered">
-                                        <?php /* @escapeNotVerified */ echo $block->getQtyOrderedItem($item->getOrderItemId()); ?>
-                                    </td>
-                                    <td class="col-qty last">
-                                        <?php /* @escapeNotVerified */ echo $item->getQty()*1; ?>
-                                    </td>
-                                </tr>
-                            <?php endforeach; ?>
-                            </tbody>
-                        </table>
-                    </div>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Width') ?></th>
+                                <td>
+                                <?php if ($params->getWidth() != null): ?>
+                                    <?php /* @escapeNotVerified */ echo $params->getWidth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
+                                <?php else: ?>
+                                    --
+                                <?php endif; ?>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Height') ?></th>
+                                <td>
+                                <?php if ($params->getHeight() != null): ?>
+                                    <?php /* @escapeNotVerified */ echo $params->getHeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
+                                <?php else: ?>
+                                    --
+                                <?php endif; ?>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="col-m-4">
+                    <table class="admin__table-secondary">
+                        <tbody>
+                        <?php if ($params->getDeliveryConfirmation() != null): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Signature Confirmation') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $block->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()) ?></td>
+                            </tr>
+                        <?php endif; ?>
+                        <?php if ($params->getContentType() != null): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Contents') ?></th>
+                                <?php if ($params->getContentType() == 'OTHER'): ?>
+                                    <td><?php echo $block->escapeHtml($params->getContentTypeOther()) ?></td>
+                                <?php else: ?>
+                                    <td><?php /* @escapeNotVerified */ echo $block->getContentTypeByCode($params->getContentType()) ?></td>
+                                <?php endif; ?>
+                            </tr>
+                        <?php endif; ?>
+                        <?php if ($params->getGirth()): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Girth') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $params->getGirth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getGirthDimensionUnits()) ?></td>
+                            </tr>
+                        <?php endif; ?>
+                        </tbody>
+                    </table>
                 </div>
-            <?php endforeach; ?>
             </div>
         </div>
-        <div class="popup-window-buttons-set">
-            <?php /* @escapeNotVerified */ echo $block->getPrintButton() ?>
-            <button type="button" class="action-ok SavePackagesBtn save" onclick="hidePackedWindow();" title="<?php /* @escapeNotVerified */ echo __('Products should be added to package(s)')?>">
-                <span><?php /* @escapeNotVerified */ echo __('OK') ?></span>
-            </button>
+        <div class="admin__page-section-item-title">
+            <span class="title"><?php /* @escapeNotVerified */ echo __('Items in the Package') ?></span>
         </div>
-    </div>
+        <div class="admin__table-wrapper">
+            <table class="data-table admin__table-primary">
+                <thead>
+                <tr class="headings">
+                    <th class="col-product"><span><?php /* @escapeNotVerified */ echo __('Product') ?></span></th>
+                    <th class="col-weight"><span><?php /* @escapeNotVerified */ echo __('Weight') ?></span></th>
+                    <?php if ($block->displayCustomsValue()): ?>
+                        <th class="col-custom"><span><?php /* @escapeNotVerified */ echo __('Customs Value') ?></span></th>
+                    <?php endif; ?>
+                    <th class="col-qty"><span><?php /* @escapeNotVerified */ echo __('Qty Ordered') ?></span></th>
+                    <th class="col-qty"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></th>
+                </tr>
+                </thead>
+                <tbody id="">
+                <?php foreach ($package->getItems() as $itemId => $item) : ?>
+                    <?php $item = new \Magento\Framework\DataObject($item) ?>
+                    <tr title="#" id="">
+                        <td class="col-product">
+                            <?php /* @escapeNotVerified */ echo $item->getName(); ?>
+                        </td>
+                        <td class="col-weight">
+                            <?php /* @escapeNotVerified */ echo $item->getWeight(); ?>
+                        </td>
+                        <?php if ($block->displayCustomsValue()): ?>
+                            <td class="col-custom"><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($item->getCustomsValue()) ?></td>
+                        <?php endif; ?>
+                        <td class="col-qty">
+                            <?php /* @escapeNotVerified */ echo $block->getQtyOrderedItem($item->getOrderItemId()); ?>
+                        </td>
+                        <td class="col-qty">
+                            <?php /* @escapeNotVerified */ echo $item->getQty()*1; ?>
+                        </td>
+                    </tr>
+                <?php endforeach; ?>
+                </tbody>
+            </table>
+        </div>
+    </section>
+<?php endforeach; ?>
 </div>
-
 <script>
-require(['prototype'], function(){
-
-//<![CDATA[
     function showPackedWindow() {
-        var window = $('packed_window');
-        window.show().setStyle({
-            'marginLeft': -window.getDimensions().width/2 + 'px'
-        });
-        $('popup-window-mask').setStyle({
-            height: $('html-body').getHeight() + 'px'
-        }).show();
+        jQuery('#packed_window').modal('openModal');
     }
-    function hidePackedWindow() {
-        $('packed_window').hide();
-        $('popup-window-mask').hide();
+</script>
+<?php
+$printLocation = $block->getUrl(
+    'adminhtml/order_shipment/printPackage',
+    array('shipment_id' => $block->getShipment()->getId())
+);
+?>
+<script type="text/x-magento-init">
+    {
+        "#packed_window": {
+            "Magento_Shipping/js/packages":{
+                "type":"slide",
+                "title":"<?= /* @escapeNotVerified */  __('Packages') ?>",
+                "url": "<?= /* @escapeNotVerified */ $printLocation ?>"
+            }
+        }
     }
-    window.hidePackedWindow = hidePackedWindow;
-    window.showPackedWindow = showPackedWindow;
-//]]>
-
-});
 </script>
diff --git a/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js b/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js
new file mode 100644
index 00000000000..36b934c0e9c
--- /dev/null
+++ b/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js
@@ -0,0 +1,39 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/modal',
+    'mage/translate'
+], function ($, modal, $t) {
+    'use strict';
+
+    return function (config, element) {
+        config.buttons = [
+            {
+                text: $t('Print'),
+                'class': 'action action-primary',
+
+                /**
+                 * Click handler
+                 */
+                click: function () {
+                    window.location.href = this.options.url;
+                }
+            }, {
+                text: $t('Cancel'),
+                'class': 'action action-secondary',
+
+                /**
+                 * Click handler
+                 */
+                click: function () {
+                    this.closeModal();
+                }
+            }
+        ];
+        modal(config, element);
+    };
+});
diff --git a/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less b/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
index 8d002c55b8e..9fbeb9458d0 100644
--- a/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
+++ b/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
@@ -100,7 +100,7 @@
 // ----------------------------------------------
 
 .shipment-track {
-    .table(@table__width, 0);
+    .lib-table(@table__width, 0);
 
     thead,
     tbody {
@@ -127,7 +127,7 @@
 // ----------------------------------------------
 
 .email-items {
-    .table(@table__width, 0);
+    .lib-table(@table__width, 0);
     tfoot {
         > tr {
             > th,
@@ -241,6 +241,6 @@
 
 .email-non-inline() {
     .email-items {
-        .table-overflow();
+        .lib-table-overflow();
     }
 }
-- 
GitLab


From c972665d70488bc1cc237daf68c22755c1bfeba1 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 2 Oct 2015 18:51:25 +0300
Subject: [PATCH 235/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix php unit tests
---
 .../Catalog/Test/Unit/Block/Product/View/GalleryTest.php  | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
index 564e08a1cbc..484c48003d4 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
@@ -32,6 +32,11 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
      */
     protected $registry;
 
+    /**
+     * @var \Magento\Framework\Json\EncoderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $jsonEncoderMock;
+
     protected function setUp()
     {
         $this->mockContext();
@@ -42,7 +47,8 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
 
         $this->model = new \Magento\Catalog\Block\Product\View\Gallery(
             $this->context,
-            $this->arrayUtils
+            $this->arrayUtils,
+            $this->jsonEncoderMock
         );
     }
 
-- 
GitLab


From cead703a43c5638fa63f1dd407463a5e572b2c0c Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 2 Oct 2015 20:32:00 +0300
Subject: [PATCH 236/420] MAGETWO-42762: Improve performance of table rendering

- Apply patch wit date range fix
- Fix double initialization in filters component
---
 .../Ui/Component/Filters/Type/Date.php        | 38 +++++++++++++++----
 .../view/base/web/js/grid/filters/filters.js  |  8 +++-
 .../base/web/js/lib/core/element/element.js   | 32 ++++++++--------
 3 files changed, 53 insertions(+), 25 deletions(-)

diff --git a/app/code/Magento/Ui/Component/Filters/Type/Date.php b/app/code/Magento/Ui/Component/Filters/Type/Date.php
index f1689efa87a..98e782a4da1 100644
--- a/app/code/Magento/Ui/Component/Filters/Type/Date.php
+++ b/app/code/Magento/Ui/Component/Filters/Type/Date.php
@@ -66,16 +66,40 @@ class Date extends AbstractFilter
         if (isset($this->filterData[$this->getName()])) {
             $value = $this->filterData[$this->getName()];
 
-            if (!empty($value)) {
-                $value = $this->wrappedComponent->convertDate($value);
+            if (empty($value)) {
+                return;
+            }
 
-                $filter = $this->filterBuilder->setConditionType('eq')
-                    ->setField($this->getName())
-                    ->setValue($value->format('Y-m-d H:i:s'))
-                    ->create();
+            if (is_array($value)) {
+                if (isset($value['from'])) {
+                    $this->applyFilterByType('gteq', $this->wrappedComponent->convertDate($value['from']));
+                }
 
-                $this->getContext()->getDataProvider()->addFilter($filter);
+                if (isset($value['to'])) {
+                    $this->applyFilterByType('lteq', $this->wrappedComponent->convertDate($value['to']));
+                }
+            } else {
+                $this->applyFilterByType('eq', $this->wrappedComponent->convertDate($value));
             }
         }
     }
+
+    /**
+     * Apply filter by its type
+     *
+     * @param string $type
+     * @param string $value
+     * @return void
+     */
+    protected function applyFilterByType($type, $value)
+    {
+        if (!empty($value)) {
+            $filter = $this->filterBuilder->setConditionType($type)
+                ->setField($this->getName())
+                ->setValue($value->format('Y-m-d H:i:s'))
+                ->create();
+
+            $this->getContext()->getDataProvider()->addFilter($filter);
+        }
+    }
 }
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 8decc3f0849..1711a6f76ff 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -38,6 +38,7 @@ define([
         defaults: {
             template: 'ui/grid/filters/filters',
             stickyTmpl: 'ui/grid/sticky/filters',
+            _processed: [],
             applied: {
                 placeholder: true
             },
@@ -218,15 +219,18 @@ define([
          * @returns {Filters} Chainable.
          */
         addFilter: function (column) {
-            var index = column.index,
+            var index       = column.index,
+                processed   = this._processed,
                 filter;
 
-            if (!column.filter || this.hasFilter(index)) {
+            if (!column.filter || _.contains(processed, index)) {
                 return this;
             }
 
             filter = this.buildFilter(column);
 
+            processed.push(index);
+
             layout([filter]);
 
             return this;
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index adf2ddeb8e2..7b1df267452 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -103,36 +103,36 @@ define([
         },
 
         /**
-         * Initializes statefull properties
-         * based on the keys of 'statefull' object.
+         * Parses 'modules' object and creates
+         * async wrappers for specified components.
          *
          * @returns {Element} Chainable.
          */
-        initStatefull: function () {
-            var statefull = this.statefull || {};
-
-            _.each(statefull, function (path, key) {
-                if (!path) {
-                    return;
-                }
+        initModules: function () {
+            var modules = this.modules || {};
 
-                this.setStatefull(key, path);
+            _.each(modules, function (component, property) {
+                this[property] = registry.async(component);
             }, this);
 
             return this;
         },
 
         /**
-         * Parses 'modules' object and creates
-         * async wrappers for specified components.
+         * Initializes statefull properties
+         * based on the keys of 'statefull' object.
          *
          * @returns {Element} Chainable.
          */
-        initModules: function () {
-            var modules = this.modules || {};
+        initStatefull: function () {
+            var statefull = this.statefull || {};
 
-            _.each(modules, function (component, property) {
-                this[property] = registry.async(component);
+            _.each(statefull, function (path, key) {
+                if (!path) {
+                    return;
+                }
+
+                this.setStatefull(key, path);
             }, this);
 
             return this;
-- 
GitLab


From 24bbf9777b4c656b50aa1bf9c33fa7c17538f71e Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Sat, 3 Oct 2015 13:52:06 +0300
Subject: [PATCH 237/420] MAGETWO-42762: Improve performance of table rendering

- Fix update of active filters
- Migrate uiElement in form elements
- Get rid of initProperties method
---
 .../ui_component/product_listing.xml          |  2 +-
 .../web/js/view/cart/shipping-rates.js        |  2 +-
 .../address-renderer/default.js               |  2 +-
 .../web/js/view/shipping-address/list.js      |  2 +-
 .../web/js/view/shipping-information/list.js  |  2 +-
 .../web/js/form/components/collection/item.js |  4 +-
 .../view/base/web/js/form/components/group.js |  9 ++
 .../view/base/web/js/form/element/abstract.js |  8 +-
 .../Ui/view/base/web/js/form/element/date.js  |  6 +-
 .../Magento/Ui/view/base/web/js/form/form.js  |  2 +-
 .../view/base/web/js/grid/filters/filters.js  | 20 +++--
 .../Ui/view/base/web/js/grid/filters/range.js |  9 --
 .../view/base/web/js/lib/core/collection.js   | 87 +++----------------
 .../base/web/js/lib/core/element/element.js   | 60 +++++++++++--
 14 files changed, 105 insertions(+), 110 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index b5cc8a86dc5..77791aa296f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -282,7 +282,7 @@
                 </item>
             </argument>
         </column>
-        <column name="websites" class="Magento\Catalog\Ui\Component\Listing\Columns\Websites">
+        <column name="websites">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Store\Model\Resource\Website\Collection</item>
                 <item name="config" xsi:type="array">
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js
index e569f88a111..f8a63000aa8 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js
@@ -42,7 +42,7 @@ define(
             /**
              * @override
              */
-            initProperties: function () {
+            initObservable: function () {
                 var self = this;
                 this._super();
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js
index 221e9f6f151..0b932a29e52 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js
@@ -20,7 +20,7 @@ define([
             template: 'Magento_Checkout/shipping-address/address-renderer/default'
         },
 
-        initProperties: function () {
+        initObservable: function () {
             this._super();
             this.isSelected = ko.computed(function() {
                 var isSelected = false;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
index 639d4823c75..5ee2b5d4ed9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
@@ -44,7 +44,7 @@ define([
             return this;
         },
 
-        initProperties: function () {
+        initConfig: function () {
             this._super();
             // the list of child components that are responsible for address rendering
             this.rendererComponents = [];
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
index 1d357ca80e9..f024358ae0d 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
@@ -35,7 +35,7 @@ define([
             return this;
         },
 
-        initProperties: function () {
+        initConfig: function () {
             this._super();
             // the list of child components that are responsible for address rendering
             this.rendererComponents = {};
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
index 2ad6566d15a..91cee0068ca 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
@@ -54,7 +54,7 @@ define([
          *
          * @return {Object} - reference to instance
          */
-        initProperties: function () {
+        initConfig: function () {
             this._super();
 
             this.displayed = [];
@@ -177,7 +177,7 @@ define([
             items = items.map(function (index) {
                 var elem = elems[index];
 
-                preview = elem && elem.visible() ? elem.delegate('getPreview') : '';
+                preview = elem && elem.visible() ? elem.getPreview() : '';
 
                 preview = Array.isArray(preview) ?
                     _.compact(preview).join(', ') :
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/group.js b/app/code/Magento/Ui/view/base/web/js/form/components/group.js
index 18bc1779477..468dff2ec66 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/group.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/group.js
@@ -88,6 +88,15 @@ define([
          */
         isMultiple: function () {
             return this.elems.getLength() > 1;
+        },
+
+        /**
+         * Returns an array of child components previews.
+         *
+         * @returns {Array}
+         */
+        getPreview: function () {
+            return this.elems.map('getPreview');
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
index b9efcbef944..a92b0714872 100755
--- a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
@@ -6,12 +6,12 @@
 define([
     'underscore',
     'mageUtils',
-    'uiComponent',
+    'uiElement',
     'Magento_Ui/js/lib/validation/validator'
-], function (_, utils, Component, validator) {
+], function (_, utils, Element, validator) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             visible: true,
             preview: '',
@@ -77,7 +77,7 @@ define([
          *
          * @returns {Abstract} Chainable.
          */
-        initProperties: function () {
+        initConfig: function () {
             var uid = utils.uniqueid();
 
             this._super();
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/date.js b/app/code/Magento/Ui/view/base/web/js/form/element/date.js
index c9ee948d681..d4dc131c7a2 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/date.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/date.js
@@ -20,10 +20,12 @@ define([
          *
          * @returns {Object} Chainable.
          */
-        initProperties: function () {
+        initConfig: function () {
+            this._super();
+
             this.dateFormat = utils.normalizeDate(this.dateFormat);
 
-            return this._super();
+            return this;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/form/form.js b/app/code/Magento/Ui/view/base/web/js/form/form.js
index 692f92d6a02..d179d4706a7 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/form.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/form.js
@@ -42,7 +42,7 @@ define([
             return this;
         },
 
-        initProperties: function () {
+        initConfig: function () {
             this._super();
 
             this.selector = '[data-form-part=' + this.namespace + ']';
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index 1711a6f76ff..daad5333abc 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -107,10 +107,11 @@ define([
          * @returns {Filters} Chainable.
          */
         initialize: function () {
+            _.bindAll(this, 'updateActive');
+
             this._super()
                 .initChips()
-                .cancel()
-                .updateActive();
+                .cancel();
 
             return this;
         },
@@ -148,9 +149,12 @@ define([
          *
          * @returns {Filters} Chainable.
          */
-        initElement: function () {
-            this._super()
-                .updateActive();
+        initElement: function (elem) {
+            this._super();
+
+            elem.on('elems', this.updateActive);
+
+            this.updateActive();
 
             return this;
         },
@@ -341,7 +345,11 @@ define([
          * @returns {Filters} Chainable.
          */
         updateActive: function () {
-            this.active = this.elems.filter('hasData');
+            var applied = _.keys(this.applied);
+
+            this.active = this.elems.filter(function (elem) {
+                return _.contains(applied, elem.index);
+            });
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
index 1c9c04705b0..361d2db0713 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
@@ -104,15 +104,6 @@ define([
          */
         hasData: function () {
             return this.elems.some('hasData');
-        },
-
-        /**
-         * Returns an array of child components previews.
-         *
-         * @returns {Array}
-         */
-        getPreview: function () {
-            return this.elems.map('getPreview');
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
index 514cd061807..d81d1969392 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
@@ -24,6 +24,7 @@ define([
         defaults: {
             template: 'ui/collection',
             componentType: 'container',
+            _elems: [],
             ignoreTmpls: {
                 childDefaults: true
             }
@@ -36,7 +37,6 @@ define([
          */
         initialize: function () {
             this._super()
-                .initProperties()
                 .initUnique();
 
             return this;
@@ -56,24 +56,6 @@ define([
             return this;
         },
 
-        /**
-         * Defines various properties.
-         *
-         * @returns {Collection} Chainable.
-         */
-        initProperties: function () {
-            if (!_.isFunction(this.source)) {
-                this.source = registry.get(this.provider);
-            }
-
-            _.extend(this, {
-                containers: [],
-                _elems: []
-            });
-
-            return this;
-        },
-
         /**
          * Initializes listeners of the unique property.
          *
@@ -92,18 +74,6 @@ define([
             return this;
         },
 
-        /**
-         * Called when current element was injected to another component.
-         *
-         * @param {Object} parent - Instance of a 'parent' component.
-         * @returns {Collection} Chainable.
-         */
-        initContainer: function (parent) {
-            this.containers.push(parent);
-
-            return this;
-        },
-
         /**
          * Called when another element was added to current component.
          *
@@ -111,9 +81,7 @@ define([
          * @returns {Collection} Chainable.
          */
         initElement: function (elem) {
-            if (_.isFunction(elem.initContainer)) {
-                elem.initContainer(this);
-            }
+            elem.initContainer(this);
 
             return this;
         },
@@ -226,19 +194,6 @@ define([
             return this;
         },
 
-        /**
-         * Removes events listeners.
-         * @private
-         *
-         * @returns {Collection} Chainable.
-         */
-        _dropHandlers: function () {
-            this._super()
-                .source.off(this.name);
-
-            return this;
-        },
-
         /**
          * Removes all references to current instance and
          * calls 'destroy' method on all of its' children.
@@ -249,10 +204,6 @@ define([
         _clearRefs: function () {
             this._super();
 
-            this.containers.forEach(function (parent) {
-                parent.removeChild(this);
-            }, this);
-
             this.elems.each('destroy');
 
             return this;
@@ -324,36 +275,20 @@ define([
             var result;
 
             result = this.elems.map(function (elem) {
-                return elem.delegate.apply(elem, args);
-            });
+                var target;
 
-            return _.flatten(result);
-        },
-
-        /**
-         * Overrides 'EventsBus.trigger' method to implement events bubbling.
-         *
-         * @param {...*} parameters - Any number of arguments that should be passed to the events' handler.
-         * @returns {Boolean} False if event bubbling was canceled.
-         */
-        bubble: function () {
-            var args = _.toArray(arguments),
-                bubble = this.trigger.apply(this, args),
-                result;
-
-            if (!bubble) {
-                return false;
-            }
+                if (!_.isFunction(elem.delegate)) {
+                    target = elem[args[0]];
 
-            this.containers.forEach(function (parent) {
-                result = parent.bubble.apply(parent, args);
-
-                if (result === false) {
-                    bubble = false;
+                    if (_.isFunction(target)) {
+                        return target.apply(elem, args.slice(1));
+                    }
+                } else {
+                    return elem.delegate.apply(elem, args);
                 }
             });
 
-            return !!bubble;
+            return _.flatten(result);
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index 7b1df267452..3229f91ca36 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -63,6 +63,7 @@ define([
     Element = _.extend({
         defaults: {
             template: '',
+            containers: [],
             registerNodes: true,
             storageConfig: {
                 provider: 'localStorage',
@@ -115,6 +116,22 @@ define([
                 this[property] = registry.async(component);
             }, this);
 
+            if (!_.isFunction(this.source)) {
+                this.source = registry.get(this.provider);
+            }
+
+            return this;
+        },
+
+        /**
+         * Called when current element was injected to another component.
+         *
+         * @param {Object} parent - Instance of a 'parent' component.
+         * @returns {Collection} Chainable.
+         */
+        initContainer: function (parent) {
+            this.containers.push(parent);
+
             return this;
         },
 
@@ -236,13 +253,15 @@ define([
 
             data = utils.nested(this, path);
 
-            if (!_.isUndefined(data) && !_.isFunction(data)) {
-                diffs = utils.compare(data, undefined, path);
+            if (_.isUndefined(data) || _.isFunction(data)) {
+                return this;
+            }
 
-                utils.nestedRemove(this, path);
+            diffs = utils.compare(data, undefined, path);
 
-                this._notifyChanges(diffs);
-            }
+            utils.nestedRemove(this, path);
+
+            this._notifyChanges(diffs);
 
             return this;
         },
@@ -434,6 +453,7 @@ define([
          */
         _dropHandlers: function () {
             this.off();
+            this.source.off(this.name);
 
             return this;
         },
@@ -448,7 +468,37 @@ define([
         _clearRefs: function () {
             registry.remove(this.name);
 
+            this.containers.forEach(function (parent) {
+                parent.removeChild(this);
+            }, this);
+
             return this;
+        },
+
+        /**
+         * Overrides 'EventsBus.trigger' method to implement events bubbling.
+         *
+         * @param {...*} parameters - Any number of arguments that should be passed to the events' handler.
+         * @returns {Boolean} False if event bubbling was canceled.
+         */
+        bubble: function () {
+            var args = _.toArray(arguments),
+                bubble = this.trigger.apply(this, args),
+                result;
+
+            if (!bubble) {
+                return false;
+            }
+
+            this.containers.forEach(function (parent) {
+                result = parent.bubble.apply(parent, args);
+
+                if (result === false) {
+                    bubble = false;
+                }
+            });
+
+            return !!bubble;
         }
     }, Events, links);
 
-- 
GitLab


From 02b5e100d7fafe4df667ebfcbdb7e73ef53e97e1 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Sat, 3 Oct 2015 15:29:53 +0300
Subject: [PATCH 238/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/magnifier/magnifier.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index a5d89209c9f..f7c880ab104 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -202,7 +202,7 @@
 
 
         function onThumbEnter() {
-            if (enabled === true) {
+            if (enabled === 'true') {
                 currentOpts = data[curIdx];
                 curLens = $box.find('.magnify-lens');
 
@@ -241,7 +241,7 @@
         }
 
         function move() {
-            if (enabled === true) {
+            if (enabled === 'true') {
                 if (status !== currentOpts.status) {
                     onThumbEnter();
                 }
@@ -336,7 +336,7 @@
                 opts.thumb = $thumb;
                 enabled = opts.enabled;
 
-                if(enabled) {
+                if(enabled === 'true') {
 
                     $largeWrapper.show().css('display', '');
                     $largeWrapper.addClass(MagnifyCls.magnifyHidden);
-- 
GitLab


From 96688d6995c479fa0d099e02faf1f53bf308efde Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Sat, 3 Oct 2015 15:59:40 +0300
Subject: [PATCH 239/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/magnifier/magnifier.js | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index f7c880ab104..1c6bac93ff4 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -116,6 +116,20 @@
             _init($box, options);
         };
 
+        function _toBoolean (str) {
+            if (typeof  str === 'string') {
+                if (str === 'true') {
+                    return true;
+                } else if (str === 'false' || '') {
+                    return false;
+                } else {
+                    console.warn("Wrong type: can't be transformed to Boolean");
+                }
+            } else if (typeof str === 'boolean') {
+                return str;
+            }
+        }
+
         function createLens(thumb) {
             if ($(thumb).siblings('.magnify-lens').length) {
                 return false;
@@ -202,7 +216,7 @@
 
 
         function onThumbEnter() {
-            if (enabled === 'true') {
+            if (_toBoolean(enabled)) {
                 currentOpts = data[curIdx];
                 curLens = $box.find('.magnify-lens');
 
@@ -241,7 +255,7 @@
         }
 
         function move() {
-            if (enabled === 'true') {
+            if (_toBoolean(enabled)) {
                 if (status !== currentOpts.status) {
                     onThumbEnter();
                 }
@@ -336,7 +350,7 @@
                 opts.thumb = $thumb;
                 enabled = opts.enabled;
 
-                if(enabled === 'true') {
+                if(_toBoolean(enabled)) {
 
                     $largeWrapper.show().css('display', '');
                     $largeWrapper.addClass(MagnifyCls.magnifyHidden);
-- 
GitLab


From e39ab8bb52a5b31c14d3207ec7974457d1ca2c15 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Sat, 3 Oct 2015 16:38:55 +0300
Subject: [PATCH 240/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fixed Swatches fallback
---
 .../view/frontend/web/js/SwatchRenderer.js    | 35 ++++++++++++++++---
 lib/web/mage/gallery/gallery.js               |  4 ++-
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index cae146c4e00..695cc63ed69 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -181,7 +181,8 @@ define(["jquery", "jquery/ui"], function ($) {
             onlySwatches: false,                               // show only swatch controls
             enableControlLabel: true,                          // enable label for control
             moreButtonText: 'More',                            // text for more button
-            mediaCallback: ''                                  // Callback url for media
+            mediaCallback: '',                                 // Callback url for media
+            mediaGalleryInitial: [{}]                          // Cache for BaseProduct images. Needed when option unset
         },
 
         /**
@@ -204,6 +205,20 @@ define(["jquery", "jquery/ui"], function ($) {
             }
         },
 
+        /**
+         * @private
+         */
+        _create: function () {
+            var options = this.options,
+                gallery = $('[data-gallery-role=gallery-placeholder]', '.column.main');
+
+            gallery.on('gallery:loaded', function () {
+                var galleryObject = gallery.data('gallery');
+
+                options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+            });
+        },
+
         /**
          * Render controls
          *
@@ -705,6 +720,8 @@ define(["jquery", "jquery/ui"], function ($) {
                 };
 
             if ($widget._ObjectLength(response) < 1) {
+                this.updateBaseImage(this.options.mediaGalleryInitial, $main, isProductViewExist);
+
                 return;
             }
 
@@ -717,7 +734,7 @@ define(["jquery", "jquery/ui"], function ($) {
 
                 if (response.hasOwnProperty('gallery')) {
                     $.each(response.gallery, function () {
-                        if (!support(this) || response.large == this.large) {
+                        if (!support(this) || response.large === this.large) {
                             return;
                         }
                         images.push({
@@ -729,13 +746,23 @@ define(["jquery", "jquery/ui"], function ($) {
                 }
             }
 
+            this.updateBaseImage(images, $main, isProductViewExist);
+        },
+
+        /**
+         * Update [gallery-placeholder] or [product-image-photo]
+         * @param {Array} images
+         * @param {jQuery} context
+         * @param {Boolean} isProductViewExist
+         */
+        updateBaseImage: function (images, context, isProductViewExist) {
             if (isProductViewExist) {
-                $main
+                context
                     .find('[data-gallery-role=gallery-placeholder]')
                     .data('gallery')
                     .updateData(images);
             } else {
-                $main.find('.product-image-photo').attr('src', images.shift().medium);
+                context.find('.product-image-photo').attr('src', images.shift().medium);
             }
         },
 
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index c4fb263b4ba..9aa2d7302bc 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -321,7 +321,9 @@ define([
                     returnCurrentImages: function () {
                         var images = [];
 
-                        _(settings.fotoramaApi.data).each(images.push, images);
+                        _.each(settings.fotoramaApi.data, function (item) {
+                            images.push(item);
+                        });
 
                         return images;
                     }
-- 
GitLab


From e1065a647f203b3f4c565d7ac6f8220b65b307c1 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Sat, 3 Oct 2015 17:07:13 +0300
Subject: [PATCH 241/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/magnifier/magnify.js | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index c78f1705517..869e2f4ce89 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -84,8 +84,10 @@ define([
             config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
-        $(element).on('fotorama:show fotorama:fullscreenenter ', function () {
-            hideMagnifier();
+        $(element).on('gallery:loaded', function () {
+            $(element).find(gallerySelector).on('fotorama:show fotorama:fullscreenenter ', function () {
+                hideMagnifier();
+            });
         });
 
         return config;
-- 
GitLab


From 997f112279092cbc60f7437a53204cc39dc25095 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Sat, 3 Oct 2015 17:25:29 +0300
Subject: [PATCH 242/420] MAGETWO-42762: Improve performance of table rendering

- Fix shipping methods issue
---
 .../Ui/view/base/web/js/form/element/abstract.js       |  1 -
 .../Ui/view/base/web/js/lib/core/element/element.js    | 10 ++++++++++
 .../Magento/Ui/view/base/web/templates/collection.html |  4 +++-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
index a92b0714872..fe04f21e371 100755
--- a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
@@ -18,7 +18,6 @@ define([
             focused: false,
             required: false,
             disabled: false,
-            tmpPath: 'ui/form/element/',
             tooltipTpl: 'ui/form/element/helper/tooltip',
             'input_type': 'input',
             placeholder: '',
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index 3229f91ca36..84688e9a3a4 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -63,6 +63,7 @@ define([
     Element = _.extend({
         defaults: {
             template: '',
+            displayArea: '',
             containers: [],
             registerNodes: true,
             storageConfig: {
@@ -202,6 +203,15 @@ define([
             return this.template;
         },
 
+        /**
+         * Checks if template was specified for an element.
+         *
+         * @returns {Boolean}
+         */
+        hasTemplate: function () {
+            return !!this.template;
+        },
+
         /**
          * Returns value of the nested property.
          *
diff --git a/app/code/Magento/Ui/view/base/web/templates/collection.html b/app/code/Magento/Ui/view/base/web/templates/collection.html
index ac5ce2ca9de..a5e802420e3 100644
--- a/app/code/Magento/Ui/view/base/web/templates/collection.html
+++ b/app/code/Magento/Ui/view/base/web/templates/collection.html
@@ -5,5 +5,7 @@
  */
 -->
 <!-- ko foreach: { data: elems, as: 'element' } -->
-    <!-- ko template: element.getTemplate() --><!-- /ko -->
+    <!-- ko if: hasTemplate() -->
+        <!-- ko template: getTemplate() --><!-- /ko -->
+    <!-- /ko -->
 <!-- /ko -->
-- 
GitLab


From dbb81e87f06cacbc0c2b13c2abf38ab31754c3d1 Mon Sep 17 00:00:00 2001
From: Uladzislau Harbachou <uladzislau_harbachou@epam.com>
Date: Sat, 3 Oct 2015 17:41:55 +0300
Subject: [PATCH 243/420] JS-241 - Various rendering bugs with Fullscreen
 Gallery

---
 lib/web/fotorama/fotorama.js | 48 ++++++++++++++++++------------------
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index ae1de488584..c1fe1fcf217 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -1548,23 +1548,26 @@ fotoramaVersion = '4.6.4';
             size = opt.thumbheight;
             wrapSize = $navWrap.height();
         }
-        if ((size + opt.margin) * (guessIndex + 1) >= wrapSize - offsetNav) {
+        if ( (size + opt.margin) * (guessIndex + 1) >= (wrapSize - offsetNav) ) {
             if (dir === 'horizontal') {
                 position = -$guessNavFrame.position().left;
             } else {
                 position = -$guessNavFrame.position().top;
             }
-        }
-        if ((size + opt.margin) * (guessIndex) <= Math.abs(offsetNav)) {
-            if (dir === 'horizontal') {
-                position = -$guessNavFrame.position().left + wrapSize - (size + opt.margin);
+        } else {
+            if ((size + opt.margin) * (guessIndex) <= Math.abs(offsetNav)) {
+                if (dir === 'horizontal') {
+                    position = -$guessNavFrame.position().left + wrapSize - (size + opt.margin);
+                } else {
+                    position = -$guessNavFrame.position().top + wrapSize - (size + opt.margin);
+                }
             } else {
-                position = -$guessNavFrame.position().top + wrapSize - (size + opt.margin);
+                position = offsetNav;
             }
         }
         position = validateRestrictions(position, navShaftTouchTail);
 
-        return position;
+        return position || 0;
     }
 
     function elIsDisabled(el) {
@@ -3082,14 +3085,13 @@ fotoramaVersion = '4.6.4';
                     boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max));
                     boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max));
                     l = (opts.navdir === 'vertical' ? boundTop : boundLeft);
-                    pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max);
+                    pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max) || 0;
                     time = options.time * 1.1;
                     slide($navShaft, {
                         time: time,
-                        pos: pos || 0,
+                        pos: pos,
                         direction: opts.navdir,
                         onEnd: function () {
-                            thumbsDraw(pos, true);
                             thumbArrUpdate();
                         }
                     });
@@ -3102,17 +3104,15 @@ fotoramaVersion = '4.6.4';
 
                     pos = validateSlidePos(opts, navShaftTouchTail, options.guessIndex, x, $guessNavFrame, $navWrap, opts.navdir);
 
-                    if (pos != undefined) {
-                        slide($navShaft, {
-                            time: time,
-                            pos: pos || 0,
-                            direction: opts.navdir,
-                            onEnd: function () {
-                                thumbsDraw(pos, true);
-                                thumbArrUpdate();
-                            }
-                        });
-                    }
+                    slide($navShaft, {
+                        time: time,
+                        pos: pos,
+                        direction: opts.navdir,
+                        onEnd: function () {
+                            thumbsDraw(pos, true);
+                            thumbArrUpdate();
+                        }
+                    });
                     setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
                 }
             }
@@ -3290,17 +3290,17 @@ fotoramaVersion = '4.6.4';
                 pos,
                 time = 500 * 1.1,
                 size = opts.navdir === 'horizontal' ? opts.thumbwidth : opts.thumbheight,
-                onEnd = function (pos) {
-                    thumbsDraw(pos, true);
+                onEnd = function () {
                     thumbArrUpdate();
                 };
             if (slideDir === 'next') {
                 pos = currentPosition - (size + opts.margin) * thumbsPerSlide;
             }
             if (slideDir === 'prev') {
-                pos = currentPosition + (size + opts.margin) * thumbsPerSlide
+                pos = currentPosition + (size + opts.margin) * thumbsPerSlide;
             }
             pos = validateRestrictions(pos, navShaftTouchTail);
+            thumbsDraw(pos, true);
             slide($navShaft, {
                 time: time,
                 pos: pos,
-- 
GitLab


From e3ea775cca255874b50512ee4c7da062d08669ad Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Sat, 3 Oct 2015 18:25:00 +0300
Subject: [PATCH 244/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix unittests
---
 .../Catalog/Test/Unit/Block/Product/View/GalleryTest.php      | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
index 484c48003d4..2912429dd9b 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
@@ -45,6 +45,10 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
+        $this->jsonEncoderMock = $this->getMockBuilder('Magento\Framework\Json\EncoderInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
         $this->model = new \Magento\Catalog\Block\Product\View\Gallery(
             $this->context,
             $this->arrayUtils,
-- 
GitLab


From 5da00870aece2b2f7966fbb0230bde4d8dddb5a5 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Sat, 3 Oct 2015 19:33:54 +0300
Subject: [PATCH 245/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix unittests
---
 .../Test/Unit/Helper/DataTest.php             | 24 +++++++++----------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php
index 67c6a01be1f..ead7283f2d5 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php
@@ -139,7 +139,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $allowedProducts = [];
         for ($i = 1; $i <= 2; $i++) {
             $productMock = $this->getMock(
-                'Magento\Catalog\Model\Product', ['getData', 'getImage', 'getId', '__wakeup'], [], '', false
+                'Magento\Catalog\Model\Product', ['getData', 'getImage', 'getId', '__wakeup', 'getMediaGalleryImages'], [], '', false
             );
             $productMock->expects($this->any())
                 ->method('getData')
@@ -159,19 +159,17 @@ class DataTest extends \PHPUnit_Framework_TestCase
                 'attribute_id_1' => [
                     'attribute_code_value_1' => ['product_id_1', 'product_id_2'],
                 ],
-                'images' => [
-                    'attribute_id_1' => [
-                        'attribute_code_value_1' => [
-                            'product_id_1' => 'http://example.com/base_img_url',
-                            'product_id_2' => 'http://example.com/base_img_url_2',
-                        ],
-                    ],
-                    'attribute_id_2' => [
-                        'attribute_code_value_2' => [
-                            'product_id_1' => 'http://example.com/base_img_url',
-                            'product_id_2' => 'http://example.com/base_img_url_2',
-                        ],
+                'index' => [
+                    'product_id_1' => [
+                        'attribute_id_1' => 'attribute_code_value_1',
+                        'attribute_id_2' => 'attribute_code_value_2'
                     ],
+
+                    'product_id_2' => [
+                        'attribute_id_1' => 'attribute_code_value_1',
+                        'attribute_id_2' => 'attribute_code_value_2'
+                    ]
+
                 ],
                 'attribute_id_2' => [
                     'attribute_code_value_2' => ['product_id_1', 'product_id_2'],
-- 
GitLab


From 5ab0874db407964c8bdc10ea2a2291d861d9081b Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Sat, 3 Oct 2015 20:17:46 +0300
Subject: [PATCH 246/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 .../Catalog/view/frontend/templates/product/view/gallery.phtml  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 1e7cd3db22f..40afc9e365c 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -35,7 +35,7 @@
                         ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/duration"); ?>,
                     "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/effect"); ?>",
-                    "navarrows": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>",
+                    "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>,
                     "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
                     "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>"
                 },
-- 
GitLab


From 08166101674f073419352e7d59636b88bacd8094 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Sat, 3 Oct 2015 20:17:49 +0300
Subject: [PATCH 247/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 app/design/frontend/Magento/luma/etc/view.xml |  2 +-
 lib/web/mage/gallery/gallery.html             |  6 +-
 lib/web/mage/gallery/gallery.js               | 63 +++++++++++++++++--
 3 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 29336ddfbd2..46abe7f13b1 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -199,7 +199,7 @@
                 <var name="duration">500</var> <!-- Sets transition duration in ms -->
             </var>
             <var name="fullscreen">
-                <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+                <var name="navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
                 <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
                 <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
                 <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 11b2ad5fd07..4f4c92b7e54 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -4,7 +4,8 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="fotorama-item" data-gallery-role="gallery">
+<div class="fotorama-item" data-gallery-role="gallery" tabindex="0">
+    <div data-gallery-role="fotorama__focusable-start" tabindex="0"></div>
     <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows">
         <div class="fotorama__stage">
             <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos">
@@ -22,7 +23,7 @@
         </div>
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
-                <div class="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
+                <div class="fotorama__fullscreen-icon" data-gallery-role="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
                 <div class="fotorama__thumb__arr--left" tabindex="0" role="button" aria-label="Previos">
                     <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
                 </div>
@@ -35,5 +36,6 @@
             </div>
         </div>
     </div>
+    <div data-gallery-role="fotorama__focusable-end" tabindex="0"></div>
 </div>
 <div class="magnifier-preview" data-gallery-role="magnifier" id="preview"></div>
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9aa2d7302bc..86851cb6105 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -60,6 +60,10 @@ define([
 
             this._super();
 
+            _.bindAll(this,
+                '_focusSwitcher'
+            );
+
             config.options.swipe = true;
             this.config = config;
 
@@ -83,7 +87,6 @@ define([
                     thumb: item.thumb
                 });
             });
-            this.settings.fullscreenData = fullscreenData;
 
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
@@ -101,12 +104,21 @@ define([
          */
         initFullscreenSettings: function () {
             var settings = this.settings,
+                self = this,
                 items = [];
 
-            settings.fullscreenConfig.swipe = false;
+            settings.$gallery = this.settings.$element.find('[data-gallery-role="gallery"]');
+            settings.focusableStart = this.settings.$element.find('[data-gallery-role="fotorama__focusable-start"]');
+            settings.focusableEnd = this.settings.$element.find('[data-gallery-role="fotorama__focusable-end"]');
+            settings.closeIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
+
+            settings.fullscreenConfig.swipe = true;
 
-            settings.$element.on('fotorama:fullscreenenter', function () {
 
+            settings.$gallery.on('fotorama:fullscreenenter', function () {
+                settings.$gallery.focus();
+                settings.focusableStart.bind('focusin', self._focusSwitcher);
+                settings.focusableEnd.bind('focusin', self._focusSwitcher);
                 settings.api.updateOptions(settings.defaultConfig.options, true);
                 settings.api.updateOptions(settings.fullscreenConfig, true);
 
@@ -117,8 +129,10 @@ define([
                 settings.isFullscreen = true;
             });
 
-            settings.$element.on('fotorama:fullscreenexit', function () {
+            settings.$gallery.on('fotorama:fullscreenexit', function () {
                 settings.api.updateOptions(settings.defaultConfig.options, true);
+                settings.focusableStart.unbind('focusin', this._focusSwitcher);
+                settings.focusableEnd.unbind('focusin', this._focusSwitcher);
 
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
@@ -128,6 +142,47 @@ define([
             });
         },
 
+        /**
+         * Switcher focus.
+         */
+        _focusSwitcher: function (e) {
+            var target = $(e.target),
+                settings = this.settings;
+
+            if (target.is(settings.focusableStart)) {
+                this._setFocus('start');
+            } else if (target.is(settings.focusableEnd)) {
+                this._setFocus('end');
+            }
+        },
+
+        /**
+         * Set focus to element.
+         * @param {String} position - can be "start" and "end"
+         *      positions.
+         *      If position is "end" - sets focus to first
+         *      focusable element in modal window scope.
+         *      If position is "start" - sets focus to last
+         *      focusable element in modal window scope
+         *
+         *  @param {String} type - can be "opened" or false
+         *      If type is "opened" - looks to "this.options.focus"
+         *      property and sets focus
+         */
+        _setFocus: function (position) {
+            var settings = this.settings,
+                focusableElements,
+                infelicity;
+
+            if (position === 'end') {
+                settings.$gallery.find(settings.closeIcon).focus();
+            } else if (position === 'start') {
+                infelicity = 2; //Constant for find last focusable element
+                focusableElements = settings.$gallery.find(':focusable');
+                focusableElements.eq(focusableElements.length - infelicity).focus();
+            }
+        },
+
         /**
          * Initializes gallery with configuration options.
          */
-- 
GitLab


From 272fc1e6a22d9d3fb46a221ec9375bf1f542c8b2 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Sat, 3 Oct 2015 21:08:05 +0300
Subject: [PATCH 248/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 app/code/Magento/Catalog/Block/Product/View/Gallery.php | 2 ++
 app/code/Magento/ConfigurableProduct/Helper/Data.php    | 2 ++
 app/design/frontend/Magento/luma/etc/view.xml           | 4 ++--
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index 42e4e73d4fc..6bcb8e66813 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -63,12 +63,14 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
                 $image->setData(
                     'medium_image_url',
                     $this->_imageHelper->init($product, 'product_page_image_medium')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                         ->setImageFile($image->getFile())
                         ->getUrl()
                 );
                 $image->setData(
                     'large_image_url',
                     $this->_imageHelper->init($product, 'product_page_image_large')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                         ->setImageFile($image->getFile())
                         ->getUrl()
                 );
diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php
index 45302ad89f8..347be9282be 100644
--- a/app/code/Magento/ConfigurableProduct/Helper/Data.php
+++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php
@@ -51,12 +51,14 @@ class Data
                 $image->setData(
                     'medium_image_url',
                     $this->imageHelper->init($product, 'product_page_image_medium')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                         ->setImageFile($image->getFile())
                         ->getUrl()
                 );
                 $image->setData(
                     'large_image_url',
                     $this->imageHelper->init($product, 'product_page_image_large')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                         ->setImageFile($image->getFile())
                         ->getUrl()
                 );
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 46abe7f13b1..7d25912c636 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -77,8 +77,8 @@
         </image>
         <image id="product_page_image_large" type="image"/>
         <image id="product_page_image_medium" type="image">
-            <width>560</width>
-            <height>700</height>
+            <width>700</width>
+            <height>560</height>
         </image>
         <image id="product_page_image_small" type="thumbnail">
             <width>88</width>
-- 
GitLab


From c69836da29d3634981578d01f80e35d9e4faea8c Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Sun, 4 Oct 2015 18:58:07 -0500
Subject: [PATCH 249/420] MAGETWO-39769: [GITHUB] lastInsertId returns 0 when
 PK is not AI #1445

---
 .../Magento/Framework/Model/Resource/Db/AbstractDb.php        | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php b/lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php
index 204f868d442..e3842b75db0 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php
@@ -768,7 +768,9 @@ abstract class AbstractDb extends AbstractResource
         }
         $this->getConnection()->insert($this->getMainTable(), $bind);
 
-        $object->setId($this->getConnection()->lastInsertId($this->getMainTable()));
+        if ($this->_isPkAutoIncrement) {
+            $object->setId($this->getConnection()->lastInsertId($this->getMainTable()));
+        }
 
         if ($this->_useIsObjectNew) {
             $object->isObjectNew(false);
-- 
GitLab


From e9fa63b3e64aac1e16c3908d948c116a58baedf5 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Sun, 4 Oct 2015 20:26:45 -0500
Subject: [PATCH 250/420] MAGETWO-39769: [GITHUB] lastInsertId returns 0 when
 PK is not AI #1445

---
 .../Test/Unit/Resource/Db/AbstractDbTest.php  | 67 +++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
index 44a367a3df5..afb5b95f6e1 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
@@ -487,4 +487,71 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
 
         $this->_model->save($abstractModelMock);
     }
+
+    /**
+     * Test that we only set/override id on object if PK autoincrement is enabled
+     * @param bool $pkIncrement
+     * @dataProvider testSaveNewObjectDataProvider
+     */
+    public function testSaveNewObject($pkIncrement)
+    {
+        /**
+         * Mock SUT so as not to test extraneous logic
+         */
+        $model = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+            ->disableOriginalConstructor()
+            ->setMethods(['_prepareDataForSave', 'getIdFieldName', 'getConnection', 'getMainTable'])
+            ->getMockForAbstractClass();
+        /**
+         * Only testing the logic in a protected method and property, must use reflection to avoid dealing with large
+         * amounts of unrelated logic in save function
+         *
+         * make saveNewObject and _isPkAutoIncrement public
+         */
+        $reflectionMethod = new \ReflectionMethod($model, 'saveNewObject');
+        $reflectionMethod->setAccessible(true);
+        $reflectionProperty = new \ReflectionProperty($model, '_isPkAutoIncrement');
+        $reflectionProperty->setAccessible(true);
+        $reflectionProperty->setValue($model, $pkIncrement);
+
+        // Mocked behavior
+        $connectionMock = $this->getMockBuilder('\Magento\Framework\DB\Adapter\AdapterInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(['lastInsertId'])
+            ->getMockForAbstractClass();
+        $getConnectionInvokedCount = $pkIncrement ? 2 : 1;
+        $model->expects($this->exactly($getConnectionInvokedCount))
+            ->method('getConnection')
+            ->willReturn($connectionMock);
+
+        $idFieldName = 'id_field_name';
+        $model->expects($this->once())->method('_prepareDataForSave')->willReturn([$idFieldName => 'id',]);
+
+
+        // Test expectations
+        //      Only get object's id field name if not PK autoincrement
+        $getIdFieldNameInvokedCount = $pkIncrement ? 1 : 0;
+        $model->expects($this->exactly($getIdFieldNameInvokedCount))
+            ->method('getIdFieldName')
+            ->willReturn($idFieldName);
+
+        //      Only set object id if not PK autoincrement
+        $setIdInvokedCount = $pkIncrement ? 1 : 0;
+        $inputObject = $this->getMockBuilder('\Magento\Framework\Model\AbstractModel')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $inputObject->expects($this->exactly($setIdInvokedCount))->method('setId');
+
+        //      Only call lastInsertId if not PK autoincrement
+        $lastInsertIdInvokedCount = $pkIncrement ? 1 : 0;
+        $connectionMock->expects($this->exactly($lastInsertIdInvokedCount))->method('lastInsertId');
+
+        $reflectionMethod->invokeArgs($model, [$inputObject]);
+    }
+
+    public function testSaveNewObjectDataProvider()
+    {
+        return [[true], [false]];
+    }
+
 }
-- 
GitLab


From d0d1605918454996dcca922b9e0bd34cea08338a Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 5 Oct 2015 14:04:24 +0300
Subject: [PATCH 251/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Thumbnails background color
---
 lib/web/mage/gallery/gallery.less | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index a701e89c4c8..04696062fe9 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -509,6 +509,7 @@
 }
 
 .fotorama__thumb {
+    background-color: @color-gray94;
     height: 100%;
     overflow: hidden;
     position: relative;
-- 
GitLab


From 700ffaf8d7d4927b289c8fc44da4ad34a4108f29 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 5 Oct 2015 14:10:01 +0300
Subject: [PATCH 252/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix missed part
---
 lib/internal/Magento/Framework/Config/View.php | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index fb294bbbd0e..703cd37bc40 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -105,6 +105,10 @@ class View extends \Magento\Framework\Config\AbstractXml
      */
     public function getVarValue($module, $var)
     {
+        if (!isset($this->_data['vars'][$module])) {
+            return false;
+        }
+
         $value = $this->_data['vars'][$module];
         foreach (explode('/', $var) as $node) {
             if (is_array($value) && isset($value[$node])) {
@@ -113,6 +117,7 @@ class View extends \Magento\Framework\Config\AbstractXml
                 return false;
             }
         }
+
         return $value;
     }
 
-- 
GitLab


From 34113567f942ed6dd6eb17faea9d221b04fdb23a Mon Sep 17 00:00:00 2001
From: Uladzislau Harbachou <uladzislau_harbachou@epam.com>
Date: Mon, 5 Oct 2015 14:13:24 +0300
Subject: [PATCH 253/420] JS-241: Various rendering bugs with Fullscreen
 Gallery

- Fixed error in console
- Fixed undefined error in magnifier
---
 lib/web/mage/gallery/gallery.less | 27 ++++++++++
 lib/web/magnifier/magnifier.js    | 84 ++++++++++++++++++-------------
 lib/web/magnifier/magnify.js      |  2 +-
 3 files changed, 76 insertions(+), 37 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index a701e89c4c8..2034fc98abb 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -721,6 +721,7 @@
 }
 
 .fotorama__fullscreen-icon {
+    //display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
@@ -730,6 +731,7 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
+        //display: inline-block;
         background-position: (-@size-fotorama-block) 0;
     }
 }
@@ -1181,6 +1183,19 @@
     }
 }
 
+.fotorama__wrap--only-active {
+    .fotorama__stage,
+    .fotorama__nav {
+        max-width: 99999px !important;
+    }
+    .fotorama__stage__frame {
+        visibility: hidden;
+    }
+    .fotorama__stage__frame.fotorama__active {
+        visibility: visible;
+    }
+}
+
 .fotorama__thumb__arr {
     &:extend(.fotorama-sprite);
     background-size: 300%;
@@ -1188,6 +1203,18 @@
     padding-bottom: @fotorama-thumb-arrow;
 }
 
+.magnify-fullimage {
+    display: none;
+}
+
 body.fotorama__fullscreen {
     overflow-y: hidden;
+    .magnify-fullimage {
+        display: inline-block;
+    }
+    .fotorama__stage__shaft {
+        //.fotorama__img {
+        //    display: none;
+        //}
+    }
 }
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 1c6bac93ff4..cdc3b13c2b7 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -96,7 +96,9 @@
 
         var MagnifyCls = {
             magnifyHidden: "magnify-hidden",
-            magnifyOpaque: "magnify-opaque"
+            magnifyOpaque: "magnify-opaque",
+            magnifyFull: "magnify-fullimage"
+
         };
 
 
@@ -459,7 +461,7 @@
                     ? options.onthumbmove
                     : currentOpts.onthumbmove;
 
-            largeUrl = gOptions.original || $thumb.attr('src');
+            largeUrl = gOptions.full || $thumb.attr('src');
 
             if (thumb.id === '') {
                 idx = thumb.id = 'magnifier-item-' + gId;
@@ -557,14 +559,17 @@
         }
 
         function toggleZoomButtons($image) {
-            var image = new Image();
-            image.src = $image.attr("src");
-            if ( (image.height > $image.parent().height()) || (image.width > $image.parent().width()) ) {
-                $('.fotorama__zoom-in').show();
-                $('.fotorama__zoom-out').show();
-            } else {
-                $('.fotorama__zoom-in').hide();
-                $('.fotorama__zoom-out').hide();
+            var path = $image.attr("src"),
+                imgSize;
+            if (path) {
+                imgSize = getImageSize(path);
+                if ((imgSize.rh > $image.parent().height()) || (imgSize.rw > $image.parent().width())) {
+                    $('.fotorama__zoom-in').show();
+                    $('.fotorama__zoom-out').show();
+                } else {
+                    $('.fotorama__zoom-in').hide();
+                    $('.fotorama__zoom-out').hide();
+                }
             }
         }
 
@@ -578,8 +583,9 @@
                 isTouchEnabled = 'ontouchstart' in document.documentElement;
 
             $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
-                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $imageContainer = $image.parent(),
+                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $imageContainer = $preview.parent(),
                     gallery = $('[data-gallery-role="gallery"]');
 
                 gallery.on('fotorama:fullscreenexit', function () {
@@ -590,29 +596,33 @@
                 });
 
                 if (gallery.data('fotorama').fullScreen) {
-
+                    //if (!$imageContainer.find('.' + MagnifyCls.magnifyFull).length) {
+                    //    $imageContainer.append('<img class="' + MagnifyCls.magnifyFull + '" src ="' + options.full + '"/>');
+                    //}
                     toggleZoomButtons($image);
 
                     $('.fotorama__stage__frame .fotorama__img').each(function () {
-                        var image = new Image();
-                        image.src = $(this).attr("src");
-
-                        if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
-
-                            if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
-                                $(this).width($(this).parent().width());
-                                $(this).height('auto');
-                            } else {
-                                $(this).height($(this).parent().height());
-                                $(this).width('auto');
+                        var path = $(this).attr("src"),
+                            imgSize;
+                        if (path) {
+                            imgSize = getImageSize(path);
+
+                            if ((imgSize.rh > $(this).parent().height()) || (imgSize.rw > $(this).parent().width())) {
+
+                                if (imgSize.rh / imgSize.rw < $(this).parent().height() / $(this).parent().width()) {
+                                    $(this).width($(this).parent().width());
+                                    $(this).height('auto');
+                                } else {
+                                    $(this).height($(this).parent().height());
+                                    $(this).width('auto');
+                                }
+
+                                $(this).css({
+                                    'top': '',
+                                    'left': ''
+                                });
                             }
-
-                            $(this).css({
-                                'top': '',
-                                'left': ''
-                            });
                         }
-
                     });
                 }
 
@@ -690,7 +700,7 @@
                     }
                 });
             });
-        };
+        }
 
         function onScroll() {
 
@@ -749,8 +759,10 @@
         function checkFullscreenImagePosition() {
             if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
 
-                var $image = $('[data-gallery-role="stage-shaft"] > [data-active="true"] > img'),
-                    $imageContainer = $image.parent(),
+                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $imageContainer = $preview.parent(),
+                    gallery = $('[data-gallery-role="gallery"]'),
                     top, left;
 
                 if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
@@ -793,7 +805,7 @@
             }
 
 
-            if (setedResult >imgOriginalSize.rw) {
+            if (setedResult > imgOriginalSize.rw) {
                 setedResult = imgOriginalSize.rw;
             }
             $image.css({'width': setedResult, height: 'auto'});
@@ -882,9 +894,9 @@
                     var delta = e.deltaY || e.detail || e.wheelDelta;
 
                     if (delta > 0) {
-                        zoomOut(e)
+                        zoomOut(e);
                     } else {
-                        zoomIn(e)
+                        zoomIn(e);
                     }
 
                     e.preventDefault ? e.preventDefault() : (e.returnValue = false);
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 869e2f4ce89..22b50c0e8d5 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -81,7 +81,7 @@ define([
         $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
-            config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
+            config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('gallery:loaded', function () {
-- 
GitLab


From 19abfb90ec9450937ccdf21a65c214ceb68efa18 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 5 Oct 2015 14:53:07 +0300
Subject: [PATCH 254/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix missed Gallery Unit test
---
 .../Test/Unit/Block/Product/View/GalleryTest.php | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
index 2912429dd9b..eec42410e2e 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
@@ -113,7 +113,8 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
                 [$productMock, 'product_page_image_small', [], $this->imageHelper],
                 [$productMock, 'product_page_image_medium', [], $this->imageHelper],
                 [$productMock, 'product_page_image_large', [], $this->imageHelper],
-            ]);
+            ])
+            ->willReturnSelf();
         $this->imageHelper->expects($this->exactly(3))
             ->method('setImageFile')
             ->with('test_file')
@@ -128,6 +129,19 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
             ->method('getUrl')
             ->willReturn('product_page_image_large_url');
 
+        $this->imageHelper->expects($this->exactly(2))
+            ->method('constrainOnly')
+            ->with(true)
+            ->willReturnSelf();
+        $this->imageHelper->expects($this->exactly(2))
+            ->method('keepAspectRatio')
+            ->with(true)
+            ->willReturnSelf();
+         $this->imageHelper->expects($this->exactly(2))
+            ->method('keepFrame')
+            ->with(false)
+            ->willReturnSelf();
+
         $images = $this->model->getGalleryImages();
         $this->assertInstanceOf('Magento\Framework\Data\Collection', $images);
     }
-- 
GitLab


From f15da4f3412f242432c53b3d461cffab6c5ded1a Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Mon, 5 Oct 2015 15:38:33 +0300
Subject: [PATCH 255/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix configuration bug
---
 lib/internal/Magento/Framework/Config/View.php | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index fb294bbbd0e..3f1edc40836 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -71,15 +71,18 @@ class View extends \Magento\Framework\Config\AbstractXml
      */
     protected function parseVarElement(\DOMElement $node)
     {
-        if ($node->getElementsByTagName('var')->length) {
-            $result = [];
-            foreach ($node->getElementsByTagName('var') as $varNode) {
+        $result = [];
+        for ($varNode = $node->firstChild; $varNode !== null; $varNode = $varNode->nextSibling) {
+            if ($varNode instanceof \DOMElement && $varNode->tagName == "var") {
                 $varName = $varNode->getAttribute('name');
                 $result[$varName] = $this->parseVarElement($varNode);
             }
-        } else {
+        }
+        if (!count($result))
+        {
             $result = $node->nodeValue;
         }
+
         return $result;
     }
 
-- 
GitLab


From 6aabb0e828e12f8b4c8704bd5a0a581394eb26b0 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 5 Oct 2015 15:53:50 +0300
Subject: [PATCH 256/420] MAGETWO-42762: Improve performance of table rendering

- Extend uiCollection methods
- Move unique properties handling to base element
---
 .../view/base/web/js/grid/editing/record.js   |  18 +-
 .../view/base/web/js/grid/filters/filters.js  |  22 --
 .../Ui/view/base/web/js/grid/listing.js       |  16 +-
 .../Ui/view/base/web/js/grid/massactions.js   |   1 -
 .../Ui/view/base/web/js/grid/paging/paging.js |   1 -
 .../view/base/web/js/lib/core/collection.js   | 199 ++++++++----------
 .../base/web/js/lib/core/element/element.js   |  79 ++++++-
 .../web/templates/grid/sticky/toolbar.html    |  33 +--
 .../view/base/web/templates/grid/toolbar.html |  33 +--
 9 files changed, 184 insertions(+), 218 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
index 2097ee77947..15baff272c9 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
@@ -142,7 +142,7 @@ define([
          */
         createFields: function (columns) {
             columns.forEach(function (column) {
-                if (column.editor && !this.getField(column.index)) {
+                if (column.editor && !this.hasChild(column.index)) {
                     this.initField(column);
                 }
             }, this);
@@ -150,18 +150,6 @@ define([
             return this;
         },
 
-        /**
-         * Returns instance of a field found by provided identifier.
-         *
-         * @param {String} index - Identifier of a field inside record.
-         * @returns {Object}
-         */
-        getField: function (index) {
-            return this.elems.findWhere({
-                index: index
-            });
-        },
-
         /**
          * Returns instance of a column found by provided index.
          *
@@ -169,7 +157,7 @@ define([
          * @returns {Column}
          */
         getColumn: function (index) {
-            return this.columns().getColumn(index);
+            return this.columns().getChild(index);
         },
 
         /**
@@ -320,7 +308,7 @@ define([
             var fields;
 
             fields = this.columns().elems.map(function (column) {
-                return this.getField(column.index) || column;
+                return this.getChild(column.index) || column;
             }, this);
 
             this.fields(fields);
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index daad5333abc..d58e7895654 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -265,28 +265,6 @@ define([
             }, true, true);
         },
 
-        /**
-         * Returns instance of a filter found by provided index.
-         *
-         * @param {String} index - Index of a filter (e.g. 'title').
-         * @returns {Filter}
-         */
-        getFilter: function (index) {
-            return this.elems.findWhere({
-                index: index
-            });
-        },
-
-        /**
-         * Checks if collection contains a specfied filter.
-         *
-         * @param {String} index - Index of a filter.
-         * @returns {Boolean}
-         */
-        hasFilter: function (index) {
-            return !!this.getFilter(index);
-        },
-
         /**
          * Returns an array of range filters.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
index a972f3cfbf1..5b68524bc69 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
@@ -40,7 +40,7 @@ define([
                 rows: '${ $.provider }:data.items'
             },
             listens: {
-                elems: 'setPositions updateVisible',
+                elems: 'updatePositions updateVisible',
                 '${ $.provider }:reload': 'showLoader',
                 '${ $.provider }:reloaded': 'hideLoader'
             },
@@ -156,7 +156,7 @@ define([
          *
          * @returns {Listing} Chainable.
          */
-        setPositions: function () {
+        updatePositions: function () {
             var positions = {};
 
             this.elems.each(function (elem, index) {
@@ -190,18 +190,6 @@ define([
             return this;
         },
 
-        /**
-         * Returns instance of a column found by provided identifier.
-         *
-         * @param {String} index - Columns' identifier.
-         * @returns {Column}
-         */
-        getColumn: function (index) {
-            return this.elems.findWhere({
-                index: index
-            });
-        },
-
         /**
          * Returns reference to 'visibleColumns' array.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js
index 2e9a39b2bdd..e2273b9a1f3 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js
@@ -18,7 +18,6 @@ define([
         defaults: {
             template: 'ui/grid/actions',
             stickyTmpl: 'ui/grid/sticky/actions',
-            componentType: 'massaction',
             selectProvider: '',
             actions: [],
             noItemsMsg: $t('You haven\'t selected any items!'),
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
index e121aeb5407..5605f8faf92 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
@@ -19,7 +19,6 @@ define([
             pageSize: 20,
             current: 1,
             selectProvider: '',
-            componentType: 'paging',
 
             sizesConfig: {
                 component: 'Magento_Ui/js/grid/paging/sizes',
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
index d81d1969392..5cac8edb895 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
@@ -23,25 +23,12 @@ define([
     return Element.extend({
         defaults: {
             template: 'ui/collection',
-            componentType: 'container',
             _elems: [],
             ignoreTmpls: {
                 childDefaults: true
             }
         },
 
-        /**
-         * Initializes component.
-         *
-         * @returns {Collection} Chainable.
-         */
-        initialize: function () {
-            this._super()
-                .initUnique();
-
-            return this;
-        },
-
         /**
          * Initializes observable properties.
          *
@@ -56,24 +43,6 @@ define([
             return this;
         },
 
-        /**
-         * Initializes listeners of the unique property.
-         *
-         * @returns {Collection} Chainable.
-         */
-        initUnique: function () {
-            var update = this.onUniqueUpdate.bind(this),
-                uniqueNs = this.uniqueNs;
-
-            this.hasUnique = this.uniqueProp && uniqueNs;
-
-            if (this.hasUnique) {
-                this.source.on(uniqueNs, update, this.name);
-            }
-
-            return this;
-        },
-
         /**
          * Called when another element was added to current component.
          *
@@ -87,60 +56,15 @@ define([
         },
 
         /**
-         * Updates property specified in uniqueNs
-         * if components' unique property is set to 'true'.
-         *
-         * @returns {Collection} Chainable.
-         */
-        setUnique: function () {
-            var property = this.uniqueProp;
-
-            if (this[property]()) {
-                this.source.set(this.uniqueNs, this.name);
-            }
-
-            return this;
-        },
-
-        /**
-         * Retrieves requested region.
-         * Creates region if it was not created yet
+         * Returns instance of a child found by provided index.
          *
-         * @returns {ObservableArray}.
+         * @param {String} index - Index of a child.
+         * @returns {Object}
          */
-        getRegion: function (name) {
-            var regions = this.regions = this.regions || {},
-                region;
-
-            if (name) {
-                if (!regions[name]) {
-                    regions[name] = [];
-
-                    this.observe.call(regions, name);
-                }
-
-                region = regions[name];
-            }
-
-            return region;
-        },
-
-        /**
-         * Replaces specified regions' data with a provided one.
-         * Creates region if it was not created yet.
-         *
-         * @param {Array} items - New regions' data.
-         * @param {String} name - Name of the region.
-         * @returns {Collection} Chainable.
-         */
-        updateRegion: function (items, name) {
-            var region = this.getRegion(name);
-
-            if (region) {
-                region(items);
-            }
-
-            return this;
+        getChild: function (index) {
+            return _.findWhere(this.elems(), {
+                index: index
+            });
         },
 
         /**
@@ -175,38 +99,104 @@ define([
             });
 
             if (update) {
-                this._update();
+                this._updateCollection();
             }
 
             return this;
         },
 
         /**
-         * Removes specified element from the 'elems' array.
+         * Removes specified child from collection.
          *
-         * @param {Object} elem - Element to be removed.
+         * @param {(Object|String)} elem - Child or index of a child to be removed.
          * @returns {Collection} Chainable.
          */
         removeChild: function (elem) {
-            utils.remove(this._elems, elem);
-            this._update();
+            if (_.isString(elem)) {
+                elem = this.getChild(elem);
+            }
+
+            if (elem) {
+                utils.remove(this._elems, elem);
+                this._updateCollection();
+            }
 
             return this;
         },
 
         /**
-         * Removes all references to current instance and
-         * calls 'destroy' method on all of its' children.
-         * @private
+         * Checks if specified child exists in collection.
+         *
+         * @param {Sring} index - Index of a child.
+         * @returns {Boolean}
+         */
+        hasChild: function (index) {
+            return !!this.getChild(index);
+        },
+
+        /**
+         * Creates 'async' wrapper for the specified child
+         * using uiRegistry 'async' method and caches it
+         * in a '_requested' components  object.
          *
+         * @param {String} index - Index of a child.
+         * @returns {Function} Async module wrapper.
+         */
+        requestChild: function (index) {
+            var name = this.formChildName(index);
+
+            return this.requestModule(name);
+        },
+
+        /**
+         * Creates complete child name based on a provided index.
+         *
+         * @param {String} index - Index of a child.
+         * @returns {String}
+         */
+        formChildName: function (index) {
+            return this.name + '.' + index;
+        },
+
+        /**
+         * Retrieves requested region.
+         * Creates region if it was not created yet
+         *
+         * @returns {ObservableArray}
+         */
+        getRegion: function (name) {
+            var regions = this.regions = this.regions || {};
+
+            if (!regions[name]) {
+                regions[name] = [];
+
+                this.observe.call(regions, name);
+            }
+
+            return regions[name];
+        },
+
+        /**
+         * Replaces specified regions' data with a provided one.
+         * Creates region if it was not created yet.
+         *
+         * @param {Array} items - New regions' data.
+         * @param {String} name - Name of the region.
          * @returns {Collection} Chainable.
          */
-        _clearRefs: function () {
+        updateRegion: function (items, name) {
+            this.getRegion(name)(items);
+
+            return this;
+        },
+
+        /**
+         * Destroys collection along with its' elements.
+         */
+        destroy: function () {
             this._super();
 
             this.elems.each('destroy');
-
-            return this;
         },
 
         /**
@@ -222,7 +212,7 @@ define([
                 this._elems[index] = elem;
             }
 
-            this._update()
+            this._updateCollection()
                 .initElement(elem);
         },
 
@@ -233,9 +223,14 @@ define([
          *
          * @returns {Collection} Chainable.
          */
-        _update: function () {
+        _updateCollection: function () {
             var _elems = compact(this._elems),
-                grouped = _.groupBy(_elems, 'displayArea');
+                grouped;
+
+            grouped = _elems.filter(function (elem) {
+                return elem.displayArea && _.isString(elem.displayArea);
+            });
+            grouped = _.groupBy(grouped, 'displayArea');
 
             _.each(grouped, this.updateRegion, this);
 
@@ -289,16 +284,6 @@ define([
             });
 
             return _.flatten(result);
-        },
-
-        /**
-         * Callback which fires when property under uniqueNs has changed.
-         */
-        onUniqueUpdate: function (name) {
-            var active = name === this.name,
-                property = this.uniqueProp;
-
-            this[property](active);
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
index 84688e9a3a4..4e83320b6b3 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -63,8 +63,8 @@ define([
     Element = _.extend({
         defaults: {
             template: '',
-            displayArea: '',
             containers: [],
+            _requesetd: {},
             registerNodes: true,
             storageConfig: {
                 provider: 'localStorage',
@@ -90,7 +90,8 @@ define([
                 .initObservable()
                 .initModules()
                 .initStatefull()
-                .initLinks();
+                .initLinks()
+                .initUnique();
 
             return this;
         },
@@ -113,8 +114,8 @@ define([
         initModules: function () {
             var modules = this.modules || {};
 
-            _.each(modules, function (component, property) {
-                this[property] = registry.async(component);
+            _.each(modules, function (name, property) {
+                this[property] = this.requestModule(name);
             }, this);
 
             if (!_.isFunction(this.source)) {
@@ -174,6 +175,24 @@ define([
             return this;
         },
 
+        /**
+         * Initializes listeners of the unique property.
+         *
+         * @returns {Element} Chainable.
+         */
+        initUnique: function () {
+            var update = this.onUniqueUpdate.bind(this),
+                uniqueNs = this.uniqueNs;
+
+            this.hasUnique = this.uniqueProp && uniqueNs;
+
+            if (this.hasUnique) {
+                this.source.on(uniqueNs, update, this.name);
+            }
+
+            return this;
+        },
+
         /**
          * Makes specified property to be stored automatically.
          *
@@ -194,6 +213,40 @@ define([
             return this;
         },
 
+        /**
+         * Updates property specified in uniqueNs
+         * if elements' unique property is set to 'true'.
+         *
+         * @returns {Element} Chainable.
+         */
+        setUnique: function () {
+            var property = this.uniqueProp;
+
+            if (this[property]()) {
+                this.source.set(this.uniqueNs, this.name);
+            }
+
+            return this;
+        },
+
+        /**
+         * Creates 'async' wrapper for the specified component
+         * using uiRegistry 'async' method and caches it
+         * in a '_requested' components  object.
+         *
+         * @param {String} name - Name of requested component.
+         * @returns {Function} Async module wrapper.
+         */
+        requestModule: function (name) {
+            var requested = this._requesetd;
+
+            if (!requested[name]) {
+                requested[name] = registry.async(name);
+            }
+
+            return requested[name];
+        },
+
         /**
          * Returns path to elements' template.
          *
@@ -254,15 +307,9 @@ define([
          * @returns {Element} Chainable.
          */
         remove: function (path) {
-            var data,
+            var data = utils.nested(this, path),
                 diffs;
 
-            if (!path) {
-                return this;
-            }
-
-            data = utils.nested(this, path);
-
             if (_.isUndefined(data) || _.isFunction(data)) {
                 return this;
             }
@@ -509,6 +556,16 @@ define([
             });
 
             return !!bubble;
+        },
+
+        /**
+         * Callback which fires when property under uniqueNs has changed.
+         */
+        onUniqueUpdate: function (name) {
+            var active = name === this.name,
+                property = this.uniqueProp;
+
+            this[property](active);
         }
     }, Events, links);
 
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html
index 15687352050..140a5242289 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html
@@ -4,38 +4,25 @@
  * See COPYING.txt for license details.
  */
 -->
-
 <div class="admin__data-grid-header" data-role="sticky-el-root">
     <div class="admin__data-grid-header-row">
-        <!-- ko foreach: getRegion('bottom') -->
-            <!-- ko if: $data.componentType === 'massaction' -->
-                    <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
+        <!-- ko scope: requestChild('listing_massaction') -->
+            <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
-        <!-- ko foreach: getRegion('bottom') -->
-            <!-- ko if: $data.componentType === 'paging' -->
-                <!-- ko template: totalTmpl --><!-- /ko -->
-            <!-- /ko -->
+        <!-- ko scope: requestChild('listing_paging') -->
+            <!-- ko template: totalTmpl --><!-- /ko -->
         <!-- /ko -->
         <!-- ko foreach: getRegion('dataGridFilters') -->
             <!-- ko template: $data.stickyTmpl || getTemplate() --><!-- /ko -->
         <!-- /ko -->
-        <div class="admin__data-grid-actions-wrap">
-            <!-- ko foreach: getRegion('dataGridActions') -->
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
+        <div class="admin__data-grid-actions-wrap" data-bind="foreach: getRegion('dataGridActions')">
+            <!-- ko template: getTemplate() --><!-- /ko -->
         </div>
-        <!-- ko foreach: getRegion('bottom') -->
-            <!-- ko if: $data.componentType === 'paging' -->
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
+        <!-- ko scope: requestChild('listing_paging') -->
+            <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
     </div>
 </div>
-<!-- ko foreach: getRegion('dataGridFilters') -->
-    <!-- ko if: $data.index === 'listing_filters' -->
-        <!-- ko scope: chips -->
-            <!-- ko template: $data.stickyTmpl || getTemplate() -->
-        <!-- /ko -->
-    <!-- /ko -->
+<!-- ko scope: requestChild('listing_filters_chips') -->
+    <!-- ko template: $data.stickyTmpl || getTemplate() -->
 <!-- /ko -->
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html b/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html
index 36482b1d973..529b32d7d7a 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html
@@ -5,41 +5,26 @@
  */
 -->
 
-<div class="admin__data-grid-header"
-        data-role="data-grid-toolbar">
+<div class="admin__data-grid-header" data-role="data-grid-toolbar">
     <div class="admin__data-grid-header-row">
-        <div class="admin__data-grid-actions-wrap">
-            <!-- ko foreach: getRegion('dataGridActions') -->
+        <div class="admin__data-grid-actions-wrap" data-bind="foreach: getRegion('dataGridActions')">
             <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
         </div>
         <!-- ko foreach: getRegion('dataGridFilters') -->
-        <!-- ko template: getTemplate() --><!-- /ko -->
+            <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
     </div>
     <div class="admin__data-grid-header-row row row-gutter">
-        <div class="col-xs-2">
-            <!-- ko foreach: getRegion('bottom') -->
-                <!-- ko if: $data.componentType === 'massaction' -->
-                    <!-- ko template: getTemplate() --><!-- /ko -->
-                <!-- /ko -->
-            <!-- /ko -->
+        <div class="col-xs-2" data-bind="scope: requestChild('listing_massaction')">
+            <!-- ko template: getTemplate() --><!-- /ko -->
         </div>
         <div class="col-xs-10">
             <div class="row">
-                <div class="col-xs-3">
-                    <!-- ko foreach: getRegion('bottom') -->
-                        <!-- ko if: $data.componentType === 'paging' -->
-                            <!-- ko template: totalTmpl --><!-- /ko -->
-                        <!-- /ko -->
-                    <!-- /ko -->
+                <div class="col-xs-3" data-bind="scope: requestChild('listing_paging')">
+                    <!-- ko template: totalTmpl --><!-- /ko -->
                 </div>
-                <div class="col-xs-9">
-                    <!-- ko foreach: getRegion('bottom') -->
-                        <!-- ko if: $data.componentType === 'paging' -->
-                            <!-- ko template: getTemplate() --><!-- /ko -->
-                        <!-- /ko -->
-                    <!-- /ko -->
+                <div class="col-xs-9" data-bind="scope: requestChild('listing_paging')">
+                    <!-- ko template: getTemplate() --><!-- /ko -->
                 </div>
             </div>
         </div>
-- 
GitLab


From cea95472214f228e6e533d2d0ccb74c58a69a2a4 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 5 Oct 2015 17:09:10 +0300
Subject: [PATCH 257/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix configuration
---
 .../frontend/Magento/blank/etc/view.xml       | 24 ++++---------------
 app/design/frontend/Magento/luma/etc/view.xml | 19 +++------------
 2 files changed, 8 insertions(+), 35 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 83600f8db5e..02a511df476 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -179,7 +179,7 @@
     </images>
     <vars module="Magento_Catalog">
 
-        <!-- New gallery and magnifier theme settings -->
+        <!-- Gallery and magnifier theme settings. Start -->
         <var name="gallery">
             <var name="navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
             <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
@@ -195,7 +195,7 @@
                 <var name="duration">500</var> <!-- Sets transition duration in ms -->
             </var>
             <var name="fullscreen">
-                <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+                <var name="navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
                 <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
                 <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
                 <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
@@ -210,11 +210,10 @@
                     <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
                 </var>
             </var>
-
         </var>
 
         <var name="magnifier">
-            <var name="fullscreenzoom">20</var> <!-- Zoom for fullscreen -->
+            <var name="fullscreenzoom">5</var>  <!-- Zoom for fullscreen (integer)-->
             <var name="top"></var> <!-- Top position of magnifier -->
             <var name="left"></var> <!-- Left position of magnifier -->
             <var name="width"></var> <!-- Width of magnifier block -->
@@ -230,28 +229,15 @@
                 </var>
                 <var name="options">
                     <var name="options">
-                        <var name="nav">dots</var>
+                        <var name="navigation">dots</var>
                     </var>
                     <var name="magnifierOpts">
                         <var name="enabled">false</var>
                     </var>
                 </var>
             </var>
-            <var name="desktop">
-                <var name="conditions">
-                    <var name="max-width">768px</var>
-                </var>
-                <var name="options">
-                    <var name="options">
-                        <var name="nav">thumbs</var>
-                    </var>
-                    <var name="magnifierOpts">
-                        <var name="enabled">true</var>
-                    </var>
-                </var>
-            </var>
         </var>
-        <!-- end -->
+        <!-- end. Gallery and magnifier theme settings -->
 
         <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 -->
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 7d25912c636..ce50357dba1 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -183,7 +183,7 @@
     </images>
     <vars module="Magento_Catalog">
 
-        <!-- New gallery and magnifier theme settings -->
+        <!-- Gallery and magnifier theme settings. Start -->
         <var name="gallery">
             <var name="navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
             <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
@@ -233,28 +233,15 @@
                 </var>
                 <var name="options">
                     <var name="options">
-                        <var name="nav">dots</var>
+                        <var name="navigation">dots</var>
                     </var>
                     <var name="magnifierOpts">
                         <var name="enabled">false</var>
                     </var>
                 </var>
             </var>
-            <var name="desktop">
-                <var name="conditions">
-                    <var name="max-width">768px</var>
-                </var>
-                <var name="options">
-                    <var name="options">
-                        <var name="nav">thumbs</var>
-                    </var>
-                    <var name="magnifierOpts">
-                        <var name="enabled">true</var>
-                    </var>
-                </var>
-            </var>
         </var>
-        <!-- end -->
+        <!-- end. Gallery and magnifier theme settings -->
 
         <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 -->
-- 
GitLab


From 5db0d38170679e1b40586ba47ddae5a86e04aa48 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Mon, 5 Oct 2015 17:54:30 +0300
Subject: [PATCH 258/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 .../view/frontend/web/js/configurable.js                    | 6 +++++-
 app/code/Magento/Ui/view/base/web/js/lib/class.js           | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index 444749e6b1e..c2f0e189946 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -235,7 +235,11 @@ define([
                     this._fillSelect(element.nextSetting);
                     this._resetChildren(element.nextSetting);
                 } else {
-                    this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]);
+                    if (!!document.documentMode) {
+                        this.inputSimpleProduct.val(element.options[element.selectedIndex].config.allowedProducts[0]);
+                    } else {
+                        this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]);
+                    }
                 }
             } else {
                 this._resetChildren(element);
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/class.js b/app/code/Magento/Ui/view/base/web/js/lib/class.js
index 12b70b4a45c..d118959bd26 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/class.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/class.js
@@ -40,7 +40,7 @@ define([
             constr = function () {
                 var obj = this;
 
-                if (!obj || !Object.getPrototypeOf(obj) === constr.prototype) {
+                if (!obj || !Object.getPrototypeOf(obj) === constr.prototype || obj === window) {
                     obj = Object.create(constr.prototype);
                 }
 
-- 
GitLab


From 5127018481b5bc73e19c32827855124d5584c909 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 5 Oct 2015 18:29:24 +0300
Subject: [PATCH 259/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix styles due code review
---
 lib/web/mage/gallery/gallery.less | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 78db483bc6c..daab28cddf4 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -196,7 +196,7 @@
     height: 100%;
     position: absolute;
     width: 100%;
-    left:0;
+    left: 0;
 }
 
 .fotorama-transform-disabled {
@@ -268,9 +268,6 @@
 .fotorama-sprite {
     &:extend(.fotorama-print-background);
     background: url('gallery.png') no-repeat;
-    //@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 2dppx) {
-    //  background: url('fotorama@2x.png') no-repeat;
-    //}
 }
 
 .fotorama-print-background {
@@ -668,7 +665,6 @@
 
 .fotorama__arr {
     z-index: @z-index-9;
-
 }
 .fotorama__fullscreen-icon,
 .fotorama__video-close {
@@ -722,7 +718,6 @@
 }
 
 .fotorama__fullscreen-icon {
-    //display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
@@ -732,7 +727,6 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
-        //display: inline-block;
         background-position: (-@size-fotorama-block) 0;
     }
 }
@@ -948,10 +942,10 @@
     &.fotorama__shadows--top:before,
     &.fotorama__shadows--bottom:after {
         left: 0;
-        right:0;
+        right: 0;
         background-size: 100% 1px, 100% 5px ;
-        height:10px;
-        width:auto;
+        height: 10px;
+        width: auto;
     }
     &.fotorama__shadows--left:before {
         .fotorama-shadow-gradient(0, 50%);
@@ -967,13 +961,13 @@
     &.fotorama__shadows--top:before {
         .fotorama-shadow-gradient(50%, 0);
         background-position: 0 0, 0 0;
-        top:0;
+        top: 0;
 
     }
     &.fotorama__shadows--bottom:after {
         .fotorama-shadow-gradient(50%, 100%);
         background-position: 0 100%, 0 100%;
-        bottom:0;
+        bottom: 0;
     }
 }
 
@@ -1213,9 +1207,5 @@ body.fotorama__fullscreen {
     .magnify-fullimage {
         display: inline-block;
     }
-    .fotorama__stage__shaft {
-        //.fotorama__img {
-        //    display: none;
-        //}
-    }
+    .fotorama__stage__shaft {}
 }
-- 
GitLab


From 6dd01813020075e48a182c454a3fc788ab438dd5 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 5 Oct 2015 19:15:16 +0300
Subject: [PATCH 260/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Gallery loader
---
 .../frontend/templates/product/view/gallery.phtml |  8 +++++++-
 lib/web/mage/gallery/gallery.html                 |  4 ++--
 lib/web/mage/gallery/gallery.js                   | 15 +++++++++++----
 lib/web/mage/gallery/gallery.less                 | 10 ++++++++++
 4 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 40afc9e365c..413f1cfe921 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -12,7 +12,13 @@
  * @var $block \Magento\Catalog\Block\Product\View\Gallery
  */
 ?>
-<div class="gallery-placeholder" data-gallery-role="gallery-placeholder"></div>
+<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
+    <div data-role="loader" class="loading-mask">
+        <div class="loader">
+            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-2.gif'); ?>" alt="Loading...">
+        </div>
+    </div>
+</div>
 <script type="text/x-magento-init">
     {
         "[data-gallery-role=gallery-placeholder]": {
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 4f4c92b7e54..34d26c812da 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -24,13 +24,13 @@
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
                 <div class="fotorama__fullscreen-icon" data-gallery-role="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
-                <div class="fotorama__thumb__arr--left" tabindex="0" role="button" aria-label="Previos">
+                <div class="fotorama__thumb__arr--left" tabindex="0" role="button" aria-label="<%= previous %>">
                     <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
                 </div>
                 <div class="fotorama__nav__shaft">
                     <div class="fotorama__thumb-border"></div>
                 </div>
-                <div class="fotorama__thumb__arr--right" tabindex="0" role="button" aria-label="Next">
+                <div class="fotorama__thumb__arr--right" tabindex="0" role="button" aria-label="<%= next %>">
                     <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
                 </div>
             </div>
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 86851cb6105..8eed70fc449 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -7,9 +7,11 @@ define([
     'fotorama/fotorama',
     'underscore',
     'matchMedia',
+    'mage/template',
     'text!mage/gallery/gallery.html',
-    'Magento_Ui/js/lib/class'
-], function ($, fotorama, _, mediaCheck, template, Class) {
+    'Magento_Ui/js/lib/class',
+    'mage/translate'
+], function ($, fotorama, _, mediaCheck, template, galleryTpl, Class, $t) {
     'use strict';
 
     /**
@@ -189,7 +191,11 @@ define([
         initGallery: function () {
             var breakpoints = {},
                 settings = this.settings,
-                config = this.config;
+                config = this.config,
+                tpl = template(galleryTpl, {
+                    next: $t('Next'),
+                    previous: $t('Previous')
+                });
 
             if (settings.breakpoints) {
                 _.each(_.values(settings.breakpoints), function (breakpoint) {
@@ -213,7 +219,8 @@ define([
             config.click = false;
             config.breakpoints = null;
             settings.currentConfig = config;
-            settings.$element.html(template);
+            settings.$element.html(tpl);
+            settings.$element.removeClass('_block-content-loading');
             settings.$elementF = $(settings.$element.children()[0]);
             settings.$elementF.fotorama(config);
             settings.fotoramaApi = settings.$elementF.data('fotorama');
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 78db483bc6c..22c702b637b 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -1208,6 +1208,16 @@
     display: none;
 }
 
+.gallery-placeholder {
+    .loader img {
+        position: absolute;
+    }
+    .loading-mask {
+        padding: 0 0 50%;
+        position: absolute;
+    }
+}
+
 body.fotorama__fullscreen {
     overflow-y: hidden;
     .magnify-fullimage {
-- 
GitLab


From e41ba9e8dff701603fe4339e4fffce47073736b5 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Mon, 5 Oct 2015 19:17:06 +0300
Subject: [PATCH 261/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix slide long press bug
---
 lib/web/fotorama/fotorama.js | 32 +++++++++++++++++++++++++++++---
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index c1fe1fcf217..78f5b81bbe7 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -2300,6 +2300,7 @@ fotoramaVersion = '4.6.4';
             var keydownCommon = 'keydown.' + _fotoramaClass,
                 localStamp = _fotoramaClass + stamp,
                 keydownLocal = 'keydown.' + localStamp,
+                keyupLocal = 'keyup.' + localStamp,
                 resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp;
 
             if (FLAG) {
@@ -2316,12 +2317,16 @@ fotoramaVersion = '4.6.4';
                                 catched = true;
                                 that.cancelFullScreen();
                             } else if ((e.shiftKey && e.keyCode === 32 && allowKey('space')) || (e.keyCode === 37 && allowKey('left')) || (e.keyCode === 38 && allowKey('up'))) {
+                                that.longPress.progress();
                                 index = '<';
                             } else if ((e.keyCode === 32 && allowKey('space')) || (e.keyCode === 39 && allowKey('right')) || (e.keyCode === 40 && allowKey('down'))) {
+                                that.longPress.progress();
                                 index = '>';
                             } else if (e.keyCode === 36 && allowKey('home')) {
+                                that.longPress.progress();
                                 index = '<<';
                             } else if (e.keyCode === 35 && allowKey('end')) {
+                                that.longPress.progress();
                                 index = '>>';
                             }
                         }
@@ -2330,6 +2335,13 @@ fotoramaVersion = '4.6.4';
                         index && that.show({index: index, slow: e.altKey, user: true});
                     });
 
+                if (FLAG) {
+                    $DOCUMENT
+                        .on(keyupLocal, function (e) {
+                            that.longPress.end();
+                        });
+                }
+
                 if (!that.index) {
                     $DOCUMENT
                         .off(keydownCommon)
@@ -3385,7 +3397,7 @@ fotoramaVersion = '4.6.4';
                 changeAutoplay();
             };
 
-            if (!o_fade) {
+            if (!o_fade || that.longPress.inProgress) {
                 slide($stageShaft, {
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
@@ -3416,8 +3428,7 @@ fotoramaVersion = '4.6.4';
                     guessIndex: typeof options.coo !== 'undefined' ? guessIndex : activeIndex,
                     keep: silent
                 });
-
-                if (o_navThumbs) slideThumbBorder(time);
+                if (o_navThumbs) slideThumbBorder(that.longPress.inProgress  ? that.longPress.calcThumbSlideTime(time) : time);
             }
 
             showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
@@ -3636,6 +3647,21 @@ fotoramaVersion = '4.6.4';
             }
         }
 
+        that.longPress = {
+            progress: function(){
+                this.inProgress = this.count > 3;
+                this.count++;
+            },
+            end: function(){
+                this.inProgress = false;
+                this.count = 0;
+            },
+            count: 0,
+            calcThumbSlideTime: function(msec){
+                return msec/50;
+            }
+        };
+
         that.destroy = function () {
             that.cancelFullScreen();
             that.stopAutoplay();
-- 
GitLab


From 4e165ef57009bae9bdeb271b00d219f5b072a557 Mon Sep 17 00:00:00 2001
From: Uladzislau Harbachou <uladzislau_harbachou@epam.com>
Date: Tue, 6 Oct 2015 03:08:11 +0300
Subject: [PATCH 262/420] JS-241: Various rendering bugs with Fullscreen
 Gallery

-Fixed zoomIn/Out in fullscreen
-replaced original size
-fixed zoom step
---
 lib/web/mage/gallery/gallery.html |   6 +-
 lib/web/mage/gallery/gallery.less |  13 +-
 lib/web/magnifier/magnifier.js    | 330 ------------------------------
 lib/web/magnifier/magnify.js      | 253 ++++++++++++++++++++++-
 4 files changed, 259 insertions(+), 343 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 4f4c92b7e54..7a4565e7b57 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -7,7 +7,7 @@
 <div class="fotorama-item" data-gallery-role="gallery" tabindex="0">
     <div data-gallery-role="fotorama__focusable-start" tabindex="0"></div>
     <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows">
-        <div class="fotorama__stage">
+        <div class="fotorama__stage" data-fotorama-stage="fotorama__stage">
             <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos">
                 <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
@@ -18,8 +18,8 @@
                 <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
-            <div class="fotorama__zoom-in"></div>
-            <div class="fotorama__zoom-out"></div>
+            <div class="fotorama__zoom-in" data-zoom-in="fotorama__zoom-in"></div>
+            <div class="fotorama__zoom-out" data-zoom-out="fotorama__zoom-out"></div>
         </div>
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 2034fc98abb..8aefc6d9e9d 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -721,7 +721,7 @@
 }
 
 .fotorama__fullscreen-icon {
-    //display: none;
+    display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
@@ -731,7 +731,7 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
-        //display: inline-block;
+        display: inline-block;
         background-position: (-@size-fotorama-block) 0;
     }
 }
@@ -1212,9 +1212,12 @@ body.fotorama__fullscreen {
     .magnify-fullimage {
         display: inline-block;
     }
+    .magnify-lens {
+        display: none !important;
+    }
     .fotorama__stage__shaft {
-        //.fotorama__img {
-        //    display: none;
-        //}
+        .fotorama__img {
+            display: none;
+        }
     }
 }
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index cdc3b13c2b7..232579bb4f4 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -558,150 +558,6 @@
             }
         }
 
-        function toggleZoomButtons($image) {
-            var path = $image.attr("src"),
-                imgSize;
-            if (path) {
-                imgSize = getImageSize(path);
-                if ((imgSize.rh > $image.parent().height()) || (imgSize.rw > $image.parent().width())) {
-                    $('.fotorama__zoom-in').show();
-                    $('.fotorama__zoom-out').show();
-                } else {
-                    $('.fotorama__zoom-in').hide();
-                    $('.fotorama__zoom-out').hide();
-                }
-            }
-        }
-
-        function magnifierFullscreen () {
-            var isDragActive = false,
-                startX,
-                startY,
-                imagePosX,
-                imagePosY,
-                touch,
-                isTouchEnabled = 'ontouchstart' in document.documentElement;
-
-            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
-                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
-                    $imageContainer = $preview.parent(),
-                    gallery = $('[data-gallery-role="gallery"]');
-
-                gallery.on('fotorama:fullscreenexit', function () {
-                    $thumb.css({
-                        'top': '',
-                        'left': ''
-                    });
-                });
-
-                if (gallery.data('fotorama').fullScreen) {
-                    //if (!$imageContainer.find('.' + MagnifyCls.magnifyFull).length) {
-                    //    $imageContainer.append('<img class="' + MagnifyCls.magnifyFull + '" src ="' + options.full + '"/>');
-                    //}
-                    toggleZoomButtons($image);
-
-                    $('.fotorama__stage__frame .fotorama__img').each(function () {
-                        var path = $(this).attr("src"),
-                            imgSize;
-                        if (path) {
-                            imgSize = getImageSize(path);
-
-                            if ((imgSize.rh > $(this).parent().height()) || (imgSize.rw > $(this).parent().width())) {
-
-                                if (imgSize.rh / imgSize.rw < $(this).parent().height() / $(this).parent().width()) {
-                                    $(this).width($(this).parent().width());
-                                    $(this).height('auto');
-                                } else {
-                                    $(this).height($(this).parent().height());
-                                    $(this).width('auto');
-                                }
-
-                                $(this).css({
-                                    'top': '',
-                                    'left': ''
-                                });
-                            }
-                        }
-                    });
-                }
-
-                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
-                    if (gallery.data('fotorama').fullScreen) {
-                        e.preventDefault();
-
-                        $image.css('cursor', 'move');
-                        imagePosY = $image.offset().top;
-                        imagePosX = $image.offset().left;
-
-                        if (isTouchEnabled) {
-                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
-                            e.clientX = touch.pageX;
-                            e.clientY = touch.pageY;
-                        }
-                        startX = e.clientX || e.originalEvent.clientX;
-                        startY = e.clientY || e.originalEvent.clientY;
-                        isDragActive = true;
-                    }
-                });
-
-
-
-                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
-                    if (gallery.data('fotorama').fullScreen && isDragActive) {
-
-                        var top,
-                            left,
-                            startOffset = $image.offset(),
-                            clientX = e.clientX || e.originalEvent.clientX,
-                            clientY = e.clientY || e.originalEvent.clientY;
-
-
-                        e.preventDefault();
-
-                        if (isTouchEnabled) {
-                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
-                            e.clientX = touch.pageX;
-                            e.clientY = touch.pageY;
-                        }
-                        top = +imagePosY + (clientY - startY);
-                        left = +imagePosX + (clientX - startX);
-
-                        if ($image.height() > $imageContainer.height()) {
-
-                            if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
-                                top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
-                            } else {
-                                top = ($imageContainer.offset().top < top) ? 0 : top;
-                            }
-                            $image.offset({
-                                'top': top
-                            });
-                        }
-
-                        if ($image.width() > $imageContainer.width()) {
-
-                            if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
-                                left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
-                            } else {
-                                left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
-                            }
-                            $image.offset({
-                                'left': left
-                            });
-                        }
-                    }
-                });
-
-                $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
-                    if (gallery.data('fotorama').fullScreen) {
-                        isDragActive = false;
-                        $image.css('cursor', 'pointer');
-                    }
-                });
-            });
-        }
-
         function onScroll() {
 
             if (curThumb !== null) {
@@ -709,200 +565,14 @@
             }
         }
 
-        if ($('.fotorama-item').data('fotorama').fullScreen) {
-            $('.fotorama__stage__frame .fotorama__img').each(function () {
-                var image = new Image();
-                image.src = $(this).attr("src");
-
-                if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
-
-                    if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
-                        $(this).width($(this).parent().width());
-                        $(this).height('');
-                    } else {
-                        $(this).height($(this).parent().height());
-                        $(this).width('');
-                    }
-                }
-            });
-        }
 
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
-
-            if ($('.fotorama-item').data('fotorama').fullScreen) {
-
-                $('.fotorama__stage__frame .fotorama__img').each(function () {
-                    var image = new Image();
-                    image.src = $(this).attr("src");
-
-                    if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
-
-                        if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
-                            $(this).width($(this).parent().width());
-                            $(this).height('');
-                        } else {
-                            $(this).height($(this).parent().height());
-                            $(this).width('');
-                        }
-                    }
-                });
-
-                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] img'));
-            }
-
-
             _init($box, gOptions);
-
         });
 
-        function checkFullscreenImagePosition() {
-            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
-
-                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
-                    $imageContainer = $preview.parent(),
-                    gallery = $('[data-gallery-role="gallery"]'),
-                    top, left;
-
-                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
-                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
-                } else {
-                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
-                }
-
-                if (top !== undefined) {
-                    $image.css('top', top);
-                }
-
-                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
-                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
-                } else {
-                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
-                }
-
-                if (left !== undefined) {
-                    $image.css('left', left);
-                }
-
-                if ($image.width() < $imageContainer.width()) {
-                    $image.css('left', '');
-                }
-
-                if ($image.height() < $imageContainer.height()) {
-                    $image.css('top', '');
-                }
-            }
-        }
-
-        function zoomIn(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                gallery = $('[data-gallery-role="gallery"]'),
-                imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() + options.inc);
-            if(e) {
-                e.preventDefault();
-            }
-
-
-            if (setedResult > imgOriginalSize.rw) {
-                setedResult = imgOriginalSize.rw;
-            }
-            $image.css({'width': setedResult, height: 'auto'});
-            checkFullscreenImagePosition();
-        }
-
-        function zoomOut(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                gallery = $('[data-gallery-role="gallery"]'),
-                imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() - options.inc);
-            if (e) {
-                e.preventDefault();
-            }
-
-            if ($image.width() > $image.height() && $image.width() <= $image.parent().width()) {
-                return
-            }
-            if ($image.width() <= $image.height() && $image.height() <= $image.parent().height()) {
-                return
-            }
-
-            $image.css({'width': setedResult, height: 'auto'});
-            checkFullscreenImagePosition();
-        }
-
-        /**
-         * Return width and height of original image
-         * @param src path for original image
-         * @returns {{rw: number, rh: number}}
-         */
-        function getImageSize(src) {
-            var img = new Image(),
-                imgSize = {
-                    rw: 0,
-                    rh: 0
-                };
-            img.src = src;
-            imgSize.rw = img.width;
-            imgSize.rh = img.height;
-            return imgSize;
-        }
-
-
-        function setEventOnce() {
-            $('.fotorama__zoom-in')
-                .off('click', zoomIn)
-                .on('click', zoomIn);
-            $('.fotorama__zoom-out')
-                .off('click', zoomOut)
-                .on('click', zoomOut);
-            $('.fotorama__zoom-in')
-                .off('touchstart', zoomIn)
-                .on('touchstart', zoomIn);
-            $('.fotorama__zoom-out')
-                .off('touchstart', zoomOut)
-                .on('touchstart', zoomOut);
-        }
-
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
-        setEventOnce();
-        magnifierFullscreen();
-
-        $('.fotorama-item').on('fotorama:load', function () {
-            if (document.querySelector('.fotorama__stage').addEventListener) {
-                if ('onwheel' in document) {
-                    // IE9+, FF17+, Ch31+
-                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheel);
-                } else if ('onmousewheel' in document) {
-
-                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheel);
-                } else {
-                    // Firefox < 17
-                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheel);
-                }
-            } else { // IE8-
-                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheel);
-            }
-
-            function onWheel(e) {
-                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
-                    e = e || window.event;
-
-
-                    var delta = e.deltaY || e.detail || e.wheelDelta;
-
-                    if (delta > 0) {
-                        zoomOut(e);
-                    } else {
-                        zoomIn(e);
-                    }
-
-                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
-                }
-            }
-        })
 
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 22b50c0e8d5..db3662a37da 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -24,6 +24,226 @@ define([
             });
         }
 
+        /**
+         * Return width and height of original image
+         * @param src path for original image
+         * @returns {{rw: number, rh: number}}
+         */
+        function getImageSize(src) {
+            var img = new Image(),
+                imgSize = {
+                    rw: 0,
+                    rh: 0
+                };
+            img.src = src;
+            imgSize.rw = img.width;
+            imgSize.rh = img.height;
+            return imgSize;
+        }
+
+        function zoomIn(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                gallery = $(gallerySelector),
+                imgMaxSize,
+                setedResult;
+            e.preventDefault();
+            if ($image.length && $image[0].src) {
+                imgMaxSize = getImageSize($image[0].src);
+                setedResult = Math.round($image.width() + 10);
+                $image.css({'width': setedResult, height: 'auto'});
+            }
+            checkFullscreenImagePosition();
+        }
+
+        function zoomOut(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                gallery = $(gallerySelector),
+                imgMaxSize,
+                setedResult;
+            e.preventDefault();
+            if ($image.length && $image[0].src) {
+                imgMaxSize = getImageSize($image[0].src);
+                setedResult = Math.round($image.width() - 10);
+                $image.css({'width': setedResult, height: 'auto'});
+            }
+            checkFullscreenImagePosition();
+        }
+
+        /**
+         * Bind event on scroll on active item in fotorama
+         * @param e
+         * @param fotorama - object of fotorama
+         */
+        function mousewheel(e, fotorama, element) {
+            var $fotoramaStage = $(element).find('[data-fotorama-stage="fotorama__stage"]'),
+                fotoramaStage = $fotoramaStage.get(0);
+            if (fotoramaStage.addEventListener) {
+                if ('onwheel' in document) {
+                    fotoramaStage.addEventListener("wheel", onWheel);
+                } else if ('onmousewheel' in document) {
+                    fotoramaStage.addEventListener("mousewheel", onWheel);
+                } else {
+                    fotoramaStage.addEventListener("MozMousePixelScroll", onWheel);
+                }
+            }
+
+            function onWheel(e) {
+                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+                    e = e || window.event;
+                    var delta = e.deltaY || e.detail || e.wheelDelta;
+                    if (delta > 0) {
+                        zoomOut(e);
+                    } else {
+                        zoomIn(e);
+                    }
+
+                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
+                }
+            }
+
+        }
+
+        function checkFullscreenImagePosition() {
+            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+
+                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $imageContainer = $preview.parent(),
+                    gallery = $('[data-gallery-role="gallery"]'),
+                    top, left;
+
+                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
+                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                } else {
+                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
+                }
+
+                if (top !== undefined) {
+                    $image.css('top', top);
+                }
+
+                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
+                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                } else {
+                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
+                }
+
+                if (left !== undefined) {
+                    $image.css('left', left);
+                }
+
+                if ($image.width() < $imageContainer.width()) {
+                    $image.css('left', '');
+                }
+
+                if ($image.height() < $imageContainer.height()) {
+                    $image.css('top', '');
+                }
+            }
+        }
+
+        /**
+         * Metod which makes draggable picture. Also work
+         * on tauch devices.
+         * @param e - event object
+         * @param fotorama - fotorama object
+         */
+        function magnifierFullscreen (e, fotorama) {
+            var isDragActive = false,
+                startX,
+                startY,
+                imagePosX,
+                imagePosY,
+                touch,
+                isTouchEnabled = 'ontouchstart' in document.documentElement;
+
+            var $gallery = $('[data-gallery-role="gallery"]'),
+                $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img', $gallery),
+                $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage', $gallery),
+                $imageContainer = $preview.parent(),
+                gallery = $gallery.data('fotorama');
+            console.log("asdasdad");
+            if (gallery.fullScreen) {
+                if (!$imageContainer.find('.magnify-fullimage').length) {
+                    $imageContainer.append('<img class="magnify-fullimage" src ="' + gallery.options.data[gallery.activeIndex].original + '"/>');
+                }
+            }
+
+            $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
+                if (gallery.fullScreen) {
+                    e.preventDefault();
+
+                    $image.css('cursor', 'move');
+                    imagePosY = $image.offset().top;
+                    imagePosX = $image.offset().left;
+
+                    if (isTouchEnabled) {
+                        touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                        e.clientX = touch.pageX;
+                        e.clientY = touch.pageY;
+                    }
+                    startX = e.clientX || e.originalEvent.clientX;
+                    startY = e.clientY || e.originalEvent.clientY;
+                    isDragActive = true;
+                }
+            });
+
+
+
+            $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
+                if (gallery.fullScreen && isDragActive) {
+
+                    var top,
+                        left,
+                        clientX = e.clientX || e.originalEvent.clientX,
+                        clientY = e.clientY || e.originalEvent.clientY;
+
+
+                    e.preventDefault();
+
+                    if (isTouchEnabled) {
+                        touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                        e.clientX = touch.pageX;
+                        e.clientY = touch.pageY;
+                    }
+                    top = +imagePosY + (clientY - startY);
+                    left = +imagePosX + (clientX - startX);
+
+                    if ($image.height() > $imageContainer.height()) {
+
+                        if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
+                            top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                        } else {
+                            top = ($imageContainer.offset().top < top) ? 0 : top;
+                        }
+                        $image.offset({
+                            'top': top
+                        });
+                    }
+
+                    if ($image.width() > $imageContainer.width()) {
+
+                        if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                            left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                        } else {
+                            left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                        }
+                        $image.offset({
+                            'left': left
+                        });
+                    }
+                }
+            });
+
+            $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
+                if (gallery.fullScreen) {
+                    isDragActive = false;
+                    $image.css('cursor', 'pointer');
+                }
+            });
+        }
+
+
         /**
          * Hides magnifier preview and zoom blocks.
          */
@@ -78,16 +298,39 @@ define([
             }
         });
 
-        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
+        $(element).on('fotorama:load fotorama:showend fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
-        $(element).on('gallery:loaded', function () {
-            $(element).find(gallerySelector).on('fotorama:show fotorama:fullscreenenter ', function () {
-                hideMagnifier();
-            });
+        $(element).on('gallery:loaded', function (e, fotorama) {
+            $(element).find(gallerySelector)
+                .on('fotorama:ready', function (e, fotorama) {
+                    var $zoomIn = $('[data-zoom-in="fotorama__zoom-in"]'),
+                        $zoomOut = $('[data-zoom-out="fotorama__zoom-out"]');
+                    if ( !$zoomIn.hasClass('zoom-in-loaded') ) {
+                        $zoomIn.on('click touchstart', zoomIn);
+                        $zoomIn.addClass('zoom-in-loaded');
+                    }
+                    if ( !$zoomOut.hasClass('zoom-out-loaded') ) {
+                        $zoomOut.on('click touchstart', zoomOut);
+                        $zoomOut.addClass('zoom-out-loaded');
+                    }
+
+                })
+                .on('fotorama:fullscreenenter', function (e, fotorama) {
+                    magnifierFullscreen(e, fotorama);
+                    mousewheel(e, fotorama, element);
+                    fotorama.setOptions({swipe: false});
+                })
+                .on('fotorama:load', function (e, fotorama) {
+                    magnifierFullscreen(e, fotorama);
+                    mousewheel(e, fotorama, element);
+                })
+                .on('fotorama:show fotorama:showend', function (e, fotorama) {
+                    magnifierFullscreen(e, fotorama);
+                });
         });
 
         return config;
-- 
GitLab


From e0a715ab915cdbdfdcd07c82e365b284d88f9dcc Mon Sep 17 00:00:00 2001
From: Uladzislau Harbachou <uladzislau_harbachou@epam.com>
Date: Tue, 6 Oct 2015 09:42:40 +0300
Subject: [PATCH 263/420] JS-258: Click on preview must be opened fullscreen
 mode

-Fix preview on scroll
-Added options to control way to open fullscreen
---
 lib/web/fotorama/fotorama.js      | 16 +++++++++++++---
 lib/web/mage/gallery/gallery.less |  7 ++++++-
 lib/web/magnifier/magnify.js      | 19 +++++++++++--------
 3 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index c1fe1fcf217..8b9cd658222 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -61,6 +61,7 @@ fotoramaVersion = '4.6.4';
         hiddenClass = _fotoramaClass + '--hidden',
 
         fullscreenClass = _fotoramaClass + '--fullscreen',
+        fullscreenPreview = fullscreenClass + '-icons',
         fullscreenIconClass = _fotoramaClass + '__fullscreen-icon',
 
         errorClass = _fotoramaClass + '__error',
@@ -1016,7 +1017,13 @@ fotoramaVersion = '4.6.4';
             /**
              * Set type of navigation. Can be thumbs or slides
              */
-            navtype: 'thumbs'
+            navtype: 'thumbs',
+
+            /**
+             * If true, fullscreen will be opened on preview click
+             * If false, will be shown fullscreen icons.
+             */
+            fullpreview: true
 
         },
 
@@ -2418,7 +2425,7 @@ fotoramaVersion = '4.6.4';
          * */
         function setOptions() {
             if (!opts.nav || opts.nav === 'dots') {
-                opts.navdir = 'horizontal'
+                opts.navdir = 'horizontal';
             }
 
             that.options = opts = optionsToLowerCase(opts);
@@ -2457,6 +2464,7 @@ fotoramaVersion = '4.6.4';
             arrsUpdate();
             stageWheelUpdate();
             thumbArrUpdate();
+            $fotorama.toggleClass(fullscreenPreview, opts.fullpreview);
             if (opts.autoplay) setAutoplayInterval(opts.autoplay);
 
             o_thumbSide = numberFromMeasure(opts.thumbwidth) || THUMB_SIZE;
@@ -3786,7 +3794,9 @@ fotoramaVersion = '4.6.4';
             onTouchEnd: onTouchEnd,
             onEnd: function (result) {
                 setShadow($stage);
-
+                if (!result.moved && !that.fullScreen && opts.fullpreview) {
+                    that.requestFullScreen();
+                }
 
                 var toggleControlsFLAG = (MS_POINTER && !hoverFLAG || result.touch) && opts.arrows && opts.arrows !== 'always';
 
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 9629be938ec..325548988be 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -717,8 +717,13 @@
     z-index: @z-index-10;
 }
 
+.fotorama--fullscreen-icons {
+    .fotorama__fullscreen-icon {
+        display: none;
+    }
+}
+
 .fotorama__fullscreen-icon {
-    display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index db3662a37da..775e7187435 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -77,13 +77,17 @@ define([
         function mousewheel(e, fotorama, element) {
             var $fotoramaStage = $(element).find('[data-fotorama-stage="fotorama__stage"]'),
                 fotoramaStage = $fotoramaStage.get(0);
-            if (fotoramaStage.addEventListener) {
-                if ('onwheel' in document) {
-                    fotoramaStage.addEventListener("wheel", onWheel);
-                } else if ('onmousewheel' in document) {
-                    fotoramaStage.addEventListener("mousewheel", onWheel);
-                } else {
-                    fotoramaStage.addEventListener("MozMousePixelScroll", onWheel);
+
+            if (!$fotoramaStage.hasClass('magnify-wheel-loaded')) {
+                if (fotoramaStage && fotoramaStage.addEventListener) {
+                    if ('onwheel' in document) {
+                        fotoramaStage.addEventListener("wheel", onWheel);
+                    } else if ('onmousewheel' in document) {
+                        fotoramaStage.addEventListener("mousewheel", onWheel);
+                    } else {
+                        fotoramaStage.addEventListener("MozMousePixelScroll", onWheel);
+                    }
+                    $fotoramaStage.addClass('magnify-wheel-loaded');
                 }
             }
 
@@ -162,7 +166,6 @@ define([
                 $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage', $gallery),
                 $imageContainer = $preview.parent(),
                 gallery = $gallery.data('fotorama');
-            console.log("asdasdad");
             if (gallery.fullScreen) {
                 if (!$imageContainer.find('.magnify-fullimage').length) {
                     $imageContainer.append('<img class="magnify-fullimage" src ="' + gallery.options.data[gallery.activeIndex].original + '"/>');
-- 
GitLab


From 47cd88ee4c8744bef86ae3a327cbe565737eded0 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Tue, 6 Oct 2015 09:48:57 +0300
Subject: [PATCH 264/420] MAGETWO-43593: PR

- fix FAT
---
 .../Test/Block/Adminhtml/Product/Grid.php     | 20 +++++++++----------
 .../Checkout/Test/Block/Cart/Shipping.xml     |  1 -
 .../Checkout/Test/Block/Onepage/Shipping.xml  |  5 ++---
 3 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
index 408336d433e..c1bb7aeeaad 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
@@ -27,37 +27,37 @@ class Grid extends DataGrid
      */
     protected $filters = [
         'name' => [
-            'selector' => '[name="filters[name]"]',
+            'selector' => '[name="name"]',
         ],
         'sku' => [
-            'selector' => '[name="filters[sku]"]',
+            'selector' => '[name="sku"]',
         ],
         'type' => [
-            'selector' => '[name="filters[type_id]"]',
+            'selector' => '[name="type_id"]',
             'input' => 'select',
         ],
         'price_from' => [
-            'selector' => '[name="filters[price][from]"]',
+            'selector' => '[name="price[from]"]',
         ],
         'price_to' => [
-            'selector' => '[name="filters[price][to]"]',
+            'selector' => '[name="price[to]"]',
         ],
         'qty_from' => [
-            'selector' => '[name="filters[qty][from]"]',
+            'selector' => '[name="qty[from]"]',
         ],
         'qty_to' => [
-            'selector' => '[name="filters[qty][to]"]',
+            'selector' => '[name="qty[to]"]',
         ],
         'visibility' => [
-            'selector' => '[name="filters[visibility]"]',
+            'selector' => '[name="visibility"]',
             'input' => 'select',
         ],
         'status' => [
-            'selector' => '[name="filters[status]"]',
+            'selector' => '[name="status"]',
             'input' => 'select',
         ],
         'set_name' => [
-            'selector' => '[name="filters[attribute_set_id]"]',
+            'selector' => '[name="attribute_set_id"]',
             'input' => 'select',
         ],
     ];
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml
index b2b6b2290fb..6056844a064 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml
@@ -6,7 +6,6 @@
  */
 -->
 <mapping strict="0">
-    <wrapper>shippingAddress</wrapper>
     <fields>
         <country_id>
             <input>select</input>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
index 1b99093b23e..43064a460be 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
@@ -6,7 +6,6 @@
  */
 -->
 <mapping strict="0">
-    <wrapper>shippingAddress</wrapper>
     <fields>
         <email>
             <selector>#customer-email</selector>
@@ -15,7 +14,7 @@
         <lastname />
         <company />
         <street>
-            <selector>[name='shippingAddress[street][0]']</selector>
+            <selector>[name='street.0']</selector>
         </street>
         <city />
         <region_id>
@@ -26,7 +25,7 @@
         </country_id>
         <telephone />
         <postcode>
-            <selector>[name='shippingAddress[postcode]']</selector>
+            <selector>[name='postcode']</selector>
         </postcode>
     </fields>
 </mapping>
-- 
GitLab


From a5ce4c8b7e142206d03a4d5ca8b172a81fefa2ff Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Tue, 6 Oct 2015 09:52:47 +0300
Subject: [PATCH 265/420] MAGETWO-43593: PR

- fix FAT
---
 .../app/Magento/Checkout/Test/Block/Onepage/Shipping.xml      | 4 ++--
 .../Test/Block/Adminhtml/Product/AttributesGrid.php           | 2 +-
 .../app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php     | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
index 43064a460be..51f6b61287f 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
@@ -14,7 +14,7 @@
         <lastname />
         <company />
         <street>
-            <selector>[name='street.0']</selector>
+            <selector>[name='shippingAddress.street.0']</selector>
         </street>
         <city />
         <region_id>
@@ -25,7 +25,7 @@
         </country_id>
         <telephone />
         <postcode>
-            <selector>[name='postcode']</selector>
+            <selector>[name='shippingAddress.postcode']</selector>
         </postcode>
     </fields>
 </mapping>
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php
index 523ff4c9c37..78e58b4926c 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php
@@ -20,7 +20,7 @@ class AttributesGrid extends DataGrid
      */
     protected $filters = [
         'frontend_label' => [
-            'selector' => '[name="filters[frontend_label]"]',
+            'selector' => '[name="frontend_label"]',
         ],
     ];
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
index 8edbfb720f7..6fa5b0622f0 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
@@ -21,7 +21,7 @@ class Grid extends DataGrid
      */
     protected $filters = [
         'id' => [
-            'selector' => '[name="filters[increment_id]"]',
+            'selector' => '[name="increment_id"]',
         ],
         'status' => [
             'selector' => '[name="filters[status]"]',
-- 
GitLab


From b1b0253479c93cce63f86edb76321e7f9cdd4390 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Tue, 6 Oct 2015 11:00:10 +0300
Subject: [PATCH 266/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix slide long press bug
---
 lib/web/fotorama/fotorama.js | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 78f5b81bbe7..edf3ca3138e 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -3423,7 +3423,7 @@ fotoramaVersion = '4.6.4';
 
                 var guessIndex = limitIndex(activeIndex + minMaxLimit(dirtyIndex - lastActiveIndex, -1, 1));
                 slideNavShaft({
-                    time: time,
+                    time: that.longPress.inProgress ?  that.longPress.calcThumbSlideTime(time) : time,
                     coo: guessIndex !== activeIndex && options.coo,
                     guessIndex: typeof options.coo !== 'undefined' ? guessIndex : activeIndex,
                     keep: silent
@@ -3648,15 +3648,18 @@ fotoramaVersion = '4.6.4';
         }
 
         that.longPress = {
+            threshold: 3,
+            count: 0,
             progress: function(){
-                this.inProgress = this.count > 3;
-                this.count++;
+                if (!this.inProgress) {
+                    this.count++;
+                    this.inProgress = this.count > this.threshold;
+                    }
             },
             end: function(){
-                this.inProgress = false;
                 this.count = 0;
+                this.inProgress = false;
             },
-            count: 0,
             calcThumbSlideTime: function(msec){
                 return msec/50;
             }
-- 
GitLab


From a11651cbe5fcdd882a56b0c43c11fb0ff72e841f Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Tue, 6 Oct 2015 11:29:46 +0300
Subject: [PATCH 267/420] MAGETWO-43593: PR

- fix FAT
---
 .../Cms/Test/Block/Adminhtml/Page/Grid.php    | 24 +++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php
index 76415b59ed4..85622323053 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php
@@ -29,43 +29,43 @@ class Grid extends DataGrid
      */
     protected $filters = [
         'page_id_from' => [
-            'selector' => '[name="filters[page_id][from]"]',
+            'selector' => '[name="page_id[from]"]',
         ],
         'page_id_to' => [
-            'selector' => '[name="filters[page_id][to]"]',
+            'selector' => '[name="page_id[to]"]',
         ],
         'title' => [
-            'selector' => '[name="filters[title]"]',
+            'selector' => '[name="title"]',
         ],
         'identifier' => [
-            'selector' => '[name="filters[identifier]"]',
+            'selector' => '[name="identifier"]',
         ],
         'page_layout' => [
-            'selector' => '[name="filters[page_layout]"]',
+            'selector' => '[name="page_layout"]',
             'input' => 'select',
         ],
         'store_id' => [
-            'selector' => '[name="filters[store_id]"]',
+            'selector' => '[name="store_id"]',
             'input' => 'selectstore'
         ],
         'is_active' => [
-            'selector' => '[name="filters[is_active]"]',
+            'selector' => '[name="is_active"]',
             'input' => 'select',
         ],
         'creation_time_from' => [
-            'selector' => '[name="filters[creation_time][from]"]',
+            'selector' => '[name="creation_time[from]"]',
         ],
         'creation_time_to' => [
-            'selector' => '[name="filters[creation_time][to]"]',
+            'selector' => '[name="creation_time[to]"]',
         ],
         'update_time_from' => [
-            'selector' => '[name="filters[update_time][from]"]',
+            'selector' => '[name="update_time[from]"]',
         ],
         'update_time_to' => [
-            'selector' => '[name="filters[update_time][to]"]',
+            'selector' => '[name="update_time[to]"]',
         ],
         'under_version_control' => [
-            'selector' => '[name="filters[under_version_control]"]',
+            'selector' => '[name="under_version_control"]',
         ],
     ];
 
-- 
GitLab


From 6d6a6784fa454f55715cbf0674fa5e72b33c05ca Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Tue, 6 Oct 2015 11:34:17 +0300
Subject: [PATCH 268/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix slide long press bug
---
 lib/web/fotorama/fotorama.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 2d191beca87..2ed30f8987a 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -3405,7 +3405,7 @@ fotoramaVersion = '4.6.4';
                 changeAutoplay();
             };
 
-            if (!o_fade || that.longPress.inProgress) {
+            if (!o_fade) {
                 slide($stageShaft, {
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
@@ -3669,7 +3669,7 @@ fotoramaVersion = '4.6.4';
                 this.inProgress = false;
             },
             calcThumbSlideTime: function(msec){
-                return msec/50;
+                return msec/10;
             }
         };
 
-- 
GitLab


From 4e178405b08aa2495a019d86444ae8251183daa9 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 6 Oct 2015 11:53:39 +0300
Subject: [PATCH 269/420] Revert "JS-258: Click on preview must be opened
 fullscreen mode"

This reverts commit e0a715ab915cdbdfdcd07c82e365b284d88f9dcc.
---
 lib/web/fotorama/fotorama.js      | 16 +++-------------
 lib/web/mage/gallery/gallery.less |  7 +------
 lib/web/magnifier/magnify.js      | 19 ++++++++-----------
 3 files changed, 12 insertions(+), 30 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 87ccca51ddc..78f5b81bbe7 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -61,7 +61,6 @@ fotoramaVersion = '4.6.4';
         hiddenClass = _fotoramaClass + '--hidden',
 
         fullscreenClass = _fotoramaClass + '--fullscreen',
-        fullscreenPreview = fullscreenClass + '-icons',
         fullscreenIconClass = _fotoramaClass + '__fullscreen-icon',
 
         errorClass = _fotoramaClass + '__error',
@@ -1017,13 +1016,7 @@ fotoramaVersion = '4.6.4';
             /**
              * Set type of navigation. Can be thumbs or slides
              */
-            navtype: 'thumbs',
-
-            /**
-             * If true, fullscreen will be opened on preview click
-             * If false, will be shown fullscreen icons.
-             */
-            fullpreview: true
+            navtype: 'thumbs'
 
         },
 
@@ -2437,7 +2430,7 @@ fotoramaVersion = '4.6.4';
          * */
         function setOptions() {
             if (!opts.nav || opts.nav === 'dots') {
-                opts.navdir = 'horizontal';
+                opts.navdir = 'horizontal'
             }
 
             that.options = opts = optionsToLowerCase(opts);
@@ -2476,7 +2469,6 @@ fotoramaVersion = '4.6.4';
             arrsUpdate();
             stageWheelUpdate();
             thumbArrUpdate();
-            $fotorama.toggleClass(fullscreenPreview, opts.fullpreview);
             if (opts.autoplay) setAutoplayInterval(opts.autoplay);
 
             o_thumbSide = numberFromMeasure(opts.thumbwidth) || THUMB_SIZE;
@@ -3820,9 +3812,7 @@ fotoramaVersion = '4.6.4';
             onTouchEnd: onTouchEnd,
             onEnd: function (result) {
                 setShadow($stage);
-                if (!result.moved && !that.fullScreen && opts.fullpreview) {
-                    that.requestFullScreen();
-                }
+
 
                 var toggleControlsFLAG = (MS_POINTER && !hoverFLAG || result.touch) && opts.arrows && opts.arrows !== 'always';
 
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 511f6023d48..1fe94fb76c5 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -717,13 +717,8 @@
     z-index: @z-index-10;
 }
 
-.fotorama--fullscreen-icons {
-    .fotorama__fullscreen-icon {
-        display: none;
-    }
-}
-
 .fotorama__fullscreen-icon {
+    display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 775e7187435..db3662a37da 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -77,17 +77,13 @@ define([
         function mousewheel(e, fotorama, element) {
             var $fotoramaStage = $(element).find('[data-fotorama-stage="fotorama__stage"]'),
                 fotoramaStage = $fotoramaStage.get(0);
-
-            if (!$fotoramaStage.hasClass('magnify-wheel-loaded')) {
-                if (fotoramaStage && fotoramaStage.addEventListener) {
-                    if ('onwheel' in document) {
-                        fotoramaStage.addEventListener("wheel", onWheel);
-                    } else if ('onmousewheel' in document) {
-                        fotoramaStage.addEventListener("mousewheel", onWheel);
-                    } else {
-                        fotoramaStage.addEventListener("MozMousePixelScroll", onWheel);
-                    }
-                    $fotoramaStage.addClass('magnify-wheel-loaded');
+            if (fotoramaStage.addEventListener) {
+                if ('onwheel' in document) {
+                    fotoramaStage.addEventListener("wheel", onWheel);
+                } else if ('onmousewheel' in document) {
+                    fotoramaStage.addEventListener("mousewheel", onWheel);
+                } else {
+                    fotoramaStage.addEventListener("MozMousePixelScroll", onWheel);
                 }
             }
 
@@ -166,6 +162,7 @@ define([
                 $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage', $gallery),
                 $imageContainer = $preview.parent(),
                 gallery = $gallery.data('fotorama');
+            console.log("asdasdad");
             if (gallery.fullScreen) {
                 if (!$imageContainer.find('.magnify-fullimage').length) {
                     $imageContainer.append('<img class="magnify-fullimage" src ="' + gallery.options.data[gallery.activeIndex].original + '"/>');
-- 
GitLab


From 4cbe506cc99a7e486656be179341f9e4694e7c61 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 6 Oct 2015 11:58:51 +0300
Subject: [PATCH 270/420] Revert "JS-241: Various rendering bugs with
 Fullscreen Gallery"

This reverts commit 4e165ef57009bae9bdeb271b00d219f5b072a557.

Conflicts:
	lib/web/mage/gallery/gallery.less
---
 lib/web/mage/gallery/gallery.html |   6 +-
 lib/web/mage/gallery/gallery.less |  41 ++--
 lib/web/magnifier/magnifier.js    | 330 ++++++++++++++++++++++++++++++
 lib/web/magnifier/magnify.js      | 253 +----------------------
 4 files changed, 353 insertions(+), 277 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 53cd4242f08..34d26c812da 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -7,7 +7,7 @@
 <div class="fotorama-item" data-gallery-role="gallery" tabindex="0">
     <div data-gallery-role="fotorama__focusable-start" tabindex="0"></div>
     <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows">
-        <div class="fotorama__stage" data-fotorama-stage="fotorama__stage">
+        <div class="fotorama__stage">
             <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos">
                 <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
@@ -18,8 +18,8 @@
                 <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
-            <div class="fotorama__zoom-in" data-zoom-in="fotorama__zoom-in"></div>
-            <div class="fotorama__zoom-out" data-zoom-out="fotorama__zoom-out"></div>
+            <div class="fotorama__zoom-in"></div>
+            <div class="fotorama__zoom-out"></div>
         </div>
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 1fe94fb76c5..2034fc98abb 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -196,7 +196,7 @@
     height: 100%;
     position: absolute;
     width: 100%;
-    left: 0;
+    left:0;
 }
 
 .fotorama-transform-disabled {
@@ -268,6 +268,9 @@
 .fotorama-sprite {
     &:extend(.fotorama-print-background);
     background: url('gallery.png') no-repeat;
+    //@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 2dppx) {
+    //  background: url('fotorama@2x.png') no-repeat;
+    //}
 }
 
 .fotorama-print-background {
@@ -506,7 +509,6 @@
 }
 
 .fotorama__thumb {
-    background-color: @color-gray94;
     height: 100%;
     overflow: hidden;
     position: relative;
@@ -665,6 +667,7 @@
 
 .fotorama__arr {
     z-index: @z-index-9;
+
 }
 .fotorama__fullscreen-icon,
 .fotorama__video-close {
@@ -718,7 +721,7 @@
 }
 
 .fotorama__fullscreen-icon {
-    display: none;
+    //display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
@@ -728,7 +731,7 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
-        display: inline-block;
+        //display: inline-block;
         background-position: (-@size-fotorama-block) 0;
     }
 }
@@ -944,10 +947,10 @@
     &.fotorama__shadows--top:before,
     &.fotorama__shadows--bottom:after {
         left: 0;
-        right: 0;
+        right:0;
         background-size: 100% 1px, 100% 5px ;
-        height: 10px;
-        width: auto;
+        height:10px;
+        width:auto;
     }
     &.fotorama__shadows--left:before {
         .fotorama-shadow-gradient(0, 50%);
@@ -963,13 +966,13 @@
     &.fotorama__shadows--top:before {
         .fotorama-shadow-gradient(50%, 0);
         background-position: 0 0, 0 0;
-        top: 0;
+        top:0;
 
     }
     &.fotorama__shadows--bottom:after {
         .fotorama-shadow-gradient(50%, 100%);
         background-position: 0 100%, 0 100%;
-        bottom: 0;
+        bottom:0;
     }
 }
 
@@ -1204,28 +1207,14 @@
     display: none;
 }
 
-.gallery-placeholder {
-    .loader img {
-        position: absolute;
-    }
-    .loading-mask {
-        padding: 0 0 50%;
-        position: absolute;
-    }
-}
-
 body.fotorama__fullscreen {
     overflow-y: hidden;
     .magnify-fullimage {
         display: inline-block;
     }
-
-    .magnify-lens {
-        display: none !important;
-    }
     .fotorama__stage__shaft {
-        .fotorama__img {
-            display: none;
-        }
+        //.fotorama__img {
+        //    display: none;
+        //}
     }
 }
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 232579bb4f4..cdc3b13c2b7 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -558,6 +558,150 @@
             }
         }
 
+        function toggleZoomButtons($image) {
+            var path = $image.attr("src"),
+                imgSize;
+            if (path) {
+                imgSize = getImageSize(path);
+                if ((imgSize.rh > $image.parent().height()) || (imgSize.rw > $image.parent().width())) {
+                    $('.fotorama__zoom-in').show();
+                    $('.fotorama__zoom-out').show();
+                } else {
+                    $('.fotorama__zoom-in').hide();
+                    $('.fotorama__zoom-out').hide();
+                }
+            }
+        }
+
+        function magnifierFullscreen () {
+            var isDragActive = false,
+                startX,
+                startY,
+                imagePosX,
+                imagePosY,
+                touch,
+                isTouchEnabled = 'ontouchstart' in document.documentElement;
+
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
+                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $imageContainer = $preview.parent(),
+                    gallery = $('[data-gallery-role="gallery"]');
+
+                gallery.on('fotorama:fullscreenexit', function () {
+                    $thumb.css({
+                        'top': '',
+                        'left': ''
+                    });
+                });
+
+                if (gallery.data('fotorama').fullScreen) {
+                    //if (!$imageContainer.find('.' + MagnifyCls.magnifyFull).length) {
+                    //    $imageContainer.append('<img class="' + MagnifyCls.magnifyFull + '" src ="' + options.full + '"/>');
+                    //}
+                    toggleZoomButtons($image);
+
+                    $('.fotorama__stage__frame .fotorama__img').each(function () {
+                        var path = $(this).attr("src"),
+                            imgSize;
+                        if (path) {
+                            imgSize = getImageSize(path);
+
+                            if ((imgSize.rh > $(this).parent().height()) || (imgSize.rw > $(this).parent().width())) {
+
+                                if (imgSize.rh / imgSize.rw < $(this).parent().height() / $(this).parent().width()) {
+                                    $(this).width($(this).parent().width());
+                                    $(this).height('auto');
+                                } else {
+                                    $(this).height($(this).parent().height());
+                                    $(this).width('auto');
+                                }
+
+                                $(this).css({
+                                    'top': '',
+                                    'left': ''
+                                });
+                            }
+                        }
+                    });
+                }
+
+                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
+                    if (gallery.data('fotorama').fullScreen) {
+                        e.preventDefault();
+
+                        $image.css('cursor', 'move');
+                        imagePosY = $image.offset().top;
+                        imagePosX = $image.offset().left;
+
+                        if (isTouchEnabled) {
+                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                            e.clientX = touch.pageX;
+                            e.clientY = touch.pageY;
+                        }
+                        startX = e.clientX || e.originalEvent.clientX;
+                        startY = e.clientY || e.originalEvent.clientY;
+                        isDragActive = true;
+                    }
+                });
+
+
+
+                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
+                    if (gallery.data('fotorama').fullScreen && isDragActive) {
+
+                        var top,
+                            left,
+                            startOffset = $image.offset(),
+                            clientX = e.clientX || e.originalEvent.clientX,
+                            clientY = e.clientY || e.originalEvent.clientY;
+
+
+                        e.preventDefault();
+
+                        if (isTouchEnabled) {
+                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                            e.clientX = touch.pageX;
+                            e.clientY = touch.pageY;
+                        }
+                        top = +imagePosY + (clientY - startY);
+                        left = +imagePosX + (clientX - startX);
+
+                        if ($image.height() > $imageContainer.height()) {
+
+                            if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
+                                top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                            } else {
+                                top = ($imageContainer.offset().top < top) ? 0 : top;
+                            }
+                            $image.offset({
+                                'top': top
+                            });
+                        }
+
+                        if ($image.width() > $imageContainer.width()) {
+
+                            if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                                left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                            } else {
+                                left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                            }
+                            $image.offset({
+                                'left': left
+                            });
+                        }
+                    }
+                });
+
+                $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
+                    if (gallery.data('fotorama').fullScreen) {
+                        isDragActive = false;
+                        $image.css('cursor', 'pointer');
+                    }
+                });
+            });
+        }
+
         function onScroll() {
 
             if (curThumb !== null) {
@@ -565,14 +709,200 @@
             }
         }
 
+        if ($('.fotorama-item').data('fotorama').fullScreen) {
+            $('.fotorama__stage__frame .fotorama__img').each(function () {
+                var image = new Image();
+                image.src = $(this).attr("src");
+
+                if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                    if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                        $(this).width($(this).parent().width());
+                        $(this).height('');
+                    } else {
+                        $(this).height($(this).parent().height());
+                        $(this).width('');
+                    }
+                }
+            });
+        }
 
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
+
+            if ($('.fotorama-item').data('fotorama').fullScreen) {
+
+                $('.fotorama__stage__frame .fotorama__img').each(function () {
+                    var image = new Image();
+                    image.src = $(this).attr("src");
+
+                    if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                        if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                            $(this).width($(this).parent().width());
+                            $(this).height('');
+                        } else {
+                            $(this).height($(this).parent().height());
+                            $(this).width('');
+                        }
+                    }
+                });
+
+                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] img'));
+            }
+
+
             _init($box, gOptions);
+
         });
 
+        function checkFullscreenImagePosition() {
+            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+
+                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $imageContainer = $preview.parent(),
+                    gallery = $('[data-gallery-role="gallery"]'),
+                    top, left;
+
+                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
+                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                } else {
+                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
+                }
+
+                if (top !== undefined) {
+                    $image.css('top', top);
+                }
+
+                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
+                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                } else {
+                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
+                }
+
+                if (left !== undefined) {
+                    $image.css('left', left);
+                }
+
+                if ($image.width() < $imageContainer.width()) {
+                    $image.css('left', '');
+                }
+
+                if ($image.height() < $imageContainer.height()) {
+                    $image.css('top', '');
+                }
+            }
+        }
+
+        function zoomIn(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                gallery = $('[data-gallery-role="gallery"]'),
+                imgOriginalSize = getImageSize($image[0].src),
+                setedResult = Math.round($image.width() + options.inc);
+            if(e) {
+                e.preventDefault();
+            }
+
+
+            if (setedResult > imgOriginalSize.rw) {
+                setedResult = imgOriginalSize.rw;
+            }
+            $image.css({'width': setedResult, height: 'auto'});
+            checkFullscreenImagePosition();
+        }
+
+        function zoomOut(e) {
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                gallery = $('[data-gallery-role="gallery"]'),
+                imgOriginalSize = getImageSize($image[0].src),
+                setedResult = Math.round($image.width() - options.inc);
+            if (e) {
+                e.preventDefault();
+            }
+
+            if ($image.width() > $image.height() && $image.width() <= $image.parent().width()) {
+                return
+            }
+            if ($image.width() <= $image.height() && $image.height() <= $image.parent().height()) {
+                return
+            }
+
+            $image.css({'width': setedResult, height: 'auto'});
+            checkFullscreenImagePosition();
+        }
+
+        /**
+         * Return width and height of original image
+         * @param src path for original image
+         * @returns {{rw: number, rh: number}}
+         */
+        function getImageSize(src) {
+            var img = new Image(),
+                imgSize = {
+                    rw: 0,
+                    rh: 0
+                };
+            img.src = src;
+            imgSize.rw = img.width;
+            imgSize.rh = img.height;
+            return imgSize;
+        }
+
+
+        function setEventOnce() {
+            $('.fotorama__zoom-in')
+                .off('click', zoomIn)
+                .on('click', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('click', zoomOut)
+                .on('click', zoomOut);
+            $('.fotorama__zoom-in')
+                .off('touchstart', zoomIn)
+                .on('touchstart', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('touchstart', zoomOut)
+                .on('touchstart', zoomOut);
+        }
+
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
+        setEventOnce();
+        magnifierFullscreen();
+
+        $('.fotorama-item').on('fotorama:load', function () {
+            if (document.querySelector('.fotorama__stage').addEventListener) {
+                if ('onwheel' in document) {
+                    // IE9+, FF17+, Ch31+
+                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheel);
+                } else if ('onmousewheel' in document) {
+
+                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheel);
+                } else {
+                    // Firefox < 17
+                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheel);
+                }
+            } else { // IE8-
+                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheel);
+            }
+
+            function onWheel(e) {
+                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+                    e = e || window.event;
+
+
+                    var delta = e.deltaY || e.detail || e.wheelDelta;
+
+                    if (delta > 0) {
+                        zoomOut(e);
+                    } else {
+                        zoomIn(e);
+                    }
+
+                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
+                }
+            }
+        })
 
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index db3662a37da..22b50c0e8d5 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -24,226 +24,6 @@ define([
             });
         }
 
-        /**
-         * Return width and height of original image
-         * @param src path for original image
-         * @returns {{rw: number, rh: number}}
-         */
-        function getImageSize(src) {
-            var img = new Image(),
-                imgSize = {
-                    rw: 0,
-                    rh: 0
-                };
-            img.src = src;
-            imgSize.rw = img.width;
-            imgSize.rh = img.height;
-            return imgSize;
-        }
-
-        function zoomIn(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
-                gallery = $(gallerySelector),
-                imgMaxSize,
-                setedResult;
-            e.preventDefault();
-            if ($image.length && $image[0].src) {
-                imgMaxSize = getImageSize($image[0].src);
-                setedResult = Math.round($image.width() + 10);
-                $image.css({'width': setedResult, height: 'auto'});
-            }
-            checkFullscreenImagePosition();
-        }
-
-        function zoomOut(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
-                gallery = $(gallerySelector),
-                imgMaxSize,
-                setedResult;
-            e.preventDefault();
-            if ($image.length && $image[0].src) {
-                imgMaxSize = getImageSize($image[0].src);
-                setedResult = Math.round($image.width() - 10);
-                $image.css({'width': setedResult, height: 'auto'});
-            }
-            checkFullscreenImagePosition();
-        }
-
-        /**
-         * Bind event on scroll on active item in fotorama
-         * @param e
-         * @param fotorama - object of fotorama
-         */
-        function mousewheel(e, fotorama, element) {
-            var $fotoramaStage = $(element).find('[data-fotorama-stage="fotorama__stage"]'),
-                fotoramaStage = $fotoramaStage.get(0);
-            if (fotoramaStage.addEventListener) {
-                if ('onwheel' in document) {
-                    fotoramaStage.addEventListener("wheel", onWheel);
-                } else if ('onmousewheel' in document) {
-                    fotoramaStage.addEventListener("mousewheel", onWheel);
-                } else {
-                    fotoramaStage.addEventListener("MozMousePixelScroll", onWheel);
-                }
-            }
-
-            function onWheel(e) {
-                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
-                    e = e || window.event;
-                    var delta = e.deltaY || e.detail || e.wheelDelta;
-                    if (delta > 0) {
-                        zoomOut(e);
-                    } else {
-                        zoomIn(e);
-                    }
-
-                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
-                }
-            }
-
-        }
-
-        function checkFullscreenImagePosition() {
-            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
-
-                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
-                    $imageContainer = $preview.parent(),
-                    gallery = $('[data-gallery-role="gallery"]'),
-                    top, left;
-
-                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
-                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
-                } else {
-                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
-                }
-
-                if (top !== undefined) {
-                    $image.css('top', top);
-                }
-
-                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
-                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
-                } else {
-                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
-                }
-
-                if (left !== undefined) {
-                    $image.css('left', left);
-                }
-
-                if ($image.width() < $imageContainer.width()) {
-                    $image.css('left', '');
-                }
-
-                if ($image.height() < $imageContainer.height()) {
-                    $image.css('top', '');
-                }
-            }
-        }
-
-        /**
-         * Metod which makes draggable picture. Also work
-         * on tauch devices.
-         * @param e - event object
-         * @param fotorama - fotorama object
-         */
-        function magnifierFullscreen (e, fotorama) {
-            var isDragActive = false,
-                startX,
-                startY,
-                imagePosX,
-                imagePosY,
-                touch,
-                isTouchEnabled = 'ontouchstart' in document.documentElement;
-
-            var $gallery = $('[data-gallery-role="gallery"]'),
-                $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img', $gallery),
-                $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage', $gallery),
-                $imageContainer = $preview.parent(),
-                gallery = $gallery.data('fotorama');
-            console.log("asdasdad");
-            if (gallery.fullScreen) {
-                if (!$imageContainer.find('.magnify-fullimage').length) {
-                    $imageContainer.append('<img class="magnify-fullimage" src ="' + gallery.options.data[gallery.activeIndex].original + '"/>');
-                }
-            }
-
-            $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
-                if (gallery.fullScreen) {
-                    e.preventDefault();
-
-                    $image.css('cursor', 'move');
-                    imagePosY = $image.offset().top;
-                    imagePosX = $image.offset().left;
-
-                    if (isTouchEnabled) {
-                        touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
-                        e.clientX = touch.pageX;
-                        e.clientY = touch.pageY;
-                    }
-                    startX = e.clientX || e.originalEvent.clientX;
-                    startY = e.clientY || e.originalEvent.clientY;
-                    isDragActive = true;
-                }
-            });
-
-
-
-            $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
-                if (gallery.fullScreen && isDragActive) {
-
-                    var top,
-                        left,
-                        clientX = e.clientX || e.originalEvent.clientX,
-                        clientY = e.clientY || e.originalEvent.clientY;
-
-
-                    e.preventDefault();
-
-                    if (isTouchEnabled) {
-                        touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
-                        e.clientX = touch.pageX;
-                        e.clientY = touch.pageY;
-                    }
-                    top = +imagePosY + (clientY - startY);
-                    left = +imagePosX + (clientX - startX);
-
-                    if ($image.height() > $imageContainer.height()) {
-
-                        if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
-                            top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
-                        } else {
-                            top = ($imageContainer.offset().top < top) ? 0 : top;
-                        }
-                        $image.offset({
-                            'top': top
-                        });
-                    }
-
-                    if ($image.width() > $imageContainer.width()) {
-
-                        if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
-                            left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
-                        } else {
-                            left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
-                        }
-                        $image.offset({
-                            'left': left
-                        });
-                    }
-                }
-            });
-
-            $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
-                if (gallery.fullScreen) {
-                    isDragActive = false;
-                    $image.css('cursor', 'pointer');
-                }
-            });
-        }
-
-
         /**
          * Hides magnifier preview and zoom blocks.
          */
@@ -298,39 +78,16 @@ define([
             }
         });
 
-        $(element).on('fotorama:load fotorama:showend fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
+        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].original;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
-        $(element).on('gallery:loaded', function (e, fotorama) {
-            $(element).find(gallerySelector)
-                .on('fotorama:ready', function (e, fotorama) {
-                    var $zoomIn = $('[data-zoom-in="fotorama__zoom-in"]'),
-                        $zoomOut = $('[data-zoom-out="fotorama__zoom-out"]');
-                    if ( !$zoomIn.hasClass('zoom-in-loaded') ) {
-                        $zoomIn.on('click touchstart', zoomIn);
-                        $zoomIn.addClass('zoom-in-loaded');
-                    }
-                    if ( !$zoomOut.hasClass('zoom-out-loaded') ) {
-                        $zoomOut.on('click touchstart', zoomOut);
-                        $zoomOut.addClass('zoom-out-loaded');
-                    }
-
-                })
-                .on('fotorama:fullscreenenter', function (e, fotorama) {
-                    magnifierFullscreen(e, fotorama);
-                    mousewheel(e, fotorama, element);
-                    fotorama.setOptions({swipe: false});
-                })
-                .on('fotorama:load', function (e, fotorama) {
-                    magnifierFullscreen(e, fotorama);
-                    mousewheel(e, fotorama, element);
-                })
-                .on('fotorama:show fotorama:showend', function (e, fotorama) {
-                    magnifierFullscreen(e, fotorama);
-                });
+        $(element).on('gallery:loaded', function () {
+            $(element).find(gallerySelector).on('fotorama:show fotorama:fullscreenenter ', function () {
+                hideMagnifier();
+            });
         });
 
         return config;
-- 
GitLab


From a54ff0dd7c9b9b4b9204d3e056a0d3a97ef5844f Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Tue, 6 Oct 2015 13:25:18 +0300
Subject: [PATCH 271/420] MAGETWO-43593: PR

- fix FAT
---
 .../Sales/Test/Block/Adminhtml/Order/Grid.php | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
index 6fa5b0622f0..75078a0d021 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
@@ -24,36 +24,36 @@ class Grid extends DataGrid
             'selector' => '[name="increment_id"]',
         ],
         'status' => [
-            'selector' => '[name="filters[status]"]',
+            'selector' => '[name="status"]',
             'input' => 'select',
         ],
         'purchase_date_from' => [
-            'selector' => '[name="filters[created_at][from]"]',
+            'selector' => '[name="created_at[from]"]',
         ],
         'purchase_date_to' => [
-            'selector' => '[name="filters[created_at][to]"]',
+            'selector' => '[name="created_at[to]"]',
         ],
         'base_grand_total_from' => [
-            'selector' => '[name="filters[base_grand_total][from]"]',
+            'selector' => '[name="base_grand_total[from]"]',
         ],
         'base_grand_total_to' => [
-            'selector' => '[name="filters[base_grand_total][to]"]',
+            'selector' => '[name="base_grand_total[to]"]',
         ],
         'purchased_gran_total_from' => [
-            'selector' => '[name="filters[grand_total][from]"]',
+            'selector' => '[name="grand_total[from]"]',
         ],
         'purchased_gran_total_to' => [
-            'selector' => '[name="filters[grand_total][to]"]',
+            'selector' => '[name="grand_total[to]"]',
         ],
         'purchase_point' => [
-            'selector' => '[name="filters[store_id]"]',
+            'selector' => '[name="store_id"]',
             'input' => 'selectstore'
         ],
         'bill_to_name' => [
-            'selector' => '[name="filters[billing_name]"]'
+            'selector' => '[name="billing_name"]'
         ],
         'ship_to_name' => [
-            'selector' => '[name="filters[shipping_name]"]',
+            'selector' => '[name="shipping_name"]',
         ]
     ];
 
-- 
GitLab


From 24e3e1395742ce7b4322a24c1474ca07b8279a20 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Tue, 6 Oct 2015 14:57:26 +0300
Subject: [PATCH 272/420] PV-224: CSS to LESS refactoring

---
 .../adminhtml/layout/catalog_product_new.xml  |   1 -
 .../product/edit/slideout/form.phtml          |   2 +-
 .../view/adminhtml/web/css/productvideo.css   | 261 ------------------
 .../frontend/layout/catalog_product_view.xml  |   1 -
 .../view/frontend/web/css/product-video.css   |  75 -----
 .../web/js/fotorama-add-video-events.js       |   8 +-
 .../web/css/source/_module.less               | 236 ++++++++++++++++
 .../web/css/source/_module.less               |  70 +++++
 8 files changed, 309 insertions(+), 345 deletions(-)
 delete mode 100755 app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css
 delete mode 100644 app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css
 create mode 100644 app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml b/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml
index e2362f94732..8670703fcf3 100755
--- a/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml
+++ b/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml
@@ -7,7 +7,6 @@
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
-        <css src="Magento_ProductVideo::css/productvideo.css"/>
         <link src="Magento_ProductVideo::js/get-video-information.js"/>
     </head>
     <body>
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml b/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml
index 6e2418f1196..50d5324fc43 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml
+++ b/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml
@@ -17,7 +17,7 @@
             });
         });
     </script>
-  <div id="video-player-preview-location">
+  <div id="video-player-preview-location" class="video-player-sidebar">
       <div class="video-player-container"></div>
       <div class="video-information title">
           <label><?php /* @escapeNotVerified */ echo __('Title:') ?> </label><span></span>
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css b/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css
deleted file mode 100755
index e2aa3047a68..00000000000
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css
+++ /dev/null
@@ -1,261 +0,0 @@
- /**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-.image.video-placeholder {
-    position: relative;
-    display: inline-block;
-    text-decoration: none;
-}
-
-.image.video-placeholder:before {
-    background: url(../images/gallery-sprite.png) no-repeat left bottom;
-    content: '';
-    position: absolute;
-    height: 49px;
-    width: 49px;
-    left: 50%;
-    top: 18px;
-    margin-left: -24px;
-    opacity: 0.7;
-    z-index: 1;
-}
-
-.video-placeholder .image-placeholder-text {
-    font-weight: 400;
-}
-
-.admin__field.field-video_image .admin__field-control,
-.admin__field.field-video_small_image .admin__field-control,
-.admin__field.field-video_thumbnail .admin__field-control,
-.admin__field.field-video_swatch_image .admin__field-control,
-.admin__field.field-new_video_disabled .admin__field-control {
-    width: 82px;
-    margin-left: calc((100%) * .33333333 - 30px);
-}
-
-.admin__field.field-video_image .admin__field-control input,
-.admin__field.field-video_small_image .admin__field-control input,
-.admin__field.field-video_thumbnail .admin__field-control input,
-.admin__field.field-video_swatch_image .admin__field-control input,
-.admin__field.field-new_video_disabled .admin__field-control input {
-    float: right;
-}
-
-.admin__field.field-video_image .admin__field-label,
-.admin__field.field-video_small_image .admin__field-label,
-.admin__field.field-video_thumbnail .admin__field-label,
-.admin__field.field-video_swatch_image .admin__field-label,
-.admin__field.field-new_video_disabled .admin__field-label {
-    width: 200px;
-    position: absolute;
-    margin-left: calc((100%) * .33333333 - 30px + 90px);
-    left: 0px;
-}
-
-.admin__field.field-video_image .admin__field-label:before,
-.admin__field.field-video_small_image .admin__field-label:before,
-.admin__field.field-video_thumbnail .admin__field-label:before,
-.admin__field.field-video_swatch_image .admin__field-label:before,
-.admin__field.field-new_video_disabled .admin__field-label:before {
-    content: none;
-}
-
-.admin__field.field-video_image .admin__field-label span,
-.admin__field.field-video_small_image .admin__field-label span,
-.admin__field.field-video_thumbnail .admin__field-label span,
-.admin__field.field-video_swatch_image .admin__field-label span,
-.admin__field.field-new_video_disabled .admin__field-label span {
-    float: left;
-}
-
-.admin__field.field-video_image,
-.admin__field.field-video_small_image,
-.admin__field.field-video_thumbnail,
-.admin__field.field-video_swatch_image {
-    margin-bottom: 20px !important;
-}
-
-.admin__field.field-new_video_disabled {
-    margin-top: 32px !important;
-}
-
-.admin__field.field-video_image .admin__field-control {
-    position: relative;
-}
-
-.admin__field.field-video_image .admin__field-control:after {
-    content: 'Role';
-    position: absolute;
-    color: #000;
-    width: 34px;
-    height: 20px;
-    left: 1px;
-    top: -2px;
-    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    font-size: 1.4rem;
-    font-weight: 600;
-}
-
-.preview_hidden_image_input_button {
-    display: none;
-}
-
-.video-item {
-    position: relative;
-}
-
-.video-item:after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    right: 0;
-    background: url(../images/gallery-sprite.png) bottom left;
-    width: 49px;
-    height: 40px;
-    z-index: 3;
-    left: 0;
-    top: 10px;
-    margin: auto;
-}
-
-.mage-new-video-dialog #new_video_form {
-    width: 65%;
-    float: left;
-}
-
-.mage-new-video-dialog #video-player-preview-location {
-    width: 34.99999%;
-    float: left;
-}
-
-.video-player-container {
-    width: 100%;
-    height: 20vw;
-    margin-bottom: 30px;
-    border: 1px solid #e3e3e3;
-    position: relative;
-}
-
-.video-player-container:after {
-    content: '';
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    margin: auto;
-    width: 93px;
-    height: 60px;
-    background: url(../images/camera.png) no-repeat center;
-    z-index: 1;
-}
-
-.video-information {
-    margin-bottom: 7px;
-    display: none;
-}
-
-.video-information:after {
-    content: " "; /* Older browser do not support empty content */
-    visibility: hidden;
-    display: block;
-    height: 0;
-    clear: both;
-}
-
-.video-information label {
-    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    font-size: 1.4rem;
-    font-weight: 600;
-    display: block;
-    width: 25%;
-    float: left;
-    text-align: right;
-}
-
-.video-information span {
-    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    font-size: 1.4rem;
-    font-weight: 300;
-    display: block;
-    width: 74.9999%;
-    float: left;
-    padding-left: 20px;
-}
-
-.product-video {
-    width: 100%;
-    z-index: 20;
-    height: 100%;
-    position: relative;
-}
-
-.image.video-placeholder > button[data-role="add-video-button"],
-.image.video-placeholder > button {
-    width: 100%;
-    height: 100%;
-    border: 0;
-    background: transparent;
-    z-index: 10;
-    position: relative;
-}
-
-.add-video-button-container {
-    float: right;
-    margin-bottom: 10px;
-}
-
-.admin__field.field.field-new_video_screenshot {
-    margin-bottom: 5px;
-}
-
-.admin__field.field.field-new_video_screenshot_preview {
-    margin-bottom: 50px;
-}
-
-.image .action-make-base:after {
-    -webkit-font-smoothing: antialiased;
-    font-size: 1.8rem;
-    line-height: inherit;
-    color: #9e9e9e;
-    content: '\e63b';
-    font-family: 'Admin Icons';
-    vertical-align: middle;
-    display: inline-block;
-    font-weight: normal;
-    overflow: hidden;
-    speak: none;
-    text-align: center;
-    position: absolute;
-    top: -7px;
-    left: -4px;
-}
-
-.image .action-make-base:hover:after {
-    color: #7d7d7d;
-}
-
-.admin__scope-old .gallery .image .action-make-base {
-    border: 0;
-    width: 0;
-    height: 0;
-    position: absolute;
-    margin: 0;
-    bottom: 9px;
-    right: 9px;
-    left: auto;
-    background: transparent;
-}
-
-.image .action-make-base span {
-    display: none;
-}
-
-.admin__scope-old .base-image .image-label {
-    display: block;
-}
-
-.image.base-image:hover .image-label {
-    display: none;
-}
diff --git a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
index 340d82d4ada..69621aaa859 100644
--- a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
+++ b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
@@ -7,7 +7,6 @@
 -->
 <page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
-        <css src="Magento_ProductVideo::css/product-video.css"/>
         <link src="Magento_ProductVideo::js/fotorama-add-video-events.js"/>
         <link src="Magento_ProductVideo::js/load-player.js"/>
     </head>
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css b/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css
deleted file mode 100644
index 0198f8c98ec..00000000000
--- a/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-.fotorama-video-container.video-unplayed:after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    right: 0;
-    background: url(../img/gallery-sprite.png) bottom right;
-    width: 100px;
-    height: 100px;
-    left: 0;
-    top: 12px;
-    margin: auto;
-}
-.fotorama-video-container .magnify-lens {
-    display: none !important;
-}
-.fotorama-video-container.video-unplayed:hover img {
-    opacity: 0.6;
-}
-.fotorama-video-container.video-unplayed:hover:after {
-    transform: scale(1.25);
-}
-.video-thumb-icon:after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    right: 0;
-    background: url(../img/gallery-sprite.png) bottom left;
-    width: 49px;
-    height: 40px;
-    left: 0;
-    top: 10px;
-    margin: auto;
-}
-.video-timing {
-    width: auto;
-    height: 30px;
-    background: rgba(0, 0, 0, 0.75);
-    padding: 0 17px;
-    color: #fff;
-    position: absolute;
-    right: 0;
-    line-height: 2;
-    transition: 0.3s;
-    bottom: -30px;
-}
-.video-timing.fadeIn {
-    bottom: 0;
-}
-.product-video {
-    position: absolute;
-    top: 0;
-    width: 100%;
-    height: 85%;
-    margin-top: 15%;
-}
-.product-video iframe {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    z-index: 9999;
-}
-.fotorama__arr.hidden-video {
-    z-index: -1;
-}
-.fotorama__video-close {
-    bottom: 89%;
-    top: auto;
-}
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index e19d635a72b..c6cbc9ca228 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -30,9 +30,7 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
          * @param {String} srchref
          * @returns {{}}
          */
-        function _getYoutubeId(srchref) {
-            var srcid = srchref.search.split('v=')[1];
-
+        function _getYoutubeId(srcid) {
             if (srcid) {
                 ampersandPosition = srcid.indexOf('&');
 
@@ -278,7 +276,6 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
         _isVideoBase: function () {
             var allVideoData = this.options.VideoData,
                 videoItem,
-                videoSettings,
                 allVideoDataKeys,
                 key,
                 i;
@@ -288,10 +285,9 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
             for (i = 0; i < allVideoDataKeys.length; i++) {
                 key = allVideoDataKeys[i];
                 videoItem = allVideoData[key];
-                videoSettings = allVideoData[videoItem];
 
                 if (
-                    videoSettings.mediaType === this.VID && videoSettings.isBase &&
+                    videoItem.mediaType === this.VID && videoItem.isBase &&
                     this.options.VideoSettings[0].playIfBase
                 ) {
                     this.Base = true;
diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
new file mode 100644
index 00000000000..7f13601b809
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -0,0 +1,236 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+.image.video-placeholder {
+    display: inline-block;
+    position: relative;
+    text-decoration: none;
+    &:before {
+        background: url(../Magento_ProductVideo/images/gallery-sprite.png) no-repeat left bottom;
+        content: '';
+        height: 49px;
+        left: 50%;
+        margin-left: -24px;
+        opacity: 0.7;
+        position: absolute;
+        top: 18px;
+        width: 49px;
+        z-index: 1;
+    }
+    .image-placeholder-text {
+        font-weight: 400;
+    }
+}
+
+//re-arrange checkboxes fields in slideout video panel (base, small image etc)
+.admin__field {
+    &.field-video_image,
+    &.field-video_small_image,
+    &.field-video_thumbnail,
+    &.field-video_swatch_image,
+    &.field-new_video_disabled {
+        .admin__field-control {
+            #mix-grid .column(3, @field-grid__columns);
+            float: left;
+            margin-left: 80px;
+            position: relative;
+            input {
+                float: right;
+            }
+        }
+        .admin__field-label {
+            left: 0;
+            margin-left: 35%;
+            padding-left: 45px;
+            position: absolute;
+            width: 250px;
+            &:before {
+                content: none;
+            }
+            span {
+                float: left;
+            }
+        }
+    }
+    &.field-new_video_disabled {
+        margin-top: 32px;
+    }
+    &.field-video_image .admin__field-control {
+        position: relative;
+        &:after {
+            color: #000;
+            content: 'Role';
+            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+            font-size: 1.4rem;
+            font-weight: 600;
+            height: 20px;
+            position: absolute;
+            right: 50px;
+            top: -2px;
+            width: 34px;
+        }
+    }
+    &.field.field-new_video_screenshot {
+        margin-bottom: 5px;
+    }
+    &.field.field-new_video_screenshot_preview {
+        margin-bottom: 50px;
+    }
+}
+
+.admin__scope-old {
+    .fieldset .admin__field {
+        &.field-video_image,
+        &.field-video_small_image,
+        &.field-video_thumbnail,
+        &.field-video_swatch_image {
+            margin-bottom: 20px;
+        }
+    }
+    .gallery .image .action-make-base {
+        background: transparent;
+        border: 0;
+        bottom: 9px;
+        height: 0;
+        left: auto;
+        margin: 0;
+        position: absolute;
+        right: 9px;
+        width: 0 !important;
+        &:after {
+            color: #9e9e9e;
+            content: '\e63b';
+            display: inline-block;
+            font-family: 'Admin Icons';
+            font-size: 1.8rem;
+            font-weight: normal;
+            left: -4px;
+            line-height: inherit;
+            overflow: hidden;
+            position: absolute;
+            text-align: center;
+            top: -7px;
+            vertical-align: middle;
+            -webkit-font-smoothing: antialiased;
+            speak: none;
+        }
+        &:hover:after {
+            color: #7d7d7d;
+        }
+        span {
+            display: none;
+        }
+    }
+    .base-image .image-label {
+        display: block;
+    }
+}
+
+.preview_hidden_image_input_button {
+    display: none;
+}
+
+.video-item {
+    position: relative;
+    &:after {
+        background: url(../Magento_ProductVideo/images/gallery-sprite.png) bottom left;
+        bottom: 0;
+        content: '';
+        height: 40px;
+        left: 0;
+        margin: auto;
+        position: absolute;
+        right: 0;
+        top: 10px;
+        width: 49px;
+        z-index: 3;
+    }
+}
+
+//style slideout panel add video
+.mage-new-video-dialog {
+    form.admin__scope-old {
+        float: left;
+        width: 65%;
+    }
+    .video-player-sidebar {
+        width: 34.99999%;
+        float: left;
+    }
+    .video-player-container {
+        width: 100%;
+        height: 20vw;
+        margin-bottom: 30px;
+        border: 1px solid #e3e3e3;
+        position: relative;
+        &:after {
+            content: '';
+            position: absolute;
+            top: 0;
+            left: 0;
+            right: 0;
+            bottom: 0;
+            margin: auto;
+            width: 93px;
+            height: 60px;
+            background: url(../Magento_ProductVideo/images/camera.png) no-repeat center;
+            z-index: 1;
+        }
+    }
+    .video-information {
+        margin-bottom: 7px;
+        display: none;
+        &:after {
+            content: " "; /* Older browser do not support empty content */
+            visibility: hidden;
+            display: block;
+            height: 0;
+            clear: both;
+        }
+        label {
+            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+            font-size: 1.4rem;
+            font-weight: 600;
+            display: block;
+            width: 25%;
+            float: left;
+            text-align: right;
+        }
+        span {
+            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+            font-size: 1.4rem;
+            font-weight: 300;
+            display: block;
+            width: 74.9999%;
+            float: left;
+            padding-left: 20px;
+        }
+    }
+    .product-video {
+        width: 100%;
+        z-index: 20;
+        height: 100%;
+        position: relative;
+    }
+}
+
+.image.video-placeholder > button[data-role="add-video-button"],
+.image.video-placeholder > button {
+    background: transparent;
+    border: 0;
+    height: 100%;
+    position: relative;
+    width: 100%;
+    z-index: 10;
+}
+
+.add-video-button-container {
+    float: right;
+    margin-bottom: 10px;
+}
+
+.image.base-image:hover .image-label {
+    display: none;
+}
diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
new file mode 100644
index 00000000000..d51b978a97e
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -0,0 +1,70 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+.fotorama-video-container {
+    &:after {
+        background: url(../Magento_ProductVideo/img/gallery-sprite.png) bottom right;
+        bottom: 0;
+        content: '';
+        height: 100px;
+        left: 0;
+        margin: auto;
+        position: absolute;
+        right: 0;
+        top: 12px;
+        width: 100px;
+    }
+    .magnify-lens {
+        display: none !important;
+    }
+    &.video-unplayed {
+        &:hover {
+            img {
+                opacity: 0.6;
+            }
+            &:after {
+                transform: scale(1.25);
+            }
+        }
+    }
+}
+
+.video-thumb-icon:after {
+    background: url(../Magento_ProductVideo/img/gallery-sprite.png) bottom left;
+    bottom: 0;
+    content: '';
+    height: 40px;
+    left: 0;
+    margin: auto;
+    position: absolute;
+    right: 0;
+    top: 10px;
+    width: 49px;
+}
+
+.product-video {
+    height: 85%;
+    margin-top: 15%;
+    position: absolute;
+    top: 0;
+    width: 100%;
+    iframe {
+        height: 100%;
+        left: 0;
+        position: absolute;
+        top: 0;
+        width: 100%;
+        z-index: 9999;
+    }
+}
+
+.fotorama__arr.hidden-video {
+    z-index: -1;
+}
+
+.fotorama__video-close {
+    bottom: 89%;
+    top: auto;
+}
-- 
GitLab


From d9f14c21f79946f6556b8eb9b3287f60e3f5ad62 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Tue, 6 Oct 2015 15:04:00 +0300
Subject: [PATCH 273/420] MAGETWO-43593: PR

- fix FAT
---
 .../app/Magento/Checkout/Test/Block/Onepage/Shipping.xml    | 6 ++----
 .../Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml     | 2 +-
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
index 51f6b61287f..a61ff0273b5 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
@@ -14,7 +14,7 @@
         <lastname />
         <company />
         <street>
-            <selector>[name='shippingAddress.street.0']</selector>
+            <selector>input[name="street[0]"]</selector>
         </street>
         <city />
         <region_id>
@@ -24,8 +24,6 @@
             <input>select</input>
         </country_id>
         <telephone />
-        <postcode>
-            <selector>[name='shippingAddress.postcode']</selector>
-        </postcode>
+        <postcode />
     </fields>
 </mapping>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml
index bc70891ffa4..c4778125723 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml
@@ -10,7 +10,7 @@
         <class>\Magento\Backend\Test\Block\Widget\Tab</class>
         <selector>#tab_customer</selector>
         <strategy>css selector</strategy>
-        <wrapper>data[customer]</wrapper>
+        <wrapper>customer</wrapper>
         <fields>
             <website_id>
                 <input>select</input>
-- 
GitLab


From 9c0dfc1f9f6700d9848bd7e593d080175c9a3962 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Tue, 6 Oct 2015 16:16:11 +0300
Subject: [PATCH 274/420] PV-224: CSS to LESS refactoring. Fix code style

---
 .../view/frontend/web/js/fotorama-add-video-events.js           | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index c6cbc9ca228..a9bc9eb2bc9 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -27,7 +27,7 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
 
         /**
          * Get youtube ID
-         * @param {String} srchref
+         * @param {String} srcid
          * @returns {{}}
          */
         function _getYoutubeId(srcid) {
-- 
GitLab


From c8c4a976237bd6effc8d152c68b3446163fc486c Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Tue, 6 Oct 2015 16:24:27 +0300
Subject: [PATCH 275/420] MAGETWO-41964: Log created on random requests - leads
 to DoS attack

---
 .../Store/App/Request/PathInfoProcessor.php   |  13 ++-
 .../Magento/Store/Model/StoreRepository.php   |   3 +-
 .../Magento/Store/Model/StoreResolver.php     |  14 +--
 .../App/Request/PathInfoProcessorTest.php     |   5 +-
 .../App/Request/PathInfoProcessorTest.php     | 106 ++++++++++++++++++
 5 files changed, 120 insertions(+), 21 deletions(-)
 create mode 100644 dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php

diff --git a/app/code/Magento/Store/App/Request/PathInfoProcessor.php b/app/code/Magento/Store/App/Request/PathInfoProcessor.php
index ebe3b64aa3b..ef07979226c 100644
--- a/app/code/Magento/Store/App/Request/PathInfoProcessor.php
+++ b/app/code/Magento/Store/App/Request/PathInfoProcessor.php
@@ -5,19 +5,21 @@
  */
 namespace Magento\Store\App\Request;
 
+use Magento\Framework\Exception\NoSuchEntityException;
+
 class PathInfoProcessor implements \Magento\Framework\App\Request\PathInfoProcessorInterface
 {
     /**
      * @var \Magento\Store\Model\StoreManagerInterface
      */
-    private $_storeManager;
+    private $storeManager;
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
     {
-        $this->_storeManager = $storeManager;
+        $this->storeManager = $storeManager;
     }
 
     /**
@@ -33,14 +35,15 @@ class PathInfoProcessor implements \Magento\Framework\App\Request\PathInfoProces
         $storeCode = $pathParts[0];
 
         try {
-            $store = $this->_storeManager->getStore($storeCode);
-        } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
+            /** @var \Magento\Store\Api\Data\StoreInterface $store */
+            $store = $this->storeManager->getStore($storeCode);
+        } catch (NoSuchEntityException $e) {
             return $pathInfo;
         }
 
         if ($store->isUseStoreInUrl()) {
             if (!$request->isDirectAccessFrontendName($storeCode)) {
-                $this->_storeManager->setCurrentStore($storeCode);
+                $this->storeManager->setCurrentStore($storeCode);
                 $pathInfo = '/' . (isset($pathParts[1]) ? $pathParts[1] : '');
                 return $pathInfo;
             } elseif (!empty($storeCode)) {
diff --git a/app/code/Magento/Store/Model/StoreRepository.php b/app/code/Magento/Store/Model/StoreRepository.php
index 322c358be35..da72fae5cff 100644
--- a/app/code/Magento/Store/Model/StoreRepository.php
+++ b/app/code/Magento/Store/Model/StoreRepository.php
@@ -57,8 +57,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
         $store = $this->storeFactory->create();
         $store->load($code, 'code');
         if ($store->getId() === null) {
-            // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            throw new \InvalidArgumentException();
+            throw new NoSuchEntityException();
         }
         $this->entities[$code] = $store;
         $this->entitiesById[$store->getId()] = $store;
diff --git a/app/code/Magento/Store/Model/StoreResolver.php b/app/code/Magento/Store/Model/StoreResolver.php
index 79a6e53423c..1f37a8611a2 100644
--- a/app/code/Magento/Store/Model/StoreResolver.php
+++ b/app/code/Magento/Store/Model/StoreResolver.php
@@ -137,14 +137,9 @@ class StoreResolver implements \Magento\Store\Api\StoreResolverInterface
         try {
             $store = $this->storeRepository->getActiveStoreByCode($storeCode);
         } catch (StoreIsInactiveException $e) {
-            $error = __('Requested store is inactive');
-        } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            $error = __('Requested store is not found');
+            throw new NoSuchEntityException(__('Requested store is inactive'));
         }
 
-        if (isset($error, $e)) {
-            throw new NoSuchEntityException($error, $e);
-        }
         return $store;
     }
 
@@ -160,14 +155,9 @@ class StoreResolver implements \Magento\Store\Api\StoreResolverInterface
         try {
             $store = $this->storeRepository->getActiveStoreById($id);
         } catch (StoreIsInactiveException $e) {
-            $error = __('Default store is inactive');
-        } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            $error = __('Default store is not found');
+            throw new NoSuchEntityException(__('Default store is inactive'));
         }
 
-        if (isset($error, $e)) {
-            throw new NoSuchEntityException($error, $e);
-        }
         return $store;
     }
 }
diff --git a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php
index b81f0a6544f..9ba184b9509 100644
--- a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php
+++ b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Store\Test\Unit\App\Request;
 
+use Magento\Framework\Exception\NoSuchEntityException;
+
 class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -112,8 +114,7 @@ class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase
     {
         $store = $this->getMock('\Magento\Store\Model\Store', [], [], '', false);
         $this->_storeManagerMock->expects($this->once())->method('getStore')->with('storeCode')
-            // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            ->willThrowException(new \InvalidArgumentException());
+            ->willThrowException(new NoSuchEntityException());
         $store->expects($this->never())->method('isUseStoreInUrl');
         $this->_requestMock->expects($this->never())->method('isDirectAccessFrontendName');
 
diff --git a/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php b/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php
new file mode 100644
index 00000000000..8470436c8bd
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Store\App\Request;
+
+use \Magento\TestFramework\Helper\Bootstrap;
+use \Magento\Store\Model\ScopeInterface;
+use \Magento\Store\Model\Store;
+
+class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Store\App\Request\PathInfoProcessor
+     */
+    protected $pathProcessor;
+
+    protected function setUp()
+    {
+        $this->pathProcessor = Bootstrap::getObjectManager()->create('Magento\Store\App\Request\PathInfoProcessor');
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @dataProvider notValidStoreCodeDataProvider
+     */
+    public function testProcessNotValidStoreCode($pathInfo)
+    {
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface');
+        $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo));
+    }
+
+    public function notValidStoreCodeDataProvider()
+    {
+        return [
+            ['not_valid_store_code_int' => '/100500/m/c/a'],
+            ['not_valid_store_code_str' => '/test_string/m/c/a'],
+        ];
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
+     */
+    public function testProcessValidStoreCodeCase1()
+    {
+        /** @var \Magento\Store\Model\Store $store */
+        $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store');
+        $store->load('fixturestore', 'code');
+
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface');
+
+        /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */
+        $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface');
+        $config->setValue(Store::XML_PATH_STORE_IN_URL, false, ScopeInterface::SCOPE_STORE, $store->getCode());
+        $pathInfo = sprintf('/%s/m/c/a', $store->getCode());
+        $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo));
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
+     */
+    public function testProcessValidStoreCodeCase2()
+    {
+        /** @var \Magento\Store\Model\Store $store */
+        $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store');
+        $store->load('fixturestore', 'code');
+
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface');
+
+        /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */
+        $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface');
+        $config->setValue(Store::XML_PATH_STORE_IN_URL, true, ScopeInterface::SCOPE_STORE, $store->getCode());
+        $pathInfo = sprintf('/%s/m/c/a', $store->getCode());
+        $this->assertEquals('/m/c/a', $this->pathProcessor->process($request, $pathInfo));
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
+     */
+    public function testProcessValidStoreCodeCase3()
+    {
+        /** @var \Magento\Store\Model\Store $store */
+        $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store');
+        $store->load('fixturestore', 'code');
+
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create(
+            'Magento\Framework\App\RequestInterface',
+            ['directFrontNames' => [$store->getCode() => true]]
+        );
+
+        /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */
+        $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface');
+        $config->setValue(Store::XML_PATH_STORE_IN_URL, true, ScopeInterface::SCOPE_STORE, $store->getCode());
+        $pathInfo = sprintf('/%s/m/c/a', $store->getCode());
+        $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo));
+        $this->assertEquals('noroute', $request->getActionName());
+    }
+}
-- 
GitLab


From cca23f64882772fbf124b50a243b1699be5a449d Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Tue, 6 Oct 2015 16:37:43 +0300
Subject: [PATCH 276/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Configurable options fix
---
 lib/web/mage/gallery/gallery.js   |  4 ++--
 lib/web/mage/gallery/gallery.less | 11 +++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 8eed70fc449..2a7c02f9d1f 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -383,8 +383,8 @@ define([
                     returnCurrentImages: function () {
                         var images = [];
 
-                        _.each(settings.fotoramaApi.data, function (item) {
-                            images.push(item);
+                        _.each(this.fotorama.data, function (item) {
+                            images.push(_.omit(item, '$navThumbFrame', '$stageFrame'));
                         });
 
                         return images;
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 2034fc98abb..55d19ef61d8 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -509,6 +509,7 @@
 }
 
 .fotorama__thumb {
+  background-color: @color-gray92;
     height: 100%;
     overflow: hidden;
     position: relative;
@@ -1207,6 +1208,16 @@
     display: none;
 }
 
+.gallery-placeholder {
+    .loading-mask {
+        padding: 0 0 50%;
+        position: absolute;
+    }
+    .loader img {
+      position: absolute;
+    }
+}
+
 body.fotorama__fullscreen {
     overflow-y: hidden;
     .magnify-fullimage {
-- 
GitLab


From 0e8eaa1822d98db0e904516c1658c9f6e892a339 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Tue, 6 Oct 2015 16:43:02 +0300
Subject: [PATCH 277/420] MAGETWO-41964: Log created on random requests - leads
 to DoS attack

---
 app/code/Magento/Store/Controller/Store/SwitchAction.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Store/Controller/Store/SwitchAction.php b/app/code/Magento/Store/Controller/Store/SwitchAction.php
index 647b2cf6c32..b527b7ad4fe 100644
--- a/app/code/Magento/Store/Controller/Store/SwitchAction.php
+++ b/app/code/Magento/Store/Controller/Store/SwitchAction.php
@@ -9,6 +9,7 @@ namespace Magento\Store\Controller\Store;
 use Magento\Framework\App\Action\Action;
 use Magento\Framework\App\Action\Context as ActionContext;
 use Magento\Framework\App\Http\Context as HttpContext;
+use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Store\Api\StoreCookieManagerInterface;
 use Magento\Store\Api\StoreRepositoryInterface;
 use Magento\Store\Model\Store;
@@ -78,7 +79,7 @@ class SwitchAction extends Action
             $store = $this->storeRepository->getActiveStoreByCode($storeCode);
         } catch (StoreIsInactiveException $e) {
             $error = __('Requested store is inactive');
-        } catch (\InvalidArgumentException $e) {
+        } catch (NoSuchEntityException $e) {
             $error = __('Requested store is not found');
         }
 
-- 
GitLab


From 6d5f2b3ec843c825eb947650e3eb7055c03977ad Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Tue, 6 Oct 2015 16:43:31 +0300
Subject: [PATCH 278/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/mage/gallery/gallery.js   | 11 ++++++++---
 lib/web/mage/gallery/gallery.less |  1 +
 lib/web/magnifier/magnify.js      | 15 ++++++++++++++-
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 8eed70fc449..817e5ba6fc3 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -80,6 +80,9 @@ define([
                 isFullscreen: false,
                 api: null,
                 data: _.clone(pushMainFirst(config.data)),
+                onClick: function(){
+                    alert(1);
+                },
                 fullscreenData: []
             };
 
@@ -107,16 +110,17 @@ define([
         initFullscreenSettings: function () {
             var settings = this.settings,
                 self = this,
-                items = [];
+                items = [],
+                fotorama;
 
             settings.$gallery = this.settings.$element.find('[data-gallery-role="gallery"]');
+            settings.$stageShaft = this.settings.$element.find('[data-gallery-role="stage_shaft"]');
+            settings.$fullscreenIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
             settings.focusableStart = this.settings.$element.find('[data-gallery-role="fotorama__focusable-start"]');
             settings.focusableEnd = this.settings.$element.find('[data-gallery-role="fotorama__focusable-end"]');
             settings.closeIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
-
             settings.fullscreenConfig.swipe = true;
 
-
             settings.$gallery.on('fotorama:fullscreenenter', function () {
                 settings.$gallery.focus();
                 settings.focusableStart.bind('focusin', self._focusSwitcher);
@@ -141,6 +145,7 @@ define([
                 }
                 settings.api.updateData(_.clone(settings.data));
                 settings.isFullscreen = false;
+                settings.$fullscreenIcon.hide();
             });
         },
 
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 2034fc98abb..a6f45f10693 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -718,6 +718,7 @@
     top: 2px;
     width: @size-fotorama-block;
     z-index: @z-index-10;
+    display: none;
 }
 
 .fotorama__fullscreen-icon {
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 22b50c0e8d5..7f6ede63a7e 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -14,6 +14,7 @@ define([
             gallerySelector = '[data-gallery-role="gallery"]',
             magnifierSelector = '[data-gallery-role="magnifier"]',
             magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]',
+            fullScreenIcon = '[data-gallery-role="fotorama__fullscreen-icon"]',
             hideMagnifier,
             behaveOnHover;
 
@@ -38,7 +39,7 @@ define([
         behaveOnHover = function (e, initPos) {
             var pos = [e.pageX, e.pageY],
                 isArrow = $(e.target).data('gallery-role') === 'arrow',
-                isClick = initPos[0] ===  pos[0] && initPos[1] ===  pos[1];
+                isClick = initPos[0] === pos[0] && initPos[1] === pos[1];
             if (isArrow || !isClick) {
                 hideMagnifier();
             }
@@ -49,9 +50,21 @@ define([
         } else if (config.magnifierOpts.eventType === 'hover') {
             $(element).on('pointerdown mousedown MSPointerDown', function (e) {
                 var pos = [e.pageX, e.pageY];
+
                 $(element).on('mousemove pointermove MSPointerMove', function (ev) {
                     navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
                 });
+                $(element).on('click', function (e) {
+                    if ($(e.target).attr('data-gallery-role')) {
+                        $(gallerySelector).data('fotorama').requestFullScreen();
+                        $(fullScreenIcon).css({
+                            opacity: 1,
+                            visibility: 'visible',
+                            display: 'block'
+                        });
+                        hideMagnifier();
+                    }
+                });
                 $(document).on('mouseup pointerup MSPointerUp', function () {
                     $(element).off('mousemove pointermove MSPointerMove');
                 });
-- 
GitLab


From db71778910761dc70077b0ea360b63d8eaceadb8 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Tue, 6 Oct 2015 08:50:40 -0500
Subject: [PATCH 279/420] MAGETWO-39769: [GITHUB] lastInsertId returns 0 when
 PK is not AI #1445

---
 .../Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
index afb5b95f6e1..ccd92ab12cc 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
@@ -491,7 +491,8 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     /**
      * Test that we only set/override id on object if PK autoincrement is enabled
      * @param bool $pkIncrement
-     * @dataProvider testSaveNewObjectDataProvider
+     * @dataProvider saveNewObjectDataProvider
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     public function testSaveNewObject($pkIncrement)
     {
@@ -549,7 +550,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         $reflectionMethod->invokeArgs($model, [$inputObject]);
     }
 
-    public function testSaveNewObjectDataProvider()
+    public function saveNewObjectDataProvider()
     {
         return [[true], [false]];
     }
-- 
GitLab


From b52ff4e4e8dc395a7bed1af396aec721315dfe42 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Tue, 6 Oct 2015 17:41:56 +0300
Subject: [PATCH 280/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/mage/gallery/gallery.js | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index f4ff956402f..ece286a938f 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -80,9 +80,6 @@ define([
                 isFullscreen: false,
                 api: null,
                 data: _.clone(pushMainFirst(config.data)),
-                onClick: function(){
-                    alert(1);
-                },
                 fullscreenData: []
             };
 
-- 
GitLab


From 6ccf1d5ba4543c1ac766f0edf2a9cbdea0a54b68 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Tue, 6 Oct 2015 18:11:02 +0300
Subject: [PATCH 281/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/mage/gallery/gallery.less | 10 +---------
 lib/web/magnifier/magnify.js      |  5 +++--
 2 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 0d80e945f2e..7050eca9193 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -1030,18 +1030,10 @@
     overflow: hidden;
     position: absolute;
     top: 0;
-    z-index: @z-index-9;
-}
-
-.magnify-lens {
+    z-index: @z-index-8;
     background: rgba(255, 255, 255, 0.5);
-    border: solid 1px @color-gray-light2;
     color: @color-white;
-    left: 0;
-    position: absolute;
     text-align: center;
-    top: 0;
-    z-index: @z-index-10;
 }
 
 .magnifier-loader-text {
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 7f6ede63a7e..34abf723a50 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -54,8 +54,9 @@ define([
                 $(element).on('mousemove pointermove MSPointerMove', function (ev) {
                     navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
                 });
-                $(element).on('click', function (e) {
-                    if ($(e.target).attr('data-gallery-role')) {
+                $(element).on('click', '[data-gallery-role="magnifier-zoom"]', function (e) {
+
+                    if ($(e.target).attr('data-gallery-role') === 'magnifier-zoom') {
                         $(gallerySelector).data('fotorama').requestFullScreen();
                         $(fullScreenIcon).css({
                             opacity: 1,
-- 
GitLab


From 2457fa0144bc01e3594dde933d0da0efe800a27a Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Tue, 6 Oct 2015 18:27:59 +0300
Subject: [PATCH 282/420] MAGETWO-43593: PR

- fix FAT
---
 .../affected-attribute-set-selector/js.phtml           | 10 ++++++----
 app/code/Magento/Msrp/view/base/web/js/msrp.js         |  4 +++-
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
index a31a943b41f..70456828374 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
@@ -96,15 +96,17 @@
                     id: '<?php /* @escapeNotVerified */ echo $block->getJsId('close-button') ?>',
                     'class': 'action-close',
                     click: function() {
-                        $form.dialog('close');
+                        $form.modal('closeModal');
                     }
                 }]
             })
             .find('input[name=affected-attribute-set]').on('change', function() {
-                $('#affected-attribute-set-new-name-container')[$(this).val() == 'new' ? 'show' : 'hide']();
+                var affectedAttributeSet = $(this).val();
+                newAttributeSetContainer[affectedAttributeSet == 'new' ? 'show' : 'hide']();
+                existingAttributeSetContainer[affectedAttributeSet == 'existing' ? 'show' : 'hide']();
                 resetValidation();
-                if ($(this).val() == 'new') {
-                    $form.find('input[name=new-attribute-set-name]').focus();
+                if (affectedAttributeSet == 'new') {
+                    newAttributeSetContainer.find('input[name=new-attribute-set-name]').focus();
                 }
             });
     });
diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js
index 06bf5bda508..18ea804d238 100644
--- a/app/code/Magento/Msrp/view/base/web/js/msrp.js
+++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js
@@ -68,7 +68,9 @@ define([
             this.infoPopupDOM = $('[data-role=msrp-info-template]')[0];
 
             if (this.options.popupId) {
-                this.$popup = $(this.popupDOM.innerText).appendTo('body');
+                $('body').append($(this.popupDOM).html());
+                this.$popup = $($(this.popupDOM).html());
+
                 $(this.options.popupId).on('click', function (e) {
                     this.popUpOptions.position.of = $(e.target);
                     this.$popup.find(this.options.msrpLabelId).html(this.options.msrpPrice);
-- 
GitLab


From 1c979d52ff06858221a216c29db565c96e756fe2 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Tue, 6 Oct 2015 18:45:02 +0300
Subject: [PATCH 283/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/magnifier/magnify.js | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 34abf723a50..1706082a548 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -54,17 +54,14 @@ define([
                 $(element).on('mousemove pointermove MSPointerMove', function (ev) {
                     navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
                 });
-                $(element).on('click', '[data-gallery-role="magnifier-zoom"]', function (e) {
-
-                    if ($(e.target).attr('data-gallery-role') === 'magnifier-zoom') {
-                        $(gallerySelector).data('fotorama').requestFullScreen();
-                        $(fullScreenIcon).css({
-                            opacity: 1,
-                            visibility: 'visible',
-                            display: 'block'
-                        });
-                        hideMagnifier();
-                    }
+                $(element).on('click', '[data-gallery-role="magnifier-zoom"]', function () {
+                    $(gallerySelector).data('fotorama').requestFullScreen();
+                    $(fullScreenIcon).css({
+                        opacity: 1,
+                        visibility: 'visible',
+                        display: 'block'
+                    });
+                    hideMagnifier();
                 });
                 $(document).on('mouseup pointerup MSPointerUp', function () {
                     $(element).off('mousemove pointermove MSPointerMove');
-- 
GitLab


From 58ae2167e1c10eb74d4eab25116fca380a75c6de Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Wed, 7 Oct 2015 08:58:35 +0300
Subject: [PATCH 284/420] MAGETWO-43593: PR

- fix FAT
---
 .../Test/Block/Adminhtml/Block/CmsGrid.php    | 20 +++++++++----------
 .../Sales/Test/Block/Adminhtml/Order/Grid.php |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php
index 4ca3fe0ead7..1f4c5cfbd65 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php
@@ -28,36 +28,36 @@ class CmsGrid extends DataGrid
      */
     protected $filters = [
         'block_id_from' => [
-            'selector' => '[name="filters[block_id][from]"]',
+            'selector' => '[name="block_id[from]"]',
         ],
         'block_id_to' => [
-            'selector' => '[name="filters[block_id][to]"]',
+            'selector' => '[name="block_id[to]"]',
         ],
         'title' => [
-            'selector' => '[name="filters[title]"]',
+            'selector' => '[name="title"]',
         ],
         'identifier' => [
-            'selector' => '[name="filters[identifier]"]',
+            'selector' => '[name="identifier"]',
         ],
         'store_id' => [
-            'selector' => '[name="filters[store_id]"]',
+            'selector' => '[name="store_id"]',
             'input' => 'simplifiedselect'
         ],
         'is_active' => [
-            'selector' => '[name="filters[is_active]"]',
+            'selector' => '[name="is_active"]',
             'input' => 'select',
         ],
         'creation_time_from' => [
-            'selector' => '[name="filters[creation_time][from]"]',
+            'selector' => '[name="creation_time[from]"]',
         ],
         'creation_time_to' => [
-            'selector' => '[name="filters[creation_time][to]"]',
+            'selector' => '[name="creation_time[to]"]',
         ],
         'update_time_from' => [
-            'selector' => '[name="filters[update_time][from]"]',
+            'selector' => '[name="update_time[from]"]',
         ],
         'update_time_to' => [
-            'selector' => '[name="filters[update_time][to]"]',
+            'selector' => '[name="update_time[to]"]',
         ],
     ];
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
index 75078a0d021..e819f13a458 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
@@ -67,7 +67,7 @@ class Grid extends DataGrid
      *
      * @var string
      */
-    protected $purchasePointFilter = '[name="filters[store_id]"]';
+    protected $purchasePointFilter = '[name="store_id"]';
 
     /**
      * Order Id td selector.
-- 
GitLab


From 55979353724e0dd85295f7f87b19ee7eae5779cf Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Wed, 7 Oct 2015 10:13:17 +0300
Subject: [PATCH 285/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix code style
---
 lib/internal/Magento/Framework/Config/View.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index fed26a0e3a0..9c0df74c96e 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -78,8 +78,7 @@ class View extends \Magento\Framework\Config\AbstractXml
                 $result[$varName] = $this->parseVarElement($varNode);
             }
         }
-        if (!count($result))
-        {
+        if (!count($result)) {
             $result = $node->nodeValue;
         }
 
-- 
GitLab


From 08e209821231f89ab6f37ea32e5cf25b6276da8d Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Wed, 7 Oct 2015 12:00:38 +0300
Subject: [PATCH 286/420] PV-224: CSS to LESS refactoring. Added Magento UI
 components

---
 .../web/css/source/_module.less               | 67 +++++++++----------
 1 file changed, 31 insertions(+), 36 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index 7f13601b809..d2dee0e80e1 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -60,11 +60,11 @@
     &.field-video_image .admin__field-control {
         position: relative;
         &:after {
-            color: #000;
+            color: @color-black;
             content: 'Role';
-            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-            font-size: 1.4rem;
-            font-weight: 600;
+            font-family: 'Open Sans', @font-family__sans-serif;
+            font-size: @font-size__s + 0.2;
+            font-weight: @font-weight__semibold;
             height: 20px;
             position: absolute;
             right: 50px;
@@ -90,37 +90,32 @@
         }
     }
     .gallery .image .action-make-base {
-        background: transparent;
-        border: 0;
+        .lib-button(
+            @_button-background: transparent,
+            @_button-border: none,
+            @_button-background-hover: transparent,
+            @_button-border-hover: none,
+            @_button-background-active: transparent,
+            @_button-border-active: none,
+            @_button-font-content: '\e63b',
+            @_button-icon-use: true,
+            @_button-icon-font: 'Admin Icons',
+            @_button-icon-font-text-hide: true,
+            @_button-icon-font-size: @font-size__xl,
+            @_button-icon-font-color: @color-gray62,
+            @_button-icon-font-color-hover: @color-gray52,
+            @_button-icon-font-color-active: @color-gray52,
+            @_button-margin: 0
+        );
         bottom: 9px;
-        height: 0;
         left: auto;
-        margin: 0;
         position: absolute;
         right: 9px;
         width: 0 !important;
-        &:after {
-            color: #9e9e9e;
-            content: '\e63b';
-            display: inline-block;
-            font-family: 'Admin Icons';
-            font-size: 1.8rem;
-            font-weight: normal;
-            left: -4px;
-            line-height: inherit;
-            overflow: hidden;
+        &:before {
+            left: 16px;
             position: absolute;
-            text-align: center;
-            top: -7px;
-            vertical-align: middle;
-            -webkit-font-smoothing: antialiased;
-            speak: none;
-        }
-        &:hover:after {
-            color: #7d7d7d;
-        }
-        span {
-            display: none;
+            top: -2px;
         }
     }
     .base-image .image-label {
@@ -183,25 +178,25 @@
         margin-bottom: 7px;
         display: none;
         &:after {
-            content: " "; /* Older browser do not support empty content */
+            content: "";
             visibility: hidden;
             display: block;
             height: 0;
             clear: both;
         }
         label {
-            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-            font-size: 1.4rem;
-            font-weight: 600;
+            font-family: 'Open Sans', @font-family__sans-serif;
+            font-size: @font-size__s + 0.2;
+            font-weight: @font-weight__semibold;
             display: block;
             width: 25%;
             float: left;
             text-align: right;
         }
         span {
-            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-            font-size: 1.4rem;
-            font-weight: 300;
+            font-family: 'Open Sans', @font-family__sans-serif;
+            font-size: @font-size__s + 0.2;
+            font-weight: @font-weight__light;
             display: block;
             width: 74.9999%;
             float: left;
-- 
GitLab


From cd5d0ee563a97727bb359eaee615ca46a78c2e1b Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Wed, 7 Oct 2015 12:05:07 +0300
Subject: [PATCH 287/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix breakpoints
---
 .../view/frontend/templates/product/view/gallery.phtml      | 4 ++--
 app/design/frontend/Magento/luma/etc/view.xml               | 6 +++---
 lib/web/fotorama/fotorama.js                                | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 413f1cfe921..7bc5622d15d 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -27,7 +27,7 @@
                 "magnifierOpts": <?php /* @escapeNotVerified */ echo $block->getMagnifier(); ?>,
                 "data": <?php /* @escapeNotVerified */ echo $block->getGalleryImagesJson(); ?>,
                 "options": {
-                    "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/navigation"); ?>",
+                    "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/nav"); ?>",
                     "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/loop"); ?>,
                     "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/keyboard"); ?>,
                     "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/arrows"); ?>,
@@ -46,7 +46,7 @@
                     "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>"
                 },
                 "fullscreen": {
-                    "nav": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navigation"); ?>",
+                    "nav": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/nav"); ?>",
                     "loop": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/loop"); ?>,
                     "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navdir"); ?>",
                     "arrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/arrows"); ?>,
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index ce50357dba1..ed78bbf2074 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -185,7 +185,7 @@
 
         <!-- Gallery and magnifier theme settings. Start -->
         <var name="gallery">
-            <var name="navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+            <var name="nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
             <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
             <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
             <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
@@ -199,7 +199,7 @@
                 <var name="duration">500</var> <!-- Sets transition duration in ms -->
             </var>
             <var name="fullscreen">
-                <var name="navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+                <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
                 <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
                 <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
                 <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
@@ -233,7 +233,7 @@
                 </var>
                 <var name="options">
                     <var name="options">
-                        <var name="navigation">dots</var>
+                        <var name="nav">dots</var>
                     </var>
                     <var name="magnifierOpts">
                         <var name="enabled">false</var>
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 5a9f700255f..6fba2031b5a 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -3661,7 +3661,7 @@ fotoramaVersion = '4.6.4';
                 this.inProgress = false;
             },
             calcThumbSlideTime: function(msec){
-                return msec/10;
+                return msec/25;
             }
         };
 
-- 
GitLab


From 3a466da363378b28ff85e4367d3cf134c452b64d Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Wed, 7 Oct 2015 12:41:37 +0300
Subject: [PATCH 288/420] MAGETWO-43593: PR

---
 .../Backend/view/adminhtml/templates/store/switcher.phtml       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
index f405298c178..293733ae9d7 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
@@ -182,7 +182,7 @@ require([
                         reload();
                     },
                     cancel: function() {
-                        obj.value = '<?php echo $block->getStoreId() ?>';
+                        obj.value = '<?php echo $block->escapeHtml($block->getStoreId()) ?>';
                     }
                 }
             });
-- 
GitLab


From e2cdf73c643d0fce728eab2348c07b1011441d8b Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Wed, 7 Oct 2015 12:42:40 +0300
Subject: [PATCH 289/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 app/design/frontend/Magento/luma/etc/view.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 483ebc5cb1e..e328e6857d7 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -86,8 +86,8 @@
                 <height>110</height>
             </image>
             <image id="product_page_main_image" type="image">
-                <width>560</width>
-                <height>700</height>
+                <width>700</width>
+                <height>560</height>
             </image>
             <image id="product_page_main_image_default" type="image">
                 <width>700</width>
-- 
GitLab


From a41bdb0d956e37b05c62bec75966a93d0b169822 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Wed, 7 Oct 2015 12:49:58 +0300
Subject: [PATCH 290/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/mage/gallery/gallery.js | 12 ++++++++++++
 lib/web/magnifier/magnify.js    |  9 ---------
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index ece286a938f..c8617dc6be0 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -90,6 +90,7 @@ define([
                 });
             });
 
+
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
 
@@ -99,6 +100,17 @@ define([
             this.initApi();
             this.setupBreakpoints();
             this.initFullscreenSettings();
+
+            this.settings.$element.on('click', '.fotorama__stage__frame', function () {
+                if (parseInt($('[data-gallery-role="stage-shaft"]')[0].style.left) === 0 ) {
+                    $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
+                    $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
+                        opacity: 1,
+                        visibility: 'visible',
+                        display: 'block'
+                    });
+                }
+            }.bind(this));
         },
 
         /**
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 1706082a548..5446e2c2643 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -54,15 +54,6 @@ define([
                 $(element).on('mousemove pointermove MSPointerMove', function (ev) {
                     navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
                 });
-                $(element).on('click', '[data-gallery-role="magnifier-zoom"]', function () {
-                    $(gallerySelector).data('fotorama').requestFullScreen();
-                    $(fullScreenIcon).css({
-                        opacity: 1,
-                        visibility: 'visible',
-                        display: 'block'
-                    });
-                    hideMagnifier();
-                });
                 $(document).on('mouseup pointerup MSPointerUp', function () {
                     $(element).off('mousemove pointermove MSPointerMove');
                 });
-- 
GitLab


From a63d28bb08ce9ce3850ef4baf848420e59d412b0 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 7 Oct 2015 15:46:24 +0300
Subject: [PATCH 291/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix fullscreen images
---
 .../Catalog/Block/Product/View/Gallery.php    |  4 +--
 .../ConfigurableProduct/Helper/Data.php       |  2 +-
 lib/web/mage/gallery/gallery.js               | 29 ++++++-------------
 lib/web/magnifier/magnifier.js                | 25 +++++++---------
 lib/web/magnifier/magnify.js                  |  5 ++--
 5 files changed, 26 insertions(+), 39 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index 6bcb8e66813..a7a546bc80a 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -112,7 +112,7 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
             $imagesItems[] = [
                 'thumb' => $image->getData('small_image_url'),
                 'img' => $image->getData('medium_image_url'),
-                'original' => $image->getData('large_image_url'),
+                'full' => $image->getData('large_image_url'),
                 'caption' => $image->getLabel(),
                 'position' => $image->getPosition(),
                 'isMain' => $this->isMainImage($image),
@@ -122,7 +122,7 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
             $imagesItems[] = [
                 'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('thumbnail'),
                 'img' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
-                'original' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
+                'full' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
                 'caption' => '',
                 'position' => '0',
                 'isMain' => true,
diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php
index 347be9282be..91dd7224242 100644
--- a/app/code/Magento/ConfigurableProduct/Helper/Data.php
+++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php
@@ -87,7 +87,7 @@ class Data
                         [
                             'thumb' => $image->getData('small_image_url'),
                             'img' => $image->getData('medium_image_url'),
-                            'original' => $image->getData('large_image_url'),
+                            'full' => $image->getData('large_image_url'),
                             'caption' => $image->getLabel(),
                             'position' => $image->getPosition(),
                             'isMain' => $image->getFile() == $product->getImage(),
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 2a7c02f9d1f..60d467491a6 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -34,6 +34,8 @@ define([
         if(mainIndex > -1){
             data.unshift(data.splice(mainIndex, 1)[0]);
         }
+
+        return data;
     };
 
     return Class.extend({
@@ -58,8 +60,6 @@ define([
          * @param {String} element - String selector of gallery DOM element.
          */
         initialize: function (config, element) {
-            var fullscreenData = [];
-
             this._super();
 
             _.bindAll(this,
@@ -79,17 +79,8 @@ define([
                 fotoramaApi: null,
                 isFullscreen: false,
                 api: null,
-                data: _.clone(pushMainFirst(config.data)),
-                fullscreenData: []
+                data: _.clone(pushMainFirst(config.data))
             };
-
-            _.each(_.clone(this.settings.data), function (item) {
-                fullscreenData.push({
-                    img: item.original,
-                    thumb: item.thumb
-                });
-            });
-
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
 
@@ -113,10 +104,8 @@ define([
             settings.focusableStart = this.settings.$element.find('[data-gallery-role="fotorama__focusable-start"]');
             settings.focusableEnd = this.settings.$element.find('[data-gallery-role="fotorama__focusable-end"]');
             settings.closeIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
-
             settings.fullscreenConfig.swipe = true;
 
-
             settings.$gallery.on('fotorama:fullscreenenter', function () {
                 settings.$gallery.focus();
                 settings.focusableStart.bind('focusin', self._focusSwitcher);
@@ -127,7 +116,6 @@ define([
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
-                settings.api.updateData(_.clone(settings.fullscreenData));
                 settings.isFullscreen = true;
             });
 
@@ -139,7 +127,6 @@ define([
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
-                settings.api.updateData(_.clone(settings.data));
                 settings.isFullscreen = false;
             });
         },
@@ -366,10 +353,12 @@ define([
                         if (_.isArray(data)) {
                             pushMainFirst(data);
                             settings.fotoramaApi.load(data);
-                            $.extend(false, settings.defaultConfig, {
-                                data: data
+
+                            _.extend(settings, {
+                                data: data,
+                                defaultConfig: data
                             });
-                            $.extend(false, config, {
+                            _.extend(config, {
                                 data: data
                             });
                         }
@@ -384,7 +373,7 @@ define([
                         var images = [];
 
                         _.each(this.fotorama.data, function (item) {
-                            images.push(_.omit(item, '$navThumbFrame', '$stageFrame'));
+                            images.push(_.omit(item, '$navThumbFrame', '$navDotFrame', '$stageFrame'));
                         });
 
                         return images;
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index cdc3b13c2b7..5a4f4ac7032 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -584,7 +584,7 @@
 
             $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
                 var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
                     $imageContainer = $preview.parent(),
                     gallery = $('[data-gallery-role="gallery"]');
 
@@ -596,12 +596,9 @@
                 });
 
                 if (gallery.data('fotorama').fullScreen) {
-                    //if (!$imageContainer.find('.' + MagnifyCls.magnifyFull).length) {
-                    //    $imageContainer.append('<img class="' + MagnifyCls.magnifyFull + '" src ="' + options.full + '"/>');
-                    //}
                     toggleZoomButtons($image);
 
-                    $('.fotorama__stage__frame .fotorama__img').each(function () {
+                    $('.fotorama__stage__frame .fotorama__img--full').each(function () {
                         var path = $(this).attr("src"),
                             imgSize;
                         if (path) {
@@ -694,7 +691,7 @@
                 });
 
                 $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
-                    if (gallery.data('fotorama').fullScreen) {
+                    if (gallery.data('fotorama').fullScreen && isDragActive) {
                         isDragActive = false;
                         $image.css('cursor', 'pointer');
                     }
@@ -710,7 +707,7 @@
         }
 
         if ($('.fotorama-item').data('fotorama').fullScreen) {
-            $('.fotorama__stage__frame .fotorama__img').each(function () {
+            $('.fotorama__stage__frame .fotorama__img--full').each(function () {
                 var image = new Image();
                 image.src = $(this).attr("src");
 
@@ -732,7 +729,7 @@
 
             if ($('.fotorama-item').data('fotorama').fullScreen) {
 
-                $('.fotorama__stage__frame .fotorama__img').each(function () {
+                $('.fotorama__stage__frame .fotorama__img--full').each(function () {
                     var image = new Image();
                     image.src = $(this).attr("src");
 
@@ -748,7 +745,7 @@
                     }
                 });
 
-                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] img'));
+                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'));
             }
 
 
@@ -760,7 +757,7 @@
             if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
 
                 var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .magnify-fullimage'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
                     $imageContainer = $preview.parent(),
                     gallery = $('[data-gallery-role="gallery"]'),
                     top, left;
@@ -796,10 +793,10 @@
         }
 
         function zoomIn(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
                 gallery = $('[data-gallery-role="gallery"]'),
                 imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() + options.inc);
+                setedResult = Math.round($image.width() + parseFloat(options.fullscreenzoom));
             if(e) {
                 e.preventDefault();
             }
@@ -813,10 +810,10 @@
         }
 
         function zoomOut(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
                 gallery = $('[data-gallery-role="gallery"]'),
                 imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() - options.inc);
+                setedResult = Math.round($image.width() - parseFloat(options.fullscreenzoom));
             if (e) {
                 e.preventDefault();
             }
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 22b50c0e8d5..330dbeb52ff 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -60,7 +60,7 @@ define([
 
         $.extend(config.magnifierOpts, {
             zoomable: false,
-            thumb: '.fotorama__img',
+            thumb: '.fotorama__img:not(".fotorama__img--full")',
             largeWrapper: '[data-gallery-role="magnifier"]',
             height: config.magnifierOpts.height || function () {
                 return $('[data-active="true"]').height();
@@ -81,7 +81,8 @@ define([
         $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
-            config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].original;
+            config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].full;
+            debugger;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('gallery:loaded', function () {
-- 
GitLab


From a4ab20116effa0ceedcffc3dcaac80059e80ff89 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Wed, 7 Oct 2015 16:31:33 +0300
Subject: [PATCH 292/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

---
 lib/web/mage/gallery/gallery.js   | 12 ++++++++++++
 lib/web/mage/gallery/gallery.less | 11 ++---------
 lib/web/magnifier/magnify.js      |  1 -
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 60d467491a6..df34178eabc 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -90,6 +90,16 @@ define([
             this.initApi();
             this.setupBreakpoints();
             this.initFullscreenSettings();
+            this.settings.$element.on('click', '.fotorama__stage__frame', function () {
+                if (parseInt($('[data-gallery-role="stage-shaft"]')[0].style.left) === 0) {
+                    $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
+                    $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
+                        opacity: 1,
+                        visibility: 'visible',
+                        display: 'block'
+                    });
+                }
+            });
         },
 
         /**
@@ -101,6 +111,7 @@ define([
                 items = [];
 
             settings.$gallery = this.settings.$element.find('[data-gallery-role="gallery"]');
+            settings.$fullscreenIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
             settings.focusableStart = this.settings.$element.find('[data-gallery-role="fotorama__focusable-start"]');
             settings.focusableEnd = this.settings.$element.find('[data-gallery-role="fotorama__focusable-end"]');
             settings.closeIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
@@ -128,6 +139,7 @@ define([
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
                 settings.isFullscreen = false;
+                settings.$fullscreenIcon.hide();
             });
         },
 
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 55d19ef61d8..12e4c73c713 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -719,6 +719,7 @@
     top: 2px;
     width: @size-fotorama-block;
     z-index: @z-index-10;
+    display:  none;
 }
 
 .fotorama__fullscreen-icon {
@@ -1029,18 +1030,10 @@
     overflow: hidden;
     position: absolute;
     top: 0;
-    z-index: @z-index-9;
-}
-
-.magnify-lens {
+    z-index: @z-index-8;
     background: rgba(255, 255, 255, 0.5);
-    border: solid 1px @color-gray-light2;
     color: @color-white;
-    left: 0;
-    position: absolute;
     text-align: center;
-    top: 0;
-    z-index: @z-index-10;
 }
 
 .magnifier-loader-text {
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index 330dbeb52ff..76751b2829b 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -82,7 +82,6 @@ define([
             hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
             config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].full;
-            debugger;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
         $(element).on('gallery:loaded', function () {
-- 
GitLab


From 8b5ecdae4173aca00769572924dc0bf04b352eae Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Wed, 7 Oct 2015 17:21:49 +0300
Subject: [PATCH 293/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix thumbs navtype
---
 lib/web/fotorama/fotorama.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index b941b95e12d..1141f9d1473 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -3104,6 +3104,7 @@ fotoramaVersion = '4.6.4';
                         pos: pos,
                         direction: opts.navdir,
                         onEnd: function () {
+                            thumbsDraw(pos, true);
                             thumbArrUpdate();
                         }
                     });
-- 
GitLab


From 34f409f86a57234f995af812b5ec26561c0f6c96 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Wed, 7 Oct 2015 17:33:39 +0300
Subject: [PATCH 294/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix issue with classes inheritance
---
 .../Magento/ProductVideo/Block/Product/View/Gallery.php    | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
index ce93d93700a..af26e074a02 100644
--- a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
+++ b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
@@ -18,11 +18,6 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery
      */
     protected $mediaHelper;
 
-    /**
-     * @var \Magento\Framework\Json\EncoderInterface
-     */
-    private $jsonEncoder;
-
     /**
      * @param \Magento\Catalog\Block\Product\Context $context
      * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils
@@ -40,10 +35,10 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery
         parent::__construct(
             $context,
             $arrayUtils,
+            $jsonEncoder,
             $data
         );
         $this->mediaHelper = $mediaHelper;
-        $this->jsonEncoder = $jsonEncoder;
     }
 
     /**
-- 
GitLab


From c2f173df231bd2cd6fb1d061ca3b67b5650a7bc8 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Wed, 7 Oct 2015 18:31:21 +0300
Subject: [PATCH 295/420] MAGETWO-41964: Log created on random requests - leads
 to DoS attack

---
 app/code/Magento/Store/Model/StoreRepository.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Store/Model/StoreRepository.php b/app/code/Magento/Store/Model/StoreRepository.php
index da72fae5cff..26c466f6cf9 100644
--- a/app/code/Magento/Store/Model/StoreRepository.php
+++ b/app/code/Magento/Store/Model/StoreRepository.php
@@ -57,7 +57,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
         $store = $this->storeFactory->create();
         $store->load($code, 'code');
         if ($store->getId() === null) {
-            throw new NoSuchEntityException();
+            throw new NoSuchEntityException(__('Requested store is not found'));
         }
         $this->entities[$code] = $store;
         $this->entitiesById[$store->getId()] = $store;
@@ -88,7 +88,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
         $store = $this->storeFactory->create();
         $store->load($id);
         if ($store->getId() === null) {
-            throw new NoSuchEntityException();
+            throw new NoSuchEntityException(__('Requested store is not found'));
         }
         $this->entitiesById[$id] = $store;
         $this->entities[$store->getCode()] = $store;
-- 
GitLab


From 41f6d492663ed07316e84b6a96a861673439b184 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Wed, 7 Oct 2015 18:53:54 +0300
Subject: [PATCH 296/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix ProductVideo initialization
---
 .../frontend/layout/catalog_product_view.xml  |  4 +-
 .../view/frontend/requirejs-config.js         |  1 -
 .../templates/product/view/gallery.phtml      | 65 ++-----------------
 .../web/js/fotorama-add-video-events.js       | 22 ++++---
 .../view/frontend/web/js/load-player.js       |  2 +-
 5 files changed, 19 insertions(+), 75 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
index 81d7989a521..a8fd6ae7725 100644
--- a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
+++ b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
@@ -8,12 +8,10 @@
 <page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <head>
         <css src="Magento_ProductVideo::css/product-video.css"/>
-        <link src="Magento_ProductVideo::js/fotorama-add-video-events.js"/>
-        <link src="Magento_ProductVideo::js/load-player.js"/>
     </head>
     <body>
         <referenceContainer name="product.info.media">
-            <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.image" template="product/view/gallery.phtml"/>
+            <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.video" after="product.info.media.image" template="product/view/gallery.phtml"/>
         </referenceContainer>
     </body>
 </page>
diff --git a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
index 956dd40b89e..e19b89135b4 100644
--- a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
+++ b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
@@ -6,7 +6,6 @@
 var config = {
     map: {
         '*': {
-            fotoramaAddVideoEvents: 'Magento_ProductVideo/js/fotorama-add-video-events',
             loadPlayer: 'Magento_ProductVideo/js/load-player'
         }
     }
diff --git a/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml
index 192a3f18e2c..131b9f7e4ff 100644
--- a/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml
@@ -10,69 +10,12 @@
  * @var $block \Magento\ProductVideo\Block\Product\View\Gallery
  */
 ?>
-<div class="gallery-placeholder"
-     data-mage-init='{"fotoramaAddVideoEvents":{}}'
-     data-fotorama-video-data='<?php /* @escapeNotVerified */ echo $block->getMediaGalleryDataJson(); ?>'
-     data-fotorama-video-settings='<?php /* @escapeNotVerified */ echo $block->getVideoSettingsJson(); ?>'>
-</div>
 <script type="text/x-magento-init">
     {
-        ".gallery-placeholder": {
-            "mage/gallery/gallery": {
-                "mixins":["magnifier/magnify"],
-                "magnifierOpts": {
-                    "enabled": <?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:enabled", "Magento_Catalog"); ?>,
-                    "eventType": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:action", "Magento_Catalog"); ?>",
-                    "width": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:width", "Magento_Catalog"); ?>",
-                    "height": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:height", "Magento_Catalog"); ?>",
-                    "top": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:top", "Magento_Catalog"); ?>",
-                    "left": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:left", "Magento_Catalog"); ?>"
-                },
-                "data": <?php /* @escapeNotVerified */
-    echo $block->getGalleryImagesJson(); ?>,
-                "options": {
-                    "nav": "<?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:nav", "Magento_Catalog"); ?>",
-                    "loop": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:loop", "Magento_Catalog"); ?>,
-                    "keyboard": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:keyboard", "Magento_Catalog"); ?>,
-                    "arrows": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:arrows", "Magento_Catalog"); ?>,
-                    "showCaption": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:showCaption", "Magento_Catalog"); ?>,
-                    "width": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
-                    "thumbwidth": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
-                    "thumbheight": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_small', 'height')
-        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
-                    "height": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_medium', 'height')
-        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
-                },
-                "breakpoints": {
-                    "mobile": {
-                        "conditions": {
-                            "max-width": "767px"
-                        },
-                        "options": {
-                            "options": {
-                                "nav": "dots"
-                            },
-                            "magnifierOpts": {
-                                "enabled": false
-                            }
-                        }
-                    }
-                }
+        "[data-gallery-role=gallery-placeholder]": {
+            "Magento_ProductVideo/js/fotorama-add-video-events": {
+                "fotoramaVideoData": <?php /* @escapeNotVerified */ echo $block->getMediaGalleryDataJson(); ?>,
+                "fotoramaVideoSettings": <?php /* @escapeNotVerified */ echo $block->getVideoSettingsJson(); ?>
             }
         }
     }
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index e19d635a72b..8b8f92f5b44 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -3,7 +3,12 @@
  * See COPYING.txt for license details.
  */
 
-require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
+define([
+    'jquery',
+    'jquery/ui',
+    'catalogGallery',
+    'Magento_ProductVideo/js/load-player'
+], function ($) {
     'use strict';
 
     /**
@@ -547,13 +552,12 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
         }
     });
 
-    $('.gallery-placeholder').on('fotorama:ready', function () {
-        $(this).find('.fotorama').AddFotoramaVideoEvents({
-            VideoData: $(this).data('fotorama-video-data'),
-            VideoSettings: $(this).data('fotorama-video-settings')
+    return function (config, element) {
+        $('.gallery-placeholder').on('fotorama:ready', function () {
+            $(element).find('.fotorama').AddFotoramaVideoEvents({
+                VideoData: config.fotoramaVideoData || [],
+                VideoSettings: config.fotoramaVideoSettings || {}
+            });
         });
-        //no reason to store video data and settings after - erase it
-        $(this).removeAttr('data-fotorama-video-data');
-        $(this).removeAttr('data-fotorama-video-settings');
-    });
+    };
 });
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js b/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js
index 1f1c08bbe8d..937c62ae26c 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js
@@ -7,7 +7,7 @@
  @version 0.0.1
  @requires jQuery & jQuery UI
  */
-require(['jquery', 'jquery/ui'], function ($) {
+define(['jquery', 'jquery/ui'], function ($) {
     'use strict';
 
     var videoRegister = {
-- 
GitLab


From dcfafc9be23a271d6a79802468ab04b06c14291a Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 7 Oct 2015 19:09:40 +0300
Subject: [PATCH 297/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix fullscreen click handler
- Fix magnify styles
---
 lib/web/mage/gallery/gallery.js   | 18 ++++++++----------
 lib/web/mage/gallery/gallery.less |  8 ++++++++
 lib/web/magnifier/magnifier.js    | 26 +++++++++++++++-----------
 3 files changed, 31 insertions(+), 21 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index df34178eabc..2f38ea505aa 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -91,14 +91,12 @@ define([
             this.setupBreakpoints();
             this.initFullscreenSettings();
             this.settings.$element.on('click', '.fotorama__stage__frame', function () {
-                if (parseInt($('[data-gallery-role="stage-shaft"]')[0].style.left) === 0) {
-                    $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
-                    $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
-                        opacity: 1,
-                        visibility: 'visible',
-                        display: 'block'
-                    });
-                }
+                $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
+                $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
+                    opacity: 1,
+                    visibility: 'visible',
+                    display: 'block'
+                });
             });
         },
 
@@ -366,11 +364,11 @@ define([
                             pushMainFirst(data);
                             settings.fotoramaApi.load(data);
 
-                            _.extend(settings, {
+                            $.extend(false, settings, {
                                 data: data,
                                 defaultConfig: data
                             });
-                            _.extend(config, {
+                            $.extend(false, config, {
                                 data: data
                             });
                         }
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 12e4c73c713..f6db8bb7761 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -1031,9 +1031,17 @@
     position: absolute;
     top: 0;
     z-index: @z-index-8;
+}
+
+.magnify-lens {
     background: rgba(255, 255, 255, 0.5);
+    border: solid 1px @color-gray-light2;
     color: @color-white;
+    left: 0;
+    position: absolute;
     text-align: center;
+    top: 0;
+    z-index: @z-index-10;
 }
 
 .magnifier-loader-text {
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 5a4f4ac7032..1630f5506e0 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -24,7 +24,8 @@
             $thumb,
             that = this,
             largeWrapper = options.largeWrapper ||  ".magnifier-preview",
-            $largeWrapper = $(largeWrapper);
+            $largeWrapper = $(largeWrapper),
+            isDraggable = false;
         curThumb = null,
             currentOpts = {
                 x: 0,
@@ -624,7 +625,7 @@
                 }
 
                 $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
-                    if (gallery.data('fotorama').fullScreen) {
+                    if (gallery.data('fotorama').fullScreen && isDraggable) {
                         e.preventDefault();
 
                         $image.css('cursor', 'move');
@@ -645,7 +646,7 @@
 
 
                 $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
-                    if (gallery.data('fotorama').fullScreen && isDragActive) {
+                    if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
 
                         var top,
                             left,
@@ -691,9 +692,11 @@
                 });
 
                 $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
-                    if (gallery.data('fotorama').fullScreen && isDragActive) {
+                    if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
                         isDragActive = false;
                         $image.css('cursor', 'pointer');
+
+                        return false;
                     }
                 });
             });
@@ -762,7 +765,7 @@
                     gallery = $('[data-gallery-role="gallery"]'),
                     top, left;
 
-                if (($imageContainer.offset().top + $imageContainer.height()) > ($image.offset().top + $image.height())) {
+                if ($imageContainer.offset().top + $imageContainer.height() > $image.offset().top + $image.height()) {
                     top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
                 } else {
                     top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
@@ -772,12 +775,11 @@
                     $image.css('top', top);
                 }
 
-                if (($imageContainer.offset().left + $imageContainer.width()) > ($image.offset().left + $image.width())) {
+                if ($imageContainer.offset().left + $imageContainer.width() > $image.offset().left + $image.width()) {
                     left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
                 } else {
-                    left = ($imageContainer.offset().left < $image.offset().left) ? 0 : left;
+                    left = $imageContainer.offset().left < $image.offset().left ? 0 : left;
                 }
-
                 if (left !== undefined) {
                     $image.css('left', left);
                 }
@@ -801,11 +803,11 @@
                 e.preventDefault();
             }
 
-
             if (setedResult > imgOriginalSize.rw) {
                 setedResult = imgOriginalSize.rw;
             }
             $image.css({'width': setedResult, height: 'auto'});
+            isDraggable = true;
             checkFullscreenImagePosition();
         }
 
@@ -819,10 +821,12 @@
             }
 
             if ($image.width() > $image.height() && $image.width() <= $image.parent().width()) {
-                return
+                isDraggable = false;
+                return;
             }
             if ($image.width() <= $image.height() && $image.height() <= $image.parent().height()) {
-                return
+                isDraggable = false;
+                return;
             }
 
             $image.css({'width': setedResult, height: 'auto'});
-- 
GitLab


From 4c67f969ffea5718d83dff82f142d99dbb2d42f4 Mon Sep 17 00:00:00 2001
From: Maksym Savich <msavich@ebay.com>
Date: Wed, 7 Oct 2015 18:12:49 -0500
Subject: [PATCH 298/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

- Web installation competing code generation process workaround
---
 setup/pub/magento/setup/readiness-check.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index e1c8a0ad9db..e176d9b6045 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -304,8 +304,10 @@ angular.module('readiness-check', [])
             angular.forEach($scope.items, function(item) {
                 item.show();
             });
+            var $delay = 0;
             angular.forEach($scope.items, function(item) {
-                $scope.query(item);
+                $timeout( function(){ $scope.query(item); }, $delay * 1000);
+                $delay++;
             });
         };
 
-- 
GitLab


From 8e58706e77f618ea9750c0d93ee1e298fe190ee0 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Wed, 7 Oct 2015 18:17:22 -0500
Subject: [PATCH 299/420] MAGETWO-39769: [GITHUB] lastInsertId returns 0 when
 PK is not AI #1445

---
 app/code/Magento/Tax/Model/Resource/Calculation.php | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/app/code/Magento/Tax/Model/Resource/Calculation.php b/app/code/Magento/Tax/Model/Resource/Calculation.php
index 2bcc8382d79..567366e3901 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation.php
+++ b/app/code/Magento/Tax/Model/Resource/Calculation.php
@@ -24,13 +24,6 @@ class Calculation extends \Magento\Framework\Model\Resource\Db\AbstractDb
      */
     protected $_ratesCache = [];
 
-    /**
-     * Primary key auto increment flag
-     *
-     * @var bool
-     */
-    protected $_isPkAutoIncrement = false;
-
     /**
      * Tax data
      *
-- 
GitLab


From cb83052cb83938364cd1a1f93356dbf6c671ebc8 Mon Sep 17 00:00:00 2001
From: Maksym Savich <msavich@ebay.com>
Date: Wed, 7 Oct 2015 18:17:32 -0500
Subject: [PATCH 300/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

- Web installation competing code generation process workaround, CR
---
 setup/pub/magento/setup/readiness-check.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index e176d9b6045..cefedae21c4 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -306,7 +306,7 @@ angular.module('readiness-check', [])
             });
             var $delay = 0;
             angular.forEach($scope.items, function(item) {
-                $timeout( function(){ $scope.query(item); }, $delay * 1000);
+                $timeout(function(){ $scope.query(item); }, $delay * 1000);
                 $delay++;
             });
         };
-- 
GitLab


From df124fcd89ce3df03b87609eb6624702e6173d92 Mon Sep 17 00:00:00 2001
From: Maksym Savich <msavich@ebay.com>
Date: Wed, 7 Oct 2015 18:18:10 -0500
Subject: [PATCH 301/420] MAGETWO-43197: Product's options are not saved after
 running setup:di:compile

- Web installation competing code generation process workaround, CR
---
 setup/pub/magento/setup/readiness-check.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index cefedae21c4..55b090ef138 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -306,7 +306,7 @@ angular.module('readiness-check', [])
             });
             var $delay = 0;
             angular.forEach($scope.items, function(item) {
-                $timeout(function(){ $scope.query(item); }, $delay * 1000);
+                $timeout(function() { $scope.query(item); }, $delay * 1000);
                 $delay++;
             });
         };
-- 
GitLab


From 50fe979dc0da8ebbcae7013678671e2248875208 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Thu, 8 Oct 2015 13:10:10 +0300
Subject: [PATCH 302/420] MAGETWO-43293: Added checking if not use wrapper for
 addOn

---
 .../templates/widget/form/renderer/fieldset/element.phtml       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
index b09be9491f0..c11293d6ae7 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
@@ -12,7 +12,7 @@
 $element = $block->getElement();
 $note = $element->getNote() ? '<div class="note" id="' . $element->getId() . '-note">' . $element->getNote() . '</div>' : '';
 $elementBeforeLabel = $element->getExtType() == 'checkbox admin__control-checkbox' || $element->getExtType() == 'radio admin__control-radio';
-$addOn = $element->getBeforeElementHtml() || $element->getAfterElementHtml();
+$addOn = ($element->getBeforeElementHtml() || $element->getAfterElementHtml()) && !$element->getNoWrapAsAddon();
 $fieldId = ($element->getHtmlContainerId()) ? ' id="' . $element->getHtmlContainerId() . '"' : '';
 $fieldClass = "admin__field field field-{$element->getId()} {$element->getCssClass()}";
 $fieldClass .= ($elementBeforeLabel) ? ' choice' : '';
-- 
GitLab


From cdaa40bb4aa8c524779bd303208d060479096c97 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Thu, 8 Oct 2015 14:16:17 +0300
Subject: [PATCH 303/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix IE9 arrows display
---
 app/design/frontend/Magento/blank/etc/view.xml | 4 ++--
 lib/web/mage/gallery/gallery.less              | 3 +++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index b240e3cd0ba..bdb30144699 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -183,7 +183,7 @@
 
         <!-- Gallery and magnifier theme settings. Start -->
         <var name="gallery">
-            <var name="navigation">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+            <var name="nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
             <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
             <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
             <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
@@ -197,7 +197,7 @@
                 <var name="duration">500</var> <!-- Sets transition duration in ms -->
             </var>
             <var name="fullscreen">
-                <var name="navigation">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+                <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
                 <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
                 <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
                 <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index f6db8bb7761..f1a68415517 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -687,6 +687,9 @@
         .fotorama-abs-center();
         height: @size-fotorama-block;
         width: @size-fotorama-block;
+        .ie9 & {
+            margin: (-@size-fotorama-block/2) 0 0 (-@size-fotorama-block/2);
+        }
     }
 }
 
-- 
GitLab


From 40d0916e5f99545971cb68a9944a595b536865e4 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Thu, 8 Oct 2015 14:23:23 +0300
Subject: [PATCH 304/420] PV-224: CSS to LESS refactoring. Fix bug IE related
 to storefront, fix video uploader link to blank, fix vimeo links

---
 .../adminhtml/web/js/get-video-information.js | 21 +++++++++++++++----
 .../view/adminhtml/web/js/new-video-dialog.js |  4 ++--
 .../web/js/fotorama-add-video-events.js       |  8 +++++--
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index d692aaf4ecc..86b47bfde2a 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -429,8 +429,17 @@ require([
                     googleapisUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' +
                         id +
                         '&part=snippet,contentDetails,statistics,status&key=' +
-                        this.options.youtubeKey;
-                    $.get(googleapisUrl, $.proxy(_onYouTubeLoaded, this));
+                        this.options.youtubeKey + '&alt=json&callback=?';
+                    $.getJSON(googleapisUrl,
+                        {
+                            format: 'json'
+                        },
+                        $.proxy(_onYouTubeLoaded, self)
+                    ).fail(
+                        function () {
+                            self._onRequestError('Video not found');
+                        }
+                    );
                 } else if (type === 'vimeo') {
                     $.getJSON('http://www.vimeo.com/api/v2/video/' + id + '.json?callback=?',
                         {
@@ -493,7 +502,8 @@ require([
             _validateURL: function (href, forceVideo) {
                 var id,
                     type,
-                    ampersandPosition;
+                    ampersandPosition,
+                    vimeoRegex;
 
                 if (typeof href !== 'string') {
                     return href;
@@ -518,7 +528,10 @@ require([
                     type = 'youtube';
                 } else if (href.host.match(/vimeo\.com/)) {
                     type = 'vimeo';
-                    id = href.pathname.replace(/^\/(video\/)?/, '').replace(/\/.*/, '');
+                    vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                        '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)'
+                    ].join(''));
+                    id = href.href.match(vimeoRegex)[3];
                 }
 
                 if ((!id || !type) && forceVideo) {
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index 980ac3a2e4d..4e9203e0f2c 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -93,7 +93,7 @@ define([
                 $(this.options.metaData.DOM.uploader).html(
                     '<a href="https://youtube.com/channel/' +
                     this.options.metaData.data.uploaderUrl +
-                    '">' +
+                    '" target="_blank">' +
                     this.options.metaData.data.uploader +
                     '</a>'
                 );
@@ -102,7 +102,7 @@ define([
                 $(this.options.metaData.DOM.uploader).html(
                     '<a href="' +
                     this.options.metaData.data.uploaderUrl +
-                    '">' + this.options.metaData.data.uploader +
+                    '" target="_blank">' + this.options.metaData.data.uploader +
                     '</a>');
             }
             $('.' + this.options.videoClass).productVideoLoader();
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index a9bc9eb2bc9..aa3fe044a29 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -23,7 +23,8 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
     function parseURL(href, forceVideo) {
         var id,
             type,
-            ampersandPosition;
+            ampersandPosition,
+            vimeoRegex;
 
         /**
          * Get youtube ID
@@ -62,7 +63,10 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
             type = 'youtube';
         } else if (href.host.match(/vimeo\.com/)) {
             type = 'vimeo';
-            id = href.pathname.replace(/^\/(video\/)?/, '').replace(/\/.*/, '');
+            vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)'
+            ].join(''));
+            id = href.href.match(vimeoRegex)[3];
         }
 
         if ((!id || !type) && forceVideo) {
-- 
GitLab


From 437859a645bff0caf76d1b4c3498aec6549998b4 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@ebay.com>
Date: Thu, 8 Oct 2015 14:45:21 +0300
Subject: [PATCH 305/420] =?UTF-8?q?MAGETWO-43755:=20[GITHUB]=20The=20commi?=
 =?UTF-8?q?t=20=C2=ABPCF:=20removing=20grouped=20price=C2=BB=20from=202015?=
 =?UTF-8?q?-10-02=20breaks=20Magento=20schema=20upgrading=20with=20the=20e?=
 =?UTF-8?q?xception?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Magento/Catalog/Setup/UpgradeData.php     | 28 +++++++++++--------
 .../Magento/Catalog/Setup/UpgradeSchema.php   |  4 +++
 2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index 5adf385101f..a79f0c384ae 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -46,21 +46,26 @@ class UpgradeData implements UpgradeDataInterface
             $entityTypeId = $categorySetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
             $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId);
 
-            $attributeGroupId = $categorySetup->getAttributeGroupId($entityTypeId, $attributeSetId, 'Images');
-
-            // update General Group
-            $categorySetup->updateAttributeGroup(
+            $attributeGroup = $categorySetup->getAttributeGroup(
                 $entityTypeId,
                 $attributeSetId,
-                $attributeGroupId,
-                'attribute_group_name',
-                'Images and Videos'
+                'Images',
+                'attribute_group_name'
             );
+            if ($attributeGroup['attribute_group_name'] == 'Images') {
+                // update General Group
+                $categorySetup->updateAttributeGroup(
+                    $entityTypeId,
+                    $attributeSetId,
+                    $attributeGroup['attribute_group_id'],
+                    'attribute_group_name',
+                    'Images and Videos'
+                );
+            }
             $select = $setup->getConnection()->select()
                 ->from(
                     $setup->getTable('catalog_product_entity_group_price'),
                     [
-                        'value_id',
                         'entity_id',
                         'all_groups',
                         'customer_group_id',
@@ -69,11 +74,10 @@ class UpgradeData implements UpgradeDataInterface
                         'website_id'
                     ]
                 );
-            $setup->getConnection()->insertFromSelect(
+            $select = $setup->getConnection()->insertFromSelect(
                 $select,
-                $setup->getTable('catalog_product_entity_group_price'),
+                $setup->getTable('catalog_product_entity_tier_price'),
                 [
-                    'value_id',
                     'entity_id',
                     'all_groups',
                     'customer_group_id',
@@ -82,6 +86,8 @@ class UpgradeData implements UpgradeDataInterface
                     'website_id'
                 ]
             );
+            $setup->getConnection()->query($select);
+
             $categorySetupManager = $this->categorySetupFactory->create();
             $categorySetupManager->removeAttribute(\Magento\Catalog\Model\Product::ENTITY, 'group_price');
         }
diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php
index fe978e80a98..d54c6e6de4a 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php
@@ -140,6 +140,10 @@ class UpgradeSchema implements UpgradeSchemaInterface
      */
     private function addSupportVideoMediaAttributes(SchemaSetupInterface $setup)
     {
+        if ($setup->tableExists(Media::GALLERY_VALUE_TO_ENTITY_TABLE)) {
+            return;
+        };
+
         /** Add support video media attribute */
         $this->createValueToEntityTable($setup);
         /**
-- 
GitLab


From 1e578261994f0489b90a1292dfa659aeadf61566 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Thu, 8 Oct 2015 15:51:05 +0300
Subject: [PATCH 306/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix arguments order
---
 app/code/Magento/ProductVideo/Block/Product/View/Gallery.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
index af26e074a02..8643a8bec34 100644
--- a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
+++ b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
@@ -28,8 +28,8 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
         \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
-        \Magento\ProductVideo\Helper\Media $mediaHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
+        \Magento\ProductVideo\Helper\Media $mediaHelper,
         array $data = []
     ) {
         parent::__construct(
-- 
GitLab


From d51b7d8e8b073a4ce0e5df21ee944f436c50cf4f Mon Sep 17 00:00:00 2001
From: Vitali Kirychenka <Vitali_Kirychenka@epam.com>
Date: Thu, 8 Oct 2015 16:34:25 +0300
Subject: [PATCH 307/420] PV:224: functional tests css selectors fix

---
 .../Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php   | 2 +-
 .../ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
index efbf9ac19ef..c490b2dbaf1 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
@@ -20,7 +20,7 @@ class ImagesAndVideos extends Tab
      *
      * @var string
      */
-    protected $addVideoButton = '#product_info_tabs_images-and-videos_content #add_video_button';
+    protected $addVideoButton = '#product_info_tabs_image-management_content #add_video_button';
 
     /**
      * Video dialog CSS locator.
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
index 94e28feef71..5a3c8fbe3fd 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
@@ -8,7 +8,7 @@
 <tabs>
     <images-and-videos>
         <class>\Magento\ProductVideo\Test\Block\Adminhtml\Product\Edit\Tab\ImagesAndVideos</class>
-        <selector>#product_info_tabs_images-and-videos</selector>
+        <selector>#product_info_tabs_image-management</selector>
         <strategy>css selector</strategy>
         <fields>
             <position />
-- 
GitLab


From 324f527e4ff77fc5e78c2dac08c3e187931dac51 Mon Sep 17 00:00:00 2001
From: Vitali Kirychenka <Vitali_Kirychenka@epam.com>
Date: Thu, 8 Oct 2015 16:34:25 +0300
Subject: [PATCH 308/420] PV-224: functional tests css selectors fix

---
 .../Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php   | 2 +-
 .../ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
index efbf9ac19ef..c490b2dbaf1 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
@@ -20,7 +20,7 @@ class ImagesAndVideos extends Tab
      *
      * @var string
      */
-    protected $addVideoButton = '#product_info_tabs_images-and-videos_content #add_video_button';
+    protected $addVideoButton = '#product_info_tabs_image-management_content #add_video_button';
 
     /**
      * Video dialog CSS locator.
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
index 94e28feef71..5a3c8fbe3fd 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
@@ -8,7 +8,7 @@
 <tabs>
     <images-and-videos>
         <class>\Magento\ProductVideo\Test\Block\Adminhtml\Product\Edit\Tab\ImagesAndVideos</class>
-        <selector>#product_info_tabs_images-and-videos</selector>
+        <selector>#product_info_tabs_image-management</selector>
         <strategy>css selector</strategy>
         <fields>
             <position />
-- 
GitLab


From 8aaff81f470aaea3453bb081f0393d936e9c3c39 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Thu, 8 Oct 2015 17:01:23 +0300
Subject: [PATCH 309/420] PV-224: CSS to LESS refactoring. Fix styles in
 product details gallery

---
 .../backend/Magento_ProductVideo/web/css/source/_module.less   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index d2dee0e80e1..b043b1173c7 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -89,7 +89,8 @@
             margin-bottom: 20px;
         }
     }
-    .gallery .image .action-make-base {
+    .gallery .image .action-make-base,
+    .images .image .action-make-base {
         .lib-button(
             @_button-background: transparent,
             @_button-border: none,
-- 
GitLab


From d6f3c216e743f52d03ef96d6e1610e75f36c3885 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@ebay.com>
Date: Thu, 8 Oct 2015 17:38:36 +0300
Subject: [PATCH 310/420] =?UTF-8?q?MAGETWO-43755:=20[GITHUB]=20The=20commi?=
 =?UTF-8?q?t=20=C2=ABPCF:=20removing=20grouped=20price=C2=BB=20from=202015?=
 =?UTF-8?q?-10-02=20breaks=20Magento=20schema=20upgrading=20with=20the=20e?=
 =?UTF-8?q?xception?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/code/Magento/Catalog/Setup/UpgradeData.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index a79f0c384ae..2d09cb6946d 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -52,7 +52,9 @@ class UpgradeData implements UpgradeDataInterface
                 'Images',
                 'attribute_group_name'
             );
-            if ($attributeGroup['attribute_group_name'] == 'Images') {
+            if (isset($attributeGroup['attribute_group_name'])
+                && $attributeGroup['attribute_group_name'] == 'Images'
+            ) {
                 // update General Group
                 $categorySetup->updateAttributeGroup(
                     $entityTypeId,
-- 
GitLab


From 2aff5a62139373efe41c7bfb55a6736b6c9c1144 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@ebay.com>
Date: Thu, 8 Oct 2015 17:48:33 +0300
Subject: [PATCH 311/420] =?UTF-8?q?MAGETWO-43755:=20[GITHUB]=20The=20commi?=
 =?UTF-8?q?t=20=C2=ABPCF:=20removing=20grouped=20price=C2=BB=20from=202015?=
 =?UTF-8?q?-10-02=20breaks=20Magento=20schema=20upgrading=20with=20the=20e?=
 =?UTF-8?q?xception?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/code/Magento/Catalog/Setup/UpgradeData.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index 2d09cb6946d..78a0bc035df 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -39,7 +39,8 @@ class UpgradeData implements UpgradeDataInterface
     public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
     {
         $setup->startSetup();
-        if (version_compare($context->getVersion(), '2.0.1') < 0) {
+        if ($context->getVersion() && version_compare($context->getVersion(), '2.0.1') < 0) {
+
             /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
             $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
 
-- 
GitLab


From 0ed510f118ecfb6ef5a734cbe406f5833ddfa0f5 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@ebay.com>
Date: Thu, 8 Oct 2015 18:15:50 +0300
Subject: [PATCH 312/420] =?UTF-8?q?MAGETWO-43755:=20[GITHUB]=20The=20commi?=
 =?UTF-8?q?t=20=C2=ABPCF:=20removing=20grouped=20price=C2=BB=20from=202015?=
 =?UTF-8?q?-10-02=20breaks=20Magento=20schema=20upgrading=20with=20the=20e?=
 =?UTF-8?q?xception?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/code/Magento/Catalog/Setup/UpgradeData.php | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index 78a0bc035df..4c2d32738e8 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -39,8 +39,7 @@ class UpgradeData implements UpgradeDataInterface
     public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
     {
         $setup->startSetup();
-        if ($context->getVersion() && version_compare($context->getVersion(), '2.0.1') < 0) {
-
+        if (version_compare($context->getVersion(), '2.0.1') < 0) {
             /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
             $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
 
@@ -53,9 +52,7 @@ class UpgradeData implements UpgradeDataInterface
                 'Images',
                 'attribute_group_name'
             );
-            if (isset($attributeGroup['attribute_group_name'])
-                && $attributeGroup['attribute_group_name'] == 'Images'
-            ) {
+            if (isset($attributeGroup['attribute_group_name']) && $attributeGroup['attribute_group_name'] == 'Images') {
                 // update General Group
                 $categorySetup->updateAttributeGroup(
                     $entityTypeId,
@@ -65,6 +62,11 @@ class UpgradeData implements UpgradeDataInterface
                     'Images and Videos'
                 );
             }
+        }
+
+        if ($context->getVersion()
+            && version_compare($context->getVersion(), '2.0.1') < 0
+        ) {
             $select = $setup->getConnection()->select()
                 ->from(
                     $setup->getTable('catalog_product_entity_group_price'),
-- 
GitLab


From ac1c10d228af1076b279d4b68901b527ee63f593 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Fri, 9 Oct 2015 10:38:19 +0300
Subject: [PATCH 313/420] MAGETWO-43593: PR

- Change selector for test
---
 .../frontend/templates/cart/item/renderer/actions/remove.phtml  | 2 +-
 .../functional/tests/app/Magento/Checkout/Test/Block/Cart.php   | 2 +-
 lib/internal/Magento/Framework/Component/ComponentRegistrar.php | 1 -
 3 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml
index 65bc29c7135..b926bfd7aba 100644
--- a/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml
+++ b/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml
@@ -10,7 +10,7 @@
 ?>
 <a href="#"
    title="<?php echo $block->escapeHtml(__('Remove item')); ?>"
-   class="action action-delete"
+   class="action action-delete delete-item-test"
    data-post='<?php /* @escapeNotVerified */ echo $block->getDeletePostJson(); ?>'>
     <span>
         <?php /* @escapeNotVerified */ echo __('Remove item')?>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
index 22256fed04b..b8c70c95f0d 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
@@ -76,7 +76,7 @@ class Cart extends Block
      *
      * @var string
      */
-    protected $deleteItemButton = '.action.action-delete';
+    protected $deleteItemButton = '.delete-item-test';
 
     /**
      * Get Shopping Cart item.
diff --git a/lib/internal/Magento/Framework/Component/ComponentRegistrar.php b/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
index a4eacac3ceb..c2c928b2376 100644
--- a/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
+++ b/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
@@ -48,7 +48,6 @@ class ComponentRegistrar implements ComponentRegistrarInterface
         if (isset(self::$paths[$type][$componentName])) {
             throw new \LogicException('\'' . $componentName . '\' component already exists');
         } else {
-            $path = str_replace('\\', '/', $path);
             self::$paths[$type][$componentName] = $path;
         }
     }
-- 
GitLab


From 37ca44d0d3fd0c25e50f55ae2c12454c29b48fd8 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Fri, 9 Oct 2015 10:49:10 +0300
Subject: [PATCH 314/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix long press
---
 lib/web/fotorama/fotorama.js | 113 +++++++++++++++++++++++++++++------
 1 file changed, 94 insertions(+), 19 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 1141f9d1473..445fe7d30c5 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -2301,7 +2301,8 @@ fotoramaVersion = '4.6.4';
                 localStamp = _fotoramaClass + stamp,
                 keydownLocal = 'keydown.' + localStamp,
                 keyupLocal = 'keyup.' + localStamp,
-                resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp;
+                resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp,
+                showParams;
 
             if (FLAG) {
                 $DOCUMENT
@@ -2332,13 +2333,19 @@ fotoramaVersion = '4.6.4';
                         }
 
                         (catched || index) && stopEvent(e);
-                        index && that.show({index: index, slow: e.altKey, user: true});
+                        showParams = {index: index, slow: e.altKey, user: true};
+                        index && (that.longPress.inProgress ?
+                            that.showWhileLongPress(showParams) :
+                            that.show(showParams));
                     });
 
                 if (FLAG) {
                     $DOCUMENT
                         .on(keyupLocal, function (e) {
-                            that.longPress.end();
+                            if (that.longPress.inProgress) {
+                                that.showEndLongPress({user:true});
+                            }
+                            that.longPress.reset();
                         });
                 }
 
@@ -3171,7 +3178,7 @@ fotoramaVersion = '4.6.4';
                     $frame.attr('aria-hidden', 'false');
                 }
 
-                skipOnEnd || that.show.onEnd(true);
+                skipOnEnd || that.showStage.onEnd(true);
                 stop($stageShaft, 0, true);
 
                 detachFrames(STAGE_FRAME_KEY);
@@ -3322,7 +3329,46 @@ fotoramaVersion = '4.6.4';
             });
         };
 
-        that.show = function (options) {
+        that.showWhileLongPress = function (options) {
+            if (that.longPress.singlePressInProgress)
+            {
+                return;
+            }
+
+            var index = calcActiveIndex(options);
+            calcGlobalIndexes(index);
+            var time = calcTime(options)/50;
+            var _activeFrame = activeFrame;
+            that.activeFrame = activeFrame = data[activeIndex];
+            var silent = _activeFrame === activeFrame && !options.user;
+
+            that.showNav(silent, options, time);
+
+            return this;
+        };
+
+        that.showEndLongPress = function (options) {
+            if (that.longPress.singlePressInProgress)
+            {
+                return;
+            }
+
+            var index = calcActiveIndex(options);
+            calcGlobalIndexes(index);
+            var time = calcTime(options)/50;
+            var _activeFrame = activeFrame;
+            that.activeFrame = activeFrame = data[activeIndex];
+
+            var silent = _activeFrame === activeFrame && !options.user;
+
+            that.showStage(silent, options, time);
+
+            showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
+            lastActiveIndex = activeIndex;
+            return this;
+        };
+
+        function calcActiveIndex (options) {
             var index;
 
             if (typeof options !== 'object') {
@@ -3336,6 +3382,10 @@ fotoramaVersion = '4.6.4';
             index = isNaN(index) ? undefined : index;
             index = typeof index === 'undefined' ? activeIndex || 0 : index;
 
+            return index;
+        }
+
+        function calcGlobalIndexes (index) {
             that.activeIndex = activeIndex = edgeIndex(index);
             prevIndex = getPrevIndex(activeIndex);
             nextIndex = getNextIndex(activeIndex);
@@ -3343,20 +3393,22 @@ fotoramaVersion = '4.6.4';
             activeIndexes = [activeIndex, prevIndex, nextIndex];
 
             dirtyIndex = o_loop ? index : activeIndex;
+        }
 
+        function calcTime (options) {
             var diffIndex = Math.abs(lastActiveIndex - dirtyIndex),
                 time = getNumber(options.time, function () {
                     return Math.min(o_transitionDuration * (1 + (diffIndex - 1) / 12), o_transitionDuration * 2);
-                }),
-                overPos = options.overPos;
-
-            if (options.slow) time *= 10;
+                });
 
-            var _activeFrame = activeFrame;
-            that.activeFrame = activeFrame = data[activeIndex];
+            if (options.slow) {
+                time *= 10;
+            }
 
-            var silent = _activeFrame === activeFrame && !options.user;
+            return time;
+        }
 
+        that.showStage = function (silent, options, time) {
             unloadVideo($videoPlaying, activeFrame.i !== data[normalizeIndex(repositionIndex)].i);
             frameDraw(activeIndexes, 'stage');
             stageFramePosition(SLOW ? [dirtyIndex] : [dirtyIndex, getPrevIndex(dirtyIndex), getNextIndex(dirtyIndex)]);
@@ -3369,7 +3421,8 @@ fotoramaVersion = '4.6.4';
 
             pausedAutoplayFLAG = true;
 
-            var onEnd = that.show.onEnd = function (skipReposition) {
+            var overPos = options.overPos;
+            var onEnd = that.showStage.onEnd = function (skipReposition) {
                 if (onEnd.ok) return;
                 onEnd.ok = true;
 
@@ -3417,23 +3470,41 @@ fotoramaVersion = '4.6.4';
             }
 
             arrsUpdate();
+        };
 
+        that.showNav = function(silent, options, time){
             thumbArrUpdate();
             if (o_nav) {
                 navUpdate();
 
                 var guessIndex = limitIndex(activeIndex + minMaxLimit(dirtyIndex - lastActiveIndex, -1, 1));
                 slideNavShaft({
-                    time: that.longPress.inProgress ?  that.longPress.calcThumbSlideTime(time) : time,
+                    time: time,
                     coo: guessIndex !== activeIndex && options.coo,
                     guessIndex: typeof options.coo !== 'undefined' ? guessIndex : activeIndex,
                     keep: silent
                 });
-                if (o_navThumbs) slideThumbBorder(that.longPress.inProgress  ? that.longPress.calcThumbSlideTime(time) : time);
+                if (o_navThumbs) slideThumbBorder(time);
             }
+        };
+
+        that.show = function (options) {
+            that.longPress.singlePressInProgress = true;
+
+            var index = calcActiveIndex(options);
+            calcGlobalIndexes(index);
+            var time = calcTime(options);
+            var _activeFrame = activeFrame;
+            that.activeFrame = activeFrame = data[activeIndex];
+
+            var silent = _activeFrame === activeFrame && !options.user;
+
+            that.showStage(silent, options, time);
+            that.showNav(silent, options, time);
 
             showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
             lastActiveIndex = activeIndex;
+            that.longPress.singlePressInProgress = false;
 
             return this;
         };
@@ -3649,8 +3720,9 @@ fotoramaVersion = '4.6.4';
         }
 
         that.longPress = {
-            threshold: 3,
+            threshold: 1,
             count: 0,
+            thumbSlideTime: 20,
             progress: function(){
                 if (!this.inProgress) {
                     this.count++;
@@ -3658,11 +3730,14 @@ fotoramaVersion = '4.6.4';
                     }
             },
             end: function(){
+                if(this.inProgress) {
+                    this.isEnded = true
+                }
+            },
+            reset: function(){
                 this.count = 0;
                 this.inProgress = false;
-            },
-            calcThumbSlideTime: function(msec){
-                return msec/25;
+                this.isEnded = false;
             }
         };
 
-- 
GitLab


From 660a35208a406fb5908bc2cdf8702dd34be2a82a Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@ebay.com>
Date: Fri, 9 Oct 2015 11:17:45 +0300
Subject: [PATCH 315/420] MAGETWO-39604: [GITHUB] Doesn't work sorting in the
 search list. #1432

---
 app/code/Magento/Catalog/Block/Product/ListProduct.php      | 2 +-
 .../Magento/Catalog/Block/Product/ProductList/Toolbar.php   | 4 ++--
 .../Catalog/view/frontend/web/js/product/list/toolbar.js    | 6 ++++--
 app/code/Magento/CatalogSearch/Block/Result.php             | 3 ++-
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php
index 73beec6b2b2..c28ab40b553 100644
--- a/app/code/Magento/Catalog/Block/Product/ListProduct.php
+++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php
@@ -296,7 +296,7 @@ class ListProduct extends AbstractProduct implements IdentityInterface
         }
         $availableOrders = $this->getAvailableOrders();
         if (!$this->getSortBy()) {
-            $categorySortBy = $category->getDefaultSortBy();
+            $categorySortBy = $this->getDefaultSortBy() ?: $category->getDefaultSortBy();
             if ($categorySortBy) {
                 if (!$availableOrders) {
                     $availableOrders = $this->_getConfig()->getAttributeUsedForSortByArray();
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
index 93b34bc6b31..cd107905e5f 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
@@ -355,7 +355,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * Compare defined order field vith current order field
+     * Compare defined order field with current order field
      *
      * @param string $order
      * @return bool
@@ -375,7 +375,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     {
         $urlParams = [];
         $urlParams['_current'] = true;
-        $urlParams['_escape'] = true;
+        $urlParams['_escape'] = false;
         $urlParams['_use_rewrite'] = true;
         $urlParams['_query'] = $params;
         return $this->getUrl('*/*/*', $urlParams);
diff --git a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js
index 688f836fb10..5904b567278 100644
--- a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js
+++ b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js
@@ -68,7 +68,9 @@ define([
                 parameters;
             for (var i = 0; i < urlParams.length; i++) {
                 parameters = urlParams[i].split('=');
-                paramData[parameters[0]] = parameters[1] !== undefined ? parameters[1] : '';
+                paramData[parameters[0]] = parameters[1] !== undefined
+                    ? window.decodeURIComponent(parameters[1].replace(/\+/g, '%20'))
+                    : '';
             }
             paramData[paramName] = paramValue;
             if (paramValue == defaultValue) {
@@ -81,4 +83,4 @@ define([
     });
 
     return $.mage.productListToolbarForm;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/CatalogSearch/Block/Result.php b/app/code/Magento/CatalogSearch/Block/Result.php
index 4a041db7391..ccd292c7bd0 100644
--- a/app/code/Magento/CatalogSearch/Block/Result.php
+++ b/app/code/Magento/CatalogSearch/Block/Result.php
@@ -133,12 +133,13 @@ class Result extends Template
         /* @var $category \Magento\Catalog\Model\Category */
         $availableOrders = $category->getAvailableSortByOptions();
         unset($availableOrders['position']);
+        $availableOrders['relevance'] = __('Relevance');
 
         $this->getListBlock()->setAvailableOrders(
             $availableOrders
         )->setDefaultDirection(
             'desc'
-        )->setSortBy(
+        )->setDefaultSortBy(
             'relevance'
         );
 
-- 
GitLab


From f2bf765c76b3e721947ee8e54cc8af7a1f6c8885 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 9 Oct 2015 12:02:14 +0300
Subject: [PATCH 316/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix fullscreen click handler
- Fix magnify styles
---
 app/code/Magento/Swatches/Helper/Data.php     |   3 +
 .../view/frontend/web/js/SwatchRenderer.js    |   4 +-
 lib/web/magnifier/magnifier.js                | 182 ++++++++++--------
 3 files changed, 107 insertions(+), 82 deletions(-)

diff --git a/app/code/Magento/Swatches/Helper/Data.php b/app/code/Magento/Swatches/Helper/Data.php
index 25123be5155..3ddba372699 100644
--- a/app/code/Magento/Swatches/Helper/Data.php
+++ b/app/code/Magento/Swatches/Helper/Data.php
@@ -387,12 +387,15 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     {
         return [
             'large' => $this->imageHelper->init($product, 'product_page_image_large')
+                ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                 ->setImageFile($imageFile)
                 ->getUrl(),
             'medium' => $this->imageHelper->init($product, 'product_page_image_medium')
+                ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                 ->setImageFile($imageFile)
                 ->getUrl(),
             'small' => $this->imageHelper->init($product, 'product_page_image_small')
+                ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                 ->setImageFile($imageFile)
                 ->getUrl(),
         ];
diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index 96123ddf8fe..bac17e1f8b2 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -729,7 +729,7 @@ define(["jquery", "jquery/ui"], function ($) {
 
             if (support(response)) {
                 images.push({
-                    large: response.large,
+                    full: response.large,
                     img: response.medium,
                     thumb: response.small
                 });
@@ -740,7 +740,7 @@ define(["jquery", "jquery/ui"], function ($) {
                             return;
                         }
                         images.push({
-                            large: this.large,
+                            full: this.large,
                             img: this.medium,
                             thumb: this.small
                         });
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 1630f5506e0..c253ca42375 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -4,6 +4,8 @@
  */
 
 ;(function ($) {
+    var onWheelCallback;
+
     $.fn.magnify = function (options) {
         'use strict';
 
@@ -25,8 +27,9 @@
             that = this,
             largeWrapper = options.largeWrapper ||  ".magnifier-preview",
             $largeWrapper = $(largeWrapper),
-            isDraggable = false;
-        curThumb = null,
+            isDraggable = false,
+            zoomShown = false,
+            curThumb = null,
             currentOpts = {
                 x: 0,
                 y: 0,
@@ -567,10 +570,16 @@
                 if ((imgSize.rh > $image.parent().height()) || (imgSize.rw > $image.parent().width())) {
                     $('.fotorama__zoom-in').show();
                     $('.fotorama__zoom-out').show();
+                    zoomShown = true;
                 } else {
                     $('.fotorama__zoom-in').hide();
                     $('.fotorama__zoom-out').hide();
+                    zoomShown = false;
                 }
+            } else {
+                $('.fotorama__zoom-in').hide();
+                $('.fotorama__zoom-out').hide();
+                zoomShown = false;
             }
         }
 
@@ -756,81 +765,90 @@
 
         });
 
-        function checkFullscreenImagePosition() {
+        function checkFullscreenImagePosition(multiplier) {
+            var $preview, $image, $imageContainer, gallery, top, left;
+
             if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
 
-                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
-                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
-                    $imageContainer = $preview.parent(),
-                    gallery = $('[data-gallery-role="gallery"]'),
-                    top, left;
+                $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img');
+                $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full');
+                $imageContainer = $preview.parent();
+                gallery = $('[data-gallery-role="gallery"]');
+                top = $image.offset().top;
+                left = $image.offset().left;
 
-                if ($imageContainer.offset().top + $imageContainer.height() > $image.offset().top + $image.height()) {
-                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
-                } else {
-                    top = ($imageContainer.offset().top < $image.offset().top) ? 0 : top;
+                if ($image.height() > $imageContainer.height()) {
+                    if ($imageContainer.offset().top + $imageContainer.height() > top + $image.height()) {
+                        top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                    } else {
+                        top = ($imageContainer.offset().top < top) ? 0 : top;
+                    }
+                    $image.offset({
+                        'top': top + multiplier * options.fullscreenzoom/2
+                    });
                 }
 
-                if (top !== undefined) {
-                    $image.css('top', top);
+                if ($image.width() > $imageContainer.width()) {
+                    if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                        left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                    } else {
+                        left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                    }
+                    $image.offset({
+                        'left': left + multiplier * options.fullscreenzoom/2
+                    });
                 }
+            }
+        }
 
-                if ($imageContainer.offset().left + $imageContainer.width() > $image.offset().left + $image.width()) {
-                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
-                } else {
-                    left = $imageContainer.offset().left < $image.offset().left ? 0 : left;
+        function zoomIn(e) {
+            if (zoomShown) {
+                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
+                    imgOriginalSize = $image.length ? getImageSize($image[0].src) : '',
+                    setedResult = Math.round($image.width() + parseFloat(options.fullscreenzoom));
+
+                if(e) {
+                    e.preventDefault();
                 }
-                if (left !== undefined) {
-                    $image.css('left', left);
+                if (setedResult > imgOriginalSize.rw) {
+                    setedResult = imgOriginalSize.rw;
                 }
 
-                if ($image.width() < $imageContainer.width()) {
-                    $image.css('left', '');
+                if ( zoomShown ) {
+                    isDraggable = true;
                 }
 
-                if ($image.height() < $imageContainer.height()) {
-                    $image.css('top', '');
-                }
+                $image.css({'width': setedResult, height: 'auto'});
+                checkFullscreenImagePosition(-1);
             }
         }
 
-        function zoomIn(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
-                gallery = $('[data-gallery-role="gallery"]'),
-                imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() + parseFloat(options.fullscreenzoom));
-            if(e) {
-                e.preventDefault();
-            }
+        function zoomOut(e) {
+            if (zoomShown) {
+                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
+                    setedResult = Math.round($image.width() - parseFloat(options.fullscreenzoom));
 
-            if (setedResult > imgOriginalSize.rw) {
-                setedResult = imgOriginalSize.rw;
-            }
-            $image.css({'width': setedResult, height: 'auto'});
-            isDraggable = true;
-            checkFullscreenImagePosition();
-        }
+                if (e) {
+                    e.preventDefault();
+                }
+                if (
+                    $image.width() <= $image.parent().width() &&
+                    $image.height() <= $image.parent().height()
+                ) {
+                    isDraggable = false;
+                    $image.css({
+                        top: 0,
+                        left: 0,
+                        right: 0,
+                        bottom: 0
+                    });
 
-        function zoomOut(e) {
-            var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
-                gallery = $('[data-gallery-role="gallery"]'),
-                imgOriginalSize = getImageSize($image[0].src),
-                setedResult = Math.round($image.width() - parseFloat(options.fullscreenzoom));
-            if (e) {
-                e.preventDefault();
-            }
+                    return;
+                }
 
-            if ($image.width() > $image.height() && $image.width() <= $image.parent().width()) {
-                isDraggable = false;
-                return;
-            }
-            if ($image.width() <= $image.height() && $image.height() <= $image.parent().height()) {
-                isDraggable = false;
-                return;
+                $image.css({'width': setedResult, height: 'auto'});
+                checkFullscreenImagePosition(1);
             }
-
-            $image.css({'width': setedResult, height: 'auto'});
-            checkFullscreenImagePosition();
         }
 
         /**
@@ -853,16 +871,16 @@
 
         function setEventOnce() {
             $('.fotorama__zoom-in')
-                .off('click', zoomIn)
+                .off('click')
                 .on('click', zoomIn);
             $('.fotorama__zoom-out')
-                .off('click', zoomOut)
+                .off('click')
                 .on('click', zoomOut);
             $('.fotorama__zoom-in')
-                .off('touchstart', zoomIn)
+                .off('touchstart')
                 .on('touchstart', zoomIn);
             $('.fotorama__zoom-out')
-                .off('touchstart', zoomOut)
+                .off('touchstart')
                 .on('touchstart', zoomOut);
         }
 
@@ -871,23 +889,8 @@
         setEventOnce();
         magnifierFullscreen();
 
-        $('.fotorama-item').on('fotorama:load', function () {
-            if (document.querySelector('.fotorama__stage').addEventListener) {
-                if ('onwheel' in document) {
-                    // IE9+, FF17+, Ch31+
-                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheel);
-                } else if ('onmousewheel' in document) {
-
-                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheel);
-                } else {
-                    // Firefox < 17
-                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheel);
-                }
-            } else { // IE8-
-                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheel);
-            }
-
-            function onWheel(e) {
+        if (!onWheelCallback) {
+            onWheelCallback = function onWheel(e) {
                 if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
                     e = e || window.event;
 
@@ -902,8 +905,27 @@
 
                     e.preventDefault ? e.preventDefault() : (e.returnValue = false);
                 }
+            };
+        }
+        $('.fotorama-item').on('fotorama:load', function () {
+            if (document.querySelector('.fotorama__stage').addEventListener) {
+                if ('onwheel' in document) {
+                    // IE9+, FF17+, Ch31+
+                    document.querySelector('.fotorama__stage').removeEventListener("wheel", onWheelCallback);
+                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheelCallback);
+                } else if ('onmousewheel' in document) {
+                    document.querySelector('.fotorama__stage').removeEventListener("mousewheel", onWheelCallback);
+                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheelCallback);
+                } else {
+                    // Firefox < 17
+                    document.querySelector('.fotorama__stage').removeEventListener("MozMousePixelScroll", onWheelCallback);
+                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheelCallback);
+                }
+            } else { // IE8-
+                document.querySelector('.fotorama__stage').detachEvent("onmousewheel", onWheelCallback);
+                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheelCallback);
             }
-        })
+        });
 
     }
 }(jQuery));
-- 
GitLab


From 9d86b684848c40c760b073d1f6d97165dc1757d6 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Fri, 9 Oct 2015 12:35:25 +0300
Subject: [PATCH 317/420] MAGETWO-43795: Title Prefix also appears on actual
 page (heading)

---
 app/code/Magento/Theme/Block/Html/Title.php   |   8 ++
 .../Theme/Test/Unit/Block/Html/TitleTest.php  | 113 ++++++++++++++++++
 .../view/frontend/templates/html/title.phtml  |   4 +-
 .../Magento/Framework/View/Page/Title.php     |  18 ++-
 .../View/Test/Unit/Page/TitleTest.php         |  66 +++++++++-
 5 files changed, 201 insertions(+), 8 deletions(-)
 create mode 100644 app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php

diff --git a/app/code/Magento/Theme/Block/Html/Title.php b/app/code/Magento/Theme/Block/Html/Title.php
index 1863fa9468a..f22d4f010a5 100644
--- a/app/code/Magento/Theme/Block/Html/Title.php
+++ b/app/code/Magento/Theme/Block/Html/Title.php
@@ -37,6 +37,14 @@ class Title extends \Magento\Framework\View\Element\Template
         return $this->pageConfig->getTitle()->getShort();
     }
 
+    public function getPageHeading()
+    {
+        if (!empty($this->pageTitle)) {
+            return $this->pageTitle;
+        }
+        return $this->pageConfig->getTitle()->getShortHeading();
+    }
+
     /**
      * Set own page title
      *
diff --git a/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php b/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php
new file mode 100644
index 00000000000..074316ccab3
--- /dev/null
+++ b/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Theme\Test\Unit\Block\Html;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class TitleTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManagerHelper
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Framework\View\Page\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageConfigMock;
+
+    /**
+     * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageTitleMock;
+
+    /**
+     * @var \Magento\Theme\Block\Html\Title
+     */
+    protected $htmlTitle;
+
+    /**
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->pageConfigMock = $this->getMock('Magento\Framework\View\Page\Config', [], [], '', false);
+        $this->pageTitleMock = $this->getMock('Magento\Framework\View\Page\Title', [], [], '', false);
+
+        $context = $this->objectManagerHelper->getObject(
+            'Magento\Framework\View\Element\Template\Context',
+            ['pageConfig' => $this->pageConfigMock]
+        );
+
+        $this->htmlTitle = $this->objectManagerHelper->getObject(
+            'Magento\Theme\Block\Html\Title',
+            ['context' => $context]
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageTitleWithSetPageTitle()
+    {
+        $title = 'some title';
+
+        $this->htmlTitle->setPageTitle($title);
+        $this->pageConfigMock->expects($this->never())
+            ->method('getTitle');
+
+        $this->assertEquals($title, $this->htmlTitle->getPageTitle());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageTitle()
+    {
+        $title = 'some title';
+
+        $this->pageTitleMock->expects($this->once())
+            ->method('getShort')
+            ->willReturn($title);
+        $this->pageConfigMock->expects($this->once())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+
+        $this->assertEquals($title, $this->htmlTitle->getPageTitle());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageHeadingWithSetPageTitle()
+    {
+        $title = 'some title';
+
+        $this->htmlTitle->setPageTitle($title);
+        $this->pageConfigMock->expects($this->never())
+            ->method('getTitle');
+
+        $this->assertEquals($title, $this->htmlTitle->getPageHeading());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageHeading()
+    {
+        $title = 'some title';
+
+        $this->pageTitleMock->expects($this->once())
+            ->method('getShortHeading')
+            ->willReturn($title);
+        $this->pageConfigMock->expects($this->once())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+
+        $this->assertEquals($title, $this->htmlTitle->getPageHeading());
+    }
+}
diff --git a/app/code/Magento/Theme/view/frontend/templates/html/title.phtml b/app/code/Magento/Theme/view/frontend/templates/html/title.phtml
index 1b9fb45d47c..f6941ca9ef2 100644
--- a/app/code/Magento/Theme/view/frontend/templates/html/title.phtml
+++ b/app/code/Magento/Theme/view/frontend/templates/html/title.phtml
@@ -11,9 +11,9 @@
  */
 $cssClass = $block->getCssClass() ? ' ' . $block->getCssClass() : '';
 $title = '';
-if (trim($block->getPageTitle())) {
+if (trim($block->getPageHeading())) {
     $title = '<span class="base" data-ui-id="page-title-wrapper" ' .  $block->getAddBaseAttribute() . '>'
-        . $block->escapeHtml($block->getPageTitle()) . '</span>';
+        . $block->escapeHtml($block->getPageHeading()) . '</span>';
 }
 ?>
 <?php if ($title): ?>
diff --git a/lib/internal/Magento/Framework/View/Page/Title.php b/lib/internal/Magento/Framework/View/Page/Title.php
index 05540c3607b..250d8b43a8d 100644
--- a/lib/internal/Magento/Framework/View/Page/Title.php
+++ b/lib/internal/Magento/Framework/View/Page/Title.php
@@ -77,11 +77,25 @@ class Title
     }
 
     /**
+     * Same as getShort(), but return title without prefix and suffix
+     */
+    public function getShortHeading()
+    {
+        $title = $this->build(false);
+        return reset($title);
+    }
+
+    /**
+     * @param bool $withConfigValues
      * @return array
      */
-    protected function build()
+    protected function build($withConfigValues = true)
     {
-        return array_merge($this->prependedValues, [$this->addConfigValues($this->textValue)], $this->appendedValues);
+        return array_merge(
+            $this->prependedValues,
+            [$withConfigValues ? $this->addConfigValues($this->textValue) : $this->textValue],
+            $this->appendedValues
+        );
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php
index ee9e035252d..cea9a66f29e 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php
@@ -23,6 +23,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
      */
     protected $scopeConfigMock;
 
+    /**
+     * @return void
+     */
     public function setUp()
     {
         $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
@@ -36,6 +39,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @return void
+     */
     public function testSet()
     {
         $value = 'test_value';
@@ -43,6 +49,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($value, $this->title->get());
     }
 
+    /**
+     * @return void
+     */
     public function testUnset()
     {
         $value = 'test';
@@ -52,6 +61,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         $this->assertEmpty($this->title->get());
     }
 
+    /**
+     * @return void
+     */
     public function testGet()
     {
         $value = 'test';
@@ -61,16 +73,19 @@ class TitleTest extends \PHPUnit_Framework_TestCase
 
         $this->scopeConfigMock->expects($this->any())
             ->method('getValue')
-            ->will($this->returnValueMap(
+            ->willReturnMap(
                 [
                     ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix],
                     ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix],
                 ]
-            ));
+            );
         $this->title->set($value);
         $this->assertEquals($expected, $this->title->get());
     }
 
+    /**
+     * @return void
+     */
     public function testGetShort()
     {
         $value = 'some_title';
@@ -81,6 +96,46 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($value, $this->title->getShort());
     }
 
+    /**
+     * @return void
+     */
+    public function testGetShortWithSuffixAndPrefix()
+    {
+        $value = 'some_title';
+        $prefix = 'prefix';
+        $suffix = 'suffix';
+        $expected = $prefix . ' ' . $value . ' ' . $suffix;
+        $this->title->set($value);
+
+        $this->scopeConfigMock->expects($this->any())
+            ->method('getValue')
+            ->willReturnMap(
+                [
+                    ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix],
+                    ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix],
+                ]
+            );
+
+        $this->assertEquals($expected, $this->title->getShort());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetShortHeading()
+    {
+        $value = 'some_title';
+        $this->title->set($value);
+
+        $this->scopeConfigMock->expects($this->never())
+            ->method('getValue');
+
+        $this->assertEquals($value, $this->title->getShortHeading());
+    }
+
+    /**
+     * @return void
+     */
     public function testGetDefault()
     {
         $defaultTitle = 'default title';
@@ -90,16 +145,19 @@ class TitleTest extends \PHPUnit_Framework_TestCase
 
         $this->scopeConfigMock->expects($this->any())
             ->method('getValue')
-            ->will($this->returnValueMap(
+            ->willReturnMap(
                 [
                     ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix],
                     ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix],
                     ['design/head/default_title', ScopeInterface::SCOPE_STORE, null, $defaultTitle],
                 ]
-            ));
+            );
         $this->assertEquals($expected, $this->title->getDefault());
     }
 
+    /**
+     * @return void
+     */
     public function testAppendPrepend()
     {
         $value = 'title';
-- 
GitLab


From e79be6b96eb474b434881c3501ca9d42b4438075 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Fri, 9 Oct 2015 12:36:46 +0300
Subject: [PATCH 318/420] MAGETWO-43842: test case names have full directory
 paths in them

---
 .../Test/Integrity/Modular/AclConfigFilesTest.php      |  1 -
 .../Test/Integrity/Modular/DiConfigFilesTest.php       |  2 +-
 .../Test/Integrity/Modular/IndexerConfigFilesTest.php  | 10 +---------
 .../Magento/Test/Integrity/Theme/XmlFilesTest.php      |  6 +++---
 lib/internal/Magento/Framework/App/Utility/Files.php   |  2 +-
 5 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
index 7863c4201bd..c998094fc96 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\Test\Integrity\Modular;
 
-use Magento\Framework\App\Filesystem\DirectoryList;
 
 class AclConfigFilesTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
index 79b69588428..42b6a74d7e0 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
@@ -92,7 +92,7 @@ class DiConfigFilesTest extends \PHPUnit_Framework_TestCase
 
         $output = [];
         foreach ($common as $path => $file) {
-            $output[$path] = [$file];
+            $output[substr($path, strlen(BP))] = [$file];
         }
 
         return $output;
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
index 5a330a83dbe..f12917f9c45 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\Test\Integrity\Modular;
 
-use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem;
 
 class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase
@@ -51,13 +50,6 @@ class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function indexerConfigFileDataProvider()
     {
-        /** @var Filesystem $filesystem */
-        $utilityFiles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->get('\Magento\Framework\App\Utility\Files');
-
-        $utilityFiles->getConfigFiles('indexer.xml');
-
-        $dataProviderResult = $utilityFiles->getConfigFiles('indexer.xml');
-        return $dataProviderResult;
+        return \Magento\Framework\App\Utility\Files::init()->getConfigFiles('indexer.xml');
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
index ca81ea4973a..95a9bb0d8cb 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
@@ -36,7 +36,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
             ->get('Magento\Framework\Component\DirSearch');
         $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'etc/view.xml');
         foreach ($files as $file) {
-            $result[$file] = [$file];
+            $result[substr($file, strlen(BP))] = [$file];
         }
         return $result;
     }
@@ -60,7 +60,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
         $componentRegistrar = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
             ->get('\Magento\Framework\Component\ComponentRegistrar');
         foreach ($componentRegistrar->getPaths(ComponentRegistrar::THEME) as $themeDir) {
-            $result[$themeDir] = [$themeDir];
+            $result[substr($themeDir, strlen(BP))] = [$themeDir];
         }
         return $result;
     }
@@ -102,7 +102,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
             ->get('Magento\Framework\Component\DirSearch');
         $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'theme.xml');
         foreach ($files as $file) {
-            $result[$file] = [$file];
+            $result[substr($file, strlen(BP))] = [$file];
         }
         return $result;
     }
diff --git a/lib/internal/Magento/Framework/App/Utility/Files.php b/lib/internal/Magento/Framework/App/Utility/Files.php
index e19dd388fc6..7802320f6fc 100644
--- a/lib/internal/Magento/Framework/App/Utility/Files.php
+++ b/lib/internal/Magento/Framework/App/Utility/Files.php
@@ -106,7 +106,7 @@ class Files
     {
         $result = [];
         foreach ($files as $file) {
-            $result[$file] = [$file];
+            $result[substr($file, strlen(BP))] = [$file];
         }
         return $result;
     }
-- 
GitLab


From 04398e03a495e77a4cd708f1ae1fb6062039b231 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Fri, 9 Oct 2015 12:50:57 +0300
Subject: [PATCH 319/420] MAGETWO-43795: Title Prefix also appears on actual
 page (heading)

---
 app/code/Magento/Theme/Block/Html/Title.php        | 5 +++++
 lib/internal/Magento/Framework/View/Page/Title.php | 1 +
 2 files changed, 6 insertions(+)

diff --git a/app/code/Magento/Theme/Block/Html/Title.php b/app/code/Magento/Theme/Block/Html/Title.php
index f22d4f010a5..a92c2a3a278 100644
--- a/app/code/Magento/Theme/Block/Html/Title.php
+++ b/app/code/Magento/Theme/Block/Html/Title.php
@@ -37,6 +37,11 @@ class Title extends \Magento\Framework\View\Element\Template
         return $this->pageConfig->getTitle()->getShort();
     }
 
+    /**
+     * Provide own page content heading
+     *
+     * @return string
+     */
     public function getPageHeading()
     {
         if (!empty($this->pageTitle)) {
diff --git a/lib/internal/Magento/Framework/View/Page/Title.php b/lib/internal/Magento/Framework/View/Page/Title.php
index 250d8b43a8d..f420bd34ded 100644
--- a/lib/internal/Magento/Framework/View/Page/Title.php
+++ b/lib/internal/Magento/Framework/View/Page/Title.php
@@ -78,6 +78,7 @@ class Title
 
     /**
      * Same as getShort(), but return title without prefix and suffix
+     * @return mixed
      */
     public function getShortHeading()
     {
-- 
GitLab


From 4975cc365de0f4749c9db47d9baf2e953fb20be6 Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 9 Oct 2015 13:09:47 +0300
Subject: [PATCH 320/420] MAGETWO-43593: PR

- Revert changes
---
 .../frontend/templates/cart/item/renderer/actions/remove.phtml  | 2 +-
 .../functional/tests/app/Magento/Checkout/Test/Block/Cart.php   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml
index b926bfd7aba..65bc29c7135 100644
--- a/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml
+++ b/app/code/Magento/Checkout/view/frontend/templates/cart/item/renderer/actions/remove.phtml
@@ -10,7 +10,7 @@
 ?>
 <a href="#"
    title="<?php echo $block->escapeHtml(__('Remove item')); ?>"
-   class="action action-delete delete-item-test"
+   class="action action-delete"
    data-post='<?php /* @escapeNotVerified */ echo $block->getDeletePostJson(); ?>'>
     <span>
         <?php /* @escapeNotVerified */ echo __('Remove item')?>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
index b8c70c95f0d..22256fed04b 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
@@ -76,7 +76,7 @@ class Cart extends Block
      *
      * @var string
      */
-    protected $deleteItemButton = '.delete-item-test';
+    protected $deleteItemButton = '.action.action-delete';
 
     /**
      * Get Shopping Cart item.
-- 
GitLab


From 8716190be81c4392dd87f11fc6ab1fe5f1b4ddc7 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 9 Oct 2015 13:27:43 +0300
Subject: [PATCH 321/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix swatches thumbnails
---
 app/code/Magento/Swatches/Helper/Data.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/app/code/Magento/Swatches/Helper/Data.php b/app/code/Magento/Swatches/Helper/Data.php
index 3ddba372699..fdf2c3c2dbe 100644
--- a/app/code/Magento/Swatches/Helper/Data.php
+++ b/app/code/Magento/Swatches/Helper/Data.php
@@ -395,7 +395,6 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
                 ->setImageFile($imageFile)
                 ->getUrl(),
             'small' => $this->imageHelper->init($product, 'product_page_image_small')
-                ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                 ->setImageFile($imageFile)
                 ->getUrl(),
         ];
-- 
GitLab


From 05c210f3819ab57e0a05bd296acd540ed1c4c725 Mon Sep 17 00:00:00 2001
From: Yaroslav Onischenko <yonischenko@ebay.com>
Date: Fri, 9 Oct 2015 14:01:13 +0300
Subject: [PATCH 322/420] MAGETWO-34932: Sample data console installation on
 installed Magento fails with fatal error

---
 .../Framework/Setup/SampleData/Executor.php   | 24 ++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/lib/internal/Magento/Framework/Setup/SampleData/Executor.php b/lib/internal/Magento/Framework/Setup/SampleData/Executor.php
index 2a71963fb66..4f2d966099d 100644
--- a/lib/internal/Magento/Framework/Setup/SampleData/Executor.php
+++ b/lib/internal/Magento/Framework/Setup/SampleData/Executor.php
@@ -7,16 +7,34 @@ namespace Magento\Framework\Setup\SampleData;
 
 class Executor
 {
+    /**
+     * @var State
+     */
+    private $state;
+
+    /**
+     * @var \Psr\Log\LoggerInterface
+     */
+    private $logger;
+
+    /**
+     * @var \Magento\Framework\App\State
+     */
+    private $appState;
+
     /**
      * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Framework\Setup\SampleData\State $state
+     * @param State $state
+     * @param \Magento\Framework\App\State $appState
      */
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
-        \Magento\Framework\Setup\SampleData\State $state
+        \Magento\Framework\Setup\SampleData\State $state,
+        \Magento\Framework\App\State $appState
     ) {
         $this->logger = $logger;
         $this->state = $state;
+        $this->appState = $appState;
     }
 
     /**
@@ -29,7 +47,7 @@ class Executor
     public function exec(InstallerInterface $installer)
     {
         try {
-            $installer->install();
+            $this->appState->emulateAreaCode('setup', [$installer, 'install']);
             $this->state->setInstalled();
         } catch (\Exception $e) {
             $this->state->setError();
-- 
GitLab


From c8355e99bdb769139bba7fd44604fa1c46a876a3 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Fri, 9 Oct 2015 14:12:55 +0300
Subject: [PATCH 323/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for "Category -> Swatches -> Not works"
---
 .../Magento/Swatches/view/frontend/web/js/SwatchRenderer.js     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index 96123ddf8fe..4587c8ea56a 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -764,7 +764,7 @@ define(["jquery", "jquery/ui"], function ($) {
                     .data('gallery')
                     .updateData(images);
             } else {
-                context.find('.product-image-photo').attr('src', images.shift().medium);
+                context.find('.product-image-photo').attr('src', images.shift().img);
             }
         },
 
-- 
GitLab


From 11bd891ee53fa7fb47d3648947572f2b6ff19fb6 Mon Sep 17 00:00:00 2001
From: ALIAKSANDR KOMAR <ALIAKSANDR_KOMAR@epam.com>
Date: Fri, 9 Oct 2015 14:44:18 +0300
Subject: [PATCH 324/420] PV-224: translation for Role Label

---
 .../ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 6be990b549c..5356558079e 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -214,6 +214,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
      */
     protected function addMediaRoleAttributes(Fieldset $fieldset)
     {
+        $fieldset->addField('roleLabel', 'note', ['text' => __('Role')]);
         $mediaRoles = $this->getProduct()->getMediaAttributes();
         asort($mediaRoles);
         foreach ($mediaRoles as $mediaRole) {
-- 
GitLab


From 60e80cc4638e19796beaff575e2f27a1cccc5f77 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 9 Oct 2015 15:15:06 +0300
Subject: [PATCH 325/420] PV-224: CSS to LESS refactoring. Fix role text to be
 translatable

---
 .../web/css/source/_module.less               | 64 ++++++++++---------
 1 file changed, 34 insertions(+), 30 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index b043b1173c7..e7ffa034747 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -57,27 +57,31 @@
     &.field-new_video_disabled {
         margin-top: 32px;
     }
-    &.field-video_image .admin__field-control {
-        position: relative;
-        &:after {
-            color: @color-black;
-            content: 'Role';
-            font-family: 'Open Sans', @font-family__sans-serif;
-            font-size: @font-size__s + 0.2;
-            font-weight: @font-weight__semibold;
-            height: 20px;
-            position: absolute;
-            right: 50px;
-            top: -2px;
-            width: 34px;
-        }
-    }
     &.field.field-new_video_screenshot {
         margin-bottom: 5px;
     }
     &.field.field-new_video_screenshot_preview {
         margin-bottom: 50px;
     }
+    &.field-roleLabel {
+        height: 0;
+        .admin__field-control {
+            #mix-grid .column(3, @field-grid__columns);
+            float: left;
+            margin-left: 80px;
+            position: relative;
+            .control-value {
+                color: @color-black;
+                font-family: 'Open Sans', @font-family__sans-serif;
+                font-size: @font-size__s + 0.2;
+                font-weight: @font-weight__semibold;
+                float: right;
+                position: relative;
+                right: 50px;
+                top: 21px;
+            }
+        }
+    }
 }
 
 .admin__scope-old {
@@ -92,21 +96,21 @@
     .gallery .image .action-make-base,
     .images .image .action-make-base {
         .lib-button(
-            @_button-background: transparent,
-            @_button-border: none,
-            @_button-background-hover: transparent,
-            @_button-border-hover: none,
-            @_button-background-active: transparent,
-            @_button-border-active: none,
-            @_button-font-content: '\e63b',
-            @_button-icon-use: true,
-            @_button-icon-font: 'Admin Icons',
-            @_button-icon-font-text-hide: true,
-            @_button-icon-font-size: @font-size__xl,
-            @_button-icon-font-color: @color-gray62,
-            @_button-icon-font-color-hover: @color-gray52,
-            @_button-icon-font-color-active: @color-gray52,
-            @_button-margin: 0
+        @_button-background: transparent,
+        @_button-border: none,
+        @_button-background-hover: transparent,
+        @_button-border-hover: none,
+        @_button-background-active: transparent,
+        @_button-border-active: none,
+        @_button-font-content: '\e63b',
+        @_button-icon-use: true,
+        @_button-icon-font: 'Admin Icons',
+        @_button-icon-font-text-hide: true,
+        @_button-icon-font-size: @font-size__xl,
+        @_button-icon-font-color: @color-gray62,
+        @_button-icon-font-color-hover: @color-gray52,
+        @_button-icon-font-color-active: @color-gray52,
+        @_button-margin: 0
         );
         bottom: 9px;
         left: auto;
-- 
GitLab


From c0a779478657f3c9a4c2126f568224b88d8a4f30 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 9 Oct 2015 15:32:54 +0300
Subject: [PATCH 326/420] PV-224: CSS to LESS refactoring. Fix codelines

---
 .../web/css/source/_module.less               | 30 +++++++++----------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index e7ffa034747..7f4e8a590ac 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -96,21 +96,21 @@
     .gallery .image .action-make-base,
     .images .image .action-make-base {
         .lib-button(
-        @_button-background: transparent,
-        @_button-border: none,
-        @_button-background-hover: transparent,
-        @_button-border-hover: none,
-        @_button-background-active: transparent,
-        @_button-border-active: none,
-        @_button-font-content: '\e63b',
-        @_button-icon-use: true,
-        @_button-icon-font: 'Admin Icons',
-        @_button-icon-font-text-hide: true,
-        @_button-icon-font-size: @font-size__xl,
-        @_button-icon-font-color: @color-gray62,
-        @_button-icon-font-color-hover: @color-gray52,
-        @_button-icon-font-color-active: @color-gray52,
-        @_button-margin: 0
+            @_button-background: transparent,
+            @_button-border: none,
+            @_button-background-hover: transparent,
+            @_button-border-hover: none,
+            @_button-background-active: transparent,
+            @_button-border-active: none,
+            @_button-font-content: '\e63b',
+            @_button-icon-use: true,
+            @_button-icon-font: 'Admin Icons',
+            @_button-icon-font-text-hide: true,
+            @_button-icon-font-size: @font-size__xl,
+            @_button-icon-font-color: @color-gray62,
+            @_button-icon-font-color-hover: @color-gray52,
+            @_button-icon-font-color-active: @color-gray52,
+            @_button-margin: 0
         );
         bottom: 9px;
         left: auto;
-- 
GitLab


From 6e203b8b703bfa8f113a6825cfaac5043bd68731 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Fri, 9 Oct 2015 16:17:56 +0300
Subject: [PATCH 327/420] MAGETWO-43871: UI inconsistency on product image
 details

---
 .../product/edit/attribute/steps/bulk.phtml   | 16 ----------
 .../css/source/module/steps/_bulk-images.less | 32 -------------------
 2 files changed, 48 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
index 9c58b7a7fb6..8a1b3edc805 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
@@ -225,14 +225,6 @@
                                 </div>
                             </fieldset>
                         </div>
-
-                        <button type="button"
-                                class="action-close"
-                                data-role="close-panel"
-                                title="<?= $block->escapeHtml(__('Close panel')) ?>">
-                            <span><?= /* @escapeNotVerified */  __('Close panel') ?></span>
-                        </button>
-                        <div class="image-pointer"></div>
                     </div>
                 </script>
 
@@ -441,14 +433,6 @@
                                         </div>
                                     </fieldset>
                                 </div>
-
-                                <button type="button"
-                                        class="action-close"
-                                        data-role="close-panel"
-                                        title="<?= $block->escapeHtml(__('Close panel')) ?>">
-                                    <span><?= /* @escapeNotVerified */  __('Close panel') ?></span>
-                                </button>
-                                <div class="image-pointer"></div>
                             </div>
                         </script>
 
diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less
index 60203c2aa30..d1f298df84e 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less
@@ -361,16 +361,6 @@
     top: 5px;
 }
 
-.image-pointer {
-    background: url(../Magento_Backend/images/gallery-image-panel-corner.png) no-repeat;
-    height: 15px;
-    left: 50%;
-    margin-left: -14px;
-    position: absolute;
-    top: -11px;
-    width: 28px;
-}
-
 .image-panel-controls,
 .image-panel-preview {
     float: left;
@@ -431,28 +421,6 @@
     width: 100%;
 }
 
-.image-panel {
-    .action-close {
-        padding: 0;
-        position: absolute;
-        right: 29px;
-        top: 17px;
-        .lib-icon-font(
-        @_icon-font-content: @icon-close-mage__content,
-        @_icon-font: @icons-admin__font-name,
-        @_icon-font-size: 2rem,
-        @_icon-font-color: @color-brownie-vanilla,
-        @_icon-font-color-hover: @color-brownie-vanilla
-        );
-        span {
-            &:extend(.abs-visually-hidden all);
-        }
-        &:active {
-            padding: 0;
-        }
-    }
-}
-
 //
 //  Custom Multiselect
 //  _____________________________________________
-- 
GitLab


From 023b8eac331151a34a1e5b5e3f115996fc64e2b9 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Fri, 9 Oct 2015 17:04:39 +0300
Subject: [PATCH 328/420] MAGETWO-43192: Broken edit/create product template
 layout

---
 .../view/adminhtml/layout/catalog_product_set_edit.xml        | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml
index 30d421cfe85..92425214621 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml
@@ -8,7 +8,9 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <body>
         <referenceContainer name="content">
-            <block class="Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Main" name="adminhtml.catalog.product.set.edit" template="catalog/product/attribute/set/main.phtml"/>
+            <container name="adminhtml.catalog.product.set.edit.wrapper" htmlTag="div" htmlClass="admin__scope-old"><!-- @todo ui: remove arguments within .admin__scope-old -->
+                <block class="Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Main" name="adminhtml.catalog.product.set.edit" template="catalog/product/attribute/set/main.phtml"/>
+            </container>
         </referenceContainer>
     </body>
 </page>
-- 
GitLab


From f30f34f6e1b86de18e8d44b3e3809248ba47a456 Mon Sep 17 00:00:00 2001
From: ALIAKSANDR KOMAR <ALIAKSANDR_KOMAR@epam.com>
Date: Fri, 9 Oct 2015 17:24:57 +0300
Subject: [PATCH 329/420] PV-224: change roles sorting function

---
 .../ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 5356558079e..093807402d1 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -216,7 +216,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     {
         $fieldset->addField('roleLabel', 'note', ['text' => __('Role')]);
         $mediaRoles = $this->getProduct()->getMediaAttributes();
-        asort($mediaRoles);
+        ksort($mediaRoles);
         foreach ($mediaRoles as $mediaRole) {
             $fieldset->addField(
                 'video_' . $mediaRole->getAttributeCode(),
-- 
GitLab


From c2569385cdca9ea377cf19cd6e5b56e9846bdcfe Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Fri, 9 Oct 2015 18:41:45 +0300
Subject: [PATCH 330/420] MAGETWO-43593: PR

---
 .../Ui/Component/Listing/AssociatedProduct/Filters.php          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
index eacff4e7439..551c8a5f9ba 100644
--- a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
+++ b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
@@ -6,7 +6,7 @@
 namespace Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct;
 
 use Magento\Catalog\Ui\Component\FilterFactory;
-use Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory;
 use Magento\Framework\View\Element\UiComponent\ObserverInterface;
 use Magento\Framework\View\Element\UiComponentInterface;
 
-- 
GitLab


From 678a78c98b71b1bdd5669c4e389fee4ca8cb5192 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Fri, 9 Oct 2015 21:47:48 +0300
Subject: [PATCH 331/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix scroll
---
 lib/web/magnifier/magnifier.js | 125 +++++++++++++++++++++++----------
 1 file changed, 86 insertions(+), 39 deletions(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index c253ca42375..fd182705b98 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -4,7 +4,10 @@
  */
 
 ;(function ($) {
-    var onWheelCallback;
+    var onWheelCallback,
+        zoomWidthStep = 0,
+        zoomHeightStep = 0,
+        isDraggable = false;
 
     $.fn.magnify = function (options) {
         'use strict';
@@ -27,7 +30,6 @@
             that = this,
             largeWrapper = options.largeWrapper ||  ".magnifier-preview",
             $largeWrapper = $(largeWrapper),
-            isDraggable = false,
             zoomShown = false,
             curThumb = null,
             currentOpts = {
@@ -636,7 +638,6 @@
                 $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
                     if (gallery.data('fotorama').fullScreen && isDraggable) {
                         e.preventDefault();
-
                         $image.css('cursor', 'move');
                         imagePosY = $image.offset().top;
                         imagePosX = $image.offset().left;
@@ -765,7 +766,20 @@
 
         });
 
-        function checkFullscreenImagePosition(multiplier) {
+        function resetVars($image) {
+            zoomWidthStep = 0;
+            zoomHeightStep = 0;
+            isDraggable = false;
+            $image.css({
+                top: 0,
+                left: 0,
+                right: 0,
+                bottom: 0,
+                cursor: ''
+            });
+        }
+
+        function checkFullscreenImagePosition(widthStep, heightStep) {
             var $preview, $image, $imageContainer, gallery, top, left;
 
             if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
@@ -781,21 +795,33 @@
                     if ($imageContainer.offset().top + $imageContainer.height() > top + $image.height()) {
                         top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
                     } else {
-                        top = ($imageContainer.offset().top < top) ? 0 : top;
+                        top = ($imageContainer.offset().top <= top && heightStep > 0) ? 0 : top + heightStep/2;
                     }
-                    $image.offset({
-                        'top': top + multiplier * options.fullscreenzoom/2
+                    $image.css({
+                        top: top,
+                        bottom: 'auto'
+                    });
+                } else {
+                    $image.css({
+                        top: 0,
+                        bottom: 0
                     });
                 }
 
                 if ($image.width() > $imageContainer.width()) {
                     if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
-                        left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                        left = $imageContainer.offset().left + $imageContainer.width() - $image.width() + widthStep/2;
                     } else {
-                        left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                        left = ($imageContainer.offset().left <= left && widthStep > 0) ? 0 : left + widthStep/2;
                     }
-                    $image.offset({
-                        'left': left + multiplier * options.fullscreenzoom/2
+                    $image.css({
+                        left: left,
+                        right: 'auto'
+                    });
+                } else {
+                    $image.css({
+                        left: 0,
+                        right: 0
                     });
                 }
             }
@@ -805,50 +831,71 @@
             if (zoomShown) {
                 var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
                     imgOriginalSize = $image.length ? getImageSize($image[0].src) : '',
-                    setedResult = Math.round($image.width() + parseFloat(options.fullscreenzoom));
+                    widthResult,
+                    heightResult;
+
+                if (!zoomWidthStep) {
+                    zoomWidthStep = Math.round((imgOriginalSize.rw - $image.width())/parseFloat(options.fullscreenzoom));
+                    zoomHeightStep = Math.round((imgOriginalSize.rh - $image.height())/parseFloat(options.fullscreenzoom));
+                }
+                widthResult = $image.width() + zoomWidthStep;
+                heightResult = $image.height() + zoomHeightStep;
 
-                if(e) {
-                    e.preventDefault();
+                if (widthResult >= imgOriginalSize.rw) {
+                    widthResult = imgOriginalSize.rw;
                 }
-                if (setedResult > imgOriginalSize.rw) {
-                    setedResult = imgOriginalSize.rw;
+                if (heightResult >= imgOriginalSize.rh) {
+                    heightResult = imgOriginalSize.rh;
                 }
 
                 if ( zoomShown ) {
                     isDraggable = true;
                 }
 
-                $image.css({'width': setedResult, height: 'auto'});
-                checkFullscreenImagePosition(-1);
+                if ($image.width() >= $image.height() && $image.width() !== imgOriginalSize.rw) {
+                    $image.css({
+                        width: widthResult,
+                        height: 'auto'
+                    });
+                    checkFullscreenImagePosition(-zoomWidthStep, -zoomHeightStep);
+                } else if ($image.width() < $image.height() && $image.height() !== imgOriginalSize.rh) {
+                    $image.css({
+                        width: 'auto',
+                        height: heightResult
+                    });
+                    checkFullscreenImagePosition(-zoomWidthStep, -zoomHeightStep);
+                }
             }
+
+            return false;
         }
 
         function zoomOut(e) {
             if (zoomShown) {
                 var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
-                    setedResult = Math.round($image.width() - parseFloat(options.fullscreenzoom));
+                    setedResult = $image.width() - zoomWidthStep,
+                    widthCheck = $image.width() - zoomWidthStep <= $image.parent().width(),
+                    heightCheck = $image.height() - zoomHeightStep <= $image.parent().height();
 
-                if (e) {
-                    e.preventDefault();
-                }
-                if (
-                    $image.width() <= $image.parent().width() &&
-                    $image.height() <= $image.parent().height()
-                ) {
-                    isDraggable = false;
-                    $image.css({
-                        top: 0,
-                        left: 0,
-                        right: 0,
-                        bottom: 0
-                    });
+                e.preventDefault();
+
+                if ($image.width() >= $image.height() && widthCheck) {
+                    $image.css({'width': $image.parent().width(), height: 'auto'});
+                    resetVars($image);
 
-                    return;
+                    return false;
+                } else if ($image.width() < $image.height() && heightCheck) {
+                    $image.css({'width': 'auto', height: $image.parent().height()});
+                    resetVars($image);
+
+                    return false;
                 }
 
                 $image.css({'width': setedResult, height: 'auto'});
-                checkFullscreenImagePosition(1);
+                checkFullscreenImagePosition(zoomWidthStep, zoomHeightStep);
             }
+
+            return false;
         }
 
         /**
@@ -871,11 +918,11 @@
 
         function setEventOnce() {
             $('.fotorama__zoom-in')
-                .off('click')
-                .on('click', zoomIn);
+                .off('mouseup')
+                .on('mouseup', zoomIn);
             $('.fotorama__zoom-out')
-                .off('click')
-                .on('click', zoomOut);
+                .off('mouseup')
+                .on('mouseup', zoomOut);
             $('.fotorama__zoom-in')
                 .off('touchstart')
                 .on('touchstart', zoomIn);
-- 
GitLab


From 7ef6c117c734ab7cb89760ab1218f5841756f1b8 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 9 Oct 2015 15:51:35 -0500
Subject: [PATCH 332/420] MAGETWO-32443: [GITHUB] if_module_enabled has no
 effect #934

---
 .../Config/Structure/AbstractElement.php      | 13 ++++-
 .../Structure/Element/AbstractComposite.php   |  4 +-
 .../Model/Config/Structure/Element/Field.php  |  7 ++-
 .../Model/Config/Structure/Element/Group.php  |  8 +--
 .../Config/Structure/Element/Section.php      |  5 +-
 .../Config/Structure/AbstractElementTest.php  | 52 ++++++++++++++-----
 .../Element/AbstractCompositeTest.php         |  9 +++-
 .../Config/Structure/Element/FieldTest.php    | 40 +++++---------
 .../Config/Structure/Element/GroupTest.php    | 34 ++++--------
 .../Config/Structure/Element/SectionTest.php  | 26 ++++------
 .../Config/Structure/Element/TabTest.php      | 15 ++----
 11 files changed, 112 insertions(+), 101 deletions(-)

diff --git a/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php b/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php
index 03ed66f29ab..073d23f450a 100644
--- a/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php
+++ b/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php
@@ -31,12 +31,19 @@ abstract class AbstractElement implements ElementInterface
      */
     protected $_storeManager;
 
+    /**
+     * @var \Magento\Framework\Module\Manager
+     */
+    protected $moduleManager;
+
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      */
-    public function __construct(StoreManagerInterface $storeManager)
+    public function __construct(StoreManagerInterface $storeManager, \Magento\Framework\Module\Manager $moduleManager)
     {
         $this->_storeManager = $storeManager;
+        $this->moduleManager = $moduleManager;
     }
 
     /**
@@ -134,6 +141,10 @@ abstract class AbstractElement implements ElementInterface
      */
     public function isVisible()
     {
+        if (isset($this->_data['if_module_enabled']) &&
+            !$this->moduleManager->isOutputEnabled($this->_data['if_module_enabled'])) {
+            return false;
+        }
         $showInScope = [
             \Magento\Store\Model\ScopeInterface::SCOPE_STORE => $this->_hasVisibilityValue('showInStore'),
             \Magento\Store\Model\ScopeInterface::SCOPE_WEBSITE => $this->_hasVisibilityValue('showInWebsite'),
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php b/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php
index a25b1688eea..d3707277d55 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php
@@ -16,13 +16,15 @@ abstract class AbstractComposite extends \Magento\Config\Model\Config\Structure\
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      * @param Iterator $childrenIterator
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         Iterator $childrenIterator
     ) {
-        parent::__construct($storeManager);
+        parent::__construct($storeManager, $moduleManager);
         $this->_childrenIterator = $childrenIterator;
     }
 
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
index 5d7d5d1e329..e4678fb5e29 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
@@ -50,26 +50,29 @@ class Field extends \Magento\Config\Model\Config\Structure\AbstractElement
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Config\Model\Config\BackendFactory $backendFactory
      * @param \Magento\Config\Model\Config\SourceFactory $sourceFactory
      * @param \Magento\Config\Model\Config\CommentFactory $commentFactory
      * @param \Magento\Framework\View\Element\BlockFactory $blockFactory
-     * @param \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
+     * @param Dependency\Mapper $dependencyMapper
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Config\Model\Config\BackendFactory $backendFactory,
         \Magento\Config\Model\Config\SourceFactory $sourceFactory,
         \Magento\Config\Model\Config\CommentFactory $commentFactory,
         \Magento\Framework\View\Element\BlockFactory $blockFactory,
         \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
     ) {
-        parent::__construct($storeManager);
+        parent::__construct($storeManager, $moduleManager);
         $this->_backendFactory = $backendFactory;
         $this->_sourceFactory = $sourceFactory;
         $this->_commentFactory = $commentFactory;
         $this->_blockFactory = $blockFactory;
         $this->_dependencyMapper = $dependencyMapper;
+        $this->moduleManager = $moduleManager;
     }
 
     /**
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Group.php b/app/code/Magento/Config/Model/Config/Structure/Element/Group.php
index 3c1028812a6..7e523248c3e 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Group.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Group.php
@@ -25,17 +25,19 @@ class Group extends AbstractComposite
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Config\Model\Config\Structure\Element\Iterator\Field $childrenIterator
+     * @param \Magento\Framework\Module\Manager $moduleManager
+     * @param Iterator\Field $childrenIterator
      * @param \Magento\Config\Model\Config\BackendClone\Factory $cloneModelFactory
-     * @param \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
+     * @param Dependency\Mapper $dependencyMapper
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Config\Model\Config\Structure\Element\Iterator\Field $childrenIterator,
         \Magento\Config\Model\Config\BackendClone\Factory $cloneModelFactory,
         \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
     ) {
-        parent::__construct($storeManager, $childrenIterator);
+        parent::__construct($storeManager, $moduleManager, $childrenIterator);
         $this->_cloneModelFactory = $cloneModelFactory;
         $this->_dependencyMapper = $dependencyMapper;
     }
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
index f8839b215d3..7f61631dbe0 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
@@ -16,16 +16,19 @@ class Section extends AbstractComposite
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      * @param Iterator $childrenIterator
      * @param \Magento\Framework\AuthorizationInterface $authorization
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         Iterator $childrenIterator,
         \Magento\Framework\AuthorizationInterface $authorization
     ) {
-        parent::__construct($storeManager, $childrenIterator);
+        parent::__construct($storeManager, $moduleManager, $childrenIterator);
         $this->_authorization = $authorization;
+        $this->moduleManager = $moduleManager;
     }
 
     /**
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php
index 778141ab213..90e0d13c3e6 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php
@@ -17,24 +17,33 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
-    protected $_storeManager;
+    protected $storeManagerMock;
+
+    /**
+     * @var \Magento\Config\Model\Config\Structure\AbstractElement | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManagerMock;
 
     protected function setUp()
     {
-        $this->_storeManager = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $this->moduleManagerMock = $this->getMock(
+            'Magento\Framework\Module\Manager',
+            ['isOutputEnabled'],
+            [],
+            '',
+            false
+        );
 
         $this->_model = $this->getMockForAbstractClass(
             'Magento\Config\Model\Config\Structure\AbstractElement',
-            [$this->_storeManager]
+            [
+                'storeManager' => $this->storeManagerMock,
+                'moduleManager' => $this->moduleManagerMock,
+            ]
         );
     }
 
-    protected function tearDown()
-    {
-        unset($this->_model);
-        unset($this->_storeManager);
-    }
-
     public function testGetId()
     {
         $this->assertEquals('', $this->_model->getId());
@@ -76,7 +85,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
 
     public function testIsVisibleReturnsTrueInSingleStoreModeForNonHiddenElements()
     {
-        $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
+        $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
         $this->_model->setData(
             ['showInDefault' => 1, 'showInStore' => 0, 'showInWebsite' => 0],
             ScopeConfigInterface::SCOPE_TYPE_DEFAULT
@@ -86,7 +95,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
 
     public function testIsVisibleReturnsFalseInSingleStoreModeForHiddenElements()
     {
-        $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
+        $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
         $this->_model->setData(
             ['hide_in_single_store_mode' => 1, 'showInDefault' => 1, 'showInStore' => 0, 'showInWebsite' => 0],
             ScopeConfigInterface::SCOPE_TYPE_DEFAULT
@@ -99,7 +108,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      */
     public function testIsVisibleReturnsFalseInSingleStoreModeForInvisibleElements()
     {
-        $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
+        $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
         $this->_model->setData(
             ['showInDefault' => 0, 'showInStore' => 0, 'showInWebsite' => 0],
             ScopeConfigInterface::SCOPE_TYPE_DEFAULT
@@ -165,6 +174,25 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
         ];
     }
 
+    public function testIsVisibleReturnFalseIfModuleNotEnabled()
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isOutputEnabled')
+            ->with('test_module')
+            ->willReturn(false);
+        $this->_model->setData(
+            [
+                'showInDefault' => 1,
+                'showInStore' => 0,
+                'showInWebsite' => 0,
+                'if_module_enabled' => 'test_module',
+            ],
+            'default'
+        );
+        $this->assertFalse($this->_model->isVisible());
+
+    }
+
     public function testGetClass()
     {
         $this->assertEquals('', $this->_model->getClass());
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php
index 08831a5a364..555e59eac7a 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php
@@ -22,6 +22,11 @@ class AbstractCompositeTest extends \PHPUnit_Framework_TestCase
      */
     protected $_iteratorMock;
 
+    /**
+     * @var \Magento\Framework\Module\Manager | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManagerMock;
+
     /**
      * Test element data
      *
@@ -44,10 +49,10 @@ class AbstractCompositeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
-
+        $this->moduleManagerMock = $this->getMock('Magento\Framework\Module\Manager', [], [], '', false);
         $this->_model = $this->getMockForAbstractClass(
             'Magento\Config\Model\Config\Structure\Element\AbstractComposite',
-            [$this->_storeManagerMock, $this->_iteratorMock]
+            [$this->_storeManagerMock, $this->moduleManagerMock, $this->_iteratorMock]
         );
     }
 
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php
index bd752f99703..b20518c411f 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php
@@ -10,6 +10,8 @@
 
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class FieldTest extends \PHPUnit_Framework_TestCase
 {
     const FIELD_TEST_CONSTANT = "field test constant";
@@ -19,11 +21,6 @@ class FieldTest extends \PHPUnit_Framework_TestCase
      */
     protected $_model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_storeManagerMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
@@ -49,21 +46,10 @@ class FieldTest extends \PHPUnit_Framework_TestCase
      */
     protected $_depMapperMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_iteratorMock;
-
     protected function setUp()
     {
-        $this->_iteratorMock = $this->getMock(
-            'Magento\Config\Model\Config\Structure\Element\Iterator',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $objectManager = new ObjectManager($this);
+
         $this->_backendFactoryMock = $this->getMock(
             'Magento\Config\Model\Config\BackendFactory',
             [],
@@ -100,20 +86,20 @@ class FieldTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Field(
-            $this->_storeManagerMock,
-            $this->_backendFactoryMock,
-            $this->_sourceFactoryMock,
-            $this->_commentFactoryMock,
-            $this->_blockFactoryMock,
-            $this->_depMapperMock
+        $this->_model = $objectManager->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Field',
+            [
+                'backendFactory' => $this->_backendFactoryMock,
+                'sourceFactory' => $this->_sourceFactoryMock,
+                'commentFactory' => $this->_commentFactoryMock,
+                'blockFactory' => $this->_blockFactoryMock,
+                'dependencyMapper' => $this->_depMapperMock,
+            ]
         );
     }
 
     protected function tearDown()
     {
-        unset($this->_iteratorMock);
-        unset($this->_storeManagerMock);
         unset($this->_backendFactoryMock);
         unset($this->_sourceFactoryMock);
         unset($this->_commentFactoryMock);
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php
index b92a76069ec..5490eaa0a07 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class GroupTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -12,21 +14,11 @@ class GroupTest extends \PHPUnit_Framework_TestCase
      */
     protected $_model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_storeManagerMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $_cloneFactoryMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_iteratorMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
@@ -34,14 +26,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_iteratorMock = $this->getMock(
-            'Magento\Config\Model\Config\Structure\Element\Iterator\Field',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $objectManager = new ObjectManager($this);
         $this->_cloneFactoryMock = $this->getMock(
             'Magento\Config\Model\Config\BackendClone\Factory',
             [],
@@ -57,19 +42,18 @@ class GroupTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Group(
-            $this->_storeManagerMock,
-            $this->_iteratorMock,
-            $this->_cloneFactoryMock,
-            $this->_depMapperMock
+        $this->_model = $objectManager->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Group',
+            [
+                'cloneModelFactory' => $this->_cloneFactoryMock,
+                'dependencyMapper' => $this->_depMapperMock,
+            ]
         );
     }
 
     protected function tearDown()
     {
         unset($this->_model);
-        unset($this->_iteratorMock);
-        unset($this->_storeManagerMock);
         unset($this->_cloneFactoryMock);
         unset($this->_depMapperMock);
     }
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php
index 86812767f15..a14a1e4ad22 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class SectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -22,34 +24,24 @@ class SectionTest extends \PHPUnit_Framework_TestCase
      */
     protected $_authorizationMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_iteratorMock;
-
     protected function setUp()
     {
-        $this->_iteratorMock = $this->getMock(
-            'Magento\Config\Model\Config\Structure\Element\Iterator\Field',
-            [],
-            [],
-            '',
-            false
-        );
+        $objectManager = new ObjectManager($this);
         $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
         $this->_authorizationMock = $this->getMock('Magento\Framework\AuthorizationInterface');
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Section(
-            $this->_storeManagerMock,
-            $this->_iteratorMock,
-            $this->_authorizationMock
+        $this->_model = $objectManager->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Section',
+            [
+                'storeManager' => $this->_storeManagerMock,
+                'authorization' => $this->_authorizationMock,
+            ]
         );
     }
 
     protected function tearDown()
     {
         unset($this->_model);
-        unset($this->_iteratorMock);
         unset($this->_storeManagerMock);
         unset($this->_authorizationMock);
     }
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php
index d8c9af76865..248cc3c18ff 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class TabTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -12,11 +14,6 @@ class TabTest extends \PHPUnit_Framework_TestCase
      */
     protected $_model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_storeManagerMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
@@ -31,11 +28,10 @@ class TabTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Tab(
-            $this->_storeManagerMock,
-            $this->_iteratorMock
+        $this->_model = (new ObjectManager($this))->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Tab',
+            ['childrenIterator' => $this->_iteratorMock]
         );
     }
 
@@ -43,7 +39,6 @@ class TabTest extends \PHPUnit_Framework_TestCase
     {
         unset($this->_model);
         unset($this->_iteratorMock);
-        unset($this->_storeManagerMock);
     }
 
     public function testIsVisibleOnlyChecksPresenceOfChildren()
-- 
GitLab


From 43a3e64ea48b13781bc00f2fca26816c26043811 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Mon, 12 Oct 2015 01:36:28 +0300
Subject: [PATCH 333/420] MAGETWO-43701: [TD] API tests for support of custom
 options in Quote and Sales API

---
 .../Bundle/Api/OrderItemRepositoryTest.php    | 128 +++++++++++++++++
 .../Catalog/Api/OrderItemRepositoryTest.php   | 129 ++++++++++++++++++
 .../Api/OrderItemRepositoryTest.php           | 125 +++++++++++++++++
 .../Api/OrderItemRepositoryTest.php           | 120 ++++++++++++++++
 .../Sales/Service/V1/OrderItemGetListTest.php |  88 ++++++++++++
 .../Sales/Service/V1/OrderItemGetTest.php     |  72 ++++++++++
 .../order_item_with_bundle_and_options.php    |  79 +++++++++++
 ..._item_with_bundle_and_options_rollback.php |   8 ++
 ...r_item_with_product_and_custom_options.php |  75 ++++++++++
 ...th_product_and_custom_options_rollback.php |   8 ++
 ...der_item_with_configurable_and_options.php |  70 ++++++++++
 ...with_configurable_and_options_rollback.php |   8 ++
 ...der_item_with_downloadable_and_options.php |  58 ++++++++
 ...with_downloadable_and_options_rollback.php |   8 ++
 14 files changed, 976 insertions(+)
 create mode 100644 dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
 create mode 100644 dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
 create mode 100644 dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
 create mode 100644 dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
 create mode 100644 dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
 create mode 100644 dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php
 create mode 100644 dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
 create mode 100644 dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php

diff --git a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
new file mode 100644
index 00000000000..72005876cc5
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Bundle\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Bundle/_files/order_item_with_bundle_and_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Bundle/_files/order_item_with_bundle_and_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $bundleOption = $orderItem->getBuyRequest()->getBundleOption();
+        $bundleOptionQty = $orderItem->getBuyRequest()->getBundleOptionQty();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('bundle_options', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['bundle_options'];
+
+        $this->assertEquals(array_keys($bundleOption), array_column($actualOptions, 'option_id'));
+        $this->assertEquals($bundleOptionQty, array_column($actualOptions, 'option_qty', 'option_id'));
+
+        foreach ($actualOptions as $option) {
+            $expectedSelections = is_array($bundleOption[$option['option_id']])
+                ? $bundleOption[$option['option_id']]
+                : [$bundleOption[$option['option_id']]];
+            $this->assertEquals($expectedSelections, $option['option_selections']);
+        }
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
new file mode 100644
index 00000000000..db63fbb6084
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Catalog\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Catalog/_files/order_item_with_product_and_custom_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Catalog/_files/order_item_with_product_and_custom_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $expected = $orderItem->getBuyRequest()->getOptions();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('custom_options', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['custom_options'];
+
+        $expectedOptions = [];
+        foreach ($expected as $optionId => $optionValue) {
+            if (is_array($optionValue)) {
+                $optionValue = implode(',', $optionValue);
+            }
+            $expectedOptions[] = [
+                'option_id' => $optionId,
+                'option_value' => $optionValue,
+            ];
+        }
+        $this->assertEquals($expectedOptions, $actualOptions);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
new file mode 100644
index 00000000000..25cb0e8652b
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\ConfigurableProduct\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $expected = $orderItem->getBuyRequest()->getSuperAttribute();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('configurable_item_options', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['configurable_item_options'];
+
+        $this->assertTrue(is_array($actualOptions));
+        $this->assertTrue(is_array($actualOptions[0]));
+        $this->assertArrayHasKey('option_id', $actualOptions[0]);
+        $this->assertArrayHasKey('option_value', $actualOptions[0]);
+
+        $this->assertEquals(key($expected), $actualOptions[0]['option_id']);
+        $this->assertEquals(current($expected), $actualOptions[0]['option_value']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
new file mode 100644
index 00000000000..41a5c6a5069
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Downloadable\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $expected = $orderItem->getBuyRequest()->getLinks();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('downloadable_option', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['downloadable_option'];
+
+        $this->assertArrayHasKey('downloadable_links', $actualOptions);
+        $this->assertEquals($expected, $actualOptions['downloadable_links']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
new file mode 100644
index 00000000000..1cd2b7a3065
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Service\V1;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemGetListTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Sales/_files/order.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $this->assertEquals($orderItem->getId(), $response['item_id']);
+        $this->assertEquals($orderItem->getOrderId(), $response['order_id']);
+        $this->assertEquals($orderItem->getProductId(), $response['product_id']);
+        $this->assertEquals($orderItem->getProductType(), $response['product_type']);
+        $this->assertEquals($orderItem->getBasePrice(), $response['base_price']);
+        $this->assertEquals($orderItem->getRowTotal(), $response['row_total']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php
new file mode 100644
index 00000000000..ca2803a520d
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Service\V1;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemGetTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Sales/_files/order.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        /** @var \Magento\Sales\Model\Order\Item $orderItem */
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $this->assertEquals($orderItem->getId(), $response['item_id']);
+        $this->assertEquals($orderItem->getOrderId(), $response['order_id']);
+        $this->assertEquals($orderItem->getProductId(), $response['product_id']);
+        $this->assertEquals($orderItem->getProductType(), $response['product_type']);
+        $this->assertEquals($orderItem->getBasePrice(), $response['base_price']);
+        $this->assertEquals($orderItem->getRowTotal(), $response['row_total']);
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php
new file mode 100644
index 00000000000..b4e01574fae
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_with_multiple_options.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(3);
+
+/** @var $typeInstance \Magento\Bundle\Model\Product\Type */
+$typeInstance = $product->getTypeInstance();
+$typeInstance->setStoreFilter($product->getStoreId(), $product);
+$optionCollection = $typeInstance->getOptionsCollection($product);
+
+$bundleOptions = [];
+$bundleOptionsQty = [];
+foreach ($optionCollection as $option) {
+    /** @var $option \Magento\Bundle\Model\Option */
+    $selectionsCollection = $typeInstance->getSelectionsCollection([$option->getId()], $product);
+    if ($option->isMultiSelection()) {
+        $bundleOptions[$option->getId()] = array_column($selectionsCollection->toArray(), 'selection_id');
+    } else {
+        $bundleOptions[$option->getId()] = $selectionsCollection->getFirstItem()->getSelectionId();
+    }
+    $bundleOptionsQty[$option->getId()] = 1;
+}
+
+$requestInfo = [
+    'product' => $product->getId(),
+    'bundle_option' => $bundleOptions,
+    'bundle_option_qty' => $bundleOptionsQty,
+    'qty' => 1,
+];
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php
new file mode 100644
index 00000000000..e528be5818b
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_with_multiple_options_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php
new file mode 100644
index 00000000000..0d4b9ba608a
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_simple.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(1);
+
+$optionValuesByType = [
+    'field' => 'Test value',
+    'date_time' => [
+        'year' => '2015',
+        'month' => '9',
+        'day' => '9',
+        'hour' => '2',
+        'minute' => '2',
+        'day_part' => 'am',
+        'date_internal' => '',
+    ],
+    'drop_down' => '3-1-select',
+    'radio' => '4-1-radio',
+];
+
+$requestInfo = ['options' => []];
+$productOptions = $product->getOptions();
+foreach ($productOptions as $option) {
+    $requestInfo['options'][$option->getOptionId()] = $optionValuesByType[$option->getType()];
+}
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php
new file mode 100644
index 00000000000..dc1ef8a350e
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_simple_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
new file mode 100644
index 00000000000..3a63d6c93e7
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require 'product_configurable.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(1);
+
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
+$eavConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config');
+$attribute = $eavConfig->getAttribute('catalog_product', 'test_configurable');
+
+/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
+$options = $objectManager->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection');
+$option = $options->setAttributeFilter($attribute->getId())
+    ->getFirstItem();
+
+$requestInfo = [
+    'qty' => 1,
+    'super_attribute' => [
+        $attribute->getId() => $option->getId(),
+    ],
+];
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php
new file mode 100644
index 00000000000..bb2003ecfc1
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_configurable_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
new file mode 100644
index 00000000000..e7919efd483
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_downloadable.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(1);
+
+$requestInfo = [
+    'links' => array_keys($product->getDownloadableLinks()),
+];
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php
new file mode 100644
index 00000000000..3d18328b96d
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_downloadable_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
-- 
GitLab


From 087c8d017457c9a2dfdc68c54fcb9d813d0cd6cb Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Mon, 12 Oct 2015 11:59:24 +0300
Subject: [PATCH 334/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

renamed  namespace
---
 .../Magento/AdminNotification/Model/Feed.php  |  4 +-
 .../Model/ResourceModel/Grid/Collection.php   |  2 +-
 .../Model/ResourceModel/Inbox.php             |  2 +-
 .../Model/ResourceModel/Inbox/Collection.php  |  2 +-
 .../Inbox/Collection/Critical.php             |  2 +-
 .../Model/ResourceModel/System/Message.php    |  2 +-
 .../System/Message/Collection.php             |  6 +--
 .../Message/Collection/Synchronized.php       |  2 +-
 .../ResourceModel/Permissions/Collection.php  |  2 +-
 .../Model/ResourceModel/Role.php              |  6 +--
 .../Model/ResourceModel/Role/Collection.php   |  2 +-
 .../Model/ResourceModel/Rules.php             |  6 +--
 .../Model/ResourceModel/Rules/Collection.php  |  2 +-
 .../Authorizenet/Model/Authorizenet.php       |  4 +-
 .../Magento/Authorizenet/Model/Directpost.php |  4 +-
 .../Model/ResourceModel/Debug.php             |  2 +-
 .../Model/ResourceModel/Debug/Collection.php  |  2 +-
 .../Block/Dashboard/AbstractDashboard.php     |  2 +-
 .../Helper/Dashboard/AbstractDashboard.php    |  4 +-
 .../Backup/Model/Config/Backend/Cron.php      |  4 +-
 .../Magento/Braintree/Model/PaymentMethod.php |  4 +-
 .../Braintree/Model/PaymentMethod/PayPal.php  |  4 +-
 .../Config/Backend/Countrycreditcard.php      |  4 +-
 .../Config/Backend/CountrycreditcardTest.php  |  2 +-
 .../Bundle/Model/ResourceModel/Bundle.php     |  6 +--
 .../Bundle/Model/ResourceModel/Option.php     |  6 +--
 .../Model/ResourceModel/Option/Collection.php |  2 +-
 .../Bundle/Model/ResourceModel/Selection.php  |  2 +-
 .../Sales/Order/Pdf/Items/Creditmemo.php      |  4 +-
 .../Model/Sales/Order/Pdf/Items/Invoice.php   |  4 +-
 .../Model/Sales/Order/Pdf/Items/Shipment.php  |  4 +-
 .../Bundle/Model/Source/Option/Type.php       |  4 +-
 .../Test/Unit/Model/OptionRepositoryTest.php  |  2 +-
 .../Bundle/Test/Unit/Model/OptionTest.php     |  4 +-
 .../Test/Unit/Model/Product/TypeTest.php      |  6 +--
 .../Captcha/Model/ResourceModel/Log.php       |  6 +--
 .../Adminhtml/Category/AbstractCategory.php   |  2 +-
 .../Block/Product/ProductList/Toolbar.php     |  4 +-
 .../Block/Product/Widget/Html/Pager.php       |  2 +-
 .../Magento/Catalog/Model/AbstractModel.php   |  4 +-
 app/code/Magento/Catalog/Model/Category.php   |  4 +-
 .../Catalog/Model/Config/Backend/Category.php |  4 +-
 .../Model/Config/CatalogClone/Media/Image.php |  4 +-
 .../Model/CustomOptions/CustomOption.php      |  2 +-
 app/code/Magento/Catalog/Model/Design.php     |  4 +-
 .../Catalog/Model/Entity/Attribute.php        |  4 +-
 .../Category/Flat/Plugin/StoreGroup.php       |  6 +--
 .../Category/Flat/System/Config/Mode.php      |  4 +-
 .../Category/Product/Plugin/StoreGroup.php    |  4 +-
 .../Product/Flat/System/Config/Mode.php       |  4 +-
 .../Price/System/Config/PriceScope.php        |  4 +-
 .../Magento/Catalog/Model/Product/Action.php  |  4 +-
 .../Catalog/Model/Product/Attribute/Group.php |  4 +-
 .../Catalog/Model/Product/Compare/Item.php    |  4 +-
 .../Magento/Catalog/Model/Product/Image.php   |  4 +-
 .../Magento/Catalog/Model/Product/Link.php    |  4 +-
 .../Magento/Catalog/Model/Product/Option.php  |  6 +--
 .../Catalog/Model/Product/Option/Value.php    |  4 +-
 .../Catalog/Model/ResourceModel/Attribute.php |  4 +-
 .../Category/Attribute/Collection.php         |  4 +-
 .../Model/ResourceModel/Category/Flat.php     |  4 +-
 .../Category/Flat/Collection.php              |  4 +-
 .../Catalog/Model/ResourceModel/Config.php    |  6 +--
 .../Model/ResourceModel/Eav/Attribute.php     |  4 +-
 .../ResourceModel/Layer/Filter/Attribute.php  |  2 +-
 .../ResourceModel/Layer/Filter/Decimal.php    |  2 +-
 .../ResourceModel/Layer/Filter/Price.php      |  6 +--
 .../Backend/GroupPrice/AbstractGroupPrice.php |  2 +-
 .../Product/Attribute/Backend/Media.php       |  2 +-
 .../Product/Attribute/Collection.php          |  4 +-
 .../ResourceModel/Product/Collection.php      |  2 +-
 .../ResourceModel/Product/Compare/Item.php    |  2 +-
 .../Model/ResourceModel/Product/Flat.php      |  6 +--
 .../Product/Indexer/AbstractIndexer.php       |  4 +-
 .../Product/Indexer/Eav/AbstractEav.php       |  4 +-
 .../Product/Indexer/Eav/Source.php            |  4 +-
 .../Product/Indexer/Price/DefaultPrice.php    |  4 +-
 .../Model/ResourceModel/Product/Link.php      |  6 +--
 .../ResourceModel/Product/Link/Collection.php |  2 +-
 .../Model/ResourceModel/Product/Option.php    |  8 ++--
 .../Product/Option/Collection.php             |  6 +--
 .../ResourceModel/Product/Option/Value.php    |  8 ++--
 .../Product/Option/Value/Collection.php       |  2 +-
 .../Model/ResourceModel/Product/Relation.php  |  2 +-
 .../Model/ResourceModel/Product/Website.php   |  6 +--
 .../Catalog/Model/ResourceModel/Url.php       |  6 +--
 .../Backend/Catalog/Url/Rewrite/Suffix.php    |  4 +-
 .../Catalog/Test/Unit/Model/CategoryTest.php  |  2 +-
 .../Model/CustomOptions/CustomOptionTest.php  |  2 +-
 .../Test/Unit/Model/Entity/AttributeTest.php  |  4 +-
 .../Test/Unit/Model/Product/ActionTest.php    |  2 +-
 .../Product/Attribute/Backend/MediaTest.php   |  2 +-
 .../Test/Unit/Model/Product/LinkTest.php      |  4 +-
 .../Catalog/Test/Unit/Model/ProductTest.php   |  2 +-
 .../Model/ResourceModel/Eav/AttributeTest.php |  2 +-
 .../Model/ResourceModel/Product/FlatTest.php  |  2 +-
 .../Model/Import/Product.php                  |  4 +-
 .../Test/Unit/Model/Import/ProductTest.php    |  8 ++--
 .../Model/Adminhtml/Stock/Item.php            |  4 +-
 .../Model/Config/Backend/AbstractValue.php    |  4 +-
 .../Indexer/Stock/DefaultStock.php            |  4 +-
 .../Model/ResourceModel/Stock.php             |  6 +--
 .../Model/ResourceModel/Stock/Item.php        |  8 ++--
 .../Model/ResourceModel/Stock/Status.php      |  6 +--
 .../CatalogInventory/Model/Stock/Item.php     |  4 +-
 .../CatalogInventory/Model/Stock/Status.php   |  4 +-
 .../System/Config/Backend/Minsaleqty.php      |  4 +-
 .../Unit/Model/Adminhtml/Stock/ItemTest.php   |  2 +-
 .../CatalogRule/Model/ResourceModel/Rule.php  |  6 +--
 .../ResourceModel/Rule/Product/Price.php      |  2 +-
 .../Rule/Product/Price/Collection.php         |  2 +-
 app/code/Magento/CatalogRule/Model/Rule.php   | 10 ++---
 .../CatalogRule/Test/Unit/Model/RuleTest.php  |  4 +-
 .../System/Config/Backend/Engine.php          |  4 +-
 .../Magento/CatalogSearch/Model/Fulltext.php  |  2 +-
 .../Model/ResourceModel/Advanced.php          |  6 +--
 .../Model/ResourceModel/Fulltext.php          |  6 +--
 .../Unit/Model/ResourceModel/FulltextTest.php |  4 +-
 .../Model/ResourceModel/Category/Product.php  |  2 +-
 .../Category/ProductCollection.php            |  2 +-
 app/code/Magento/CatalogWidget/Model/Rule.php |  4 +-
 .../Checkout/Model/ResourceModel/Cart.php     |  2 +-
 .../Model/ResourceModel/Agreement.php         |  6 +--
 .../ResourceModel/Agreement/Collection.php    |  2 +-
 .../ResourceModel/AbstractCollection.php      |  6 +--
 .../Magento/Cms/Model/ResourceModel/Block.php |  6 +--
 .../ResourceModel/Block/Grid/Collection.php   |  4 +-
 .../Magento/Cms/Model/ResourceModel/Page.php  |  6 +--
 .../ResourceModel/Page/Grid/Collection.php    |  6 +--
 .../Magento/Cms/Test/Unit/Model/PageTest.php  |  2 +-
 .../ResourceModel/AbstractCollectionTest.php  |  4 +-
 .../Model/Config/Backend/Admin/Custom.php     |  4 +-
 .../Model/Config/Backend/Admin/Robots.php     |  4 +-
 .../Model/Config/Backend/Admin/Usecustom.php  |  4 +-
 .../Config/Backend/Admin/Usesecretkey.php     |  4 +-
 .../Config/Model/Config/Backend/Baseurl.php   |  4 +-
 .../Backend/Currency/AbstractCurrency.php     |  4 +-
 .../Model/Config/Backend/Currency/Allow.php   |  4 +-
 .../Model/Config/Backend/Currency/Base.php    |  4 +-
 .../Model/Config/Backend/Currency/Cron.php    |  4 +-
 .../Config/Model/Config/Backend/Encrypted.php |  4 +-
 .../Config/Model/Config/Backend/File.php      |  4 +-
 .../Model/Config/Backend/Image/Adapter.php    |  4 +-
 .../Config/Model/Config/Backend/Locale.php    |  4 +-
 .../Config/Model/Config/Backend/Log/Cron.php  |  4 +-
 .../Config/Model/Config/Backend/Secure.php    |  4 +-
 .../Config/Model/Config/Backend/Store.php     |  4 +-
 .../Config/Model/Config/Backend/Translate.php |  4 +-
 .../Config/Model/ResourceModel/Config.php     |  6 +--
 .../Model/ResourceModel/Config/Data.php       |  2 +-
 .../ResourceModel/Config/Data/Collection.php  |  2 +-
 .../Model/Config/Backend/EncryptedTest.php    |  2 +-
 .../Product/Type/Configurable.php             |  6 +--
 .../Product/Type/Configurable/Attribute.php   |  6 +--
 .../Configurable/Attribute/Collection.php     |  2 +-
 .../Model/System/Config/Backend/LinksTest.php |  2 +-
 .../Cookie/Model/Config/Backend/Domain.php    |  4 +-
 .../Cookie/Model/Config/Backend/Lifetime.php  |  4 +-
 .../Cookie/Model/Config/Backend/Path.php      |  4 +-
 .../Unit/Model/Config/Backend/DomainTest.php  |  4 +-
 .../Model/Config/Backend/Product/Alert.php    |  4 +-
 .../Cron/Model/Config/Backend/Sitemap.php     |  4 +-
 .../Cron/Model/ResourceModel/Schedule.php     |  2 +-
 .../ResourceModel/Schedule/Collection.php     |  2 +-
 app/code/Magento/Cron/Model/Schedule.php      |  4 +-
 app/code/Magento/Customer/Model/Address.php   |  4 +-
 .../Model/Address/AbstractAddress.php         |  4 +-
 app/code/Magento/Customer/Model/Attribute.php |  4 +-
 .../Model/Config/Backend/Address/Street.php   |  4 +-
 .../DisableAutoGroupAssignDefault.php         |  4 +-
 .../Model/Config/Backend/Show/Customer.php    |  4 +-
 .../Magento/Customer/Model/Config/Share.php   |  4 +-
 app/code/Magento/Customer/Model/Group.php     |  4 +-
 .../Customer/Model/ResourceModel/Address.php  |  8 ++--
 .../Model/ResourceModel/Address/Relation.php  |  2 +-
 .../Customer/Model/ResourceModel/Customer.php |  8 ++--
 .../ResourceModel/Customer/Collection.php     |  4 +-
 .../Model/ResourceModel/Customer/Relation.php |  2 +-
 .../Customer/Model/ResourceModel/Group.php    | 10 ++---
 .../Model/ResourceModel/Group/Collection.php  |  2 +-
 .../Customer/Model/ResourceModel/Visitor.php  |  6 +--
 .../ResourceModel/Visitor/Collection.php      |  2 +-
 app/code/Magento/Customer/Model/Visitor.php   |  4 +-
 .../Test/Unit/Model/AttributeTest.php         |  4 +-
 .../ResourceModel/Address/RelationTest.php    |  2 +-
 .../Unit/Model/ResourceModel/AddressTest.php  |  8 ++--
 .../Unit/Model/ResourceModel/GroupTest.php    |  6 +--
 app/code/Magento/Customer/etc/di.xml          |  6 +--
 .../Import/CustomerComposite/Data.php         |  4 +-
 .../Import/CustomerComposite/DataTest.php     |  2 +-
 .../Model/Config/Backend/AllowedIps.php       |  4 +-
 app/code/Magento/Directory/Model/Country.php  |  4 +-
 app/code/Magento/Directory/Model/Currency.php |  4 +-
 .../Directory/Model/ResourceModel/Country.php |  2 +-
 .../ResourceModel/Country/Collection.php      |  6 +--
 .../Model/ResourceModel/Country/Format.php    |  2 +-
 .../Country/Format/Collection.php             |  2 +-
 .../Model/ResourceModel/Currency.php          |  2 +-
 .../Directory/Model/ResourceModel/Region.php  |  6 +--
 .../Model/ResourceModel/Region/Collection.php |  6 +--
 .../ResourceModel/Country/CollectionTest.php  |  2 +-
 app/code/Magento/Downloadable/Model/Link.php  |  4 +-
 .../Downloadable/Model/ResourceModel/Link.php |  6 +--
 .../Model/ResourceModel/Link/Collection.php   |  2 +-
 .../Model/ResourceModel/Link/Purchased.php    |  2 +-
 .../Link/Purchased/Collection.php             |  2 +-
 .../ResourceModel/Link/Purchased/Item.php     |  2 +-
 .../Link/Purchased/Item/Collection.php        |  2 +-
 .../Model/ResourceModel/Sample.php            |  2 +-
 .../Model/ResourceModel/Sample/Collection.php |  2 +-
 .../Sales/Order/Pdf/Items/AbstractItems.php   |  4 +-
 .../Sales/Order/Pdf/Items/Creditmemo.php      |  4 +-
 .../Model/Sales/Order/Pdf/Items/Invoice.php   |  4 +-
 .../Magento/Downloadable/Model/Sample.php     |  4 +-
 .../Eav/Model/Entity/AbstractEntity.php       |  6 +--
 .../Magento/Eav/Model/Entity/Attribute.php    |  4 +-
 .../Entity/Attribute/AbstractAttribute.php    |  4 +-
 .../Eav/Model/Entity/Attribute/Set.php        |  6 +--
 .../Entity/Collection/AbstractCollection.php  |  2 +-
 .../VersionControl/AbstractCollection.php     |  6 +--
 app/code/Magento/Eav/Model/Entity/Context.php | 16 +++----
 app/code/Magento/Eav/Model/Entity/Type.php    |  6 +--
 .../Entity/VersionControl/AbstractEntity.php  | 12 +++---
 .../Model/Entity/VersionControl/Metadata.php  |  2 +-
 app/code/Magento/Eav/Model/Form/Element.php   |  4 +-
 app/code/Magento/Eav/Model/Form/Fieldset.php  |  4 +-
 app/code/Magento/Eav/Model/Form/Type.php      |  4 +-
 .../ResourceModel/Attribute/Collection.php    |  4 +-
 .../Eav/Model/ResourceModel/Config.php        |  2 +-
 .../Model/ResourceModel/Entity/Attribute.php  |  6 +--
 .../Entity/Attribute/Collection.php           |  8 ++--
 .../Entity/Attribute/Grid/Collection.php      |  8 ++--
 .../ResourceModel/Entity/Attribute/Group.php  |  6 +--
 .../Entity/Attribute/Group/Collection.php     |  2 +-
 .../ResourceModel/Entity/Attribute/Option.php |  2 +-
 .../Entity/Attribute/Option/Collection.php    |  6 +--
 .../ResourceModel/Entity/Attribute/Set.php    |  6 +--
 .../Entity/Attribute/Set/Collection.php       |  2 +-
 .../Eav/Model/ResourceModel/Entity/Store.php  |  2 +-
 .../Eav/Model/ResourceModel/Entity/Type.php   |  2 +-
 .../ResourceModel/Entity/Type/Collection.php  |  2 +-
 .../Model/ResourceModel/Form/Attribute.php    |  2 +-
 .../Form/Attribute/Collection.php             |  6 +--
 .../Eav/Model/ResourceModel/Form/Element.php  |  2 +-
 .../ResourceModel/Form/Element/Collection.php |  2 +-
 .../Eav/Model/ResourceModel/Form/Fieldset.php |  2 +-
 .../Form/Fieldset/Collection.php              |  4 +-
 .../Eav/Model/ResourceModel/Form/Type.php     |  4 +-
 .../ResourceModel/Form/Type/Collection.php    |  2 +-
 .../VersionControl/AbstractCollectionTest.php |  4 +-
 .../Eav/Test/Unit/Model/Entity/TypeTest.php   |  2 +-
 .../VersionControl/AbstractEntityTest.php     |  8 ++--
 .../Entity/VersionControl/MetadataTest.php    |  2 +-
 .../Attribute/CollectionTest.php              |  4 +-
 .../Attribute/Option/CollectionTest.php       |  4 +-
 .../Entity/Attribute/SetTest.php              |  6 +--
 .../ResourceModel/Entity/AttributeTest.php    |  4 +-
 .../Email/Model/ResourceModel/Template.php    |  6 +--
 .../ResourceModel/Template/Collection.php     |  2 +-
 .../Model/ResourceModel/Key/Change.php        |  6 +--
 .../Model/ResourceModel/Key/ChangeTest.php    |  6 +--
 .../Model/ResourceModel/Message.php           |  2 +-
 .../ResourceModel/Message/Collection.php      |  2 +-
 .../Config/Backend/AbstractConversion.php     |  4 +-
 .../Model/ResourceModel/Code.php              |  2 +-
 .../Model/ResourceModel/History.php           |  2 +-
 .../ResourceModel/History/Collection.php      |  2 +-
 .../Model/ResourceModel/Import/Data.php       |  6 +--
 .../Model/ResourceModel/AbstractResource.php  |  6 +--
 .../Model/ResourceModel/Indexer/State.php     |  2 +-
 .../Indexer/State/Collection.php              |  2 +-
 .../Model/ResourceModel/Mview/View/State.php  |  2 +-
 .../Mview/View/State/Collection.php           |  2 +-
 .../Magento/Integration/Model/Integration.php |  4 +-
 .../Integration/Model/Oauth/Consumer.php      |  4 +-
 .../Magento/Integration/Model/Oauth/Nonce.php |  4 +-
 .../Magento/Integration/Model/Oauth/Token.php |  4 +-
 .../Model/ResourceModel/Integration.php       |  2 +-
 .../ResourceModel/Integration/Collection.php  |  2 +-
 .../Model/ResourceModel/Oauth/Consumer.php    |  6 +--
 .../Oauth/Consumer/Collection.php             |  2 +-
 .../Model/ResourceModel/Oauth/Nonce.php       |  2 +-
 .../ResourceModel/Oauth/Nonce/Collection.php  |  2 +-
 .../Model/ResourceModel/Oauth/Token.php       |  6 +--
 .../ResourceModel/Oauth/Token/Collection.php  |  2 +-
 .../Test/Unit/Model/IntegrationTest.php       |  4 +-
 .../Test/Unit/Model/Oauth/ConsumerTest.php    |  2 +-
 .../Test/Unit/Model/Oauth/NonceTest.php       |  4 +-
 .../Test/Unit/Model/Oauth/TokenTest.php       |  4 +-
 .../Integration/CollectionTest.php            |  2 +-
 .../Model/ResourceModel/IntegrationTest.php   |  4 +-
 .../ResourceModel/Oauth/ConsumerTest.php      |  2 +-
 .../Model/ResourceModel/Oauth/NonceTest.php   |  2 +-
 .../Oauth/Token/CollectionTest.php            |  2 +-
 .../Model/ResourceModel/Oauth/TokenTest.php   |  2 +-
 .../Config/Backend/Storage/Media/Database.php |  4 +-
 .../MediaStorage/Model/File/Storage.php       |  4 +-
 .../Storage/Database/AbstractDatabase.php     |  6 +--
 .../File/Storage/AbstractStorage.php          |  2 +-
 .../ResourceModel/File/Storage/Database.php   |  4 +-
 .../Unit/Helper/File/Storage/DatabaseTest.php |  4 +-
 .../Model/ResourceModel/Counts.php            |  2 +-
 .../Model/ResourceModel/Counts/Collection.php |  2 +-
 .../Model/ResourceModel/Module.php            |  2 +-
 .../Model/ResourceModel/Module/Collection.php |  2 +-
 .../Model/ResourceModel/Orders.php            |  2 +-
 .../Model/ResourceModel/Orders/Collection.php |  2 +-
 .../Model/ResourceModel/System.php            |  2 +-
 .../Model/ResourceModel/System/Collection.php |  2 +-
 .../Model/ResourceModel/Users.php             |  2 +-
 .../Model/ResourceModel/Users/Collection.php  |  2 +-
 app/code/Magento/Newsletter/Model/Problem.php |  4 +-
 app/code/Magento/Newsletter/Model/Queue.php   |  4 +-
 .../Model/ResourceModel/Grid/Collection.php   |  2 +-
 .../Model/ResourceModel/Problem.php           |  2 +-
 .../ResourceModel/Problem/Collection.php      |  6 +--
 .../Newsletter/Model/ResourceModel/Queue.php  |  6 +--
 .../Model/ResourceModel/Queue/Collection.php  |  6 +--
 .../Model/ResourceModel/Subscriber.php        |  6 +--
 .../ResourceModel/Subscriber/Collection.php   |  6 +--
 .../Model/ResourceModel/Template.php          |  6 +--
 .../ResourceModel/Template/Collection.php     |  2 +-
 .../Magento/Newsletter/Model/Subscriber.php   |  4 +-
 .../Model/Config/Backend/Tablerate.php        |  4 +-
 .../Model/ResourceModel/Carrier/Tablerate.php |  6 +--
 .../Carrier/Tablerate/Collection.php          |  2 +-
 app/code/Magento/Payment/Model/Info.php       |  4 +-
 .../Payment/Model/Method/AbstractMethod.php   |  4 +-
 app/code/Magento/Payment/Model/Method/Cc.php  |  4 +-
 .../Magento/Payment/Model/Method/Free.php     |  4 +-
 .../Model/Billing/AbstractAgreement.php       |  4 +-
 .../Paypal/Model/Billing/Agreement.php        |  4 +-
 app/code/Magento/Paypal/Model/Cert.php        |  4 +-
 app/code/Magento/Paypal/Model/Direct.php      |  4 +-
 app/code/Magento/Paypal/Model/Express.php     |  4 +-
 app/code/Magento/Paypal/Model/Hostedpro.php   |  4 +-
 .../Magento/Paypal/Model/Method/Agreement.php |  4 +-
 .../Paypal/Model/Payflow/Transparent.php      |  4 +-
 .../Magento/Paypal/Model/PayflowExpress.php   |  4 +-
 app/code/Magento/Paypal/Model/Payflowlink.php |  4 +-
 app/code/Magento/Paypal/Model/Payflowpro.php  |  4 +-
 .../Method/Billing/AbstractAgreement.php      |  4 +-
 .../Paypal/Model/Report/Settlement.php        |  4 +-
 .../Model/ResourceModel/Billing/Agreement.php |  2 +-
 .../Billing/Agreement/Collection.php          |  6 +--
 .../Paypal/Model/ResourceModel/Cert.php       |  8 ++--
 .../Model/ResourceModel/Report/Settlement.php |  6 +--
 .../ResourceModel/Report/Settlement/Row.php   |  2 +-
 .../Report/Settlement/Row/Collection.php      |  2 +-
 .../Model/System/Config/Backend/Cert.php      |  4 +-
 .../Model/System/Config/Backend/Cron.php      |  4 +-
 .../System/Config/Backend/MerchantCountry.php |  4 +-
 .../Model/ResourceModel/Session.php           |  6 +--
 app/code/Magento/Persistent/Model/Session.php |  4 +-
 .../Test/Unit/Model/SessionTest.php           |  2 +-
 app/code/Magento/ProductAlert/Model/Email.php |  4 +-
 app/code/Magento/ProductAlert/Model/Price.php |  4 +-
 .../Model/ResourceModel/AbstractResource.php  |  2 +-
 .../Model/ResourceModel/Price.php             |  4 +-
 .../Model/ResourceModel/Price/Collection.php  |  2 +-
 .../Model/ResourceModel/Stock.php             |  4 +-
 .../Model/ResourceModel/Stock/Collection.php  |  2 +-
 app/code/Magento/ProductAlert/Model/Stock.php |  4 +-
 app/code/Magento/Quote/Model/Quote.php        |  4 +-
 .../Magento/Quote/Model/Quote/Address.php     |  8 ++--
 .../Quote/Model/Quote/Address/Relation.php    |  2 +-
 app/code/Magento/Quote/Model/Quote/Item.php   |  4 +-
 .../Quote/Model/Quote/Item/AbstractItem.php   |  4 +-
 .../Magento/Quote/Model/Quote/Payment.php     |  4 +-
 .../Magento/Quote/Model/Quote/Relation.php    |  2 +-
 app/code/Magento/Quote/Model/QuoteIdMask.php  |  4 +-
 .../Quote/Model/ResourceModel/Quote.php       | 10 ++---
 .../Model/ResourceModel/Quote/Address.php     |  2 +-
 .../Quote/Address/Collection.php              |  2 +-
 .../ResourceModel/Quote/Address/Item.php      |  2 +-
 .../Quote/Address/Item/Collection.php         |  2 +-
 .../ResourceModel/Quote/Address/Rate.php      |  2 +-
 .../Quote/Address/Rate/Collection.php         | 10 ++---
 .../Model/ResourceModel/Quote/Collection.php  |  2 +-
 .../Quote/Model/ResourceModel/Quote/Item.php  |  2 +-
 .../ResourceModel/Quote/Item/Collection.php   | 10 ++---
 .../Model/ResourceModel/Quote/Item/Option.php |  2 +-
 .../Quote/Item/Option/Collection.php          |  2 +-
 .../Model/ResourceModel/Quote/Payment.php     |  2 +-
 .../Quote/Payment/Collection.php              | 10 ++---
 .../Model/ResourceModel/Quote/QuoteIdMask.php |  2 +-
 .../Unit/Model/Quote/Address/RelationTest.php |  4 +-
 .../Quote/Item/CollectionTest.php             |  8 ++--
 .../Model/ResourceModel/Quote/ItemTest.php    | 16 +++----
 .../ResourceModel/Quote/QuoteAddressTest.php  |  8 ++--
 app/code/Magento/Quote/etc/di.xml             |  4 +-
 app/code/Magento/Reports/Model/Event.php      |  4 +-
 .../Reports/Model/Grouped/Collection.php      |  2 +-
 .../Model/Product/Index/AbstractIndex.php     |  4 +-
 .../Reports/Model/Product/Index/Compared.php  |  4 +-
 .../ResourceModel/Customer/Collection.php     |  4 +-
 .../Reports/Model/ResourceModel/Event.php     |  6 +--
 .../Model/ResourceModel/Event/Collection.php  |  2 +-
 .../Model/ResourceModel/Event/Type.php        |  2 +-
 .../ResourceModel/Event/Type/Collection.php   |  2 +-
 .../Model/ResourceModel/Order/Collection.php  |  8 ++--
 .../Product/Index/AbstractIndex.php           |  8 ++--
 .../Model/ResourceModel/Quote/Collection.php  |  8 ++--
 .../ResourceModel/Quote/Item/Collection.php   |  6 +--
 .../ResourceModel/Report/AbstractReport.php   |  6 +--
 .../Model/ResourceModel/Report/Collection.php |  2 +-
 .../Report/Collection/AbstractCollection.php  |  2 +-
 .../Report/Collection/Factory.php             |  2 +-
 .../ResourceModel/Report/Product/Viewed.php   |  4 +-
 .../Review/Customer/Collection.php            |  4 +-
 .../ResourceModel/Wishlist/Collection.php     |  6 +--
 .../Unit/Model/Product/Index/ComparedTest.php |  4 +-
 .../ResourceModel/Event/CollectionTest.php    |  4 +-
 .../Unit/Model/ResourceModel/EventTest.php    |  4 +-
 .../ResourceModel/Order/CollectionTest.php    |  6 +--
 .../ResourceModel/Quote/CollectionTest.php    |  4 +-
 .../Collection/AbstractCollectionTest.php     |  2 +-
 .../Report/Product/ViewedTest.php             |  4 +-
 app/code/Magento/Review/Model/Rating.php      |  4 +-
 .../Review/Model/ResourceModel/Rating.php     |  6 +--
 .../Model/ResourceModel/Rating/Collection.php |  6 +--
 .../Model/ResourceModel/Rating/Entity.php     |  2 +-
 .../ResourceModel/Rating/Grid/Collection.php  |  4 +-
 .../Model/ResourceModel/Rating/Option.php     |  6 +--
 .../Rating/Option/Collection.php              |  2 +-
 .../ResourceModel/Rating/Option/Vote.php      |  2 +-
 .../Rating/Option/Vote/Collection.php         |  6 +--
 .../Review/Model/ResourceModel/Review.php     |  6 +--
 .../Model/ResourceModel/Review/Collection.php |  6 +--
 .../Model/ResourceModel/Review/Status.php     |  2 +-
 .../Review/Status/Collection.php              |  2 +-
 .../Model/ResourceModel/Review/Summary.php    |  2 +-
 .../Review/Summary/Collection.php             |  2 +-
 app/code/Magento/Review/Model/Review.php      |  4 +-
 .../Magento/Review/Model/Review/Status.php    |  4 +-
 app/code/Magento/Review/Model/Rss.php         |  2 +-
 .../ResourceModel/Review/CollectionTest.php   |  4 +-
 .../Review/Summary/CollectionTest.php         |  4 +-
 .../Rss/Model/System/Config/Backend/Links.php |  4 +-
 app/code/Magento/Rule/Model/AbstractModel.php |  4 +-
 .../Model/ResourceModel/AbstractResource.php  |  2 +-
 .../Rule/Collection/AbstractCollection.php    |  2 +-
 .../Collection/AbstractCollectionTest.php     |  4 +-
 .../AbstractCreditmemo/Pdfcreditmemos.php     |  2 +-
 .../Invoice/AbstractInvoice/Pdfinvoices.php   |  2 +-
 .../Adminhtml/Order/AbstractMassAction.php    |  2 +-
 .../Controller/Adminhtml/Order/MassCancel.php |  2 +-
 .../Controller/Adminhtml/Order/MassHold.php   |  2 +-
 .../Controller/Adminhtml/Order/MassUnhold.php |  2 +-
 .../Adminhtml/Order/Pdfcreditmemos.php        |  2 +-
 .../Controller/Adminhtml/Order/Pdfdocs.php    |  2 +-
 .../Adminhtml/Order/Pdfinvoices.php           |  2 +-
 .../Adminhtml/Order/Pdfshipments.php          |  2 +-
 .../AbstractShipment/Pdfshipments.php         |  2 +-
 app/code/Magento/Sales/Helper/Admin.php       |  4 +-
 .../Magento/Sales/Model/AbstractModel.php     |  4 +-
 app/code/Magento/Sales/Model/Order.php        |  4 +-
 .../Magento/Sales/Model/Order/Address.php     |  4 +-
 .../Magento/Sales/Model/Order/Creditmemo.php  |  4 +-
 .../Sales/Model/Order/Creditmemo/Comment.php  |  4 +-
 .../Sales/Model/Order/Creditmemo/Item.php     |  4 +-
 .../Magento/Sales/Model/Order/Invoice.php     |  4 +-
 .../Sales/Model/Order/Invoice/Comment.php     |  4 +-
 .../Sales/Model/Order/Invoice/Item.php        |  4 +-
 app/code/Magento/Sales/Model/Order/Item.php   |  4 +-
 .../Magento/Sales/Model/Order/Payment.php     |  4 +-
 .../Sales/Model/Order/Payment/Info.php        |  4 +-
 .../Sales/Model/Order/Payment/Transaction.php |  4 +-
 .../Model/Order/Pdf/Items/AbstractItems.php   |  4 +-
 .../Items/Creditmemo/DefaultCreditmemo.php    |  4 +-
 .../Pdf/Items/Invoice/DefaultInvoice.php      |  4 +-
 .../Pdf/Items/Shipment/DefaultShipment.php    |  4 +-
 .../Magento/Sales/Model/Order/Shipment.php    |  4 +-
 .../Sales/Model/Order/Shipment/Comment.php    |  4 +-
 .../Sales/Model/Order/Shipment/Item.php       |  4 +-
 .../Sales/Model/Order/Shipment/Track.php      |  4 +-
 app/code/Magento/Sales/Model/Order/Status.php |  4 +-
 .../Sales/Model/Order/Status/History.php      |  4 +-
 .../Model/ResourceModel/AbstractGrid.php      |  2 +-
 .../Collection/AbstractCollection.php         |  2 +-
 .../Model/ResourceModel/EntityAbstract.php    | 10 ++---
 .../Sales/Model/ResourceModel/Grid.php        |  2 +-
 .../Model/ResourceModel/Grid/Collection.php   |  8 ++--
 .../Sales/Model/ResourceModel/Metadata.php    |  2 +-
 .../Sales/Model/ResourceModel/Order.php       |  8 ++--
 .../Model/ResourceModel/Order/Address.php     | 12 +++---
 .../Model/ResourceModel/Order/Collection.php  |  8 ++--
 .../Model/ResourceModel/Order/Creditmemo.php  |  2 +-
 .../Order/Creditmemo/Comment.php              | 10 ++---
 .../Order/Creditmemo/Relation.php             |  2 +-
 .../Order/Creditmemo/Relation/Refund.php      |  2 +-
 .../Model/ResourceModel/Order/Invoice.php     |  2 +-
 .../ResourceModel/Order/Invoice/Comment.php   | 10 ++---
 .../ResourceModel/Order/Invoice/Relation.php  |  2 +-
 .../Order/Payment/Collection.php              |  8 ++--
 .../Model/ResourceModel/Order/Relation.php    |  2 +-
 .../ResourceModel/Order/Shipment/Comment.php  | 10 ++---
 .../ResourceModel/Order/Shipment/Relation.php |  2 +-
 .../ResourceModel/Order/Shipment/Track.php    | 10 ++---
 .../Model/ResourceModel/Order/Status.php      |  4 +-
 .../ResourceModel/Order/Status/History.php    | 10 ++---
 .../Model/ResourceModel/Order/Tax/Item.php    |  2 +-
 .../ResourceModel/Report/Bestsellers.php      |  4 +-
 .../Report/Bestsellers/Collection.php         |  2 +-
 .../Model/ResourceModel/Report/Order.php      |  4 +-
 .../Model/ResourceModel/Sale/Collection.php   |  2 +-
 .../Transaction/Grid/Collection.php           |  8 ++--
 .../Sales/Test/Unit/Helper/AdminTest.php      |  2 +-
 .../Model/Order/AddressRepositoryTest.php     | 10 ++---
 .../Unit/Model/Order/ItemRepositoryTest.php   |  6 +--
 .../Model/Order/ShipmentRepositoryTest.php    | 10 ++---
 .../Model/ResourceModel/Order/AddressTest.php |  4 +-
 .../Order/Creditmemo/CommentTest.php          |  8 ++--
 .../Order/Invoice/CommentTest.php             |  8 ++--
 .../Order/Shipment/CommentTest.php            |  8 ++--
 .../Order/Shipment/TrackTest.php              |  8 ++--
 .../Order/Status/History/CollectionTest.php   |  6 +--
 .../Order/Status/HistoryTest.php              |  8 ++--
 .../Unit/Model/ResourceModel/OrderTest.php    | 14 +++----
 app/code/Magento/Sales/etc/di.xml             |  8 ++--
 .../SalesRule/Model/Coupon/Massgenerator.php  |  4 +-
 .../SalesRule/Model/ResourceModel/Coupon.php  |  2 +-
 .../Model/ResourceModel/Coupon/Collection.php |  2 +-
 .../Model/ResourceModel/Coupon/Usage.php      |  2 +-
 .../Model/ResourceModel/Report/Rule.php       |  4 +-
 .../SalesRule/Model/ResourceModel/Rule.php    |  4 +-
 .../Model/ResourceModel/Rule/Collection.php   |  4 +-
 .../Model/ResourceModel/Rule/Customer.php     |  2 +-
 .../Rule/Customer/Collection.php              |  2 +-
 app/code/Magento/SalesRule/Model/Rule.php     |  4 +-
 .../Magento/SalesRule/Model/Validator.php     |  4 +-
 .../Unit/Model/ResourceModel/RuleTest.php     |  2 +-
 .../Model/ResourceModel/Meta.php              |  4 +-
 .../Model/ResourceModel/Profile.php           |  4 +-
 .../Unit/Model/ResourceModel/MetaTest.php     |  4 +-
 .../Unit/Model/ResourceModel/ProfileTest.php  |  4 +-
 app/code/Magento/Search/Model/Query.php       |  4 +-
 .../Search/Model/ResourceModel/Query.php      |  8 ++--
 .../Model/ResourceModel/Query/Collection.php  |  6 +--
 .../Unit/Model/ResourceModel/QueryTest.php    |  2 +-
 .../Model/ResourceModel/SendFriend.php        |  2 +-
 .../ResourceModel/SendFriend/Collection.php   |  2 +-
 .../Magento/SendFriend/Model/SendFriend.php   |  4 +-
 .../Order/Shipment/MassPrintShippingLabel.php |  2 +-
 .../Shipment/MassPrintShippingLabel.php       |  2 +-
 .../Magento/Shipping/Model/Order/Track.php    |  4 +-
 .../Model/ResourceModel/Catalog/Category.php  |  6 +--
 .../Model/ResourceModel/Catalog/Product.php   |  6 +--
 .../Sitemap/Model/ResourceModel/Cms/Page.php  |  2 +-
 .../Sitemap/Model/ResourceModel/Sitemap.php   |  2 +-
 .../ResourceModel/Sitemap/Collection.php      |  2 +-
 app/code/Magento/Sitemap/Model/Sitemap.php    |  4 +-
 app/code/Magento/Store/Model/Group.php        |  4 +-
 .../Config/Collection/Scoped.php              |  2 +-
 .../Store/Model/ResourceModel/Group.php       |  2 +-
 .../Model/ResourceModel/Group/Collection.php  |  2 +-
 .../Store/Model/ResourceModel/Store.php       |  6 +--
 .../Model/ResourceModel/Store/Collection.php  |  2 +-
 .../Store/Model/ResourceModel/Website.php     |  2 +-
 .../ResourceModel/Website/Collection.php      |  2 +-
 app/code/Magento/Store/Model/Website.php      |  4 +-
 .../Swatches/Model/ResourceModel/Swatch.php   |  2 +-
 .../Model/ResourceModel/Swatch/Collection.php |  2 +-
 .../Magento/Tax/Model/Calculation/Rate.php    |  4 +-
 .../Magento/Tax/Model/Calculation/Rule.php    |  4 +-
 app/code/Magento/Tax/Model/ClassModel.php     |  4 +-
 .../Magento/Tax/Model/Config/Notification.php |  4 +-
 .../Magento/Tax/Model/Config/TaxClass.php     |  4 +-
 .../Tax/Model/ResourceModel/Calculation.php   |  6 +--
 .../ResourceModel/Calculation/Collection.php  |  2 +-
 .../Model/ResourceModel/Calculation/Rate.php  |  2 +-
 .../Calculation/Rate/Collection.php           |  6 +--
 .../ResourceModel/Calculation/Rate/Title.php  |  2 +-
 .../Calculation/Rate/Title/Collection.php     |  2 +-
 .../Model/ResourceModel/Calculation/Rule.php  |  2 +-
 .../Calculation/Rule/Collection.php           |  2 +-
 .../Tax/Model/ResourceModel/Report/Tax.php    |  4 +-
 .../Model/ResourceModel/Sales/Order/Tax.php   |  2 +-
 .../Sales/Order/Tax/Collection.php            |  2 +-
 .../Tax/Model/ResourceModel/TaxClass.php      |  2 +-
 .../ResourceModel/TaxClass/Collection.php     |  2 +-
 .../Tax/Model/TaxClass/AbstractType.php       |  2 +-
 .../Tax/Model/TaxClass/Type/TypeInterface.php |  2 +-
 .../Test/Unit/Model/Calculation/RateTest.php  |  2 +-
 .../Test/Unit/Model/Config/TaxClassTest.php   |  2 +-
 .../Unit/Model/TaxClass/Type/ProductTest.php  |  2 +-
 app/code/Magento/Theme/Model/Design.php       |  2 +-
 .../Theme/Model/Design/Backend/Exceptions.php |  4 +-
 .../Theme/Model/Design/Backend/Theme.php      |  4 +-
 .../Theme/Model/ResourceModel/Design.php      |  7 ++--
 .../Model/ResourceModel/Design/Collection.php |  6 +--
 .../Theme/Model/ResourceModel/Theme.php       |  2 +-
 .../Model/ResourceModel/Theme/Collection.php  |  2 +-
 .../Theme/Customization/Update.php            |  2 +-
 .../Theme/Model/ResourceModel/Theme/File.php  |  2 +-
 .../ResourceModel/Theme/File/Collection.php   |  2 +-
 app/code/Magento/Theme/Model/Theme/File.php   |  4 +-
 .../Theme/Test/Unit/Model/DesignTest.php      |  2 +-
 .../Model/ResourceModel/StringUtils.php       |  6 +--
 .../Model/ResourceModel/Translate.php         |  6 +--
 .../Ui/DataProvider/AbstractDataProvider.php  |  2 +-
 .../Ui/Model/ResourceModel/Bookmark.php       |  6 +--
 .../ResourceModel/Bookmark/Collection.php     |  2 +-
 .../Model/ResourceModel/UrlRewrite.php        |  2 +-
 .../ResourceModel/UrlRewriteCollection.php    |  6 +--
 .../UrlRewriteCollectionTest.php              |  4 +-
 .../ResourceModel/Role/User/Collection.php    |  2 +-
 .../Magento/User/Model/ResourceModel/User.php |  6 +--
 .../Model/ResourceModel/User/Collection.php   |  2 +-
 .../ResourceModel/User/Locked/Collection.php  |  2 +-
 app/code/Magento/User/Model/User.php          |  4 +-
 .../Unit/Model/ResourceModel/UserTest.php     |  2 +-
 .../Variable/Model/ResourceModel/Variable.php |  2 +-
 .../ResourceModel/Variable/Collection.php     |  2 +-
 .../Attribute/Backend/Weee/Tax.php            |  6 +--
 .../Magento/Weee/Model/ResourceModel/Tax.php  |  6 +--
 .../Attribute/Backend/Weee/TaxTest.php        |  2 +-
 .../Test/Unit/Model/ResourceModel/TaxTest.php |  2 +-
 .../Magento/Widget/Model/Layout/Update.php    |  4 +-
 .../Model/ResourceModel/Layout/Link.php       |  2 +-
 .../ResourceModel/Layout/Link/Collection.php  |  6 +--
 .../Model/ResourceModel/Layout/Update.php     |  6 +--
 .../Layout/Update/Collection.php              |  6 +--
 .../Widget/Model/ResourceModel/Widget.php     |  2 +-
 .../Model/ResourceModel/Widget/Instance.php   |  2 +-
 .../Widget/Instance/Collection.php            |  2 +-
 .../Magento/Widget/Model/Widget/Instance.php  |  4 +-
 .../ResourceModel/Layout/AbstractTestCase.php |  4 +-
 app/code/Magento/Wishlist/Model/Item.php      |  4 +-
 .../Wishlist/Model/ResourceModel/Item.php     |  2 +-
 .../Model/ResourceModel/Item/Collection.php   |  2 +-
 .../Model/ResourceModel/Item/Option.php       |  2 +-
 .../ResourceModel/Item/Option/Collection.php  |  2 +-
 .../Wishlist/Model/ResourceModel/Wishlist.php |  2 +-
 .../ResourceModel/Wishlist/Collection.php     |  2 +-
 app/etc/di.xml                                |  6 +--
 .../TestModule4/Model/ResourceModel/Item.php  |  2 +-
 .../Model/ResourceModel/Item.php              |  2 +-
 .../Repository/RepositoryResource.php         |  4 +-
 .../Generate/Repository/TableCollection.php   |  6 +--
 .../TestFramework/Db/ConnectionAdapter.php    |  2 +-
 .../Model/ModelResource/Db/AbstractTest.php   | 12 +++---
 .../Db/Collection/AbstractTest.php            | 10 ++---
 .../Model/ModelResource/Db/ProfilerTest.php   | 14 +++----
 .../Model/ModelResource/Entity/TableTest.php  |  6 +--
 .../Model/ModelResource/IteratorTest.php      |  6 +--
 .../Type/Db/ConnectionFactoryTest.php         |  2 +-
 .../ModelResource/Type/Db/Pdo/MysqlTest.php   |  6 +--
 .../Magento/Framework/Model/ResourceTest.php  |  8 ++--
 .../ResourceModel/Store/CollectionTest.php    | 12 +++---
 .../testsuite/Magento/User/Model/UserTest.php |  2 +-
 .../Test/Legacy/_files/obsolete_classes.php   | 22 +++++-----
 .../Test/Legacy/_files/obsolete_constants.php |  2 +-
 .../Test/Legacy/_files/obsolete_methods.php   | 16 +++----
 .../Legacy/_files/obsolete_namespaces.php     |  5 ++-
 .../Legacy/_files/obsolete_properties.php     |  2 +-
 .../Magento/Framework/App/Config/Value.php    |  6 +--
 .../Framework/App/ResourceConnection.php      |  2 +-
 .../ResourceConnection/ConnectionFactory.php  |  2 +-
 .../App/Test/Unit/AclResourceTest.php         |  2 +-
 .../Magento/Framework/DB/AbstractMapper.php   |  4 +-
 .../Magento/Framework/DB/MapperInterface.php  |  2 +-
 lib/internal/Magento/Framework/DB/Query.php   |  8 ++--
 .../Magento/Framework/DB/QueryBuilder.php     |  6 +--
 .../Magento/Framework/DB/QueryInterface.php   |  2 +-
 .../DB/Test/Unit/AbstractMapperTest.php       |  4 +-
 .../Framework/DB/Test/Unit/QueryTest.php      |  4 +-
 .../Framework/Data/Collection/AbstractDb.php  |  2 +-
 .../Test/Unit/Collection/DbCollection.php     |  8 ++--
 .../Magento/Framework/Flag/FlagResource.php   |  2 +-
 .../Model/AbstractExtensibleModel.php         |  4 +-
 .../Magento/Framework/Model/AbstractModel.php | 16 +++----
 .../AbstractResource.php                      |  2 +-
 .../Db/AbstractDb.php                         |  8 ++--
 .../Db/Collection/AbstractCollection.php      | 10 ++---
 .../Db/Context.php                            |  2 +-
 .../Db/ObjectRelationProcessor.php            |  2 +-
 .../Db/Profiler.php                           |  6 +--
 .../Db/TransactionManager.php                 |  2 +-
 .../Db/TransactionManagerInterface.php        |  2 +-
 .../Db/VersionControl/AbstractDb.php          |  8 ++--
 .../Db/VersionControl/Collection.php          |  8 ++--
 .../Db/VersionControl/Metadata.php            |  2 +-
 .../Db/VersionControl/RelationComposite.php   |  2 +-
 .../Db/VersionControl/RelationInterface.php   |  2 +-
 .../Db/VersionControl/Snapshot.php            |  2 +-
 .../Entity/AbstractEntity.php                 |  2 +-
 .../Entity/Table.php                          |  4 +-
 .../Iterator.php                              |  4 +-
 .../Type/AbstractType.php                     |  4 +-
 .../Type/Db.php                               |  6 +--
 .../Type/Db/ConnectionFactory.php             |  2 +-
 .../Type/Db/ConnectionFactoryInterface.php    |  2 +-
 .../Type/Db/Pdo/Mysql.php                     |  4 +-
 .../Test/Unit/AbstractExtensibleModelTest.php |  4 +-
 .../Model/Test/Unit/AbstractModelTest.php     |  4 +-
 .../Db/AbstractDbTest.php                     | 42 +++++++++----------
 .../Db/Collection/AbstractCollectionTest.php  | 10 ++---
 .../Db/VersionControl/MetadataTest.php        |  8 ++--
 .../VersionControl/RelationCompositeTest.php  | 10 ++---
 .../Db/VersionControl/SnapshotTest.php        | 10 ++---
 .../Type/Db/ConnectionFactoryTest.php         |  4 +-
 .../Type/Db/Pdo/MysqlTest.php                 |  4 +-
 .../Framework/Module/ModuleResource.php       |  2 +-
 .../Magento/Framework/Test/Unit/FlagTest.php  |  2 +-
 .../Unit/Helper/ObjectManager.php             |  2 +-
 .../DataProvider/CollectionFactory.php        |  2 +-
 .../DataProvider/DataProviderInterface.php    |  2 +-
 .../DataProvider/FulltextFilter.php           |  2 +-
 .../UiComponent/DataProvider/SearchResult.php |  2 +-
 setup/src/Magento/Setup/Model/Installer.php   |  2 +-
 .../Magento/Setup/Model/InstallerFactory.php  |  6 +--
 .../Setup/Module/ConnectionFactory.php        |  4 +-
 .../Fixtures/CartPriceRulesFixtureTest.php    |  4 +-
 .../Fixtures/CatalogPriceRulesFixtureTest.php |  4 +-
 .../ConfigurableProductsFixtureTest.php       |  4 +-
 .../Test/Unit/Fixtures/OrdersFixtureTest.php  |  4 +-
 .../Fixtures/SimpleProductsFixtureTest.php    |  4 +-
 .../Test/Unit/Model/InstallerFactoryTest.php  |  8 ++--
 .../Setup/Test/Unit/Model/InstallerTest.php   |  4 +-
 720 files changed, 1469 insertions(+), 1471 deletions(-)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/AbstractResource.php (99%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/AbstractDb.php (98%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/Collection/AbstractCollection.php (97%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/Context.php (96%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/ObjectRelationProcessor.php (95%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/Profiler.php (94%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/TransactionManager.php (96%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/TransactionManagerInterface.php (91%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/VersionControl/AbstractDb.php (86%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/VersionControl/Collection.php (85%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/VersionControl/Metadata.php (94%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/VersionControl/RelationComposite.php (95%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/VersionControl/RelationInterface.php (86%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/VersionControl/Snapshot.php (96%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Entity/AbstractEntity.php (94%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Entity/Table.php (73%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Iterator.php (94%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/AbstractType.php (83%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/Db.php (50%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/Db/ConnectionFactory.php (95%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/Db/ConnectionFactoryInterface.php (88%)
 rename lib/internal/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/Db/Pdo/Mysql.php (95%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Db/AbstractDbTest.php (92%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Db/Collection/AbstractCollectionTest.php (97%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Db/VersionControl/MetadataTest.php (91%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Db/VersionControl/RelationCompositeTest.php (88%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Db/VersionControl/SnapshotTest.php (90%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Type/Db/ConnectionFactoryTest.php (93%)
 rename lib/internal/Magento/Framework/Model/Test/Unit/{ModelResource => ResourceModel}/Type/Db/Pdo/MysqlTest.php (96%)

diff --git a/app/code/Magento/AdminNotification/Model/Feed.php b/app/code/Magento/AdminNotification/Model/Feed.php
index 0b4a38a7a6a..d6b90c44cff 100644
--- a/app/code/Magento/AdminNotification/Model/Feed.php
+++ b/app/code/Magento/AdminNotification/Model/Feed.php
@@ -72,7 +72,7 @@ class Feed extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig
      * @param \Magento\Framework\App\ProductMetadataInterface $productMetadata
      * @param \Magento\Framework\UrlInterface $urlBuilder
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -86,7 +86,7 @@ class Feed extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\App\DeploymentConfig $deploymentConfig,
         \Magento\Framework\App\ProductMetadataInterface $productMetadata,
         \Magento\Framework\UrlInterface $urlBuilder,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php
index 548cb6dc446..496e94ac27d 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php
@@ -18,7 +18,7 @@ class Collection extends \Magento\AdminNotification\Model\ResourceModel\Inbox\Co
     /**
      * Add remove filter
      *
-     * @return \Magento\AdminNotification\Model\ResourceModel\Grid\Collection|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\AdminNotification\Model\ResourceModel\Grid\Collection|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php
index 76ebfa2ed61..44b5d1d0cca 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php
@@ -10,7 +10,7 @@ namespace Magento\AdminNotification\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Inbox extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Inbox extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * AdminNotification Resource initialization
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php
index 062beee8bd9..f9927bd12a5 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\AdminNotification\Model\ResourceModel\Inbox;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource collection initialization
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php
index 042f8967d42..bf145d654db 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\AdminNotification\Model\ResourceModel\Inbox\Collection;
 
-class Critical extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Critical extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource collection initialization
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php
index 986ff7ef3c0..a3b9aac4305 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\AdminNotification\Model\ResourceModel\System;
 
-class Message extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Message extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Flag that notifies whether Primary key of table is auto-incremeted
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php
index a2a5a0f490e..d8b8bfc2533 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\AdminNotification\Model\ResourceModel\System\Message;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * System message list
@@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Notification\MessageList $messageList
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Notification\MessageList $messageList,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_messageList = $messageList;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php
index caaf95faa6f..2c070d3140f 100644
--- a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php
@@ -17,7 +17,7 @@ class Synchronized extends \Magento\AdminNotification\Model\ResourceModel\System
     /**
      * Store new messages in database and remove outdated messages
      *
-     * @return $this|\Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function _afterLoad()
     {
diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php
index c9d4e6f72b6..604493daa08 100644
--- a/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Authorization\Model\ResourceModel\Permissions;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource
diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Role.php b/app/code/Magento/Authorization/Model/ResourceModel/Role.php
index 185712304f6..5621e0c7539 100644
--- a/app/code/Magento/Authorization/Model/ResourceModel/Role.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Role.php
@@ -10,7 +10,7 @@ use Magento\Authorization\Model\Acl\Role\User as RoleUser;
 /**
  * Admin role resource model
  */
-class Role extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Role extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Rule table
@@ -32,13 +32,13 @@ class Role extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\CacheInterface $cache
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\CacheInterface $cache,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php
index c9a1de7c002..f5f47176a85 100644
--- a/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php
@@ -10,7 +10,7 @@ use Magento\Authorization\Model\Acl\Role\Group as RoleGroup;
 /**
  * Admin role collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Rules.php b/app/code/Magento/Authorization/Model/ResourceModel/Rules.php
index 07a1f55d20f..e888c6e4755 100644
--- a/app/code/Magento/Authorization/Model/ResourceModel/Rules.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Rules.php
@@ -11,7 +11,7 @@ namespace Magento\Authorization\Model\ResourceModel;
 /**
  * Admin rule resource model
  */
-class Rules extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Rules extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Root ACL resource
@@ -38,7 +38,7 @@ class Rules extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_logger;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Acl\Builder $aclBuilder
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Acl\RootResource $rootResource
@@ -46,7 +46,7 @@ class Rules extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Acl\Builder $aclBuilder,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Acl\RootResource $rootResource,
diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php
index fcd6beb45c6..6d8d5663365 100644
--- a/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Authorization\Model\ResourceModel\Rules;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Authorizenet/Model/Authorizenet.php b/app/code/Magento/Authorizenet/Model/Authorizenet.php
index ebd4dd0d3f1..7bc22a49695 100644
--- a/app/code/Magento/Authorizenet/Model/Authorizenet.php
+++ b/app/code/Magento/Authorizenet/Model/Authorizenet.php
@@ -123,7 +123,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
      * @param \Magento\Authorizenet\Model\Request\Factory $requestFactory
      * @param \Magento\Authorizenet\Model\Response\Factory $responseFactory
      * @param \Magento\Framework\Xml\Security $xmlSecurityHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -142,7 +142,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
         \Magento\Authorizenet\Model\Request\Factory $requestFactory,
         \Magento\Authorizenet\Model\Response\Factory $responseFactory,
         \Magento\Framework\Xml\Security $xmlSecurityHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php
index 883e855ffa1..ca339c5c8ea 100644
--- a/app/code/Magento/Authorizenet/Model/Directpost.php
+++ b/app/code/Magento/Authorizenet/Model/Directpost.php
@@ -136,7 +136,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
      * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
      * @param \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -160,7 +160,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
         \Magento\Quote\Model\QuoteRepository $quoteRepository,
         \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender,
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php
index 4346ab9f96a..e28ce1f6e66 100644
--- a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php
+++ b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php
@@ -8,7 +8,7 @@ namespace Magento\Authorizenet\Model\ResourceModel;
 /**
  * Resource Authorize.net debug model
  */
-class Debug extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Debug extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php
index a359eaa686c..472120a49ed 100644
--- a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php
+++ b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Authorizenet\Model\ResourceModel\Debug;
 /**
  * Resource Authorize.net debug collection model
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php b/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php
index b9401d4b2bc..dd484e56c51 100644
--- a/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php
+++ b/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php
@@ -40,7 +40,7 @@ abstract class AbstractDashboard extends \Magento\Backend\Block\Widget
     }
 
     /**
-     * @return array|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|\Magento\Eav\Model\Entity\Collection\Abstract
+     * @return array|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|\Magento\Eav\Model\Entity\Collection\Abstract
      */
     public function getCollection()
     {
diff --git a/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php b/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php
index b2907af009a..a17302f9b12 100644
--- a/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php
+++ b/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php
@@ -13,7 +13,7 @@ abstract class AbstractDashboard extends \Magento\Framework\App\Helper\AbstractH
     /**
      * Helper collection
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|array
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|array
      */
     protected $_collection;
 
@@ -25,7 +25,7 @@ abstract class AbstractDashboard extends \Magento\Framework\App\Helper\AbstractH
     protected $_params = [];
 
     /**
-     * @return array|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return array|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCollection()
     {
diff --git a/app/code/Magento/Backup/Model/Config/Backend/Cron.php b/app/code/Magento/Backup/Model/Config/Backend/Cron.php
index e4204f26879..133e6ad8636 100644
--- a/app/code/Magento/Backup/Model/Config/Backend/Cron.php
+++ b/app/code/Magento/Backup/Model/Config/Backend/Cron.php
@@ -33,7 +33,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -43,7 +43,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Braintree/Model/PaymentMethod.php b/app/code/Magento/Braintree/Model/PaymentMethod.php
index 52f635426bd..810ff8bea34 100644
--- a/app/code/Magento/Braintree/Model/PaymentMethod.php
+++ b/app/code/Magento/Braintree/Model/PaymentMethod.php
@@ -181,7 +181,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
      * @param TransactionCollectionFactory $salesTransactionCollectionFactory
      * @param \Magento\Framework\App\ProductMetadataInterface $productMetaData
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -206,7 +206,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
         TransactionCollectionFactory $salesTransactionCollectionFactory,
         \Magento\Framework\App\ProductMetadataInterface $productMetaData,
         \Magento\Directory\Model\RegionFactory $regionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php b/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php
index 05cf0b39b7c..8e4b238f3ed 100644
--- a/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php
+++ b/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php
@@ -68,7 +68,7 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
      * @param \Magento\Braintree\Model\Config\PayPal $payPalConfig
      * @param BraintreeTransaction $braintreeTransaction
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -94,7 +94,7 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
         \Magento\Framework\App\ProductMetadataInterface $productMetaData,
         \Magento\Directory\Model\RegionFactory $regionFactory,
         \Magento\Braintree\Model\Config\PayPal $payPalConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
index 17291f11bc9..7e234209d00 100644
--- a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
+++ b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
@@ -17,7 +17,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Math\Random $mathRandom
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -26,7 +26,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Math\Random $mathRandom,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php
index 8857a72b6da..e970b41d856 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php
@@ -38,7 +38,7 @@ class CountrycreditcardTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resourceMock = $this->getMockForAbstractClass('\Magento\Framework\Model\ModelResource\AbstractResource');
+        $this->resourceMock = $this->getMockForAbstractClass('\Magento\Framework\Model\ResourceModel\AbstractResource');
         $this->mathRandomMock = $this->getMockBuilder(
             '\Magento\Framework\Math\Random'
         )->disableOriginalConstructor()
diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php b/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php
index c387f0839c4..b748c4419ea 100644
--- a/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php
@@ -10,7 +10,7 @@ namespace Magento\Bundle\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Bundle extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Bundle extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Catalog\Model\ResourceModel\Product\Relation
@@ -23,13 +23,13 @@ class Bundle extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $quoteResource;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Catalog\Model\ResourceModel\Product\Relation $productRelation
      * @param \Magento\Quote\Model\ResourceModel\Quote $quoteResource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Catalog\Model\ResourceModel\Product\Relation $productRelation,
         \Magento\Quote\Model\ResourceModel\Quote $quoteResource,
         $connectionName = null
diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Option.php b/app/code/Magento/Bundle/Model/ResourceModel/Option.php
index ad522bd8389..7ef4bda626e 100644
--- a/app/code/Magento/Bundle/Model/ResourceModel/Option.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Option.php
@@ -10,7 +10,7 @@ namespace Magento\Bundle\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Bundle\Model\Option\Validator
@@ -18,12 +18,12 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     private $validator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Bundle\Model\Option\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Bundle\Model\Option\Validator $validator,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php
index a012f0d3133..dee20a0d83a 100644
--- a/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Bundle\Model\ResourceModel\Option;
 /**
  * Bundle Options Resource Collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * All item ids cache
diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Selection.php b/app/code/Magento/Bundle/Model/ResourceModel/Selection.php
index f387db96548..22283c5ff32 100644
--- a/app/code/Magento/Bundle/Model/ResourceModel/Selection.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Selection.php
@@ -10,7 +10,7 @@ namespace Magento\Bundle\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Selection extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Selection extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table and id field
diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php
index fe9f10b3323..2b50f3f1683 100644
--- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php
+++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php
@@ -24,7 +24,7 @@ class Creditmemo extends AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class Creditmemo extends AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php
index 00e84863d30..c4bcdb7616b 100644
--- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php
+++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php
@@ -25,7 +25,7 @@ class Invoice extends AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $coreString
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Invoice extends AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $coreString,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php
index 9b071f4fc80..4a8e83fd3cd 100644
--- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php
+++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php
@@ -22,7 +22,7 @@ class Shipment extends AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -33,7 +33,7 @@ class Shipment extends AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Model/Source/Option/Type.php b/app/code/Magento/Bundle/Model/Source/Option/Type.php
index 17047b14c6a..7269a9473d9 100644
--- a/app/code/Magento/Bundle/Model/Source/Option/Type.php
+++ b/app/code/Magento/Bundle/Model/Source/Option/Type.php
@@ -37,7 +37,7 @@ class Type extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param array $options
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -47,7 +47,7 @@ class Type extends \Magento\Framework\Model\AbstractExtensibleModel implements
         ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         array $options,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php
index 577879a4d65..2175303614e 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php
@@ -619,7 +619,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
         );
         $attributeValueFactoryMock = $this->getMock('Magento\Framework\Api\AttributeValueFactory', [], [], '', false);
         $resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getIdFieldName'
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
index 67303f8fd38..5af4e900bea 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
@@ -20,7 +20,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     protected $selectionSecond;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -46,7 +46,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 '_construct',
                 'getConnection',
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php
index 92e64885b72..1d08a80994f 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php
@@ -2093,7 +2093,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getResourceCollection'])
             ->disableOriginalConstructor()
             ->getMock();
-        $resourceClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection';
+        $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
         $dbResourceMock = $this->getMockBuilder($resourceClassName)
             ->setMethods(['setProductIdFilter', 'setPositionOrder', 'joinValues', 'setIdFilter'])
             ->disableOriginalConstructor()
@@ -2616,7 +2616,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $option = $this->getMockBuilder('\Magento\Bundle\Model\Option')
             ->disableOriginalConstructor()
             ->getMock();
-        $resourceClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection';
+        $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
         $dbResourceMock = $this->getMockBuilder($resourceClassName)
             ->setMethods(['setProductIdFilter', 'setPositionOrder', 'joinValues'])
             ->disableOriginalConstructor()
@@ -2741,7 +2741,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $product = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
             ->getMock();
-        $resourceClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection';
+        $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
         $dbResourceMock = $this->getMockBuilder($resourceClassName)
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Captcha/Model/ResourceModel/Log.php b/app/code/Magento/Captcha/Model/ResourceModel/Log.php
index de6d38876d0..cdd46fbb97d 100644
--- a/app/code/Magento/Captcha/Model/ResourceModel/Log.php
+++ b/app/code/Magento/Captcha/Model/ResourceModel/Log.php
@@ -10,7 +10,7 @@ namespace Magento\Captcha\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Log extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Log extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Type Remote Address
@@ -35,13 +35,13 @@ class Log extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_remoteAddress;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
         $connectionName = null
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php
index 06e26a33c16..5dc5198b776 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php
@@ -170,7 +170,7 @@ class AbstractCategory extends \Magento\Backend\Block\Template
     }
 
     /**
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCategoryCollection()
     {
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
index c44c68e372a..4270322a300 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
@@ -19,7 +19,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     /**
      * Products collection
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_collection = null;
 
@@ -197,7 +197,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     /**
      * Return products collection instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCollection()
     {
diff --git a/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php b/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php
index ce0782bf21d..f069f70bad9 100644
--- a/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php
+++ b/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php
@@ -98,7 +98,7 @@ class Pager extends \Magento\Theme\Block\Html\Pager
     /**
      * Connect collection to paging
      *
-     * @param   \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection $collection
+     * @param   \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection $collection
      * @return  \Magento\Catalog\Block\Product\Widget\Html\Pager
      */
     public function setCollection($collection)
diff --git a/app/code/Magento/Catalog/Model/AbstractModel.php b/app/code/Magento/Catalog/Model/AbstractModel.php
index d42a0ed870e..6b4d310b829 100644
--- a/app/code/Magento/Catalog/Model/AbstractModel.php
+++ b/app/code/Magento/Catalog/Model/AbstractModel.php
@@ -65,7 +65,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -75,7 +75,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Category.php b/app/code/Magento/Catalog/Model/Category.php
index b27d233a2f8..b95b1e9da74 100644
--- a/app/code/Magento/Catalog/Model/Category.php
+++ b/app/code/Magento/Catalog/Model/Category.php
@@ -242,7 +242,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
      * @param UrlFinderInterface $urlFinder
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param CategoryRepositoryInterface $categoryRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -266,7 +266,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
         UrlFinderInterface $urlFinder,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         CategoryRepositoryInterface $categoryRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Config/Backend/Category.php b/app/code/Magento/Catalog/Model/Config/Backend/Category.php
index 31baf9603a0..9634b182bd4 100644
--- a/app/code/Magento/Catalog/Model/Config/Backend/Category.php
+++ b/app/code/Magento/Catalog/Model/Config/Backend/Category.php
@@ -26,7 +26,7 @@ class Category extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Catalog\Model\Category $catalogCategory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class Category extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Catalog\Model\Category $catalogCategory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
index 2fd92365d14..2f0c8f4e2ee 100644
--- a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
+++ b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
@@ -32,7 +32,7 @@ class Image extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class Image extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php b/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php
index 7a31387ada6..b04a2cffde7 100644
--- a/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php
+++ b/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php
@@ -11,7 +11,7 @@ use Magento\Framework\Api\AttributeValueFactory;
 use Magento\Framework\Model\Context;
 use Magento\Framework\Registry;
 use Magento\Framework\Api\ExtensionAttributesFactory;
-use Magento\Framework\Model\ModelResource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\Data\Collection\AbstractDb;
 use Magento\Catalog\Model\Webapi\Product\Option\Type\File\Processor as FileProcessor;
 
diff --git a/app/code/Magento/Catalog/Model/Design.php b/app/code/Magento/Catalog/Model/Design.php
index 658336e9fdb..fc992154c88 100644
--- a/app/code/Magento/Catalog/Model/Design.php
+++ b/app/code/Magento/Catalog/Model/Design.php
@@ -33,7 +33,7 @@ class Design extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class Design extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Entity/Attribute.php b/app/code/Magento/Catalog/Model/Entity/Attribute.php
index d1f6dd922d5..16550971a18 100644
--- a/app/code/Magento/Catalog/Model/Entity/Attribute.php
+++ b/app/code/Magento/Catalog/Model/Entity/Attribute.php
@@ -88,7 +88,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param DateTimeFormatterInterface $dateTimeFormatter
      * @param LockValidatorInterface $lockValidator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -111,7 +111,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         DateTimeFormatterInterface $dateTimeFormatter,
         LockValidatorInterface $lockValidator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php
index 61f7f1c7ca9..1f1cb50626b 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php
@@ -39,15 +39,15 @@ class StoreGroup
     }
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject
      * @param callable $proceed
      * @param \Magento\Framework\Model\AbstractModel $group
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $group
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
index 3d6eb24ce7d..e72004991e8 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
@@ -22,7 +22,7 @@ class Mode extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Indexer\Model\Indexer\State $indexerState
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Mode extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Indexer\Model\Indexer\State $indexerState,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php
index 1c6854fd8d2..859bc2936e0 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php
@@ -19,14 +19,14 @@ class StoreGroup
     }
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject
      * @param callable $proceed
      * @param \Magento\Framework\Model\AbstractModel $group
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $group
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
index e35b88dc0e7..1db9aae1325 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
@@ -26,7 +26,7 @@ class Mode extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor
      * @param \Magento\Indexer\Model\Indexer\State $indexerState
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Mode extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor,
         \Magento\Indexer\Model\Indexer\State $indexerState,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
index f66ac598d46..148b5b7a99a 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
@@ -18,7 +18,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -27,7 +27,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Action.php b/app/code/Magento/Catalog/Model/Product/Action.php
index ea58673a62f..c3afb6a6334 100644
--- a/app/code/Magento/Catalog/Model/Product/Action.php
+++ b/app/code/Magento/Catalog/Model/Product/Action.php
@@ -42,7 +42,7 @@ class Action extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Catalog\Model\Indexer\Product\Eav\Processor $productEavIndexerProcessor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -53,7 +53,7 @@ class Action extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Catalog\Model\Indexer\Product\Eav\Processor $productEavIndexerProcessor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
index f1d69e37740..ba141dc370c 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
@@ -23,7 +23,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -33,7 +33,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Compare/Item.php b/app/code/Magento/Catalog/Model/Product/Compare/Item.php
index f81d1bcdaf5..5ef5fca6a2c 100644
--- a/app/code/Magento/Catalog/Model/Product/Compare/Item.php
+++ b/app/code/Magento/Catalog/Model/Product/Compare/Item.php
@@ -76,7 +76,7 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Catalog\Helper\Product\Compare $catalogProductCompare
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -87,7 +87,7 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr
         \Magento\Customer\Model\Visitor $customerVisitor,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Catalog\Helper\Product\Compare $catalogProductCompare,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php
index 5ad174c1ae3..a4d690071e9 100644
--- a/app/code/Magento/Catalog/Model/Product/Image.php
+++ b/app/code/Magento/Catalog/Model/Product/Image.php
@@ -178,7 +178,7 @@ class Image extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\View\Asset\Repository $assetRepo
      * @param \Magento\Framework\View\FileSystem $viewFileSystem
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -195,7 +195,7 @@ class Image extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\View\Asset\Repository $assetRepo,
         \Magento\Framework\View\FileSystem $viewFileSystem,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Link.php b/app/code/Magento/Catalog/Model/Product/Link.php
index b23f43022ad..63208fe8313 100644
--- a/app/code/Magento/Catalog/Model/Product/Link.php
+++ b/app/code/Magento/Catalog/Model/Product/Link.php
@@ -60,7 +60,7 @@ class Link extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory $linkCollectionFactory
      * @param \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\CatalogInventory\Helper\Stock $stockHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -70,7 +70,7 @@ class Link extends \Magento\Framework\Model\AbstractModel
         \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory $linkCollectionFactory,
         \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory $productCollectionFactory,
         \Magento\CatalogInventory\Helper\Stock $stockHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php
index 96bfc698df5..8b981d6f0b8 100644
--- a/app/code/Magento/Catalog/Model/Product/Option.php
+++ b/app/code/Magento/Catalog/Model/Product/Option.php
@@ -122,7 +122,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      * @param Option\Type\Factory $optionFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param Option\Validator\Pool $validatorPool
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -136,7 +136,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
         \Magento\Catalog\Model\Product\Option\Type\Factory $optionFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
         Option\Validator\Pool $validatorPool,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -158,7 +158,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php
index 0bdc8968cb6..863c3a374b1 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Value.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php
@@ -66,7 +66,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -74,7 +74,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
index 2b349fa7dbd..dd522da5888 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
@@ -27,7 +27,7 @@ class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute
     protected $attrLockValidator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType
      * @param \Magento\Eav\Model\Config $eavConfig
@@ -35,7 +35,7 @@ class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType,
         \Magento\Eav\Model\Config $eavConfig,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php
index 85b65b8075b..6583e3e60b2 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php
@@ -27,7 +27,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -37,7 +37,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eavEntityFactory = $eavEntityFactory;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource);
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
index 089bfbc10e0..82000fb03d1 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
@@ -81,7 +81,7 @@ class Flat extends \Magento\Indexer\Model\ResourceModel\AbstractResource
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
      * @param CollectionFactory $categoryCollectionFactory
@@ -91,7 +91,7 @@ class Flat extends \Magento\Indexer\Model\ResourceModel\AbstractResource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
         \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php
index b522f1cad89..83a09410278 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php
@@ -9,7 +9,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
 use Magento\Framework\Data\Collection\EntityFactory;
 use Magento\Framework\Event\ManagerInterface;
 use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Store\Model\StoreManagerInterface;
 
@@ -18,7 +18,7 @@ use Magento\Store\Model\StoreManagerInterface;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Config.php b/app/code/Magento/Catalog/Model/ResourceModel/Config.php
index 625e74be6c5..f3e72ab1570 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Config.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Config.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * catalog_product entity type id
@@ -41,13 +41,13 @@ class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
         $connectionName = null
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
index 23bb4f402b8..2f4d6769131 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
@@ -108,7 +108,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productFlatIndexerHelper
      * @param LockValidatorInterface $lockValidator
      * @param DateTimeFormatterInterface $dateTimeFormatter
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -134,7 +134,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
         \Magento\Catalog\Model\Indexer\Product\Eav\Processor $indexerEavProcessor,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productFlatIndexerHelper,
         LockValidatorInterface $lockValidator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php
index 317b92c854a..b66b8c40629 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Layer\Filter;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table name
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php
index 16903344fa5..5d20f30f20d 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Layer\Filter;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Decimal extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Decimal extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table name
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php
index 4b4c351b95b..ddadfcaa97d 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Model\ResourceModel\Layer\Filter;
 /**
  * Catalog Layer Price Filter resource model
  */
-class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Price extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Minimal possible price
@@ -38,7 +38,7 @@ class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     private $storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
      * @param \Magento\Customer\Model\Session $session
@@ -46,7 +46,7 @@ class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Catalog\Model\Layer\Resolver $layerResolver,
         \Magento\Customer\Model\Session $session,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
index 605667ba945..95591c93e00 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice;
 
-abstract class AbstractGroupPrice extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractGroupPrice extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Load Tier Prices for product
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
index bfc39cfe98b..a77ea68ae16 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
@@ -15,7 +15,7 @@ use Magento\Catalog\Model\Product;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Media extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     const GALLERY_TABLE = 'catalog_product_entity_media_gallery';
 
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php
index db9e5f9886e..3f396b654f2 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php
@@ -25,7 +25,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -35,7 +35,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eavEntityFactory = $eavEntityFactory;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource);
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
index 924355cafcb..0393bf02276 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
@@ -525,7 +525,7 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Collection\Abstrac
      */
     public function setEntity($entity)
     {
-        if ($this->isEnabledFlat() && $entity instanceof \Magento\Framework\Model\ModelResource\Db\AbstractDb) {
+        if ($this->isEnabledFlat() && $entity instanceof \Magento\Framework\Model\ResourceModel\Db\AbstractDb) {
             $this->_entity = $entity;
             return $this;
         }
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php
index 13af3192a26..19aa5b02dd0 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Compare;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php
index d4ef3ae5723..2a9f146e405 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php
@@ -13,7 +13,7 @@ use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderIn
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Flat extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements DefaultAttributesProvider
+class Flat extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements DefaultAttributesProvider
 {
     /**
      * Store scope Id
@@ -42,14 +42,14 @@ class Flat extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implemen
     protected $defaultAttributes;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Config $catalogConfig
      * @param \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Config $catalogConfig,
         \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php
index ea9e44872e9..0ed453173dc 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php
@@ -22,13 +22,13 @@ abstract class AbstractIndexer extends \Magento\Indexer\Model\ResourceModel\Abst
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         $connectionName = null
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php
index 533653c823a..b07d355f418 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php
@@ -22,14 +22,14 @@ abstract class AbstractEav extends \Magento\Catalog\Model\ResourceModel\Product\
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php
index 5db3e871c6d..dac3ab33b25 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php
@@ -24,7 +24,7 @@ class Source extends AbstractEav
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -32,7 +32,7 @@ class Source extends AbstractEav
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
index e9f9a0a5b9e..0df889441d2 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
@@ -46,7 +46,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -54,7 +54,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php
index 477f98bd67c..de3811c1206 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Product Link Attributes Table
@@ -27,12 +27,12 @@ class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_catalogProductRelation;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Relation $catalogProductRelation
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Relation $catalogProductRelation,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php
index 831b96b2ce3..011a3cda6ad 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Link;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Product object
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php
index 0656139b1fc..cf7445dabfe 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store manager
@@ -36,14 +36,14 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
@@ -69,7 +69,7 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * Save options store data
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php
index 8b03136e4a1..ba2e7b2128d 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Option;
  *
  * @SuppressWarnings(PHPMD.LongVariable)
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store manager
@@ -34,7 +34,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $optionValueCollectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -44,7 +44,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $optionValueCollectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_optionValueCollectionFactory = $optionValueCollectionFactory;
         $this->_storeManager = $storeManager;
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php
index 791b83f081c..87ad710edc9 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Option;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Value extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Value extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store manager
@@ -36,14 +36,14 @@ class Value extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
@@ -70,7 +70,7 @@ class Value extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * Save options store data
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php
index fa018d34952..c18eb0f0b58 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Option\Value;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php
index a53b14ff649..846a904a117 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php
@@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Relation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Relation extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model and define main table
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php
index 7cd4350c80b..9e554114481 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product;
 /**
  * Catalog Product Website Resource Model
  */
-class Website extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Website extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store manager
@@ -18,12 +18,12 @@ class Website extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Url.php b/app/code/Magento/Catalog/Model/ResourceModel/Url.php
index 4748966e31b..157edc0b176 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Url.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Url.php
@@ -12,7 +12,7 @@ namespace Magento\Catalog\Model\ResourceModel;
  */
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
 
-class Url extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Url extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Stores configuration array
@@ -88,7 +88,7 @@ class Url extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $productResource;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param Product $productResource
@@ -97,7 +97,7 @@ class Url extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
         Product $productResource,
diff --git a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
index 42ddbde393f..de1649851c6 100644
--- a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
+++ b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
@@ -39,7 +39,7 @@ class Suffix extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param \Magento\UrlRewrite\Helper\UrlRewrite $urlRewriteHelper
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -56,7 +56,7 @@ class Suffix extends \Magento\Framework\App\Config\Value
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\ResourceConnection $appResource,
         \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php
index fd1e1178833..3b24090d3ec 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php
@@ -73,7 +73,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\UrlRewrite\Model\UrlFinderInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $urlFinder;
 
-    /** @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\Indexer\IndexerRegistry|\PHPUnit_Framework_MockObject_MockObject */
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php
index e5242c58383..511edd774b4 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php
@@ -42,7 +42,7 @@ class CustomOptionTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource')
+        $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php
index 56dddc969e1..a396bcca4c0 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php
@@ -87,7 +87,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $lockValidatorMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceMock;
 
@@ -179,7 +179,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->dateTimeFormatter = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface');
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding'])
             ->getMockForAbstractClass();
         $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php
index 41660300983..18cd7be396c 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php
@@ -58,7 +58,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\AbstractResource',
+            '\Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 'updateAttributes',
                 'getConnection',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php
index 53accd9dde6..e3dc8a4d6e6 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php
@@ -146,7 +146,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
             false
         );
         $attributeEntity = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\AbstractResourceAbstractEntity',
+            '\Magento\Framework\Model\ResourceModel\AbstractResourceAbstractEntity',
             ['checkAttributeUniqueValue']
         );
         $attribute->expects($this->any())->method('getAttributeCode')->will($this->returnValue($attributeCode));
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php
index 2a94798288d..eb86d59a886 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php
@@ -15,7 +15,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -61,7 +61,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->productCollection));
 
         $this->resource = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 'saveProductLinks',
                 'getAttributeTypeTable',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
index b96b178db6c..c52c96470fd 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
@@ -444,7 +444,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $abstractDbMock = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $abstractDbMock = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods([
                 'getCategoryCollection',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
index c82859e578e..ab8d0328ca6 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
@@ -88,7 +88,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
         $dbAdapterMock->expects($this->any())->method('getTransactionLevel')->will($this->returnValue(1));
 
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             ['_construct', 'getConnection', 'getIdFieldName',
                 'save', 'saveInSetIncluding', 'isUsedBySuperProducts', 'delete'],
             [], '', false
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php
index 711939f0bf6..4b7ee54ac6b 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php
@@ -45,7 +45,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_model = new \Magento\Catalog\Model\ResourceModel\Product\Flat(
-            $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false),
+            $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false),
             $this->_storeManagerInterface,
             $this->getMock('Magento\Catalog\Model\Config', [], [], '', false),
             $this->getMock('Magento\Catalog\Model\Product\Attribute\DefaultAttributes')
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
index 09c883b094a..c49eeed41ce 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
@@ -10,8 +10,8 @@ namespace Magento\CatalogImportExport\Model\Import;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface;
-use Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface;
-use Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor;
+use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
+use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor;
 use Magento\Framework\Stdlib\DateTime;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php
index 6c9f1f89ff5..d5fbfaf8c9e 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php
@@ -135,10 +135,10 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     /** @var  \Magento\CatalogImportExport\Model\Import\Product\Validator|\PHPUnit_Framework_MockObject_MockObject */
     protected $validator;
 
-    /** @var  \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */
     protected $objectRelationProcessor;
 
-    /** @var  \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $transactionManager;
 
     /** @var  \Magento\CatalogImportExport\Model\Import\Product\TaxClassProcessor|\PHPUnit_Framework_MockObject_MockObject */
@@ -302,11 +302,11 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->objectRelationProcessor =
-            $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor')
+            $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor')
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->transactionManager =
-            $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface')
+            $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface')
                 ->getMock();
 
         $this->taxClassProcessor =
diff --git a/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php
index ca255a27a30..f8e9cba0301 100644
--- a/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php
+++ b/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php
@@ -37,7 +37,7 @@ class Item extends \Magento\CatalogInventory\Model\Stock\Item implements Identit
      * @param StockRegistryInterface $stockRegistry
      * @param StockItemRepositoryInterface $stockItemRepository
      * @param GroupManagementInterface $groupManagement
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -53,7 +53,7 @@ class Item extends \Magento\CatalogInventory\Model\Stock\Item implements Identit
         StockRegistryInterface $stockRegistry,
         StockItemRepositoryInterface $stockItemRepository,
         GroupManagementInterface $groupManagement,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
index 58c52b89377..5f38c7074b6 100644
--- a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
+++ b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
@@ -27,7 +27,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex
      * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -37,7 +37,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex,
         \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php
index cf95bd1bfc3..3b9ed644fc8 100644
--- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php
@@ -37,14 +37,14 @@ class DefaultStock extends AbstractIndexer implements StockInterface
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php
index 12efcd806a0..c0dee9c17f8 100644
--- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php
@@ -12,7 +12,7 @@ use Magento\Store\Model\StoreManagerInterface;
 /**
  * Stock resource model
  */
-class Stock extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements QtyCounterInterface
+class Stock extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements QtyCounterInterface
 {
     /**
      * @var StockConfigurationInterface
@@ -79,7 +79,7 @@ class Stock extends \Magento\Framework\Model\ModelResource\Db\AbstractDb impleme
     protected $storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param StockConfigurationInterface $stockConfiguration
@@ -87,7 +87,7 @@ class Stock extends \Magento\Framework\Model\ModelResource\Db\AbstractDb impleme
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         StockConfigurationInterface $stockConfiguration,
diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php
index 898270f9ec8..3613e9de965 100644
--- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php
@@ -9,12 +9,12 @@ use Magento\CatalogInventory\Api\Data\StockItemInterface;
 use Magento\CatalogInventory\Model\Indexer\Stock\Processor;
 use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface;
+use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
 
 /**
  * Stock item resource model
  */
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Whether index events should be processed immediately
@@ -29,12 +29,12 @@ class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $stockIndexerProcessor;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Processor $processor
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Processor $processor,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php
index 2cf5d1a092a..64e45b1f09f 100644
--- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php
@@ -10,7 +10,7 @@ use Magento\CatalogInventory\Model\Stock;
 /**
  * CatalogInventory Stock Status per website Resource Model
  */
-class Status extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Status extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store model manager
@@ -32,14 +32,14 @@ class Status extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $eavConfig;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Eav\Model\Config $eavConfig,
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/Stock/Item.php
index 5d66c2d8577..a6913cd2e01 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/Item.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/Item.php
@@ -99,7 +99,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface
      * @param StockConfigurationInterface $stockConfiguration
      * @param StockRegistryInterface $stockRegistry
      * @param StockItemRepositoryInterface $stockItemRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -114,7 +114,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface
         StockConfigurationInterface $stockConfiguration,
         StockRegistryInterface $stockRegistry,
         StockItemRepositoryInterface $stockItemRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/Status.php b/app/code/Magento/CatalogInventory/Model/Stock/Status.php
index b6a02040343..fe76a6364e8 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/Status.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/Status.php
@@ -41,7 +41,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface
      * @param ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param StockRegistryInterface $stockRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -51,7 +51,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface
         ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         StockRegistryInterface $stockRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
index ea89069d8c5..eddd3316cd8 100644
--- a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
+++ b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
@@ -22,7 +22,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php
index fac43557928..94c4ede49a1 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php
@@ -18,7 +18,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             ['_construct', 'getConnection', 'getIdFieldName'],
             [],
             '',
diff --git a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php
index cc2a5aa3b58..7a0e2cec1f2 100644
--- a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php
@@ -93,7 +93,7 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
     protected $priceCurrency;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Product\ConditionFactory $conditionFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
@@ -107,7 +107,7 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Product\ConditionFactory $conditionFactory,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
@@ -146,7 +146,7 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
      * Add customer group ids and website ids to rule data after load
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterLoad(AbstractModel $object)
     {
diff --git a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php
index 23af2e19f99..071c788d65e 100644
--- a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\CatalogRule\Model\ResourceModel\Rule\Product;
 
-class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Price extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php
index 186a1cee58c..13c7d3fc3b9 100644
--- a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @return void
diff --git a/app/code/Magento/CatalogRule/Model/Rule.php b/app/code/Magento/CatalogRule/Model/Rule.php
index f953564e47e..66f3affdcea 100644
--- a/app/code/Magento/CatalogRule/Model/Rule.php
+++ b/app/code/Magento/CatalogRule/Model/Rule.php
@@ -104,7 +104,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     protected $_relatedCacheTypes;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Iterator
+     * @var \Magento\Framework\Model\ResourceModel\Iterator
      */
     protected $_resourceIterator;
 
@@ -158,13 +158,13 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      * @param \Magento\CatalogRule\Model\Rule\Condition\CombineFactory $combineFactory
      * @param \Magento\CatalogRule\Model\Rule\Action\CollectionFactory $actionCollectionFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
-     * @param \Magento\Framework\Model\ModelResource\Iterator $resourceIterator
+     * @param \Magento\Framework\Model\ResourceModel\Iterator $resourceIterator
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\CatalogRule\Helper\Data $catalogRuleData
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypesList
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor $ruleProductProcessor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $relatedCacheTypes
      * @param array $data
@@ -180,13 +180,13 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         \Magento\CatalogRule\Model\Rule\Condition\CombineFactory $combineFactory,
         \Magento\CatalogRule\Model\Rule\Action\CollectionFactory $actionCollectionFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
-        \Magento\Framework\Model\ModelResource\Iterator $resourceIterator,
+        \Magento\Framework\Model\ResourceModel\Iterator $resourceIterator,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\CatalogRule\Helper\Data $catalogRuleData,
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypesList,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor $ruleProductProcessor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $relatedCacheTypes = [],
         array $data = []
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php
index 2cede19ddbc..bb8b7521642 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php
@@ -47,7 +47,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
     protected $_productCollectionFactory;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Iterator|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Iterator|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceIterator;
 
@@ -121,7 +121,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_resourceIterator = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Iterator',
+            '\Magento\Framework\Model\ResourceModel\Iterator',
             ['walk'],
             [],
             '',
diff --git a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
index cf56ff5dc49..4e25ed12fc3 100644
--- a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
+++ b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
@@ -18,7 +18,7 @@ class Engine extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -27,7 +27,7 @@ class Engine extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogSearch/Model/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Fulltext.php
index 890cc1ade71..d701ab40c86 100644
--- a/app/code/Magento/CatalogSearch/Model/Fulltext.php
+++ b/app/code/Magento/CatalogSearch/Model/Fulltext.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Data\Collection\AbstractDb as DbCollection;
 use Magento\Framework\Model\Context;
-use Magento\Framework\Model\ModelResource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\Registry;
 use Magento\Search\Model\QueryFactory;
 
diff --git a/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
index 4c7ca494a0f..4dafffbf8df 100644
--- a/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
@@ -10,7 +10,7 @@ namespace Magento\CatalogSearch\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Advanced extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Advanced extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Core event manager proxy
@@ -29,13 +29,13 @@ class Advanced extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         $connectionName = null
diff --git a/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php
index a84b944a98b..1e1dd3cda03 100644
--- a/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model\ResourceModel;
 /**
  * CatalogSearch Fulltext Index resource model
  */
-class Fulltext extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Fulltext extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Core event manager proxy
@@ -18,12 +18,12 @@ class Fulltext extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_eventManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php
index 12aebd01080..df0561cf3b7 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php
@@ -9,7 +9,7 @@ namespace Magento\CatalogSearch\Test\Unit\Model\ResourceModel;
 use Magento\CatalogSearch\Model\ResourceModel\Fulltext;
 use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
-use Magento\Framework\Model\ModelResource\Db\Context;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class FulltextTest extends \PHPUnit_Framework_TestCase
@@ -33,7 +33,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->context = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\Context')
+        $this->context = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
index 9d294393900..316b9a6d5c1 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category;
 
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 class Product extends AbstractDb
 {
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php
index 44c1fb5e660..a012da577c5 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 class ProductCollection extends AbstractCollection
 {
diff --git a/app/code/Magento/CatalogWidget/Model/Rule.php b/app/code/Magento/CatalogWidget/Model/Rule.php
index 9b784c8c0f4..5ad9c4c4877 100644
--- a/app/code/Magento/CatalogWidget/Model/Rule.php
+++ b/app/code/Magento/CatalogWidget/Model/Rule.php
@@ -22,7 +22,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param Rule\Condition\CombineFactory $conditionsFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\CatalogWidget\Model\Rule\Condition\CombineFactory $conditionsFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Checkout/Model/ResourceModel/Cart.php b/app/code/Magento/Checkout/Model/ResourceModel/Cart.php
index 23b434e6b75..f415ada130f 100644
--- a/app/code/Magento/Checkout/Model/ResourceModel/Cart.php
+++ b/app/code/Magento/Checkout/Model/ResourceModel/Cart.php
@@ -10,7 +10,7 @@ namespace Magento\Checkout\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Cart extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Cart extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Model initialization
diff --git a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
index 1aac5226375..1be4a148232 100644
--- a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
+++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
@@ -8,7 +8,7 @@ namespace Magento\CheckoutAgreements\Model\ResourceModel;
 /**
  * Resource Model for Checkout Agreement
  */
-class Agreement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Filter\FilterManager
@@ -16,13 +16,13 @@ class Agreement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $filterManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param string $connectionName
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Filter\FilterManager $filterManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php
index 28071d999f1..6356de345f5 100644
--- a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php
+++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\CheckoutAgreements\Model\ResourceModel\Agreement;
 /**
  * Resource Model for Agreement Collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var array
diff --git a/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php b/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php
index 104c36bd80a..7b2e0829cf4 100644
--- a/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php
@@ -8,7 +8,7 @@ namespace Magento\Cms\Model\ResourceModel;
 /**
  * Abstract collection of CMS pages and blocks
  */
-abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store manager
@@ -24,7 +24,7 @@ abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -33,7 +33,7 @@ abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->storeManager = $storeManager;
diff --git a/app/code/Magento/Cms/Model/ResourceModel/Block.php b/app/code/Magento/Cms/Model/ResourceModel/Block.php
index 442f9274d31..32469ae77ac 100644
--- a/app/code/Magento/Cms/Model/ResourceModel/Block.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Block.php
@@ -8,7 +8,7 @@ namespace Magento\Cms\Model\ResourceModel;
 /**
  * CMS block model
  */
-class Block extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Block extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTime
@@ -25,13 +25,13 @@ class Block extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
diff --git a/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php
index 21df8bca40c..e658aa86cb5 100644
--- a/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php
@@ -31,7 +31,7 @@ class Collection extends BlockCollection implements SearchResultInterface
      * @param string $resourceModel
      * @param string $model
      * @param string|null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -47,7 +47,7 @@ class Collection extends BlockCollection implements SearchResultInterface
         $resourceModel,
         $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document',
         $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Cms/Model/ResourceModel/Page.php b/app/code/Magento/Cms/Model/ResourceModel/Page.php
index 9d4634717ac..a0bcda0d530 100644
--- a/app/code/Magento/Cms/Model/ResourceModel/Page.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Page.php
@@ -11,7 +11,7 @@ namespace Magento\Cms\Model\ResourceModel;
 /**
  * Cms page mysql resource
  */
-class Page extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store model
@@ -40,14 +40,14 @@ class Page extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php
index 3eb31318395..49fbeaa47d6 100644
--- a/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php
@@ -27,12 +27,12 @@ class Collection extends PageCollection implements SearchResultInterface
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed|null $mainTable
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $eventPrefix
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $eventPrefix
      * @param mixed $eventObject
      * @param mixed $resourceModel
      * @param string $model
      * @param null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
      * 
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -48,7 +48,7 @@ class Collection extends PageCollection implements SearchResultInterface
         $resourceModel,
         $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document',
         $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
index cb4e51d718f..b2a025a5589 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
@@ -58,7 +58,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
                     $this->getMockBuilder('Magento\Framework\Registry')
                         ->disableOriginalConstructor()
                         ->getMock(),
-                    $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource')
+                    $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
                         ->disableOriginalConstructor()
                         ->setMethods(
                             [
diff --git a/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php
index 8a611f75029..e323765dabe 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php
@@ -23,7 +23,7 @@ abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected $objectManager;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -38,7 +38,7 @@ abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->connection->expects($this->any())->method('select')->willReturn($this->select);
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $this->resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getMainTable', 'getTable'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
index 21ce20f6174..bdb08b0f04b 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
@@ -59,7 +59,7 @@ class Custom extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -68,7 +68,7 @@ class Custom extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
index 0fe5834b863..50478bfb7b8 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
@@ -28,7 +28,7 @@ class Robots extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -37,7 +37,7 @@ class Robots extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
index 2b2de392e7d..ff429986e3a 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
@@ -23,7 +23,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
index 49298cb9288..3f77e3b07d1 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
@@ -21,7 +21,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Backend\Model\UrlInterface $backendUrl
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Backend\Model\UrlInterface $backendUrl,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
index 9f9db6d0a99..30e63b7d2be 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
@@ -17,7 +17,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\Asset\MergeService $mergeService
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -26,7 +26,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\Asset\MergeService $mergeService,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
index 02ffa58b6b2..3daccc80463 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
@@ -29,7 +29,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
index f38db8cc6dd..cd9a7e643d3 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
@@ -23,7 +23,7 @@ class Allow extends AbstractCurrency
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -33,7 +33,7 @@ class Allow extends AbstractCurrency
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
index 8b000db0117..45470cc06a2 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
@@ -21,7 +21,7 @@ class Base extends AbstractCurrency
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Base extends AbstractCurrency
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
index 2575a80ec73..c88d752c82f 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
@@ -22,7 +22,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
index 51a78e6f188..71aa76e17b5 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
@@ -23,7 +23,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/File.php b/app/code/Magento/Config/Model/Config/Backend/File.php
index 1b03ae15671..8925877efcb 100644
--- a/app/code/Magento/Config/Model/Config/Backend/File.php
+++ b/app/code/Magento/Config/Model/Config/Backend/File.php
@@ -50,7 +50,7 @@ class File extends \Magento\Framework\App\Config\Value
      * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
      * @param \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData
      * @param Filesystem $filesystem
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -61,7 +61,7 @@ class File extends \Magento\Framework\App\Config\Value
         \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory,
         \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData,
         Filesystem $filesystem,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
index 486df64d2fc..a8c3fa28862 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
@@ -23,7 +23,7 @@ class Adapter extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Image\AdapterFactory $imageFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Adapter extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Image\AdapterFactory $imageFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Locale.php b/app/code/Magento/Config/Model/Config/Backend/Locale.php
index 6c7fca6df42..c6cec53f26a 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Locale.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Locale.php
@@ -41,7 +41,7 @@ class Locale extends \Magento\Framework\App\Config\Value
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Store\Model\StoreFactory $storeFactory
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      *
@@ -55,7 +55,7 @@ class Locale extends \Magento\Framework\App\Config\Value
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Store\Model\StoreFactory $storeFactory,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
index 83ae49a6cf7..61695bcf742 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
@@ -30,7 +30,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -40,7 +40,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Config/Model/Config/Backend/Secure.php b/app/code/Magento/Config/Model/Config/Backend/Secure.php
index 7eab9b7846f..ef41a60fe4e 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Secure.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Secure.php
@@ -16,7 +16,7 @@ class Secure extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\Asset\MergeService $mergeService
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -25,7 +25,7 @@ class Secure extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\Asset\MergeService $mergeService,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Store.php b/app/code/Magento/Config/Model/Config/Backend/Store.php
index 85c10c62a18..69e62956915 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Store.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Store.php
@@ -21,7 +21,7 @@ class Store extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Store extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Translate.php b/app/code/Magento/Config/Model/Config/Backend/Translate.php
index e91a44e91ae..28b908668f7 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Translate.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Translate.php
@@ -38,7 +38,7 @@ class Translate extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -48,7 +48,7 @@ class Translate extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/ResourceModel/Config.php b/app/code/Magento/Config/Model/ResourceModel/Config.php
index 4dcaea38a81..617a7bc5f09 100644
--- a/app/code/Magento/Config/Model/ResourceModel/Config.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config.php
@@ -3,9 +3,6 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
-// @codingStandardsIgnoreFile
-
 namespace Magento\Config\Model\ResourceModel;
 
 /**
@@ -13,7 +10,8 @@ namespace Magento\Config\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements \Magento\Framework\App\Config\ConfigResource\ConfigInterface
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
+    implements \Magento\Framework\App\Config\ConfigResource\ConfigInterface
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Config/Model/ResourceModel/Config/Data.php b/app/code/Magento/Config/Model/ResourceModel/Config/Data.php
index 3beaf6e6ec4..fc7566af724 100644
--- a/app/code/Magento/Config/Model/ResourceModel/Config/Data.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config/Data.php
@@ -10,7 +10,7 @@ namespace Magento\Config\Model\ResourceModel\Config;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Data extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Data extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php b/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php
index f6394cabb2c..a8eed0304cf 100644
--- a/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Config\Model\ResourceModel\Config\Data;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php
index c420c03a65f..ed284eb16dd 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php
@@ -33,7 +33,7 @@ class EncryptedTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($eventDispatcherMock)
         );
         $this->_resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 '_construct',
                 'getConnection',
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php
index f701da73b90..f11e401776d 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type;
 
-class Configurable extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Configurable extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Catalog product relation
@@ -17,12 +17,12 @@ class Configurable extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_catalogProductRelation;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Catalog\Model\ResourceModel\Product\Relation $catalogProductRelation
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Catalog\Model\ResourceModel\Product\Relation $catalogProductRelation,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php
index b32eea47a18..f031775006b 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php
@@ -9,7 +9,7 @@ namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configura
 
 use Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute as ConfigurableAttribute;
 
-class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Label table name cache
@@ -33,13 +33,13 @@ class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Helper\Data $catalogData,
         $connectionName = null
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php
index 0dd9837218d..dbca1777f45 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php
@@ -13,7 +13,7 @@ use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
  * @SuppressWarnings(PHPMD.LongVariable)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Configurable attributes label table name
diff --git a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
index 5a2c469bf10..febdde20240 100644
--- a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
@@ -18,7 +18,7 @@ class LinksTest extends \PHPUnit_Framework_TestCase
             $this->getMock('\Magento\Framework\Model\Context', [], [], '', false),
             $this->getMock('\Magento\Framework\Registry', [], [], '', false),
             $this->getMockForAbstractClass('\Magento\Framework\App\Config\ScopeConfigInterface', [], '', false),
-            $this->getMockForAbstractClass('\Magento\Framework\Model\ModelResource\AbstractResource', [], '', false),
+            $this->getMockForAbstractClass('\Magento\Framework\Model\ResourceModel\AbstractResource', [], '', false),
             $this->getMock('\Magento\Framework\Data\Collection\AbstractDb', [], [], '', false)
         );
     }
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
index 0d8fb666c75..50e5a4782d9 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
@@ -18,7 +18,7 @@ class Domain extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -28,7 +28,7 @@ class Domain extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
index 3170aadb8f5..bf2b2805dff 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
@@ -18,7 +18,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -28,7 +28,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Path.php b/app/code/Magento/Cookie/Model/Config/Backend/Path.php
index 7130085fbd8..f64d41dc1f0 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Path.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Path.php
@@ -18,7 +18,7 @@ class Path extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -28,7 +28,7 @@ class Path extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php
index 30ff0267ea8..3e85d8a5dc9 100644
--- a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php
+++ b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php
@@ -13,7 +13,7 @@ use Magento\Framework\Session\Config\Validator\CookieDomainValidator;
  */
 class DomainTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Framework\Model\ModelResource\AbstractResource | \PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Model\ResourceModel\AbstractResource | \PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     /** @var \Magento\Cookie\Model\Config\Backend\Domain */
@@ -37,7 +37,7 @@ class DomainTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 '_construct',
                 'getConnection',
diff --git a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
index 7427d72f392..67d69dfe2b5 100644
--- a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
+++ b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
@@ -38,7 +38,7 @@ class Alert extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -48,7 +48,7 @@ class Alert extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
index c49176ab625..fecbc2d676e 100644
--- a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
+++ b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
@@ -38,7 +38,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -48,7 +48,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php
index 6cad618e678..469171d9e15 100644
--- a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php
+++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php
@@ -10,7 +10,7 @@ namespace Magento\Cron\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Schedule extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Schedule extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource
diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php
index 28bbcad12b8..bbb579babc4 100644
--- a/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php
+++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Cron\Model\ResourceModel\Schedule;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource collection
diff --git a/app/code/Magento/Cron/Model/Schedule.php b/app/code/Magento/Cron/Model/Schedule.php
index 4f4308b9db6..fbcb1fe5b27 100644
--- a/app/code/Magento/Cron/Model/Schedule.php
+++ b/app/code/Magento/Cron/Model/Schedule.php
@@ -47,14 +47,14 @@ class Schedule extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Address.php b/app/code/Magento/Customer/Model/Address.php
index 1195715d8bb..9318f0eb6a0 100644
--- a/app/code/Magento/Customer/Model/Address.php
+++ b/app/code/Magento/Customer/Model/Address.php
@@ -64,7 +64,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress
      * @param CustomerFactory $customerFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      *
@@ -87,7 +87,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress
         CustomerFactory $customerFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Address/AbstractAddress.php b/app/code/Magento/Customer/Model/Address/AbstractAddress.php
index ff3604e367b..783b8c40017 100644
--- a/app/code/Magento/Customer/Model/Address/AbstractAddress.php
+++ b/app/code/Magento/Customer/Model/Address/AbstractAddress.php
@@ -127,7 +127,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
      * @param AddressInterfaceFactory $addressDataFactory
      * @param RegionInterfaceFactory $regionDataFactory
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -146,7 +146,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
         AddressInterfaceFactory $addressDataFactory,
         RegionInterfaceFactory $regionDataFactory,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Attribute.php b/app/code/Magento/Customer/Model/Attribute.php
index 83f861b3ea4..e1e56c1e78c 100644
--- a/app/code/Magento/Customer/Model/Attribute.php
+++ b/app/code/Magento/Customer/Model/Attribute.php
@@ -59,7 +59,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param DateTimeFormatterInterface $dateTimeFormatter
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      *
@@ -83,7 +83,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         DateTimeFormatterInterface $dateTimeFormatter,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
index 014c25e8ea9..d456491e5c3 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
@@ -28,7 +28,7 @@ class Street extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Street extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
index 2c39ad5de00..2f889d0f7c0 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
@@ -17,7 +17,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -26,7 +26,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
index 2957d9ae35f..31ed960864f 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
@@ -28,7 +28,7 @@ class Customer extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Customer extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Share.php b/app/code/Magento/Customer/Model/Config/Share.php
index 5c8010c95b2..5fb8bacb574 100644
--- a/app/code/Magento/Customer/Model/Config/Share.php
+++ b/app/code/Magento/Customer/Model/Config/Share.php
@@ -42,7 +42,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -52,7 +52,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Customer\Model\ResourceModel\Customer $customerResource,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Group.php b/app/code/Magento/Customer/Model/Group.php
index 1f1d549a6eb..8045a405695 100644
--- a/app/code/Magento/Customer/Model/Group.php
+++ b/app/code/Magento/Customer/Model/Group.php
@@ -64,7 +64,7 @@ class Group extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Store\Model\StoresConfig $storesConfig
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
      * @param \Magento\Tax\Model\ClassModelFactory $classModelFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -75,7 +75,7 @@ class Group extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoresConfig $storesConfig,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
         \Magento\Tax\Model\ClassModelFactory $classModelFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Address.php b/app/code/Magento/Customer/Model/ResourceModel/Address.php
index 5a5b476fb5e..53502f74839 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Address.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address.php
@@ -21,16 +21,16 @@ class Address extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
 
     /**
      * @param \Magento\Eav\Model\Entity\Context $context
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
      * @param \Magento\Framework\Validator\Factory $validatorFactory
      * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
      * @param array $data
      */
     public function __construct(
         \Magento\Eav\Model\Entity\Context $context,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Framework\Validator\Factory $validatorFactory,
         \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
         $data = []
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php
index b5120a99178..3267ab03cb6 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\Customer\Model\ResourceModel\Address;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 /**
  * Class represents save operations for customer address relations
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer.php b/app/code/Magento/Customer/Model/ResourceModel/Customer.php
index a0125875c54..e96b8c1b2a4 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Customer.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer.php
@@ -38,8 +38,8 @@ class Customer extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
 
     /**
      * @param \Magento\Eav\Model\Entity\Context $context
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Validator\Factory $validatorFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -48,8 +48,8 @@ class Customer extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
      */
     public function __construct(
         \Magento\Eav\Model\Entity\Context $context,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Validator\Factory $validatorFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php
index 6d69c42c167..e8982afaba9 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php
@@ -38,7 +38,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DataObject\Copy\Config $fieldsetConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      * @param string $modelName
@@ -55,7 +55,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DataObject\Copy\Config $fieldsetConfig,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
         $modelName = self::CUSTOMER_MODEL_NAME
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php
index 20b3124bcc2..b809549ed79 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php
@@ -9,7 +9,7 @@ namespace Magento\Customer\Model\ResourceModel\Customer;
 /**
  * Class Relation
  */
-class Relation implements \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface
+class Relation implements \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface
 {
     /**
      * Save relations for Customer
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Group.php b/app/code/Magento/Customer/Model/ResourceModel/Group.php
index 395e49c2481..7c793f8fc9e 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Group.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Group.php
@@ -5,15 +5,15 @@
  */
 namespace Magento\Customer\Model\ResourceModel;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 
 /**
  * Customer group resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Group extends \Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb
+class Group extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb
 {
     /**
      * Group Management
@@ -28,7 +28,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Abs
     protected $_customersFactory;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Snapshot $entitySnapshot,
      * @param RelationComposite $entityRelationComposite,
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
@@ -36,7 +36,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Abs
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php
index bc7b863e7e0..52d37da5646 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Customer\Model\ResourceModel\Group;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Visitor.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php
index 2c65387b196..1e3adf4d6ce 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Visitor.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php
@@ -10,7 +10,7 @@ namespace Magento\Customer\Model\ResourceModel;
  * Class Visitor
  * @package Magento\Customer\Model\ResourceModel
  */
-class Visitor extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Visitor extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTime
@@ -23,13 +23,13 @@ class Visitor extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
diff --git a/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php
index cbad6afc46f..5ce707c294d 100644
--- a/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Customer\Model\ResourceModel\Visitor;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Customer/Model/Visitor.php b/app/code/Magento/Customer/Model/Visitor.php
index 45c8c3408b8..6f4a1d58b3b 100644
--- a/app/code/Magento/Customer/Model/Visitor.php
+++ b/app/code/Magento/Customer/Model/Visitor.php
@@ -75,7 +75,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $ignoredUserAgents
      * @param array $ignores
@@ -91,7 +91,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $ignoredUserAgents = [],
         array $ignores = [],
diff --git a/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php b/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php
index 7907716a7f7..c779cd5d3f4 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php
@@ -70,7 +70,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $timezoneMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceMock;
 
@@ -173,7 +173,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->dateTimeFormatter = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface');
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding'])
             ->getMockForAbstractClass();
         $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php
index 3f8a66cfc53..890d19c00ad 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php
@@ -69,7 +69,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
             false
         );
         $customerResource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php
index 04011dd7fd4..61f3adb3dab 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php
@@ -8,8 +8,8 @@
 
 namespace Magento\Customer\Test\Unit\Model\ResourceModel;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class AddressTest extends \PHPUnit_Framework_TestCase
@@ -32,7 +32,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -41,7 +41,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
 
 
         $this->entityRelationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php
index ccaa89a2061..2577c7fb401 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php
@@ -53,18 +53,18 @@ class GroupTest extends \PHPUnit_Framework_TestCase
 
         $this->groupModel = $this->getMock('Magento\Customer\Model\Group', [], [], '', false);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resource);
 
         $this->relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $transactionManagerMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface');
+        $transactionManagerMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface');
         $transactionManagerMock->expects($this->once())
             ->method('start')
             ->willReturn($this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface'));
diff --git a/app/code/Magento/Customer/etc/di.xml b/app/code/Magento/Customer/etc/di.xml
index 384841938d0..0b8450f053a 100644
--- a/app/code/Magento/Customer/etc/di.xml
+++ b/app/code/Magento/Customer/etc/di.xml
@@ -139,19 +139,19 @@
             </argument>
         </arguments>
     </type>
-    <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot">
+    <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot">
         <arguments>
             <argument name="metadata" xsi:type="object">Magento\Eav\Model\Entity\VersionControl\Metadata</argument>
         </arguments>
     </virtualType>
-    <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Address\Relation</item>
diff --git a/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php
index f0ebc53c926..c1df86ca09f 100644
--- a/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php
+++ b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php
@@ -26,13 +26,13 @@ class Data extends \Magento\ImportExport\Model\ResourceModel\Import\Data
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Json\Helper\Data $coreHelper
      * @param string $connectionName
      * @param array $arguments
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         $connectionName = null,
         array $arguments = []
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php
index cd6ce233b8a..d68c554241d 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php
@@ -111,7 +111,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         );
         unset($dependencies['resource'], $dependencies['json_helper']);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($resource);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
diff --git a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
index e4552761129..531e4fc64c3 100644
--- a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
+++ b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
@@ -32,7 +32,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
      * @param \Magento\Framework\Escaper $escaper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Message\ManagerInterface $messageManager,
         \Magento\Framework\Escaper $escaper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Directory/Model/Country.php b/app/code/Magento/Directory/Model/Country.php
index d7cb1689385..fca0524c095 100644
--- a/app/code/Magento/Directory/Model/Country.php
+++ b/app/code/Magento/Directory/Model/Country.php
@@ -44,7 +44,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Locale\ListsInterface $localeLists
      * @param Country\FormatFactory $formatFactory
      * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -54,7 +54,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Locale\ListsInterface $localeLists,
         \Magento\Directory\Model\Country\FormatFactory $formatFactory,
         \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Directory/Model/Currency.php b/app/code/Magento/Directory/Model/Currency.php
index ff09a021d42..576c946d0d6 100644
--- a/app/code/Magento/Directory/Model/Currency.php
+++ b/app/code/Magento/Directory/Model/Currency.php
@@ -73,7 +73,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param Currency\FilterFactory $currencyFilterFactory
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -86,7 +86,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Directory\Model\Currency\FilterFactory $currencyFilterFactory,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country.php b/app/code/Magento/Directory/Model/ResourceModel/Country.php
index b315f23df0d..09ef9f9aba6 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Country.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country.php
@@ -8,7 +8,7 @@ namespace Magento\Directory\Model\ResourceModel;
 /**
  * Directory Country Resource Model
  */
-class Country extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Country extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php
index 23d0e57ffef..da1d524f7ab 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php
@@ -15,7 +15,7 @@ namespace Magento\Directory\Model\ResourceModel\Country;
  * Class Collection
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Locale model
@@ -65,7 +65,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\App\Helper\AbstractHelper $helperData
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -80,7 +80,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\App\Helper\AbstractHelper $helperData,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_scopeConfig = $scopeConfig;
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php
index d3a838305e5..ad8e0772849 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php
@@ -10,7 +10,7 @@ namespace Magento\Directory\Model\ResourceModel\Country;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Format extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Format extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php
index 9c6a84806e3..25982b5729f 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Directory\Model\ResourceModel\Country\Format;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Currency.php b/app/code/Magento/Directory/Model/ResourceModel/Currency.php
index 36e7c5b128f..7e5b29b6e99 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Currency.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Currency.php
@@ -9,7 +9,7 @@
  */
 namespace Magento\Directory\Model\ResourceModel;
 
-class Currency extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Currency extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Currency rate table
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Region.php b/app/code/Magento/Directory/Model/ResourceModel/Region.php
index 952696382f1..d03ce611e7b 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Region.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Region.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Directory\Model\ResourceModel;
 
-class Region extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Region extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Table with localized region names
@@ -26,12 +26,12 @@ class Region extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_localeResolver;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php
index b60aa8bd5d4..23e48367c17 100644
--- a/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php
@@ -9,7 +9,7 @@
  */
 namespace Magento\Directory\Model\ResourceModel\Region;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Locale region name table name
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -46,7 +46,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_localeResolver = $localeResolver;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php b/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php
index 2a2037a73ce..dbbd2d935d5 100644
--- a/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php
@@ -21,7 +21,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $select = $this->getMock('Magento\Framework\DB\Select', [], [], '', false);
         $connection->expects($this->once())->method('select')->will($this->returnValue($select));
 
-        $resource = $this->getMockForAbstractClass('Magento\Framework\Model\ModelResource\Db\AbstractDb',
+        $resource = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Downloadable/Model/Link.php b/app/code/Magento/Downloadable/Model/Link.php
index 6f72a840756..bfc7c484ffe 100644
--- a/app/code/Magento/Downloadable/Model/Link.php
+++ b/app/code/Magento/Downloadable/Model/Link.php
@@ -56,7 +56,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -65,7 +65,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link.php
index c8c3147e825..04652bee14c 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Link.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Catalog data
@@ -35,7 +35,7 @@ class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
@@ -43,7 +43,7 @@ class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\Framework\App\Config\ScopeConfigInterface $configuration,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php
index 7b794e611b3..37e85d665b7 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php
index 16174007587..1b108de2f30 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Purchased extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Purchased extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Magento class constructor
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php
index 7b23cdf4139..d7510b23074 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php
index 7d934e97b65..32528606484 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Magento class constructor
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php
index 64e2248d554..632015fec2a 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php b/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php
index 78958f26c40..df170878696 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Sample extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Sample extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection
diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php
index c224b46484e..8a5878d95e5 100644
--- a/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Sample;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php
index f535d50abfb..fcfc62e9087 100644
--- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php
+++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php
@@ -47,7 +47,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
      * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -61,7 +61,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
         \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php
index 67b34be95fd..ea563923353 100644
--- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php
+++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php
@@ -25,7 +25,7 @@ class Creditmemo extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstr
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
      * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -40,7 +40,7 @@ class Creditmemo extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstr
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
         \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php
index 4ab859d7ae7..952932d1258 100644
--- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php
+++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php
@@ -25,7 +25,7 @@ class Invoice extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstract
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
      * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -40,7 +40,7 @@ class Invoice extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstract
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
         \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/Sample.php b/app/code/Magento/Downloadable/Model/Sample.php
index 54064495b48..3fcc4cebb82 100644
--- a/app/code/Magento/Downloadable/Model/Sample.php
+++ b/app/code/Magento/Downloadable/Model/Sample.php
@@ -36,7 +36,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -45,7 +45,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
index 74eaf714538..14147d6849d 100644
--- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
@@ -16,10 +16,10 @@ use Magento\Framework\App\Config\Element;
 use Magento\Framework\App\ResourceConnection\Config;
 use Magento\Framework\Exception\LocalizedException;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor;
-use Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface;
+use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor;
+use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
 use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider;
-use Magento\Framework\Model\ModelResource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 
 /**
  * Entity/Attribute/Model - entity abstract
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute.php b/app/code/Magento/Eav/Model/Entity/Attribute.php
index ac8627c9644..e26146bc9aa 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute.php
@@ -87,7 +87,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
      * @param \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param DateTimeFormatterInterface $dateTimeFormatter
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -110,7 +110,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
         \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         DateTimeFormatterInterface $dateTimeFormatter,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php b/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php
index 7709a917084..b77183b6c05 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php
@@ -124,7 +124,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
      * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -143,7 +143,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
         \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Set.php b/app/code/Magento/Eav/Model/Entity/Attribute/Set.php
index d7311a351f8..cd5705a566b 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Set.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Set.php
@@ -81,7 +81,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param GroupFactory $attrGroupFactory
      * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory
      * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceAttribute
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -96,7 +96,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
         \Magento\Eav\Model\Entity\Attribute\GroupFactory $attrGroupFactory,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
         \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceAttribute,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -348,7 +348,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php
index 9d1ebdeb183..9527e4a162d 100644
--- a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php
+++ b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php
@@ -265,7 +265,7 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @codeCoverageIgnore
      */
     public function getResource()
diff --git a/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php
index aceca7018b6..bda30846930 100644
--- a/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php
+++ b/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php
@@ -11,7 +11,7 @@ namespace Magento\Eav\Model\Entity\Collection\VersionControl;
 abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCollection
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshot;
 
@@ -25,7 +25,7 @@ abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\A
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
      * @param mixed $connection
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      * @codeCoverageIgnore
@@ -40,7 +40,7 @@ abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\A
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $this->entitySnapshot = $entitySnapshot;
diff --git a/app/code/Magento/Eav/Model/Entity/Context.php b/app/code/Magento/Eav/Model/Entity/Context.php
index 974fdedd8be..1f858af9378 100644
--- a/app/code/Magento/Eav/Model/Entity/Context.php
+++ b/app/code/Magento/Eav/Model/Entity/Context.php
@@ -42,12 +42,12 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     protected $universalFactory;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface
+     * @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface
      */
     protected $transactionManager;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor
+     * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor
      */
     protected $objectRelationProcessor;
 
@@ -58,8 +58,8 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
      * @param \Magento\Framework\Locale\FormatInterface $localeFormat
      * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface $transactionManager
-     * @param \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor $objectRelationProcessor
+     * @param \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface $transactionManager
+     * @param \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor $objectRelationProcessor
      */
     public function __construct(
         \Magento\Framework\App\ResourceConnection $resource,
@@ -68,8 +68,8 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
         \Magento\Framework\Locale\FormatInterface $localeFormat,
         \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface $transactionManager,
-        \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor $objectRelationProcessor
+        \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface $transactionManager,
+        \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor $objectRelationProcessor
     ) {
         $this->eavConfig = $eavConfig;
         $this->resource = $resource;
@@ -130,7 +130,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor
+     * @return \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor
      */
     public function getObjectRelationProcessor()
     {
@@ -138,7 +138,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface
+     * @return \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface
      */
     public function getTransactionManager()
     {
diff --git a/app/code/Magento/Eav/Model/Entity/Type.php b/app/code/Magento/Eav/Model/Entity/Type.php
index 4a95e8dc617..362e8fc2ddd 100644
--- a/app/code/Magento/Eav/Model/Entity/Type.php
+++ b/app/code/Magento/Eav/Model/Entity/Type.php
@@ -86,7 +86,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Eav\Model\Entity\Attribute\SetFactory $attSetFactory
      * @param \Magento\Eav\Model\Entity\StoreFactory $storeFactory
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -98,7 +98,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
         \Magento\Eav\Model\Entity\Attribute\SetFactory $attSetFactory,
         \Magento\Eav\Model\Entity\StoreFactory $storeFactory,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -359,7 +359,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve resource entity object
      *
-     * @return \Magento\Framework\Model\ModelResource\AbstractResource
+     * @return \Magento\Framework\Model\ResourceModel\AbstractResource
      */
     public function getEntity()
     {
diff --git a/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php
index 87e2fbd15c8..0e32219f56f 100644
--- a/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php
@@ -11,26 +11,26 @@ namespace Magento\Eav\Model\Entity\VersionControl;
 abstract class AbstractEntity extends \Magento\Eav\Model\Entity\AbstractEntity
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshot;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite
      */
     protected $entityRelationComposite;
 
     /**
      * @param \Magento\Eav\Model\Entity\Context $context
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param array $data
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Eav\Model\Entity\Context $context,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         $data = []
     ) {
         $this->entitySnapshot = $entitySnapshot;
diff --git a/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php b/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php
index 7ac09d827a8..40184c1e67f 100644
--- a/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php
+++ b/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php
@@ -8,7 +8,7 @@ namespace Magento\Eav\Model\Entity\VersionControl;
 /**
  * Class Metadata represents a list of entity fields that are applicable for persistence operations
  */
-class Metadata extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata
+class Metadata extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata
 {
     /**
      * Returns list of entity fields that are applicable for persistence operations
diff --git a/app/code/Magento/Eav/Model/Form/Element.php b/app/code/Magento/Eav/Model/Form/Element.php
index 53b09ca9696..2c573a42e8d 100644
--- a/app/code/Magento/Eav/Model/Form/Element.php
+++ b/app/code/Magento/Eav/Model/Form/Element.php
@@ -40,7 +40,7 @@ class Element extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -49,7 +49,7 @@ class Element extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Eav/Model/Form/Fieldset.php b/app/code/Magento/Eav/Model/Form/Fieldset.php
index f62c929a56d..6b7a6fd4561 100644
--- a/app/code/Magento/Eav/Model/Form/Fieldset.php
+++ b/app/code/Magento/Eav/Model/Form/Fieldset.php
@@ -36,7 +36,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -45,7 +45,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Eav/Model/Form/Type.php b/app/code/Magento/Eav/Model/Form/Type.php
index 2d2d71ed230..011a751799b 100644
--- a/app/code/Magento/Eav/Model/Form/Type.php
+++ b/app/code/Magento/Eav/Model/Form/Type.php
@@ -46,7 +46,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Eav\Model\Form\FieldsetFactory $fieldsetFactory
      * @param \Magento\Eav\Model\Form\ElementFactory $elementFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -56,7 +56,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Eav\Model\Form\FieldsetFactory $fieldsetFactory,
         \Magento\Eav\Model\Form\ElementFactory $elementFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php
index e65443fc19d..b4212e0de80 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php
@@ -46,7 +46,7 @@ abstract class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attrib
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -57,7 +57,7 @@ abstract class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attrib
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource);
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Config.php b/app/code/Magento/Eav/Model/ResourceModel/Config.php
index cc094ce9b90..f4c086a0160 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Config.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Config.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Array of entity types
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php
index 6eb91a04c7f..46d4c57cf0a 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php
@@ -15,7 +15,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Eav Entity attributes cache
@@ -37,14 +37,14 @@ class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Type $eavEntityType
      * @param string $connectionName
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         Type $eavEntityType,
         $connectionName = null
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php
index 0dc661628ea..b750d50f741 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php
@@ -12,7 +12,7 @@ use Magento\Eav\Model\Entity\Type;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Add attribute set info flag
@@ -33,7 +33,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -43,7 +43,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->eavConfig = $eavConfig;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -418,7 +418,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
     /**
      * Ad information about attribute sets to collection result data
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected function _afterLoadData()
     {
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php
index 1afe6d928f7..4dca4750399 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Grid;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Eav Resource Attribute Set Collection
@@ -26,7 +26,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\C
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Registry $registryManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -36,7 +36,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\C
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Registry $registryManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_registryManager = $registryManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -45,7 +45,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\C
     /**
      *  Add filter by entity type id to collection
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|$this
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|$this
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php
index 1cc51c103a0..6a4a8f0e70f 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constants for attribute group codes
@@ -58,7 +58,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * Perform actions before object save
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
     {
@@ -72,7 +72,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * Perform actions after object save
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php
index 0b6f42bad99..57304cbe277 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Group;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model for collection
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php
index aab2b48e9fd..2bb306fa7c2 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php
index 1af5aa93515..730312c0940 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Option;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Option value table
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\App\ResourceConnection $coreResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -48,7 +48,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\App\ResourceConnection $coreResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_coreResource = $coreResource;
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php
index 73463d6bf41..913be1826ca 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Set extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Set extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * EAV cache ids
@@ -28,14 +28,14 @@ class Set extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $eavConfig;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param GroupFactory $attrGroupFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory $attrGroupFactory,
         \Magento\Eav\Model\Config $eavConfig,
         $connectionName = null
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php
index b387d79d3f8..63cd97ef0d8 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Set;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php
index 3ac344709ef..eddbe7edce3 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php
@@ -13,7 +13,7 @@ use Magento\Framework\DataObject;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Store extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php
index 27962971bcc..0b54022ab99 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php
index d95ba269528..769bff41b50 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Type;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php
index a4612becca0..53aec996749 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Eav\Model\ResourceModel\Form;
 
-abstract class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Return form attribute IDs by form code
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php
index 45d58985f0f..2e364087647 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Form\Attribute;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Current module pathname
@@ -58,7 +58,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -69,7 +69,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_eavConfig = $eavConfig;
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php
index 997fe96c0d6..82772b7436f 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Form;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Element extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Element extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php
index 8acab7d4249..3f1fc938e12 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Form\Element;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php
index 58a6960591b..7b6897229aa 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php
@@ -14,7 +14,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Fieldset extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Fieldset extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php
index 171f9246305..3d6feedcc1c 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php
@@ -16,11 +16,11 @@ use Magento\Framework\Data\Collection\EntityFactory;
 use Magento\Eav\Model\Form\Type;
 use Magento\Framework\Event\ManagerInterface;
 use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Store\Model\StoreManagerInterface;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var StoreManagerInterface
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php
index f08f56e1499..38535f4831d 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php
@@ -13,7 +13,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
@@ -71,7 +71,7 @@ class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Save entity types after save form type
      *
-     * @see \Magento\Framework\Model\ModelResource\Db\AbstractDb#_afterSave($object)
+     * @see \Magento\Framework\Model\ResourceModel\Db\AbstractDb#_afterSave($object)
      *
      * @param FormType|AbstractModel $object
      * @return $this
diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php
index cee833b6660..5fcb127bca1 100644
--- a/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php
@@ -13,7 +13,7 @@ namespace Magento\Eav\Model\ResourceModel\Form\Type;
 
 use Magento\Eav\Model\Entity\Type;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php
index 6782fb524cc..6a0aa5039c6 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php
@@ -21,7 +21,7 @@ class AbstractCollectionTest extends \Magento\Eav\Test\Unit\Model\Entity\Collect
     protected $subject;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshot;
 
@@ -32,7 +32,7 @@ class AbstractCollectionTest extends \Magento\Eav\Test\Unit\Model\Entity\Collect
         $objectManager = new ObjectManager($this);
 
         $this->entitySnapshot = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             ['registerSnapshot'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php
index 69d0a66513c..7d578fa8d57 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php
@@ -80,7 +80,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php
index c0cd7023281..8c98d7c6589 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Eav\Test\Unit\Model\Entity\VersionControl;
 
 use Magento\Eav\Model\Entity\VersionControl\AbstractEntity;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 /**
@@ -15,7 +15,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEntityTest
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshot;
 
@@ -27,7 +27,7 @@ class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEnt
     protected function setUp()
     {
         $this->entitySnapshot = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             ['isModified', 'registerSnapshot'],
             [],
             '',
@@ -35,7 +35,7 @@ class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEnt
         );
 
         $this->entityRelationComposite = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             ['processRelations'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php
index f7532efa226..070dbdaa28f 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php
@@ -23,7 +23,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php
index b456cd248c5..9424e4d62a9 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php
@@ -56,7 +56,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -94,7 +94,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->select = new \Magento\Framework\DB\Select($this->connectionMock);
 
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php
index cfbfb8fd545..2da0008b077 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php
@@ -48,7 +48,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -91,7 +91,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php
index 0de43ba3fda..f554327bf76 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php
@@ -56,16 +56,16 @@ class SetTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getConnection', 'getTableName'])
             ->getMock();
         $this->transactionManagerMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface'
+            '\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface'
         );
         $this->relationProcessor = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
-        $contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())
             ->method('getTransactionManager')
             ->willReturn($this->transactionManagerMock);
diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php
index 24558ba8092..f1ec1a31b98 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php
@@ -296,14 +296,14 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
         $eavEntityType = $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Type', [], [], '', false, false);
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($resource);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
diff --git a/app/code/Magento/Email/Model/ResourceModel/Template.php b/app/code/Magento/Email/Model/ResourceModel/Template.php
index bcc8efc5e72..2196c831348 100644
--- a/app/code/Magento/Email/Model/ResourceModel/Template.php
+++ b/app/code/Magento/Email/Model/ResourceModel/Template.php
@@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Template extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -20,12 +20,12 @@ class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php b/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php
index 5f35b0b6657..018aed027e1 100644
--- a/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php
+++ b/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Email\Model\ResourceModel\Template;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Template table name
diff --git a/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php b/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php
index 7e2202db2c8..5daa8da5d22 100644
--- a/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php
+++ b/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php
@@ -14,7 +14,7 @@ use Magento\Framework\Config\File\ConfigFilePool;
  * Encryption key changer resource model
  * The operation must be done in one transaction
  */
-class Change extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Change extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Encryptor interface
@@ -45,7 +45,7 @@ class Change extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $writer;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Config\Model\Config\Structure $structure
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
@@ -53,7 +53,7 @@ class Change extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Config\Model\Config\Structure $structure,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
diff --git a/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php b/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php
index 53f89136b82..55286de60bc 100644
--- a/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php
+++ b/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php
@@ -25,7 +25,7 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
     protected $resourceMock;
     /** @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject */
     protected $selectMock;
-    /** @var \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface */
+    /** @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface */
     protected $tansactionMock;
     /** @var |\PHPUnit_Framework_MockObject_MockObject */
     protected $objRelationMock;
@@ -62,12 +62,12 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $translationClassName = 'Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface';
+        $translationClassName = 'Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface';
         $this->tansactionMock = $this->getMockBuilder($translationClassName)
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $relationClassName = 'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor';
+        $relationClassName = 'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor';
         $this->objRelationMock = $this->getMockBuilder($relationClassName)
             ->disableOriginalConstructor()
             ->setMethods([])
diff --git a/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php b/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php
index 94b1218051d..5d9b36fd8ee 100644
--- a/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php
+++ b/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php
@@ -10,7 +10,7 @@ namespace Magento\GiftMessage\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Message extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Message extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php b/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php
index 5ca342875b6..c948edf1cd0 100644
--- a/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php
+++ b/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\GiftMessage\Model\ResourceModel\Message;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
index f072d2114d6..b3cc66a1ed1 100644
--- a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
+++ b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
@@ -28,7 +28,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory
      * @param \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory,
         \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php b/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php
index ba7afe858e4..50d89b04d7f 100644
--- a/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php
+++ b/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\GoogleOptimizer\Model\ResourceModel;
 
-class Code extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Code extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/ImportExport/Model/ResourceModel/History.php b/app/code/Magento/ImportExport/Model/ResourceModel/History.php
index 47b33fc42ca..5732f4dda2c 100644
--- a/app/code/Magento/ImportExport/Model/ResourceModel/History.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/History.php
@@ -8,7 +8,7 @@ namespace Magento\ImportExport\Model\ResourceModel;
 /**
  * Class History
  */
-class History extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class History extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php b/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php
index 99e3f48a186..f427da809a4 100644
--- a/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php
@@ -10,7 +10,7 @@ use \Magento\ImportExport\Model\History;
 /**
  * Import history collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Link table name
diff --git a/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php b/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php
index ce429e3033e..db95265ec47 100644
--- a/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php
@@ -10,7 +10,7 @@ namespace Magento\ImportExport\Model\ResourceModel\Import;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Data extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements \IteratorAggregate
+class Data extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \IteratorAggregate
 {
     /**
      * @var \Iterator
@@ -27,12 +27,12 @@ class Data extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implemen
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php b/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php
index b9867aa37cc..78920dad56e 100644
--- a/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php
@@ -14,7 +14,7 @@ namespace Magento\Indexer\Model\ResourceModel;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Select;
 
-abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
@@ -26,12 +26,12 @@ abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\D
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php
index ad4e69505fb..e783c4aabb6 100644
--- a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Indexer\Model\ResourceModel\Indexer;
 
-class State extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class State extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php
index cad7f010d50..2b87373dbe7 100644
--- a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Indexer\Model\ResourceModel\Indexer\State;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Collection initialization
diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php
index df3ce9b39ef..fd7612f9ac3 100644
--- a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Indexer\Model\ResourceModel\Mview\View;
 
-class State extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class State extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php
index 3f870f95942..9f6ce502356 100644
--- a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Indexer\Model\ResourceModel\Mview\View\State;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection implements
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements
     \Magento\Framework\Mview\View\State\CollectionInterface
 {
     /**
diff --git a/app/code/Magento/Integration/Model/Integration.php b/app/code/Magento/Integration/Model/Integration.php
index 6ac6ba894b3..42cd8f5fcd0 100644
--- a/app/code/Magento/Integration/Model/Integration.php
+++ b/app/code/Magento/Integration/Model/Integration.php
@@ -77,7 +77,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -85,7 +85,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Integration/Model/Oauth/Consumer.php b/app/code/Magento/Integration/Model/Oauth/Consumer.php
index 5e46ff6db32..1cfe091aed4 100644
--- a/app/code/Magento/Integration/Model/Oauth/Consumer.php
+++ b/app/code/Magento/Integration/Model/Oauth/Consumer.php
@@ -49,7 +49,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume
      * @param \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength $keyLength
      * @param \Magento\Framework\Url\Validator $urlValidator
      * @param \Magento\Integration\Helper\Oauth\Data $dataHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -59,7 +59,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume
         \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength $keyLength,
         \Magento\Framework\Url\Validator $urlValidator,
         \Magento\Integration\Helper\Oauth\Data $dataHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Integration/Model/Oauth/Nonce.php b/app/code/Magento/Integration/Model/Oauth/Nonce.php
index 075ca749574..4499aa8d42b 100644
--- a/app/code/Magento/Integration/Model/Oauth/Nonce.php
+++ b/app/code/Magento/Integration/Model/Oauth/Nonce.php
@@ -30,7 +30,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Integration\Helper\Oauth\Data $oauthData
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Integration\Helper\Oauth\Data $oauthData,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Integration/Model/Oauth/Token.php b/app/code/Magento/Integration/Model/Oauth/Token.php
index f0c2c587db7..52f50dcbab7 100644
--- a/app/code/Magento/Integration/Model/Oauth/Token.php
+++ b/app/code/Magento/Integration/Model/Oauth/Token.php
@@ -96,7 +96,7 @@ class Token extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Integration\Model\Oauth\ConsumerFactory $consumerFactory
      * @param \Magento\Integration\Helper\Oauth\Data $oauthData
      * @param OauthHelper $oauthHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -110,7 +110,7 @@ class Token extends \Magento\Framework\Model\AbstractModel
         \Magento\Integration\Model\Oauth\ConsumerFactory $consumerFactory,
         \Magento\Integration\Helper\Oauth\Data $oauthData,
         OauthHelper $oauthHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Integration.php b/app/code/Magento/Integration/Model/ResourceModel/Integration.php
index 1fd67dad5bd..d3a643b72cc 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Integration.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Integration.php
@@ -9,7 +9,7 @@ namespace Magento\Integration\Model\ResourceModel;
 /**
  * Integration resource model
  */
-class Integration extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Integration extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php
index a0941446aa2..02feeda9ab3 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Integration;
 /**
  * Integrations collection.
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource collection initialization.
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php
index ae92c482536..6e06d06b43f 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Integration\Model\ResourceModel\Oauth;
 
-class Consumer extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Consumer extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -13,12 +13,12 @@ class Consumer extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php
index 3444edf70f0..e213f03aa4f 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth\Consumer;
 /**
  * OAuth Application resource collection model
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php
index 7b6fa520eae..54babc2e060 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php
@@ -10,7 +10,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth;
  *
  * @author Magento Core Team <core@magentocommerce.com>
  */
-class Nonce extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Nonce extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php
index 90116036917..db1dad4fad8 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth\Nonce;
 /**
  * OAuth nonce resource collection model
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php
index 3e2758db005..b851efd3f7a 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php
@@ -10,7 +10,7 @@ use Magento\Authorization\Model\UserContextInterface;
 /**
  * OAuth token resource model
  */
-class Token extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Token extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -18,12 +18,12 @@ class Token extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php
index c1f4365d66e..6e777fdff72 100644
--- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth\Token;
 /**
  * OAuth token resource collection model
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
diff --git a/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php
index 759b77d1340..2bd75138d9f 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php
@@ -31,7 +31,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
     protected $dateTimeMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -76,7 +76,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [],
             '',
             false,
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php
index 32f1ee039f8..cf5db2ee443 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php
@@ -49,7 +49,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
     protected $oauthDataMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php
index 5ceeae0f53a..fd41c76c7c6 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php
@@ -32,7 +32,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase
     protected $oauthDataMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -77,7 +77,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [],
             '',
             false,
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php
index cc0be1c629d..427e8591787 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php
@@ -68,7 +68,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     protected $oauthHelperMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -119,7 +119,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->setMethods(
                 [
                     'getIdFieldName',
diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php
index 707f00002dd..9e188fd3ec7 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php
@@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->select));
 
-        $resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['__wakeup', 'getConnection'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php
index 994996623b6..b42bd4c18ea 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php
@@ -26,7 +26,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
     protected $resourceMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
@@ -47,7 +47,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $this->contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $this->contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $this->contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
         $this->integrationResourceModel = new \Magento\Integration\Model\ResourceModel\Integration($this->contextMock);
diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php
index 30c5872de26..38b2993b7e2 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php
@@ -45,7 +45,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
         $this->consumerResource = new \Magento\Integration\Model\ResourceModel\Oauth\Consumer(
             $contextMock,
diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php
index feff0879f79..4faae40b06f 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php
@@ -32,7 +32,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
         $this->nonceResource = new \Magento\Integration\Model\ResourceModel\Oauth\Nonce($contextMock);
diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php
index ff9046d4f6f..21f66d94ebb 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php
@@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->select));
 
-        $resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['__wakeup', 'getConnection'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php
index 95fe15805c6..da0e0b9bc37 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php
@@ -32,7 +32,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
         $this->tokenResource = new \Magento\Integration\Model\ResourceModel\Oauth\Token(
diff --git a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
index 95f4d6c2165..7bd243fd0ac 100644
--- a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
+++ b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
@@ -19,7 +19,7 @@ class Database extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\MediaStorage\Helper\File\Storage $coreFileStorage
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -28,7 +28,7 @@ class Database extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\MediaStorage\Helper\File\Storage $coreFileStorage,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage.php b/app/code/Magento/MediaStorage/Model/File/Storage.php
index aa3e783d87a..87b176f850b 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage.php
@@ -98,7 +98,7 @@ class Storage extends AbstractModel
      * @param \Magento\MediaStorage\Model\File\Storage\FileFactory $fileFactory
      * @param \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $databaseFactory
      * @param Filesystem $filesystem
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -113,7 +113,7 @@ class Storage extends AbstractModel
         \Magento\MediaStorage\Model\File\Storage\FileFactory $fileFactory,
         \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $databaseFactory,
         Filesystem $filesystem,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php b/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php
index 5e764db6ac9..16d3439c9ac 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php
@@ -47,7 +47,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $dateModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $connectionName
      * @param array $data
@@ -58,7 +58,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel
         \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb,
         \Magento\Framework\Stdlib\DateTime\DateTime $dateModel,
         \Magento\Framework\App\Config\ScopeConfigInterface $configuration,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $connectionName = null,
         array $data = []
@@ -94,7 +94,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\AbstractResource
+     * @return \Magento\Framework\Model\ResourceModel\AbstractResource
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php
index 93633dcf3ae..934279fedb5 100644
--- a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php
+++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php
@@ -8,7 +8,7 @@ namespace Magento\MediaStorage\Model\ResourceModel\File\Storage;
 /**
  * Class AbstractStorage
  */
-abstract class AbstractStorage extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractStorage extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * File storage connection name
diff --git a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php
index 4c2521eab93..429c4c3e9f1 100644
--- a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php
+++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php
@@ -16,12 +16,12 @@ class Database extends \Magento\MediaStorage\Model\ResourceModel\File\Storage\Ab
     protected $_resourceHelper;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\DB\Helper $resourceHelper
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\DB\Helper $resourceHelper,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php b/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php
index 1def7eab39d..2299f66fcbd 100644
--- a/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php
+++ b/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php
@@ -107,7 +107,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase
         $this->dbStorageFactoryMock->expects($this->once())
             ->method('create')
             ->will($this->returnValue($dbModelMock));
-        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['__wakeup'])
             ->getMockForAbstractClass();
@@ -348,7 +348,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase
         $this->dbStorageFactoryMock->expects($this->exactly($callNum))
             ->method('create')
             ->will($this->returnValue($dbModelMock));
-        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['deleteFolder', '__wakeup'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php
index 8de4e7ff922..bbd351eee8a 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Counts extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Counts extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize users resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php
index d6cd15cda11..da4e4bdbabe 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel\Counts;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize counts resource collection
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php
index c9d73c97fb7..43bd47407d1 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Module extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Module extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize module status resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php
index 1b41b28aa7b..28c4119736b 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel\Module;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize module status resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php
index 8620239aef5..d3ba20c22ba 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Orders extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Orders extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize orders resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php
index f5a51553da2..0f49fe88bce 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel\Orders;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize orders resource collection
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php
index 6baa41ddb8d..b5e4edc67b9 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class System extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class System extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize system updates resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php
index c054b74d6a4..021b2f3d4a6 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel\System;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize system updates resource collection
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php
index 6240ce40151..40b062535bf 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Users extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Users extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize users resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php
index aa54af519c9..6f6d18c6da8 100644
--- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\NewRelicReporting\Model\ResourceModel\Users;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize users resource collection
diff --git a/app/code/Magento/Newsletter/Model/Problem.php b/app/code/Magento/Newsletter/Model/Problem.php
index f881d8e9912..f62b5096605 100644
--- a/app/code/Magento/Newsletter/Model/Problem.php
+++ b/app/code/Magento/Newsletter/Model/Problem.php
@@ -43,7 +43,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -51,7 +51,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php
index 6b34b766a5e..17c28f4d56f 100644
--- a/app/code/Magento/Newsletter/Model/Queue.php
+++ b/app/code/Magento/Newsletter/Model/Queue.php
@@ -117,7 +117,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy
      * @param \Magento\Newsletter\Model\ProblemFactory $problemFactory
      * @param \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory
      * @param \Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -131,7 +131,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy
         \Magento\Newsletter\Model\ProblemFactory $problemFactory,
         \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory,
         \Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php
index 7c9ee8c0e28..29ca4f54293 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php
@@ -18,7 +18,7 @@ class Collection extends \Magento\Newsletter\Model\ResourceModel\Problem\Collect
     /**
      * Adds queue info to grid
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|\Magento\Newsletter\Model\ResourceModel\Grid\Collection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|\Magento\Newsletter\Model\ResourceModel\Grid\Collection
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php b/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php
index fb9fd78ee0b..77d8b9baec1 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php
@@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Problem extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Problem extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php
index 4d0dfe4cb60..110ef3c821b 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php
@@ -13,7 +13,7 @@ use Magento\Framework\Exception\NoSuchEntityException;
  *
  * @SuppressWarnings(PHPMD.LongVariable)
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * True when subscribers info joined
@@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param CustomerRepository $customerRepository
      * @param \Magento\Customer\Helper\View $customerView
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -73,7 +73,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         CustomerRepository $customerRepository,
         \Magento\Customer\Helper\View $customerView,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->customerRepository = $customerRepository;
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php
index 6bc24a47f6e..cf8086a6598 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php
@@ -13,7 +13,7 @@ use Magento\Newsletter\Model\Queue as ModelQueue;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Queue extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Queue extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Subscriber collection
@@ -25,12 +25,12 @@ class Queue extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php
index 66eea82e01b..138b7bd121e 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel\Queue;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * True when subscribers info joined
@@ -40,7 +40,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -49,7 +49,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_date = $date;
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php
index f0bac9f61c6..ffd998a2c33 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php
@@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Subscriber extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Subscriber extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * DB connection
@@ -48,13 +48,13 @@ class Subscriber extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Math\Random $mathRandom,
         $connectionName = null
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php
index b93f600cbdc..92de4c8b2e6 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php
@@ -12,7 +12,7 @@ use Magento\Newsletter\Model\Queue as ModelQueue;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Queue link table name
@@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Helper\Data $customerHelperData
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -72,7 +72,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Helper\Data $customerHelperData,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_customerHelperData = $customerHelperData;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Template.php b/app/code/Magento/Newsletter/Model/ResourceModel/Template.php
index f2a19d1c81e..3d9c097678a 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Template.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Template.php
@@ -13,7 +13,7 @@ namespace Magento\Newsletter\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Template extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Date
@@ -23,12 +23,12 @@ class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_date;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php
index 17e5272f315..925352d5049 100644
--- a/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel\Template;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model and model
diff --git a/app/code/Magento/Newsletter/Model/Subscriber.php b/app/code/Magento/Newsletter/Model/Subscriber.php
index 2a4be1caffe..5ea6aefc0de 100644
--- a/app/code/Magento/Newsletter/Model/Subscriber.php
+++ b/app/code/Magento/Newsletter/Model/Subscriber.php
@@ -133,7 +133,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $customerAccountManagement
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -149,7 +149,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel
         CustomerRepositoryInterface $customerRepository,
         AccountManagementInterface $customerAccountManagement,
         \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
index e48b75956b3..e6920ede9b8 100644
--- a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
+++ b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
@@ -24,7 +24,7 @@ class Tablerate extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -33,7 +33,7 @@ class Tablerate extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php
index 8d8c47141d9..df0228a3383 100644
--- a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php
+++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php
@@ -18,7 +18,7 @@ use Magento\Framework\Filesystem\DirectoryList;
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Tablerate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Tablerate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Import table rates website ID
@@ -122,7 +122,7 @@ class Tablerate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_filesystem;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -133,7 +133,7 @@ class Tablerate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
diff --git a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php
index 441fec80fe0..1a63a12fac9 100644
--- a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php
+++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate;
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Directory/country table name
diff --git a/app/code/Magento/Payment/Model/Info.php b/app/code/Magento/Payment/Model/Info.php
index f6028fc9369..4ba972b321f 100644
--- a/app/code/Magento/Payment/Model/Info.php
+++ b/app/code/Magento/Payment/Model/Info.php
@@ -38,7 +38,7 @@ class Info extends AbstractExtensibleModel implements InfoInterface
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -49,7 +49,7 @@ class Info extends AbstractExtensibleModel implements InfoInterface
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Method/AbstractMethod.php b/app/code/Magento/Payment/Model/Method/AbstractMethod.php
index cc47008313c..8e6300b6258 100644
--- a/app/code/Magento/Payment/Model/Method/AbstractMethod.php
+++ b/app/code/Magento/Payment/Model/Method/AbstractMethod.php
@@ -221,7 +221,7 @@ abstract class AbstractMethod extends \Magento\Framework\Model\AbstractExtensibl
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param Logger $logger
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -234,7 +234,7 @@ abstract class AbstractMethod extends \Magento\Framework\Model\AbstractExtensibl
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Payment\Model\Method\Logger $logger,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Method/Cc.php b/app/code/Magento/Payment/Model/Method/Cc.php
index 23fa92da538..1bf0ab267e2 100644
--- a/app/code/Magento/Payment/Model/Method/Cc.php
+++ b/app/code/Magento/Payment/Model/Method/Cc.php
@@ -46,7 +46,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod
      * @param Logger $logger
      * @param \Magento\Framework\Module\ModuleListInterface $moduleList
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -61,7 +61,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod
         \Magento\Payment\Model\Method\Logger $logger,
         \Magento\Framework\Module\ModuleListInterface $moduleList,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Method/Free.php b/app/code/Magento/Payment/Model/Method/Free.php
index fd15c0a926d..dd534c8a58f 100644
--- a/app/code/Magento/Payment/Model/Method/Free.php
+++ b/app/code/Magento/Payment/Model/Method/Free.php
@@ -52,7 +52,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param Logger $logger
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -66,7 +66,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Payment\Model\Method\Logger $logger,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php b/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php
index bf45d116407..985f7cd8eef 100644
--- a/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php
+++ b/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php
@@ -63,7 +63,7 @@ abstract class AbstractAgreement extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Payment\Helper\Data $paymentData
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -71,7 +71,7 @@ abstract class AbstractAgreement extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Payment\Helper\Data $paymentData,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Billing/Agreement.php b/app/code/Magento/Paypal/Model/Billing/Agreement.php
index f663aabaf1a..1e6a2cee5ae 100644
--- a/app/code/Magento/Paypal/Model/Billing/Agreement.php
+++ b/app/code/Magento/Paypal/Model/Billing/Agreement.php
@@ -58,7 +58,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $billingAgreementFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -68,7 +68,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $billingAgreementFactory,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Cert.php b/app/code/Magento/Paypal/Model/Cert.php
index 86f4dd2b476..a5e4cb8be07 100644
--- a/app/code/Magento/Paypal/Model/Cert.php
+++ b/app/code/Magento/Paypal/Model/Cert.php
@@ -33,7 +33,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Direct.php b/app/code/Magento/Paypal/Model/Direct.php
index 0d30a92ca3f..9433a3b5761 100644
--- a/app/code/Magento/Paypal/Model/Direct.php
+++ b/app/code/Magento/Paypal/Model/Direct.php
@@ -149,7 +149,7 @@ class Direct extends \Magento\Payment\Model\Method\Cc
      * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param CartFactory $cartFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -169,7 +169,7 @@ class Direct extends \Magento\Payment\Model\Method\Cc
         \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Paypal\Model\CartFactory $cartFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Express.php b/app/code/Magento/Paypal/Model/Express.php
index 0ae6ca30f83..52a3882a169 100644
--- a/app/code/Magento/Paypal/Model/Express.php
+++ b/app/code/Magento/Paypal/Model/Express.php
@@ -193,7 +193,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod
      * @param \Magento\Framework\Exception\LocalizedExceptionFactory $exception
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
      * @param Transaction\BuilderInterface $transactionBuilder
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -214,7 +214,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod
         \Magento\Framework\Exception\LocalizedExceptionFactory $exception,
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
         \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Hostedpro.php b/app/code/Magento/Paypal/Model/Hostedpro.php
index 9497beb05d5..61d0c35c916 100644
--- a/app/code/Magento/Paypal/Model/Hostedpro.php
+++ b/app/code/Magento/Paypal/Model/Hostedpro.php
@@ -85,7 +85,7 @@ class Hostedpro extends \Magento\Paypal\Model\Direct
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param CartFactory $cartFactory
      * @param Hostedpro\RequestFactory $hostedproRequestFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -106,7 +106,7 @@ class Hostedpro extends \Magento\Paypal\Model\Direct
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Paypal\Model\CartFactory $cartFactory,
         \Magento\Paypal\Model\Hostedpro\RequestFactory $hostedproRequestFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Method/Agreement.php b/app/code/Magento/Paypal/Model/Method/Agreement.php
index 0c6d70b28ef..93321eefc89 100644
--- a/app/code/Magento/Paypal/Model/Method/Agreement.php
+++ b/app/code/Magento/Paypal/Model/Method/Agreement.php
@@ -128,7 +128,7 @@ class Agreement extends \Magento\Paypal\Model\Payment\Method\Billing\AbstractAgr
      * @param \Magento\Paypal\Model\ProFactory $proFactory
      * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Paypal\Model\CartFactory $cartFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -146,7 +146,7 @@ class Agreement extends \Magento\Paypal\Model\Payment\Method\Billing\AbstractAgr
         \Magento\Paypal\Model\ProFactory $proFactory,
         \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Paypal\Model\CartFactory $cartFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflow/Transparent.php b/app/code/Magento/Paypal/Model/Payflow/Transparent.php
index 409e4801d01..2a9142907b8 100644
--- a/app/code/Magento/Paypal/Model/Payflow/Transparent.php
+++ b/app/code/Magento/Paypal/Model/Payflow/Transparent.php
@@ -53,7 +53,7 @@ class Transparent extends Payflowpro implements TransparentInterface
      * @param Gateway $gateway
      * @param HandlerInterface $errorHandler
      * @param ResponseValidator $responseValidator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -73,7 +73,7 @@ class Transparent extends Payflowpro implements TransparentInterface
         Gateway $gateway,
         HandlerInterface $errorHandler,
         ResponseValidator $responseValidator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/PayflowExpress.php b/app/code/Magento/Paypal/Model/PayflowExpress.php
index 9c719279cb2..a45f1153b67 100644
--- a/app/code/Magento/Paypal/Model/PayflowExpress.php
+++ b/app/code/Magento/Paypal/Model/PayflowExpress.php
@@ -66,7 +66,7 @@ class PayflowExpress extends \Magento\Paypal\Model\Express
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
      * @param Transaction\BuilderInterface $transactionBuilder
      * @param InfoFactory $paypalInfoFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -88,7 +88,7 @@ class PayflowExpress extends \Magento\Paypal\Model\Express
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
         \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
         InfoFactory $paypalInfoFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflowlink.php b/app/code/Magento/Paypal/Model/Payflowlink.php
index ffddac7ea17..20838941543 100644
--- a/app/code/Magento/Paypal/Model/Payflowlink.php
+++ b/app/code/Magento/Paypal/Model/Payflowlink.php
@@ -132,7 +132,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param OrderSender $orderSender
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -158,7 +158,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         OrderSender $orderSender,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflowpro.php b/app/code/Magento/Paypal/Model/Payflowpro.php
index 52294d89b79..61aa24f293b 100644
--- a/app/code/Magento/Paypal/Model/Payflowpro.php
+++ b/app/code/Magento/Paypal/Model/Payflowpro.php
@@ -270,7 +270,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
      * @param ConfigInterfaceFactory $configFactory
      * @param Gateway $gateway
      * @param HandlerInterface $errorHandler
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -289,7 +289,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
         ConfigInterfaceFactory $configFactory,
         Gateway $gateway,
         HandlerInterface $errorHandler,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php b/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php
index 71b594ead9f..521a6130026 100644
--- a/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php
+++ b/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php
@@ -52,7 +52,7 @@ abstract class AbstractAgreement extends \Magento\Payment\Model\Method\AbstractM
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Payment\Model\Method\Logger $logger
      * @param \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -66,7 +66,7 @@ abstract class AbstractAgreement extends \Magento\Payment\Model\Method\AbstractM
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Payment\Model\Method\Logger $logger,
         \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Report/Settlement.php b/app/code/Magento/Paypal/Model/Report/Settlement.php
index 73698224b2b..4fc8633bafa 100644
--- a/app/code/Magento/Paypal/Model/Report/Settlement.php
+++ b/app/code/Magento/Paypal/Model/Report/Settlement.php
@@ -168,7 +168,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel
     * @param \Magento\Framework\Filesystem $filesystem
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-    * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+    * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
     * @param array $data
     */
@@ -178,7 +178,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
index f027cf7bce7..6f714ae437e 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
@@ -8,7 +8,7 @@ namespace Magento\Paypal\Model\ResourceModel\Billing;
 /**
  * Billing agreement resource model
  */
-class Agreement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php
index 23f80dff419..f08876e5e61 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php
@@ -10,7 +10,7 @@ use Magento\Customer\Api\CustomerMetadataInterface;
 /**
  * Billing agreements resource collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Mapping for fields
@@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param \Magento\Eav\Helper\Data $eavHelper
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -55,7 +55,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Eav\Helper\Data $eavHelper,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_eavHelper = $eavHelper;
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Cert.php b/app/code/Magento/Paypal/Model/ResourceModel/Cert.php
index 81cfd75024c..13de6e3c1f3 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Cert.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Cert.php
@@ -8,7 +8,7 @@ namespace Magento\Paypal\Model\ResourceModel;
 /**
  * PayPal resource model for certificate based authentication
  */
-class Cert extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Cert extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTime
@@ -21,13 +21,13 @@ class Cert extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
@@ -51,7 +51,7 @@ class Cert extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * Set date of last update
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php
index 0538906b4a2..eed10fa9d69 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php
@@ -11,7 +11,7 @@ namespace Magento\Paypal\Model\ResourceModel\Report;
 /**
  * Report settlement resource model
  */
-class Settlement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Settlement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Table name
@@ -26,12 +26,12 @@ class Settlement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_coreDate;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php
index 1501b46fa35..b2bc99495f7 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php
@@ -10,7 +10,7 @@ namespace Magento\Paypal\Model\ResourceModel\Report\Settlement;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Row extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Row extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource model initialization.
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php
index e76234b8497..6fcd59ad141 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Paypal\Model\ResourceModel\Report\Settlement\Row;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initializing
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
index 5edc101cc02..14607a6c87d 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
@@ -35,7 +35,7 @@ class Cert extends \Magento\Framework\App\Config\Value
      * @param \Magento\Paypal\Model\CertFactory $certFactory
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -46,7 +46,7 @@ class Cert extends \Magento\Framework\App\Config\Value
         \Magento\Paypal\Model\CertFactory $certFactory,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
index dda1f596559..8afc08f1471 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
@@ -21,7 +21,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
index bef8a6e42b4..caa265b4e07 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
@@ -28,7 +28,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Directory\Helper\Data $directoryHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Directory\Helper\Data $directoryHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Persistent/Model/ResourceModel/Session.php b/app/code/Magento/Persistent/Model/ResourceModel/Session.php
index 32f591b6779..a858573f4f7 100644
--- a/app/code/Magento/Persistent/Model/ResourceModel/Session.php
+++ b/app/code/Magento/Persistent/Model/ResourceModel/Session.php
@@ -8,7 +8,7 @@ namespace Magento\Persistent\Model\ResourceModel;
 /**
  * Persistent Session Resource Model
  */
-class Session extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Session extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Use is object new method for object saving
@@ -27,12 +27,12 @@ class Session extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Persistent\Model\SessionFactory $sessionFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Persistent\Model\SessionFactory $sessionFactory,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Persistent/Model/Session.php b/app/code/Magento/Persistent/Model/Session.php
index 018ab10d5c4..70c4faaa3dd 100644
--- a/app/code/Magento/Persistent/Model/Session.php
+++ b/app/code/Magento/Persistent/Model/Session.php
@@ -107,7 +107,7 @@ class Session extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param \Magento\Framework\Session\Config\ConfigInterface $sessionConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -123,7 +123,7 @@ class Session extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Framework\Session\Config\ConfigInterface $sessionConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
index 198bcd5909b..c177a912bc2 100644
--- a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
+++ b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
@@ -38,7 +38,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/ProductAlert/Model/Email.php b/app/code/Magento/ProductAlert/Model/Email.php
index bb474f7080a..c8f8bd6c530 100644
--- a/app/code/Magento/ProductAlert/Model/Email.php
+++ b/app/code/Magento/ProductAlert/Model/Email.php
@@ -117,7 +117,7 @@ class Email extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Customer\Helper\View $customerHelper
      * @param \Magento\Store\Model\App\Emulation $appEmulation
      * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -132,7 +132,7 @@ class Email extends \Magento\Framework\Model\AbstractModel
         \Magento\Customer\Helper\View $customerHelper,
         \Magento\Store\Model\App\Emulation $appEmulation,
         \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/Price.php b/app/code/Magento/ProductAlert/Model/Price.php
index e3abeb881be..2d6e3535d70 100644
--- a/app/code/Magento/ProductAlert/Model/Price.php
+++ b/app/code/Magento/ProductAlert/Model/Price.php
@@ -42,7 +42,7 @@ class Price extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory $customerColFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -50,7 +50,7 @@ class Price extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory $customerColFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php b/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php
index ed029f001f6..3d12079b84c 100644
--- a/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php
@@ -10,7 +10,7 @@ namespace Magento\ProductAlert\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Retrieve alert row by object parameters
diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php
index f547c2c6175..e070ec58bfa 100644
--- a/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php
@@ -19,12 +19,12 @@ class Price extends \Magento\ProductAlert\Model\ResourceModel\AbstractResource
     protected $_dateFactory;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php
index 03ec7819ce7..4960fda5758 100644
--- a/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\ProductAlert\Model\ResourceModel\Price;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define price collection
diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php
index 944f722ea5e..bba6ee1eed2 100644
--- a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php
@@ -19,12 +19,12 @@ class Stock extends \Magento\ProductAlert\Model\ResourceModel\AbstractResource
     protected $_dateFactory;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php
index 782c36ca421..3a31c14a640 100644
--- a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\ProductAlert\Model\ResourceModel\Stock;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define stock collection
diff --git a/app/code/Magento/ProductAlert/Model/Stock.php b/app/code/Magento/ProductAlert/Model/Stock.php
index 07efb59ecfb..54fbedf8983 100644
--- a/app/code/Magento/ProductAlert/Model/Stock.php
+++ b/app/code/Magento/ProductAlert/Model/Stock.php
@@ -40,7 +40,7 @@ class Stock extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory $customerColFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -48,7 +48,7 @@ class Stock extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory $customerColFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/Quote.php b/app/code/Magento/Quote/Model/Quote.php
index 3a62a0e0222..29779c1e22a 100644
--- a/app/code/Magento/Quote/Model/Quote.php
+++ b/app/code/Magento/Quote/Model/Quote.php
@@ -382,7 +382,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
      * @param Quote\TotalsReader $totalsReader
      * @param ShippingFactory $shippingFactory
      * @param ShippingAssignmentFactory $shippingAssignmentFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -425,7 +425,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
         Quote\TotalsReader $totalsReader,
         \Magento\Quote\Model\ShippingFactory $shippingFactory,
         \Magento\Quote\Model\ShippingAssignmentFactory $shippingAssignmentFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/Quote/Address.php b/app/code/Magento/Quote/Model/Quote/Address.php
index 47962a6ce14..5eafe7ab369 100644
--- a/app/code/Magento/Quote/Model/Quote/Address.php
+++ b/app/code/Magento/Quote/Model/Quote/Address.php
@@ -263,7 +263,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
      * @param Address\CustomAttributeListInterface $attributeList
      * @param TotalsCollector $totalsCollector
      * @param \Magento\Quote\Model\Quote\TotalsReader $totalsReader
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      *
@@ -299,7 +299,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
         Address\CustomAttributeListInterface $attributeList,
         \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector,
         \Magento\Quote\Model\Quote\TotalsReader $totalsReader,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -538,7 +538,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
     /**
      * Retrieve address items collection
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getItemsCollection()
     {
@@ -779,7 +779,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
     /**
      * Retrieve collection of quote shipping rates
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getShippingRatesCollection()
     {
diff --git a/app/code/Magento/Quote/Model/Quote/Address/Relation.php b/app/code/Magento/Quote/Model/Quote/Address/Relation.php
index c23661955c5..898b868b772 100644
--- a/app/code/Magento/Quote/Model/Quote/Address/Relation.php
+++ b/app/code/Magento/Quote/Model/Quote/Address/Relation.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\Quote\Address;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 class Relation implements RelationInterface
 {
diff --git a/app/code/Magento/Quote/Model/Quote/Item.php b/app/code/Magento/Quote/Model/Quote/Item.php
index c67e97fb569..3b59817c072 100644
--- a/app/code/Magento/Quote/Model/Quote/Item.php
+++ b/app/code/Magento/Quote/Model/Quote/Item.php
@@ -187,7 +187,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage
      * @param Item\OptionFactory $itemOptionFactory
      * @param Item\Compare $quoteItemCompare
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      *
@@ -205,7 +205,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage
         \Magento\Quote\Model\Quote\Item\OptionFactory $itemOptionFactory,
         \Magento\Quote\Model\Quote\Item\Compare $quoteItemCompare,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php b/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php
index 193731ae519..7b356181cfb 100644
--- a/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php
+++ b/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php
@@ -87,7 +87,7 @@ abstract class AbstractItem extends \Magento\Framework\Model\AbstractExtensibleM
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -98,7 +98,7 @@ abstract class AbstractItem extends \Magento\Framework\Model\AbstractExtensibleM
         AttributeValueFactory $customAttributeFactory,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/Quote/Payment.php b/app/code/Magento/Quote/Model/Quote/Payment.php
index d57a57c518b..01d854c08d0 100644
--- a/app/code/Magento/Quote/Model/Quote/Payment.php
+++ b/app/code/Magento/Quote/Model/Quote/Payment.php
@@ -66,7 +66,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -79,7 +79,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/Quote/Relation.php b/app/code/Magento/Quote/Model/Quote/Relation.php
index e03db843bab..2dd85ec640d 100644
--- a/app/code/Magento/Quote/Model/Quote/Relation.php
+++ b/app/code/Magento/Quote/Model/Quote/Relation.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 class Relation implements RelationInterface
 {
diff --git a/app/code/Magento/Quote/Model/QuoteIdMask.php b/app/code/Magento/Quote/Model/QuoteIdMask.php
index c84b2d78020..dba1fcbf519 100644
--- a/app/code/Magento/Quote/Model/QuoteIdMask.php
+++ b/app/code/Magento/Quote/Model/QuoteIdMask.php
@@ -23,7 +23,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Math\Random $randomDataGenerator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Math\Random $randomDataGenerator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php
index 9735c697489..780eb049d7c 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php
@@ -8,9 +8,9 @@
 
 namespace Magento\Quote\Model\ResourceModel;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\SalesSequence\Model\Manager;
 
 /**
@@ -24,14 +24,14 @@ class Quote extends AbstractDb
     protected $sequenceManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Snapshot $entitySnapshot,
      * @param RelationComposite $entityRelationComposite,
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         Manager $sequenceManager,
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php
index c68cc3b0f98..fe3518ee460 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote address resource model
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php
index 5e623a1c055..b53d89d5c39 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Address;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php
index e82b7582709..0d3a2817c21 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\ResourceModel\Quote\Address;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote address item resource model
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php
index 1a13198a710..d554a60068f 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Address\Item;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php
index ebf70d9e36e..b2f0db80caf 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\ResourceModel\Quote\Address;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote address shipping rate resource model
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php
index c58b0dc8816..a981fe1e4fa 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Address\Rate;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Whether to load fixed items only
@@ -24,20 +24,20 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionContro
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php
index f05a824ac38..cf4bd8f0368 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php
index 5ab317c0a31..edb0586e294 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote resource model
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php
index 624f374182e..c0f1681fc6a 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Item;
 /**
  * Quote item resource collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Collection quote instance
@@ -44,12 +44,12 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionContro
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param Option\CollectionFactory $itemOptionCollectionFactory
      * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Quote\Model\Quote\Config $quoteConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -57,12 +57,12 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionContro
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Quote\Model\ResourceModel\Quote\Item\Option\CollectionFactory $itemOptionCollectionFactory,
         \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Quote\Model\Quote\Config $quoteConfig,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php
index 82c905e1db4..163ad4c20f8 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php
@@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Item;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Main table and field initialization
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php
index 66789696c67..d535e3b6369 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php
@@ -12,7 +12,7 @@ use Magento\Quote\Model\Quote\Item;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Array of option ids grouped by item id
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php
index abf7c9084d7..31f06fed551 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote payment resource model
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php
index 6ed0958d71f..de5e6ef357c 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php
@@ -8,25 +8,25 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Payment;
 /**
  * Quote payments collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php
index 26e75e23afb..9b2af2ac4eb 100644
--- a/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 /**
  * QuoteIdMask Resource model
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php
index f2b1cb2242b..1d2a2498253 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php
@@ -40,14 +40,14 @@ class RelationTest extends \PHPUnit_Framework_TestCase
     public function testProcessRelation()
     {
         $itemsCollection = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+            'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             [],
             [],
             '',
             false
         );
         $shippingRatesCollection = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+            'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php
index 0e6e0bb4cbe..fb6fec5504a 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php
@@ -34,7 +34,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $selectMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -49,7 +49,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $entityFactoryMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -70,7 +70,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->selectMock));
 
-        $this->resourceMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\AbstractDb', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->will(
             $this->returnValue($this->connectionMock)
         );
@@ -90,7 +90,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     public function testInstanceOf()
     {
         $this->assertInstanceOf(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Collection',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection',
             $this->collection
         );
     }
diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php
index 78c1b6b5007..74f99ab7169 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 use Magento\Quote\Model\ResourceModel\Quote\Item;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -38,7 +38,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -48,7 +48,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $relationCompositeMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $objectRelationProcessorMock;
 
@@ -76,27 +76,27 @@ class ItemTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
             false
         );
         $this->relationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
             false
         );
         $this->objectRelationProcessorMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
         $contextMock->expects($this->once())
             ->method('getObjectRelationProcessor')
@@ -115,7 +115,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
 
     public function testInstanceOf()
     {
-        $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb', $this->model);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb', $this->model);
     }
 
     public function testSaveNotModifiedItem()
diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php
index 3442b067b55..2319fca91ac 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 
 /**
  * Class QuoteAddressTest
@@ -38,7 +38,7 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -81,14 +81,14 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
             false
         );
         $this->relationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
diff --git a/app/code/Magento/Quote/etc/di.xml b/app/code/Magento/Quote/etc/di.xml
index 821619c6af5..17cadb026c9 100644
--- a/app/code/Magento/Quote/etc/di.xml
+++ b/app/code/Magento/Quote/etc/di.xml
@@ -57,7 +57,7 @@
             <argument name="addressConfig" xsi:type="object">Magento\Customer\Model\Address\Config\Proxy</argument>
         </arguments>
     </type>
-    <virtualType name="QuoteAddressRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="QuoteAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Quote\Model\Quote\Address\Relation</item>
@@ -69,7 +69,7 @@
             <argument name="entityRelationComposite" xsi:type="object">QuoteAddressRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="QuoteRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="QuoteRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Quote\Model\Quote\Relation</item>
diff --git a/app/code/Magento/Reports/Model/Event.php b/app/code/Magento/Reports/Model/Event.php
index d526754f94c..167255f3d13 100644
--- a/app/code/Magento/Reports/Model/Event.php
+++ b/app/code/Magento/Reports/Model/Event.php
@@ -54,7 +54,7 @@ class Event extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -63,7 +63,7 @@ class Event extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Reports/Model/Grouped/Collection.php b/app/code/Magento/Reports/Model/Grouped/Collection.php
index 13a0c21ef28..3929c3440c4 100644
--- a/app/code/Magento/Reports/Model/Grouped/Collection.php
+++ b/app/code/Magento/Reports/Model/Grouped/Collection.php
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Data\Collection
     /**
      * Collection resource
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_resourceCollection = null;
 
diff --git a/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php
index adc6025cd84..6380571f21f 100644
--- a/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php
+++ b/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php
@@ -56,7 +56,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Session\Generic $reportSession
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -70,7 +70,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Session\Generic $reportSession,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Reports/Model/Product/Index/Compared.php b/app/code/Magento/Reports/Model/Product/Index/Compared.php
index 771304f9c99..3583bbbdf46 100644
--- a/app/code/Magento/Reports/Model/Product/Index/Compared.php
+++ b/app/code/Magento/Reports/Model/Product/Index/Compared.php
@@ -46,7 +46,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Catalog\Helper\Product\Compare $productCompare
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -61,7 +61,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Catalog\Helper\Product\Compare $productCompare,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
index ab44549a4bc..1f7fe623045 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
@@ -81,7 +81,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DataObject\Copy\Config $fieldsetConfig
      * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
      * @param \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory
@@ -101,7 +101,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DataObject\Copy\Config $fieldsetConfig,
         \Magento\Quote\Model\QuoteRepository $quoteRepository,
         \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory,
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event.php b/app/code/Magento/Reports/Model/ResourceModel/Event.php
index 03f8a4e5bca..1ae3c00f553 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Event.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event.php
@@ -8,7 +8,7 @@ namespace Magento\Reports\Model\ResourceModel;
 /**
  * Report events resource model
  */
-class Event extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Event extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Core store config
@@ -23,13 +23,13 @@ class Event extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php
index 18e121c53fa..ddd9ec68192 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Reports\Model\ResourceModel\Event;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store Ids
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php
index 80539f20c79..3ff620e1eb3 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Reports\Model\ResourceModel\Event;
 
-class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Main table initialization
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php
index 221093132d3..12f0c969f3b 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Reports\Model\ResourceModel\Event\Type;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php
index 507d55a7143..d0d7195bc3f 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php
@@ -72,7 +72,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Helper $coreResourceHelper
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -80,7 +80,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection
      * @param \Magento\Sales\Model\Order\Config $orderConfig
      * @param \Magento\Sales\Model\ResourceModel\Report\OrderFactory $reportOrderFactory
      * @param null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -89,7 +89,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Helper $coreResourceHelper,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
@@ -97,7 +97,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection
         \Magento\Sales\Model\Order\Config $orderConfig,
         \Magento\Sales\Model\ResourceModel\Report\OrderFactory $reportOrderFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php
index d64c1845bb8..5c9a3118499 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php
@@ -9,7 +9,7 @@ namespace Magento\Reports\Model\ResourceModel\Product\Index;
 /**
  * Reports Product Index Abstract Resource Model
  */
-abstract class AbstractIndex extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractIndex extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * DateItime instance
@@ -28,13 +28,13 @@ abstract class AbstractIndex extends \Magento\Framework\Model\ModelResource\Db\A
     /**
      * Constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Reports\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Reports\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
@@ -132,7 +132,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\ModelResource\Db\A
      * Save Product Index data (forced save)
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return $this|\Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function save(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php
index e8bdb966edf..58f87efc347 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php
@@ -17,20 +17,20 @@ class Collection extends \Magento\Quote\Model\ResourceModel\Quote\Collection
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php
index 59e9996dcff..8e0c83d793a 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php
@@ -13,7 +13,7 @@ use Magento\Framework\App\ResourceConnection;
  *
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Join fields
@@ -53,7 +53,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -64,7 +64,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php b/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php
index 4d413b8c5b4..d5157527f00 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php
@@ -10,7 +10,7 @@ namespace Magento\Reports\Model\ResourceModel\Report;
  * Abstract report aggregate resource model
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-abstract class AbstractReport extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractReport extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Flag object
@@ -43,7 +43,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\ModelResource\Db\
     /**
      * Constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -52,7 +52,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\ModelResource\Db\
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php
index 8ca2869b2bb..fa647a5a852 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php
@@ -323,7 +323,7 @@ class Collection extends \Magento\Framework\Data\Collection
      *
      * @param int $fromDate
      * @param int $toDate
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected function _getReport($fromDate, $toDate)
     {
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php
index 70d6b4856e1..6e24d9536bf 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Reports\Model\ResourceModel\Report\Collection;
 
-class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * From date
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php
index 8ab98b1c2ee..39f14fb3d15 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php
@@ -25,7 +25,7 @@ class Factory
      *
      * @param string $className
      * @param array $arguments
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function create($className, array $arguments = [])
     {
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php
index 0ff5ed7925d..e71f50aa22a 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php
@@ -45,7 +45,7 @@ class Viewed extends \Magento\Sales\Model\ResourceModel\Report\AbstractReport
     /**
      * Constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -56,7 +56,7 @@ class Viewed extends \Magento\Sales\Model\ResourceModel\Report\AbstractReport
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php
index 05dd7e6c830..d130d2a85e9 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php
@@ -28,7 +28,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Review\Collection
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -41,7 +41,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Review\Collection
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_customerResource = $customerResource;
         parent::__construct(
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php
index 2728de60db5..8388f16dab2 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Reports\Model\ResourceModel\Wishlist;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Wishlist table name
@@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerResFactory
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -41,7 +41,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerResFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_customerResFactory = $customerResFactory;
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
index d2ddf28a92f..dced792d765 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
@@ -61,7 +61,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase
     protected $catalogProductHelperMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -99,7 +99,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->disableOriginalConstructor()
             ->setMethods(['getIdFieldName', '_construct', 'getConnection'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php
index a9716838a7b..b1fe579a13b 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php
@@ -36,7 +36,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $managerMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -82,7 +82,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->willReturn($this->selectMock);
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getCurrentStoreIds', '_construct', 'getMainTable', 'getTable'])
             ->getMock();
diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php
index 29e4fc06b77..bc16cf215d8 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php
@@ -16,7 +16,7 @@ class EventTest extends \PHPUnit_Framework_TestCase
     protected $event;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
@@ -50,7 +50,7 @@ class EventTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php
index ad3b32054b4..6b3c58f3838 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php
@@ -84,7 +84,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $selectMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -102,7 +102,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->managerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
             ->getMock();
-        $snapshotClassName = 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot';
+        $snapshotClassName = 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot';
         $this->entitySnapshotMock = $this->getMockBuilder($snapshotClassName)
             ->disableOriginalConstructor()
             ->getMock();
@@ -155,7 +155,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->willReturn($this->selectMock);
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resourceMock
diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php
index c0688436318..1b22f883259 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php
@@ -43,7 +43,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $entityFactoryMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshotMock;
 
@@ -86,7 +86,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->entityFactoryMock = $this->getMockBuilder('Magento\Framework\Data\Collection\EntityFactory')
             ->disableOriginalConstructor()
             ->getMock();
-        $snapshotClassName = 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot';
+        $snapshotClassName = 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot';
         $this->entitySnapshotMock = $this->getMockBuilder($snapshotClassName)
             ->disableOriginalConstructor()
             ->setMethods(['registerSnapshot'])
diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php
index 97e89fc832b..14cfb9c6f00 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php
@@ -23,7 +23,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         $eventManager = $this->getMock('\Magento\Framework\Event\Manager', [], [], '', false);
         $connection = $this->getMock('\Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
 
-        $resource = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $resource = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php
index 4ecaf8758f4..7d845db9a52 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php
@@ -20,7 +20,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
     protected $viewed;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
@@ -143,7 +143,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
             )
         );
 
-        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $this->contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock);
diff --git a/app/code/Magento/Review/Model/Rating.php b/app/code/Magento/Review/Model/Rating.php
index f7ff2785f21..f9af9a9223e 100644
--- a/app/code/Magento/Review/Model/Rating.php
+++ b/app/code/Magento/Review/Model/Rating.php
@@ -44,7 +44,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory
      * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -53,7 +53,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory,
         \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating.php b/app/code/Magento/Review/Model/ResourceModel/Rating.php
index f1f0b34e569..7a0635efa56 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Rating extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Rating extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     const RATING_STATUS_APPROVED = 'Approved';
 
@@ -32,7 +32,7 @@ class Rating extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_logger;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -40,7 +40,7 @@ class Rating extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php
index 4389d8c5447..8d030fff72b 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Store\Model\StoreManagerInterface
@@ -36,7 +36,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -46,7 +46,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_ratingCollectionF = $ratingCollectionF;
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php
index e9bc49b6e24..f2254ab506a 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Entity extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Entity extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Rating entity resource initialization
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php
index 3c55768f443..6a8723302d9 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php
@@ -28,7 +28,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Rating\Collection
      * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
      * @param \Magento\Framework\Registry $coreRegistry
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -39,7 +39,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Rating\Collection
         \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_coreRegistry = $coreRegistry;
         parent::__construct(
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php
index b80047227e2..e652866b456 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Review table
@@ -79,14 +79,14 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_ratingOptionVoteF;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Review\Model\Rating\Option\VoteFactory $ratingOptionVoteF
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Review\Model\Rating\Option\VoteFactory $ratingOptionVoteF,
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php
index 8ddf6ec7131..453835f5fb7 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating\Option;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Rating votes table
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php
index 263c0038bdb..d9afa8cd300 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating\Option;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Vote extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Vote extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php
index 319902c9016..73dfc5fc74a 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating\Option\Vote;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store list manager
@@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -42,7 +42,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_ratingCollectionF = $ratingCollectionF;
diff --git a/app/code/Magento/Review/Model/ResourceModel/Review.php b/app/code/Magento/Review/Model/ResourceModel/Review.php
index 33d35f72645..760d841c94e 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Review.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review.php
@@ -10,7 +10,7 @@ use Magento\Framework\Model\AbstractModel;
 /**
  * Review resource model
  */
-class Review extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Review extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Review table
@@ -90,7 +90,7 @@ class Review extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_ratingOptions;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Review\Model\RatingFactory $ratingFactory
@@ -98,7 +98,7 @@ class Review extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Review\Model\RatingFactory $ratingFactory,
diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php
index 81366748435..0cbd00fe45e 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Review;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Review table
@@ -83,7 +83,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -94,7 +94,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_reviewData = $reviewData;
         $this->_voteFactory = $voteFactory;
diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Status.php b/app/code/Magento/Review/Model/ResourceModel/Review/Status.php
index 0a6464b6ceb..8e1203d8350 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Review/Status.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Status.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Review;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Status extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Status extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource status model initialization
diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php
index 12671a70e88..6066207cd03 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Review\Model\ResourceModel\Review\Status;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Review status table
diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php b/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php
index 79614d2f1e6..260e3892037 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php
@@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Summary extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Summary extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define module
diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php
index 5a8a786c105..9cc5a8b54d6 100644
--- a/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Review\Summary;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * {@inheritdoc}
diff --git a/app/code/Magento/Review/Model/Review.php b/app/code/Magento/Review/Model/Review.php
index 2bba759b335..a44da6d2f82 100644
--- a/app/code/Magento/Review/Model/Review.php
+++ b/app/code/Magento/Review/Model/Review.php
@@ -120,7 +120,7 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
      * @param \Magento\Review\Model\Review\Summary $reviewSummary
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\UrlInterface $urlModel
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -135,7 +135,7 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
         \Magento\Review\Model\Review\Summary $reviewSummary,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\UrlInterface $urlModel,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Review/Model/Review/Status.php b/app/code/Magento/Review/Model/Review/Status.php
index aa3aee47b19..cb5b9f71368 100644
--- a/app/code/Magento/Review/Model/Review/Status.php
+++ b/app/code/Magento/Review/Model/Review/Status.php
@@ -17,14 +17,14 @@ class Status extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Review/Model/Rss.php b/app/code/Magento/Review/Model/Rss.php
index 2f876be2279..1acd912d6be 100644
--- a/app/code/Magento/Review/Model/Rss.php
+++ b/app/code/Magento/Review/Model/Rss.php
@@ -36,7 +36,7 @@ class Rss extends \Magento\Framework\Model\AbstractModel
     }
 
     /**
-     * @return $this|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getProductCollection()
     {
diff --git a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php
index 292aa4fb64a..c93e7c82679 100644
--- a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php
@@ -23,7 +23,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -44,7 +44,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
         $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($store));
         $this->objectManager = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this));
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getMainTable', 'getTable'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php
index 35c6aab3be2..e3ae5ad44c7 100644
--- a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php
@@ -31,7 +31,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $loggerMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -62,7 +62,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->setMethods(['getConnection', 'getMainTable', 'getTable'])
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
index c86f176a373..64f383245e3 100644
--- a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
+++ b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
@@ -21,7 +21,7 @@ class Links extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Links extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Rule/Model/AbstractModel.php b/app/code/Magento/Rule/Model/AbstractModel.php
index a125cb03f36..07bc7957bfb 100644
--- a/app/code/Magento/Rule/Model/AbstractModel.php
+++ b/app/code/Magento/Rule/Model/AbstractModel.php
@@ -81,7 +81,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -90,7 +90,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php
index 0d7fb27f5b0..0655ddb25a9 100644
--- a/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php
+++ b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Rule\Model\ResourceModel;
 
-abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store associated with rule entities information map
diff --git a/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php b/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php
index 07e3faafcdf..227300f8b06 100644
--- a/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php
+++ b/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Rule\Model\ResourceModel\Rule\Collection;
 
-abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store associated with rule entities information map
diff --git a/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php b/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php
index e40d4f6ca91..f93510b4a23 100644
--- a/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php
+++ b/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php
@@ -41,7 +41,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected $_managerMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_db;
 
@@ -52,7 +52,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         $this->_fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface');
         $this->_managerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $this->_db = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
index 365e188b0c1..24f639ea10b 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Creditmemo\AbstractCreditmemo;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Sales\Model\Order\Pdf\Creditmemo;
 use Magento\Framework\Stdlib\DateTime\DateTime;
 use Magento\Backend\App\Action\Context;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
index 4f2cd24cac0..043565937d8 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Invoice;
 use Magento\Framework\Stdlib\DateTime\DateTime;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
index c25455db575..badfbc2ad43 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\Controller\ResultInterface;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php
index ed1b73abba7..244390e564d 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php
index b9cab6dfe7a..df35760a47c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php
index da88afbc23f..ab2d11b29a7 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php
index 3a170803b6c..b46e8c2c7e0 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Creditmemo;
 use Magento\Framework\Stdlib\DateTime\DateTime;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php
index 44886e549ba..16341d5e06a 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Sales\Model\Order\Pdf\Invoice;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\Response\Http\FileFactory;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
index bc6fccf9953..15469cdf292 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Invoice;
 use Magento\Framework\Stdlib\DateTime\DateTime;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php
index fdc834d140e..f71bf7d8e0e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Ui\Component\MassAction\Filter;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
index dabc2f0df7f..aaaeba3ccec 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
@@ -10,7 +10,7 @@ use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\App\Response\Http\FileFactory;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Shipment;
 use Magento\Framework\Stdlib\DateTime\DateTime;
diff --git a/app/code/Magento/Sales/Helper/Admin.php b/app/code/Magento/Sales/Helper/Admin.php
index ef241613afd..fc6590a7134 100644
--- a/app/code/Magento/Sales/Helper/Admin.php
+++ b/app/code/Magento/Sales/Helper/Admin.php
@@ -113,8 +113,8 @@ class Admin extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Filter collection by removing not available product types
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection $collection
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @param \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection $collection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function applySalableProductTypesFilter($collection)
     {
diff --git a/app/code/Magento/Sales/Model/AbstractModel.php b/app/code/Magento/Sales/Model/AbstractModel.php
index e63ad080d3d..cc9cac1cf78 100644
--- a/app/code/Magento/Sales/Model/AbstractModel.php
+++ b/app/code/Magento/Sales/Model/AbstractModel.php
@@ -21,7 +21,7 @@ abstract class AbstractModel extends AbstractExtensibleModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ abstract class AbstractModel extends AbstractExtensibleModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php
index 722ba4ef243..e53438bd684 100644
--- a/app/code/Magento/Sales/Model/Order.php
+++ b/app/code/Magento/Sales/Model/Order.php
@@ -286,7 +286,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
      * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory
      * @param PriceCurrencyInterface $priceCurrency
      * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -315,7 +315,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
         \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory,
         PriceCurrencyInterface $priceCurrency,
         \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Address.php b/app/code/Magento/Sales/Model/Order/Address.php
index 38cc0b52b97..fec38a4895f 100644
--- a/app/code/Magento/Sales/Model/Order/Address.php
+++ b/app/code/Magento/Sales/Model/Order/Address.php
@@ -61,7 +61,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -72,7 +72,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Directory\Model\RegionFactory $regionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php
index 41db239b098..9eeb67ed266 100644
--- a/app/code/Magento/Sales/Model/Order/Creditmemo.php
+++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php
@@ -128,7 +128,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
      * @param Creditmemo\CommentFactory $commentFactory
      * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -146,7 +146,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
         \Magento\Sales\Model\Order\Creditmemo\CommentFactory $commentFactory,
         \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php
index 64305b8c2e1..ce87a4282d2 100644
--- a/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php
+++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php
@@ -33,7 +33,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +44,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php
index ce444987f2b..4de21f6036b 100644
--- a/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php
@@ -48,7 +48,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -58,7 +58,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\ItemFactory $orderItemFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Invoice.php b/app/code/Magento/Sales/Model/Order/Invoice.php
index e58cab354f8..c0fd952426a 100644
--- a/app/code/Magento/Sales/Model/Order/Invoice.php
+++ b/app/code/Magento/Sales/Model/Order/Invoice.php
@@ -128,7 +128,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
      * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory
      * @param Invoice\CommentFactory $invoiceCommentFactory
      * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -144,7 +144,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
         \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory,
         \Magento\Sales\Model\Order\Invoice\CommentFactory $invoiceCommentFactory,
         \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/Order/Invoice/Comment.php
index 838af6acdb6..cfe297d0ea6 100644
--- a/app/code/Magento/Sales/Model/Order/Invoice/Comment.php
+++ b/app/code/Magento/Sales/Model/Order/Invoice/Comment.php
@@ -33,7 +33,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +44,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Item.php b/app/code/Magento/Sales/Model/Order/Invoice/Item.php
index 2eba2216571..d6889b1334a 100644
--- a/app/code/Magento/Sales/Model/Order/Invoice/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Invoice/Item.php
@@ -60,7 +60,7 @@ class Item extends AbstractModel implements InvoiceItemInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -70,7 +70,7 @@ class Item extends AbstractModel implements InvoiceItemInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\ItemFactory $orderItemFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Item.php b/app/code/Magento/Sales/Model/Order/Item.php
index 7885cc2dbd0..e1675782ea4 100644
--- a/app/code/Magento/Sales/Model/Order/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Item.php
@@ -105,7 +105,7 @@ class Item extends AbstractModel implements OrderItemInterface
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -118,7 +118,7 @@ class Item extends AbstractModel implements OrderItemInterface
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php
index d3dc65c432e..690bde68d5c 100644
--- a/app/code/Magento/Sales/Model/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/Order/Payment.php
@@ -117,7 +117,7 @@ class Payment extends Info implements OrderPaymentInterface
      * @param Transaction\BuilderInterface $transactionBuilder
      * @param Payment\Processor $paymentProcessor
      * @param OrderRepositoryInterface $orderRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -136,7 +136,7 @@ class Payment extends Info implements OrderPaymentInterface
         \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
         \Magento\Sales\Model\Order\Payment\Processor $paymentProcessor,
         OrderRepositoryInterface $orderRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Info.php b/app/code/Magento/Sales/Model/Order/Payment/Info.php
index 3a0d865b0ef..0abf5b513b8 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Info.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Info.php
@@ -42,7 +42,7 @@ class Info extends AbstractModel implements InfoInterface
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -53,7 +53,7 @@ class Info extends AbstractModel implements InfoInterface
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php
index a21db54bbae..91269d66fbd 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php
@@ -155,7 +155,7 @@ class Transaction extends AbstractModel implements TransactionInterface
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param TransactionFactory $transactionFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -170,7 +170,7 @@ class Transaction extends AbstractModel implements TransactionInterface
         \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         TransactionFactory $transactionFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php
index 8a43ced41e0..94160249deb 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php
@@ -71,7 +71,7 @@ abstract class AbstractItems extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Tax\Helper\Data $taxData
      * @param \Magento\Framework\Filesystem $filesystem ,
      * @param \Magento\Framework\Filter\FilterManager $filterManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -81,7 +81,7 @@ abstract class AbstractItems extends \Magento\Framework\Model\AbstractModel
         \Magento\Tax\Helper\Data $taxData,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php
index 3c585c69495..de420f1312b 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php
@@ -24,7 +24,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php
index fe425caf0f7..5f8b56f9912 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php
@@ -24,7 +24,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php
index f08402006d5..0850ca5944a 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php
@@ -24,7 +24,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Shipment.php b/app/code/Magento/Sales/Model/Order/Shipment.php
index 5b50f6dc374..f99977fdcbf 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment.php
@@ -103,7 +103,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
      * @param Shipment\CommentFactory $commentFactory
      * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory
      * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -118,7 +118,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
         \Magento\Sales\Model\Order\Shipment\CommentFactory $commentFactory,
         \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory,
         \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/Order/Shipment/Comment.php
index f3cffbec4cf..f2506ade73b 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment/Comment.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment/Comment.php
@@ -33,7 +33,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +44,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Item.php b/app/code/Magento/Sales/Model/Order/Shipment/Item.php
index dcd29fd9577..8da7b10f87b 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment/Item.php
@@ -50,7 +50,7 @@ class Item extends AbstractModel implements ShipmentItemInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -60,7 +60,7 @@ class Item extends AbstractModel implements ShipmentItemInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\ItemFactory $orderItemFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/Order/Shipment/Track.php
index 9e31bdd092a..52b48663a79 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment/Track.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment/Track.php
@@ -55,7 +55,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -67,7 +67,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Status.php b/app/code/Magento/Sales/Model/Order/Status.php
index ea71fdf575c..115ed4183c9 100644
--- a/app/code/Magento/Sales/Model/Order/Status.php
+++ b/app/code/Magento/Sales/Model/Order/Status.php
@@ -26,7 +26,7 @@ class Status extends \Magento\Sales\Model\AbstractModel
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Status extends \Magento\Sales\Model\AbstractModel
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Status/History.php b/app/code/Magento/Sales/Model/Order/Status/History.php
index 2505ad1a7eb..b488580a299 100644
--- a/app/code/Magento/Sales/Model/Order/Status/History.php
+++ b/app/code/Magento/Sales/Model/Order/Status/History.php
@@ -48,7 +48,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -59,7 +59,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php b/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php
index 0941d2d8da1..71cb4575a94 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel;
 
 use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Adapter\AdapterInterface;
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 /**
  * Class AbstractGrid
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php
index 841b0646b49..88ea6d9964c 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php
@@ -9,7 +9,7 @@ namespace Magento\Sales\Model\ResourceModel\Collection;
  * Flat sales abstract collection
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection
+abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * @var \Magento\Framework\DB\Select
diff --git a/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php
index c95c5c79d15..ef4b103821d 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php
@@ -5,9 +5,9 @@
  */
 namespace Magento\Sales\Model\ResourceModel;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\SalesSequence\Model\Manager;
 use Magento\Sales\Model\EntityInterface;
 
@@ -55,7 +55,7 @@ abstract class EntityAbstract extends AbstractDb
     protected $sequenceManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Snapshot $entitySnapshot
      * @param RelationComposite $entityRelationComposite
      * @param Attribute $attribute
@@ -63,7 +63,7 @@ abstract class EntityAbstract extends AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Grid.php b/app/code/Magento/Sales/Model/ResourceModel/Grid.php
index 2c32c0b618a..b30166aeb3a 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Grid.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Grid.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel;
 
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Sales\Model\ResourceModel\AbstractGrid;
-use Magento\Framework\Model\ModelResource\Db\Context;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 
 /**
  * Class Grid
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php
index 64faa55649a..077c6e35b02 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Grid;
 
 use Magento\Framework\Api\Search\SearchResultInterface;
 use Magento\Framework\Search\AggregationInterface;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Class Collection
@@ -27,12 +27,12 @@ class Collection extends AbstractCollection implements SearchResultInterface
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param null|\Zend_Db_Adapter_Abstract $mainTable
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $eventPrefix
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $eventPrefix
      * @param string $eventObject
      * @param string $resourceModel
      * @param string $model
      * @param string|null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -47,7 +47,7 @@ class Collection extends AbstractCollection implements SearchResultInterface
         $resourceModel,
         $model = 'Magento\Sales\Model\ResourceModel\Grid\Document',
         $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eventPrefix = $eventPrefix;
         $this->_eventObject = $eventObject;
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Metadata.php b/app/code/Magento/Sales/Model/ResourceModel/Metadata.php
index d011d093cc3..ec35e262e69 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Metadata.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Metadata.php
@@ -41,7 +41,7 @@ class Metadata
     }
 
     /**
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getMapper()
     {
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Order.php
index bd89884c6df..d6e5a032302 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order.php
@@ -11,8 +11,8 @@ use Magento\SalesSequence\Model\Manager;
 use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 use Magento\Sales\Model\ResourceModel\Order\Handler\State as StateHandler;
 use Magento\Sales\Model\Spi\OrderResourceInterface;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 
 /**
  * Flat sales order resource
@@ -52,7 +52,7 @@ class Order extends SalesResource implements OrderResourceInterface
     }
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Attribute $attribute
      * @param Manager $sequenceManager
      * @param Snapshot $entitySnapshot
@@ -61,7 +61,7 @@ class Order extends SalesResource implements OrderResourceInterface
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         Attribute $attribute,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
index 71e5b50e5b9..6df065f7ee3 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Order;
 
 use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 use Magento\Sales\Model\Spi\OrderAddressResourceInterface;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 
 /**
  * Flat sales order address resource
@@ -32,19 +32,19 @@ class Address extends SalesResource implements OrderAddressResourceInterface
     protected $gridPool;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Address\Validator $validator
      * @param \Magento\Sales\Model\ResourceModel\GridPool $gridPool
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Address\Validator $validator,
@@ -127,7 +127,7 @@ class Address extends SalesResource implements OrderAddressResourceInterface
      * Update related grid table after object save
      *
      * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $object
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php
index 09b603ab454..f41f0821d22 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php
@@ -44,20 +44,20 @@ class Collection extends AbstractCollection implements OrderSearchResultInterfac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Helper $coreResourceHelper
      * @param string|null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Helper $coreResourceHelper,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php
index e9a1c1fa232..1efd99d666b 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php
@@ -9,7 +9,7 @@ use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\SalesSequence\Model\Manager;
 use Magento\Sales\Model\ResourceModel\Attribute;
 use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\CreditmemoResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php
index 63541553797..0d8e9e04e79 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php
@@ -6,7 +6,7 @@
 namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo;
 
 use Magento\Sales\Model\ResourceModel\EntityAbstract;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\CreditmemoCommentResourceInterface;
 
 /**
@@ -31,18 +31,18 @@ class Comment extends EntityAbstract implements CreditmemoCommentResourceInterfa
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php
index 00f4110dc83..e4233c776e1 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 /**
  * Class Relation
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php
index 6698e9d14bb..ce9914878cd 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 /**
  * Class Relation
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php
index 15c68e99ac2..a5699820129 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php
@@ -9,7 +9,7 @@ use Magento\Framework\App\ResourceConnection;
 use Magento\SalesSequence\Model\Manager;
 use Magento\Sales\Model\ResourceModel\Attribute;
 use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\InvoiceResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php
index 91c337f20d9..cea28e92a6e 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php
@@ -6,7 +6,7 @@
 namespace Magento\Sales\Model\ResourceModel\Order\Invoice;
 
 use Magento\Sales\Model\ResourceModel\EntityAbstract;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\InvoiceCommentResourceInterface;
 
 /**
@@ -31,18 +31,18 @@ class Comment extends EntityAbstract implements InvoiceCommentResourceInterface
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php
index 6e9ff0ea956..f46527a29a0 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Sales\Model\ResourceModel\Order\Invoice;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 use Magento\Sales\Model\ResourceModel\Order\Invoice\Item as InvoiceItemResource;
 use Magento\Sales\Model\ResourceModel\Order\Invoice\Comment as InvoiceCommentResource;
 
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php
index 6656dfb1c9e..7f761754467 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php
@@ -32,18 +32,18 @@ class Collection extends AbstractCollection implements OrderPaymentSearchResultI
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php
index 3b16bf11eae..da599b38eb2 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php
@@ -7,7 +7,7 @@
 namespace Magento\Sales\Model\ResourceModel\Order;
 
 use Magento\Sales\Model\ResourceModel\Order\Handler\Address as AddressHandler;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 use Magento\Sales\Model\ResourceModel\Order\Payment as OrderPaymentResource;
 use Magento\Sales\Model\ResourceModel\Order\Status\History as OrderStatusHistoryResource;
 use Magento\Sales\Api\OrderItemRepositoryInterface;
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php
index 96daa356e94..174d0c1e622 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php
@@ -6,7 +6,7 @@
 namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
 use Magento\Sales\Model\ResourceModel\EntityAbstract;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\ShipmentCommentResourceInterface;
 
 /**
@@ -31,18 +31,18 @@ class Comment extends EntityAbstract implements ShipmentCommentResourceInterface
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php
index 8ff9a995e74..943255b55d2 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 use Magento\Sales\Model\ResourceModel\Order\Shipment\Item as ShipmentItemResource;
 use Magento\Sales\Model\ResourceModel\Order\Shipment\Comment as ShipmentCommentResource;
 use Magento\Sales\Model\ResourceModel\Order\Shipment\Track as ShipmentTrackResource;
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php
index e5fcc7a27e3..ad1ad038a02 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php
@@ -6,7 +6,7 @@
 namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
 use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\ShipmentTrackResourceInterface;
 
 /**
@@ -31,18 +31,18 @@ class Track extends SalesResource implements ShipmentTrackResourceInterface
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Shipment\Track\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Shipment\Track\Validator $validator,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php
index 76146897477..e21f8de9ff9 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php
@@ -10,14 +10,14 @@ use Psr\Log\LoggerInterface as LogWriter;
 use Magento\Framework\Exception\LocalizedException;
 use Magento\SalesSequence\Model\Manager;
 use \Magento\Sales\Model\ResourceModel\EntityAbstract;
-use \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 
 /**
  * Order status resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Status extends \Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb
+class Status extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb
 {
     /**
      * Status labels table
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php
index d1611ad703c..1ce43da2b99 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Status;
 
 use Magento\Sales\Model\Order\Status\History\Validator;
 use Magento\Sales\Model\ResourceModel\EntityAbstract;
-use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\OrderStatusHistoryResourceInterface;
 
 /**
@@ -23,18 +23,18 @@ class History extends EntityAbstract implements OrderStatusHistoryResourceInterf
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         Validator $validator,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php
index b47d75680dc..16b3e4bb19e 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Tax;
 /**
  * Sales order tax resource model
  */
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php
index fbe2f588bac..231e0774687 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php
@@ -37,7 +37,7 @@ class Bestsellers extends AbstractReport
     ];
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -50,7 +50,7 @@ class Bestsellers extends AbstractReport
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php
index 2032c277158..0a4fed17cfc 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php
@@ -240,7 +240,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\Ab
      * Redeclare parent method for applying filters after parent method
      * but before adding unions and calculating totals
      *
-     * @return $this|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php
index 63c454ae1d8..743b1e19785 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php
@@ -21,7 +21,7 @@ class Order extends AbstractReport
     protected $_updateDatFactory;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -32,7 +32,7 @@ class Order extends AbstractReport
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php
index bdc0a0826fe..37555ab7f2d 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php
@@ -14,7 +14,7 @@ use Psr\Log\LoggerInterface as Logger;
 /**
  * Sales Collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Totals data
diff --git a/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php
index a92a0543067..a9351c5f480 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php
@@ -23,20 +23,20 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Payment\Transa
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\Registry $registryManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\Registry $registryManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->registryManager = $registryManager;
         parent::__construct(
diff --git a/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php b/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php
index 1dd843c8726..bbe39f3fb55 100644
--- a/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php
@@ -290,7 +290,7 @@ class AdminTest extends \PHPUnit_Framework_TestCase
             'quote' => $quoteMock,
             'other' => 'other',
         ];
-        $collectionClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection';
+        $collectionClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
         $collectionMock = $this->getMockBuilder($collectionClassName)
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
index decd3c1048f..f943f663222 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
@@ -86,7 +86,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
                 ->willReturn($entityId);
 
             $mapper = $this->getMockForAbstractClass(
-                'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+                'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
                 [],
                 '',
                 false,
@@ -213,7 +213,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -249,7 +249,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -282,7 +282,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -318,7 +318,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
index 47572046646..e2deb200dbc 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
@@ -109,7 +109,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getItemId')
             ->willReturn(null);
 
-        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $orderItemResourceMock->expects($this->once())
@@ -150,7 +150,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getItemId')
             ->willReturn($orderItemId);
 
-        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $orderItemResourceMock->expects($this->once())
@@ -255,7 +255,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getBuyRequest')
             ->willReturn($requestMock);
 
-        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $orderItemResourceMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
index ad802940bc4..36a8360ee09 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
@@ -86,7 +86,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
                 ->willReturn($entityId);
 
             $mapper = $this->getMockForAbstractClass(
-                'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+                'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
                 [],
                 '',
                 false,
@@ -213,7 +213,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -249,7 +249,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -282,7 +282,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -318,7 +318,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
index 3153a6ff4f0..ffeb136782b 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
@@ -46,7 +46,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     protected $gridPoolMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -95,7 +95,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php
index 80ca95e5706..1a0c25004dd 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php
@@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -94,14 +94,14 @@ class CommentTest extends \PHPUnit_Framework_TestCase
         $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php
index ee224febc53..f6f3276422d 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php
@@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -93,14 +93,14 @@ class CommentTest extends \PHPUnit_Framework_TestCase
         $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php
index b3e6914f376..b45655d8b85 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php
@@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -93,14 +93,14 @@ class CommentTest extends \PHPUnit_Framework_TestCase
         $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php
index 84f97a45036..87b96f2d2e4 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php
@@ -35,7 +35,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -73,7 +73,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -93,14 +93,14 @@ class TrackTest extends \PHPUnit_Framework_TestCase
         $this->trackModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php
index 4b78efb0272..ef6984b3abf 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php
@@ -34,7 +34,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $historyItemMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -48,7 +48,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     protected $entityFactoryMock;
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -74,7 +74,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ['getConnection', 'getMainTable', 'getTable', '__wakeup']
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php
index 8a535a7de3f..27a1c50495f 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php
@@ -37,7 +37,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
     protected $validatorMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -65,7 +65,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -84,14 +84,14 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
             ->method('lastInsertId');
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php
index 62407f45606..b84194d4fc1 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Test\Unit\Model\ResourceModel;
 
-use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 use \Magento\Sales\Model\ResourceModel\Order;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
@@ -59,7 +59,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      */
     protected $connectionMock;
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -69,7 +69,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
     protected $relationCompositeMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $objectRelationProcessorMock;
     /**
@@ -126,27 +126,27 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         );
         $this->salesSequenceMock = $this->getMock('Magento\SalesSequence\Model\Sequence', [], [], '', false);
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
             false
         );
         $this->relationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
             false
         );
         $this->objectRelationProcessorMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
         $contextMock->expects($this->once())
             ->method('getObjectRelationProcessor')
diff --git a/app/code/Magento/Sales/etc/di.xml b/app/code/Magento/Sales/etc/di.xml
index 35024a13eaa..e05642b5913 100644
--- a/app/code/Magento/Sales/etc/di.xml
+++ b/app/code/Magento/Sales/etc/di.xml
@@ -223,7 +223,7 @@
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <virtualType name="OrderRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="OrderRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Relation</item>
@@ -235,7 +235,7 @@
             <argument name="entityRelationComposite" xsi:type="object">OrderRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="InvoiceRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="InvoiceRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Relation</item>
@@ -247,7 +247,7 @@
             <argument name="entityRelationComposite" xsi:type="object">InvoiceRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="ShipmentRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="ShipmentRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Shipment\Relation</item>
@@ -259,7 +259,7 @@
             <argument name="entityRelationComposite" xsi:type="object">ShipmentRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="CreditmemoRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite">
+    <virtualType name="CreditmemoRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation</item>
diff --git a/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php b/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php
index 23d3ee5cd08..00cf6dcb733 100644
--- a/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php
+++ b/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php
@@ -65,7 +65,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements
      * @param \Magento\SalesRule\Model\CouponFactory $couponFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -76,7 +76,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements
         \Magento\SalesRule\Model\CouponFactory $couponFactory,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php
index e4290f3d287..c415cb5dec5 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php
@@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Coupon extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements
+class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
     \Magento\SalesRule\Model\Spi\CouponResourceInterface
 {
     /**
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php
index b728ddaf6f5..19a56cc3e57 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php
@@ -6,7 +6,7 @@
 namespace Magento\SalesRule\Model\ResourceModel\Coupon;
 
 use Magento\Backend\Block\Widget\Grid\Column;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\SalesRule\Model\Rule;
 
 /**
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php
index 5d401a2199d..1770de0f507 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php
@@ -10,7 +10,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Coupon;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Usage extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Usage extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php
index 7a204f6ed27..0cb09c67673 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php
@@ -23,7 +23,7 @@ class Rule extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
     protected $_updatedatFactory;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -34,7 +34,7 @@ class Rule extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php
index 3121cd6c802..c4fc5d41ece 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php
@@ -53,13 +53,13 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
     protected $_resourceCoupon;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\SalesRule\Model\ResourceModel\Coupon $resourceCoupon
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\SalesRule\Model\ResourceModel\Coupon $resourceCoupon,
         $connectionName = null
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php
index 6c97e9b401b..1fa75ae94d6 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php
@@ -45,7 +45,7 @@ class Collection extends \Magento\Rule\Model\ResourceModel\Rule\Collection\Abstr
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -54,7 +54,7 @@ class Collection extends \Magento\Rule\Model\ResourceModel\Rule\Collection\Abstr
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_date = $date;
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php
index 978c3dd9a1c..26e84f9b821 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php
@@ -10,7 +10,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Rule;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Customer extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Customer extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php
index 9fda7452168..9d8822b51b2 100644
--- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Rule\Customer;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Collection constructor
diff --git a/app/code/Magento/SalesRule/Model/Rule.php b/app/code/Magento/SalesRule/Model/Rule.php
index 89efbbd98fe..200a836592c 100644
--- a/app/code/Magento/SalesRule/Model/Rule.php
+++ b/app/code/Magento/SalesRule/Model/Rule.php
@@ -183,7 +183,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      * @param \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF
      * @param \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -199,7 +199,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF,
         \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/SalesRule/Model/Validator.php b/app/code/Magento/SalesRule/Model/Validator.php
index 7f3300c06f7..f69e85931f4 100644
--- a/app/code/Magento/SalesRule/Model/Validator.php
+++ b/app/code/Magento/SalesRule/Model/Validator.php
@@ -102,7 +102,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
      * @param Validator\Pool $validators
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -117,7 +117,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
         \Magento\SalesRule\Model\Validator\Pool $validators,
         \Magento\Framework\Message\ManagerInterface $messageManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php
index a882185d009..e32936a18e0 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php
@@ -35,7 +35,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $context = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context')
+        $context = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $connectionName = 'test';
diff --git a/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php b/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php
index f7a018afe92..68d2e73be0f 100644
--- a/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php
+++ b/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php
@@ -7,7 +7,7 @@ namespace Magento\SalesSequence\Model\ResourceModel;
 
 use Magento\Framework\Exception\LocalizedException as Exception;
 use Magento\Framework\Exception\NoSuchEntityException;
-use Magento\Framework\Model\ModelResource\Db\Context as DatabaseContext;
+use Magento\Framework\Model\ResourceModel\Db\Context as DatabaseContext;
 use Magento\SalesSequence\Model\ResourceModel\Profile as ResourceProfile;
 use Magento\SalesSequence\Model\MetaFactory;
 use Magento\SalesSequence\Model\Profile as ModelProfile;
@@ -15,7 +15,7 @@ use Magento\SalesSequence\Model\Profile as ModelProfile;
 /**
  * Class Meta represents metadata for sequence as sequence table and store id
  */
-class Meta extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Meta extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php b/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php
index b23220e2f61..cfb57ae81f3 100644
--- a/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php
+++ b/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php
@@ -6,13 +6,13 @@
 namespace Magento\SalesSequence\Model\ResourceModel;
 
 use Magento\SalesSequence\Model\Meta as ModelMeta;
-use Magento\Framework\Model\ModelResource\Db\Context as DatabaseContext;
+use Magento\Framework\Model\ResourceModel\Db\Context as DatabaseContext;
 use Magento\SalesSequence\Model\ProfileFactory;
 
 /**
  * Class Profile represents profile data for sequence as prefix, suffix, start value etc.
  */
-class Profile extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Profile extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php
index 0874f597419..250eab5f505 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php
@@ -19,7 +19,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase
     private $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Context | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context | \PHPUnit_Framework_MockObject_MockObject
      */
     private $dbContext;
 
@@ -73,7 +73,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase
             ['query']
         );
         $this->dbContext = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\Context',
+            'Magento\Framework\Model\ResourceModel\Db\Context',
             [],
             [],
             '',
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php
index 40612f4f27a..8945f7adb86 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php
@@ -18,7 +18,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase
     private $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Context | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context | \PHPUnit_Framework_MockObject_MockObject
      */
     private $dbContext;
 
@@ -67,7 +67,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase
             ['query']
         );
         $this->dbContext = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\Context',
+            'Magento\Framework\Model\ResourceModel\Db\Context',
             [],
             [],
             '',
diff --git a/app/code/Magento/Search/Model/Query.php b/app/code/Magento/Search/Model/Query.php
index ea34734ca80..894d8d69f36 100644
--- a/app/code/Magento/Search/Model/Query.php
+++ b/app/code/Magento/Search/Model/Query.php
@@ -13,7 +13,7 @@ use Magento\Search\Model\SearchCollectionFactory as CollectionFactory;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Data\Collection\AbstractDb as DbCollection;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\ModelResource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\Registry;
 use Magento\Store\Model\StoreManagerInterface;
 
@@ -102,7 +102,7 @@ class Query extends AbstractModel implements QueryInterface
      * @param CollectionFactory $searchCollectionFactory
      * @param StoreManagerInterface $storeManager
      * @param ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param DbCollection $resourceCollection
      * @param array $data
      */
diff --git a/app/code/Magento/Search/Model/ResourceModel/Query.php b/app/code/Magento/Search/Model/ResourceModel/Query.php
index 63cbb0723ed..f539cc3bd52 100644
--- a/app/code/Magento/Search/Model/ResourceModel/Query.php
+++ b/app/code/Magento/Search/Model/ResourceModel/Query.php
@@ -10,7 +10,7 @@ namespace Magento\Search\Model\ResourceModel;
 
 use Magento\Framework\DB\Select;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 use Magento\Search\Model\Query as QueryModel;
 
 /**
@@ -32,13 +32,13 @@ class Query extends AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
@@ -82,7 +82,7 @@ class Query extends AbstractDb
      * @param AbstractModel $object
      * @param int|string $value
      * @param null|string $field
-     * @return $this|\Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @SuppressWarnings("unused")
      */
     public function load(AbstractModel $object, $value, $field = null)
diff --git a/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php b/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php
index f5db36ccfbe..9df7dc3ffae 100644
--- a/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php
+++ b/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php
@@ -11,7 +11,7 @@ use Magento\Store\Model\Store;
  * Search query collection
  *
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store for filter
@@ -42,7 +42,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Helper $resourceHelper
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -52,7 +52,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Helper $resourceHelper,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_resourceHelper = $resourceHelper;
diff --git a/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php b/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php
index 6daab0096b8..0d7688bf5a5 100644
--- a/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php
+++ b/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php
@@ -34,7 +34,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
             ->method('getConnection')
             ->willReturn($this->adapter);
 
-        $context = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context')
+        $context = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $context->expects($this->any())
diff --git a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php
index ea806bd142b..5a9b520ce46 100644
--- a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php
+++ b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php
@@ -10,7 +10,7 @@ namespace Magento\SendFriend\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class SendFriend extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class SendFriend extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and table
diff --git a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php
index dac57dc3ee4..fa3a1c614f5 100644
--- a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php
+++ b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\SendFriend\Model\ResourceModel\SendFriend;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource collection
diff --git a/app/code/Magento/SendFriend/Model/SendFriend.php b/app/code/Magento/SendFriend/Model/SendFriend.php
index 831512596ea..7a89d671ce8 100644
--- a/app/code/Magento/SendFriend/Model/SendFriend.php
+++ b/app/code/Magento/SendFriend/Model/SendFriend.php
@@ -119,7 +119,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -135,7 +135,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
         \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
         \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php
index 29e19741b06..1a1790149b7 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php
@@ -9,7 +9,7 @@ namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment;
 use Magento\Backend\App\Action;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Backend\App\Action\Context;
 use Magento\Shipping\Model\Shipping\LabelGenerator;
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php
index 5e4e8b8b716..7fba9c99360 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php
@@ -9,7 +9,7 @@ namespace Magento\Shipping\Controller\Adminhtml\Shipment;
 use Magento\Backend\App\Action;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Backend\App\Action\Context;
 use Magento\Shipping\Model\Shipping\LabelGenerator;
diff --git a/app/code/Magento/Shipping/Model/Order/Track.php b/app/code/Magento/Shipping/Model/Order/Track.php
index 9aab16e7289..c707a3d6dc9 100644
--- a/app/code/Magento/Shipping/Model/Order/Track.php
+++ b/app/code/Magento/Shipping/Model/Order/Track.php
@@ -37,7 +37,7 @@ class Track extends \Magento\Sales\Model\Order\Shipment\Track
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository
      * @param \Magento\Shipping\Model\CarrierFactory $carrierFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      *
@@ -51,7 +51,7 @@ class Track extends \Magento\Sales\Model\Order\Shipment\Track
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository,
         \Magento\Shipping\Model\CarrierFactory $carrierFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php
index 3642359663d..75e853c13c6 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php
@@ -12,7 +12,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Category extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Category extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Collection Zend Db select
@@ -39,13 +39,13 @@ class Category extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_categoryResource;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\ResourceModel\Category $categoryResource,
         $connectionName = null
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
index 9a02e012a01..5a93ef13583 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
@@ -13,7 +13,7 @@ use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Product extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     const NOT_SELECTED_IMAGE = 'no_selection';
 
@@ -83,7 +83,7 @@ class Product extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_mediaConfig;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sitemap\Helper\Data $sitemapData
      * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -96,7 +96,7 @@ class Product extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Sitemap\Helper\Data $sitemapData,
         \Magento\Catalog\Model\ResourceModel\Product $productResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
index 34879578665..07640bb6a7f 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
@@ -10,7 +10,7 @@ namespace Magento\Sitemap\Model\ResourceModel\Cms;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Page extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Init resource model (catalog/category)
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php
index 63daf336eed..b3ff7ce4838 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php
@@ -10,7 +10,7 @@ namespace Magento\Sitemap\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Sitemap extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Sitemap extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Init resource model
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php
index d6a575daf84..b470759b890 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Sitemap\Model\ResourceModel\Sitemap;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init collection
diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php
index 9ec5c4b988b..722c823d3f0 100644
--- a/app/code/Magento/Sitemap/Model/Sitemap.php
+++ b/app/code/Magento/Sitemap/Model/Sitemap.php
@@ -159,7 +159,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\RequestInterface $request
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -177,7 +177,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\RequestInterface $request,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Store/Model/Group.php b/app/code/Magento/Store/Model/Group.php
index be5d7603d9d..7ef0dd37d50 100644
--- a/app/code/Magento/Store/Model/Group.php
+++ b/app/code/Magento/Store/Model/Group.php
@@ -103,7 +103,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param \Magento\Config\Model\ResourceModel\Config\Data $configDataResource
      * @param \Magento\Store\Model\Store $store
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -116,7 +116,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
         \Magento\Config\Model\ResourceModel\Config\Data $configDataResource,
         \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeListFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php b/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php
index 21ea5ee9090..3e37e1ad8d6 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\Store\Model\ResourceModel\Config\Collection;
 
-class Scoped extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Scoped extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Scope to filter by
diff --git a/app/code/Magento/Store/Model/ResourceModel/Group.php b/app/code/Magento/Store/Model/ResourceModel/Group.php
index b46679e118e..c3365055aa4 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Group.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Group.php
@@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel;
 /**
  * Store group resource model
  */
-class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php
index b452660b04b..805b90c291a 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel\Group;
 /**
  * Store group collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model
diff --git a/app/code/Magento/Store/Model/ResourceModel/Store.php b/app/code/Magento/Store/Model/ResourceModel/Store.php
index 58d74f0173e..fec1340afe6 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Store.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Store.php
@@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel;
 /**
  * Store Resource Model
  */
-class Store extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\App\Cache\Type\Config
@@ -16,11 +16,11 @@ class Store extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $configCache;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\Cache\Type\Config $configCacheType
     ) {
         $this->configCache = $configCacheType;
diff --git a/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php
index 30852811667..ebef78956a4 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel\Store;
 /**
  * Stores collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Name prefix of events that are dispatched by model
diff --git a/app/code/Magento/Store/Model/ResourceModel/Website.php b/app/code/Magento/Store/Model/ResourceModel/Website.php
index 884a50958e6..43b2612d216 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Website.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Website.php
@@ -11,7 +11,7 @@ namespace Magento\Store\Model\ResourceModel;
 /**
  * Website Resource Model
  */
-class Website extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Website extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php
index 6eb5383fb8b..419350a9031 100644
--- a/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel\Website;
 /**
  * Websites collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Map field to alias
diff --git a/app/code/Magento/Store/Model/Website.php b/app/code/Magento/Store/Model/Website.php
index b04ab411d56..375064ca57f 100644
--- a/app/code/Magento/Store/Model/Website.php
+++ b/app/code/Magento/Store/Model/Website.php
@@ -171,7 +171,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -188,7 +188,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php b/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php
index b361dfa6860..fa230bf8eae 100644
--- a/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php
+++ b/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php
@@ -10,7 +10,7 @@ namespace Magento\Swatches\Model\ResourceModel;
  * @codeCoverageIgnore
  * Swatch Resource Model
  */
-class Swatch extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Swatch extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php b/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php
index 28b800ecc9c..4099c234753 100644
--- a/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php
+++ b/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php
@@ -9,7 +9,7 @@ namespace Magento\Swatches\Model\ResourceModel\Swatch;
  * @codeCoverageIgnore
  * Swatch Collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Standard collection initialization
diff --git a/app/code/Magento/Tax/Model/Calculation/Rate.php b/app/code/Magento/Tax/Model/Calculation/Rate.php
index 31f7dbce5e0..0eca26d8eff 100644
--- a/app/code/Magento/Tax/Model/Calculation/Rate.php
+++ b/app/code/Magento/Tax/Model/Calculation/Rate.php
@@ -72,7 +72,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
      * @param Rate\TitleFactory $taxTitleFactory
      * @param Region $directoryRegion
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -85,7 +85,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T
         \Magento\Directory\Model\RegionFactory $regionFactory,
         \Magento\Tax\Model\Calculation\Rate\TitleFactory $taxTitleFactory,
         Region $directoryRegion,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Calculation/Rule.php b/app/code/Magento/Tax/Model/Calculation/Rule.php
index 25acde57bec..665a3d8f378 100644
--- a/app/code/Magento/Tax/Model/Calculation/Rule.php
+++ b/app/code/Magento/Tax/Model/Calculation/Rule.php
@@ -70,7 +70,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T
      * @param \Magento\Tax\Model\ClassModel $taxClass
      * @param \Magento\Tax\Model\Calculation $calculation
      * @param Rule\Validator $validator
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -83,7 +83,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T
         \Magento\Tax\Model\ClassModel $taxClass,
         \Magento\Tax\Model\Calculation $calculation,
         \Magento\Tax\Model\Calculation\Rule\Validator $validator,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/ClassModel.php b/app/code/Magento/Tax/Model/ClassModel.php
index 17129676f34..30f2507b77f 100644
--- a/app/code/Magento/Tax/Model/ClassModel.php
+++ b/app/code/Magento/Tax/Model/ClassModel.php
@@ -48,7 +48,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param TaxClass\Factory $classFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -58,7 +58,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Tax\Model\TaxClass\Factory $classFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Config/Notification.php b/app/code/Magento/Tax/Model/Config/Notification.php
index 1c830caee47..1373b465984 100644
--- a/app/code/Magento/Tax/Model/Config/Notification.php
+++ b/app/code/Magento/Tax/Model/Config/Notification.php
@@ -22,7 +22,7 @@ class Notification extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Notification extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Config\Model\ResourceModel\Config $resourceConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Config/TaxClass.php b/app/code/Magento/Tax/Model/Config/TaxClass.php
index 2d2503c8c3e..95b643be212 100644
--- a/app/code/Magento/Tax/Model/Config/TaxClass.php
+++ b/app/code/Magento/Tax/Model/Config/TaxClass.php
@@ -26,7 +26,7 @@ class TaxClass extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
      * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class TaxClass extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Config\Model\ResourceModel\Config $resourceConfig,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation.php
index 54a76ba286a..a707b547680 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation.php
@@ -10,7 +10,7 @@
  */
 namespace Magento\Tax\Model\ResourceModel;
 
-class Calculation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Calculation extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store ISO 3166-1 alpha-2 USA country code
@@ -44,13 +44,13 @@ class Calculation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Tax\Helper\Data $taxData
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Tax\Helper\Data $taxData,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php
index 1cab961c698..ab2cdde74be 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php
index fbc6436fcab..862d7c7d5c1 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Tax\Model\ResourceModel\Calculation;
 
-class Rate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Rate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php
index 7c07b96e9f6..646c1dc8b59 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php
@@ -9,7 +9,7 @@
  */
 namespace Magento\Tax\Model\ResourceModel\Calculation\Rate;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Value of fetched from DB of rules per cycle
@@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php
index 2a8554ecaca..320b69aa8df 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation\Rate;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Title extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Title extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php
index 590c8f4588b..77685615aca 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation\Rate\Title;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php
index c5b9fab3c66..33cf510d088 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Rule extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Rule extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php
index c37524d8b1d..c469c26435a 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation\Rule;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php
index ab49aef6c27..5f8be548f3f 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php
@@ -22,7 +22,7 @@ class Tax extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
     protected $_updatedAtFactory;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -33,7 +33,7 @@ class Tax extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php
index 22d0b739968..82130cbb126 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Sales\Order;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php
index 32ee5a6774d..72dc76bd6e8 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Sales\Order\Tax;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php b/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php
index 663a22fa265..cfed10f0917 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php
@@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class TaxClass extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class TaxClass extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php
index b2337776283..82e6b03f634 100644
--- a/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Tax\Model\ResourceModel\TaxClass;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/TaxClass/AbstractType.php b/app/code/Magento/Tax/Model/TaxClass/AbstractType.php
index 11adba60471..351c1452be3 100644
--- a/app/code/Magento/Tax/Model/TaxClass/AbstractType.php
+++ b/app/code/Magento/Tax/Model/TaxClass/AbstractType.php
@@ -36,7 +36,7 @@ abstract class AbstractType extends \Magento\Framework\DataObject implements Typ
     /**
      * Get Collection of Tax Rules that are assigned to this tax class
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getAssignedToRules()
     {
diff --git a/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php b/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php
index bed61ea8216..61f55331d5f 100644
--- a/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php
+++ b/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php
@@ -21,7 +21,7 @@ interface TypeInterface
     /**
      * Get Collection of Tax Rules that are assigned to this tax class
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getAssignedToRules();
 
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php
index a3edcdcf9a3..e6ff4cbd6f6 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php
@@ -24,7 +24,7 @@ class RateTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             ['_construct', 'getConnection', 'getIdFieldName', 'beginTransaction',
                 'rollBack'],
             [],
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php b/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php
index 6accac40069..633c0437720 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php
@@ -37,7 +37,7 @@ class TaxClassTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($attributeMock));
 
-        $resourceMock = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $resourceMock = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['beginTransaction', '_construct', 'getIdFieldName', 'addCommitCallback', 'commit',
                           'save', '__wakeup', ])
diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php
index 0ddf456a5ee..04a9a3b2a1e 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php
@@ -9,7 +9,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 {
     public function testIsAssignedToObjects()
     {
-        $collectionClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection';
+        $collectionClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
         $collectionMock = $this->getMockBuilder($collectionClassName)
             ->setMethods(['addAttributeToFilter', 'getSize'])->disableOriginalConstructor()->getMock();
         $collectionMock->expects($this->once())->method('addAttributeToFilter')
diff --git a/app/code/Magento/Theme/Model/Design.php b/app/code/Magento/Theme/Model/Design.php
index b9547c3a92f..7a982eefe56 100644
--- a/app/code/Magento/Theme/Model/Design.php
+++ b/app/code/Magento/Theme/Model/Design.php
@@ -7,7 +7,7 @@ namespace Magento\Theme\Model;
 
 use Magento\Framework\App\DesignInterface;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\ModelResource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\DataObject\IdentityInterface;
 
 /**
diff --git a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
index 948f64ef6a7..e2fe1ac8f19 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
@@ -23,7 +23,7 @@ class Exceptions extends ArraySerialized
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Exceptions extends ArraySerialized
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index 5e85a547c37..ae2af06192c 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -23,7 +23,7 @@ class Theme extends Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Theme extends Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design.php b/app/code/Magento/Theme/Model/ResourceModel/Design.php
index 74e111ce5d3..8743ff1b7bd 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Design.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Design.php
@@ -4,7 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
 namespace Magento\Theme\Model\ResourceModel;
 
 use Magento\Framework\Stdlib\DateTime;
@@ -14,7 +13,7 @@ use Magento\Framework\Stdlib\DateTime;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Design extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Design extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var DateTime
@@ -22,12 +21,12 @@ class Design extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php
index dea2b172830..bc79a10f113 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Design;
 /**
  * Core Design resource collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -22,7 +22,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->dateTime = $dateTime;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme.php b/app/code/Magento/Theme/Model/ResourceModel/Theme.php
index c185e5f1666..e93820180a0 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Theme.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel;
 /**
  * Theme resource model
  */
-class Theme extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Theme extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php
index db070283bcf..6ca5a367cb7 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme;
 /**
  * Theme collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection implements
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements
     \Magento\Framework\View\Design\Theme\Label\ListInterface,
     \Magento\Framework\View\Design\Theme\ListInterface
 {
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php
index 35b8f6f3b57..a0aa877a368 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme\Customization;
 /**
  * Theme customization link resource model
  */
-class Update extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Update extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php
index 239d8a75fd4..0e5ebf11d2f 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme;
 /**
  * Theme files resource model
  */
-class File extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class File extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php
index ebb7df34c7c..ad78ceddba8 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme\File;
 /**
  * Theme files collection
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection implements
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements
     \Magento\Framework\View\Design\Theme\File\CollectionInterface
 {
     /**
diff --git a/app/code/Magento/Theme/Model/Theme/File.php b/app/code/Magento/Theme/Model/Theme/File.php
index cd28e80b67d..e3b5d723cf1 100644
--- a/app/code/Magento/Theme/Model/Theme/File.php
+++ b/app/code/Magento/Theme/Model/Theme/File.php
@@ -53,7 +53,7 @@ class File extends AbstractModel implements FileInterface
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\View\Design\Theme\FlyweightFactory $themeFactory
      * @param \Magento\Framework\View\Design\Theme\Customization\FileServiceFactory $fileServiceFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -62,7 +62,7 @@ class File extends AbstractModel implements FileInterface
         \Magento\Framework\Registry $registry,
         \Magento\Framework\View\Design\Theme\FlyweightFactory $themeFactory,
         \Magento\Framework\View\Design\Theme\Customization\FileServiceFactory $fileServiceFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php b/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php
index 1bd3ea40aba..ae92f434c39 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php
@@ -39,7 +39,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase
     protected $dateTime;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
diff --git a/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php b/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php
index 351334ad772..c743e7c17a5 100644
--- a/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php
+++ b/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Translation\Model\ResourceModel;
 
-class StringUtils extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class StringUtils extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Locale\ResolverInterface
@@ -23,14 +23,14 @@ class StringUtils extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $scope;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver
      * @param string $connectionName
      * @param string|null $scope
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\App\ScopeResolverInterface $scopeResolver,
         $connectionName = null,
diff --git a/app/code/Magento/Translation/Model/ResourceModel/Translate.php b/app/code/Magento/Translation/Model/ResourceModel/Translate.php
index d45d45c6e8f..6f545b96bd0 100644
--- a/app/code/Magento/Translation/Model/ResourceModel/Translate.php
+++ b/app/code/Magento/Translation/Model/ResourceModel/Translate.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Translation\Model\ResourceModel;
 
-class Translate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements
+class Translate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
     \Magento\Framework\Translate\ResourceInterface
 {
     /**
@@ -19,13 +19,13 @@ class Translate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb imp
     protected $scope;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver
      * @param string $connectionName
      * @param null|string $scope
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\ScopeResolverInterface $scopeResolver,
         $connectionName = null,
         $scope = null
diff --git a/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php b/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php
index a2984c4d038..f37eddfa303 100644
--- a/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php
+++ b/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php
@@ -6,7 +6,7 @@
 namespace Magento\Ui\DataProvider;
 
 use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 abstract class AbstractDataProvider implements DataProviderInterface
 {
diff --git a/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php b/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php
index aa5a8684b80..7cc214fdf11 100644
--- a/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php
+++ b/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Ui\Model\ResourceModel;
 
-use Magento\Framework\Model\ModelResource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 /**
  * Bookmark resource
@@ -18,12 +18,12 @@ class Bookmark extends AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php b/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php
index 995281dd587..354ab273b59 100644
--- a/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php
+++ b/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Ui\Model\ResourceModel\Bookmark;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Bookmark Collection
diff --git a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php
index 9ec5373b310..1ad44640845 100644
--- a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php
+++ b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\UrlRewrite\Model\ResourceModel;
 
-class UrlRewrite extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class UrlRewrite extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php
index a1306aec4f1..3f3c85e71a4 100644
--- a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php
+++ b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\UrlRewrite\Model\ResourceModel;
 
-class UrlRewriteCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class UrlRewriteCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store Manager Model
@@ -23,7 +23,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\ModelResource\Db\Col
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -32,7 +32,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\ModelResource\Db\Col
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->storeManager = $storeManager;
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php
index 82625593a82..7d708717917 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php
@@ -15,7 +15,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
     protected $storeManager;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -51,7 +51,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php b/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php
index 72289ed3efb..908b36c4f9d 100644
--- a/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php
+++ b/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\User\Model\ResourceModel\Role\User;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/User/Model/ResourceModel/User.php b/app/code/Magento/User/Model/ResourceModel/User.php
index 9aff361664a..cf6e8585051 100644
--- a/app/code/Magento/User/Model/ResourceModel/User.php
+++ b/app/code/Magento/User/Model/ResourceModel/User.php
@@ -15,7 +15,7 @@ use Magento\User\Model\User as ModelUser;
  * ACL user resource
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class User extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class User extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Acl\CacheInterface
@@ -44,14 +44,14 @@ class User extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Acl\CacheInterface $aclCache
      * @param \Magento\Authorization\Model\RoleFactory $roleFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Acl\CacheInterface $aclCache,
         \Magento\Authorization\Model\RoleFactory $roleFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/User/Model/ResourceModel/User/Collection.php b/app/code/Magento/User/Model/ResourceModel/User/Collection.php
index cff70efd8b3..e79fec07cd0 100644
--- a/app/code/Magento/User/Model/ResourceModel/User/Collection.php
+++ b/app/code/Magento/User/Model/ResourceModel/User/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\User\Model\ResourceModel\User;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model
diff --git a/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php b/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php
index 73b0002b360..0c132101056 100644
--- a/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php
+++ b/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php
@@ -15,7 +15,7 @@ class Collection extends \Magento\User\Model\ResourceModel\User\Collection
     /**
      * Collection Init Select
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @return $this
      */
     protected function _initSelect()
diff --git a/app/code/Magento/User/Model/User.php b/app/code/Magento/User/Model/User.php
index c8682cb173d..1333f17ea5b 100644
--- a/app/code/Magento/User/Model/User.php
+++ b/app/code/Magento/User/Model/User.php
@@ -124,7 +124,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param UserValidationRules $validationRules
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
@@ -142,7 +142,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         UserValidationRules $validationRules,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php b/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php
index 210c3188d7c..c1e054e7443 100644
--- a/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php
+++ b/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php
@@ -20,7 +20,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Acl\CacheInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $aclCacheMock;
 
-    /** @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */
     protected $contextMock;
 
     /** @var \Magento\Authorization\Model\RoleFactory|\PHPUnit_Framework_MockObject_MockObject */
diff --git a/app/code/Magento/Variable/Model/ResourceModel/Variable.php b/app/code/Magento/Variable/Model/ResourceModel/Variable.php
index 5c51cae375b..3d84fa08495 100644
--- a/app/code/Magento/Variable/Model/ResourceModel/Variable.php
+++ b/app/code/Magento/Variable/Model/ResourceModel/Variable.php
@@ -13,7 +13,7 @@ namespace Magento\Variable\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Variable extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Variable extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
diff --git a/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php b/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php
index cc80b09f2ca..2e289ee4270 100644
--- a/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php
+++ b/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Variable\Model\ResourceModel\Variable;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store Id
diff --git a/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php b/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php
index b406ede5149..84587658991 100644
--- a/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php
+++ b/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php
@@ -10,7 +10,7 @@ namespace Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Store\Model\StoreManagerInterface
@@ -18,12 +18,12 @@ class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Weee/Model/ResourceModel/Tax.php b/app/code/Magento/Weee/Model/ResourceModel/Tax.php
index 110f5c2fbfb..7f16ce3044d 100644
--- a/app/code/Magento/Weee/Model/ResourceModel/Tax.php
+++ b/app/code/Magento/Weee/Model/ResourceModel/Tax.php
@@ -11,7 +11,7 @@ use Magento\Catalog\Model\Product\Condition\ConditionInterface;
 /**
  * Wee tax resource model
  */
-class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -19,12 +19,12 @@ class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php
index 7851daedeab..bd5504115a8 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php
@@ -41,7 +41,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->method('getTableName')
             ->willReturn('table_name');
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
         $this->model = new \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax(
diff --git a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php
index 1aa26b3a2a3..5c1a01ee81d 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php
@@ -55,7 +55,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->method('getTableName')
             ->willReturn('table_name');
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock);
 
         $this->model = $this->objectManager->getObject(
diff --git a/app/code/Magento/Widget/Model/Layout/Update.php b/app/code/Magento/Widget/Model/Layout/Update.php
index fb85dbbf93e..09c322dc7d0 100644
--- a/app/code/Magento/Widget/Model/Layout/Update.php
+++ b/app/code/Magento/Widget/Model/Layout/Update.php
@@ -31,7 +31,7 @@ class Update extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -39,7 +39,7 @@ class Update extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php
index 63e9bac5cd7..1485f11b3af 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php
@@ -8,7 +8,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout;
 /**
  * Layout Link resource model
  */
-class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php
index 74df58e946f..91398f395d5 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout\Link;
 /**
  * Layout update collection model
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
      */
     public function __construct(
@@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->dateTime = $dateTime;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php
index 9b750808ab1..11e3f414ca5 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php
@@ -11,7 +11,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout;
 /**
  * Layout update resource model
  */
-class Update extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Update extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Cache\FrontendInterface
@@ -19,12 +19,12 @@ class Update extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
     private $_cache;
 
     /**
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Cache\FrontendInterface $cache
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Cache\FrontendInterface $cache,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php
index f276751e280..f90e32416a5 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php
@@ -8,7 +8,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout\Update;
 /**
  * Layout update collection model
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -36,7 +36,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param mixed $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->dateTime = $dateTime;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Widget.php b/app/code/Magento/Widget/Model/ResourceModel/Widget.php
index 24c8ac0e7db..f6e376e91cb 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Widget.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Widget\Model\ResourceModel;
 
-class Widget extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Widget extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php
index 5e97d539379..6277ad2e528 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php
@@ -13,7 +13,7 @@ namespace Magento\Widget\Model\ResourceModel\Widget;
 
 use Magento\Framework\Model\AbstractModel;
 
-class Instance extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Instance extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php
index bbbb4afc385..4ed2b8ba087 100644
--- a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Widget\Model\ResourceModel\Widget\Instance;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Fields map for corellation names & real selected fields
diff --git a/app/code/Magento/Widget/Model/Widget/Instance.php b/app/code/Magento/Widget/Model/Widget/Instance.php
index 45775d781ed..7bccc0812d1 100644
--- a/app/code/Magento/Widget/Model/Widget/Instance.php
+++ b/app/code/Magento/Widget/Model/Widget/Instance.php
@@ -120,7 +120,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Widget\Helper\Conditions $conditionsHelper
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $relatedCacheTypes
      * @param array $data
@@ -139,7 +139,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Widget\Helper\Conditions $conditionsHelper,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $relatedCacheTypes = [],
         array $data = []
diff --git a/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
index 16d873d84c8..3b83e0676da 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
@@ -60,7 +60,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase
         $connection->expects($this->any())->method('quoteIdentifier')->will($this->returnArgument(0));
 
         $resource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -77,7 +77,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase
     /**
      * @abstract
      * @param \Magento\Framework\DB\Select $select
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     abstract protected function _getCollection(\Magento\Framework\DB\Select $select);
 
diff --git a/app/code/Magento/Wishlist/Model/Item.php b/app/code/Magento/Wishlist/Model/Item.php
index 5d1d08b0930..f3748d8691d 100644
--- a/app/code/Magento/Wishlist/Model/Item.php
+++ b/app/code/Magento/Wishlist/Model/Item.php
@@ -130,7 +130,7 @@ class Item extends AbstractModel implements ItemInterface
      * @param CollectionFactory $wishlOptionCollectionFactory
      * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig
      * @param ProductRepositoryInterface $productRepository
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -145,7 +145,7 @@ class Item extends AbstractModel implements ItemInterface
         CollectionFactory $wishlOptionCollectionFactory,
         \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig,
         ProductRepositoryInterface $productRepository,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item.php
index 4b050e5a1b3..84f679726d2 100644
--- a/app/code/Magento/Wishlist/Model/ResourceModel/Item.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Wishlist\Model\ResourceModel;
 
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php
index 79d709c4eeb..bbee472a8bd 100644
--- a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php
@@ -10,7 +10,7 @@ namespace Magento\Wishlist\Model\ResourceModel\Item;
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Product Visibility Filter to product collection flag
diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php
index 7e3aadac78e..6660d7eb353 100644
--- a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Wishlist\Model\ResourceModel\Item;
 
-class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @return void
diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php
index a2f4c18c34e..d6a8343f2cb 100644
--- a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php
@@ -14,7 +14,7 @@ namespace Magento\Wishlist\Model\ResourceModel\Item\Option;
 use Magento\Catalog\Model\Product;
 use Magento\Wishlist\Model\Item;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Array of option ids grouped by item id
diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php
index a9afa52ac74..936f362d451 100644
--- a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Wishlist\Model\ResourceModel;
 
-class Wishlist extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Wishlist extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store wishlist items count
diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php
index 6d009cfa672..61b1feb5b47 100644
--- a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Wishlist\Model\ResourceModel\Wishlist;
 
-class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource
diff --git a/app/etc/di.xml b/app/etc/di.xml
index e1aaf36869b..598bc2c341e 100755
--- a/app/etc/di.xml
+++ b/app/etc/di.xml
@@ -94,7 +94,7 @@
     <preference for="Magento\Framework\Api\SearchCriteriaInterface" type="Magento\Framework\Api\SearchCriteria"/>
     <preference for="Magento\Framework\App\Rss\UrlBuilderInterface" type="Magento\Framework\App\Rss\UrlBuilder"/>
     <preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\Quiet"/>
-    <preference for="Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface" type="Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql"/>
+    <preference for="Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface" type="Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql"/>
     <preference for="Magento\Framework\DB\QueryInterface" type="Magento\Framework\DB\Query"/>
     <preference for="Magento\Framework\App\ProductMetadataInterface" type="Magento\Framework\App\ProductMetadata"/>
     <preference for="Magento\Framework\Acl\CacheInterface" type="Magento\Framework\Acl\Cache" />
@@ -133,13 +133,13 @@
     <preference for="Magento\Framework\Pricing\Amount\AmountInterface" type="Magento\Framework\Pricing\Amount\Base" />
     <preference for="Magento\Framework\Api\SearchResultsInterface" type="Magento\Framework\Api\SearchResults" />
     <preference for="Magento\Framework\Api\AttributeInterface" type="Magento\Framework\Api\AttributeValue" />
-    <preference for="Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface" type="Magento\Framework\Model\ModelResource\Db\TransactionManager" />
+    <preference for="Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface" type="Magento\Framework\Model\ResourceModel\Db\TransactionManager" />
     <preference for="Magento\Framework\Api\Data\ImageContentInterface" type="Magento\Framework\Api\ImageContent" />
     <preference for="Magento\Framework\Api\ImageContentValidatorInterface" type="Magento\Framework\Api\ImageContentValidator" />
     <preference for="Magento\Framework\Api\ImageProcessorInterface" type="Magento\Framework\Api\ImageProcessor" />
     <preference for="Magento\Framework\Code\Reader\ClassReaderInterface" type="Magento\Framework\Code\Reader\ClassReader" />
     <preference for="Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface" type="Magento\Framework\Stdlib\DateTime\DateTimeFormatter"/>
-    <type name="Magento\Framework\Model\ModelResource\Db\TransactionManager" shared="false" />
+    <type name="Magento\Framework\Model\ResourceModel\Db\TransactionManager" shared="false" />
     <type name="Magento\Framework\Logger\Handler\Base">
         <arguments>
             <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
diff --git a/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php b/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php
index 39e1bf089cd..b8cab8ad42e 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php
@@ -9,7 +9,7 @@ namespace Magento\TestModule4\Model\ResourceModel;
 /**
  * Sample resource model
  */
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php b/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php
index 4052cef7763..fcdce38ba67 100644
--- a/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php
+++ b/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php
@@ -9,7 +9,7 @@ namespace Magento\TestModuleMSC\Model\ResourceModel;
 /**
  * Sample resource model
  */
-class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php
index ee45b740731..db91d8a9984 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php
@@ -10,7 +10,7 @@ namespace Magento\Mtf\Util\Generate\Repository;
  * Class Resource
  *
  */
-class RepositoryResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class RepositoryResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Set fixture entity_type
@@ -28,7 +28,7 @@ class RepositoryResource extends \Magento\Framework\Model\ModelResource\Db\Abstr
      * @param \Magento\Framework\Model\AbstractModel $object
      * @param mixed $value
      * @param null $field
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb|void
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb|void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function load(\Magento\Framework\Model\AbstractModel $object, $value, $field = null)
diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php
index e22e7837b72..bdfbd8544da 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Mtf\Util\Generate\Repository;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Class CollectionProvider
@@ -26,7 +26,7 @@ class TableCollection extends AbstractCollection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param null $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @param array $fixture
      */
     public function __construct(
@@ -35,7 +35,7 @@ class TableCollection extends AbstractCollection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null,
         array $fixture = []
     ) {
         $this->setModel('Magento\Framework\DataObject');
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php b/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php
index 4e59fa47d7d..7f624342718 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\TestFramework\Db;
 
-class ConnectionAdapter extends \Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql
+class ConnectionAdapter extends \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql
 {
     /**
      * Retrieve DB connection class name
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php
index c772877befa..ca8c899be7b 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 class AbstractTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_model;
 
@@ -19,10 +19,10 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
     {
         $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\ResourceConnection');
         $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            '\Magento\Framework\Model\ModelResource\Db\Context',
+            '\Magento\Framework\Model\ResourceModel\Db\Context',
             ['resource' => $resource]
         );
-        $this->_model = $this->getMockForAbstractClass('Magento\Framework\Model\ModelResource\Db\AbstractDb',
+        $this->_model = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             ['context' => $context]
         );
     }
@@ -59,11 +59,11 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
             ['tablePrefix' => 'prefix_']
         );
         $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            '\Magento\Framework\Model\ModelResource\Db\Context',
+            '\Magento\Framework\Model\ResourceModel\Db\Context',
             ['resource' => $resource]
         );
 
-        $model = $this->getMockForAbstractClass('Magento\Framework\Model\ModelResource\Db\AbstractDb',
+        $model = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             ['context' => $context]
         );
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php
index 49449b23aa5..0bdb5fa5e4b 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\Collection;
+namespace Magento\Framework\Model\ResourceModel\Db\Collection;
 
 class AbstractTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_model = null;
 
@@ -17,12 +17,12 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
         $resourceModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
             ->get('Magento\Framework\App\ResourceConnection');
         $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            '\Magento\Framework\Model\ModelResource\Db\Context',
+            '\Magento\Framework\Model\ResourceModel\Db\Context',
             ['resource' => $resourceModel]
         );
 
         $resource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$context],
             '',
             true,
@@ -52,7 +52,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
         $logger = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Psr\Log\LoggerInterface');
 
         $this->_model = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+            'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             [$entityFactory, $logger, $fetchStrategy, $eventManager, null, $resource]
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php
index 98031031fe1..34b1d0a51b3 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php
@@ -1,11 +1,11 @@
 <?php
 /**
- * Test for \Magento\Framework\Model\ModelResource\Db\Profiler
+ * Test for \Magento\Framework\Model\ResourceModel\Db\Profiler
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\Config\ConfigOptionsListConstants;
 
@@ -49,7 +49,7 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
         $dbConfig = $reader->getConfigData(ConfigOptionsListConstants::KEY_DB);
         $connectionConfig = $dbConfig['connection']['default'];
         $connectionConfig['profiler'] = [
-            'class' => 'Magento\Framework\Model\ModelResource\Db\Profiler',
+            'class' => 'Magento\Framework\Model\ResourceModel\Db\Profiler',
             'enabled' => 'true',
         ];
 
@@ -78,9 +78,9 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
             $result->fetchAll();
         }
 
-        /** @var \Magento\Framework\Model\ModelResource\Db\Profiler $profiler */
+        /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */
         $profiler = $connection->getProfiler();
-        $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Profiler', $profiler);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler);
 
         $queryProfiles = $profiler->getQueryProfiles($queryType);
         $this->assertCount(1, $queryProfiles);
@@ -140,9 +140,9 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
         $testTableName = $resource->getTableName('setup_module');
         $connection->query('SELECT * FROM ' . $testTableName);
 
-        /** @var \Magento\Framework\Model\ModelResource\Db\Profiler $profiler */
+        /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */
         $profiler = $connection->getProfiler();
-        $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Profiler', $profiler);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler);
 
         $queryProfiles = $profiler->getQueryProfiles(\Magento\Framework\DB\Profiler::SELECT);
         $this->assertCount(2, $queryProfiles);
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php
index 432aa215b12..80209e56a03 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Entity;
+namespace Magento\Framework\Model\ResourceModel\Entity;
 
 class TableTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Entity\Table
+     * @var \Magento\Framework\Model\ResourceModel\Entity\Table
      */
     protected $_model;
 
@@ -21,7 +21,7 @@ class TableTest extends \PHPUnit_Framework_TestCase
         // @codingStandardsIgnoreEnd
 
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Framework\Model\ModelResource\Entity\Table', ['config' => $config]);
+            ->create('Magento\Framework\Model\ResourceModel\Entity\Table', ['config' => $config]);
     }
 
     public function testGetTable()
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php
index 930397c73d2..808ce911305 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource;
+namespace Magento\Framework\Model\ResourceModel;
 
 class IteratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Iterator
+     * @var \Magento\Framework\Model\ResourceModel\Iterator
      */
     protected $_model;
 
@@ -22,7 +22,7 @@ class IteratorTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Framework\Model\ModelResource\Iterator'
+            'Magento\Framework\Model\ResourceModel\Iterator'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php
index a23a42f42d4..84ff6306201 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Type\Db;
+namespace Magento\Framework\Model\ResourceModel\Type\Db;
 
 class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php
index 871c85d9faf..f57497cd8e9 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\ModelResource\Type\Db\Pdo;
+namespace Magento\Framework\Model\ResourceModel\Type\Db\Pdo;
 
 class MysqlTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,9 +23,9 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             'dbname' => $db->getSchema(),
             'active' => true,
         ];
-        /** @var \Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql $object */
+        /** @var \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql $object */
         $object = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql',
+            'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql',
             ['config' => $config]
         );
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php
index 666627931ac..961fc60985a 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Test for \Magento\Framework\Model\ModelResource
+ * Test for \Magento\Framework\Model\ResourceModel
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
@@ -51,7 +51,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
             [
                 'config' => [
                     'profiler' => [
-                        'class' => 'Magento\Framework\Model\ModelResource\Db\Profiler',
+                        'class' => 'Magento\Framework\Model\ResourceModel\Db\Profiler',
                         'enabled' => 'true',
                     ],
                     'username' => 'username',
@@ -63,10 +63,10 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        /** @var \Magento\Framework\Model\ModelResource\Db\Profiler $profiler */
+        /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */
         $profiler = $connection->getProfiler();
 
-        $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Profiler', $profiler);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler);
         $this->assertTrue($profiler->getEnabled());
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php
index daf46fa185e..a7ccac4bbaf 100644
--- a/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php
@@ -88,8 +88,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::addFieldToSelect
-     * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::removeFieldFromSelect
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::addFieldToSelect
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::removeFieldFromSelect
      */
     public function testAddRemoveFieldToSelect()
     {
@@ -108,7 +108,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::addExpressionFieldToSelect
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::addExpressionFieldToSelect
      */
     public function testAddExpressionFieldToSelect()
     {
@@ -118,7 +118,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::getAllIds
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::getAllIds
      */
     public function testGetAllIds()
     {
@@ -126,7 +126,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::getData
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::getData
      */
     public function testGetData()
     {
@@ -134,7 +134,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::join
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::join
      */
     public function testJoin()
     {
diff --git a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php
index a4ce584c44b..854a38cd660 100644
--- a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php
@@ -166,7 +166,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCollection()
     {
-        $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             $this->_model->getCollection());
     }
 
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 ca08452c4b2..a782da65571 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -803,23 +803,23 @@ return [
     ['Magento\Core\Model\Email\Info', 'Magento\Framework\Mail\MessageInterface'],
     ['Magento\Core\Model\Email\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'],
     ['Magento\Core\Model\Email\Template\Mailer', 'Magento\Framework\Mail\Template\TransportBuilder'],
-    ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\ModelResource\AbstractResource'],
-    ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ModelResource\Db\AbstractDb'],
-    ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ModelResource\Db\Profiler'],
+    ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\ResourceModel\AbstractResource'],
+    ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
+    ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
     [
         'Magento\Core\Model\Resource\Entity\AbstractEntity',
-        'Magento\Framework\Model\ModelResource\Entity\AbstractEntity',
+        'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity',
     ],
-    ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\ModelResource\Entity\Table'],
+    ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'],
     ['Magento\Core\Model\Resource\Flag', 'Magento\Framework\Flag\FlagResource'],
-    ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\ModelResource\Iterator'],
+    ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'],
     ['Magento\Core\Model\Resource\Resource', 'Magento\Framework\Module\ModuleResource'],
-    ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ModelResource\Type\AbstractType'],
-    ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ModelResource\Type\Db'],
-    ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql'],
+    ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'],
+    ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
+    ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
     [
         'Magento\Core\Model\Resource\Db\Collection\AbstractCollection',
-        'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+        'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
     ],
     ['Magento\Email\Model\Info', 'Magento\Framework\Mail\MessageInterface'],
     ['Magento\Email\Model\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'],
@@ -2925,7 +2925,7 @@ return [
         'Magento\Bundle\Api\ProductOptionTypeListInterface',
     ],
     ['Magento\Sales\Controller\Adminhtml\Order\InvoiceLoader'],
-    ['Magento\Sales\Model\ResourceModel\AbstractResource', 'Magento\Framework\Model\ModelResource\Db\AbstractDb'],
+    ['Magento\Sales\Model\ResourceModel\AbstractResource', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
     ['Magento\Backend\Block\System\Config\Switcher'],
     ['Magento\VersionsCms\Block\Adminhtml\Scope\Switcher'],
     ['Magento\Backend\Block\Widget\View\Container'],
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 174f0004e29..ca86654e7a5 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
@@ -19,7 +19,7 @@ return [
     ['CACHE_TAG', 'Magento\Framework\AppInterface'],
     [
         'CACHE_TAG',
-        'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+        'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
         'Magento_Core_Model_Cache_Type_Collection::CACHE_TAG',
     ],
     ['CACHE_TAG', 'Magento\Framework\Translate', 'Magento_Core_Model_Cache_Type_Translate::CACHE_TAG'],
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 00e6b2ad57a..d6780911ed9 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
@@ -951,7 +951,7 @@ return [
     ['_getUsers', 'Magento\User\Block\Role\Grid\User', 'getUsers'],
     ['_getGridHtml', 'Magento\User\Block\Role\Tab\Users', 'getGridHtml'],
     ['_getSelectedRoles', 'Magento\User\Block\User\Edit\Tab\Roles', 'getSelectedRoles'],
-    ['_prepareSelect', 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'],
+    ['_prepareSelect', 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'],
     ['_prepareSelect', 'Magento\Framework\Data\Collection\AbstractDb'],
     ['_createOrderFromAddress', 'Magento\Checkout\Model\Type\AbstractType'],
     ['_addLoadAttributesSelectFields', 'Magento\Catalog\Model\ResourceModel\AbstractResource'],
@@ -1116,12 +1116,12 @@ return [
     ],
     [
         'formatDate',
-        'Magento\Framework\Model\ModelResource\AbstractResource',
+        'Magento\Framework\Model\ResourceModel\AbstractResource',
         '\Magento\Framework\Stdlib\DateTime::formatDate',
     ],
     [
         'mktime',
-        'Magento\Framework\Model\ModelResource\AbstractResource',
+        'Magento\Framework\Model\ResourceModel\AbstractResource',
         '\Magento\Framework\Stdlib\DateTime::toTimestamp',
     ],
     ['getPlainTemplateMode', '\Magento\Email\Model\Template\Filter'],
@@ -2342,11 +2342,11 @@ return [
     ['_getReadAdapter', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'],
     ['_getWriteAdapter', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'],
     ['_getConnection', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'],
-    ['_getReadAdapter', 'Magento\Framework\Model\ModelResource\AbstractResource', 'getConnection'],
-    ['_getWriteAdapter', 'Magento\Framework\Model\ModelResource\AbstractResource', 'getConnection'],
-    ['_getReadAdapter', 'Magento\Framework\Model\ModelResource\Db\AbstractDb', 'getConnection'],
-    ['_getWriteAdapter', 'Magento\Framework\Model\ModelResource\Db\AbstractDb', 'getConnection'],
-    ['getReadConnection', 'Magento\Framework\Model\ModelResource\Db\AbstractDb', 'getConnection'],
+    ['_getReadAdapter', 'Magento\Framework\Model\ResourceModel\AbstractResource', 'getConnection'],
+    ['_getWriteAdapter', 'Magento\Framework\Model\ResourceModel\AbstractResource', 'getConnection'],
+    ['_getReadAdapter', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'],
+    ['_getWriteAdapter', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'],
+    ['getReadConnection', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'],
     ['getReadAdapter', 'Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction'],
     ['getWriteAdapter', 'Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction'],
     ['getReadAdapter', 'Magento\Catalog\Model\Indexer\Category\Product\AbstractAction'],
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
index 03be375c655..924b33deb90 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
@@ -190,6 +190,7 @@ return [
     ['Magento\Catalog\Test\Unit\Plugin\Model\Resource', 'Magento\Catalog\Test\Unit\Plugin\Model\ResourceModel'],
     ['Magento\Framework\Acl\Resource', 'Magento\Framework\Acl\AclResource'],
     ['Magento\Framework\App\Resource', 'Magento\Framework\App\ResourceConnection'],
-    ['Magento\Framework\Model\Resource', 'Magento\Framework\Model\ModelResource'],
-    ['Magento\Framework\Model\Test\Unit\Resource', 'Magento\Framework\Model\Test\Unit\ModelResource'],
+    ['Magento\Framework\Model\Resource', 'Magento\Framework\Model\ResourceModel'],
+    ['Magento\Framework\Model\ModelResource', 'Magento\Framework\Model\ResourceModel'],
+    ['Magento\Framework\Model\Test\Unit\Resource', 'Magento\Framework\Model\Test\Unit\ResourceModel'],
 ];
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 becf2127e48..c17f4d6e46e 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
@@ -179,7 +179,7 @@ return [
     ['_dir', 'Magento\Backup\Model\Fs\Collection'],
     ['_dir', 'Magento\Cms\Model\Wysiwyg\Images\Storage'],
     ['_dirs', 'Magento\Core\Helper\Theme'],
-    ['_dirs', 'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql'],
+    ['_dirs', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
     ['_filesystem', 'Magento\GiftWrapping\Model\Wrapping'],
     ['_customer', 'Magento\Backend\Model\Session\Quote'],
     ['_customerFactory', 'Magento\Backend\Model\Session\Quote'],
diff --git a/lib/internal/Magento/Framework/App/Config/Value.php b/lib/internal/Magento/Framework/App/Config/Value.php
index 1065c8f1f19..ddfb123d637 100644
--- a/lib/internal/Magento/Framework/App/Config/Value.php
+++ b/lib/internal/Magento/Framework/App/Config/Value.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\App\Config;
 /**
  * Config data model
  *
- * @method \Magento\Framework\Model\ModelResource\Db\AbstractDb getResource()
+ * @method \Magento\Framework\Model\ResourceModel\Db\AbstractDb getResource()
  * @method string getScope()
  * @method \Magento\Framework\App\Config\ValueInterface setScope(string $value)
  * @method int getScopeId()
@@ -46,7 +46,7 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -54,7 +54,7 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/lib/internal/Magento/Framework/App/ResourceConnection.php b/lib/internal/Magento/Framework/App/ResourceConnection.php
index 13e10624484..56d220ebb57 100644
--- a/lib/internal/Magento/Framework/App/ResourceConnection.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection.php
@@ -9,7 +9,7 @@ namespace Magento\Framework\App;
 
 use Magento\Framework\App\DeploymentConfig;
 use Magento\Framework\App\ResourceConnection\ConfigInterface as ResourceConfigInterface;
-use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactoryInterface;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface;
 use Magento\Framework\Config\ConfigOptionsListConstants;
 
 class ResourceConnection
diff --git a/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php
index 6a9922c138c..7924f4babda 100644
--- a/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\Framework\App\ResourceConnection;
 
-use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactory as ModelConnectionFactory;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactory as ModelConnectionFactory;
 use Magento\Framework\DB\Adapter\DdlCache;
 
 class ConnectionFactory extends ModelConnectionFactory
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php b/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php
index c32a284af11..265ca6f2964 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\App\Test\Unit;
 
 use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Config\ConfigOptionsListConstants;
-use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactoryInterface;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface;
 
 class AclResourceTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/DB/AbstractMapper.php b/lib/internal/Magento/Framework/DB/AbstractMapper.php
index eb34aa778a0..630e3ceb0ae 100644
--- a/lib/internal/Magento/Framework/DB/AbstractMapper.php
+++ b/lib/internal/Magento/Framework/DB/AbstractMapper.php
@@ -29,7 +29,7 @@ abstract class AbstractMapper implements MapperInterface
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -206,7 +206,7 @@ abstract class AbstractMapper implements MapperInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/DB/MapperInterface.php b/lib/internal/Magento/Framework/DB/MapperInterface.php
index a8d6a54b918..4bf1e3be23c 100644
--- a/lib/internal/Magento/Framework/DB/MapperInterface.php
+++ b/lib/internal/Magento/Framework/DB/MapperInterface.php
@@ -25,7 +25,7 @@ interface MapperInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource();
 
diff --git a/lib/internal/Magento/Framework/DB/Query.php b/lib/internal/Magento/Framework/DB/Query.php
index 22368c1227b..203a5158f64 100644
--- a/lib/internal/Magento/Framework/DB/Query.php
+++ b/lib/internal/Magento/Framework/DB/Query.php
@@ -27,7 +27,7 @@ class Query implements QueryInterface
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -78,13 +78,13 @@ class Query implements QueryInterface
     /**
      * @param \Magento\Framework\DB\Select $select
      * @param \Magento\Framework\Api\CriteriaInterface $criteria
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      */
     public function __construct(
         \Magento\Framework\DB\Select $select,
         \Magento\Framework\Api\CriteriaInterface $criteria,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
     ) {
         $this->select = $select;
@@ -224,7 +224,7 @@ class Query implements QueryInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/DB/QueryBuilder.php b/lib/internal/Magento/Framework/DB/QueryBuilder.php
index 02eccb25e11..c1e25ed0981 100644
--- a/lib/internal/Magento/Framework/DB/QueryBuilder.php
+++ b/lib/internal/Magento/Framework/DB/QueryBuilder.php
@@ -25,7 +25,7 @@ class QueryBuilder
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -65,10 +65,10 @@ class QueryBuilder
     /**
      * Set Resource
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @return void
      */
-    public function setResource(\Magento\Framework\Model\ModelResource\Db\AbstractDb $resource)
+    public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource)
     {
         $this->resource = $resource;
     }
diff --git a/lib/internal/Magento/Framework/DB/QueryInterface.php b/lib/internal/Magento/Framework/DB/QueryInterface.php
index d1806a63466..e2429031592 100644
--- a/lib/internal/Magento/Framework/DB/QueryInterface.php
+++ b/lib/internal/Magento/Framework/DB/QueryInterface.php
@@ -86,7 +86,7 @@ interface QueryInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource();
 
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php
index 102cf2c9e1b..deec1825b9e 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php
@@ -16,7 +16,7 @@ use Magento\Framework\DB\Select;
 class AbstractMapperTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -63,7 +63,7 @@ class AbstractMapperTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php
index 13626313c98..d466786094b 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php
@@ -21,7 +21,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
     protected $criteriaMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -71,7 +71,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
             []
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php b/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php
index 0c602a4a091..339c76f06c2 100644
--- a/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php
@@ -117,7 +117,7 @@ abstract class AbstractDb extends \Magento\Framework\Data\Collection
     /**
      * Get resource instance.
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     abstract public function getResource();
 
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php
index c334bf20d4d..144ef6fe20d 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php
@@ -11,17 +11,17 @@ namespace Magento\Framework\Data\Test\Unit\Collection;
 class DbCollection extends \Magento\Framework\Data\Collection\AbstractDb
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     private $resource;
 
     /**
      * Set DB resource for testing purposes.
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @return $this
      */
-    public function setResource(\Magento\Framework\Model\ModelResource\Db\AbstractDb $resource)
+    public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource)
     {
         $this->resource = $resource;
         return $this;
@@ -30,7 +30,7 @@ class DbCollection extends \Magento\Framework\Data\Collection\AbstractDb
     /**
      * Get resource instance.
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/Flag/FlagResource.php b/lib/internal/Magento/Framework/Flag/FlagResource.php
index 1ec3b61e0c1..730fee2e5d2 100644
--- a/lib/internal/Magento/Framework/Flag/FlagResource.php
+++ b/lib/internal/Magento/Framework/Flag/FlagResource.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Flag;
 /**
  * Flag Resource model
  */
-class FlagResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+class FlagResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php b/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php
index 8ae263b1467..24802ef1ac1 100644
--- a/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php
+++ b/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php
@@ -48,7 +48,7 @@ abstract class AbstractExtensibleModel extends AbstractModel implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -57,7 +57,7 @@ abstract class AbstractExtensibleModel extends AbstractModel implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/lib/internal/Magento/Framework/Model/AbstractModel.php b/lib/internal/Magento/Framework/Model/AbstractModel.php
index 23280395c5f..f72c455daf8 100644
--- a/lib/internal/Magento/Framework/Model/AbstractModel.php
+++ b/lib/internal/Magento/Framework/Model/AbstractModel.php
@@ -62,14 +62,14 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
     /**
      * Resource model instance
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_resource;
 
     /**
      * Resource collection
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_resourceCollection;
 
@@ -163,14 +163,14 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -448,7 +448,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
      * Get resource instance
      *
      * @throws \Magento\Framework\Exception\LocalizedException
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _getResource()
     {
@@ -476,7 +476,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
      *
      * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework
      * @throws \Magento\Framework\Exception\LocalizedException
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getResourceCollection()
     {
@@ -496,7 +496,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
      * Retrieve collection instance
      *
      * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework
-     * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCollection()
     {
@@ -849,7 +849,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
     /**
      * Retrieve model resource
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/AbstractResource.php b/lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php
similarity index 99%
rename from lib/internal/Magento/Framework/Model/ModelResource/AbstractResource.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php
index 17cd5e51c23..ccd2131de93 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/AbstractResource.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\ModelResource;
+namespace Magento\Framework\Model\ResourceModel;
 
 /**
  * Abstract resource model
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/AbstractDb.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php
similarity index 98%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/AbstractDb.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php
index d6d202a408c..a42c95c1994 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Exception\AlreadyExistsException;
 use Magento\Framework\Exception\LocalizedException;
-use Magento\Framework\Model\ModelResource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 
 /**
  * Abstract resource model class
@@ -133,10 +133,10 @@ abstract class AbstractDb extends AbstractResource
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param string $connectionName
      */
-    public function __construct(\Magento\Framework\Model\ModelResource\Db\Context $context, $connectionName = null)
+    public function __construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, $connectionName = null)
     {
         $this->transactionManager = $context->getTransactionManager();
         $this->_resources = $context->getResources();
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/Collection/AbstractCollection.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php
similarity index 97%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/Collection/AbstractCollection.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php
index 352861097da..582d6c79f64 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/Collection/AbstractCollection.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\ModelResource\Db\Collection;
+namespace Magento\Framework\Model\ResourceModel\Db\Collection;
 use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 
 /**
@@ -33,7 +33,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_resource;
 
@@ -106,7 +106,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -114,7 +114,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eventManager = $eventManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $connection);
@@ -455,7 +455,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/Context.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/Context.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php
index 59fefb8016b..13877e882e9 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/Context.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
  
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 /**
  * @codeCoverageIgnore
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/ObjectRelationProcessor.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php
similarity index 95%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/ObjectRelationProcessor.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php
index 194d00d2429..89ec37c6bf0 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/ObjectRelationProcessor.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\DB\Adapter\AdapterInterface as Connection;
 
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/Profiler.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/Profiler.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php
index 05655c886f6..0ae0f5ea4c3 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/Profiler.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 class Profiler extends \Magento\Framework\DB\Profiler
 {
@@ -33,7 +33,7 @@ class Profiler extends \Magento\Framework\DB\Profiler
     protected function _getTimerName($operation)
     {
         // default name of connection type
-        $timerName = \Magento\Framework\Model\ModelResource\Db\Profiler::DEFAULT_CONNECTION_TYPE;
+        $timerName = \Magento\Framework\Model\ResourceModel\Db\Profiler::DEFAULT_CONNECTION_TYPE;
 
         // connection type to database
         if (!empty($this->_type)) {
@@ -48,7 +48,7 @@ class Profiler extends \Magento\Framework\DB\Profiler
             $timerName .= '_' . $this->_host;
         }
 
-        return \Magento\Framework\Model\ModelResource\Db\Profiler::TIMER_PREFIX . ':' . $timerName;
+        return \Magento\Framework\Model\ResourceModel\Db\Profiler::TIMER_PREFIX . ':' . $timerName;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManager.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManager.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php
index 57a636a577b..920eca7e941 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManager.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\DB\Adapter\AdapterInterface as Connection;
 
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManagerInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php
similarity index 91%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManagerInterface.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php
index 981edbb64c1..e4e72c8999a 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManagerInterface.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\ModelResource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\DB\Adapter\AdapterInterface as Connection;
 
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/AbstractDb.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php
similarity index 86%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/AbstractDb.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php
index 8b8e3e8c355..b6da084e2b7 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class AbstractDb with snapshot saving and relation save processing
  */
-abstract class AbstractDb extends \Magento\Framework\Model\ModelResource\Db\AbstractDb
+abstract class AbstractDb extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var Snapshot
@@ -23,11 +23,11 @@ abstract class AbstractDb extends \Magento\Framework\Model\ModelResource\Db\Abst
     /**
      * @param Snapshot $entitySnapshot
      * @param RelationComposite $entityRelationComposite
-     * @param \Magento\Framework\Model\ModelResource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\ModelResource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         $connectionName = null
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Collection.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php
similarity index 85%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Collection.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php
index 75804638605..3591c1a2c07 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Collection.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class Collection
  */
-abstract class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection
+abstract class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var Snapshot
@@ -22,7 +22,7 @@ abstract class Collection extends \Magento\Framework\Model\ModelResource\Db\Coll
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -31,7 +31,7 @@ abstract class Collection extends \Magento\Framework\Model\ModelResource\Db\Coll
         \Magento\Framework\Event\ManagerInterface $eventManager,
         Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->entitySnapshot = $entitySnapshot;
         parent::__construct(
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Metadata.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Metadata.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php
index 7dfef23ac5b..bfab1304282 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Metadata.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class Metadata represents a list of entity fields that are applicable for persistence operations
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationComposite.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php
similarity index 95%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationComposite.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php
index 49d9ff8db1a..23626faa7bf 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationComposite.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 use Magento\Framework\Model\AbstractModel;
 use Magento\Framework\Event\ManagerInterface as EventManager;
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php
similarity index 86%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationInterface.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php
index 636597621ff..257b9652b31 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationInterface.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Interface RelationInterface
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Snapshot.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Snapshot.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php
index 854c1423dc0..c2de9047c4e 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Snapshot.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class Snapshot register snapshot of entity data, for tracking changes
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Entity/AbstractEntity.php b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/ModelResource/Entity/AbstractEntity.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php
index d725a102744..6b323bf323c 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Entity/AbstractEntity.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Entity;
+namespace Magento\Framework\Model\ResourceModel\Entity;
 
 abstract class AbstractEntity
 {
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Entity/Table.php b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php
similarity index 73%
rename from lib/internal/Magento/Framework/Model/ModelResource/Entity/Table.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php
index 75fe3c8189a..f6eac910f3e 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Entity/Table.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Entity;
+namespace Magento\Framework\Model\ResourceModel\Entity;
 
 /**
  * Class describing db table resource entity
  *
  */
-class Table extends \Magento\Framework\Model\ModelResource\Entity\AbstractEntity
+class Table extends \Magento\Framework\Model\ResourceModel\Entity\AbstractEntity
 {
     /**
      * Get table
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Iterator.php b/lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/ModelResource/Iterator.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php
index 63de2861a2b..c165dec4e7a 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Iterator.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php
@@ -7,7 +7,7 @@
 /**
  * Active record implementation
  */
-namespace Magento\Framework\Model\ModelResource;
+namespace Magento\Framework\Model\ResourceModel;
 
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\Exception\LocalizedException;
@@ -22,7 +22,7 @@ class Iterator extends \Magento\Framework\DataObject
      * @param array|string $callbacks
      * @param array $args
      * @param AdapterInterface $connection
-     * @return \Magento\Framework\Model\ModelResource\Iterator
+     * @return \Magento\Framework\Model\ResourceModel\Iterator
      */
     public function walk($query, array $callbacks, array $args = [], $connection = null)
     {
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/AbstractType.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php
similarity index 83%
rename from lib/internal/Magento/Framework/Model/ModelResource/Type/AbstractType.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php
index 6a219bf6608..172434f5d56 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Type/AbstractType.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Type;
+namespace Magento\Framework\Model\ResourceModel\Type;
 
 abstract class AbstractType
 {
@@ -19,7 +19,7 @@ abstract class AbstractType
      *
      * @var String
      */
-    protected $_entityClass = 'Magento\Framework\Model\ModelResource\Entity\AbstractEntity';
+    protected $_entityClass = 'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity';
 
     /**
      * Retrieve entity type
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php
similarity index 50%
rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php
index 9c07c36575d..db4737b9923 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Type;
+namespace Magento\Framework\Model\ResourceModel\Type;
 
-abstract class Db extends \Magento\Framework\Model\ModelResource\Type\AbstractType
+abstract class Db extends \Magento\Framework\Model\ResourceModel\Type\AbstractType
 {
     /**
      * Constructor
      */
     public function __construct()
     {
-        $this->_entityClass = 'Magento\Framework\Model\ModelResource\Entity\Table';
+        $this->_entityClass = 'Magento\Framework\Model\ResourceModel\Entity\Table';
     }
 }
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactory.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php
similarity index 95%
rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactory.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php
index 886d1fdbdaa..ed253a64539 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactory.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Type\Db;
+namespace Magento\Framework\Model\ResourceModel\Type\Db;
 
 use Magento\Framework\ObjectManagerInterface;
 
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php
similarity index 88%
rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryInterface.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php
index ce5cbb166d2..02a9dd0bce6 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryInterface.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\ModelResource\Type\Db;
+namespace Magento\Framework\Model\ResourceModel\Type\Db;
 
 interface ConnectionFactoryInterface
 {
diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/Pdo/Mysql.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php
similarity index 95%
rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db/Pdo/Mysql.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php
index 5ed1847c4df..e28f3109687 100644
--- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/Pdo/Mysql.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php
@@ -6,13 +6,13 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\ModelResource\Type\Db\Pdo;
+namespace Magento\Framework\Model\ResourceModel\Type\Db\Pdo;
 
 use Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface;
 use Magento\Framework\DB;
 use Magento\Framework\Stdlib;
 
-class Mysql extends \Magento\Framework\Model\ModelResource\Type\Db implements ConnectionAdapterInterface
+class Mysql extends \Magento\Framework\Model\ResourceModel\Type\Db implements ConnectionAdapterInterface
 {
     /**
      * @var Stdlib\StringUtils
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php
index 753c995c8c2..84959d09523 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php
@@ -29,7 +29,7 @@ class AbstractExtensibleModelTest extends \PHPUnit_Framework_TestCase
     protected $registryMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -72,7 +72,7 @@ class AbstractExtensibleModelTest extends \PHPUnit_Framework_TestCase
         );
         $this->registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getConnection',
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php
index 0ca67c81c32..e0674f8a882 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php
@@ -25,7 +25,7 @@ class AbstractModelTest extends \PHPUnit_Framework_TestCase
     protected $registryMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -62,7 +62,7 @@ class AbstractModelTest extends \PHPUnit_Framework_TestCase
         );
         $this->registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getConnection',
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
similarity index 92%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
index 480bf65ee6f..2c68b6dd876 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Db;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db;
 
 class AbstractDbTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_model;
 
@@ -41,16 +41,16 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
         $this->transactionManagerMock = $this->getMock(
-            '\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface'
+            '\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface'
         );
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->_resourcesMock);
         $contextMock->expects($this->once())
             ->method('getObjectRelationProcessor')
@@ -60,7 +60,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             ->willReturn($this->transactionManagerMock);
 
         $this->_model = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
@@ -113,7 +113,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     public function testAddUniqueFieldArray()
     {
         $this->assertInstanceOf(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             $this->_model->addUniqueField(['someField'])
         );
     }
@@ -131,7 +131,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     {
         $data = 'MainTableName';
         $idFieldNameProperty = new \ReflectionProperty(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb', '_idFieldName'
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName'
         );
         $idFieldNameProperty->setAccessible(true);
         $idFieldNameProperty->setValue($this->_model, $data);
@@ -154,7 +154,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetMainTable($tableName, $expectedResult)
     {
-        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_mainTable');
+        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable');
         $mainTableProperty->setAccessible(true);
         $mainTableProperty->setValue($this->_model, $tableName);
         $this->_resourcesMock->expects($this->once())
@@ -188,7 +188,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         $this->_resourcesMock->expects($this->once())->method('getTableName')->with($data)->will(
             $this->returnValue('tableName')
         );
-        $tablesProperty = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_tables');
+        $tablesProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_tables');
         $tablesProperty->setAccessible(true);
         $tablesProperty->setValue($this->_model, [$data]);
         $this->assertEquals($data, $this->_model->getTable($data));
@@ -232,7 +232,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
 
     public function testResetUniqueField()
     {
-        $uniqueFields = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_uniqueFields');
+        $uniqueFields = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_uniqueFields');
         $uniqueFields->setAccessible(true);
         $uniqueFields->setValue($this->_model, ['uniqueField1', 'uniqueField2']);
         $this->_model->resetUniqueField();
@@ -242,7 +242,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     public function testGetUniqueFields()
     {
         $uniqueFieldsReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_uniqueFields'
         );
         $uniqueFieldsReflection->setAccessible(true);
@@ -270,12 +270,12 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         );
 
         $value = 'some_value';
-        $idFieldName = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_idFieldName');
+        $idFieldName = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName');
         $idFieldName->setAccessible(true);
         $idFieldName->setValue($this->_model, 'field_value');
 
         $this->assertInstanceOf(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             $this->_model->load($abstractModelMock, $value, $idFieldName)
         );
     }
@@ -323,13 +323,13 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             $this->returnValue('tableName')
         );
         $mainTableReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_mainTable'
         );
         $mainTableReflection->setAccessible(true);
         $mainTableReflection->setValue($this->_model, 'tableName');
         $idFieldNameReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_idFieldName'
         );
         $idFieldNameReflection->setAccessible(true);
@@ -340,7 +340,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         $abstractModelMock->expects($this->once())->method('afterDelete');
         $abstractModelMock->expects($this->once())->method('afterDeleteCommit');
         $this->assertInstanceOf(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             $this->_model->delete($abstractModelMock)
         );
     }
@@ -384,7 +384,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             true,
             ['__wakeup', 'getOrigData', 'getData']
         );
-        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_mainTable');
+        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable');
         $mainTableProperty->setAccessible(true);
         $mainTableProperty->setValue($this->_model, 'table');
 
@@ -417,7 +417,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         );
         $registryMock = $this->getMock('\Magento\Framework\Registry', [], [], '', false);
         $resourceMock = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getConnection',
@@ -448,13 +448,13 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             $this->returnValue('tableName')
         );
         $mainTableReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_mainTable'
         );
         $mainTableReflection->setAccessible(true);
         $mainTableReflection->setValue($this->_model, 'tableName');
         $idFieldNameReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_idFieldName'
         );
         $idFieldNameReflection->setAccessible(true);
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/Collection/AbstractCollectionTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php
similarity index 97%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/Collection/AbstractCollectionTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php
index e64b46417df..8e9abd11fef 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/Collection/AbstractCollectionTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php
@@ -6,10 +6,10 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\Collection;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\Collection;
 
 use Magento\Framework\DB\Select;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\DataObject as MagentoObject;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -38,7 +38,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $managerMock;
 
-    /** @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject  */
+    /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject  */
     protected $resourceMock;
 
     /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject */
@@ -103,14 +103,14 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected function getUut()
     {
         return $this->objectManagerHelper->getObject(
-            'Magento\Framework\Model\Test\Unit\ModelResource\Db\Collection\Uut',
+            'Magento\Framework\Model\Test\Unit\ResourceModel\Db\Collection\Uut',
             [
                 'entityFactory' => $this->entityFactoryMock,
                 'logger' => $this->loggerMock,
                 'fetchStrategy' => $this->fetchStrategyMock,
                 'eventManager' => $this->managerMock,
                 'connection' => $this->connectionMock,
-                // Magento\Framework\Flag\FlagResource extends Magento\Framework\Model\ModelResource\Db\AbstractDb
+                // Magento\Framework\Flag\FlagResource extends Magento\Framework\Model\ResourceModel\Db\AbstractDb
                 'resource' => $this->resourceMock,
             ]
         );
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/MetadataTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php
similarity index 91%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/MetadataTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php
index cb8768fbf06..014909543bc 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/MetadataTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -13,7 +13,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class MetadataTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata
      */
     protected $entityMetadata;
 
@@ -23,7 +23,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ModelResource\Db\AbstractDb
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -64,7 +64,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase
         $this->model->expects($this->any())->method('getResource')->willReturn($this->resource);
         $this->resource->expects($this->any())->method('getConnection')->willReturn($this->connection);
         $this->entityMetadata = $objectManager->getObject(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata'
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata'
         );
     }
 
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/RelationCompositeTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php
similarity index 88%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/RelationCompositeTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php
index e099a2d0cee..428e9bef37d 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/RelationCompositeTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl;
 
 /**
  * Class RelationCompositeTest
@@ -12,7 +12,7 @@ namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl;
 class RelationCompositeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite
      */
     protected $entityRelationComposite;
 
@@ -22,7 +22,7 @@ class RelationCompositeTest extends \PHPUnit_Framework_TestCase
     protected $modelMock;
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface
      */
     protected $relationProcessorMock;
 
@@ -48,10 +48,10 @@ class RelationCompositeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
         $this->relationProcessorMock = $this->getMockBuilder(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface'
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface'
         )->disableOriginalConstructor()->getMockForAbstractClass();
 
-        $this->entityRelationComposite = new \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite(
+        $this->entityRelationComposite = new \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite(
             $this->eventManagerMock,
             [
                 'default' => $this->relationProcessorMock
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/SnapshotTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php
similarity index 90%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/SnapshotTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php
index 36dd2997d93..a228106db64 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/SnapshotTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -13,12 +13,12 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class SnapshotTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshot;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata
      */
     protected $entityMetadata;
 
@@ -42,7 +42,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->entityMetadata = $this->getMock(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata',
             ['getFields'],
             [],
             '',
@@ -50,7 +50,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->entitySnapshot = $objectManager->getObject(
-            'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             ['metadata' => $this->entityMetadata]
         );
     }
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/ConnectionFactoryTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php
similarity index 93%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/ConnectionFactoryTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php
index 8b3ee72e722..011530e544e 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/ConnectionFactoryTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Type\Db;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Type\Db;
 
 use Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface;
 use Magento\Framework\DB\LoggerInterface;
-use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactory;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactory;
 use Magento\Framework\ObjectManagerInterface;
 
 class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/Pdo/MysqlTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/Pdo/MysqlTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php
index bab2946213e..05c7a395031 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/Pdo/MysqlTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Test\Unit\ModelResource\Type\Db\Pdo;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Type\Db\Pdo;
 
-use \Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql;
+use \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql;
 
 class MysqlTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/Module/ModuleResource.php b/lib/internal/Magento/Framework/Module/ModuleResource.php
index bbba5b33073..10b49c469e5 100644
--- a/lib/internal/Magento/Framework/Module/ModuleResource.php
+++ b/lib/internal/Magento/Framework/Module/ModuleResource.php
@@ -11,7 +11,7 @@ namespace Magento\Framework\Module;
 /**
  * Resource Model
  */
-class ModuleResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements \Magento\Framework\Module\ResourceInterface
+class ModuleResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \Magento\Framework\Module\ResourceInterface
 {
     /**
      * Database versions
diff --git a/lib/internal/Magento/Framework/Test/Unit/FlagTest.php b/lib/internal/Magento/Framework/Test/Unit/FlagTest.php
index da7593745b8..4cf45055b9f 100644
--- a/lib/internal/Magento/Framework/Test/Unit/FlagTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/FlagTest.php
@@ -55,7 +55,7 @@ class FlagTest extends \PHPUnit_Framework_TestCase
             ->method('getConnection')
             ->will($this->returnValue($connection));
 
-        $dbContextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $dbContextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $dbContextMock->expects($this->once())->method('getResources')->willReturn($appResource);
         $resource = $this->getMock(
             '\Magento\Framework\Flag\FlagResource',
diff --git a/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php b/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php
index e1904afd558..aecb780b108 100644
--- a/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php
+++ b/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php
@@ -17,7 +17,7 @@ class ObjectManager
      * @var array
      */
     protected $_specialCases = [
-        'Magento\Framework\Model\ModelResource\AbstractResource' => '_getResourceModelMock',
+        'Magento\Framework\Model\ResourceModel\AbstractResource' => '_getResourceModelMock',
         'Magento\Framework\TranslateInterface' => '_getTranslatorMock',
     ];
 
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php
index bc0b10094d9..5adce4658a7 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\ObjectManagerInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php
index 456b6f137b1..b2e3894c00b 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Interface DataProviderInterface
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php
index 09b29cad871..f53fbf5d1f4 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
 use Magento\Framework\Data\Collection\AbstractDb as DbCollection;
-use Magento\Framework\Model\ModelResource\Db\AbstractDb as DbResource;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb as DbResource;
 use Magento\Framework\Api\Filter;
 
 /**
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php
index ab9038ca128..4dd0dab9f34 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
 use Magento\Framework\Api;
-use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\Event\ManagerInterface as EventManager;
 use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
 use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
diff --git a/setup/src/Magento/Setup/Model/Installer.php b/setup/src/Magento/Setup/Model/Installer.php
index bf99f52be03..c3b0b306b14 100644
--- a/setup/src/Magento/Setup/Model/Installer.php
+++ b/setup/src/Magento/Setup/Model/Installer.php
@@ -15,7 +15,7 @@ use Magento\Framework\Component\ComponentRegistrar;
 use Magento\Framework\Config\ConfigOptionsListConstants;
 use Magento\Framework\Filesystem;
 use Magento\Framework\Exception\FileSystemException;
-use Magento\Framework\Model\ModelResource\Db\Context;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 use Magento\Framework\Module\ModuleList\Loader as ModuleLoader;
 use Magento\Framework\Module\ModuleListInterface;
 use Magento\Framework\Shell;
diff --git a/setup/src/Magento/Setup/Model/InstallerFactory.php b/setup/src/Magento/Setup/Model/InstallerFactory.php
index d67611d7311..253c62ef626 100644
--- a/setup/src/Magento/Setup/Model/InstallerFactory.php
+++ b/setup/src/Magento/Setup/Model/InstallerFactory.php
@@ -62,10 +62,10 @@ class InstallerFactory
             $this->serviceLocator->get('Magento\Framework\App\MaintenanceMode'),
             $this->serviceLocator->get('Magento\Framework\Filesystem'),
             $this->serviceLocator->get('Magento\Setup\Model\ObjectManagerProvider'),
-            new \Magento\Framework\Model\ModelResource\Db\Context(
+            new \Magento\Framework\Model\ResourceModel\Db\Context(
                 $this->getResource(),
-                $this->serviceLocator->get('Magento\Framework\Model\ModelResource\Db\TransactionManager'),
-                $this->serviceLocator->get('Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor')
+                $this->serviceLocator->get('Magento\Framework\Model\ResourceModel\Db\TransactionManager'),
+                $this->serviceLocator->get('Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor')
             ),
             $this->serviceLocator->get('Magento\Setup\Model\ConfigModel'),
             $this->serviceLocator->get('Magento\Framework\App\State\CleanupFiles'),
diff --git a/setup/src/Magento/Setup/Module/ConnectionFactory.php b/setup/src/Magento/Setup/Module/ConnectionFactory.php
index 51355fe3c39..8fdb1d0ff0b 100644
--- a/setup/src/Magento/Setup/Module/ConnectionFactory.php
+++ b/setup/src/Magento/Setup/Module/ConnectionFactory.php
@@ -7,11 +7,11 @@
  */
 namespace Magento\Setup\Module;
 
-use Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql;
+use Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql;
 use Magento\Framework\Stdlib;
 use Zend\ServiceManager\ServiceLocatorInterface;
 
-class ConnectionFactory implements \Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactoryInterface
+class ConnectionFactory implements \Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface
 {
     /**
      * @var ServiceLocatorInterface
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php
index 12c3759b50c..2c277f66eea 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php
@@ -42,9 +42,9 @@ class CartPriceRulesFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getId')
             ->will($this->returnValue('website_id'));
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php
index 1c55d224ef0..2e6625e107a 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php
@@ -47,9 +47,9 @@ class CatalogPriceRulesFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getWebsites')
             ->will($this->returnValue([$websiteMock]));
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php
index bd05e43a9eb..c5f8b6e18f6 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php
@@ -31,9 +31,9 @@ class ConfigurableProductsFixtureTest extends \PHPUnit_Framework_TestCase
     {
         $importMock = $this->getMock('\Magento\ImportExport\Model\Import', [], [], '', false);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php
index ea923b9b1db..0f787152d07 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php
@@ -132,9 +132,9 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getStores')
             ->willReturn([$storeMock]);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php
index dd3d0036829..9b144188510 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php
@@ -49,9 +49,9 @@ class SimpleProductsFixtureTest extends \PHPUnit_Framework_TestCase
 
         $importMock = $this->getMock('\Magento\ImportExport\Model\Import', [], [], '', false);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\ModelResource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
index c2daace4b61..c2927df015d 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
@@ -58,12 +58,12 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase
                 $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false),
             ],
             [
-                'Magento\Framework\Model\ModelResource\Db\TransactionManager',
-                $this->getMock('Magento\Framework\Model\ModelResource\Db\TransactionManager', [], [], '', false),
+                'Magento\Framework\Model\ResourceModel\Db\TransactionManager',
+                $this->getMock('Magento\Framework\Model\ResourceModel\Db\TransactionManager', [], [], '', false),
             ],
             [
-                'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor',
-                $this->getMock('Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', [], [], '', false),
+                'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
+                $this->getMock('Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false),
             ],
             [
                 'Magento\Setup\Model\ConfigModel',
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
index ad7a2aa68db..098e2108243 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
@@ -144,7 +144,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
     ];
 
     /**
-     * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     private $contextMock;
 
@@ -171,7 +171,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
         $this->maintenanceMode = $this->getMock('Magento\Framework\App\MaintenanceMode', [], [], '', false);
         $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
         $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
-        $this->contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false);
+        $this->contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $this->configModel = $this->getMock('Magento\Setup\Model\ConfigModel', [], [], '', false);
         $this->cleanupFiles = $this->getMock('Magento\Framework\App\State\CleanupFiles', [], [], '', false);
         $this->dbValidator = $this->getMock('Magento\Setup\Validator\DbValidator', [], [], '', false);
-- 
GitLab


From 4bec4eafeefa910430d25507c330e80246c106aa Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Mon, 12 Oct 2015 12:22:17 +0300
Subject: [PATCH 335/420] MAGETWO-42818: Verify outputs for Braintree module

 - Removed unnecessary @escapeNotVerified annotations
---
 .../view/adminhtml/templates/data_js.phtml    |   7 +-
 .../view/adminhtml/templates/form.phtml       | 161 ++++++++------
 .../templates/creditcard/delete.phtml         |  36 ++--
 .../frontend/templates/creditcard/edit.phtml  | 196 ++++++++----------
 .../frontend/templates/creditcard/index.phtml |  36 ++--
 .../view/frontend/templates/data_js.phtml     |   4 +-
 .../view/frontend/templates/form.phtml        | 154 +++++++++-----
 7 files changed, 329 insertions(+), 265 deletions(-)

diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml
index cbfe3dcda5f..70634e81b09 100644
--- a/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml
+++ b/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml
@@ -7,21 +7,20 @@
 /**
  * @var $block \Magento\Braintree\Block\Datajs
  */
-?>
-<?php
+
 $arrayData = [
     "kountId" => $this->helper('Magento\Braintree\Helper\Data')->getKountId() ?
         $this->helper('Magento\Braintree\Helper\Data')->getKountId() : false,
     "formId" =>$block->getFormId(),
     "merchantId" => $block->getMerchantId(),
-    "braintreeDataJs" => $block->getJsSrc(),
+    "braintreeDataJs" => $block->escapeUrl($block->getJsSrc()),
 ];
 $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($arrayData);
 ?>
 <script type="text/x-magento-init">
     {
         "body": {
-             "braintreeDataJs": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+             "braintreeDataJs": <?php /* @noEscape */ echo $serializedFormData ?>
         }
     }
 </script>
diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
index f13f2d77b1c..fcfed770a5a 100644
--- a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
@@ -7,110 +7,143 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Braintree\Block\Form $block */
-$_form = $block;
-$_code = $_form->getMethodCode();
-$_storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards();
-$_useVault = $block->useVault();
-$_useCvv = $block->useCvv();
-$clientToken = $block->getClientToken();
+$code = $block->getMethodCode();
+$storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards();
+$useVault = $block->useVault();
+$useCvv = $block->useCvv();
+$clientToken = $block->escapeHtml($block->getClientToken());
 $isFraudDetectionEnabled = $block->isFraudDetectionEnabled();
 $braintreeDataJs = $block->getBraintreeDataJs();
 $formData = [
-    "useVault" => $_useVault,
-    "useCvv"  => $_useCvv,
+    "useVault" => $useVault,
+    "useCvv"  => $useCvv,
     "clientToken" => $clientToken,
-    "code" => $_code,
+    "code" => $code,
     "isFraudDetectionEnabled" => $isFraudDetectionEnabled,
     "braintreeDataJs"=> $braintreeDataJs,
 ];
 $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
-<input id="<?php /* @escapeNotVerified */ echo $_code ?>_payment_method" type="hidden" name="payment[method]" value="<?php /* @escapeNotVerified */ echo $_code ?>" />
-<div id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" class="admin__page-section-item" style="display:none;"
-    data-mage-init='{"braintreeCcForm":<?php /* @escapeNotVerified */ echo $serializedFormData ?>}'
+<input id="<?php /* @noEscape */ echo $code; ?>_payment_method" type="hidden" name="payment[method]"
+       value="<?php /* @noEscape */ echo $code; ?>" />
+<div id="payment_form_<?php /* @noEscape */ echo $code; ?>" class="admin__page-section-item" style="display:none;"
+    data-mage-init='{"braintreeCcForm":<?php /* @noEscape */ echo $serializedFormData; ?>}'
     >
     <input type="hidden" name="payment[payment_method_nonce]" id="braintree_nonce" value="" />
     <input type="hidden" name="payment[cc_last4]" id="cc_last4" value="" />
     <?php if ($isFraudDetectionEnabled): ?>
-    <input type="hidden" name="payment[device_data]" id="braintree_device_id" value="" />
+        <input type="hidden" name="payment[device_data]" id="braintree_device_id" value="" />
     <?php endif; ?>
-    <?php if ($_storedCards): ?>
-    <fieldset class="admin__fieldset">
-        <div class="admin__field" id="<?php /* @escapeNotVerified */ echo $_code ?>_token_selector">
-            <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token"><?php /* @escapeNotVerified */ echo __('Payment Information') ?></label>
-            <div class="admin__field-control control">
-                <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token" name="payment[cc_token]" class="select admin__control-select">
-                    <?php foreach ($_storedCards as $creditCard): ?>
-                        <option value="<?php /* @escapeNotVerified */ echo $creditCard->token?>" <?php echo $creditCard->default ? 'selected="selected"' : '' ?>>
-                            <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber  . ' - ' . $creditCard->cardType ?>
-                        </option>
-                    <?php endforeach; ?>
-                        <option value=''><?php /* @escapeNotVerified */ echo __('Add new card') ?></option>
-                </select>
+    <?php if ($storedCards): ?>
+        <fieldset class="admin__fieldset">
+            <div class="admin__field" id="<?php /* @noEscape */ echo $code; ?>_token_selector">
+                <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_token">
+                    <?php echo $block->escapeHtml(__('Payment Information')); ?>
+                </label>
+                <div class="admin__field-control control">
+                    <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]"
+                            class="select admin__control-select">
+                        <?php foreach ($storedCards as $creditCard): ?>
+                            <option value="<?php echo $block->escapeHtml($creditCard->token); ?>"
+                                <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>>
+                                <?php echo $block->escapeHtml($creditCard->maskedNumber . ' - ' . $creditCard->cardType); ?>
+                            </option>
+                        <?php endforeach; ?>
+                        <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option>
+                    </select>
+                </div>
             </div>
-        </div>
-    </fieldset>
+        </fieldset>
     <?php endif; ?>
     <fieldset class="admin__fieldset hide_if_token_selected">
     <div class="admin__field">
-        <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" ><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?><span class="required">*</span></label>
+        <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_type" >
+            <?php echo $block->escapeHtml(__('Credit Card Type')); ?><span class="required">*</span>
+        </label>
         <div class="admin__field-control control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry _required select admin__control-select validate-cc-type-select">
-                <option value="">--<?php /* @escapeNotVerified */ echo __('Please Select')?>--</option>
-            <?php $_ccType = $_form->getInfoData('cc_type') ?>
-            <?php foreach ($_form->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if($_typeCode==$_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
-            <?php endforeach ?>
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]"
+                    class="required-entry _required select admin__control-select validate-cc-type-select">
+                <option value="">--<?php echo $block->escapeHtml(__('Please Select')); ?>--</option>
+            <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                    <?php if($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
+                    <?php echo $block->escapeHtml($typeName); ?>
+                </option>
+            <?php endforeach; ?>
             </select>
         </div>
     </div>
     </fieldset>
     <fieldset class="admin__fieldset hide_if_token_selected">
     <div class="admin__field">
-        <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?><span class="required">*</span></label>
+        <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_number">
+            <?php echo $block->escapeHtml(__('Credit Card Number')); ?><span class="required">*</span>
+        </label>
         <div class="admin__field-control control">
-            <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" data-encrypted-name="payment[cc_number]"  title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text admin__control-text validate-cc-number validate-cc-type" value="" />
+            <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" data-encrypted-name="payment[cc_number]"
+                   title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>"
+                   class="input-text admin__control-text validate-cc-number validate-cc-type" value="" />
         </div>
     </div>
     </fieldset>
     <fieldset class="admin__fieldset hide_if_token_selected">
-    <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div" class="admin__field">
-        <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" ><?php /* @escapeNotVerified */ echo __('Expiration Date') ?><span class="required">*</span></label>
+    <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div" class="admin__field">
+        <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_expiration">
+            <?php echo $block->escapeHtml(__('Expiration Date')); ?><span class="required">*</span>
+        </label>
         <div class="admin__field-control control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="month validate-cc-exp required-entry _required select admin__control-select">
-            <?php $_ccExpMonth = $_form->getInfoData('cc_exp_month') ?>
-            <?php foreach ($_form->getCcMonths() as $k=>$v): ?>
-                <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-            <?php endforeach ?>
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]"
+                    class="month validate-cc-exp required-entry _required select admin__control-select">
+                <?php foreach ($block->getCcMonths() as $k=>$v): ?>
+                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                        <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($v); ?></option>
+                <?php endforeach; ?>
             </select>
-            <?php $_ccExpYear = $_form->getInfoData('cc_exp_year') ?>
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="year required-entry _required select admin__control-select">
-            <?php foreach ($_form->getCcYears() as $k=>$v): ?>
-                <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]"
+                    class="year required-entry _required select admin__control-select">
+            <?php foreach ($block->getCcYears() as $k => $v): ?>
+                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                    <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>>
+                    <?php echo $block->escapeHtml($v); ?>
+                </option>
             <?php endforeach ?>
             </select>
         </div>
     </div>
     </fieldset>
-    <?php echo $_form->getChildHtml() ?>
-    <?php if($_form->hasVerification()): ?>
-    <fieldset class="admin__fieldset hide_if_token_selected">
-        <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div" class="admin__field">
-            <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" ><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?><span class="required">*</span></label>
-            <div class="admin__field-control control">
-                <div class="v-fix">
-                    <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text admin__control-text cvv required-entry validate-cc-cvn" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" data-encrypted-name="payment[cc_cid]" value="" />
+    <?php echo $block->getChildHtml(); ?>
+    <?php if ($block->hasVerification()): ?>
+        <fieldset class="admin__fieldset hide_if_token_selected">
+            <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div" class="admin__field">
+                <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_cid">
+                    <?php echo $block->escapeHtml(__('Card Verification Number')); ?><span class="required">*</span>
+                </label>
+
+                <div class="admin__field-control control">
+                    <div class="v-fix">
+                        <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                               class="input-text admin__control-text cvv required-entry validate-cc-cvn"
+                               id="<?php /* @noEscape */ echo $code; ?>_cc_cid" data-encrypted-name="payment[cc_cid]" value=""/>
+                    </div>
                 </div>
             </div>
-        </div>
-    </fieldset>
+        </fieldset>
     <?php endif; ?>
     <?php if($_useVault): ?>
-    <fieldset class="admin__fieldset hide_if_token_selected">
-        <div id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault_div" style="text-align:left;" class="">
-            <input type="checkbox" title="<?php /* @escapeNotVerified */ echo __('Save this card for future use') ?>" class="input-checkbox" id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" name="payment[store_in_vault]" value="1" />
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" style="float:none;"><?php /* @escapeNotVerified */ echo __('Save this card for future use') ?></label>
-        </div>
-    </fieldset>
+        <fieldset class="admin__fieldset hide_if_token_selected">
+            <div id="<?php /* @noEscape */ echo $code; ?>_store_in_vault_div" style="text-align:left;" class="">
+                <input type="checkbox" title="<?php echo $block->escapeHtml(__('Save this card for future use')); ?>"
+                       class="input-checkbox" id="<?php /* @noEscape */ echo $code; ?>_store_in_vault"
+                       name="payment[store_in_vault]" value="1"/>
+                <label for="<?php /* @noEscape */ echo $code; ?>_store_in_vault" style="float:none;">
+                    <?php echo $block->escapeHtml(__('Save this card for future use')); ?>
+
+                </label>
+            </div>
+        </fieldset>
     <?php endif; ?>
 </div>
\ No newline at end of file
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml
index b9011bdd4f5..cba8e56e5aa 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml
@@ -6,46 +6,54 @@
 
 // @codingStandardsIgnoreFile
 
-    $creditCard = $block->creditCard();
-    $token = $creditCard->token;
+/**
+ * @var \Magento\Braintree\Block\Creditcard\Management $block
+ */
+$creditCard = $block->creditCard();
+$token = $block->escapeHtml($creditCard->token);
 ?>
 <?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml();?>
-<form action="<?php /* @escapeNotVerified */ echo $block->getDeleteConfirmUrl() ?>" method="post" id="delete-form"
+<form action="<?php echo $block->escapeUrl($block->getDeleteConfirmUrl()); ?>" method="post" id="delete-form"
       xmlns="http://www.w3.org/1999/html">
     <fieldset class="fieldset info">
-        <legend class="legend"><?php /* @escapeNotVerified */ echo __('Please confirm that you want to delete this credit card') ?></legend>
+        <legend class="legend">
+            <?php echo $block->escapeHtml(__('Please confirm that you want to delete this credit card')); ?>
+        </legend>
         <div class="field">
             <ul>
                 <li>
-                    <b><?php /* @escapeNotVerified */ echo __('Credit Card Number');?></b>
+                    <b><?php echo $block->escapeHtml(__('Credit Card Number'));?></b>
                 </li>
                 <li>
-                    <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber;?>
+                    <?php echo $block->escapeHtml($creditCard->maskedNumber);?>
                 </li>
                 <li>
-                    <b><?php /* @escapeNotVerified */ echo __('Expiration Date');?></b>
+                    <b><?php echo $block->escapeHtml(__('Expiration Date'));?></b>
                 </li>
                 <li>
-                    <?php /* @escapeNotVerified */ echo $creditCard->expirationDate; ?>
+                    <?php echo $block->escapeHtml($creditCard->expirationDate); ?>
                 </li>
                 <li>
-                    <b><?php /* @escapeNotVerified */ echo __('Cardholder Name');?></b>
+                    <b><?php echo $block->escapeHtml(__('Cardholder Name'));?></b>
                 </li>
                 <li>
-                    <?php /* @escapeNotVerified */ echo $creditCard->cardholderName;?>
+                    <?php echo $block->escapeHtml($creditCard->cardholderName);?>
                 </li>
             </ul>
         </div>
     </fieldset>
-    <input type="hidden" name="token" value="<?php /* @escapeNotVerified */ echo $token ?>">
+    <input type="hidden" name="token" value="<?php /* @noEscape */ echo $token; ?>">
     <div class="actions-toolbar">
         <div class="primary">
             <button type="submit" id="opc-submit" data-role="opc-submit" class="action save primary"
-                    title="<?php /* @escapeNotVerified */ echo __('Delete') ?>" ><?php /* @escapeNotVerified */ echo __('Delete') ?></span></button>
+                    title="<?php echo $block->escapeHtml(__('Delete')); ?>" >
+                <?php echo $block->escapeHtml(__('Delete')); ?>
+            </button>
         </div>
         <div class="secondary">
-            <a class="action back" href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>"><span><span><small>&laquo; </small>
-                        <?php /* @escapeNotVerified */ echo __('Back') ?></span></a>
+            <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>">
+                <span><small>&laquo; </small><?php echo $block->escapeHtml(__('Back')); ?></span>
+            </a>
         </div>
     </div>
 
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
index 073009c4c6e..aa1a8e1f728 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
@@ -53,21 +53,37 @@ if ($block->isEditMode()) {
     $defaultPostalCode = '';
     $defaultCountryCodeAlpha2 = '';
 }
+$streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street');
+$default = $defaultCountryCodeAlpha2;
+
+$clientToken = $block->getClientToken();
+$formData = [
+    "clientToken" => $clientToken,
+    'ajaxSaveUrl' => $block->escapeUrl($block->getAjaxSaveUrl()),
+    'isEditMode' => $block->isEditMode() ? true : false,
+    'cardToken' => $block->isEditMode() ? $block->escapeHtml($creditCard->token) : '',
+    'backUrl' => $block->escapeUrl($block->getBackUrl()),
+    'hasVerification' => $block->hasVerification(),
+    "countrySpecificCardTypes" => $countrySpecificCardTypeConfig,
+    "applicableCardTypes" => $applicableCardTypeConfig,
+    "cardTypes" => $block->getCcAvailableTypes(),
+    "isFraudDetectionEnabled" => $block->isFraudDetectionEnabled()
+];
+$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
 ?>
 <form
-    class="form form-edit-credit-card"
-    action='<?php /* @escapeNotVerified */ echo $block->getFormAction() ?>'
+    class="form form-edit-credit-card"  action="<?php echo $block->escapeUrl($block->getFormAction()); ?>"
     method="post" id="form-validate" data-mage-init='{"validation":{}}'>
     <?php echo $block->getBlockHtml('formkey'); ?>
-    <fieldset class="fieldset info" data-hasrequired="<?php /* @escapeNotVerified */ echo __('* Required Fields') ?>">
+    <fieldset class="fieldset info" data-hasrequired="<?php echo $block->escapeHtml(__('* Required Fields')); ?>">
         <legend class="legend">
-            <span><?php /* @escapeNotVerified */ echo __('Credit Card') ?></span>
+            <span><?php echo $block->escapeHtml(__('Credit Card')); ?></span>
         </legend>
         <br>
 
         <div class="field name required">
             <label for="credit_card_cardholder_name" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Cardholder Name') ?></span>
+                <span><?php echo $block->escapeHtml(__('Cardholder Name')); ?></span>
             </label>
 
             <div class="control">
@@ -75,40 +91,32 @@ if ($block->isEditMode()) {
                     type="text"
                     class="input-text required-entry"
                     id="credit_card_cardholder_name"
-                    value="<?php /* @escapeNotVerified */ echo $defaultCardholder ?>"
+                    value="<?php echo $block->escapeHtml($defaultCardholder); ?>"
                     data-validate="{required:true}">
             </div>
         </div>
         <div class="field required type">
             <label for="credit_card_type" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span>
+                <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
             </label>
 
             <div class="control">
                 <select name="credit_card_type" id="credit_card_type" data-container="credit_card_type"
                         data-validate='{required:true, "validate-cc-type-select":"#credit_card_number"}'>
-                    <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--') ?></option>
-                    <?php
-                    foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName) :
-                        ?>
-                        <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"
-                            <?php
-                            if (stripos($_typeName, $defaultCcType) !== false) :
-                                ?> selected="selected"
-                            <?php
-                            endif;
-                            ?>>
-                            <?php /* @escapeNotVerified */ echo $_typeName ?>
+                    <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option>
+                    <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                        <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                            <?php if (stripos($typeName, $defaultCcType) !== false): ?> selected="selected"<?php endif; ?>>
+                            <?php echo $block->escapeHtml($typeName); ?>
                         </option>
-                    <?php
-                    endforeach;
+                    <?php endforeach;
                     ?>
                 </select>
             </div>
         </div>
         <div class="field name required">
-            <label for="credit_card_number" class="label"><span>
-                        <?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span>
+            <label for="credit_card_number" class="label">
+                <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
             </label>
 
             <div class="control">
@@ -118,19 +126,13 @@ if ($block->isEditMode()) {
                        class="input-text required-entry validate-cc-number"
                        id="credit_card_number"
                        autocomplete="off"
-                    <?php
-                    if ($block->isEditMode()) :
-                        ?>
-                        placeholder="<?php /* @escapeNotVerified */ echo $maskedNumber ?>"
-                    <?php
-                    endif;
-                    ?>
+                    <?php if ($block->isEditMode()): ?> placeholder="<?php echo $block->escapeHtml($maskedNumber); ?>"<?php endif; ?>
                        data-validate="{'required-number':true, 'validate-cc-number':'#credit_card_number', 'validate-cc-type':'#credit_card_type'}">
             </div>
         </div>
         <div class="field sp-methods required">
             <label for="credit_card_expiration_date" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span>
+                <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
             </label>
 
             <div class="control">
@@ -143,14 +145,12 @@ if ($block->isEditMode()) {
                                 id="credit_card_expiration"
                                 class="month validate-cc-exp required-entry"
                                 data-validate="{'required-number':true, 'validate-cc-exp':'#credit_card_expiration_yr'}">
-                                <?php
-                                foreach ($block->getCcMonths() as $k => $v) :
-                                    ?>
-                                    <option
-                                        value="<?php echo $k ? $k : '' ?>"<?php if ($k == $defaultExpMonth) : ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                                <?php
-                                endforeach;
-                                ?>
+                                <?php foreach ($block->getCcMonths() as $k => $v): ?>
+                                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                                        <?php if ($k == $defaultExpMonth): ?> selected="selected"<?php endif; ?>>
+                                        <?php echo $block->escapeHtml($v); ?>
+                                    </option>
+                                <?php endforeach; ?>
                             </select>
                         </div>
                     </div>
@@ -163,22 +163,12 @@ if ($block->isEditMode()) {
                                 id="credit_card_expiration_yr"
                                 class="year required-entry"
                                 data-validate="{required:true}">
-                                <?php
-                                foreach ($block->getCcYears() as $k => $v) :
-                                    ?>
-                                    <option
-                                        value="<?php echo $k ? $k : ''; ?>"
-                                        <?php
-                                        if ($k == $defaultExpYear) :
-                                            ?> selected="selected"
-                                        <?php
-                                        endif;
-                                        ?>>
-                                        <?php /* @escapeNotVerified */ echo $v ?>
+                                <?php foreach ($block->getCcYears() as $k => $v): ?>
+                                    <option value="<?php /* @noEscape */ echo $k ? $k : ''; ?>"
+                                        <?php if ($k == $defaultExpYear): ?> selected="selected"<?php endif; ?>>
+                                        <?php echo $block->escapeHtml($v); ?>
                                     </option>
-                                <?php
-                                endforeach;
-                                ?>
+                                <?php endforeach; ?>
                             </select>
                         </div>
                     </div>
@@ -189,13 +179,13 @@ if ($block->isEditMode()) {
         <?php if ($block->hasVerification()): ?>
         <div class="field sp-methods required">
             <label for="credit_card_cvv" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('CVV') ?></span>
+                <span><?php echo $block->escapeHtml(__('CVV')); ?></span>
             </label>
 
             <div class="control">
                 <input
                     type="text"
-                    title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>"
+                    title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
                     class="input-text cvv required-entry validate-cc-cvn validate-cc-cvn-autodetect"
                     name="credit_card_cvv"
                     data-container="credit_card_cvv"
@@ -203,14 +193,14 @@ if ($block->isEditMode()) {
                     value=""
                     autocomplete="off"
                     data-validate="{'required-number':true, 'validate-cc-cvn':'#credit_card_type'}">
-                <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') .
-                    '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' .
-                    __('Card Verification Number Visual Reference') . '\" />'; ?>
+                <?php $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Checkout::cvv.png')) .
+                    '\" alt=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" title=\"' .
+                    $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?>
                 <div class="note">
                     <a href="#" id="credit_card-cvv-what-is-this" class="action cvv"
                        title="<?php echo $block->escapeHtml(__('What is this?')); ?>"
-                       data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'>
-                        <span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span>
+                       data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'>
+                        <span><?php echo $block->escapeHtml(__('What is this?')); ?></span>
                     </a>
                 </div>
             </div>
@@ -224,58 +214,61 @@ if ($block->isEditMode()) {
 
             <div class="control">
                 <input type="checkbox" name="credit_card[options][make_default]" id="credit_card_options_make_default"
-                       value="1" <?php /* @escapeNotVerified */ echo $isCCDefault ? "checked" : "" ?>>
+                       value="1" <?php /* @noEscape */ echo $isCCDefault ? "checked" : "" ?>>
                 <label for="credit_card_options_make_default" class="label">
-                    <span><?php /* @escapeNotVerified */ echo __('Make Default') ?></span>
+                    <span><?php echo $block->escapeHtml(__('Make Default')); ?></span>
                 </label>
             </div>
         </div>
     </fieldset>
     <fieldset class="fieldset info">
         <legend class="legend">
-            <span><?php /* @escapeNotVerified */ echo __('Billing Address') ?></span>
+            <span><?php echo $block->escapeHtml(__('Billing Address')); ?></span>
         </legend>
         <div class="field name billing_address_first_name required">
             <label for="billing_address_first_name" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('First Name') ?></span>
+                <span><?php echo $block->escapeHtml(__('First Name')); ?></span>
             </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry " name="credit_card[billing_address][first_name]"
                        id="billing_address_first_name"
-                       value="<?php /* @escapeNotVerified */ echo $defaultFirstName ?>"
+                       value="<?php echo $block->escapeHtml($defaultFirstName); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
         <div class="field name billing_address_last_name required">
-            <label for="billing_address_last_name" class="label"><span><?php /* @escapeNotVerified */ echo __('Last Name') ?></span></label>
+            <label for="billing_address_last_name" class="label">
+                <span><?php echo $block->escapeHtml(__('Last Name')); ?></span>
+            </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry " name="credit_card[billing_address][last_name]"
                        id="billing_address_last_name"
-                       value="<?php /* @escapeNotVerified */ echo $defaultLastName ?>"
+                       value="<?php echo $block->escapeHtml($defaultLastName); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
         <div class="field name billing_address_company">
-            <label for="billing_address_company" class="label"><span><?php /* @escapeNotVerified */ echo __('Company') ?></span></label>
+            <label for="billing_address_company" class="label">
+                <span><?php echo $block->escapeHtml(__('Company')); ?></span>
+            </label>
 
             <div class="control">
                 <input type="text" class="input-text " name="credit_card[billing_address][company]"
                        id="billing_address_company"
-                       value="<?php /* @escapeNotVerified */ echo $defaultCompany ?>">
+                       value="<?php echo $block->escapeHtml($defaultCompany); ?>">
             </div>
         </div>
-        <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?>
         <div class="field name billing_address_street_address required">
             <label for="billing_address_street_address" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Address') ?></span>
+                <span><?php echo $block->escapeHtml(__('Address')); ?></span>
             </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry "
                        name="credit_card[billing_address][street_address]" id="billing_address_street_address"
-                       value="<?php /* @escapeNotVerified */ echo $defaultStreetAddress ?>"
+                       value="<?php echo $block->escapeHtml($defaultStreetAddress); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
@@ -287,95 +280,78 @@ if ($block->isEditMode()) {
             <div class="control">
                 <input type="text" class="input-text " name="credit_card[billing_address][extended_address]"
                        id="billing_address_extended_address"
-                       value="<?php /* @escapeNotVerified */ echo $defaultExtendedAddress ?>">
+                       value="<?php echo $block->escapeHtml($defaultExtendedAddress); ?>">
             </div>
         </div>
         <div class="field name billing_address_locality required">
             <label for="billing_address_locality" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('City') ?></span>
+                <span><?php echo $block->escapeHtml(__('City')); ?></span>
             </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry " name="credit_card[billing_address][locality]"
                        id="billing_address_locality"
-                       value="<?php /* @escapeNotVerified */ echo $defaultLocality ?>"
+                       value="<?php echo $block->escapeHtml($defaultLocality); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
         <div class="field region billing_address_region required">
             <label for="billing_address_region" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('State/Province') ?></span>
+                <span><?php echo $block->escapeHtml(__('State/Province')); ?></span>
             </label>
 
             <div class="control">
                 <select id="billing_address_region_id" name="credit_card[billing_address][region_id]"
-                        title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="validate-select" style="display:none;"
+                        title="<?php echo $block->escapeHtml(__('State/Province')); ?>" class="validate-select" style="display:none;"
                         data-validate="{'validate-select':true}">
-                    <option value=""><?php /* @escapeNotVerified */ echo __('Please select region, state or province') ?></option>
+                    <option value=""><?php echo $block->escapeHtml(__('Please select region, state or province')); ?></option>
                 </select>
                 <input type="text" class="input-text " name="credit_card[billing_address][region]"
                        id="billing_address_region"
-                       value="<?php /* @escapeNotVerified */ echo $block->getPostParam('customer.creditCard.billingAddress.region', $defaultRegion) ?>">
+                       value="<?php echo $block->escapeHtml($block->getPostParam('customer.creditCard.billingAddress.region', $defaultRegion)); ?>">
             </div>
         </div>
         <div class="field zip billing_address_postal_code required">
             <label for="billing_address_postal_code" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?></span>
+                <span><?php echo $block->escapeHtml(__('Zip/Postal Code')); ?></span>
             </label>
             <div class="control">
                 <input type="text" class="input-text required-entry validate-zip-international "
                        name="credit_card[billing_address][postal_code]" id="billing_address_postal_code"
-                       value="<?php /* @escapeNotVerified */ echo $defaultPostalCode ?>"
+                       value="<?php echo $block->escapeHtml($defaultPostalCode); ?>"
                        data-validate="{required:true, 'validate-zip-international':true}">
             </div>
         </div>
         <div class="field name billing_address_country required">
             <label for="billing_address_country" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Country') ?></span>
+                <span><?php echo $block->escapeHtml(__('Country')); ?></span>
             </label>
 
             <div class="control">
-                <?php $default = $defaultCountryCodeAlpha2 ?>
-                <?php /* @escapeNotVerified */ echo $block->countrySelect('credit_card' . '[billing_address][country_code_alpha2]', 'billing_address_country', $default) ?>
+                <?php echo $block->escapeHtml($block->countrySelect('credit_card' . '[billing_address][country_code_alpha2]', 'billing_address_country', $default)); ?>
             </div>
         </div>
     </fieldset>
     <div class="actions-toolbar">
         <div class="primary">
             <button type="submit" id="opc-submit" data-role="opc-submit" class="action save primary"
-                    title="<?php /* @escapeNotVerified */ echo __('Submit') ?>">
-                <span><?php /* @escapeNotVerified */ echo __('Submit') ?></span>
+                    title="<?php echo $block->escapeHtml(__('Submit')); ?>">
+                <span><?php echo $block->escapeHtml(__('Submit')); ?></span>
             </button>
         </div>
         <div class="secondary">
-            <a class="action back" href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>">
-                <span><span><small>&laquo; </small><?php /* @escapeNotVerified */ echo __('Back') ?></span>
+            <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>">
+                <span><span><small>&laquo; </small><?php echo $block->escapeUrl(__('Back')); ?></span>
             </a>
         </div>
     </div>
 </form>
 
-<?php
-$clientToken = $block->getClientToken();
-$formData = [
-    "clientToken" => $clientToken,
-    'ajaxSaveUrl' => $block->getAjaxSaveUrl(),
-    'isEditMode' => $block->isEditMode() ? true : false,
-    'cardToken' => $block->isEditMode() ? $creditCard->token : '',
-    'backUrl' => $block->getBackUrl(),
-    'hasVerification' => $block->hasVerification(),
-    "countrySpecificCardTypes" => $countrySpecificCardTypeConfig,
-    "applicableCardTypes" => $applicableCardTypeConfig,
-    "cardTypes" => $block->getCcAvailableTypes(),
-    "isFraudDetectionEnabled" => $block->isFraudDetectionEnabled()
-];
-$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
-?>
 <script type="text/x-magento-init">
     {
         "#form-validate": {
             "validation": {},
-             "braintreeEditForm": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+             "braintreeEditForm": <?php /* @noEscape */ echo $serializedFormData; ?>
         },
         "#billing_address_country": {
             "regionUpdater": {
@@ -384,13 +360,11 @@ $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonE
                 "regionInputId": "#billing_address_region",
                 "postcodeId": "#billing_address_region",
                 "form": "#form-validate",
-                "regionJson": <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>,
-                "defaultRegion": "<?php /* @escapeNotVerified */ echo $defaultRegionId ?>",
+                "regionJson": <?php /* @noEscape */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson(); ?>,
+                "defaultRegion": "<?php echo $block->escapeHtml($defaultRegionId); ?>",
                 "countriesWithOptionalZip":
-                <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?>
+                <?php /* @noEscape */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true); ?>
             }
         }
     }
-
-
 </script>
\ No newline at end of file
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml
index f4cef98141b..fd9ee17028b 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml
@@ -7,14 +7,18 @@
 // @codingStandardsIgnoreFile
 
 /** @var $block \Magento\Braintree\Block\Creditcard\Management */
-    $_storedCards = $block->getCurrentCustomerStoredCards();
+$storedCards = $block->getCurrentCustomerStoredCards();
 ?>
 <div class="page-title title-buttons">
     <?php if ($block->getUsesVault()): ?>
-        <button type="button" title="<?php /* @escapeNotVerified */ echo __('Add Credit Card') ?>" class="action subscribe primary" onclick="window.location='<?php /* @escapeNotVerified */ echo $block->getAddUrl() ?>';"><span><span><?php /* @escapeNotVerified */ echo __('Add Credit Card') ?></span></span></button>
-    <?php endif ?>
+        <button type="button" title="<?php echo $block->escapeHtml(__('Add Credit Card')); ?>"
+                class="action subscribe primary"
+                onclick="window.location='<?php echo $block->escapeUrl($block->getAddUrl()) ?>';">
+            <span><span><?php echo $block->escapeHtml(__('Add Credit Card')); ?></span></span>
+        </button>
+    <?php endif; ?>
 </div>
-<?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml() ?>
+<?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml(); ?>
 <?php if (count($_storedCards)): ?>
     <table class="data-table" id="my-quotes-table">
         <col width="1" />
@@ -24,23 +28,27 @@
         <col width="1" />
         <thead>
             <tr>
-                <th><?php /* @escapeNotVerified */ echo __('Type') ?></th>
-                <th><?php /* @escapeNotVerified */ echo __('Card Number') ?></th>
-                <th><?php /* @escapeNotVerified */ echo __('Is Default') ?></th>
-                <th colspan="2"><?php /* @escapeNotVerified */ echo __('Actions') ?></th>
+                <th><?php echo $block->escapeHtml(__('Type')); ?></th>
+                <th><?php echo $block->escapeHtml(__('Card Number')); ?></th>
+                <th><?php echo $block->escapeHtml(__('Is Default')); ?></th>
+                <th colspan="2"><?php echo $block->escapeHtml(__('Actions')); ?></th>
             </tr>
         </thead>
         <tbody>
-            <?php foreach ($_storedCards as $card):?>
+            <?php foreach ($storedCards as $card):?>
                 <tr>
-                    <td><?php /* @escapeNotVerified */ echo $card->cardType ?></td>
-                    <td><?php /* @escapeNotVerified */ echo $card->maskedNumber ?></td>
-                    <td><?php /* @escapeNotVerified */ echo ($card->default) ? __('Yes') : __('No') ?></td>
+                    <td><?php echo $block->escapeHtml($card->cardType); ?></td>
+                    <td><?php echo $block->escapeHtml($card->maskedNumber); ?></td>
+                    <td><?php /* @noEscape */ echo ($card->default) ? $block->escapeHtml(__('Yes')) : $block->escapeHtml(__('No')); ?></td>
                     <td>
-                        <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl($card->token) ?>"><?php /* @escapeNotVerified */ echo __('Edit')?></a>
+                        <a href="<?php echo $block->escapeUrl($block->getEditUrl($card->token)); ?>">
+                            <?php echo $block->escapeHtml(__('Edit')); ?>
+                        </a>
                     </td>
                     <td>
-                        <a href="<?php /* @escapeNotVerified */ echo $block->getDeleteUrl($card->token) ?>"><?php /* @escapeNotVerified */ echo __('Delete')?></a>
+                        <a href="<?php echo $block->escapeUrl($block->getDeleteUrl($card->token)); ?>">
+                            <?php echo $block->escapeHtml(__('Delete'));?>
+                        </a>
                     </td>
                 </tr>
             <?php endforeach; ?>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml b/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml
index cbfe3dcda5f..14579540152 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml
@@ -14,14 +14,14 @@ $arrayData = [
         $this->helper('Magento\Braintree\Helper\Data')->getKountId() : false,
     "formId" =>$block->getFormId(),
     "merchantId" => $block->getMerchantId(),
-    "braintreeDataJs" => $block->getJsSrc(),
+    "braintreeDataJs" => $block->escapeUrl($block->getJsSrc()),
 ];
 $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($arrayData);
 ?>
 <script type="text/x-magento-init">
     {
         "body": {
-             "braintreeDataJs": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+             "braintreeDataJs": <?php /* @noEscape */ echo $serializedFormData; ?>
         }
     }
 </script>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/form.phtml b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
index f740ad803b1..e3a32a89da2 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
@@ -7,75 +7,112 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Braintree\Block\Form $block */
-$_code = $block->getMethodCode();
-$_loggedIn = $block->isCustomerLoggedIn();
-$_storedCards = $block->getStoredCards();
-$_useVault = $_loggedIn && $block->useVault() && count($_storedCards);
-$_autoDetection = $block->isCcDetectionEnabled();
-$clientToken = $block->getClientToken();
+$code = $block->getMethodCode();
+$loggedIn = $block->isCustomerLoggedIn();
+$storedCards = $block->getStoredCards();
+$useVault = $loggedIn && $block->useVault() && count($storedCards);
+$autoDetection = $block->isCcDetectionEnabled();
+$clientToken = $block->escapeHtml($block->getClientToken());
+$formData = [
+    "useVault" => $useVault,
+    "clientToken" => $clientToken,
+    "autoDetection" => $autoDetection,
+    "loggedIn" => $loggedIn,
+];
+$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
-<fieldset class="fieldset items braintree" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;">
+<fieldset class="fieldset items braintree" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <input type="hidden" name="payment[payment_method_nonce]" id="braintree_nonce" value="" />
-    <input type="hidden" name="payment[cc_last4]" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_last4" value="" />
-    <?php if ($_autoDetection) : ?>
+    <input type="hidden" name="payment[cc_last4]" id="<?php /* @noEscape */ echo $code; ?>_cc_last4" value="" />
+    <?php if ($autoDetection) : ?>
         <input type="hidden" id="card_type_autoselect" value="" />
     <?php endif; ?>
-    <?php if ($_useVault): ?>
-        <li id="<?php /* @escapeNotVerified */ echo $_code ?>_token_selector">
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token"><?php /* @escapeNotVerified */ echo __('Payment Information') ?></label>
+    <?php if ($useVault): ?>
+        <li id="<?php /* @noEscape */ echo $code; ?>_token_selector">
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_token">
+                <?php echo $block->escapeHtml(__('Payment Information')); ?>
+            </label>
             <div class="input-box">
-                <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token" name="payment[cc_token]">
-                    <?php foreach ($_storedCards as $creditCard): ?>
-                        <option value="<?php /* @escapeNotVerified */ echo $creditCard->token?>" <?php echo $creditCard->default ? 'selected="selected"' : '' ?>>
-                            <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber . ' - ' . $creditCard->cardType; ?>
+                <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]">
+                    <?php foreach ($storedCards as $creditCard): ?>
+                        <option value="<?php echo $block->escapeHtml($creditCard->token); ?>"
+                            <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : '' ?>>
+                            <?php echo $block->escapeHtml($creditCard->maskedNumber . ' - ' . $creditCard->cardType); ?>
                         </option>
                     <?php endforeach; ?>
-                        <option value=''><?php /* @escapeNotVerified */ echo __('Add new card') ?></option>
+                        <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option>
                 </select>
             </div>
         </li>
     <?php endif; ?>
     <div class="field type required hide_if_token_selected">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
+        </label>
         <div class="control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"
-                    data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"}}'
-                    name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"}' class="select">
-                <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option>
-                <?php $_ccType = $block->getInfoData('cc_type') ?>
-                <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type"
+                    data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"}}'
+                    name="payment[cc_type]" data-validate='{
+                        required:true,
+                        "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"
+                    }' class="select">
+                <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option>
+                <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                    <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                        <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($typeName); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
         </div>
     </div>
     <div class="field number required hide_if_token_selected">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
+        </label>
         <div class="control">
-            <input type="number" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}'/>
+            <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]"
+                   title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value=""
+                   data-validate='{
+                       "required-number":true,
+                       "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type",
+                       "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                   }'/>
         </div>
     </div>
-    <div class="field date required hide_if_token_selected" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label>
+    <div class="field date required hide_if_token_selected" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div">
+        <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label">
+            <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
+        </label>
         <div class="control">
             <div class="fields group group-2">
                 <div class="field no-label month">
                     <div class="control">
-                        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="select month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr"}'>
-                            <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?>
+                        <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]"
+                                class="select month" data-validate='{
+                                    required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"
+                                }'>
                             <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                            <?php endforeach ?>
+                                <option value="<?php echo $k ? $block->escapeHtml($k) : ''; ?>"
+                                    <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
+                            <?php endforeach; ?>
                         </select>
                     </div>
                 </div>
                 <div class="field no-label year">
                     <div class="control">
-                        <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?>
-                        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'>
+                        <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'>
                             <?php foreach ($block->getCcYears() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                            <?php endforeach ?>
+                                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                                    <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
+                            <?php endforeach; ?>
                         </select>
                     </div>
                 </div>
@@ -83,39 +120,44 @@ $clientToken = $block->getClientToken();
         </div>
     </div>
     <?php if ($block->hasVerification()): ?>
-        <div class="field cvv required hide_if_token_selected" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div">
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label>
+        <div class="field cvv required hide_if_token_selected" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div">
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label">
+                <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
+            </label>
             <div class="control">
-                <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}' />
-                <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?>
+                <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                       class="input-text cvv"
+                       id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value=""
+                       data-validate='{
+                           "required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                       }' />
+                <?php $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Checkout::cvv.png')) .
+                    '\" alt=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) .
+                    '\" title=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?>
                 <div class="note">
-                    <a href="#" class="action cvv" title="<?php /* @escapeNotVerified */ echo __('What is this?') ?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a>
+                    <a href="#" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?')); ?>"
+                       data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'>
+                        <span><?php echo $block->escapeHtml(__('What is this?')); ?></span>
+                    </a>
                 </div>
             </div>
         </div>
     <?php endif; ?>
 
     <?php if($block->canSaveCard()): ?>
-        <li id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault_div" style="text-align:left;" class="hide_if_token_selected">
-            <input type="checkbox" title="<?php /* @escapeNotVerified */ echo __('Save this card for future use') ?>" class="input-checkbox" id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" checked="checked" name="payment[store_in_vault]" value="1" />
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" class="required" style="float:none;"><?php /* @escapeNotVerified */ echo __('Save this card for future use') ?></label>
+        <li id="<?php /* @noEscape */ echo $code; ?>_store_in_vault_div" style="text-align:left;" class="hide_if_token_selected">
+            <input type="checkbox" title="<?php echo $block->escapeHtml(__('Save this card for future use')); ?>" class="input-checkbox"
+                   id="<?php /* @noEscape */ echo $code; ?>_store_in_vault" checked="checked" name="payment[store_in_vault]" value="1" />
+            <label for="<?php /* @noEscape */ echo $code; ?>_store_in_vault" class="required" style="float:none;">
+                <?php echo $block->escapeHtml(__('Save this card for future use')); ?>
+            </label>
         </li>
     <?php endif; ?>
 </fieldset>
-
-<?php
-    $formData = [
-        "useVault" => $_useVault,
-        "clientToken" => $clientToken,
-        "autoDetection" => $_autoDetection,
-        "loggedIn" => $_loggedIn,
-    ];
-    $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
-?>
 <script type="text/x-magento-init">
     {
         "#payment_form_braintree": {
-            "braintreeForm": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+            "braintreeForm": <?php /* @noEscape */ echo $serializedFormData ?>
         }
     }
 </script>
-- 
GitLab


From 9a12976ca07a3e0e81c32c5ba7653a696f157eee Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Mon, 12 Oct 2015 12:32:28 +0300
Subject: [PATCH 336/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

renamed  integration tests
---
 .../Model/{ModelResource => ResourceModel}/Db/AbstractTest.php    | 0
 .../Db/Collection/AbstractTest.php                                | 0
 .../Model/{ModelResource => ResourceModel}/Db/ProfilerTest.php    | 0
 .../Model/{ModelResource => ResourceModel}/Entity/TableTest.php   | 0
 .../Model/{ModelResource => ResourceModel}/IteratorTest.php       | 0
 .../Type/Db/ConnectionFactoryTest.php                             | 0
 .../{ModelResource => ResourceModel}/Type/Db/Pdo/MysqlTest.php    | 0
 7 files changed, 0 insertions(+), 0 deletions(-)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/AbstractTest.php (100%)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/Collection/AbstractTest.php (100%)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/Db/ProfilerTest.php (100%)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/Entity/TableTest.php (100%)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/IteratorTest.php (100%)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/Db/ConnectionFactoryTest.php (100%)
 rename dev/tests/integration/testsuite/Magento/Framework/Model/{ModelResource => ResourceModel}/Type/Db/Pdo/MysqlTest.php (100%)

diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php
-- 
GitLab


From 0aaf6603d5e0f4eaa6f6d3d267a84b2e00b11918 Mon Sep 17 00:00:00 2001
From: Alex Akimov <aakimov@ebay.com>
Date: Mon, 12 Oct 2015 10:07:21 +0300
Subject: [PATCH 337/420] MAGETWO-41619: Loader Must be Displayed on Checkout
 if Discount is Applying for Responsive Theme

---
 .../Magento/Checkout/view/frontend/web/js/view/estimation.js    | 2 +-
 .../Magento/Checkout/view/frontend/web/template/estimation.html | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
index 76e34d4cbf5..f1f92feb37a 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
@@ -13,6 +13,7 @@ define(
     function (Component, quote, priceUtils, totals, sidebarModel) {
         'use strict';
         return Component.extend({
+            isLoading: totals.isLoading,
             getQuantity: function() {
                 if (totals.totals()) {
                     return parseFloat(totals.totals().items_qty);
@@ -34,7 +35,6 @@ define(
             getValue: function () {
                 return this.getFormattedPrice(this.getPureValue());
             }
-
         });
     }
 );
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
index dd037ff8d36..36009ab7b46 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="opc-estimated-wrapper">
+<div class="opc-estimated-wrapper" data-bind="blockLoader: isLoading">
     <div class="estimated-block">
         <span class="estimated-label" data-bind="i18n: 'Estimated Total'"></span>
         <span class="estimated-price" data-bind="i18n: getValue()"></span>
-- 
GitLab


From 901991cbc3ccecc008cab4cd0f0e0495ed34c03e Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Mon, 12 Oct 2015 12:58:43 +0300
Subject: [PATCH 338/420] MAGETWO-42818: Verify outputs for Braintree module

 - Refactored code related to failed tests
---
 .../Magento/Braintree/view/adminhtml/templates/form.phtml     | 2 +-
 .../Braintree/view/frontend/templates/creditcard/edit.phtml   | 2 +-
 app/code/Magento/Braintree/view/frontend/templates/form.phtml | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
index fcfed770a5a..c27901cd4e8 100644
--- a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
@@ -49,7 +49,7 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                         <?php foreach ($storedCards as $creditCard): ?>
                             <option value="<?php echo $block->escapeHtml($creditCard->token); ?>"
                                 <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>>
-                                <?php echo $block->escapeHtml($creditCard->maskedNumber . ' - ' . $creditCard->cardType); ?>
+                                <?php echo $block->escapeHtml($creditCard->maskedNumber); ?> - <?php echo $block->escapeHtml($creditCard->cardType); ?>
                             </option>
                         <?php endforeach; ?>
                         <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
index aa1a8e1f728..6fcac2eae9c 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
@@ -328,7 +328,7 @@ $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonE
             </label>
 
             <div class="control">
-                <?php echo $block->escapeHtml($block->countrySelect('credit_card' . '[billing_address][country_code_alpha2]', 'billing_address_country', $default)); ?>
+                <?php echo $block->escapeHtml($block->countrySelect('credit_card[billing_address][country_code_alpha2]', 'billing_address_country', $default)); ?>
             </div>
         </div>
     </fieldset>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/form.phtml b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
index e3a32a89da2..459a61568cf 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
@@ -39,8 +39,8 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                 <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]">
                     <?php foreach ($storedCards as $creditCard): ?>
                         <option value="<?php echo $block->escapeHtml($creditCard->token); ?>"
-                            <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : '' ?>>
-                            <?php echo $block->escapeHtml($creditCard->maskedNumber . ' - ' . $creditCard->cardType); ?>
+                            <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>>
+                            <?php echo $block->escapeHtml($creditCard->maskedNumber); ?> - <?php echo $block->escapeHtml($creditCard->cardType); ?>
                         </option>
                     <?php endforeach; ?>
                         <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option>
-- 
GitLab


From 935ce15f6c8dfeb1673421d135d4f01df52543fd Mon Sep 17 00:00:00 2001
From: Vitali Kirychenka <Vitali_Kirychenka@epam.com>
Date: Mon, 12 Oct 2015 13:06:06 +0300
Subject: [PATCH 339/420] PV-224: update functional tests for PV

---
 .../Test/Repository/ConfigData.xml            | 27 +++++++++++++++++++
 .../UpdateSimpleProductEntityTest.xml         | 13 ++++++---
 2 files changed, 36 insertions(+), 4 deletions(-)
 create mode 100755 dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml

diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml
new file mode 100755
index 00000000000..5227236ce50
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd">
+    <repository class="Magento\Config\Test\Repository\ConfigData">
+        <dataset name="youtube_api_key">
+            <field name="catalog/product_video/youtube_api_key" xsi:type="array">
+                <item name="scope" xsi:type="string">default</item>
+                <item name="scope_id" xsi:type="number">0</item>
+                <item name="label" xsi:type="string"/>
+                <item name="value" xsi:type="string">AIzaSyDwqDWuw1lra-LnpJL2Mr02DYuFmkuRSns</item>
+            </field>
+        </dataset>
+        <dataset name="youtube_api_key_rollback">
+            <field name="catalog/product_video/youtube_api_key" xsi:type="array">
+                <item name="scope" xsi:type="string">default</item>
+                <item name="scope_id" xsi:type="number">0</item>
+                <item name="label" xsi:type="string"/>
+                <item name="value" xsi:type="string"/>
+            </field>
+        </dataset>
+    </repository>
+</config>
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml
index 6a151535f05..74f73a10f81 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml
@@ -34,6 +34,7 @@
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data>
             <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 1</data>
             <data name="product/data/media_gallery/images/0/video_description" xsi:type="string">This is a test "Foo Test 1"</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" />
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoProductView" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
@@ -50,18 +51,19 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="AddVideoToPCFTestVariation3">
-        <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
-        <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
+            <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
+            <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
             <data name="product/data/sku" xsi:type="string">sku_simple_product_with_video_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data>
             <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 1</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" />
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoProductView" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="AddVideoToPCFTestVariation4">
-        <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
-        <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
+            <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
+            <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://vimeo.com/21776334</data>
             <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 2</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" />
@@ -73,6 +75,7 @@
             <data name="initialProduct/dataset" xsi:type="string">product_with_video_youtube</data>
             <data name="product/data/sku" xsi:type="string">sku_simple_product_with_video_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/bpOSxM0rNPM</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="UpdateVideoInPCFTestVariation2">
@@ -97,6 +100,7 @@
             <data name="productVideo/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/bpOSxM0rNPM</data>
             <data name="productVideo/data/media_gallery/images/0/video_title" xsi:type="string">Edit Test</data>
             <data name="productVideo/data/media_gallery/images/0/video_description" xsi:type="string">This is an edit test</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="GetVideoInfoTestVariation1">
@@ -105,6 +109,7 @@
             <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data>
             <data name="video/video_title" xsi:type="string">Foo Fighters - Congregation</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertGetVideoInfoDataIsCorrect" />
         </variation>
         <variation name="GetVideoInfoTestVariation2">
-- 
GitLab


From 2aaa6c725760f1bf3da0296b56a3bae6048e9f48 Mon Sep 17 00:00:00 2001
From: Siarhei Andreyeu <siarhei_andreyeu@epam.com>
Date: Mon, 12 Oct 2015 13:50:24 +0300
Subject: [PATCH 340/420] PV-224: Code refactoring

---
 app/code/Magento/ProductVideo/Helper/Media.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Helper/Media.php b/app/code/Magento/ProductVideo/Helper/Media.php
index db56d45ab05..657c81f3aae 100644
--- a/app/code/Magento/ProductVideo/Helper/Media.php
+++ b/app/code/Magento/ProductVideo/Helper/Media.php
@@ -73,10 +73,10 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
         DesignInterface $designInterface,
         Context $context
     ) {
+        parent::__construct($context);
         $this->viewConfig = $configInterface;
         $this->currentTheme = $designInterface->getDesignTheme();
         $this->initConfig();
-        parent::__construct($context);
     }
 
     /**
-- 
GitLab


From dde01f37a7ab9434043e85a23639655069c8c7ab Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 12 Oct 2015 13:55:58 +0300
Subject: [PATCH 341/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for "Category -> Swatches -> Not works"
---
 .../view/frontend/web/js/SwatchRenderer.js    | 47 ++++++++++++-------
 1 file changed, 31 insertions(+), 16 deletions(-)

diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index 2927064a61e..0a19217a6de 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -210,13 +210,23 @@ define(["jquery", "jquery/ui"], function ($) {
          */
         _create: function () {
             var options = this.options,
-                gallery = $('[data-gallery-role=gallery-placeholder]', '.column.main');
+                gallery = $('[data-gallery-role=gallery-placeholder]', '.column.main'),
+                isProductViewExist = $('body.catalog-product-view').size() > 0,
+                $main = isProductViewExist ?
+                    this.element.parents('.column.main') :
+                    this.element.parents('.product-item-info');
 
-            gallery.on('gallery:loaded', function () {
-                var galleryObject = gallery.data('gallery');
+            if (isProductViewExist) {
+                gallery.on('gallery:loaded', function () {
+                    var galleryObject = gallery.data('gallery');
 
-                options.mediaGalleryInitial = galleryObject.returnCurrentImages();
-            });
+                    options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+                });
+            } else {
+                options.mediaGalleryInitial.push({
+                    'img': $main.find('.product-image-photo').attr('src')
+                });
+            }
         },
 
         /**
@@ -341,13 +351,13 @@ define(["jquery", "jquery/ui"], function ($) {
                 // Color
                 else if (type == 1) {
                     html += '<div class="' + optionClass + ' color" ' + attr +
-                    '" style="background: ' + value + ' no-repeat center; background-size: initial;">' + '' + '</div>';
+                        '" style="background: ' + value + ' no-repeat center; background-size: initial;">' + '' + '</div>';
                 }
 
                 // Image
                 else if (type == 2) {
                     html += '<div class="' + optionClass + ' image" ' + attr +
-                    '" style="background: url(' + value + ') no-repeat center; background-size: initial;">' + '' + '</div>';
+                        '" style="background: url(' + value + ') no-repeat center; background-size: initial;">' + '' + '</div>';
                 }
 
                 // Clear
@@ -758,13 +768,15 @@ define(["jquery", "jquery/ui"], function ($) {
          * @param {Boolean} isProductViewExist
          */
         updateBaseImage: function (images, context, isProductViewExist) {
+            var justAnImage = images.shift();
+
             if (isProductViewExist) {
                 context
                     .find('[data-gallery-role=gallery-placeholder]')
                     .data('gallery')
                     .updateData(images);
-            } else {
-                context.find('.product-image-photo').attr('src', images.shift().img);
+            } else if (justAnImage.img) {
+                context.find('.product-image-photo').attr('src', justAnImage.img);
             }
         },
 
@@ -777,8 +789,8 @@ define(["jquery", "jquery/ui"], function ($) {
             var $widget = this;
 
             if (
-                $widget.xhr != undefined
-                || $widget.xhr != null
+                $widget.xhr !== undefined
+                || $widget.xhr !== null
             ) {
                 $widget.xhr.abort();
                 $widget.xhr = null;
@@ -792,12 +804,12 @@ define(["jquery", "jquery/ui"], function ($) {
          */
         _EmulateSelected: function () {
             var $widget = this,
-                $this = $widget.element;
-            var request = $.parseParams(window.location.search.substring(1));
+                $this = $widget.element,
+                request = $.parseParams(window.location.search.substring(1));
 
             $.each(request, function (key, value) {
                 $this.find('.' + $widget.options.classes.attributeClass
-                + '[attribute-code="' + key + '"] [option-id="' + value + '"]').trigger('click');
+                    + '[attribute-code="' + key + '"] [option-id="' + value + '"]').trigger('click');
             });
         },
 
@@ -807,11 +819,14 @@ define(["jquery", "jquery/ui"], function ($) {
          * @returns {number}
          * @private
          */
-        _ObjectLength: function(obj) {
-            var size = 0, key;
+        _ObjectLength: function (obj) {
+            var size = 0,
+                key;
+
             for (key in obj) {
                 if (obj.hasOwnProperty(key)) size++;
             }
+
             return size;
         }
     });
-- 
GitLab


From 7c4823310559060909eb33c147f6a74ed4e1ae33 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Mon, 12 Oct 2015 13:59:51 +0300
Subject: [PATCH 342/420] PV-224: CSS to LESS refactoring. Fix JS youtube API
 key

---
 .../adminhtml/web/js/get-video-information.js | 10 +++++++++-
 .../view/adminhtml/web/js/new-video-dialog.js | 20 +++++++++++++++----
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 86b47bfde2a..9292018e3a3 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -322,7 +322,10 @@ require([
 
         $.widget('mage.videoData', {
             options: {
-                youtubeKey: 'AIzaSyDwqDWuw1lra-LnpJL2Mr02DYuFmkuRSns' //sample data, change later!
+                youtubeKey: '',
+                noKeyErrorTxt : 'You have not entered youtube API key. ' +
+                'No information about youtube video will be retrieved.',
+                eventSource : '' //where is data going from - focus out or click on button
             },
 
             _REQUEST_VIDEO_INFORMATION_TRIGGER: 'update_video_information',
@@ -337,6 +340,11 @@ require([
              * @private
              */
             _init: function () {
+                if (!this.options.youtubeKey && this.options.eventSource === 'click') {
+                    alert({
+                        content: this.options.noKeyErrorTxt
+                    });
+                }
                 this._onRequestHandler();
             },
 
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index 4e9203e0f2c..89974feeb01 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -243,7 +243,10 @@ define([
 
             this._on(events);
 
-            this._videoUrlWidget = $(this._videoUrlSelector).videoData();
+            this._videoUrlWidget = $(this._videoUrlSelector).videoData({
+                youtubeKey : this.options.youTubeApiKey,
+                eventSource : 'focusout'
+            });
             this._videoInformationGetBtn = $(this._videoInformationBtnSelector);
             this._videoInformationGetUrlField = $(this._videoUrlSelector);
             this._videoInformationGetEditBtn = $(this._editVideoBtnSelector);
@@ -262,7 +265,10 @@ define([
         _onGetVideoInformationClick: function () {
             this._onlyVideoPlayer = false;
             this._isEditPage = false;
-            this._videoInformationGetUrlField.videoData();
+            this._videoInformationGetUrlField.videoData({
+                youtubeKey : this.options.youTubeApiKey,
+                eventSource : 'click'
+            });
             this._videoUrlWidget.trigger('update_video_information');
         },
 
@@ -271,7 +277,10 @@ define([
          * @private
          */
         _onGetVideoInformationFocusOut: function () {
-            this._videoInformationGetUrlField.videoData();
+            this._videoInformationGetUrlField.videoData({
+                youtubeKey : this.options.youTubeApiKey,
+                eventSource : 'focusout'
+            });
             this._videoUrlWidget.trigger('update_video_information');
         },
 
@@ -282,7 +291,10 @@ define([
         _onGetVideoInformationEditClick: function () {
             this._onlyVideoPlayer = true;
             this._isEditPage = true;
-            this._videoInformationGetUrlField.videoData();
+            this._videoInformationGetUrlField.videoData({
+                youtubeKey : this.options.youTubeApiKey,
+                eventSource : 'click'
+            });
             this._videoUrlWidget.trigger('update_video_information');
         },
 
-- 
GitLab


From f28b463a29cf57d6d46989c2bfc74a4201026ffd Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 12 Oct 2015 14:05:35 +0300
Subject: [PATCH 343/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for "Category -> Swatches -> Not works"
---
 .../Magento/Swatches/view/frontend/web/js/SwatchRenderer.js  | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index 0a19217a6de..026e22af8c0 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -788,10 +788,7 @@ define(["jquery", "jquery/ui"], function ($) {
         _XhrKiller: function () {
             var $widget = this;
 
-            if (
-                $widget.xhr !== undefined
-                || $widget.xhr !== null
-            ) {
+            if ($widget.xhr !== undefined && $widget.xhr !== null) {
                 $widget.xhr.abort();
                 $widget.xhr = null;
             }
-- 
GitLab


From 501b26a2afe111c68a3de76f0431717ed42d6b4e Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Mon, 12 Oct 2015 14:08:40 +0300
Subject: [PATCH 344/420] PV-224: CSS to LESS refactoring. Fix codestyle

---
 .../adminhtml/web/js/get-video-information.js    |  4 ++--
 .../view/adminhtml/web/js/new-video-dialog.js    | 16 ++++++++--------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 9292018e3a3..424d996bda7 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -323,9 +323,9 @@ require([
         $.widget('mage.videoData', {
             options: {
                 youtubeKey: '',
-                noKeyErrorTxt : 'You have not entered youtube API key. ' +
+                noKeyErrorTxt: 'You have not entered youtube API key. ' +
                 'No information about youtube video will be retrieved.',
-                eventSource : '' //where is data going from - focus out or click on button
+                eventSource: '' //where is data going from - focus out or click on button
             },
 
             _REQUEST_VIDEO_INFORMATION_TRIGGER: 'update_video_information',
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index 89974feeb01..e5efb668b51 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -244,8 +244,8 @@ define([
             this._on(events);
 
             this._videoUrlWidget = $(this._videoUrlSelector).videoData({
-                youtubeKey : this.options.youTubeApiKey,
-                eventSource : 'focusout'
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'focusout'
             });
             this._videoInformationGetBtn = $(this._videoInformationBtnSelector);
             this._videoInformationGetUrlField = $(this._videoUrlSelector);
@@ -266,8 +266,8 @@ define([
             this._onlyVideoPlayer = false;
             this._isEditPage = false;
             this._videoInformationGetUrlField.videoData({
-                youtubeKey : this.options.youTubeApiKey,
-                eventSource : 'click'
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'click'
             });
             this._videoUrlWidget.trigger('update_video_information');
         },
@@ -278,8 +278,8 @@ define([
          */
         _onGetVideoInformationFocusOut: function () {
             this._videoInformationGetUrlField.videoData({
-                youtubeKey : this.options.youTubeApiKey,
-                eventSource : 'focusout'
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'focusout'
             });
             this._videoUrlWidget.trigger('update_video_information');
         },
@@ -292,8 +292,8 @@ define([
             this._onlyVideoPlayer = true;
             this._isEditPage = true;
             this._videoInformationGetUrlField.videoData({
-                youtubeKey : this.options.youTubeApiKey,
-                eventSource : 'click'
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'click'
             });
             this._videoUrlWidget.trigger('update_video_information');
         },
-- 
GitLab


From be110be0fc3de86d07e5e1b60cea682c3eb68f13 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 12 Oct 2015 14:10:56 +0300
Subject: [PATCH 345/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for "Category -> Swatches -> Not works"
---
 .../Magento/Swatches/view/frontend/web/js/SwatchRenderer.js   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index 026e22af8c0..c9650b78b7f 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -223,9 +223,9 @@ define(["jquery", "jquery/ui"], function ($) {
                     options.mediaGalleryInitial = galleryObject.returnCurrentImages();
                 });
             } else {
-                options.mediaGalleryInitial.push({
+                options.mediaGalleryInitial = [{
                     'img': $main.find('.product-image-photo').attr('src')
-                });
+                }];
             }
         },
 
-- 
GitLab


From 152db7db56a6cf65a16ce26ac9a0412d4e29e3b5 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 12 Oct 2015 14:24:50 +0300
Subject: [PATCH 346/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for "Category -> Swatches -> Not works"
---
 .../Magento/Swatches/view/frontend/web/js/SwatchRenderer.js   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index c9650b78b7f..0baa01cffda 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -768,14 +768,14 @@ define(["jquery", "jquery/ui"], function ($) {
          * @param {Boolean} isProductViewExist
          */
         updateBaseImage: function (images, context, isProductViewExist) {
-            var justAnImage = images.shift();
+            var justAnImage = images[0];
 
             if (isProductViewExist) {
                 context
                     .find('[data-gallery-role=gallery-placeholder]')
                     .data('gallery')
                     .updateData(images);
-            } else if (justAnImage.img) {
+            } else if (justAnImage && justAnImage.img) {
                 context.find('.product-image-photo').attr('src', justAnImage.img);
             }
         },
-- 
GitLab


From d4243cacbf11635e3588a0dce51ee2a187318aff Mon Sep 17 00:00:00 2001
From: Denys Rul <drul@ebay.com>
Date: Mon, 12 Oct 2015 15:58:30 +0300
Subject: [PATCH 347/420] MAGETWO-43593: PR

- Fix visual onoff component templates
---
 .../Ui/view/base/web/js/grid/columns/onoff.js |  5 ++++
 .../base/web/templates/grid/cells/onoff.html  | 30 +++++++++++--------
 .../web/templates/grid/columns/onoff.html     | 13 ++++----
 3 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js
index 86647b88bd1..407544fd2cc 100755
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js
@@ -14,6 +14,11 @@ define([
         defaults: {
             headerTmpl: 'ui/grid/columns/onoff',
             bodyTmpl: 'ui/grid/cells/onoff',
+            fieldClass: {
+                'admin__scope-old': true,
+                'data-grid-onoff-cell': true,
+                'data-grid-checkbox-cell': false
+            },
             imports: {
                 selectedData: '${ $.provider }:data.selectedData'
             },
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html
index 54bc04ebbda..9a23d227e58 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html
@@ -4,15 +4,21 @@
  * See COPYING.txt for license details.
  */
 -->
-
-<td class="data-grid-onoff-cell admin__scope-old">
-    <div class="switcher">
-        <input
-                class="admin__control-onoff"
-                type="checkbox"
-                data-bind="checked: selected,
-               value: row[indexField],
-               attr: {id: 'check' + row[indexField]}">
-        <label class="switcher-label" data-bind="attr: {for: 'check' + row[indexField]}, text: getLabel(row[indexField])"></label>
-    </div>
-</td>
+<div class="switcher">
+    <input
+            class="admin__control-onoff"
+            type="checkbox"
+            data-bind="
+                staticChecked: $col.selected,
+                value: $row()[$col.indexField],
+                attr: {
+                    id: 'check' + $row()[$col.indexField]
+                }">
+    <label
+        class="switcher-label"
+        data-bind="
+            attr: {
+                for: 'check' + $row()[$col.indexField]
+            },
+            text: $col.getLabel($row()[$col.indexField])"></label>
+</div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html
index f98dcf944f2..5e68fc3a77b 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html
@@ -10,13 +10,12 @@
     <div
             class="action-multicheck-wrap"
             style="width: 3.3rem"
-            data-bind="css: { '_active': menuVisible, '_disabled': !totalRecords()},
-                   outerClick: hideMenu">
+            data-bind="css: {'_disabled': !totalRecords()}, collapsible">
         <input
                 id="mass-select-checkbox"
                 class="admin__control-checkbox"
                 type="checkbox"
-                data-bind="checked: allSelected,
+                data-bind="checked: allSelected(),
                        event: { change: toggleSelectAll },
                        css: { '_indeterminate': indetermine },
                        enable: totalRecords">
@@ -26,14 +25,14 @@
         <button
                 class="action-multicheck-toggle"
                 data-toggle="dropdown"
-                data-bind="css: { '_active': menuVisible },
-                       click: toggleMenu,
-                       enable: totalRecords">
+                data-bind="css: { '_active': $collapsible.opened },
+                       enable: totalRecords
+                       toggleCollapsible">
             <span data-bind="i18n: 'Options'"></span>
         </button>
         <ul
                 class="action-menu"
-                data-bind="click: hideMenu, foreach: actions">
+                data-bind="closeCollapsible, foreach: actions">
             <li data-bind="click: $parent[value].bind($parent),
                            visible: $parent.isActionRelevant(value)">
                 <span class="action-menu-item" data-bind="text: label"></span>
-- 
GitLab


From 9cc9f5d9e8e6fd60ff45c97dccaad391fc431d76 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Mon, 12 Oct 2015 17:47:25 +0300
Subject: [PATCH 348/420] MAGETWO-43271: [Technical Debt] Uncovered code with
 unit test

---
 .../Unit/Ui/Component/DataProviderTest.php    | 164 ++++++++++++++++++
 1 file changed, 164 insertions(+)
 create mode 100644 app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php

diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php
new file mode 100644
index 00000000000..7e1b9f9d437
--- /dev/null
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Customer\Test\Unit\Ui\Component;
+
+use Magento\Customer\Api\Data\AttributeMetadataInterface;
+use Magento\Customer\Ui\Component\DataProvider;
+use Magento\Customer\Ui\Component\Listing\AttributeRepository;
+use Magento\Framework\Api\FilterBuilder;
+use Magento\Framework\Api\Search\SearchCriteriaInterface;
+use Magento\Framework\View\Element\UiComponent\DataProvider\Reporting;
+
+class DataProviderTest extends \PHPUnit_Framework_TestCase
+{
+    const TEST_REQUEST_NAME = 'test_request_name';
+
+    /**
+     * @var DataProvider
+     */
+    protected $model;
+
+    /**
+     * @var Reporting | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $reporting;
+
+    /**
+     * @var SearchCriteriaInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $searchCriteria;
+
+    /**
+     * @var \Magento\Framework\App\RequestInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    /**
+     * @var FilterBuilder | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $filterBuilder;
+
+    /**
+     * @var AttributeRepository | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $attributeRepository;
+
+    public function setUp()
+    {
+        $this->reporting = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\DataProvider\Reporting')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $searchCriteriaBuilder = $this->mockSearchCriteria();
+
+        $this->request = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->getMockForAbstractClass();
+
+        $this->filterBuilder = $this->getMockBuilder('Magento\Framework\Api\FilterBuilder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->attributeRepository = $this->getMockBuilder('Magento\Customer\Ui\Component\Listing\AttributeRepository')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->model = new DataProvider(
+            self::TEST_REQUEST_NAME,
+            '',
+            '',
+            $this->reporting,
+            $searchCriteriaBuilder,
+            $this->request,
+            $this->filterBuilder,
+            $this->attributeRepository
+        );
+    }
+
+    public function testGetData()
+    {
+        $attributeCode = 'attribute_code';
+        $attributeValue = [
+            AttributeMetadataInterface::OPTIONS => [
+                [
+                    'label' => 'opt1_label',
+                    'value' => 'opt1_value',
+                ],
+            ],
+        ];
+
+        $expected = [
+            [
+                'attribute_code' => ['opt1_value'],
+            ],
+        ];
+
+        $attributeMock = $this->getMockBuilder('Magento\Framework\Api\AttributeInterface')
+            ->getMockForAbstractClass();
+        $attributeMock->expects($this->once())
+            ->method('getAttributeCode')
+            ->willReturn($attributeCode);
+        $attributeMock->expects($this->once())
+            ->method('getValue')
+            ->willReturn('opt1_value');
+
+        $searchDocumentMock = $this->getMockBuilder('Magento\Framework\Api\Search\DocumentInterface')
+            ->getMockForAbstractClass();
+        $searchDocumentMock->expects($this->once())
+            ->method('getCustomAttributes')
+            ->willReturn([$attributeMock]);
+
+        $searchResultMock = $this->getMockBuilder('Magento\Framework\Api\Search\SearchResultInterface')
+            ->getMockForAbstractClass();
+        $searchResultMock->expects($this->once())
+            ->method('getTotalCount')
+            ->willReturn(1);
+        $searchResultMock->expects($this->once())
+            ->method('getItems')
+            ->willReturn([$searchDocumentMock]);
+
+        $this->searchCriteria->expects($this->once())
+            ->method('setRequestName')
+            ->with(self::TEST_REQUEST_NAME)
+            ->willReturnSelf();
+
+        $this->reporting->expects($this->once())
+            ->method('search')
+            ->with($this->searchCriteria)
+            ->willReturn($searchResultMock);
+
+        $this->attributeRepository->expects($this->once())
+            ->method('getList')
+            ->willReturn([$attributeCode => $attributeValue]);
+
+        $result = $this->model->getData();
+
+        $this->assertTrue(is_array($result));
+        $this->assertArrayHasKey('totalRecords', $result);
+        $this->assertEquals(1, $result['totalRecords']);
+        $this->assertArrayHasKey('items', $result);
+        $this->assertTrue(is_array($result['items']));
+        $this->assertEquals($result['items'], $expected);
+    }
+
+    /**
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function mockSearchCriteria()
+    {
+        $this->searchCriteria = $this->getMockBuilder('Magento\Framework\Api\Search\SearchCriteriaInterface')
+            ->getMockForAbstractClass();
+
+        $searchCriteriaBuilder = $this->getMockBuilder('Magento\Framework\Api\Search\SearchCriteriaBuilder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $searchCriteriaBuilder->expects($this->any())
+            ->method('create')
+            ->willReturn($this->searchCriteria);
+
+        return $searchCriteriaBuilder;
+    }
+}
-- 
GitLab


From 16fd37fd52238a4d2fc24c0bebdc014d4e2dd90c Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Mon, 12 Oct 2015 18:07:12 +0300
Subject: [PATCH 349/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix zoom
---
 lib/web/magnifier/magnifier.js | 151 +++++++++++++++++----------------
 1 file changed, 79 insertions(+), 72 deletions(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index fd182705b98..92c7156fcef 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -609,6 +609,7 @@
 
                 if (gallery.data('fotorama').fullScreen) {
                     toggleZoomButtons($image);
+                    resetVars($('[data-gallery-role="stage-shaft"] .fotorama__img--full'));
 
                     $('.fotorama__stage__frame .fotorama__img--full').each(function () {
                         var path = $(this).attr("src"),
@@ -635,80 +636,86 @@
                     });
                 }
 
-                $image.on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
-                    if (gallery.data('fotorama').fullScreen && isDraggable) {
-                        e.preventDefault();
-                        $image.css('cursor', 'move');
-                        imagePosY = $image.offset().top;
-                        imagePosX = $image.offset().left;
-
-                        if (isTouchEnabled) {
-                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
-                            e.clientX = touch.pageX;
-                            e.clientY = touch.pageY;
+                $image
+                    .off(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown')
+                    .on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
+                        if (gallery.data('fotorama').fullScreen && isDraggable) {
+                            e.preventDefault();
+                            $image.css('cursor', 'move');
+                            imagePosY = $image.offset().top;
+                            imagePosX = $image.offset().left;
+
+                            if (isTouchEnabled) {
+                                touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                                e.clientX = touch.pageX;
+                                e.clientY = touch.pageY;
+                            }
+                            startX = e.clientX || e.originalEvent.clientX;
+                            startY = e.clientY || e.originalEvent.clientY;
+                            isDragActive = true;
                         }
-                        startX = e.clientX || e.originalEvent.clientX;
-                        startY = e.clientY || e.originalEvent.clientY;
-                        isDragActive = true;
-                    }
-                });
+                    });
 
 
 
-                $image.on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
-                    if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
+                $image
+                    .off(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove')
+                    .on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
+                        if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
 
-                        var top,
-                            left,
-                            startOffset = $image.offset(),
-                            clientX = e.clientX || e.originalEvent.clientX,
-                            clientY = e.clientY || e.originalEvent.clientY;
+                            var top,
+                                left,
+                                startOffset = $image.offset(),
+                                clientX = e.clientX || e.originalEvent.clientX,
+                                clientY = e.clientY || e.originalEvent.clientY;
 
 
-                        e.preventDefault();
+                            e.preventDefault();
 
-                        if (isTouchEnabled) {
-                            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
-                            e.clientX = touch.pageX;
-                            e.clientY = touch.pageY;
-                        }
-                        top = +imagePosY + (clientY - startY);
-                        left = +imagePosX + (clientX - startX);
+                            if (isTouchEnabled) {
+                                touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                                e.clientX = touch.pageX;
+                                e.clientY = touch.pageY;
+                            }
+                            top = +imagePosY + (clientY - startY);
+                            left = +imagePosX + (clientX - startX);
 
-                        if ($image.height() > $imageContainer.height()) {
+                            if ($image.height() > $imageContainer.height()) {
 
-                            if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
-                                top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
-                            } else {
-                                top = ($imageContainer.offset().top < top) ? 0 : top;
+                                if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
+                                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                                } else {
+                                    top = ($imageContainer.offset().top < top) ? 0 : top;
+                                }
+                                $image.offset({
+                                    'top': top
+                                });
                             }
-                            $image.offset({
-                                'top': top
-                            });
-                        }
 
-                        if ($image.width() > $imageContainer.width()) {
+                            if ($image.width() > $imageContainer.width()) {
 
-                            if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
-                                left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
-                            } else {
-                                left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                                if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                                } else {
+                                    left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                                }
+                                $image.offset({
+                                    'left': left
+                                });
                             }
-                            $image.offset({
-                                'left': left
-                            });
                         }
-                    }
-                });
+                    });
 
-                $image.on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
-                    if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
-                        isDragActive = false;
-                        $image.css('cursor', 'pointer');
+                $image
+                    .off(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp')
+                    .on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
+                        if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
+                            isDragActive = false;
+                            $image.css('cursor', 'pointer');
 
-                        return false;
-                    }
-                });
+                            return false;
+                        }
+                    });
             });
         }
 
@@ -792,10 +799,10 @@
                 left = $image.offset().left;
 
                 if ($image.height() > $imageContainer.height()) {
-                    if ($imageContainer.offset().top + $imageContainer.height() > top + $image.height()) {
-                        top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                    if ($imageContainer.offset().top + $imageContainer.height() > top + $image.height() + heightStep/2) {
+                        top = $imageContainer.offset().top + $imageContainer.height() - $image.height() + heightStep/2;
                     } else {
-                        top = ($imageContainer.offset().top <= top && heightStep > 0) ? 0 : top + heightStep/2;
+                        top = ($imageContainer.offset().top <= top + heightStep/2 && heightStep > 0) ? 0 : top + heightStep/2;
                     }
                     $image.css({
                         top: top,
@@ -809,10 +816,10 @@
                 }
 
                 if ($image.width() > $imageContainer.width()) {
-                    if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                    if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width() + widthStep/2)) {
                         left = $imageContainer.offset().left + $imageContainer.width() - $image.width() + widthStep/2;
                     } else {
-                        left = ($imageContainer.offset().left <= left && widthStep > 0) ? 0 : left + widthStep/2;
+                        left = ($imageContainer.offset().left <= left + widthStep/2 && widthStep > 0) ? 0 : left + widthStep/2;
                     }
                     $image.css({
                         left: left,
@@ -835,8 +842,8 @@
                     heightResult;
 
                 if (!zoomWidthStep) {
-                    zoomWidthStep = Math.round((imgOriginalSize.rw - $image.width())/parseFloat(options.fullscreenzoom));
-                    zoomHeightStep = Math.round((imgOriginalSize.rh - $image.height())/parseFloat(options.fullscreenzoom));
+                    zoomWidthStep = Math.ceil((imgOriginalSize.rw - $image.width())/parseFloat(options.fullscreenzoom));
+                    zoomHeightStep = Math.ceil((imgOriginalSize.rh - $image.height())/parseFloat(options.fullscreenzoom));
                 }
                 widthResult = $image.width() + zoomWidthStep;
                 heightResult = $image.height() + zoomHeightStep;
@@ -879,16 +886,16 @@
 
                 e.preventDefault();
 
-                if ($image.width() >= $image.height() && widthCheck) {
-                    $image.css({'width': $image.parent().width(), height: 'auto'});
-                    resetVars($image);
+                if (widthCheck && heightCheck) {
+                    if ($image.width() >= $image.height()) {
+                        $image.trigger('fotorama:load');
 
-                    return false;
-                } else if ($image.width() < $image.height() && heightCheck) {
-                    $image.css({'width': 'auto', height: $image.parent().height()});
-                    resetVars($image);
+                        return false;
+                    } else if ($image.width() < $image.height()) {
+                        $image.trigger('fotorama:load');
 
-                    return false;
+                        return false;
+                    }
                 }
 
                 $image.css({'width': setedResult, height: 'auto'});
-- 
GitLab


From b2ec993e3911f2b5f3557d1c137e75a5a4addaea Mon Sep 17 00:00:00 2001
From: Stanislau komar <head.trackingsoft@gmail.com>
Date: Mon, 12 Oct 2015 18:08:50 +0300
Subject: [PATCH 350/420] PV-224: Create errors handler

---
 .../adminhtml/web/js/get-video-information.js | 43 ++++++++++++++++++-
 1 file changed, 41 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 424d996bda7..9e1f8436618 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -373,14 +373,53 @@ require([
                 }
 
                 /**
+                 *
+                 * @param {Object} data
                  * @private
                  */
                 function _onYouTubeLoaded(data) {
                     var tmp,
                         uploadedFormatted,
-                        respData;
+                        respData,
+                        createErrorMessage;
+
+                    /**
+                     * Create errors message
+                     *
+                     * @returns {String}
+                     */
+                    createErrorMessage = function () {
+                        var error = data.error,
+                            errors = error.errors,
+                            i,
+                            errLength = errors.length,
+                            tmpError,
+                            errReason,
+                            errorsMessage = [];
+
+                        for (i = 0; i < errLength; i++) {
+                            tmpError = errors[i];
+                            errReason = tmpError.reason;
+
+                            if (['keyInvalid'].indexOf(errReason) !== -1) {
+                                errorsMessage.push('Youtube API key is an invalid');
+
+                                break;
+                            }
+
+                            errorsMessage.push(tmpError.message);
+                        }
+
+                        return 'Video can\'t be shown by reason: ' + $.unique(errorsMessage).join(', ');
+                    };
+
+                    if (data.code === 400) {
+                        this._onRequestError(createErrorMessage());
+
+                        return;
+                    }
 
-                    if (data.items.length < 1) {
+                    if (!data.items || data.items.length < 1) {
                         this._onRequestError('Video not found');
 
                         return;
-- 
GitLab


From 164efa6a3ceac4ea29845c04a8de59df3d2c1e69 Mon Sep 17 00:00:00 2001
From: Stanislau komar <head.trackingsoft@gmail.com>
Date: Mon, 12 Oct 2015 18:15:48 +0300
Subject: [PATCH 351/420] PV-224: Fix youtube errors check

---
 .../view/adminhtml/web/js/get-video-information.js             | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 9e1f8436618..52171f1537a 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -413,7 +413,7 @@ require([
                         return 'Video can\'t be shown by reason: ' + $.unique(errorsMessage).join(', ');
                     };
 
-                    if (data.code === 400) {
+                    if (data.error && data.error.code === 400) {
                         this._onRequestError(createErrorMessage());
 
                         return;
@@ -424,6 +424,7 @@ require([
 
                         return;
                     }
+
                     tmp = data.items[0];
                     uploadedFormatted = tmp.snippet.publishedAt.replace('T', ' ').replace(/\..+/g, '');
                     respData = {
-- 
GitLab


From f03464b9befe80e98848b0f26ce3bd2169de98c6 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Mon, 12 Oct 2015 13:08:55 +0300
Subject: [PATCH 352/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

static tests fixes
---
 app/code/Magento/Config/Model/ResourceModel/Config.php        | 4 ++--
 .../Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php         | 3 +++
 app/code/Magento/Theme/Model/ResourceModel/Design.php         | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Config/Model/ResourceModel/Config.php b/app/code/Magento/Config/Model/ResourceModel/Config.php
index 617a7bc5f09..7f7ccfc8826 100644
--- a/app/code/Magento/Config/Model/ResourceModel/Config.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config.php
@@ -10,8 +10,8 @@ namespace Magento\Config\Model\ResourceModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
-    implements \Magento\Framework\App\Config\ConfigResource\ConfigInterface
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
+    \Magento\Framework\App\Config\ConfigResource\ConfigInterface
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
index 043565937d8..18176404798 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
@@ -16,6 +16,9 @@ use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 abstract class Pdfinvoices extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
     /**
diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design.php b/app/code/Magento/Theme/Model/ResourceModel/Design.php
index 8743ff1b7bd..2edb0163bae 100644
--- a/app/code/Magento/Theme/Model/ResourceModel/Design.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Design.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
+// @codingStandardsIgnoreFile
 namespace Magento\Theme\Model\ResourceModel;
 
 use Magento\Framework\Stdlib\DateTime;
-- 
GitLab


From 79168550de5fbd39c7d9bd05429e76315cb0e1ac Mon Sep 17 00:00:00 2001
From: Natalia Momotenko <nmomotenko@ebay.com>
Date: Mon, 12 Oct 2015 18:30:19 +0300
Subject: [PATCH 353/420] MAGETWO-43358: Shipment packages cannot be shown in
 Admin

- revert changes with mixin renaming, they will be added in the separate task
---
 .../Magento/luma/Magento_Sales/web/css/source/_email.less   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less b/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
index 9fbeb9458d0..8d002c55b8e 100644
--- a/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
+++ b/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
@@ -100,7 +100,7 @@
 // ----------------------------------------------
 
 .shipment-track {
-    .lib-table(@table__width, 0);
+    .table(@table__width, 0);
 
     thead,
     tbody {
@@ -127,7 +127,7 @@
 // ----------------------------------------------
 
 .email-items {
-    .lib-table(@table__width, 0);
+    .table(@table__width, 0);
     tfoot {
         > tr {
             > th,
@@ -241,6 +241,6 @@
 
 .email-non-inline() {
     .email-items {
-        .lib-table-overflow();
+        .table-overflow();
     }
 }
-- 
GitLab


From c8d1844838f71e0129b761c61862c11fb4a3ac74 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Mon, 12 Oct 2015 10:38:35 -0500
Subject: [PATCH 354/420] MAGETWO-32443: [GITHUB] if_module_enabled has no
 effect #934

---
 .../Config/Block/System/Config/FormTest.php   | 74 +++++++++++--------
 .../Config/_files/test_section_config.xml     |  8 +-
 2 files changed, 50 insertions(+), 32 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php
index cc545e0b553..d1bd13f74a1 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php
+++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php
@@ -75,19 +75,21 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @covers \Magento\Config\Block\System\Config\Form::initFields
-     * @param bool $useConfigField uses the test_field_use_config field if true
+     * @param string $fieldId uses the test_field_use_config field if true
      * @param bool $isConfigDataEmpty if the config data array should be empty or not
-     * @param $configDataValue the value that the field path should be set to in the config data
+     * @param string $configDataValue The value that the field path should be set to in the config data
+     * @param int $valueSelCtr Number of time that value is selected
      * @param bool $expectedUseDefault
      * @dataProvider initFieldsUseDefaultCheckboxDataProvider
      */
     public function testInitFieldsUseDefaultCheckbox(
-        $useConfigField,
+        $fieldId,
         $isConfigDataEmpty,
         $configDataValue,
-        $expectedUseDefault
+        $expectedUseDefault,
+        $valueSelCtr = 1
     ) {
-        $this->_setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue);
+        $this->_setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue);
 
         \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
             'Magento\Framework\Config\ScopeInterface'
@@ -126,12 +128,17 @@ class FormTest extends \PHPUnit_Framework_TestCase
         $fieldsetHtml = $fieldset->getElementHtml();
 
         $this->assertSelectCount($fieldsetSel, true, $fieldsetHtml, 'Fieldset HTML is invalid');
-        $this->assertSelectCount($valueSel, true, $fieldsetHtml, 'Field input not found in fieldset HTML');
+        $this->assertSelectCount(
+            $valueSel,
+            $valueSelCtr,
+            $fieldsetHtml,
+            'Field input should appear ' . $valueSelCtr . ' times in fieldset HTML'
+        );
         $this->assertSelectCount(
             $useDefaultSel,
-            true,
+            $valueSelCtr,
             $fieldsetHtml,
-            '"Use Default" checkbox not found in fieldset HTML'
+            '"Use Default" checkbox should appear' . $valueSelCtr . ' times  in fieldset HTML.'
         );
 
         if ($expectedUseDefault) {
@@ -159,25 +166,27 @@ class FormTest extends \PHPUnit_Framework_TestCase
     public static function initFieldsUseDefaultCheckboxDataProvider()
     {
         return [
-            [false, true, null, true],
-            [false, false, null, false],
-            [false, false, '', false],
-            [false, false, 'value', false],
-            [true, false, 'config value', false]
+            ['test_field', true, null, true],
+            ['test_field', false, null, false],
+            ['test_field', false, '', false],
+            ['test_field', false, 'value', false],
+            ['test_field_use_config_module_1', false, 'config value', false],
+            ['test_field_use_config_module_0', false, 'config value', false, 0],
         ];
     }
 
     /**
      * @covers \Magento\Config\Block\System\Config\Form::initFields
-     * @param bool $useConfigField uses the test_field_use_config field if true
+     * @param string $fieldId uses the test_field_use_config field if true
      * @param bool $isConfigDataEmpty if the config data array should be empty or not
-     * @param $configDataValue the value that the field path should be set to in the config data
+     * @param string $configDataValue Value that the field path should be set to in the config data
+     * @param int $valueSelCtr Number of time that value is selected
      * @dataProvider initFieldsUseConfigPathDataProvider
      * @magentoConfigFixture default/test_config_section/test_group_config_node/test_field_value config value
      */
-    public function testInitFieldsUseConfigPath($useConfigField, $isConfigDataEmpty, $configDataValue)
+    public function testInitFieldsUseConfigPath($fieldId, $isConfigDataEmpty, $configDataValue, $valueSelCtr = 1)
     {
-        $this->_setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue);
+        $this->_setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue);
 
         \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
             'Magento\Framework\Config\ScopeInterface'
@@ -208,7 +217,12 @@ class FormTest extends \PHPUnit_Framework_TestCase
         $fieldsetHtml = $fieldset->getElementHtml();
 
         $this->assertSelectCount($fieldsetSel, true, $fieldsetHtml, 'Fieldset HTML is invalid');
-        $this->assertSelectCount($valueSel, true, $fieldsetHtml, 'Field input not found in fieldset HTML');
+        $this->assertSelectCount(
+            $valueSel,
+            $valueSelCtr,
+            $fieldsetHtml,
+            'Field input should appear ' . $valueSelCtr . ' times in fieldset HTML'
+        );
     }
 
     /**
@@ -217,20 +231,21 @@ class FormTest extends \PHPUnit_Framework_TestCase
     public static function initFieldsUseConfigPathDataProvider()
     {
         return [
-            [false, true, null],
-            [false, false, null],
-            [false, false, ''],
-            [false, false, 'value'],
-            [true, false, 'config value']
+            ['test_field', true, null],
+            ['test_field', false, null],
+            ['test_field', false, ''],
+            ['test_field', false, 'value'],
+            ['test_field_use_config_module_1', false, 'config value'],
+            ['test_field_use_config_module_0', false, 'config value', 0]
         ];
     }
 
     /**
-     * @param bool $useConfigField uses the test_field_use_config field if true
+     * @param string $fieldId uses the test_field_use_config field if true
      * @param bool $isConfigDataEmpty if the config data array should be empty or not
-     * @param $configDataValue the value that the field path should be set to in the config data
+     * @param string $configDataValue the value that the field path should be set to in the config data
      */
-    protected function _setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue)
+    protected function _setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue)
     {
         \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize([
             State::PARAM_BAN_CACHE => true,
@@ -273,11 +288,8 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
         $this->_group = $structure->getElement('test_section/test_group');
 
-        if ($useConfigField) {
-            $this->_field = $structure->getElement('test_section/test_group/test_field_use_config');
-        } else {
-            $this->_field = $structure->getElement('test_section/test_group/test_field');
-        }
+        $this->_field = $structure->getElement('test_section/test_group/' . $fieldId);
+
         $fieldPath = $this->_field->getConfigPath();
 
         if ($isConfigDataEmpty) {
diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml
index 072e1921a23..d584ff2a9f4 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml
+++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml
@@ -20,9 +20,15 @@
                     <label>Test Field</label>
                     <config_path>test_section/test_group/test_field</config_path>
                 </field>
-                <field id="test_field_use_config" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20">
+                <field id="test_field_use_config_module_1" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20">
                     <label>Test Field</label>
                     <config_path>test_config_section/test_group_config_node/test_field_value</config_path>
+                    <if_module_enabled>Magento_Config</if_module_enabled>
+                </field>
+                <field id="test_field_use_config_module_0" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20">
+                    <label>Test Field</label>
+                    <config_path>test_config_section/test_group_config_node/test_field_value</config_path>
+                    <if_module_enabled>Test_Module</if_module_enabled>
                 </field>
             </group>
         </section>
-- 
GitLab


From b8143f128de2bb5981a511794a1a807ae2e92013 Mon Sep 17 00:00:00 2001
From: ALIAKSANDR KOMAR <ALIAKSANDR_KOMAR@epam.com>
Date: Mon, 12 Oct 2015 18:51:00 +0300
Subject: [PATCH 355/420] PV-224: unit test fix

---
 .../Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php    | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
index 55fe3af0f92..e07d3144baa 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
@@ -86,7 +86,8 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase
         $value = [
             'saveVideoUrl' => $saveVideoUrl,
             'saveRemoteVideoUrl' => $saveRemoteVideoUrl,
-            'htmlId' => 'id_' . $rand
+            'htmlId' => 'id_' . $rand,
+            'youTubeApiKey' => null
         ];
         $this->jsonEncoderMock->expects($this->once())->method('encode')->with(
             $value
-- 
GitLab


From 50aad75484ae9494785e792cc575cf25dda4fb23 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Mon, 12 Oct 2015 18:57:35 +0300
Subject: [PATCH 356/420] MAGETWO-43920: [GitHub]Magento requires reinstalling
 after PR #697

added upgrade scripts
---
 .../Magento/Catalog/Setup/UpgradeData.php     | 41 ++++++++
 app/code/Magento/Catalog/etc/module.xml       |  2 +-
 .../Magento/Customer/Setup/UpgradeData.php    | 45 +++++++++
 app/code/Magento/Customer/etc/module.xml      |  2 +-
 app/code/Magento/Sales/Setup/UpgradeData.php  | 95 +++++++++++++++++++
 app/code/Magento/Sales/etc/module.xml         |  2 +-
 .../NamingConventions/ReservedWordsSniff.php  |  1 -
 7 files changed, 184 insertions(+), 4 deletions(-)
 create mode 100644 app/code/Magento/Sales/Setup/UpgradeData.php

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index 5adf385101f..b45361434e2 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -85,6 +85,47 @@ class UpgradeData implements UpgradeDataInterface
             $categorySetupManager = $this->categorySetupFactory->create();
             $categorySetupManager->removeAttribute(\Magento\Catalog\Model\Product::ENTITY, 'group_price');
         }
+
+        if (version_compare($context->getVersion(), '2.0.2') < 0) {
+            /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
+            $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'entity_model',
+                'Magento\Catalog\Model\ResourceModel\Category'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'attribute_model',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'entity_attribute_collection',
+                'Magento\Catalog\Model\ResourceModel\Category\Attribute\Collection'
+            );
+            $categorySetup->updateAttribute(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'custom_design_from',
+                'attribute_model',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Product::ENTITY,
+                'entity_model',
+                'Magento\Catalog\Model\ResourceModel\Product'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Product::ENTITY,
+                'attribute_model',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Product::ENTITY,
+                'entity_attribute_collection',
+                'Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection'
+            );
+        }
         $setup->endSetup();
     }
 }
diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml
index dd1aeca3057..ee04bbc7431 100644
--- a/app/code/Magento/Catalog/etc/module.xml
+++ b/app/code/Magento/Catalog/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Catalog" setup_version="2.0.1">
+    <module name="Magento_Catalog" setup_version="2.0.2">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Cms"/>
diff --git a/app/code/Magento/Customer/Setup/UpgradeData.php b/app/code/Magento/Customer/Setup/UpgradeData.php
index a37210bd9fb..6c6e32e92eb 100644
--- a/app/code/Magento/Customer/Setup/UpgradeData.php
+++ b/app/code/Magento/Customer/Setup/UpgradeData.php
@@ -240,6 +240,51 @@ class UpgradeData implements UpgradeDataInterface
             ];
             $this->upgradeAttributes($entityAttributes, $customerSetup);
         }
+        if (version_compare($context->getVersion(), '2.0.6', '<')) {
+            $customerSetup->updateEntityType(
+                \Magento\Customer\Model\Customer::ENTITY,
+                'entity_model',
+                'Magento\Customer\Model\ResourceModel\Customer'
+            );
+            $customerSetup->updateEntityType(
+                \Magento\Customer\Model\Customer::ENTITY,
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $customerSetup->updateEntityType(
+                \Magento\Customer\Model\Customer::ENTITY,
+                'entity_attribute_collection',
+                'Magento\Customer\Model\ResourceModel\Attribute\Collection'
+            );
+            $customerSetup->updateEntityType(
+                'customer_address',
+                'entity_model',
+                'Magento\Customer\Model\ResourceModel\Address'
+            );
+            $customerSetup->updateEntityType(
+                'customer_address',
+                'entity_attribute_collection',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection'
+            );
+            $customerSetup->updateAttribute(
+                'customer_address',
+                'country_id',
+                'source',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Country'
+            );
+            $customerSetup->updateAttribute(
+                'customer_address',
+                'region',
+                'backend',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region'
+            );
+            $customerSetup->updateAttribute(
+                'customer_address',
+                'region_id',
+                'source',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Region'
+            );
+        }
 
         $indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
         $indexer->reindexAll();
diff --git a/app/code/Magento/Customer/etc/module.xml b/app/code/Magento/Customer/etc/module.xml
index a2b9b1eacfe..20c352f8c53 100644
--- a/app/code/Magento/Customer/etc/module.xml
+++ b/app/code/Magento/Customer/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Customer" setup_version="2.0.5">
+    <module name="Magento_Customer" setup_version="2.0.6">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Directory"/>
diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php
new file mode 100644
index 00000000000..f3283b97bd2
--- /dev/null
+++ b/app/code/Magento/Sales/Setup/UpgradeData.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Setup;
+
+use Magento\Framework\Setup\UpgradeDataInterface;
+use Magento\Framework\Setup\ModuleContextInterface;
+use Magento\Framework\Setup\ModuleDataSetupInterface;
+
+class UpgradeData implements UpgradeDataInterface
+{
+    /**
+     * Sales setup factory
+     *
+     * @var SalesSetupFactory
+     */
+    protected $salesSetupFactory;
+
+    /**
+     * @var \Magento\Eav\Model\Config
+     */
+    protected $eavConfig;
+
+    /**
+     * @param SalesSetupFactory $salesSetupFactory
+     * @param \Magento\Eav\Model\Config $eavConfig
+     */
+    public function __construct(
+        SalesSetupFactory $salesSetupFactory,
+        \Magento\Eav\Model\Config $eavConfig
+    ) {
+        $this->salesSetupFactory = $salesSetupFactory;
+        $this->eavConfig = $eavConfig;
+    }
+
+    /**
+     * {@inheritdoc}
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
+    {
+        $setup->startSetup();
+
+        /** @var SalesSetup $salesSetup */
+        $salesSetup = $this->salesSetupFactory->create(['setup' => $setup]);
+
+        if (version_compare($context->getVersion(), '2.0.1', '<')) {
+            $salesSetup->updateEntityType(
+                \Magento\Sales\Model\Order::ENTITY,
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order'
+            );
+            $salesSetup->updateEntityType(
+                \Magento\Sales\Model\Order::ENTITY,
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $salesSetup->updateEntityType(
+                'invoice',
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order'
+            );
+            $salesSetup->updateEntityType(
+                'invoice',
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $salesSetup->updateEntityType(
+                'creditmemo',
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order\Creditmemo'
+            );
+            $salesSetup->updateEntityType(
+                'creditmemo',
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $salesSetup->updateEntityType(
+                'shipment',
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order\Shipment'
+            );
+            $salesSetup->updateEntityType(
+                'shipment',
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+        }
+        $this->eavConfig->clear();
+        $setup->endSetup();
+    }
+}
diff --git a/app/code/Magento/Sales/etc/module.xml b/app/code/Magento/Sales/etc/module.xml
index 6ad917d859b..1239c5692db 100644
--- a/app/code/Magento/Sales/etc/module.xml
+++ b/app/code/Magento/Sales/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Sales" setup_version="2.0.0">
+    <module name="Magento_Sales" setup_version="2.0.1">
         <sequence>
             <module name="Magento_Rule"/>
             <module name="Magento_Catalog"/>
diff --git a/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php b/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php
index 734170053c9..e33309f46d8 100644
--- a/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php
+++ b/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php
@@ -12,7 +12,6 @@ class ReservedWordsSniff implements PHP_CodeSniffer_Sniff
 {
     /**
      * source: http://php.net/manual/en/reserved.other-reserved-words.php
-     * disabled(commented) items are not restricted int PHP 7 beta 3, just declared as prohibited
      *
      * @var array PHP 7 reserved words for name spaces
      */
-- 
GitLab


From 12b5a02b146a4db95488284c51311ee9a2120891 Mon Sep 17 00:00:00 2001
From: Siarhei Andreyeu <siarhei_andreyeu@epam.com>
Date: Mon, 12 Oct 2015 20:42:42 +0300
Subject: [PATCH 357/420] PV-224: Fixed noNamespaceSchemaLocation

---
 app/code/Magento/ProductVideo/etc/adminhtml/system.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
index b295e662803..f475ab5b70d 100644
--- a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../Config/etc/system_file.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
     <system>
         <section id="catalog">
             <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
-- 
GitLab


From acf779583382f27a54d370976e2575b6c7a37bd3 Mon Sep 17 00:00:00 2001
From: Natalia Momotenko <nmomotenko@ebay.com>
Date: Mon, 12 Oct 2015 20:43:33 +0300
Subject: [PATCH 358/420] MAGETWO-42256: Marketing Admin page lost its styles

---
 .../Magento/backend/web/css/source/forms/_controls.less  | 9 +++++++++
 .../Magento/Framework/Data/Form/Element/Checkboxes.php   | 8 ++++----
 .../Magento/Framework/Data/Form/Element/Note.php         | 2 +-
 .../Framework/Data/Test/Unit/Form/Element/NoteTest.php   | 2 +-
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
index ce0fee6a772..a8e768b98e1 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
@@ -176,6 +176,15 @@ option:empty {
     }
 }
 
+//
+//  Service text or control. Can be used to add text or "Use Default Value" checkbox
+//  ---------------------------------------------
+
+.admin__control-service {
+    float: left;
+    margin: .8rem 0 0 3rem;
+}
+
 //
 //  Textarea
 //  ---------------------------------------------
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php b/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php
index 1eb259438a5..c4f88313fc3 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php
@@ -194,10 +194,10 @@ class Checkboxes extends AbstractElement
     {
         $id = $this->getHtmlId() . '_' . $this->_escape($option['value']);
 
-        $html = '<div class="field choice"><input id="' . $id . '"';
+        $html = '<div class="field choice admin__field admin__field-option"><input id="' . $id . '"';
         foreach ($this->getHtmlAttributes() as $attribute) {
             if ($value = $this->getDataUsingMethod($attribute, $option['value'])) {
-                $html .= ' ' . $attribute . '="' . $value . '"';
+                $html .= ' ' . $attribute . '="' . $value . '" class="admin__control-checkbox"';
             }
         }
         $html .= ' value="' .
@@ -205,9 +205,9 @@ class Checkboxes extends AbstractElement
             '" />' .
             ' <label for="' .
             $id .
-            '">' .
+            '" class="admin__field-label"><span>' .
             $option['label'] .
-            '</label></div>' .
+            '</span></label></div>' .
             "\n";
         return $html;
     }
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Note.php b/lib/internal/Magento/Framework/Data/Form/Element/Note.php
index be04c5e2bea..06cad0f195e 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Note.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Note.php
@@ -39,7 +39,7 @@ class Note extends AbstractElement
         $html = $this->getBeforeElementHtml()
             . '<div id="'
             . $this->getHtmlId()
-            . '" class="control-value">'
+            . '" class="control-value admin__field-value">'
             . $this->getText()
             . '</div>'
             . $this->getAfterElementHtml();
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
index 23e07bf7fb2..a76a244f1ce 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
@@ -63,7 +63,7 @@ class NoteTest extends \PHPUnit_Framework_TestCase
         $this->_model->setValue('Note Text');
         $html = $this->_model->getElementHtml();
         $this->assertEquals(
-            "note_before<div id=\"note_id\" class=\"control-value\"></div>note_after",
+            "note_before<div id=\"note_id\" class=\"control-value admin__field-value\"></div>note_after",
             $html
         );
     }
-- 
GitLab


From c01a1562ace7da4f3e1f0f6b2ed7547aeb5c3fb3 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Mon, 12 Oct 2015 13:44:31 -0500
Subject: [PATCH 359/420] MAGETWO-32443: [GITHUB] if_module_enabled has no
 effect #934

---
 app/code/Magento/Config/Model/Config/Structure/Element/Field.php | 1 -
 .../Magento/Config/Model/Config/Structure/Element/Section.php    | 1 -
 2 files changed, 2 deletions(-)

diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
index e4678fb5e29..8f218a34f02 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
@@ -72,7 +72,6 @@ class Field extends \Magento\Config\Model\Config\Structure\AbstractElement
         $this->_commentFactory = $commentFactory;
         $this->_blockFactory = $blockFactory;
         $this->_dependencyMapper = $dependencyMapper;
-        $this->moduleManager = $moduleManager;
     }
 
     /**
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
index 7f61631dbe0..46696967d31 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
@@ -28,7 +28,6 @@ class Section extends AbstractComposite
     ) {
         parent::__construct($storeManager, $moduleManager, $childrenIterator);
         $this->_authorization = $authorization;
-        $this->moduleManager = $moduleManager;
     }
 
     /**
-- 
GitLab


From 2f307dbe5734f449c2e4f3261bf9e84260522c96 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Mon, 12 Oct 2015 14:59:17 -0500
Subject: [PATCH 360/420] MAGETWO-39769: [GITHUB] lastInsertId returns 0 when
 PK is not AI #1445

---
 .../Model/Test/Unit/ModelResource/Db/AbstractDbTest.php         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php
index ad83ddfc46d..71d0c2be8b0 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php
@@ -499,7 +499,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         /**
          * Mock SUT so as not to test extraneous logic
          */
-        $model = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $model = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['_prepareDataForSave', 'getIdFieldName', 'getConnection', 'getMainTable'])
             ->getMockForAbstractClass();
-- 
GitLab


From 938abc6a7bf254418add899ebab172c8e9e89a91 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 12 Oct 2015 23:49:19 +0300
Subject: [PATCH 361/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for unit tests
---
 app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php
index 775e1b21961..31e868cdf4c 100644
--- a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php
@@ -334,6 +334,15 @@ class DataTest extends \PHPUnit_Framework_TestCase
             ->method('setImageFile')
             ->with($image)
             ->willReturnSelf();
+        $this->imageHelperMock->expects($this->any())
+            ->method('constrainOnly')
+            ->willReturnSelf();
+        $this->imageHelperMock->expects($this->any())
+            ->method('keepAspectRatio')
+            ->willReturnSelf();
+        $this->imageHelperMock->expects($this->any())
+            ->method('keepFrame')
+            ->willReturnSelf();
         $this->imageHelperMock->expects($this->any())
             ->method('getUrl')
             ->willReturn('http://full_path_to_image/magento1.png');
-- 
GitLab


From 4897c36dc77a22cefce2a81b12628094ab749aa3 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 13 Oct 2015 00:49:22 +0300
Subject: [PATCH 362/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix for unit tests
---
 app/code/Magento/Catalog/Model/Product.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index 02719bd1f7d..99709b513ca 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -19,7 +19,7 @@ use Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionFactory;
  * Catalog product model
  *
  * @method Product setHasError(bool $value)
- * @method \Magento\Catalog\Model\Resource\Product getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product getResource()
  * @method null|bool getHasError()
  * @method Product setAssociatedProductIds(array $productIds)
  * @method array getAssociatedProductIds()
-- 
GitLab


From ac40fdce479df4a17d7cd0723c04f8801907c63f Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 13 Oct 2015 00:49:56 +0300
Subject: [PATCH 363/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix var parser
---
 .../Magento/Framework/Config/View.php         | 21 +++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index b0ebadc89a5..dc223024610 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -107,8 +107,10 @@ class View extends \Magento\Framework\Config\AbstractXml
     }
 
     /**
+     * Recursive parser for <var> nodes
+     *
      * @param \DOMElement $node
-     * @return string|[]
+     * @return string|boolean|number|null|[]
      */
     protected function parseVarElement(\DOMElement $node)
     {
@@ -120,7 +122,22 @@ class View extends \Magento\Framework\Config\AbstractXml
             }
         }
         if (!count($result)) {
-            $result = $node->nodeValue;
+            switch ($node->nodeValue) {
+                case 'false':
+                    $result = false;
+                    break;
+                case 'true':
+                    $result = true;
+                    break;
+                case 'null':
+                    $result = null;
+                    break;
+                default:
+                    $result = $node->nodeValue;
+                    if ($result == strval(floatval($result))) {
+                        $result = floatval($result);
+                    }
+            };
         }
 
         return $result;
-- 
GitLab


From 381df205c164710cc35e679debf09465946fb634 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 13 Oct 2015 01:35:24 +0300
Subject: [PATCH 364/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix var parser
---
 lib/internal/Magento/Framework/Config/View.php | 18 +-----------------
 1 file changed, 1 insertion(+), 17 deletions(-)

diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index dc223024610..98a96140188 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -122,24 +122,8 @@ class View extends \Magento\Framework\Config\AbstractXml
             }
         }
         if (!count($result)) {
-            switch ($node->nodeValue) {
-                case 'false':
-                    $result = false;
-                    break;
-                case 'true':
-                    $result = true;
-                    break;
-                case 'null':
-                    $result = null;
-                    break;
-                default:
-                    $result = $node->nodeValue;
-                    if ($result == strval(floatval($result))) {
-                        $result = floatval($result);
-                    }
-            };
+            $result = $node->nodeValue;
         }
-
         return $result;
     }
 
-- 
GitLab


From 2b9bc21769f99ef4b02f4b0dba477449b780f3c7 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Tue, 13 Oct 2015 10:44:16 +0300
Subject: [PATCH 365/420] MAGETWO-43966: Performance degradation on section
 load

---
 .../Magento/Customer/Block/CustomerData.php   | 32 +------------------
 .../frontend/templates/js/customer-data.phtml |  1 -
 .../view/frontend/web/js/customer-data.js     |  8 -----
 3 files changed, 1 insertion(+), 40 deletions(-)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 66d4043f152..9d30a56de21 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -7,24 +7,14 @@ namespace Magento\Customer\Block;
 
 class CustomerData extends \Magento\Framework\View\Element\Template
 {
-    /**
-     * Sections that can not be cached on frontend-side
-     *
-     * @var array
-     */
-    protected $nonCachedSections = [];
-
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param array $data
-     * @param array $nonCachedSections
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        array $data = [],
-        array $nonCachedSections = []
+        array $data = []
     ) {
-        $this->nonCachedSections = $nonCachedSections;
         parent::__construct($context, $data);
     }
 
@@ -50,24 +40,4 @@ class CustomerData extends \Magento\Framework\View\Element\Template
     {
         return $this->getUrl($route, ['_secure' => $this->getRequest()->isSecure()]);
     }
-
-    /**
-     * Get sections that can not be cached on frontend-side
-     *
-     * @return array
-     */
-    public function getNotCachedSections()
-    {
-        return $this->nonCachedSections;
-    }
-
-    /**
-     * Get keys of sections that can not be cached on frontend-side
-     *
-     * @return array
-     */
-    public function getNonCachedSectionKeys()
-    {
-        return array_keys($this->nonCachedSections);
-    }
 }
diff --git a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
index 60441eb039d..b34e7c871d3 100644
--- a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
@@ -13,7 +13,6 @@
         '*' => ['Magento_Customer/js/customer-data' => [
             'sectionLoadUrl' => $block->getCustomerDataUrl('customer/section/load'),
             'cookieLifeTime' => $block->getCookieLifeTime(),
-            'nonCachedSections' => $block->getNonCachedSectionKeys(),
         ]],
     ]);
 ?>
diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index ae42dc97892..f4f79932d39 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -23,8 +23,6 @@ define([
             storage.removeAll();
             var date = new Date(Date.now() + parseInt(options.cookieLifeTime, 10) * 1000);
             $.localStorage.set('mage-cache-timeout', date);
-        } else {
-            invalidateNonCachedSections(options);
         }
     };
 
@@ -35,12 +33,6 @@ define([
         }
     };
 
-    var invalidateNonCachedSections = function(options) {
-        _.each(options.nonCachedSections, function (sectionName) {
-            storageInvalidation.set(sectionName, true);
-        });
-    }
-
     var dataProvider = {
         getFromStorage: function (sectionNames) {
             var result = {};
-- 
GitLab


From ede6b42329e899fedba88996d40b341ea0aeeb7a Mon Sep 17 00:00:00 2001
From: Yaroslav Onischenko <yonischenko@ebay.com>
Date: Tue, 13 Oct 2015 11:55:05 +0300
Subject: [PATCH 366/420] MAGETWO-43977: Problems with Sample Data content on
 Store Front after installation

---
 app/code/Magento/CatalogImportExport/Model/Import/Product.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
index 09c883b094a..1e8fcbc4aa0 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
@@ -1803,7 +1803,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
                         'value' => $insertValue['value'],
                     ];
                     $valueToProductId[$insertValue['value']] = $productId;
-                    $imageNames = $insertValue['value'];
+                    $imageNames[] = $insertValue['value'];
                     $multiInsertData[] = $valueArr;
                     $insertedGalleryImgs[] = $insertValue['value'];
                 }
-- 
GitLab


From 5607d47f7f3eb0ba2c4c3ebe5487de59a916ff39 Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Tue, 13 Oct 2015 11:57:58 +0300
Subject: [PATCH 367/420] MAGETWO-43942: Unable to place order within PayPal
 through Braintree if click PayPal Check out in shopping cart

---
 app/code/Magento/Braintree/etc/frontend/di.xml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/app/code/Magento/Braintree/etc/frontend/di.xml b/app/code/Magento/Braintree/etc/frontend/di.xml
index ddc18722e8d..83dc6607ed3 100644
--- a/app/code/Magento/Braintree/etc/frontend/di.xml
+++ b/app/code/Magento/Braintree/etc/frontend/di.xml
@@ -21,4 +21,11 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\Url\SecurityInfo">
+        <arguments>
+            <argument name="secureUrlList" xsi:type="array">
+                <item name="braintree" xsi:type="string">/braintree/</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
-- 
GitLab


From 32bc7fcdd921754066399232524b4fd73628465c Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Tue, 13 Oct 2015 12:06:17 +0300
Subject: [PATCH 368/420] MAGETWO-43920: [GitHub]Magento requires reinstalling
 after PR #697

fix for upgrade script
---
 app/code/Magento/Customer/Setup/UpgradeData.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Customer/Setup/UpgradeData.php b/app/code/Magento/Customer/Setup/UpgradeData.php
index 6c6e32e92eb..7f43ee046bd 100644
--- a/app/code/Magento/Customer/Setup/UpgradeData.php
+++ b/app/code/Magento/Customer/Setup/UpgradeData.php
@@ -269,19 +269,19 @@ class UpgradeData implements UpgradeDataInterface
             $customerSetup->updateAttribute(
                 'customer_address',
                 'country_id',
-                'source',
+                'source_model',
                 'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Country'
             );
             $customerSetup->updateAttribute(
                 'customer_address',
                 'region',
-                'backend',
+                'backend_model',
                 'Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region'
             );
             $customerSetup->updateAttribute(
                 'customer_address',
                 'region_id',
-                'source',
+                'source_model',
                 'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Region'
             );
         }
-- 
GitLab


From b5d39276e280c2d3c3d8bff0fbc0501b7fbfd2d2 Mon Sep 17 00:00:00 2001
From: Evgeniy Kolesov <ikolesov@ebay.com>
Date: Tue, 6 Oct 2015 17:12:21 +0300
Subject: [PATCH 369/420] MAGETWO-43072: Style issues in Web Setup Wizard

- Fixes after merge with mainline
---
 .../less/components/_navigation-bar.less      |  3 ++-
 .../less/components/tooltips/_tooltips.less   |  3 +++
 .../app/setup/styles/less/lib/_buttons.less   |  3 +--
 .../setup/styles/less/lib/_structures.less    |  3 +++
 .../app/setup/styles/less/lib/_variables.less |  2 +-
 .../styles/less/pages/_readiness-check.less   | 10 ++++++--
 .../web/app/setup/styles/less/setup.less      |  1 -
 .../styles/less/pages/_readiness-check.less   | 23 -------------------
 setup/pub/styles/setup.css                    |  2 +-
 setup/view/magento/setup/home.phtml           | 20 ++++++++--------
 .../view/magento/setup/navigation/menu.phtml  |  6 ++---
 setup/view/magento/setup/select-version.phtml |  4 ++--
 12 files changed, 34 insertions(+), 46 deletions(-)
 delete mode 100644 app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less

diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less
index e5749d61309..b0032568136 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less
@@ -40,11 +40,12 @@
 //  ---------------------------------------------
 
 .nav {
+    .extend__clearer();
     background-color: @nav__background-color;
     border-bottom: 1px solid @nav__border-color;
     border-top: 1px solid @nav__border-color;
-    .extend__clearer();
     display: none;
+    margin-bottom: @nav-bar__indent-top;
     padding: @nav-bar-dot__size @nav__indent-right 0 0;
 }
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less
index 17e40244032..f364351ed02 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less
@@ -54,6 +54,9 @@
         margin-left: -(@tooltip-arrow__size / 2);
         padding: 0 @tooltip-arrow__size;
     }
+    p:last-child {
+        margin-bottom: 0;
+    }
 }
 
 //  Wrapper for the tooltip content
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less
index ea227158185..3d18910a59e 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less
@@ -113,8 +113,7 @@
         );
         color: @btn-prime__color;
     }
-    &:active,
-    &:focus {
+    &:active {
         .lib-background-gradient(
         @_background-gradient: true,
         @_background-gradient-direction: horizontal,
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less
index 5a63e780678..0dd2a8ed52b 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less
@@ -3,6 +3,9 @@
 //  * See COPYING.txt for license details.
 //  */
 
+body:not([class]) {
+    min-width: 0;
+}
 .container {
     display: block;
     margin: 0 auto 4rem;
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less
index 7f63e9a9933..7b9cc9eb8d2 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less
@@ -156,7 +156,7 @@
 //  ---------------------------------------------
 
 @container__width: 100rem;
-@container__indent: 2rem;
+@container__indent: 0;
 
 @content__indent: @indent__l;
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
index 542d96aedeb..cde931e2c71 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
@@ -10,7 +10,7 @@
 //  Sizes
 
 @readiness-check-side__width: 22rem;
-@readiness-check-content__indent: 7.5rem;
+@readiness-check-content__indent: 5.7rem;
 
 //
 //  Common
@@ -18,6 +18,12 @@
 
 .readiness-check-item {
     margin-bottom: 4rem;
+    min-height: 2.5rem;
+    .spinner {
+        font-size: 2.5rem;
+        float: left;
+        margin: -.4rem 0 0 1.7rem;
+    }
 }
 
 .readiness-check-title {
@@ -49,7 +55,7 @@
 
 .readiness-check-icon {
     float: left;
-    margin-left: 2rem;
+    margin-left: 1.7rem;
     margin-top: .7rem;
 }
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
index 963c6b01b9f..c2bbaf8f432 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
@@ -98,7 +98,6 @@
 //  Updater pages
 @import '../../../updater/styles/less/pages/_common.less';
 @import '../../../updater/styles/less/pages/_home.less';
-@import '../../../updater/styles/less/pages/_readiness-check.less';
 @import '../../../updater/styles/less/pages/_component-manager.less';
 @import '../../../updater/styles/less/pages/_login.less';
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less
deleted file mode 100644
index 2b6356f5f41..00000000000
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less
+++ /dev/null
@@ -1,23 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//  Upgrade -> Pages -> Readiness Check
-//  _____________________________________________
-
-.readiness-check-item {
-    padding-top: .3rem;
-}
-
-.readiness-check-icon {
-    margin-left: 2.4rem;
-    margin-top: -0.1rem;
-    &.icon-success {
-        font-size: 2rem;
-    }
-    &.icon-failed {
-        font-size: 1.6rem;
-    }
-}
\ No newline at end of file
diff --git a/setup/pub/styles/setup.css b/setup/pub/styles/setup.css
index c8cf89e38ec..ebfc3c33616 100644
--- a/setup/pub/styles/setup.css
+++ b/setup/pub/styles/setup.css
@@ -3,4 +3,4 @@
  * See COPYING.txt for license details.
  */
 
-.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active,.btn-prime:focus{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0 2rem}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:7.5rem}.readiness-check-content{margin-left:7.5rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.readiness-check-item{padding-top:.3rem}.readiness-check-icon{margin-left:2.4rem;margin-top:-.1rem}.readiness-check-icon.icon-success{font-size:2rem}.readiness-check-icon.icon-failed{font-size:1.6rem}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
+.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{font-size:2.5rem;float:left;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.7rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
\ No newline at end of file
diff --git a/setup/view/magento/setup/home.phtml b/setup/view/magento/setup/home.phtml
index 4dd3b27962e..42387438af5 100644
--- a/setup/view/magento/setup/home.phtml
+++ b/setup/view/magento/setup/home.phtml
@@ -6,27 +6,27 @@
 ?>
 
 <section class="home-page-inner-wrap ng-scope">
-    <p class="upgrade-home-title">
+    <p class="setup-home-title">
         Welcome to the Magento Setup Tool. Please choose a task below.
     </p>
 
     <div class="row" style="padding-left: 145px;" >
         <div class="col-m-4">
-            <a href="" class="upgrade-home-item upgrade-home-item-component" ui-sref="root.update">
-                <span class="upgrade-home-item-title">Component Manager</span>
-                <span class="upgrade-home-item-description">I want to manage my packages and modules.</span>
+            <a href="" class="setup-home-item setup-home-item-component" ui-sref="root.update">
+                <span class="setup-home-item-title">Component Manager</span>
+                <span class="setup-home-item-description">I want to manage my packages and modules.</span>
             </a>
         </div>
         <div class="col-m-4">
-            <a href="" class="upgrade-home-item upgrade-home-item-upgrade" ui-sref="root.upgrade">
-                <span class="upgrade-home-item-title">System Upgrade</span>
-                <span class="upgrade-home-item-description">I want to upgrade my Magento Admin version.</span>
+            <a href="" class="setup-home-item setup-home-item-upgrade" ui-sref="root.upgrade">
+                <span class="setup-home-item-title">System Upgrade</span>
+                <span class="setup-home-item-description">I want to upgrade my Magento Admin version.</span>
             </a>
         </div>
         <div class="col-m-4">
-            <a href="" class="upgrade-home-item upgrade-home-item-configuration" ui-sref="root.system-config">
-                <span class="upgrade-home-item-title">System Configuration</span>
-                <span class="upgrade-home-item-description">I want to change my Magento system configurations.</span>
+            <a href="" class="setup-home-item setup-home-item-configuration" ui-sref="root.system-config">
+                <span class="setup-home-item-title">System Configuration</span>
+                <span class="setup-home-item-description">I want to change my Magento system configurations.</span>
             </a>
         </div>
     </div>
diff --git a/setup/view/magento/setup/navigation/menu.phtml b/setup/view/magento/setup/navigation/menu.phtml
index d3ea9768c9a..b69df93fae2 100644
--- a/setup/view/magento/setup/navigation/menu.phtml
+++ b/setup/view/magento/setup/navigation/menu.phtml
@@ -17,8 +17,8 @@
 
 </head>
 
-<div>
-    <nav ng-controller="navigationController" id="menu" class="nav ng-scope show"
+
+<nav ng-controller="navigationController" id="menu" class="nav ng-scope show"
          ng-hide="$state.current.noMenu || $state.current.main || $state.current.default">
     <ul class="nav-bar">
         <li ng-repeat="menuState in menu | filter: {type: $state.current.type}:true"
@@ -29,4 +29,4 @@
         </li>
     </ul>
 </nav>
-</div>
+
diff --git a/setup/view/magento/setup/select-version.phtml b/setup/view/magento/setup/select-version.phtml
index 9cfca95e680..b1a8367978e 100644
--- a/setup/view/magento/setup/select-version.phtml
+++ b/setup/view/magento/setup/select-version.phtml
@@ -5,8 +5,6 @@
  */
 ?>
 
-<h2 class="page-title">{{$state.current.header}}</h2>
-
 <div class="nav-bar-outer-actions">
 
     <div class="outer-actions-inner-wrap">
@@ -30,6 +28,8 @@
     </div>
 </div>
 
+<h2 class="page-sub-title">{{$state.current.header}}</h2>
+
 <div class="row form-row">
     <div class="message message-spinner" ng-show="!upgradeProcessed">
         <span class="spinner">
-- 
GitLab


From b240869a892061f58291de78570e004cca26e2fe Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Tue, 13 Oct 2015 12:36:57 +0300
Subject: [PATCH 370/420] MAGETWO-43951: Unable to place order within
 Authorize.net from backend

 - Fixed incorrect variable usage
 - Updated version of code sniffer
---
 .../adminhtml/templates/directpost/info.phtml     | 15 +++++++++------
 composer.json                                     |  2 +-
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
index c6dd0ce00e6..5c04fb59e0c 100644
--- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
+++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
@@ -4,7 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
 
 /**
  * @var \Magento\Authorizenet\Block\Transparent\Iframe $block
@@ -24,10 +23,12 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
         src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>">
 </iframe>
 <!-- IFRAME for request to Authorize.net -->
-<iframe id="directpost-iframe" allowtransparency="true" frameborder="0"  name="iframeDirectPost" style="display:none;width:100%;background-color:transparent"
+<iframe id="directpost-iframe" allowtransparency="true" frameborder="0"  name="iframeDirectPost"
+        style="display:none;width:100%;background-color:transparent"
         src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>">
 </iframe>
-<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
+<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>"
+          style="display:none;">
     <div class="admin__field _required">
         <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="admin__field-label">
             <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
@@ -81,11 +82,11 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                             <?php if ($k == $ccExpYear): ?>selected="selected"<?php endif; ?>>
                         <?php echo $block->escapeHtml($v); ?>
                     </option>
-                <?php endforeach ?>
+                <?php endforeach; ?>
             </select>
         </div>
     </div>
-    <?php if ($_form->hasVerification()): ?>
+    <?php if ($block->hasVerification()): ?>
     <div class="admin__field _required">
         <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid">
             <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
@@ -123,7 +124,9 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
             '<?php /* @noEscape */ echo $controller; ?>',
             '<?php /* @noEscape */ echo $orderUrl; ?>',
             '<?php echo $block->escapeUrl($method->getCgiUrl()); ?>',
-            '<?php /* @noEscape */ echo $block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()]) ?>');
+            '<?php /* @noEscape */ echo $block->getUrl('*/*/save', [
+                '_secure' => $block->getRequest()->isSecure()
+            ]);?>');
 
         <?php if (!$block->isAjaxRequest()): ?>
             });
diff --git a/composer.json b/composer.json
index 0fa24640ae4..e0d6f057360 100644
--- a/composer.json
+++ b/composer.json
@@ -53,7 +53,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "1.5.3",
+        "squizlabs/php_codesniffer": "2.3.4",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
         "lib-libxml": "*",
-- 
GitLab


From 948f39a8c9fdda7f434585a8e1892f8210e668ee Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Tue, 13 Oct 2015 12:40:42 +0300
Subject: [PATCH 371/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

CR changes
static test fix
---
 .../Adminhtml/Order/Pdfinvoices.php           |  3 +++
 .../Test/Legacy/_files/obsolete_classes.php   | 20 +++++++++++++++++++
 .../Legacy/_files/obsolete_namespaces.php     |  1 +
 3 files changed, 24 insertions(+)

diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
index 15469cdf292..6f7f353dddc 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
@@ -17,6 +17,9 @@ use Magento\Framework\Controller\ResultInterface;
 use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory;
 use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class Pdfinvoices extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
     /**
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 a782da65571..f81735e973a 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -804,23 +804,42 @@ return [
     ['Magento\Core\Model\Email\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'],
     ['Magento\Core\Model\Email\Template\Mailer', 'Magento\Framework\Mail\Template\TransportBuilder'],
     ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\ResourceModel\AbstractResource'],
+    [
+        'Magento\Framework\Model\ModelResource\AbstractResource',
+        'Magento\Framework\Model\ResourceModel\AbstractResource'
+    ],
     ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
+    ['Magento\Framework\Model\ModelResource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
     ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
+    ['Magento\Framework\Model\ModelResource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
     [
         'Magento\Core\Model\Resource\Entity\AbstractEntity',
         'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity',
     ],
+    [
+        'Magento\Framework\Model\ModelResource\Entity\AbstractEntity',
+        'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity',
+    ],
     ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'],
+    ['Magento\Framework\Model\ModelResource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'],
     ['Magento\Core\Model\Resource\Flag', 'Magento\Framework\Flag\FlagResource'],
     ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'],
+    ['Magento\Framework\Model\ModelResource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'],
     ['Magento\Core\Model\Resource\Resource', 'Magento\Framework\Module\ModuleResource'],
     ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'],
+    ['Magento\Framework\Model\ModelResource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'],
     ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
+    ['Magento\Framework\Model\ModelResource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
     ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
+    ['Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
     [
         'Magento\Core\Model\Resource\Db\Collection\AbstractCollection',
         'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
     ],
+    [
+        'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+        'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
+    ],
     ['Magento\Email\Model\Info', 'Magento\Framework\Mail\MessageInterface'],
     ['Magento\Email\Model\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'],
     ['Magento\Email\Model\Template\Mailer', 'Magento\Framework\Mail\Template\TransportBuilder'],
@@ -2926,6 +2945,7 @@ return [
     ],
     ['Magento\Sales\Controller\Adminhtml\Order\InvoiceLoader'],
     ['Magento\Sales\Model\ResourceModel\AbstractResource', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
+    ['Magento\Framework\Model\ModelResource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
     ['Magento\Backend\Block\System\Config\Switcher'],
     ['Magento\VersionsCms\Block\Adminhtml\Scope\Switcher'],
     ['Magento\Backend\Block\Widget\View\Container'],
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
index 924b33deb90..2419014c40d 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
@@ -193,4 +193,5 @@ return [
     ['Magento\Framework\Model\Resource', 'Magento\Framework\Model\ResourceModel'],
     ['Magento\Framework\Model\ModelResource', 'Magento\Framework\Model\ResourceModel'],
     ['Magento\Framework\Model\Test\Unit\Resource', 'Magento\Framework\Model\Test\Unit\ResourceModel'],
+    ['Magento\Framework\Model\Test\Unit\ModelResource', 'Magento\Framework\Model\Test\Unit\ResourceModel'],
 ];
-- 
GitLab


From 3f5482bdced0ce030614ea600770d339c98f76e4 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Tue, 13 Oct 2015 12:56:58 +0300
Subject: [PATCH 372/420] MAGETWO-43951: Unable to place order within
 Authorize.net from backend

 - Updated version of code sniffer
---
 .../Framework/Composer/_files/testFromClone/composer.json       | 2 +-
 .../Composer/_files/testFromCreateProject/composer.json         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
index 438e99d692d..11c14569efd 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
@@ -41,7 +41,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "1.5.3",
+        "squizlabs/php_codesniffer": "2.3.4",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
         "lib-libxml": "*",
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
index e7403b54be9..285e6772dea 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
@@ -12,7 +12,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "1.5.3",
+        "squizlabs/php_codesniffer": "2.3.4",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
         "lib-libxml": "*",
-- 
GitLab


From b710315388b6181ef171d1b6c7d8710d187b7a87 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Tue, 13 Oct 2015 13:13:58 +0300
Subject: [PATCH 373/420] MAGETWO-43951: Unable to place order within
 Authorize.net from backend

 - Changed composer version to old
---
 .../Authorizenet/view/adminhtml/templates/directpost/info.phtml | 2 +-
 composer.json                                                   | 2 +-
 .../Framework/Composer/_files/testFromClone/composer.json       | 2 +-
 .../Composer/_files/testFromCreateProject/composer.json         | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
index 5c04fb59e0c..6c02076b5a7 100644
--- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
+++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-
+// @codingStandardsIgnoreFile
 /**
  * @var \Magento\Authorizenet\Block\Transparent\Iframe $block
  * @see \Magento\Authorizenet\Block\Transparent\Iframe
diff --git a/composer.json b/composer.json
index e0d6f057360..0fa24640ae4 100644
--- a/composer.json
+++ b/composer.json
@@ -53,7 +53,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "2.3.4",
+        "squizlabs/php_codesniffer": "1.5.3",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
         "lib-libxml": "*",
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
index 11c14569efd..438e99d692d 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
@@ -41,7 +41,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "2.3.4",
+        "squizlabs/php_codesniffer": "1.5.3",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
         "lib-libxml": "*",
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
index 285e6772dea..e7403b54be9 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
@@ -12,7 +12,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "2.3.4",
+        "squizlabs/php_codesniffer": "1.5.3",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
         "lib-libxml": "*",
-- 
GitLab


From 9087aed550660126ef8a51e33e2d9524d6bfb503 Mon Sep 17 00:00:00 2001
From: Yaroslav Onischenko <yonischenko@ebay.com>
Date: Tue, 13 Oct 2015 13:34:51 +0300
Subject: [PATCH 374/420] MAGETWO-43977: Problems with Sample Data content on
 Store Front after installation

---
 .../Magento/SampleData/Model/BlackHole.php    | 22 -------------------
 app/code/Magento/SampleData/etc/di.xml        | 20 -----------------
 2 files changed, 42 deletions(-)
 delete mode 100644 app/code/Magento/SampleData/Model/BlackHole.php

diff --git a/app/code/Magento/SampleData/Model/BlackHole.php b/app/code/Magento/SampleData/Model/BlackHole.php
deleted file mode 100644
index 06f557d3184..00000000000
--- a/app/code/Magento/SampleData/Model/BlackHole.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\SampleData\Model;
-
-/**
- *  Mail Transport that do not send mail
- */
-class BlackHole implements \Magento\Framework\Mail\TransportInterface
-{
-    /**
-     * Send a mail using this transport
-     *
-     * @return void
-     */
-    public function sendMessage()
-    {
-        return true;
-    }
-}
diff --git a/app/code/Magento/SampleData/etc/di.xml b/app/code/Magento/SampleData/etc/di.xml
index 1ddee22996d..a34bdcabd0f 100644
--- a/app/code/Magento/SampleData/etc/di.xml
+++ b/app/code/Magento/SampleData/etc/di.xml
@@ -15,24 +15,4 @@
             </argument>
         </arguments>
     </type>
-    <virtualType name="Magento\SampleData\Model\BlackHoleFactory" type="\Magento\Framework\Mail\TransportInterfaceFactory">
-        <arguments>
-            <argument name="instanceName" xsi:type="string">Magento\SampleData\Model\BlackHole</argument>
-        </arguments>
-    </virtualType>
-    <virtualType name="blackHoleTransportBuilder" type="Magento\Framework\Mail\Template\TransportBuilder">
-        <arguments>
-            <argument name="mailTransportFactory" xsi:type="object" >Magento\SampleData\Model\BlackHoleFactory</argument>
-        </arguments>
-    </virtualType>
-    <virtualType  name="sampleDataAccountManagement" type="Magento\Customer\Model\AccountManagement">
-        <arguments>
-            <argument name="transportBuilder" xsi:type="object">blackHoleTransportBuilder</argument>
-        </arguments>
-    </virtualType>
-    <type name="Magento\SampleData\Module\Customer\Setup\Customer">
-        <arguments>
-            <argument name="accountManagement" xsi:type="object">sampleDataAccountManagement</argument>
-        </arguments>
-    </type>
 </config>
-- 
GitLab


From b0f8d19973bda995d8c8edd038850285ce379830 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Tue, 13 Oct 2015 13:39:14 +0300
Subject: [PATCH 375/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

removed extra pattern
---
 .../testsuite/Magento/Test/Legacy/_files/obsolete_classes.php    | 1 -
 1 file changed, 1 deletion(-)

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 92c2bd24331..f6e9a5779e1 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -809,7 +809,6 @@ return [
         'Magento\Framework\Model\ResourceModel\AbstractResource'
     ],
     ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
-    ['Magento\Framework\Model\ModelResource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
     ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
     ['Magento\Framework\Model\ModelResource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
     [
-- 
GitLab


From 0f2faf506155d7f896b7d12957e338c2663450ad Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Tue, 13 Oct 2015 15:08:50 +0300
Subject: [PATCH 376/420] MAGETWO-43951: Unable to place order within
 Authorize.net from backend

 - Fixed typo in variable name
---
 .../Payment/view/adminhtml/templates/info/default.phtml        | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
index 99805632010..2ce70dcad46 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
@@ -9,10 +9,11 @@
  * @var \Magento\Payment\Block\Info $block
  * @see \Magento\Payment\Block\Info
  */
+$specificInfo = $block->getSpecificInformation();
 ?>
 <?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?>
 
-<?php if ($_specificInfo = $block->getSpecificInformation()):?>
+<?php if ($specificInfo): ?>
     <table class="data-table admin__table-secondary">
     <?php foreach ($specificInfo as $label => $value):?>
         <tr>
-- 
GitLab


From b1e5ae41b8d2e8400ce012a2b35fa26167d62bd3 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@ebay.com>
Date: Tue, 13 Oct 2015 15:14:47 +0300
Subject: [PATCH 377/420] MAGETWO-39604: [GITHUB] Doesn't work sorting in the
 search list. #1432

---
 .../Catalog/Block/Product/ProductList/Toolbar.php     | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
index 7188c99efea..4661cfb7110 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Catalog\Block\Product\ProductList;
 
+use Magento\Catalog\Helper\Product\ProductList;
 use Magento\Catalog\Model\Product\ProductList\Toolbar as ToolbarModel;
 
 /**
@@ -63,7 +64,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
      *
      * @var string
      */
-    protected $_direction = \Magento\Catalog\Helper\Product\ProductList::DEFAULT_SORT_DIRECTION;
+    protected $_direction = ProductList::DEFAULT_SORT_DIRECTION;
 
     /**
      * Default View mode
@@ -102,7 +103,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     protected $_toolbarModel;
 
     /**
-     * @var \Magento\Catalog\Helper\Product\ProductList
+     * @var ProductList
      */
     protected $_productListHelper;
 
@@ -122,7 +123,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
      * @param \Magento\Catalog\Model\Config $catalogConfig
      * @param ToolbarModel $toolbarModel
      * @param \Magento\Framework\Url\EncoderInterface $urlEncoder
-     * @param \Magento\Catalog\Helper\Product\ProductList $productListHelper
+     * @param ProductList $productListHelper
      * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper
      * @param array $data
      */
@@ -132,7 +133,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
         \Magento\Catalog\Model\Config $catalogConfig,
         ToolbarModel $toolbarModel,
         \Magento\Framework\Url\EncoderInterface $urlEncoder,
-        \Magento\Catalog\Helper\Product\ProductList $productListHelper,
+        ProductList $productListHelper,
         \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
         array $data = []
     ) {
@@ -678,7 +679,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
             'order' => ToolbarModel::ORDER_PARAM_NAME,
             'limit' => ToolbarModel::LIMIT_PARAM_NAME,
             'modeDefault' => $defaultMode,
-            'directionDefault' => \Magento\Catalog\Helper\Product\ProductList::DEFAULT_SORT_DIRECTION,
+            'directionDefault' => $this->_direction ?: ProductList::DEFAULT_SORT_DIRECTION,
             'orderDefault' => $this->_productListHelper->getDefaultSortField(),
             'limitDefault' => $this->_productListHelper->getDefaultLimitPerPageValue($defaultMode),
             'url' => $this->getPagerUrl(),
-- 
GitLab


From bac9ee78182d34c3087726050be9d040ee1d5f44 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Tue, 13 Oct 2015 15:33:30 +0300
Subject: [PATCH 378/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

static test fix
---
 .../Magento/Test/Legacy/_files/obsolete_classes.php    | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

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 f6e9a5779e1..3093142055f 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -826,11 +826,17 @@ return [
     ['Magento\Framework\Model\ModelResource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'],
     ['Magento\Core\Model\Resource\Resource', 'Magento\Framework\Module\ModuleResource'],
     ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'],
-    ['Magento\Framework\Model\ModelResource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'],
+    [
+        'Magento\Framework\Model\ModelResource\Type\AbstractType',
+        'Magento\Framework\Model\ResourceModel\Type\AbstractType'
+    ],
     ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
     ['Magento\Framework\Model\ModelResource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
     ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
-    ['Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
+    [
+        'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql',
+        'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'
+    ],
     [
         'Magento\Core\Model\Resource\Db\Collection\AbstractCollection',
         'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
-- 
GitLab


From 54c510a585a2d5048ab2de9b5db57d7c7860e74d Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Tue, 13 Oct 2015 15:50:10 +0300
Subject: [PATCH 379/420] MAGETWO-43950: Unable to place order within PayPal
 Express Checkout with virtual product

---
 app/code/Magento/Paypal/Model/Express/Checkout.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Paypal/Model/Express/Checkout.php b/app/code/Magento/Paypal/Model/Express/Checkout.php
index d9b9d986f1b..214a4d6f293 100644
--- a/app/code/Magento/Paypal/Model/Express/Checkout.php
+++ b/app/code/Magento/Paypal/Model/Express/Checkout.php
@@ -1191,10 +1191,10 @@ class Checkout
     /**
      * Set shipping options to api
      * @param \Magento\Paypal\Model\Cart $cart
-     * @param \Magento\Quote\Model\Quote\Address $address
+     * @param \Magento\Quote\Model\Quote\Address|null $address
      * @return void
      */
-    private function setShippingOptions(PaypalCart $cart, Address $address)
+    private function setShippingOptions(PaypalCart $cart, $address)
     {
         // for included tax always disable line items (related to paypal amount rounding problem)
         $this->_api->setIsLineItemsEnabled($this->_config->getValue(PaypalConfig::TRANSFER_CART_LINE_ITEMS));
-- 
GitLab


From 833d9e6beafef0e8853e66bcdd67f94f73f526db Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Tue, 13 Oct 2015 16:12:10 +0300
Subject: [PATCH 380/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

static test fix
---
 .../testsuite/Magento/Test/Legacy/_files/obsolete_classes.php    | 1 -
 1 file changed, 1 deletion(-)

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 3093142055f..e4864f983e5 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -4000,7 +4000,6 @@ return [
     ['Magento\Framework\Module\Resource', 'Magento\Framework\Module\ModuleResource'],
     ['Magento\OfflineShipping\Model\Observer\SalesRule\ActionsTab', 'Magento\OfflineShipping\Observer\*'],
     ['Magento\Theme\Model\Observer', 'Magento\Theme\Observer\*'],
-    ['Magento\Catalog\Model\Product\Compare\Item', 'Magento\Catalog\Observer\*'],
     ['Magento\Catalog\Observer\AddCatalogToTopmenuItems', 'Magento\Catalog\Observer\*'],
     ['Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowed', 'Magento\Catalog\Observer\*'],
     [
-- 
GitLab


From 50d3dc191a5769259624351938bdd2c86b816e20 Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Tue, 13 Oct 2015 16:08:14 +0300
Subject: [PATCH 381/420] MAGETWO-43950: Unable to place order within PayPal
 Express Checkout with virtual product

- Revert commit of 54c510a585a2d5048ab2de9b5db57d7c7860e74d
---
 app/code/Magento/Paypal/Model/Express/Checkout.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Paypal/Model/Express/Checkout.php b/app/code/Magento/Paypal/Model/Express/Checkout.php
index 214a4d6f293..d9b9d986f1b 100644
--- a/app/code/Magento/Paypal/Model/Express/Checkout.php
+++ b/app/code/Magento/Paypal/Model/Express/Checkout.php
@@ -1191,10 +1191,10 @@ class Checkout
     /**
      * Set shipping options to api
      * @param \Magento\Paypal\Model\Cart $cart
-     * @param \Magento\Quote\Model\Quote\Address|null $address
+     * @param \Magento\Quote\Model\Quote\Address $address
      * @return void
      */
-    private function setShippingOptions(PaypalCart $cart, $address)
+    private function setShippingOptions(PaypalCart $cart, Address $address)
     {
         // for included tax always disable line items (related to paypal amount rounding problem)
         $this->_api->setIsLineItemsEnabled($this->_config->getValue(PaypalConfig::TRANSFER_CART_LINE_ITEMS));
-- 
GitLab


From 8afcb7906219c988d36861702b6d7af6abaa3130 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 13 Oct 2015 16:32:44 +0300
Subject: [PATCH 382/420] MAGETWO-43997: Remove extra classes from obsolete
 list

---
 .../Magento/Test/Legacy/_files/obsolete_classes.php         | 6 ------
 1 file changed, 6 deletions(-)

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 1e240b0bebc..58104369e36 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -3975,7 +3975,6 @@ return [
     ['Magento\Framework\Module\Resource', 'Magento\Framework\Module\ModuleResource'],
     ['Magento\OfflineShipping\Model\Observer\SalesRule\ActionsTab', 'Magento\OfflineShipping\Observer\*'],
     ['Magento\Theme\Model\Observer', 'Magento\Theme\Observer\*'],
-    ['Magento\Catalog\Model\Product\Compare\Item', 'Magento\Catalog\Observer\*'],
     ['Magento\Catalog\Observer\AddCatalogToTopmenuItems', 'Magento\Catalog\Observer\*'],
     ['Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowed', 'Magento\Catalog\Observer\*'],
     [
@@ -3991,9 +3990,6 @@ return [
     ['Magento\Msrp\Model\Observer\Frontend\Quote\SetCanApplyMsrp', 'Magento\Msrp\Observer\*'],
     ['Magento\Customer\Model\Observer\Log', 'Magento\Customer\Observer\*'],
     ['Magento\Customer\Model\Observer', 'Magento\Customer\Observer\*'],
-    ['Magento\Paypal\Observer\SaveOrderAfterSubmitObserver', 'Magento\Paypal\Observer\*'],
-    ['Magento\Paypal\Observer\SetResponseAfterSaveOrderObserver', 'Magento\Paypal\Observer\*'],
-    ['Magento\Paypal\Observer\AddPaypalShortcutsObserver', 'Magento\Paypal\Observer\*'],
     ['Magento\Paypal\Model\Observer\RestrictAdminBillingAgreementUsage', 'Magento\Paypal\Observer\*'],
     ['Magento\GiftMessage\Model\Observer', 'Magento\GiftMessage\Observer\*'],
     ['Magento\Quote\Model\Observer\Webapi\Submit', 'Magento\Quote\Observer\*'],
@@ -4021,7 +4017,6 @@ return [
     ['Magento\CatalogUrlRewrite\Model\Product\Observer', 'Magento\CatalogUrlRewrite\Observer\*'],
     ['Magento\CatalogUrlRewrite\Model\Category\Observer', 'Magento\CatalogUrlRewrite\Observer\*'],
     ['Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogenerator', 'Magento\CatalogUrlRewrite\Observer\*'],
-    ['Magento\CatalogSearch\Model\Indexer\Fulltext\Store', 'Magento\CatalogSearch\Observer\*'],
     ['Magento\Weee\Model\Total\Observer\Webapi\Item', 'Magento\Weee\Observer\*'],
     ['Magento\Captcha\Model\Observer', 'Magento\Captcha\Observer\*'],
     ['Magento\GoogleAdwords\Model\Observer', 'Magento\GoogleAdwords\Observer\*'],
@@ -4071,7 +4066,6 @@ return [
     ['Magento\PageCache\Model\Observer\InvalidateCache', 'Magento\PageCache\Observer\*'],
     ['Magento\PageCache\Model\Observer\RegisterFormKeyFromCookie', 'Magento\PageCache\Observer\*'],
     ['Magento\PageCache\Model\Observer\FlushFormKeyOnLogout', 'Magento\PageCache\Observer\*'],
-    ['Magento\CatalogInventory\Model\Quote\Item\QuantityValidator', 'Magento\CatalogInventory\Observer\*'],
     ['Magento\GoogleOptimizer\Model\Observer\Product\Save', 'Magento\GoogleOptimizer\Observer\*'],
     ['Magento\GoogleOptimizer\Model\Observer\Product\Delete', 'Magento\GoogleOptimizer\Observer\*'],
     ['Magento\GoogleOptimizer\Model\Observer\Category\Save', 'Magento\GoogleOptimizer\Observer\*'],
-- 
GitLab


From 51e3955cbe1781867130c32cd5f2415f7b50ff94 Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Tue, 13 Oct 2015 17:03:38 +0300
Subject: [PATCH 383/420] MAGETWO-43950: Unable to place order within PayPal
 Express Checkout with virtual product

---
 app/code/Magento/Paypal/Model/Express/Checkout.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Paypal/Model/Express/Checkout.php b/app/code/Magento/Paypal/Model/Express/Checkout.php
index 214a4d6f293..d3b0cf72fc7 100644
--- a/app/code/Magento/Paypal/Model/Express/Checkout.php
+++ b/app/code/Magento/Paypal/Model/Express/Checkout.php
@@ -1194,7 +1194,7 @@ class Checkout
      * @param \Magento\Quote\Model\Quote\Address|null $address
      * @return void
      */
-    private function setShippingOptions(PaypalCart $cart, $address)
+    private function setShippingOptions(PaypalCart $cart, Address $address = null)
     {
         // for included tax always disable line items (related to paypal amount rounding problem)
         $this->_api->setIsLineItemsEnabled($this->_config->getValue(PaypalConfig::TRANSFER_CART_LINE_ITEMS));
-- 
GitLab


From f83f4ac888c1d56ff8862fcb277a6912e2d4808d Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 13 Oct 2015 20:27:42 +0300
Subject: [PATCH 384/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- CSP test
- Fix translation
---
 .../Catalog/view/frontend/templates/product/view/gallery.phtml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index 7bc5622d15d..d344cef700d 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -15,7 +15,8 @@
 <div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
     <div data-role="loader" class="loading-mask">
         <div class="loader">
-            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-2.gif'); ?>" alt="Loading...">
+            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>"
+                 alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>">
         </div>
     </div>
 </div>
-- 
GitLab


From 602094ddf6436338a9bfd6d0b613601618b5d4a4 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Tue, 13 Oct 2015 20:40:44 +0300
Subject: [PATCH 385/420] MAGETWO-43599: Prepare Pull Request for Gallery
 Widget on Configurable Product

- Fix vertical thumbs option
---
 lib/web/magnifier/magnifier.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index 92c7156fcef..2a315a2b9bc 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -819,7 +819,7 @@
                     if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width() + widthStep/2)) {
                         left = $imageContainer.offset().left + $imageContainer.width() - $image.width() + widthStep/2;
                     } else {
-                        left = ($imageContainer.offset().left <= left + widthStep/2 && widthStep > 0) ? 0 : left + widthStep/2;
+                        left = ($imageContainer.offset().left <= left + widthStep/2 && widthStep > 0) ? 0 : left - $imageContainer.offset().left + widthStep/2;
                     }
                     $image.css({
                         left: left,
-- 
GitLab


From 659dbfc80cb7c320da9cd23ee570a34536da3fcf Mon Sep 17 00:00:00 2001
From: Oleksii Korshenko <okorshenko@ebay.com>
Date: Wed, 14 Oct 2015 15:44:30 +0300
Subject: [PATCH 386/420] MAGETWO-43923: [GitHub] ModelResource namespace
 inconsistency

---
 .../Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
index ab63a57d469..b6ec3d9a68f 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
@@ -499,7 +499,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         /**
          * Mock SUT so as not to test extraneous logic
          */
-        $model = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb')
+        $model = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['_prepareDataForSave', 'getIdFieldName', 'getConnection', 'getMainTable'])
             ->getMockForAbstractClass();
-- 
GitLab


From 39af05da08f756168ed0948e080bd24cfc9b45f0 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Thu, 15 Oct 2015 10:35:50 +0300
Subject: [PATCH 387/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

static test fix
---
 app/code/Magento/Catalog/Setup/UpgradeData.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index 9dbadabc4eb..c5963538371 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -35,6 +35,7 @@ class UpgradeData implements UpgradeDataInterface
 
     /**
      * {@inheritdoc}
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
     {
@@ -98,6 +99,7 @@ class UpgradeData implements UpgradeDataInterface
         }
 
         if (version_compare($context->getVersion(), '2.0.2') < 0) {
+            // set new resource model paths
             /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
             $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
             $categorySetup->updateEntityType(
-- 
GitLab


From 07158252cb210a946111336c508a5021e36b7954 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Thu, 15 Oct 2015 11:05:26 +0300
Subject: [PATCH 388/420] MAGETWO-43951: Unable to place order within
 Authorize.net from backend

 - Refactored variables
---
 .../Payment/view/adminhtml/templates/transparent/form.phtml | 6 +++---
 .../Payment/view/frontend/templates/transparent/form.phtml  | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
index 92c44c6c5d4..1bb248e6fd5 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
@@ -10,6 +10,7 @@
 $code = $block->getMethodCode();
 $ccType = $block->getInfoData('cc_type');
 $ccExpYear = $block->getInfoData('cc_exp_year');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
 ?>
 
 <!-- IFRAME for request to Payment Gateway -->
@@ -87,11 +88,10 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                     data-container="<?php /* @noEscape */ echo $code; ?>-cc-month"
                     class="admin__control-select admin__control-select-month"
                     data-validate='{required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"}'>
-                <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?>
                 <?php foreach ($block->getCcMonths() as $k => $v): ?>
                     <option
-                        value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
-                        <?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>>
+                        value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                        <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
                         <?php echo $block->escapeHtml($v); ?>
                     </option>
                 <?php endforeach ?>
diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
index eeaa13ee814..64ea503996c 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
@@ -10,6 +10,7 @@
 $code = $block->getMethodCode();
 $ccExpMonth = $block->getInfoData('cc_exp_month');
 $ccExpYear = $block->getInfoData('cc_exp_year');
+$ccType = $block->getInfoData('cc_type');
 $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' .
     $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" title=\"' .
     $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />';
@@ -46,10 +47,9 @@ $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') .
                             "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"
                         }'>
                     <option value=""><?php echo $block->escapeHtml(__('--Please Select--'));?></option>
-                <?php $_ccType = $block->getInfoData('cc_type') ?>
                 <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
                     <option value="<?php echo $block->escapeHtml($typeCode); ?>"
-                        <?php if ($typeCode == $_ccType): ?> selected="selected"<?php endif; ?>>
+                        <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
                         <?php echo $block->escapeHtml($typeName); ?></option>
                 <?php endforeach ?>
                 </select>
-- 
GitLab


From 8eea06c52cbefb3179d2f008cbe4ad6ef1ff707b Mon Sep 17 00:00:00 2001
From: Iryna Lagno <ilagno@ebay.com>
Date: Thu, 15 Oct 2015 13:19:11 +0300
Subject: [PATCH 389/420] MAGETWO-44096: [Dev experience] Rename "disabled"
 argument to "componentDisabled"

---
 app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js b/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
index 68509f43b5d..57082ee7922 100644
--- a/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
+++ b/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
@@ -140,7 +140,7 @@ define([
                 return false;
             }
 
-            if (node.disabled === true) {
+            if (node.componentDisabled === true) {
                 return false;
             }
 
-- 
GitLab


From ea46c303fc192bb15497fdfc95f05c3b059eb328 Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Thu, 15 Oct 2015 14:51:14 +0300
Subject: [PATCH 390/420] MAGETWO-43934: Unnecessary loader on checkout when
 placing order with invalid credit card

---
 .../js/view/payment/method-renderer/authorizenet-directpost.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js b/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js
index cb58db6d1d5..bf6978cfa36 100644
--- a/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js
+++ b/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js
@@ -50,9 +50,8 @@ define(
             placeOrder: function () {
                 var self = this;
 
-                fullScreenLoader.startLoader();
-
                 if (this.validateHandler() && additionalValidators.validate()) {
+                    fullScreenLoader.startLoader();
                     this.isPlaceOrderActionAllowed(false);
                     $.when(setPaymentInformationAction(this.messageContainer, {
                         'method': self.getCode()
-- 
GitLab


From c7efc6e42ec53c7ca0a6cde67aea7430da17131b Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Thu, 15 Oct 2015 15:12:15 +0300
Subject: [PATCH 391/420] MAGETWO-43934: Unnecessary loader on checkout when
 placing order with invalid credit card

- Fix on payflowpro
---
 .../web/js/view/payment/method-renderer/payflowpro-method.js   | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js
index a7a03184812..f0095877bbc 100644
--- a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js
+++ b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js
@@ -51,9 +51,8 @@ define(
             placeOrder: function () {
                 var self = this;
 
-                fullScreenLoader.startLoader();
-
                 if (this.validateHandler() && additionalValidators.validate()) {
+                    fullScreenLoader.startLoader();
                     this.isPlaceOrderActionAllowed(false);
                     $.when(setPaymentInformationAction(this.messageContainer, {
                         'method': self.getCode()
-- 
GitLab


From 01e50e8c99210e42f87d430182b13ae3b2d85aed Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Thu, 15 Oct 2015 15:22:42 +0300
Subject: [PATCH 392/420] MAGETWO-43923: [GitHub]ModelResource namespace
 inconsistency

fixed obsolete classes
---
 .../Magento/Test/Legacy/_files/obsolete_constants.php      | 7 -------
 .../Magento/Test/Legacy/_files/obsolete_methods.php        | 2 +-
 .../Magento/Test/Legacy/_files/obsolete_properties.php     | 2 +-
 3 files changed, 2 insertions(+), 9 deletions(-)

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 ca86654e7a5..1a0a6503809 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
@@ -148,11 +148,6 @@ return [
     ['XML_CHARSET_NODE', 'Magento\SalesRule\Helper\Coupon'],
     ['XML_CHARSET_SEPARATOR', 'Magento\SalesRule\Helper\Coupon'],
     ['XML_NODE_RELATED_CACHE', 'Magento\CatalogRule\Model\Rule'],
-    [
-        'XML_NODE_ATTRIBUTE_NODES',
-        'Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
-        'XML_NODE_ATTRIBUTE_GROUPS',
-    ],
     [
         'XML_PATH_ALLOW_DUPLICATION',
         'Magento\Core\Model\Design\PackageInterface',
@@ -310,8 +305,6 @@ return [
     ['XML_NODE_ADD_FILTERABLE_ATTRIBUTES', 'Magento\Catalog\Helper\Product\Flat'],
     ['XML_NODE_ADD_CHILD_DATA', 'Magento\Catalog\Helper\Product\Flat'],
     ['XML_PATH_CONTENT_TEMPLATE_FILTER', 'Magento\Catalog\Helper\Data'],
-    ['XML_NODE_MAX_INDEX_COUNT', 'Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer'],
-    ['XML_NODE_ATTRIBUTE_GROUPS', 'Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer'],
     ['XML_PATH_UNASSIGNABLE_ATTRIBUTES', 'Magento\Catalog\Helper\Product'],
     ['XML_PATH_ATTRIBUTES_USED_IN_AUTOGENERATION', 'Magento\Catalog\Helper\Product'],
     ['XML_PATH_PRODUCT_TYPE_SWITCHER_LABEL', 'Magento\Catalog\Helper\Product'],
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 94b97cd46c0..ca7f4471723 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
@@ -866,7 +866,7 @@ return [
     ['validateDataArray', 'Magento\Framework\Convert\Container\AbstractContainer'],
     ['validateFile', 'Magento\Core\Model\Design\Package'],
     ['validateOrder', 'Magento\Checkout\Model\Type\Onepage'],
-    ['viewTrackAction', 'Magento\Sales\Controller\Adminhtml\Order\Shipment'],
+    ['viewTrackAction', 'Magento\Shipping\Controller\Adminhtml\Order\Shipment'],
     ['_prepareOptionValues', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'],
     ['_getOptionValuesCollection', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'],
     [
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 c17f4d6e46e..43ec07e30fd 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
@@ -173,7 +173,7 @@ return [
     ['_dirModel', 'Magento\Downloadable\Controller\Adminhtml\Downloadable\File'],
     ['_dirModel', 'Magento\Downloadable\Model\Link'],
     ['_dirModel', 'Magento\Downloadable\Model\Sample'],
-    ['_dir', 'Magento\Framework\App\Dir'],
+    ['_dir', 'Magento\Framework\Filesystem'],
     ['_baseDir', 'Magento\Backup\Model\Fs\Collection'],
     ['_filesystem', 'Magento\Backup\Model\Fs\Collection'],
     ['_dir', 'Magento\Backup\Model\Fs\Collection'],
-- 
GitLab


From c5019e4f6d93ef2ed48657f76e460d0e6ae36c31 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Thu, 15 Oct 2015 18:34:38 +0300
Subject: [PATCH 393/420] MAGETWO-36353: False VAT number verification message
 if soap extension is not enabled

---
 .../System/Config/Validatevat/Validate.php    |  27 ++--
 app/code/Magento/Customer/Model/Vat.php       |   9 +-
 .../Config/Validatevat/ValidateTest.php       | 130 ++++++++++++++++++
 .../templates/system/config/validatevat.phtml |  10 +-
 4 files changed, 160 insertions(+), 16 deletions(-)
 create mode 100644 app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php

diff --git a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
index b20ff74c903..f1f638a852e 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
@@ -1,40 +1,45 @@
 <?php
 /**
- *
- * Copyright © 2015 Magento. All rights reserved.
+ * * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 namespace Magento\Customer\Controller\Adminhtml\System\Config\Validatevat;
 
+use Magento\Framework\Controller\Result\JsonFactory;
+
 class Validate extends \Magento\Customer\Controller\Adminhtml\System\Config\Validatevat
 {
     /**
-     * @var \Magento\Framework\Controller\Result\RawFactory
+     * @var JsonFactory
      */
-    protected $resultRawFactory;
+    protected $resultJsonFactory;
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
+     * @param JsonFactory $resultJsonFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
+        JsonFactory $resultJsonFactory
     ) {
         parent::__construct($context);
-        $this->resultRawFactory = $resultRawFactory;
+        $this->resultJsonFactory = $resultJsonFactory;
     }
 
     /**
      * Check whether vat is valid
      *
-     * @return \Magento\Framework\Controller\Result\Raw
+     * @return \Magento\Framework\Controller\Result\Json
      */
     public function execute()
     {
         $result = $this->_validate();
-        /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
-        $resultRaw = $this->resultRawFactory->create();
-        return $resultRaw->setContents((int)$result->getIsValid());
+
+        /** @var \Magento\Framework\Controller\Result\Json $resultJson */
+        $resultJson = $this->resultJsonFactory->create();
+        return $resultJson->setData([
+            'valid' => (int)$result->getIsValid(),
+            'message' => $result->getRequestMessage(),
+        ]);
     }
 }
diff --git a/app/code/Magento/Customer/Model/Vat.php b/app/code/Magento/Customer/Model/Vat.php
index 78fd927507f..43c883b5d0e 100644
--- a/app/code/Magento/Customer/Model/Vat.php
+++ b/app/code/Magento/Customer/Model/Vat.php
@@ -166,7 +166,8 @@ class Vat
             'is_valid' => false,
             'request_date' => '',
             'request_identifier' => '',
-            'request_success' => false
+            'request_success' => false,
+            'request_message' => __('Error during VAT Number verification.'),
         ]);
 
         if (!extension_loaded('soap')) {
@@ -194,6 +195,12 @@ class Vat
             $gatewayResponse->setRequestDate((string)$result->requestDate);
             $gatewayResponse->setRequestIdentifier((string)$result->requestIdentifier);
             $gatewayResponse->setRequestSuccess(true);
+
+            if ($gatewayResponse->getIsValid()) {
+                $gatewayResponse->setRequestMessage(__('VAT Number is valid.'));
+            } else {
+                $gatewayResponse->setRequestMessage(__('Please enter a valid VAT number.'));
+            }
         } catch (\Exception $exception) {
             $gatewayResponse->setIsValid(false);
             $gatewayResponse->setRequestDate('');
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
new file mode 100644
index 00000000000..ac5625eadef
--- /dev/null
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Customer\Test\Unit\Controller\Adminhtml\System\Config\Validatevat;
+
+class ValidateTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Customer\Controller\Adminhtml\System\Config\Validatevat\Validate
+     */
+    protected $controller;
+
+    /**
+     * @var \Magento\Backend\App\Action\Context
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Framework\Controller\Result\Json | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultJson;
+
+    /**
+     * @var \Magento\Framework\ObjectManagerInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $objectManager;
+
+    /**
+     * @var \Magento\Framework\App\Request\Http | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    protected function setUp()
+    {
+        $resultJsonFactory = $this->mockResultJson();
+
+        $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->objectManager = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface')
+            ->getMockForAbstractClass();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->context = $objectManager->getObject(
+            'Magento\Backend\App\Action\Context',
+            [
+                'request' => $this->request,
+                'objectManager' => $this->objectManager,
+            ]
+        );
+        $this->controller = $objectManager->getObject(
+            'Magento\Customer\Controller\Adminhtml\System\Config\Validatevat\Validate',
+            [
+                'context' => $this->context,
+                'resultJsonFactory' => $resultJsonFactory,
+            ]
+        );
+    }
+
+    public function testExecute()
+    {
+        $country = 'US';
+        $vat = '123456789';
+
+        $isValid = true;
+        $requestMessage = 'test';
+
+        $json = '{"valid":' . (int)$isValid . ',"message":"' . $requestMessage . '"}';
+
+        $gatewayResponse = new \Magento\Framework\DataObject([
+            'is_valid' => $isValid,
+            'request_message' => $requestMessage,
+        ]);
+
+        $this->request->expects($this->any())
+            ->method('getParam')
+            ->willReturnMap([
+                ['country', null, $country],
+                ['vat', null, $vat],
+            ]);
+
+        $vatMock = $this->getMockBuilder('Magento\Customer\Model\Vat')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $vatMock->expects($this->once())
+            ->method('checkVatNumber')
+            ->with($country, $vat)
+            ->willReturn($gatewayResponse);
+
+        $this->objectManager->expects($this->once())
+            ->method('get')
+            ->with('Magento\Customer\Model\Vat')
+            ->willReturn($vatMock);
+
+        $this->resultJson->expects($this->once())
+            ->method('setData')
+            ->with([
+                'valid' => $gatewayResponse->getIsValid(),
+                'message' => $gatewayResponse->getRequestMessage()
+            ])
+            ->willReturn($json);
+
+        $this->assertEquals($json, $this->controller->execute());
+    }
+
+    /**
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function mockResultJson()
+    {
+        $this->resultJson = $this->getMockBuilder('Magento\Framework\Controller\Result\Json')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $resultJsonFactory = $this->getMockBuilder('Magento\Framework\Controller\Result\JsonFactory')
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $resultJsonFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->resultJson);
+
+        return $resultJsonFactory;
+    }
+}
diff --git a/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml b/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml
index d9916cb30d0..208394342e1 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml
@@ -27,11 +27,13 @@ require(['prototype'], function(){
         new Ajax.Request('<?php /* @escapeNotVerified */ echo $block->getAjaxUrl() ?>', {
             parameters: params,
             onSuccess: function(response) {
-                result = '<?php /* @escapeNotVerified */ echo __('Please enter a valid VAT number.') ?>';
+                var result = '<?php /* @escapeNotVerified */ echo __('Error during VAT Number verification.') ?>';
                 try {
-                    response = response.responseText;
-                    if (response == 1) {
-                        result = '<?php /* @escapeNotVerified */ echo __('VAT Number is valid.') ?>';
+                    if (response.responseText.isJSON()) {
+                        response = response.responseText.evalJSON();
+                        result = response.message;
+                    }
+                    if (response.valid == 1) {
                         validationMessage.removeClassName('hidden').addClassName('success')
                     } else {
                         validationMessage.removeClassName('hidden').addClassName('error')
-- 
GitLab


From 9336dcbbb19ce3a8cf619ddd32f93205f4d27dd6 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Thu, 15 Oct 2015 18:43:04 +0300
Subject: [PATCH 394/420] MAGETWO-42988: Can't fill customer attributes on
 Customer Checkout Registration form as it is not available anymore

---
 .../Magento/Checkout/Model/Type/Onepage.php   | 273 ++---------------
 .../Test/Unit/Model/Type/OnepageTest.php      | 274 ------------------
 .../Magento/Customer/Setup/UpgradeData.php    |   7 +
 app/code/Magento/Customer/etc/module.xml      |   2 +-
 .../Component/ComponentRegistrar.php          |   2 +
 5 files changed, 28 insertions(+), 530 deletions(-)

diff --git a/app/code/Magento/Checkout/Model/Type/Onepage.php b/app/code/Magento/Checkout/Model/Type/Onepage.php
index 775c0dcb632..1820e7936db 100644
--- a/app/code/Magento/Checkout/Model/Type/Onepage.php
+++ b/app/code/Magento/Checkout/Model/Type/Onepage.php
@@ -379,149 +379,6 @@ class Onepage
         return [];
     }
 
-    /**
-     * Save billing address information to quote
-     * This method is called by One Page Checkout JS (AJAX) while saving the billing information.
-     *
-     * @param   array $data
-     * @param   int $customerAddressId
-     * @return  array
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     * @SuppressWarnings(PHPMD.NPathComplexity)
-     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
-     */
-    public function saveBilling($data, $customerAddressId)
-    {
-        if (empty($data)) {
-            return ['error' => -1, 'message' => __('Invalid data')];
-        }
-
-        $address = $this->getQuote()->getBillingAddress();
-        $addressForm = $this->_formFactory->create(
-            AddressMetadata::ENTITY_TYPE_ADDRESS,
-            'customer_address_edit',
-            [],
-            $this->_request->isAjax(),
-            Form::IGNORE_INVISIBLE,
-            []
-        );
-
-        if ($customerAddressId) {
-            try {
-                $customerAddress = $this->addressRepository->getById($customerAddressId);
-                if ($customerAddress->getCustomerId() != $this->getQuote()->getCustomerId()) {
-                    return ['error' => 1, 'message' => __('The customer address is not valid.')];
-                }
-                $address->importCustomerAddressData($customerAddress)->setSaveInAddressBook(0);
-            } catch (\Exception $e) {
-                return ['error' => 1, 'message' => __('Address does not exist.')];
-            }
-        } else {
-            // emulate request object
-            $addressData = $addressForm->extractData($addressForm->prepareRequest($data));
-            $addressErrors = $addressForm->validateData($addressData);
-            if ($addressErrors !== true) {
-                return ['error' => 1, 'message' => array_values($addressErrors)];
-            }
-            $address->addData($addressForm->compactData($addressData));
-            //unset billing address attributes which were not shown in form
-            foreach ($addressForm->getAttributes() as $attribute) {
-                if (!isset($data[$attribute->getAttributeCode()])) {
-                    $address->setData($attribute->getAttributeCode(), null);
-                }
-            }
-            $address->setCustomerAddressId(null);
-            // Additional form data, not fetched by extractData (as it fetches only attributes)
-            $address->setSaveInAddressBook(empty($data['save_in_address_book']) ? 0 : 1);
-            $this->getQuote()->setBillingAddress($address);
-        }
-
-        // validate billing address
-        if (($validateRes = $address->validate()) !== true) {
-            return ['error' => 1, 'message' => $validateRes];
-        }
-
-        if (true !== ($result = $this->_validateCustomerData($data))) {
-            return $result;
-        } else {
-            /** Even though _validateCustomerData should not modify data, it does */
-            $address = $this->getQuote()->getBillingAddress();
-        }
-
-        if (!$this->getQuote()->getCustomerId() && $this->isCheckoutMethodRegister()) {
-            if ($this->_customerEmailExists($address->getEmail(), $this->_storeManager->getWebsite()->getId())) {
-                return [
-                    'error' => 1,
-                    // @codingStandardsIgnoreStart
-                    'message' => __(
-                        'This email address already belongs to a registered customer. You can sign in or create an account with a different email address.'
-                    )
-                    // @codingStandardsIgnoreEnd
-                ];
-            }
-        }
-
-        if (!$this->getQuote()->isVirtual()) {
-            /**
-             * Billing address using options
-             */
-            $usingCase = isset($data['use_for_shipping'])
-                ? (bool)$data['use_for_shipping']
-                : self::NOT_USE_FOR_SHIPPING;
-
-            switch ($usingCase) {
-                case self::NOT_USE_FOR_SHIPPING:
-                    $shipping = $this->getQuote()->getShippingAddress();
-                    $shipping->setSameAsBilling(0);
-                    $shipping->save();
-                    break;
-                case self::USE_FOR_SHIPPING:
-                    $billing = clone $address;
-                    $billing->unsAddressId()->unsAddressType();
-                    $shipping = $this->getQuote()->getShippingAddress();
-                    $shippingMethod = $shipping->getShippingMethod();
-
-                    // Billing address properties that must be always copied to shipping address
-                    $requiredBillingAttributes = ['customer_address_id'];
-
-                    // don't reset original shipping data, if it was not changed by customer
-                    foreach ($shipping->getData() as $shippingKey => $shippingValue) {
-                        if ($shippingValue !== null
-                            && $billing->getData($shippingKey) !== null
-                            && !isset($data[$shippingKey])
-                            && !in_array($shippingKey, $requiredBillingAttributes)
-                        ) {
-                            $billing->unsetData($shippingKey);
-                        }
-                    }
-                    $shipping->addData($billing->getData())
-                        ->setSameAsBilling(1)
-                        ->setSaveInAddressBook(0)
-                        ->setShippingMethod($shippingMethod)
-                        ->setCollectShippingRates(true);
-                    $this->totalsCollector->collectAddressTotals($this->getQuote(), $shipping);
-
-                    if (!$this->isCheckoutMethodRegister()) {
-                        $shipping->save();
-                    }
-                    $this->getCheckout()->setStepData('shipping', 'complete', true);
-                    break;
-            }
-        }
-
-        if ($this->isCheckoutMethodRegister()) {
-            $this->quoteRepository->save($this->getQuote());
-        } else {
-            $address->save();
-        }
-
-        $this->getCheckout()
-            ->setStepData('billing', 'allow', true)
-            ->setStepData('billing', 'complete', true)
-            ->setStepData('shipping', 'allow', true);
-        return [];
-    }
-
     /**
      * Check whether checkout method is "register"
      *
@@ -532,100 +389,6 @@ class Onepage
         return $this->getQuote()->getCheckoutMethod() == self::METHOD_REGISTER;
     }
 
-    /**
-     * Validate customer data and set some its data for further usage in quote
-     *
-     * Will return either true or array with error messages
-     *
-     * @param array $data
-     * @return bool|array
-     */
-    protected function _validateCustomerData(array $data)
-    {
-        $quote = $this->getQuote();
-        $isCustomerNew = !$quote->getCustomerId();
-        $customer = $quote->getCustomer();
-        $customerData = $this->extensibleDataObjectConverter->toFlatArray(
-            $customer,
-            [],
-            '\Magento\Customer\Api\Data\CustomerInterface'
-        );
-
-        /** @var Form $customerForm */
-        $customerForm = $this->_formFactory->create(
-            \Magento\Customer\Api\CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER,
-            'checkout_register',
-            $customerData,
-            $this->_request->isAjax(),
-            Form::IGNORE_INVISIBLE,
-            []
-        );
-
-        if ($isCustomerNew) {
-            $customerRequest = $customerForm->prepareRequest($data);
-            $customerData = $customerForm->extractData($customerRequest);
-        }
-
-        $customerErrors = $customerForm->validateData($customerData);
-        if ($customerErrors !== true) {
-            return ['error' => -1, 'message' => implode(', ', $customerErrors)];
-        }
-
-        if (!$isCustomerNew) {
-            return true;
-        }
-
-        $customer = $this->customerDataFactory->create();
-        $this->dataObjectHelper->populateWithArray(
-            $customer,
-            $customerData,
-            '\Magento\Customer\Api\Data\CustomerInterface'
-        );
-
-        if ($quote->getCheckoutMethod() == self::METHOD_REGISTER) {
-            // We always have $customerRequest here, otherwise we would have been kicked off the function several
-            // lines above
-            $password = $customerRequest->getParam('customer_password');
-            if ($password != $customerRequest->getParam('confirm_password')) {
-                return [
-                    'error'   => -1,
-                    'message' => __('Password and password confirmation are not equal.')
-                ];
-            }
-            $quote->setPasswordHash($this->accountManagement->getPasswordHash($password));
-        } else {
-            // set NOT LOGGED IN group id explicitly,
-            // otherwise copyFieldsetToTarget('customer_account', 'to_quote') will fill it with default group id value
-            $customer->setGroupId(GroupInterface::NOT_LOGGED_IN_ID);
-        }
-
-        //validate customer
-        $result = $this->accountManagement->validate($customer);
-        if (!$result->isValid()) {
-            return [
-                'error' => -1,
-                'message' => implode(', ', $result->getMessages())
-            ];
-        }
-
-        // copy customer/guest email to address
-        $quote->getBillingAddress()->setEmail($customer->getEmail());
-
-        // copy customer data to quote
-        $this->_objectCopyService->copyFieldsetToTarget(
-            'customer_account',
-            'to_quote',
-            $this->extensibleDataObjectConverter->toFlatArray(
-                $customer,
-                [],
-                '\Magento\Customer\Api\Data\CustomerInterface'
-            ),
-            $quote
-        );
-
-        return true;
-    }
-
     /**
      * Save checkout shipping address
      *
@@ -634,24 +397,24 @@ class Onepage
      * @return  array
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
-     */
-    public function saveShipping($data, $customerAddressId)
-    {
-        if (empty($data)) {
-            return ['error' => -1, 'message' => __('Invalid data')];
-        }
-        $address = $this->getQuote()->getShippingAddress();
-
-        $addressForm = $this->_formFactory->create(
-            'customer_address',
-            'customer_address_edit',
-            [],
-            $this->_request->isAjax(),
-            Form::IGNORE_INVISIBLE,
-            []
-        );
-
-        if (!empty($customerAddressId)) {
+            */
+            public function saveShipping($data, $customerAddressId)
+            {
+                if (empty($data)) {
+                    return ['error' => -1, 'message' => __('Invalid data')];
+                }
+                $address = $this->getQuote()->getShippingAddress();
+
+                $addressForm = $this->_formFactory->create(
+                    'customer_address',
+                    'customer_address_edit',
+                    [],
+                    $this->_request->isAjax(),
+                    Form::IGNORE_INVISIBLE,
+                    []
+                );
+
+                if (!empty($customerAddressId)) {
             $addressData = null;
             try {
                 $addressData = $this->addressRepository->getById($customerAddressId);
diff --git a/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php b/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
index 0c319e19e1f..15275b9c119 100644
--- a/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
@@ -367,280 +367,6 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals([], $this->onepage->saveCheckoutMethod('someMethod'));
     }
 
-    public function testSaveBillingInvalidData()
-    {
-        $this->assertEquals(['error' => -1, 'message' => 'Invalid data'], $this->onepage->saveBilling([], 0));
-    }
-
-    /**
-     * @dataProvider saveBillingDataProvider
-     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
-     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
-     * @SuppressWarnings(PHPMD.NPathComplexity)
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     */
-    public function testSaveBilling(
-        $data,
-        $customerAddressId,
-        $quoteCustomerId,
-        $addressCustomerId,
-        $isAddress,
-        $validateDataResult,
-        $validateResult,
-        $checkoutMethod,
-        $customerPassword,
-        $confirmPassword,
-        $validationResultMessages,
-        $isEmailAvailable,
-        $isVirtual,
-        $getStepDataResult,
-        $expected
-    ) {
-        $useForShipping = (int)$data['use_for_shipping'];
-
-        $passwordHash = 'password hash';
-        $this->requestMock->expects($this->any())->method('isAjax')->will($this->returnValue(false));
-        $customerValidationResultMock = $this->getMock(
-            'Magento\Customer\Api\Data\ValidationResultsInterface', [], [], '', false
-        );
-        $customerValidationResultMock
-            ->expects($this->any())
-            ->method('isValid')
-            ->will($this->returnValue(empty($validationResultMessages)));
-        $customerValidationResultMock
-            ->expects($this->any())
-            ->method('getMessages')
-            ->will($this->returnValue($validationResultMessages));
-        $this->accountManagementMock
-            ->expects($this->any())
-            ->method('getPasswordHash')
-            ->with($customerPassword)
-            ->will($this->returnValue($passwordHash));
-        $this->accountManagementMock
-            ->expects($this->any())
-            ->method('validate')
-            ->will($this->returnValue($customerValidationResultMock));
-        $this->accountManagementMock
-            ->expects($this->any())
-            ->method('isEmailAvailable')
-            ->will($this->returnValue($isEmailAvailable));
-        /** @var \Magento\Quote\Model\Quote|\PHPUnit_Framework_MockObject_MockObject $quoteMock */
-        $quoteMock = $this->getMock(
-            'Magento\Quote\Model\Quote',
-            [
-                'getData',
-                'getCustomerId',
-                '__wakeup',
-                'getBillingAddress',
-                'setPasswordHash',
-                'getCheckoutMethod',
-                'isVirtual',
-                'getShippingAddress',
-                'getCustomerData',
-                'collectTotals',
-                'save',
-                'getCustomer'
-            ],
-            [],
-            '',
-            false
-        );
-        $customerMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Api\AbstractExtensibleObject',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['__toArray']
-        );
-        $shippingAddressMock = $this->getMock(
-            'Magento\Quote\Model\Quote\Address',
-            [
-                'setSameAsBilling',
-                'save',
-                'collectTotals',
-                'addData',
-                'setShippingMethod',
-                'setCollectShippingRates',
-                '__wakeup'
-            ],
-            [],
-            '',
-            false
-        );
-        $quoteMock->expects($this->any())->method('getShippingAddress')->will($this->returnValue($shippingAddressMock));
-
-        $shippingAddressMock->expects($useForShipping ? $this->any() : $this->once())
-            ->method('setSameAsBilling')
-            ->with($useForShipping)
-            ->will($this->returnSelf());
-
-        $expects = (!$useForShipping || ($checkoutMethod != Onepage::METHOD_REGISTER)) ? $this->once() : $this->never();
-        $shippingAddressMock->expects($expects)
-            ->method('save');
-
-        $shippingAddressMock->expects($useForShipping ? $this->once() : $this->never())
-            ->method('addData')
-            ->will($this->returnSelf());
-
-        $shippingAddressMock->expects($this->any())
-            ->method('setSaveInAddressBook')
-            ->will($this->returnSelf());
-
-        $shippingAddressMock->expects($useForShipping ? $this->once() : $this->never())
-            ->method('setShippingMethod')
-            ->will($this->returnSelf());
-
-        $shippingAddressMock->expects($useForShipping ? $this->once() : $this->never())
-            ->method('setCollectShippingRates')
-            ->will($this->returnSelf());
-
-        if ($useForShipping === \Magento\Checkout\Model\Type\Onepage::USE_FOR_SHIPPING) {
-            $this->totalsCollectorMock
-                ->expects($this->once())
-                ->method('collectAddressTotals')
-                ->with($quoteMock, $shippingAddressMock);
-        } else {
-            $this->totalsCollectorMock
-                ->expects($this->never())
-                ->method('collectAddressTotals')
-                ->with($quoteMock, $shippingAddressMock);
-        }
-
-        $quoteMock->expects($this->any())->method('setPasswordHash')->with($passwordHash);
-        $quoteMock->expects($this->any())->method('getCheckoutMethod')->will($this->returnValue($checkoutMethod));
-        $quoteMock->expects($this->any())->method('isVirtual')->will($this->returnValue($isVirtual));
-
-        $addressMock = $this->getMock(
-            'Magento\Quote\Model\Quote\Address',
-            [
-                'setSaveInAddressBook',
-                'getData',
-                'setEmail',
-                '__wakeup',
-                'importCustomerAddressData',
-                'validate',
-                'save'
-            ],
-            [],
-            '',
-            false
-        );
-        $addressMock->expects($this->any())->method('importCustomerAddressData')->will($this->returnSelf());
-        $addressMock->expects($this->atLeastOnce())->method('validate')->will($this->returnValue($validateResult));
-        $addressMock->expects($this->any())->method('getData')->will($this->returnValue([]));
-
-        $quoteMock->expects($this->any())->method('getBillingAddress')->will($this->returnValue($addressMock));
-        $quoteMock->expects($this->any())->method('getCustomerId')->will($this->returnValue($quoteCustomerId));
-
-        $this->quoteRepositoryMock
-            ->expects($checkoutMethod === Onepage::METHOD_REGISTER ? $this->once() : $this->never())
-            ->method('save')
-            ->with($quoteMock);
-
-        $addressMock->expects($checkoutMethod === Onepage::METHOD_REGISTER ? $this->never() : $this->once())
-            ->method('save');
-
-        $quoteMock->expects($this->any())->method('getCustomer')->will($this->returnValue($customerMock));
-        $data1 = [];
-        $extensibleDataObjectConverterMock = $this->getMock(
-            'Magento\Framework\Api\ExtensibleDataObjectConverter',
-            ['toFlatArray'],
-            [],
-            '',
-            false
-        );
-        $extensibleDataObjectConverterMock->expects($this->any())
-            ->method('toFlatArray')
-            ->with($customerMock)
-            ->will($this->returnValue($data1));
-
-        $formMock = $this->getMock('Magento\Customer\Model\Metadata\Form', [], [], '', false);
-        $formMock->expects($this->atLeastOnce())->method('validateData')->will($this->returnValue($validateDataResult));
-
-        $this->formFactoryMock->expects($this->any())->method('create')->will($this->returnValue($formMock));
-        $formMock->expects($this->any())->method('prepareRequest')->will($this->returnValue($this->requestMock));
-        $formMock->expects($this->any())
-            ->method('extractData')
-            ->with($this->requestMock)
-            ->will($this->returnValue([]));
-        $formMock->expects($this->any())
-            ->method('validateData')
-            ->with([])
-            ->will($this->returnValue(false));
-
-        $customerDataMock = $this->getMock('Magento\Customer\Api\Data\CustomerInterface', [], [], '', false);
-
-        $this->customerDataFactoryMock
-            ->expects($this->any())
-            ->method('create')
-            ->will($this->returnValue($customerDataMock));
-
-        $this->checkoutSessionMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock));
-        $this->checkoutSessionMock->expects($this->any())
-            ->method('getStepData')
-            ->will($this->returnValue($useForShipping ? true : $getStepDataResult));
-        $this->checkoutSessionMock->expects($this->any())->method('setStepData')->will($this->returnSelf());
-        $customerAddressMock = $this->getMockForAbstractClass(
-            'Magento\Customer\Api\Data\AddressInterface',
-            [],
-            '',
-            false
-        );
-        $customerAddressMock->expects($this->any())
-            ->method('getCustomerId')
-            ->will($this->returnValue($addressCustomerId));
-        $this->addressRepositoryMock->expects($this->any())
-            ->method('getById')
-            ->will($isAddress ? $this->returnValue($customerAddressMock) : $this->throwException(new \Exception()));
-
-        $websiteMock = $this->getMock('Magento\Store\Model\Website', [], [], '', false);
-        $this->storeManagerMock->expects($this->any())->method('getWebsite')->will($this->returnValue($websiteMock));
-        $this->assertEquals($expected, $this->onepage->saveBilling($data, $customerAddressId));
-    }
-
-    public function saveBillingDataProvider()
-    {
-        return [
-            [
-                ['use_for_shipping' => 0], // $data
-                1, // $customerAddressId
-                1, // $quoteCustomerId
-                1, // $addressCustomerId
-                true, //$isAddress
-                true, // $validateDataResult
-                true, // $validateResult
-                Onepage::METHOD_REGISTER, // $checkoutMethod
-                'password', // $customerPassword
-                'password', // $confirmPassword
-                [], // $validationResultMessages
-                true, // $isEmailAvailable
-                false, // $isVirtual
-                false, // $getStepDataResult
-                [], // $expected
-            ],
-            [
-                ['use_for_shipping' => 1], // $data
-                1, // $customerAddressId
-                1, // $quoteCustomerId
-                1, // $addressCustomerId
-                true, //$isAddress
-                true, // $validateDataResult
-                true, // $validateResult
-                Onepage::METHOD_CUSTOMER, // $checkoutMethod
-                'password', // $customerPassword
-                'password', // $confirmPassword
-                [], // $validationResultMessages
-                true, // $isEmailAvailable
-                false, // $isVirtual
-                false, // $getStepDataResult
-                [], // $expected
-            ]
-        ];
-    }
-
     public function testGetLastOrderId()
     {
         $orderIncrementId = 100001;
diff --git a/app/code/Magento/Customer/Setup/UpgradeData.php b/app/code/Magento/Customer/Setup/UpgradeData.php
index a37210bd9fb..ef1ff180828 100644
--- a/app/code/Magento/Customer/Setup/UpgradeData.php
+++ b/app/code/Magento/Customer/Setup/UpgradeData.php
@@ -241,6 +241,13 @@ class UpgradeData implements UpgradeDataInterface
             $this->upgradeAttributes($entityAttributes, $customerSetup);
         }
 
+        if (version_compare($context->getVersion(), '2.0.6', '<')) {
+            $setup->getConnection()->delete(
+                $setup->getTable('customer_form_attribute'),
+                ['form_code = ?' => 'checkout_register']
+            );
+        }
+
         $indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
         $indexer->reindexAll();
         $this->eavConfig->clear();
diff --git a/app/code/Magento/Customer/etc/module.xml b/app/code/Magento/Customer/etc/module.xml
index a2b9b1eacfe..20c352f8c53 100644
--- a/app/code/Magento/Customer/etc/module.xml
+++ b/app/code/Magento/Customer/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Customer" setup_version="2.0.5">
+    <module name="Magento_Customer" setup_version="2.0.6">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Directory"/>
diff --git a/lib/internal/Magento/Framework/Component/ComponentRegistrar.php b/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
index c2c928b2376..7ead27ff67d 100644
--- a/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
+++ b/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
@@ -44,6 +44,8 @@ class ComponentRegistrar implements ComponentRegistrarInterface
      */
     public static function register($type, $componentName, $path)
     {
+        $path = str_replace('\\', '/', $path);
+        $path = str_replace('magento2ee', 'magento2ce', $path);
         self::validateType($type);
         if (isset(self::$paths[$type][$componentName])) {
             throw new \LogicException('\'' . $componentName . '\' component already exists');
-- 
GitLab


From 43b1bd8afe906044a3e3d2c12aa5b751df61c010 Mon Sep 17 00:00:00 2001
From: Iryna Lagno <ilagno@ebay.com>
Date: Thu, 15 Oct 2015 18:12:35 +0300
Subject: [PATCH 395/420] MAGETWO-43992: Can't select payment method for
 virtual product if payment is available for specific countries

---
 .../web/js/action/set-billing-address.js      | 28 +++++++++++++++----
 .../view/frontend/web/js/view/payment/list.js |  9 ++++--
 .../CanUseForCountry/CountryProvider.php      |  7 +++--
 .../CanUseForCountry/CountryProviderTest.php  | 15 +++++++++-
 4 files changed, 47 insertions(+), 12 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
index 84979c5f0ce..faf798bf988 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
@@ -4,15 +4,26 @@
  */
 define(
     [
+        'jquery',
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/url-builder',
         'mage/storage',
         'Magento_Checkout/js/model/error-processor',
         'Magento_Customer/js/model/customer',
         'Magento_Checkout/js/action/get-totals',
-        'Magento_Checkout/js/model/full-screen-loader'
+        'Magento_Checkout/js/model/full-screen-loader',
+        'Magento_Checkout/js/action/get-payment-information'
     ],
-    function (quote, urlBuilder, storage, errorProcessor, customer, getTotalsAction, fullScreenLoader) {
+    function ($,
+              quote,
+              urlBuilder,
+              storage,
+              errorProcessor,
+              customer,
+              getTotalsAction,
+              fullScreenLoader,
+              getPaymentInformationAction
+    ) {
         'use strict';
 
         return function (messageContainer) {
@@ -44,14 +55,19 @@ define(
                 serviceUrl, JSON.stringify(payload)
             ).done(
                 function () {
-                    getTotalsAction([]);
+                    if (!quote.isVirtual()) {
+                        getTotalsAction([]);
+                    } else {
+                        var deferred = $.Deferred();
+                        getPaymentInformationAction(deferred);
+                        $.when(deferred).done(function () {
+                            fullScreenLoader.stopLoader();
+                        });
+                    }
                 }
             ).fail(
                 function (response) {
                     errorProcessor.process(response, messageContainer);
-                }
-            ).always(
-                function () {
                     fullScreenLoader.stopLoader();
                 }
             );
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
index 4559bbbc745..abb629a32ce 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
@@ -30,11 +30,16 @@ define([
             paymentMethods.subscribe(
                 function (changes) {
                     checkoutDataResolver.resolvePaymentMethod();
+                    //remove renderer for "deleted" payment methods
+                    _.each(changes, function (change) {
+                        if (change.status === 'deleted') {
+                            this.removeRenderer(change.value.method);
+                        }
+                    }, this);
+                    //add renderer for "added" payment methods
                     _.each(changes, function (change) {
                         if (change.status === 'added') {
                             this.createRenderer(change.value);
-                        } else if (change.status === 'deleted') {
-                            this.removeRenderer(change.value.method);
                         }
                     }, this);
                 }, this, 'arrayChange');
diff --git a/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php b/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php
index 8bbdbef2830..efd63ae579a 100644
--- a/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php
+++ b/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php
@@ -31,8 +31,9 @@ class CountryProvider
      */
     public function getCountry(Quote $quote)
     {
-        return $quote->isVirtual()
-            ? $this->directoryHelper->getDefaultCountry()
-            : $quote->getShippingAddress()->getCountry();
+        $address = $quote->isVirtual() ? $quote->getBillingAddress() : $quote->getShippingAddress();
+        return $address
+            ? $address->getCountry()
+            : $this->directoryHelper->getDefaultCountry();
     }
 }
diff --git a/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php b/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php
index 13f1ad7d414..89fac656c32 100644
--- a/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php
@@ -33,14 +33,27 @@ class CountryProviderTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(1, $this->model->getCountry($quoteMock));
     }
 
-    public function testGetCountryForVirtualQuote()
+    public function testGetCountryForVirtualQuoteWhenBillingAddressNotExist()
     {
         $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false, false);
         $quoteMock->expects($this->once())->method('isVirtual')->willReturn(true);
         $addressMock = $this->getMock('Magento\Quote\Model\Quote\Address', [], [], '', false, false);
         $addressMock->expects($this->never())->method('getCountry');
         $quoteMock->expects($this->never())->method('getShippingAddress');
+        $quoteMock->expects($this->once())->method('getBillingAddress')->willReturn(null);
         $this->directoryMock->expects($this->once())->method('getDefaultCountry')->willReturn(10);
         $this->assertEquals(10, $this->model->getCountry($quoteMock));
     }
+
+    public function testGetCountryForVirtualQuoteWhenBillingAddressExist()
+    {
+        $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false, false);
+        $quoteMock->expects($this->once())->method('isVirtual')->willReturn(true);
+        $addressMock = $this->getMock('Magento\Quote\Model\Quote\Address', [], [], '', false, false);
+        $addressMock->expects($this->once())->method('getCountry')->willReturn(10);
+        $quoteMock->expects($this->never())->method('getShippingAddress');
+        $quoteMock->expects($this->once())->method('getBillingAddress')->willReturn($addressMock);
+        $this->directoryMock->expects($this->never())->method('getDefaultCountry');
+        $this->assertEquals(10, $this->model->getCountry($quoteMock));
+    }
 }
-- 
GitLab


From cef75fe363508a09ad96388daea89414f9ec4655 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Thu, 15 Oct 2015 18:46:03 +0300
Subject: [PATCH 396/420] MAGETWO-43952: Ability to overwrite customer
 addressed from front-end

---
 .../Customer/Controller/Address/FormPost.php     | 16 +++++++++++++---
 .../Unit/Controller/Address/FormPostTest.php     | 13 ++++++++-----
 2 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Customer/Controller/Address/FormPost.php b/app/code/Magento/Customer/Controller/Address/FormPost.php
index a3275491f6c..7c6b71b3436 100644
--- a/app/code/Magento/Customer/Controller/Address/FormPost.php
+++ b/app/code/Magento/Customer/Controller/Address/FormPost.php
@@ -106,7 +106,6 @@ class FormPost extends \Magento\Customer\Controller\Address
             array_merge($existingAddressData, $attributeValues),
             '\Magento\Customer\Api\Data\AddressInterface'
         );
-
         $addressDataObject->setCustomerId($this->_getSession()->getCustomerId())
             ->setIsDefaultBilling($this->getRequest()->getParam('default_billing', false))
             ->setIsDefaultShipping($this->getRequest()->getParam('default_shipping', false));
@@ -118,12 +117,16 @@ class FormPost extends \Magento\Customer\Controller\Address
      * Retrieve existing address data
      *
      * @return array
+     * @throws \Exception
      */
     protected function getExistingAddressData()
     {
         $existingAddressData = [];
         if ($addressId = $this->getRequest()->getParam('id')) {
             $existingAddress = $this->_addressRepository->getById($addressId);
+            if ($existingAddress->getCustomerId() !== $this->_getSession()->getCustomerId()) {
+                throw new \Exception();
+            }
             $existingAddressData = $this->_dataProcessor->buildOutputDataArray(
                 $existingAddress,
                 '\Magento\Customer\Api\Data\AddressInterface'
@@ -175,6 +178,7 @@ class FormPost extends \Magento\Customer\Controller\Address
      */
     public function execute()
     {
+        $redirectUrl = null;
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
             return $this->resultRedirectFactory->create()->setPath('*/*/');
         }
@@ -198,11 +202,17 @@ class FormPost extends \Magento\Customer\Controller\Address
                 $this->messageManager->addError($error->getMessage());
             }
         } catch (\Exception $e) {
+            $redirectUrl = $this->_buildUrl('*/*/index');
             $this->messageManager->addException($e, __('We can\'t save the address.'));
         }
 
-        $this->_getSession()->setAddressFormData($this->getRequest()->getPostValue());
-        $url = $this->_buildUrl('*/*/edit', ['id' => $this->getRequest()->getParam('id')]);
+        if (is_null($redirectUrl)) {
+            $this->_getSession()->setAddressFormData($this->getRequest()->getPostValue());
+            $url = $this->_buildUrl('*/*/edit', ['id' => $this->getRequest()->getParam('id')]);
+        }  else {
+            $url = $redirectUrl;
+        }
+
         return $this->resultRedirectFactory->create()->setUrl($this->_redirect->error($url));
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
index 3b351f5160c..39fa2018cff 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
@@ -528,7 +528,10 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
                 ],
             ]);
 
-        $this->session->expects($this->once())
+        $this->session->expects($this->atLeastOnce())
+            ->method('getCustomerId')
+            ->willReturn($customerId);
+        $this->addressData->expects($this->once())
             ->method('getCustomerId')
             ->willReturn($customerId);
 
@@ -682,11 +685,11 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
         $this->request->expects($this->once())
             ->method('isPost')
             ->willReturn(true);
-        $this->request->expects($this->exactly(2))
+        $this->request->expects($this->once())
             ->method('getParam')
             ->with('id')
             ->willReturn($addressId);
-        $this->request->expects($this->once())
+        $this->request->expects($this->never())
             ->method('getPostValue')
             ->willReturn($postValue);
 
@@ -701,7 +704,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with($exception, __('We can\'t save the address.'))
             ->willReturnSelf();
 
-        $this->session->expects($this->once())
+        $this->session->expects($this->never())
             ->method('setAddressFormData')
             ->with($postValue)
             ->willReturnSelf();
@@ -710,7 +713,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->getMockForAbstractClass();
         $urlBuilder->expects($this->once())
             ->method('getUrl')
-            ->with('*/*/edit', ['id' => $addressId])
+            ->with('*/*/index')
             ->willReturn($url);
 
         $this->objectManager->expects($this->once())
-- 
GitLab


From 5542bb1f24b0517edda6583a836c73c0245d7a70 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Thu, 15 Oct 2015 18:48:38 +0300
Subject: [PATCH 397/420] MAGETWO-44090: [GITHUB] system > import > customers
 ambiguity #1841

---
 app/code/Magento/CustomerImportExport/etc/import.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/CustomerImportExport/etc/import.xml b/app/code/Magento/CustomerImportExport/etc/import.xml
index 8a0fa98d2b2..5c625b53804 100644
--- a/app/code/Magento/CustomerImportExport/etc/import.xml
+++ b/app/code/Magento/CustomerImportExport/etc/import.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
-    <entity name="customer_composite" label="Customers" model="Magento\CustomerImportExport\Model\Import\CustomerComposite" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Basic" />
+    <entity name="customer_composite" label="Customers and Addresses (single file)" model="Magento\CustomerImportExport\Model\Import\CustomerComposite" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Basic" />
     <entity name="customer" label="Customers Main File" model="Magento\CustomerImportExport\Model\Import\Customer" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Custom" />
     <entity name="customer_address" label="Customer Addresses" model="Magento\CustomerImportExport\Model\Import\Address" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Custom" />
 </config>
-- 
GitLab


From b3c4fa03eb4f82930fcdad76e8df491c30254240 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Thu, 15 Oct 2015 19:13:28 +0300
Subject: [PATCH 398/420] MAGETWO-42988: Can't fill customer attributes on
 Customer Checkout Registration form as it is not available anymore

---
 .../Magento/Checkout/Model/Type/Onepage.php   | 36 +++++++++----------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/app/code/Magento/Checkout/Model/Type/Onepage.php b/app/code/Magento/Checkout/Model/Type/Onepage.php
index 1820e7936db..8d9f2ed620c 100644
--- a/app/code/Magento/Checkout/Model/Type/Onepage.php
+++ b/app/code/Magento/Checkout/Model/Type/Onepage.php
@@ -397,24 +397,24 @@ class Onepage
      * @return  array
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
-            */
-            public function saveShipping($data, $customerAddressId)
-            {
-                if (empty($data)) {
-                    return ['error' => -1, 'message' => __('Invalid data')];
-                }
-                $address = $this->getQuote()->getShippingAddress();
-
-                $addressForm = $this->_formFactory->create(
-                    'customer_address',
-                    'customer_address_edit',
-                    [],
-                    $this->_request->isAjax(),
-                    Form::IGNORE_INVISIBLE,
-                    []
-                );
-
-                if (!empty($customerAddressId)) {
+     */
+    public function saveShipping($data, $customerAddressId)
+    {
+        if (empty($data)) {
+            return ['error' => -1, 'message' => __('Invalid data')];
+        }
+        $address = $this->getQuote()->getShippingAddress();
+
+        $addressForm = $this->_formFactory->create(
+            'customer_address',
+            'customer_address_edit',
+            [],
+            $this->_request->isAjax(),
+            Form::IGNORE_INVISIBLE,
+            []
+        );
+
+        if (!empty($customerAddressId)) {
             $addressData = null;
             try {
                 $addressData = $this->addressRepository->getById($customerAddressId);
-- 
GitLab


From efb29c8d180e488b53721f2c0da5866cb556be90 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Thu, 15 Oct 2015 19:16:12 +0300
Subject: [PATCH 399/420] MAGETWO-43710: [GITHUB] Wrong class name in a
 comment: \Magento\Customer\Block\Adminhtml\Edit\Tab\View\Status\PersonalInfo

---
 .../view/adminhtml/templates/tab/view/personal_info.phtml       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml b/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml
index ade28198142..74b855e01b1 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 /**
- * Template for block \Magento\Customer\Block\Adminhtml\Edit\Tab\View\Status\PersonalInfo
+ * @var $block \Magento\Customer\Block\Adminhtml\Edit\Tab\View\PersonalInfo
  */
 
 $lastLoginDateAdmin = $block->getLastLoginDate();
-- 
GitLab


From e93d87be7ff409ad28430659116c4f5d1d1ddc43 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Fri, 16 Oct 2015 11:23:08 +0300
Subject: [PATCH 400/420] MAGETWO-43952: Ability to overwrite customer
 addressed from front-end

---
 app/code/Magento/Customer/Controller/Address/FormPost.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Customer/Controller/Address/FormPost.php b/app/code/Magento/Customer/Controller/Address/FormPost.php
index 7c6b71b3436..88fd7ce4006 100644
--- a/app/code/Magento/Customer/Controller/Address/FormPost.php
+++ b/app/code/Magento/Customer/Controller/Address/FormPost.php
@@ -206,10 +206,10 @@ class FormPost extends \Magento\Customer\Controller\Address
             $this->messageManager->addException($e, __('We can\'t save the address.'));
         }
 
-        if (is_null($redirectUrl)) {
+        if (!$redirectUrl) {
             $this->_getSession()->setAddressFormData($this->getRequest()->getPostValue());
             $url = $this->_buildUrl('*/*/edit', ['id' => $this->getRequest()->getParam('id')]);
-        }  else {
+        } else {
             $url = $redirectUrl;
         }
 
-- 
GitLab


From a5f476af0904dad472deced1ced78522dcbcf79b Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Fri, 16 Oct 2015 12:11:15 +0300
Subject: [PATCH 401/420] MAGETWO-42988: Can't fill customer attributes on
 Customer Checkout Registration form as it is not available anymore

---
 lib/internal/Magento/Framework/Component/ComponentRegistrar.php | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Component/ComponentRegistrar.php b/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
index 7ead27ff67d..c2c928b2376 100644
--- a/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
+++ b/lib/internal/Magento/Framework/Component/ComponentRegistrar.php
@@ -44,8 +44,6 @@ class ComponentRegistrar implements ComponentRegistrarInterface
      */
     public static function register($type, $componentName, $path)
     {
-        $path = str_replace('\\', '/', $path);
-        $path = str_replace('magento2ee', 'magento2ce', $path);
         self::validateType($type);
         if (isset(self::$paths[$type][$componentName])) {
             throw new \LogicException('\'' . $componentName . '\' component already exists');
-- 
GitLab


From f15be30a31b64335ba5e9685c5d98890fda96559 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Fri, 16 Oct 2015 12:21:37 +0300
Subject: [PATCH 402/420] MAGETWO-44167: ObsoleteCodeTest ignores blacklist

fixed blacklist processing
---
 .../testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php      | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
index de26ad30530..9a41edaabfd 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
@@ -910,8 +910,12 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
         $blackList = include __DIR__ . '/_files/blacklist/obsolete_mage.php';
         $ignored = [];
         $appPath = Files::init()->getPathToSource();
+        $relativePathStart = strlen($appPath);
         foreach ($blackList as $file) {
-            $ignored = array_merge($ignored, glob($appPath . '/' . $file, GLOB_NOSORT));
+            $fileSet = glob($appPath . DIRECTORY_SEPARATOR . $file, GLOB_NOSORT);
+            foreach ($fileSet as $file) {
+                $ignored[] = substr($file, $relativePathStart);
+            }
         }
         return $ignored;
     }
-- 
GitLab


From c54495d45b71295936095cb209b82379efd2312c Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Fri, 16 Oct 2015 12:31:05 +0300
Subject: [PATCH 403/420] MAGETWO-43952: Ability to overwrite customer
 addressed from front-end

---
 app/code/Magento/Customer/Controller/Address/FormPost.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/code/Magento/Customer/Controller/Address/FormPost.php b/app/code/Magento/Customer/Controller/Address/FormPost.php
index 88fd7ce4006..9360ca0f7d6 100644
--- a/app/code/Magento/Customer/Controller/Address/FormPost.php
+++ b/app/code/Magento/Customer/Controller/Address/FormPost.php
@@ -206,11 +206,10 @@ class FormPost extends \Magento\Customer\Controller\Address
             $this->messageManager->addException($e, __('We can\'t save the address.'));
         }
 
+        $url = $redirectUrl;
         if (!$redirectUrl) {
             $this->_getSession()->setAddressFormData($this->getRequest()->getPostValue());
             $url = $this->_buildUrl('*/*/edit', ['id' => $this->getRequest()->getParam('id')]);
-        } else {
-            $url = $redirectUrl;
         }
 
         return $this->resultRedirectFactory->create()->setUrl($this->_redirect->error($url));
-- 
GitLab


From e4f8a0052c681e3134f015f0106242a95c81e69b Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Fri, 16 Oct 2015 15:14:06 +0300
Subject: [PATCH 404/420] MAGETWO-44167: ObsoleteCodeTest ignores blacklist

refactoring to decrease complexity
---
 .../Magento/Test/Legacy/ObsoleteCodeTest.php  | 26 ++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
index 9a41edaabfd..9d1fa761b6b 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
@@ -900,6 +900,25 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @param string $pattern
+     * @return array
+     * @throws \Exception
+     */
+    private function processPattern($pattern)
+    {
+        $files = [];
+        $appPath = Files::init()->getPathToSource();
+        $relativePathStart = strlen($appPath);
+
+        $fileSet = glob($appPath . DIRECTORY_SEPARATOR . $pattern, GLOB_NOSORT);
+        foreach ($fileSet as $file) {
+            $files[] = substr($file, $relativePathStart);
+        }
+
+        return $files;
+    }
+
     /**
      * Reads list of blacklisted files
      *
@@ -909,13 +928,8 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
     {
         $blackList = include __DIR__ . '/_files/blacklist/obsolete_mage.php';
         $ignored = [];
-        $appPath = Files::init()->getPathToSource();
-        $relativePathStart = strlen($appPath);
         foreach ($blackList as $file) {
-            $fileSet = glob($appPath . DIRECTORY_SEPARATOR . $file, GLOB_NOSORT);
-            foreach ($fileSet as $file) {
-                $ignored[] = substr($file, $relativePathStart);
-            }
+            $ignored = array_merge($ignored, $this->processPattern($file));
         }
         return $ignored;
     }
-- 
GitLab


From 9199119b86bbdbee942700959b5b2a4c6cbe3cd6 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 16 Oct 2015 15:37:34 +0300
Subject: [PATCH 405/420] MAGETWO-44162: Wrong password validation for Sign In
 on checkout

---
 app/code/Magento/Customer/Controller/Account/LoginPost.php | 7 ++-----
 app/code/Magento/Customer/Controller/Ajax/Login.php        | 2 +-
 .../Test/Unit/Controller/Account/LoginPostTest.php         | 2 +-
 3 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Customer/Controller/Account/LoginPost.php b/app/code/Magento/Customer/Controller/Account/LoginPost.php
index 2faeca50ad9..7b6191eb255 100644
--- a/app/code/Magento/Customer/Controller/Account/LoginPost.php
+++ b/app/code/Magento/Customer/Controller/Account/LoginPost.php
@@ -92,15 +92,12 @@ class LoginPost extends Action implements AccountInterface
                     );
                     $this->messageManager->addError($message);
                     $this->session->setUsername($login['username']);
-                }
-                catch (AuthenticationException $e) {
+                } catch (AuthenticationException $e) {
                     $message = __('Invalid login or password.');
                     $this->messageManager->addError($message);
                     $this->session->setUsername($login['username']);
                 } catch (\Exception $e) {
-                    $this->messageManager->addError(
-                        __('Something went wrong while validating the login and password.')
-                    );
+                    $this->messageManager->addError(__('Invalid login or password.'));
                 }
             } else {
                 $this->messageManager->addError(__('A login and a password are required.'));
diff --git a/app/code/Magento/Customer/Controller/Ajax/Login.php b/app/code/Magento/Customer/Controller/Ajax/Login.php
index 8491d5b08e4..4258ebf1ef0 100644
--- a/app/code/Magento/Customer/Controller/Ajax/Login.php
+++ b/app/code/Magento/Customer/Controller/Ajax/Login.php
@@ -116,7 +116,7 @@ class Login extends \Magento\Framework\App\Action\Action
         } catch (\Exception $e) {
             $response = [
                 'errors' => true,
-                'message' => __('Something went wrong while validating the login and password.')
+                'message' => __('Invalid login or password.')
             ];
         }
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
index 6c2d57a9f95..e71e413d7e1 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
@@ -423,7 +423,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             case '\Exception':
                 $this->messageManager->expects($this->once())
                     ->method('addError')
-                    ->with(__('Something went wrong while validating the login and password.'))
+                    ->with(__('Invalid login or password.'))
                     ->willReturnSelf();
                 break;
         }
-- 
GitLab


From dbf4c64f72d4e01ec3a56fd4ece4e9be12ff83d8 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Fri, 16 Oct 2015 16:10:59 +0300
Subject: [PATCH 406/420] MAGETWO-44167: ObsoleteCodeTest ignores blacklist

refactored code
---
 .../Magento/Test/Legacy/ObsoleteCodeTest.php    | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
index 9d1fa761b6b..c3acb75b2e1 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
@@ -871,7 +871,7 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
 
     public function testMageMethodsObsolete()
     {
-        $ignored = $this->getBlacklistFiles();
+        $ignored = $this->getBlacklistFiles(true);
         $files = Files::init()->getPhpFiles(
             Files::INCLUDE_APP_CODE
             | Files::INCLUDE_TESTS
@@ -901,14 +901,14 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
+     * @param string $appPath
      * @param string $pattern
      * @return array
      * @throws \Exception
      */
-    private function processPattern($pattern)
+    private function processPattern($appPath, $pattern)
     {
         $files = [];
-        $appPath = Files::init()->getPathToSource();
         $relativePathStart = strlen($appPath);
 
         $fileSet = glob($appPath . DIRECTORY_SEPARATOR . $pattern, GLOB_NOSORT);
@@ -922,14 +922,21 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
     /**
      * Reads list of blacklisted files
      *
+     * @param bool $absolutePath
      * @return array
+     * @throws \Exception
      */
-    private function getBlacklistFiles()
+    private function getBlacklistFiles($absolutePath = false)
     {
         $blackList = include __DIR__ . '/_files/blacklist/obsolete_mage.php';
         $ignored = [];
+        $appPath = Files::init()->getPathToSource();
         foreach ($blackList as $file) {
-            $ignored = array_merge($ignored, $this->processPattern($file));
+            if ($absolutePath) {
+                $ignored = array_merge($ignored, glob($appPath . DIRECTORY_SEPARATOR . $file, GLOB_NOSORT));
+            } else {
+                $ignored = array_merge($ignored, $this->processPattern($appPath, $file));
+            }
         }
         return $ignored;
     }
-- 
GitLab


From 96f2f8c267bac9c8e213534aac4bdbe89d816303 Mon Sep 17 00:00:00 2001
From: Alex Akimov <aakimov@ebay.com>
Date: Fri, 16 Oct 2015 15:25:04 +0300
Subject: [PATCH 407/420] MAGETWO-44149: Grid Template Improvement

---
 .../view/adminhtml/templates/widget/grid/extended.phtml     | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml
index ddd9fa5f2f1..3fbc1989214 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml
@@ -255,6 +255,12 @@ $numColumns = sizeof($block->getColumns());
 
     deps.push('mage/adminhtml/grid');
 
+    <?php if (is_array($block->getRequireJsDependencies())): ?>
+        <?php foreach ($block->getRequireJsDependencies() as $dependency): ?>
+            deps.push('<?php /* @escapeNotVerified */ echo $dependency; ?>');
+        <?php endforeach; ?>
+    <?php endif; ?>
+
     require(deps, function(<?php echo ($block->getDependencyJsObject() ? 'registry' : '') ?>){
         <?php //TODO: getJsObjectName and getRowClickCallback has unexpected behavior. Should be removed ?>
 
-- 
GitLab


From f8fced1829b361875095e879a2efb4c707223b84 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Fri, 16 Oct 2015 17:04:29 +0300
Subject: [PATCH 408/420] MAGETWO-42988: Can't fill customer attributes on
 Customer Checkout Registration form as it is not available anymore

---
 .../Checkout/Model/Type/OnepageTest.php       | 560 ------------------
 1 file changed, 560 deletions(-)
 delete mode 100644 dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php

diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php
deleted file mode 100644
index 617b9c0dc52..00000000000
--- a/dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php
+++ /dev/null
@@ -1,560 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Checkout\Model\Type;
-
-use Magento\TestFramework\Helper\Bootstrap;
-
-/**
- * @magentoDataFixture Magento/Checkout/_files/quote_with_product_and_payment.php
- * @magentoAppArea frontend
- */
-class OnepageTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var \Magento\Checkout\Model\Type\Onepage */
-    protected $_model;
-
-    /** @var \Magento\Quote\Model\Quote */
-    protected $_currentQuote;
-
-    protected function setUp()
-    {
-        parent::setUp();
-        $this->_model = Bootstrap::getObjectManager()->create('Magento\Checkout\Model\Type\Onepage');
-        /** @var \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection */
-        $quoteCollection = Bootstrap::getObjectManager()->create('Magento\Quote\Model\ResourceModel\Quote\Collection');
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $this->_currentQuote = $quoteCollection->getLastItem();
-        $this->_model->setQuote($this->_currentQuote);
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveShippingWithCustomerId()
-    {
-        $this->_currentQuote->setCustomerId(1)->save();
-        $data = [
-            'address_id' => '',
-            'firstname' => 'Joe',
-            'lastname' => 'Black',
-            'company' => 'Lunatis',
-            'street' => ['1100 Parmer', 'ln.'],
-            'city' => 'Austin',
-            'region_id' => '57',
-            'region' => '',
-            'postcode' => '78757',
-            'country_id' => 'US',
-            'telephone' => '(512) 999-9999',
-            'fax' => '',
-            'save_in_address_book' => 1,
-        ];
-        $this->_model->saveShipping($data, 1);
-
-        $address = $this->_currentQuote->getShippingAddress();
-
-        /* Verify that data from Customer Address identified by id=1 is set */
-        $this->assertEquals('John', $address->getFirstname());
-        $this->assertEquals('Smith', $address->getLastname());
-        $this->assertEquals(['Green str, 67'], $address->getStreet());
-        $this->assertEquals('CityM', $address->getCity());
-        $this->assertEquals('Alabama', $address->getRegion());
-        $this->assertEquals(1, $address->getRegionId());
-        $this->assertEquals('75477', $address->getPostcode());
-        $this->assertEquals('US', $address->getCountryId());
-        $this->assertEquals('3468676', $address->getTelephone());
-        $this->assertEquals('customer@example.com', $address->getEmail());
-        $this->assertTrue($address->getCollectShippingRates());
-        $this->assertEquals(1, $address->getCustomerAddressId());
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveShippingWithData()
-    {
-        $data = [
-            'address_id' => '',
-            'firstname' => 'Joe',
-            'lastname' => 'Black',
-            'company' => 'Lunatis',
-            'street' => ['1100 Parmer', 'ln.'],
-            'city' => 'Austin',
-            'region_id' => '57',
-            'region' => '',
-            'postcode' => '78757',
-            'country_id' => 'US',
-            'telephone' => '(512) 999-9999',
-            'save_in_address_book' => 1,
-        ];
-        $this->_model->saveShipping($data, null);
-
-        $address = $this->_currentQuote->getShippingAddress();
-
-        /* Verify that data from the form is set */
-        $this->assertEquals('Joe', $address->getFirstname());
-        $this->assertEquals('Black', $address->getLastname());
-        $this->assertEquals('Lunatis', $address->getCompany());
-        $this->assertEquals("1100 Parmer\nln.", $address->getData('street'));
-        $this->assertEquals('Austin', $address->getCity());
-        $this->assertEquals('US', $address->getCountryId());
-        $this->assertEquals('Texas', $address->getRegion());
-        $this->assertEquals('57', $address->getRegionId());
-        $this->assertEquals('78757', $address->getPostcode());
-        $this->assertEquals('(512) 999-9999', $address->getTelephone());
-        $this->assertNull($address->getCustomerAddressId());
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     */
-    public function testSaveOrder()
-    {
-        $this->markTestIncomplete('MAGETWO-31257');
-        $this->_model->saveBilling($this->_getCustomerData(), null);
-        $this->_prepareQuote($this->_getQuote());
-
-        $this->_model->saveOrder();
-
-        /** @var $order \Magento\Sales\Model\Order */
-        $order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order');
-        $order->loadByIncrementId($this->_model->getLastOrderId());
-
-        $this->assertNotEmpty(
-            $this->_model->getQuote()->getShippingAddress()->getCustomerAddressId(),
-            'Quote shipping CustomerAddressId should not be empty'
-        );
-        $this->assertNotEmpty(
-            $this->_model->getQuote()->getBillingAddress()->getCustomerAddressId(),
-            'Quote billing CustomerAddressId should not be empty'
-        );
-
-        $this->assertNotEmpty(
-            $order->getShippingAddress()->getCustomerAddressId(),
-            'Order shipping CustomerAddressId should not be empty'
-        );
-        $this->assertNotEmpty(
-            $order->getBillingAddress()->getCustomerAddressId(),
-            'Order billing CustomerAddressId should not be empty'
-        );
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     */
-    public function testInitCheckoutNotLoggedIn()
-    {
-        /* The customer session must be cleared before the real test begins. Need to
-           have a customer via the data fixture to actually log out. */
-        /** @var $customerSession \Magento\Customer\Model\Session*/
-        $customerSession = Bootstrap::getObjectManager()->create('Magento\Customer\Model\Session');
-        $customerSession->setCustomerId(1);
-        $customerSession->logout();
-
-        $this->_model->saveBilling($this->_getCustomerData(), null);
-        $this->_prepareQuote($this->_getQuote());
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->_model->initCheckout();
-        $this->assertFalse($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        $this->assertFalse($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->assertNull($this->_model->getQuote()->getCustomer()->getEmail());
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     */
-    public function testInitCheckoutLoggedIn()
-    {
-        $this->_model->saveBilling($this->_getCustomerData(), null);
-        $this->_prepareQuote($this->_getQuote());
-        $customerIdFromFixture = 1;
-        $emailFromFixture = 'customer@example.com';
-        /** @var $customerSession \Magento\Customer\Model\Session*/
-        $customerSession = Bootstrap::getObjectManager()->create('Magento\Customer\Model\Session');
-        /** @var $customerRepository \Magento\Customer\Api\CustomerRepositoryInterface */
-        $customerRepository = Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Api\CustomerRepositoryInterface'
-        );
-        $customerData = $customerRepository->getById($customerIdFromFixture);
-        $customerSession->setCustomerDataObject($customerData);
-        $this->_model = Bootstrap::getObjectManager()->create(
-            'Magento\Checkout\Model\Type\Onepage',
-            ['customerSession' => $customerSession]
-        );
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->_model->initCheckout();
-        $this->assertFalse($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        //When the user is logged in and for Step billing - allow is not reset to true
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->assertEquals($emailFromFixture, $this->_model->getQuote()->getCustomer()->getEmail());
-    }
-
-    /**
-     * New customer, the same address should be used for shipping and billing, it should be persisted to DB.
-     *
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     */
-    public function testSaveBillingSameAsShipping()
-    {
-        $quote = $this->_model->getQuote();
-
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $customerAddressId = false;
-        $this->assertEquals(1, $customerData['use_for_shipping'], "Precondition failed: use_for_shipping is invalid");
-        $this->assertEquals(
-            1,
-            $customerData['save_in_address_book'],
-            "Precondition failed: save_in_address_book is invalid"
-        );
-        $this->assertEmpty(
-            $quote->getBillingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-        $this->assertEmpty(
-            $quote->getShippingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertEquals([], $result, 'Return value is invalid');
-
-        /** Ensure that quote addresses were persisted correctly */
-        $billingAddress = $quote->getBillingAddress();
-        $shippingAddress = $quote->getShippingAddress();
-
-        $quoteAddressFieldsToCheck = [
-            'quote_id' => $quote->getId(),
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'John.Smith@example.com',
-            'street' => '6131 Monterey Rd, Apt 1',
-            'city' => 'Los Angeles',
-            'postcode' => '90042',
-            'country_id' => 'US',
-            'region_id' => '1',
-            'region' => 'Alabama',
-            'telephone' => '(323) 255-5861',
-            'customer_id' => null,
-            'customer_address_id' => null,
-        ];
-
-        foreach ($quoteAddressFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $billingAddress->getData($field), "{$field} value is invalid");
-            $this->assertEquals($value, $shippingAddress->getData($field), "{$field} value is invalid");
-        }
-        $this->assertEquals('1', $shippingAddress->getData('same_as_billing'), "same_as_billing value is invalid");
-        $this->assertGreaterThan(0, $shippingAddress->getData('address_id'), "address_id value is invalid");
-        $this->assertGreaterThan(0, $billingAddress->getData('address_id'), "address_id value is invalid");
-        $this->assertEquals(
-            1,
-            $billingAddress->getData('save_in_address_book'),
-            "save_in_address_book value is invalid"
-        );
-        $this->assertEquals(
-            0,
-            $shippingAddress->getData('save_in_address_book'),
-            "As soon as 'same_as_billing' is set to 1, 'save_in_address_book' of shipping should be 0"
-        );
-
-        /** Ensure that customer-related data was ported to quote correctly */
-        $quoteFieldsToCheck = [
-            'customer_firstname' => 'John',
-            'customer_lastname' => 'Smith',
-            'customer_email' => 'John.Smith@example.com',
-        ];
-        foreach ($quoteFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $quote->getData($field), "{$field} value is set to quote incorrectly.");
-        }
-
-        /** Perform if checkout steps status was correctly updated in session */
-        /** @var \Magento\Checkout\Model\Session $checkoutSession */
-        $checkoutSession = Bootstrap::getObjectManager()->get('Magento\Checkout\Model\Session');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'allow'), 'Billing step should be allowed.');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'complete'), 'Billing step should be completed.');
-        $this->assertTrue($checkoutSession->getStepData('shipping', 'allow'), 'Shipping step should be allowed.');
-    }
-
-    /**
-     * New customer, billing address should not be used as shipping address, it should be persisted to DB.
-     *
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     */
-    public function testSaveBilling()
-    {
-        $quote = $this->_model->getQuote();
-
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $customerData['use_for_shipping'] = 0;
-        $customerAddressId = false;
-        $this->assertEquals(
-            1,
-            $customerData['save_in_address_book'],
-            "Precondition failed: save_in_address_book is invalid"
-        );
-        $this->assertEmpty(
-            $quote->getBillingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-        $this->assertEmpty(
-            $quote->getShippingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertEquals([], $result, 'Return value is invalid');
-
-        /** Ensure that quote addresses were persisted correctly */
-        $billingAddress = $quote->getBillingAddress();
-        $shippingAddress = $quote->getShippingAddress();
-
-        $quoteAddressFieldsToCheck = [
-            'quote_id' => $quote->getId(),
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'John.Smith@example.com',
-            'street' => '6131 Monterey Rd, Apt 1',
-            'city' => 'Los Angeles',
-            'postcode' => '90042',
-            'country_id' => 'US',
-            'region_id' => '1',
-            'region' => 'Alabama',
-            'telephone' => '(323) 255-5861',
-            'customer_id' => null,
-            'customer_address_id' => null,
-        ];
-
-        foreach ($quoteAddressFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $billingAddress->getData($field), "{$field} value is invalid");
-        }
-        $this->assertGreaterThan(0, $billingAddress->getData('address_id'), "address_id value is invalid");
-        $this->assertEmpty(
-            $shippingAddress->getData('firstname'),
-            "Shipping address should not be populated with billing address data when 'same_as_billing' is set to 0."
-        );
-        $this->assertEquals(
-            1,
-            $billingAddress->getData('save_in_address_book'),
-            "save_in_address_book value is invalid"
-        );
-
-        /** Ensure that customer-related data was ported to quote correctly */
-        $quoteFieldsToCheck = [
-            'customer_firstname' => 'John',
-            'customer_lastname' => 'Smith',
-            'customer_email' => 'John.Smith@example.com',
-        ];
-        foreach ($quoteFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $quote->getData($field), "{$field} value is set to quote incorrectly.");
-        }
-
-        /** Perform if checkout steps status was correctly updated in session */
-        /** @var \Magento\Checkout\Model\Session $checkoutSession */
-        $checkoutSession = Bootstrap::getObjectManager()->get('Magento\Checkout\Model\Session');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'allow'), 'Billing step should be allowed.');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'complete'), 'Billing step should be completed.');
-        $this->assertTrue($checkoutSession->getStepData('shipping', 'allow'), 'Shipping step should be allowed.');
-    }
-
-    /**
-     * New address, address data is invalid.
-     */
-    public function testSaveBillingValidationErrorNewAddress()
-    {
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        unset($customerData['firstname']);
-        $customerAddressId = false;
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $validationErrors = [
-            '"First Name" is a required value.',
-            '"First Name" length must be equal or greater than 1 characters.',
-        ];
-        $this->assertEquals(
-            ['error' => 1, 'message' => $validationErrors],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * Existing address, address data is invalid.
-     *
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveBillingExistingAddressInvalidData()
-    {
-        /** Preconditions */
-        $addressIdFromFixture = 1;
-        $customerIdFromFixture = 1;
-        $customerData = $this->_getCustomerData();
-        unset($customerData['firstname']);
-        $this->_getQuote()->setCustomerId($customerIdFromFixture);
-
-        /** Execute SUT */
-        /**
-         * If customer address is available, provided customer data is not validated,
-         * that's why no error occurs when invalid data is provided
-         */
-        $result = $this->_model->saveBilling($customerData, $addressIdFromFixture);
-        $this->assertEquals([], $result, 'No errors expected.');
-    }
-
-    /**
-     * Address exists, but it does not belong to the current customer which is set to quote.
-     *
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveBillingInvalidAddressId()
-    {
-        /** Preconditions */
-        $addressIdFromFixture = 1;
-        $customerData = $this->_getCustomerData();
-        unset($customerData['firstname']);
-        /** Any ID can be used, which is not equal to ID of customer to which current address belongs. */
-        $secondCustomerId = 2;
-        $this->_getQuote()->setCustomerId($secondCustomerId);
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $addressIdFromFixture);
-        $validationErrors = 'The customer address is not valid.';
-        $this->assertEquals(
-            ['error' => 1, 'message' => $validationErrors],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * Empty data.
-     */
-    public function testSaveBillingEmptyData()
-    {
-        /** Execute SUT */
-        $customerData = [];
-        $customerAddressId = false;
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertEquals(
-            ['error' => -1, 'message' => 'Invalid data'],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * Address does not exist, but existing email is specified in address data.
-     *
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     */
-    public function testSaveBillingNewAddressErrorExistingEmail()
-    {
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $fixtureCustomerEmail = 'customer@example.com';
-        $customerData['email'] = $fixtureCustomerEmail;
-        $customerAddressId = false;
-        $this->_getQuote()->setCheckoutMethod(\Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER);
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertArrayHasKey('message', $result, 'Error message was expected to be set');
-        $this->assertStringStartsWith(
-            'This email address already belongs to a registered customer.',
-            (string)$result['message'],
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * New address, customer address is invalid (customer validation should fail, not address validation).
-     */
-    public function testSaveBillingInvalidCustomerData()
-    {
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $customerData['email'] = 'invalidemail';
-        $this->_getQuote()->setCheckoutMethod(\Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER);
-        $customerAddressId = false;
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $validationErrors = '"Email" is not a valid email address.';
-        $this->assertEquals(
-            ['error' => -1, 'message' => $validationErrors],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * @return \Magento\Quote\Model\Quote
-     */
-    protected function _getQuote()
-    {
-        return $this->_currentQuote;
-    }
-
-    /**
-     * Prepare Quote
-     *
-     * @param \Magento\Quote\Model\Quote $quote
-     */
-    protected function _prepareQuote($quote)
-    {
-        /** @var $rate \Magento\Quote\Model\Quote\Address\Rate */
-        $rate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Quote\Model\Quote\Address\Rate'
-        );
-        $rate->setCode('freeshipping_freeshipping');
-        $rate->getPrice(1);
-
-        $quote->getShippingAddress()->setShippingMethod('freeshipping_freeshipping');
-        $quote->getShippingAddress()->addShippingRate($rate);
-        $quote->setCheckoutMethod(\Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER);
-    }
-
-    /**
-     * Customer data for quote
-     *
-     * @return array
-     */
-    protected function _getCustomerData()
-    {
-        return [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'John.Smith@example.com',
-            'street' => ['6131 Monterey Rd, Apt 1', ''],
-            'city' => 'Los Angeles',
-            'postcode' => '90042',
-            'country_id' => 'US',
-            'region_id' => '1',
-            'telephone' => '(323) 255-5861',
-            'customer_password' => 'password',
-            'confirm_password' => 'password',
-            'save_in_address_book' => '1',
-            'use_for_shipping' => '1'
-        ];
-    }
-}
-- 
GitLab


From 4a7dd5807c3427d4e2aded0a87762ad686178f8a Mon Sep 17 00:00:00 2001
From: Ievgen Shakhsuvarov <ishakhsuvarov@ebay.com>
Date: Fri, 16 Oct 2015 17:19:22 +0300
Subject: [PATCH 409/420] MAGETWO-44092: Inputted data from first checkout step
 is not pre-filled in shopping cart estimator

---
 .../Magento/Customer/view/frontend/web/js/customer-data.js    | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index f4f79932d39..1f49ca48afb 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -107,6 +107,9 @@ define([
             if (_.isEmpty(storage.keys())) {
                 this.reload([], false);
             } else if (this.needReload()) {
+                _.each(dataProvider.getFromStorage(storage.keys()), function (sectionData, sectionName) {
+                    buffer.notify(sectionName, sectionData);
+                });
                 this.reload(this.getExpiredKeys(), false);
             } else {
                 _.each(dataProvider.getFromStorage(storage.keys()), function (sectionData, sectionName) {
@@ -154,6 +157,7 @@ define([
         set: function (sectionName, sectionData) {
             var data = {};
             data[sectionName] = sectionData;
+            console.log(sectionName);
             buffer.update(data);
         },
         reload: function (sectionNames, updateSectionId) {
-- 
GitLab


From ca1c74676f7bc95ed6e3a515443354d1100778f5 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 16 Oct 2015 17:21:16 +0300
Subject: [PATCH 410/420] MAGETWO-44179: Order Summary block on Shipping
 checkout step contains "Not yet calculated" and Subtotal information

---
 .../Checkout/view/frontend/layout/checkout_index_index.xml     | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
index 696a2089c46..d63de55391c 100644
--- a/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
+++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
@@ -334,6 +334,9 @@
                                         <item name="displayArea" xsi:type="string">sidebar</item>
                                         <item name="config" xsi:type="array">
                                             <item name="template" xsi:type="string">Magento_Checkout/sidebar</item>
+                                            <item name="deps" xsi:type="array">
+                                                <item name="0" xsi:type="string">checkout.steps</item>
+                                            </item>
                                         </item>
                                         <item name="children" xsi:type="array">
                                             <item name="summary" xsi:type="array">
-- 
GitLab


From aec69af1986a3c89419b249d0d12a8c699bfe1c7 Mon Sep 17 00:00:00 2001
From: Alex Akimov <aakimov@ebay.com>
Date: Fri, 16 Oct 2015 17:23:43 +0300
Subject: [PATCH 411/420] MAGETWO-44084: There is no Block on Frontend for
 "Accept Cookies" if Cookie Restriction Mode = Yes

---
 .../Magento/Cookie/{View => view}/adminhtml/requirejs-config.js   | 0
 .../Magento/Cookie/{View => view}/frontend/layout/default.xml     | 0
 .../Magento/Cookie/{View => view}/frontend/requirejs-config.js    | 0
 .../Cookie/{View => view}/frontend/templates/html/notices.phtml   | 0
 .../Cookie/{View => view}/frontend/templates/require_cookie.phtml | 0
 app/code/Magento/Cookie/{View => view}/frontend/web/js/notices.js | 0
 .../Cookie/{View => view}/frontend/web/js/require-cookie.js       | 0
 7 files changed, 0 insertions(+), 0 deletions(-)
 rename app/code/Magento/Cookie/{View => view}/adminhtml/requirejs-config.js (100%)
 rename app/code/Magento/Cookie/{View => view}/frontend/layout/default.xml (100%)
 rename app/code/Magento/Cookie/{View => view}/frontend/requirejs-config.js (100%)
 rename app/code/Magento/Cookie/{View => view}/frontend/templates/html/notices.phtml (100%)
 rename app/code/Magento/Cookie/{View => view}/frontend/templates/require_cookie.phtml (100%)
 rename app/code/Magento/Cookie/{View => view}/frontend/web/js/notices.js (100%)
 rename app/code/Magento/Cookie/{View => view}/frontend/web/js/require-cookie.js (100%)

diff --git a/app/code/Magento/Cookie/View/adminhtml/requirejs-config.js b/app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
similarity index 100%
rename from app/code/Magento/Cookie/View/adminhtml/requirejs-config.js
rename to app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
diff --git a/app/code/Magento/Cookie/View/frontend/layout/default.xml b/app/code/Magento/Cookie/view/frontend/layout/default.xml
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/layout/default.xml
rename to app/code/Magento/Cookie/view/frontend/layout/default.xml
diff --git a/app/code/Magento/Cookie/View/frontend/requirejs-config.js b/app/code/Magento/Cookie/view/frontend/requirejs-config.js
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/requirejs-config.js
rename to app/code/Magento/Cookie/view/frontend/requirejs-config.js
diff --git a/app/code/Magento/Cookie/View/frontend/templates/html/notices.phtml b/app/code/Magento/Cookie/view/frontend/templates/html/notices.phtml
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/templates/html/notices.phtml
rename to app/code/Magento/Cookie/view/frontend/templates/html/notices.phtml
diff --git a/app/code/Magento/Cookie/View/frontend/templates/require_cookie.phtml b/app/code/Magento/Cookie/view/frontend/templates/require_cookie.phtml
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/templates/require_cookie.phtml
rename to app/code/Magento/Cookie/view/frontend/templates/require_cookie.phtml
diff --git a/app/code/Magento/Cookie/View/frontend/web/js/notices.js b/app/code/Magento/Cookie/view/frontend/web/js/notices.js
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/web/js/notices.js
rename to app/code/Magento/Cookie/view/frontend/web/js/notices.js
diff --git a/app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js b/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js
rename to app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
-- 
GitLab


From 26a110718da79469888d6795472d372acc587ba2 Mon Sep 17 00:00:00 2001
From: Serhiy Shkolyarenko <sshkolyarenko@ebay.com>
Date: Fri, 16 Oct 2015 17:28:38 +0300
Subject: [PATCH 412/420] MAGETWO-44167: ObsoleteCodeTest ignores blacklist

mess detection fix
---
 .../static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php  | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
index c3acb75b2e1..813aababf3b 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
@@ -14,6 +14,9 @@ use Magento\Framework\App\Utility\Files;
 use Magento\Framework\App\Utility\AggregateInvoker;
 use Magento\TestFramework\Utility\ChangedFiles;
 
+/**
+ * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
+ */
 class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
 {
     /**@#+
-- 
GitLab


From c23bf258687db3ee76e2c641b6bfe975562f996b Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Fri, 16 Oct 2015 17:58:03 +0300
Subject: [PATCH 413/420] MAGETWO-43648: CLONE - Multi-select customer
 attribute rendered in admin UI as a dropdown

---
 .../Ui/Component/Form/Element/MultiSelect.php | 24 +++++++++++++++++++
 .../view/base/ui_component/etc/definition.xml |  5 +++-
 2 files changed, 28 insertions(+), 1 deletion(-)
 create mode 100644 app/code/Magento/Ui/Component/Form/Element/MultiSelect.php

diff --git a/app/code/Magento/Ui/Component/Form/Element/MultiSelect.php b/app/code/Magento/Ui/Component/Form/Element/MultiSelect.php
new file mode 100644
index 00000000000..93fd7f600e0
--- /dev/null
+++ b/app/code/Magento/Ui/Component/Form/Element/MultiSelect.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Ui\Component\Form\Element;
+
+class MultiSelect extends Select
+{
+    const NAME = 'multiselect';
+
+    const DEFAULT_SIZE = 6;
+
+    /**
+     * @inheritDoc
+     */
+    public function prepare()
+    {
+        $config['size'] = self::DEFAULT_SIZE;
+        $this->setData('config', array_replace_recursive((array)$this->getData('config'), $config));
+        parent::prepare();
+    }
+}
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index b8485998fec..090c3a9e277 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -199,7 +199,7 @@
             </item>
         </argument>
     </select>
-    <multiselect class="Magento\Ui\Component\Form\Element\Select">
+    <multiselect class="Magento\Ui\Component\Form\Element\MultiSelect">
         <argument name="data" xsi:type="array">
             <item name="template" xsi:type="string">ui/form/element/multiselect</item>
             <item name="js_config" xsi:type="array">
@@ -209,6 +209,9 @@
                     <item name="elementTmpl" xsi:type="string">ui/form/element/multiselect</item>
                 </item>
             </item>
+            <item name="config" xsi:type="array">
+                <item name="size" xsi:type="string">6</item>
+            </item>
         </argument>
     </multiselect>
     <textarea class="Magento\Ui\Component\Form\Element\Textarea">
-- 
GitLab


From a698766edbcdbe92d6e684c0ba02e54734afb0e1 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Fri, 16 Oct 2015 18:13:16 +0300
Subject: [PATCH 414/420] MAGETWO-44062: [github] Method
 \Magento\Customer\Model\Customer::setWebsiteId() has wrong PHPDoc declaration
 #2089

---
 app/code/Magento/Customer/Model/Customer.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Customer/Model/Customer.php b/app/code/Magento/Customer/Model/Customer.php
index 53cd1bcc12a..4516a33962a 100644
--- a/app/code/Magento/Customer/Model/Customer.php
+++ b/app/code/Magento/Customer/Model/Customer.php
@@ -22,7 +22,7 @@ use Magento\Framework\Indexer\StateInterface;
  * Customer model
  *
  * @method int getWebsiteId() getWebsiteId()
- * @method Customer setWebsiteId(int)
+ * @method Customer setWebsiteId($value)
  * @method int getStoreId() getStoreId()
  * @method string getEmail() getEmail()
  * @method ResourceCustomer _getResource()
-- 
GitLab


From 9d4b60487f44ec1bc5ec56f26df474b404578304 Mon Sep 17 00:00:00 2001
From: Ievgen Shakhsuvarov <ishakhsuvarov@ebay.com>
Date: Fri, 16 Oct 2015 18:31:22 +0300
Subject: [PATCH 415/420] MAGETWO-44092: Inputted data from first checkout step
 is not pre-filled in shopping cart estimator

---
 app/code/Magento/Customer/view/frontend/web/js/customer-data.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index 1f49ca48afb..bfec0bf9202 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -157,7 +157,6 @@ define([
         set: function (sectionName, sectionData) {
             var data = {};
             data[sectionName] = sectionData;
-            console.log(sectionName);
             buffer.update(data);
         },
         reload: function (sectionNames, updateSectionId) {
-- 
GitLab


From 6eadce90429d579bd73855da4b2ce737bba4c175 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 16 Oct 2015 19:41:54 +0300
Subject: [PATCH 416/420] MAGETWO-44005: Checkout with Paypal Express button
 becomes unavailable after changing quantity in Mini Shopping Cart

---
 .../Magento/Checkout/view/frontend/web/js/view/minicart.js  | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
index 68f02b5d572..7c4025a51c2 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
@@ -72,6 +72,12 @@ define([
                 this.isLoading(addToCartCalls > 0);
                 sidebarInitialized = false;
                 initSidebar();
+
+                /**TODO: Extra options support. Should be refactored after MAGETWO-43159. */
+                setInterval(function(){
+                    minicart.trigger('contentUpdated');
+                }, 500);
+
             }, this);
             $('[data-block="minicart"]').on('contentLoading', function(event) {
                 addToCartCalls++;
-- 
GitLab


From d3607fde59503444f3b54c710b5cf9dfe84a5c99 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 16 Oct 2015 20:06:33 +0300
Subject: [PATCH 417/420] MAGETWO-44219: Tax(totals) is not recalculated in
 Order Summary for virtual product if customer changes address

---
 .../Checkout/view/frontend/web/js/view/billing-address.js      | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
index 6be04c3df05..80d9a5982a6 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
@@ -133,6 +133,9 @@ define(
                 if (this.selectedAddress() && this.selectedAddress() != newAddressOption) {
                     selectBillingAddress(this.selectedAddress());
                     checkoutData.setSelectedBillingAddress(this.selectedAddress().getKey());
+                    if (window.checkoutConfig.reloadOnBillingAddress) {
+                        setBillingAddressAction(globalMessageList);
+                    }
                 } else {
                     this.source.set('params.invalid', false);
                     this.source.trigger(this.dataScopePrefix + '.data.validate');
-- 
GitLab


From b08187244fc6585fb45a6f6ab07f16364f0a3790 Mon Sep 17 00:00:00 2001
From: Oleksii Korshenko <okorshenko@ebay.com>
Date: Fri, 16 Oct 2015 20:27:57 +0300
Subject: [PATCH 418/420] MAGETWO-44084: There is no block/message on frontend
 for "accept cookies" if Cookie Restriction Mode = Yes

---
 .../view/frontend/web/js/action/set-billing-address.js     | 4 +++-
 .../testsuite/Magento/Test/Js/_files/blacklist/magento.txt | 7 +++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
index faf798bf988..2090bdabfe6 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
@@ -55,10 +55,12 @@ define(
                 serviceUrl, JSON.stringify(payload)
             ).done(
                 function () {
+                    var deferred = null;
+
                     if (!quote.isVirtual()) {
                         getTotalsAction([]);
                     } else {
-                        var deferred = $.Deferred();
+                        deferred = $.Deferred();
                         getPaymentInformationAction(deferred);
                         $.when(deferred).done(function () {
                             fullScreenLoader.stopLoader();
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index 02aa8c3d205..473a08355e6 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -173,10 +173,9 @@ app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summ
 app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
 app/code/Magento/ConfigurableProduct/view/frontend/requirejs-config.js
 app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
-app/code/Magento/Cookie/View/adminhtml/requirejs-config.js
-app/code/Magento/Cookie/View/frontend/requirejs-config.js
-app/code/Magento/Cookie/View/frontend/web/js/notices.js
-app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js
+app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
+app/code/Magento/Cookie/view/frontend/requirejs-config.js
+app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
 app/code/Magento/Customer/view/adminhtml/requirejs-config.js
 app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
 app/code/Magento/Customer/view/frontend/requirejs-config.js
-- 
GitLab


From 97b2e8098858c6c158add01f570c86ed441f43f8 Mon Sep 17 00:00:00 2001
From: Oleksii Korshenko <okorshenko@ebay.com>
Date: Fri, 16 Oct 2015 20:41:46 +0300
Subject: [PATCH 419/420] MAGETWO-44084: There is no block/message on frontend
 for "accept cookies" if Cookie Restriction Mode = Yes

---
 app/code/Magento/Cookie/view/frontend/web/js/notices.js       | 4 +++-
 .../Magento/Cookie/view/frontend/web/js/require-cookie.js     | 3 ++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Cookie/view/frontend/web/js/notices.js b/app/code/Magento/Cookie/view/frontend/web/js/notices.js
index 09094b971a2..5c82ce31468 100644
--- a/app/code/Magento/Cookie/view/frontend/web/js/notices.js
+++ b/app/code/Magento/Cookie/view/frontend/web/js/notices.js
@@ -8,6 +8,7 @@ define([
     "jquery/ui",
     "mage/cookies"
 ], function($){
+    "use strict";
 
     $.widget('mage.cookieNotices', {
         _create: function() {
@@ -18,6 +19,7 @@ define([
             }
             $(this.options.cookieAllowButtonSelector).on('click', $.proxy(function() {
                 var cookieExpires = new Date(new Date().getTime() + this.options.cookieLifetime * 1000);
+
                 $.mage.cookies.set(this.options.cookieName, this.options.cookieValue, {expires: cookieExpires});
                 if ($.mage.cookies.get(this.options.cookieName)) {
                     window.location.reload();
@@ -29,4 +31,4 @@ define([
     });
 
     return $.mage.cookieNotices;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js b/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
index 22abfc82d56..6aedd8ac9b5 100644
--- a/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
+++ b/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
@@ -30,6 +30,7 @@ define([
          */
         _bind: function() {
             var events = {};
+
             $.each(this.options.triggers, function(index, value) {
                 events['click ' + value] = '_checkCookie';
             });
@@ -50,4 +51,4 @@ define([
     });
 
     return $.mage.requireCookie;
-});
\ No newline at end of file
+});
-- 
GitLab


From b068bf8b6ee2a7e9426e63ddf66c3d26509232a2 Mon Sep 17 00:00:00 2001
From: Oleksii Korshenko <okorshenko@ebay.com>
Date: Fri, 16 Oct 2015 20:52:50 +0300
Subject: [PATCH 420/420] MAGETWO-44084: There is no block/message on frontend
 for "accept cookies" if Cookie Restriction Mode = Yes

---
 .../testsuite/Magento/Test/Js/_files/blacklist/magento.txt       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index 473a08355e6..70168b63a4e 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -175,6 +175,7 @@ app/code/Magento/ConfigurableProduct/view/frontend/requirejs-config.js
 app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
 app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
 app/code/Magento/Cookie/view/frontend/requirejs-config.js
+app/code/Magento/Cookie/view/frontend/web/js/notices.js
 app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
 app/code/Magento/Customer/view/adminhtml/requirejs-config.js
 app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
-- 
GitLab