Update .gitignore

This commit is contained in:
khanh97dev 2023-11-04 08:10:26 +07:00
parent dc00cd3cad
commit f2e3a2d018
7323 changed files with 89706 additions and 905200 deletions

View File

@ -50,7 +50,7 @@ return [
]
],
'x-frame-options' => 'SAMEORIGIN',
'MAGE_MODE' => 'default',
'MAGE_MODE' => 'developer',
'session' => [
'save' => 'files'
],

View File

@ -1 +0,0 @@
@import url("https://use.typekit.net/onr8tbr.css");@media (prefers-color-scheme:dark){table{border-collapse:collapse;margin:0 auto}a,a:visited{color:#1473e6;text-decoration:none}.legal a{text-decoration:underline}a[x-apple-data-detectors]{color:inherit !important;font-family:inherit !important;font-size:inherit !important;font-weight:inherit !important;line-height:inherit !important;text-decoration:none !important}}@media only screen and (max-width:480px){u~div{min-width:100vw}div>u~div{min-width:100%}.email-width,.email-width-400{width:84% !important}.full-width{width:100% !important}}.full-width{width:600px}.email-width{width:500px}.email-width-400{width:400px}.width-100{width:100%}.background-grey{background-color:#e4e4e4}.background-light{background-color:#f5f5f5}.padding-top-0{padding-top:0 !important}.padding-top-25{padding-top:25px}.padding-top-40{padding-top:40px}.padding-top-50{padding-top:40px}.email-body{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:none;background-color:#e4e4e4;margin:0;padding:0;width:100% !important}.email-preview{color:#e4e4e4;display:none;font-size:1px;overflow:hidden;visibility:hidden}.email-header-container{background-color:#fff;border-top:4px solid #eb1000;padding-bottom:60px}.email-logo{color:#eb1000;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:12px;line-height:18px}.email-logo img{color:#eb1000;display:block;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:12px;height:50px;line-height:18px;vertical-align:top}.email-footer-legal{color:#959595;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:16px;line-height:32px;padding-top:60px}.email-footer-legal a{color:#959595;text-decoration:underline}.email-footer-copyright{color:#959595;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:11px;line-height:18px;padding-bottom:50px;padding-top:50px}.email-subject{color:#000;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:23px;line-height:30px;padding-top:50px}.email-text{color:#2c2c2c;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:18px;line-height:26px;padding-top:25px}.cta-button-container{color:#1473e6;font-family:adobe-clean,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;font-size:16px;line-height:20px;padding-bottom:40px;padding-top:40px}.cta-button{-webkit-text-size-adjust:none;background-color:#1473e6;border-radius:20px;color:#fff;display:inline-block;font-size:16px;line-height:40px;text-align:center;text-decoration:none;width:200px}.cta-button-mso{font-size:0;line-height:0;margin:0}.email-information-link{color:#1473e6;text-decoration:none}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 954 KiB

View File

@ -1,16 +0,0 @@
@import 'node_modules/@spectrum-css/vars/dist/spectrum-global.css';
@import 'node_modules/@spectrum-css/vars/dist/spectrum-medium.css';
@import 'node_modules/@spectrum-css/vars/dist/spectrum-large.css';
@import 'node_modules/@spectrum-css/vars/dist/spectrum-light.css';
@import 'node_modules/@spectrum-css/vars/dist/spectrum-lightest.css';
@import 'node_modules/@spectrum-css/vars/dist/spectrum-dark.css';
@import 'node_modules/@spectrum-css/vars/dist/spectrum-darkest.css';
@import 'node_modules/@spectrum-css/page/dist/index-vars.css';
@import 'node_modules/@spectrum-css/icon/dist/index-vars.css';
@import 'node_modules/@spectrum-css/button/dist/index-vars.css';
@import 'node_modules/@spectrum-css/dialog/dist/index-vars.css';
@import 'node_modules/@spectrum-css/link/dist/index-vars.css';
@import 'node_modules/@spectrum-css/modal/dist/index-vars.css';
@import 'node_modules/@spectrum-css/card/dist/index-vars.css';
@import 'node_modules/@spectrum-css/typography/dist/index-vars.css';
@import 'node_modules/@spectrum-css/inlinealert/dist/index-vars.css';

View File

@ -1,38 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
define([
'jquery',
'underscore',
'Magento_AdminAdobeIms/js/loadicons'
], function ($, _, loadicons) {
'use strict';
var icons = {},
loadIcons = {
/**
* loadicons initialization
*/
init: function () {
loadicons(icons.spectrumCssIcons);
loadicons(icons.spectrumIcons);
},
/**
* @param {Object} iconUrls
* @constructor
*/
'Magento_AdminAdobeIms/js/admin_adobe_ims_load_icons': function (iconUrls) {
icons = iconUrls;
loadIcons.init();
}
};
return loadIcons;
});

View File

@ -1,67 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'uiComponent',
'jquery',
'Magento_AdobeIms/js/action/authorization'
], function (Component, $, login) {
'use strict';
return Component.extend({
defaults: {
loginConfig: {
url: 'https://ims-na1-stg.adobelogin.com/ims/authorize',
callbackParsingParams: {
regexpPattern: /auth\[code=(success|error);message=(.+)\]/,
codeIndex: 1,
messageIndex: 2,
nameIndex: 3,
successCode: 'success',
errorCode: 'error'
},
popupWindowParams: {
width: 500,
height: 600,
top: 100,
left: 300
},
popupWindowTimeout: 60000
}
},
/**
* @override
*/
initialize: function () {
this._super();
this.login();
},
/**
* Open popup for Adobe reauth
*
* @return {window.Promise}
*/
login: function () {
var deferred = $.Deferred(),
loginConfig = this.loginConfig;
$('input.ims_verification').on('click', function () {
login(loginConfig)
.then(function (response) {
if (response.isAuthorized === true) {
$('input.ims_verified').val(true);
}
deferred.resolve(response);
})
.fail(function (error) {
deferred.reject(error);
});
});
return deferred.promise();
}
});
});

View File

@ -1,90 +0,0 @@
/*
Copyright 2018 Adobe. All rights reserved.
This file is licensed to you under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
OF ANY KIND, either express or implied. See the License for the specific language
governing permissions and limitations under the License.
*/
// UMD pattern via umdjs
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define([], factory);
}
else if (typeof module === 'object' && module.exports) {
// CommonJS-like
module.exports = factory();
}
else {
// Browser
root.loadIcons = factory();
}
}(typeof self !== 'undefined' ? self : this, function() {
function handleError(string) {
string = 'loadIcons: '+string;
var error = new Error(string);
console.error(error.toString());
if (typeof callback === 'function') {
callback(error);
}
}
function injectSVG(svgURL, callback) {
var error;
// 200 for web servers, 0 for CEP panels
if (this.status !== 200 && this.status !== 0) {
handleError('Failed to fetch icons, server returned ' + this.status);
return;
}
// Parse the SVG
var parser = new DOMParser();
try {
var doc = parser.parseFromString(this.responseText, 'image/svg+xml');
var svg = doc.firstChild;
}
catch (err) {
handleError('Error parsing SVG: ' + err);
return;
}
// Make sure a real SVG was returned
if (svg && svg.tagName === 'svg') {
// Hide the element
svg.style.display = 'none';
svg.setAttribute('data-url', svgURL);
// Insert it into the head
document.head.insertBefore(svg, null);
// Pass the SVG to the callback
if (typeof callback === 'function') {
callback(null, svg);
}
}
else {
handleError('Parsed SVG document contained something other than an SVG');
}
}
function loadIcons(svgURL, callback) {
// Request the SVG sprite
var req = new XMLHttpRequest();
req.open('GET', svgURL, true);
req.addEventListener('load', injectSVG.bind(req, svgURL, callback));
req.addEventListener('error', function(event) {
handleError('Request failed');
});
req.send();
}
return loadIcons;
}));

View File

@ -1,41 +0,0 @@
{
"name": "magento_adminadobeims",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
"@spectrum-css/actionbutton": "^1.1.5",
"@spectrum-css/asset": "^3.0.13",
"@spectrum-css/button": "^6.0.3",
"@spectrum-css/buttongroup": "^5.0.3",
"@spectrum-css/card": "^4.0.12",
"@spectrum-css/checkbox": "^3.0.14",
"@spectrum-css/closebutton": "^1.2.2",
"@spectrum-css/dialog": "^6.0.2",
"@spectrum-css/divider": "^1.0.16",
"@spectrum-css/icon": "^3.0.14",
"@spectrum-css/inlinealert": "^4.0.3",
"@spectrum-css/link": "^3.1.17",
"@spectrum-css/modal": "^3.0.13",
"@spectrum-css/page": "^5.0.2",
"@spectrum-css/quickaction": "^3.0.16",
"@spectrum-css/typography": "^4.0.11",
"@spectrum-css/underlay": "^2.0.22",
"@spectrum-css/vars": "^6.1.1",
"loadicons": "^1.0.0"
},
"devDependencies": {
"cssnano": "^5.0.17",
"postcss": "^8.4.7",
"postcss-cli": "^9.1.0",
"postcss-dropunusedvars": "^1.2.1",
"postcss-import": "^14.0.2",
"postcss-varfallback": "^1.1.1"
}
}

View File

@ -1,8 +0,0 @@
module.exports = {
plugins: [
require('postcss-import'),
require('postcss-varfallback'),
require('postcss-dropunusedvars'),
require('cssnano')
]
};

View File

@ -1,14 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<button
class="adobe-sign-in-button"
id="adobeImsSignIn"
data-role="signInBtn"
data-bind="click: login"
type="button">
<span>Sign In</span>
</button>

View File

@ -1,187 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'underscore',
'jquery',
'Magento_Ui/js/modal/modal-component',
'uiRegistry',
'analyticsPopupConfig'
],
function (_, $, Modal, registry, analyticsPopupConfig) {
'use strict';
return Modal.extend(
{
defaults: {
imports: {
enableLogAction: '${ $.provider }:data.enableLogAction',
disableLogAction: '${ $.provider }:data.disableLogAction'
},
options: {},
notificationWindow: null
},
/**
* Initializes modal on opened function
*/
initModal: function () {
this.options.opened = this.onOpened.bind(this);
this._super();
},
/**
* Configure ESC and TAB so user can't leave modal
* without selecting an option
*
* @returns {Object} Chainable.
*/
initModalEvents: function () {
this._super();
//Don't allow ESC key to close modal
this.options.keyEventHandlers.escapeKey = this.handleEscKey.bind(this);
//Restrict tab action to the modal
this.options.keyEventHandlers.tabKey = this.handleTabKey.bind(this);
return this;
},
/**
* Once the modal is opened it hides the X
*/
onOpened: function () {
$('.modal-header button.action-close').attr('disabled', true).hide();
this.focusableElements = $(this.rootSelector).find('a[href], button:enabled');
this.firstFocusableElement = this.focusableElements[0];
this.lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
this.firstFocusableElement.focus();
},
/**
* Changes admin usage setting to yes
*/
enableAdminUsage: function () {
var data = {
'form_key': window.FORM_KEY
};
$.ajax(
{
type: 'POST',
url: this.enableLogAction,
data: data,
showLoader: true
}
).done(
function (xhr) {
if (xhr.error) {
self.onError(xhr);
}
}
).fail(this.onError);
this.openReleasePopup();
this.closeModal();
},
/**
* Changes admin usage setting to no
*/
disableAdminUsage: function () {
var data = {
'form_key': window.FORM_KEY
};
$.ajax(
{
type: 'POST',
url: this.disableLogAction,
data: data,
showLoader: true
}
).done(
function (xhr) {
if (xhr.error) {
self.onError(xhr);
}
}
).fail(this.onError);
this.openReleasePopup();
this.closeModal();
},
/**
* Allows admin usage popup to be shown first and then new release notification
*/
openReleasePopup: function () {
var notificationModalSelector = 'release_notification.release_notification.notification_modal_1';
if (analyticsPopupConfig.releaseVisible) {
registry.get(notificationModalSelector).initializeContentAfterAnalytics();
}
},
/**
* Handle Tab and Shift+Tab key event
*
* Keep the tab actions restricted to the popup modal
* so the user must select an option to dismiss the modal
*/
handleTabKey: function (event) {
var modal = this,
KEY_TAB = 9;
/**
* Handle Shift+Tab to tab backwards
*/
function handleBackwardTab() {
if (document.activeElement === modal.firstFocusableElement ||
document.activeElement === $(modal.rootSelector)[0]
) {
event.preventDefault();
modal.lastFocusableElement.focus();
}
}
/**
* Handle Tab forward
*/
function handleForwardTab() {
if (document.activeElement === modal.lastFocusableElement) {
event.preventDefault();
modal.firstFocusableElement.focus();
}
}
switch (event.keyCode) {
case KEY_TAB:
if (modal.focusableElements.length === 1) {
event.preventDefault();
break;
}
if (event.shiftKey) {
handleBackwardTab();
break;
}
handleForwardTab();
break;
default:
break;
}
},
/**
* Handle Esc key
*
* Esc key should not close modal
*/
handleEscKey: function (event) {
event.preventDefault();
}
}
);
}
);

View File

@ -1,39 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define(['jquery', 'analyticsPopupConfig'], function ($, analyticsPopupConfig) {
'use strict';
var deferred = $.Deferred(),
mixin = {
/**
* Initializes content only if its visible
*/
initializeContent: function () {
var initializeContent = this._super.bind(this);
if (!analyticsPopupConfig.analyticsVisible) {
initializeContent();
} else {
deferred.then(function () {
initializeContent();
});
}
},
/**
* Initializes release notification content after admin analytics
*/
initializeContentAfterAnalytics: function () {
deferred.resolve();
}
};
return function (target) {
return target.extend(mixin);
};
});

View File

@ -1,60 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
define([
'Magento_Ui/js/grid/columns/column',
'underscore'
], function (Column, _) {
'use strict';
return Column.extend({
defaults: {
bodyTmpl: 'Magento_AdminNotification/grid/cells/message',
messageIndex: 'text',
fieldClass: {
message: true,
'message-warning': false,
'message-progress': false,
'message-success': false,
'message-error': false
},
statusMap: {
0: 'info',
1: 'progress',
2: 'success',
3: 'error'
}
},
/** @inheritdoc */
getLabel: function (record) {
return record[this.messageIndex];
},
/**
* Proxy to getLabel function with UnsanitizedHtml suffix
*
* @param {Object} record
* @returns {String}
*/
getLabelUnsanitizedHtml: function (record) {
return this.getLabel(record);
},
/** @inheritdoc */
getFieldClass: function ($row) {
var status = this.statusMap[$row.status] || 'warning',
result = {};
result['message-' + status] = true;
result = _.extend({}, this.fieldClass, result);
return result;
}
});
});

View File

@ -1,66 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
define([
'Magento_Ui/js/grid/listing',
'Magento_Ui/js/lib/spinner',
'jquery'
], function (Listing, loader, $) {
'use strict';
return Listing.extend({
defaults: {
imports: {
totalRecords: '${ $.provider }:data.totalRecords'
},
selectors: {
collapsible: '.message-system-collapsible',
messages: '.message-system'
}
},
/** @inheritdoc */
initObservable: function () {
this._super()
.track({
totalRecords: 0
});
return this;
},
/** @inheritdoc */
showLoader: function () {
if (!this.source.firstLoad) {
this.fixLoaderHeight();
this._super();
}
},
/**
* Calculates loader height
*
* @param {Boolean} [closed]
*/
fixLoaderHeight: function (closed) {
var $messagesBlock = $(this.selectors.messages),
$collapsibleBlock = $(this.selectors.collapsible),
resultHeight = 0;
if ($messagesBlock.length) {
resultHeight += $messagesBlock.outerHeight();
}
if ($collapsibleBlock.length && $collapsibleBlock.is(':visible') && !closed) {
resultHeight += $collapsibleBlock.outerHeight();
}
loader.get(this.name).height(resultHeight);
}
});
});

View File

@ -1,26 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Ui/js/modal/modal'
], function ($, modal) {
'use strict';
return function (data, element) {
if (modal.modal) {
modal.modal.html($(element).html());
} else {
modal.modal = $(element).modal({
modalClass: data.class,
type: 'popup',
buttons: []
});
}
modal.modal.modal('openModal');
};
});

View File

@ -1,83 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
define([
'jquery',
'mage/template',
'jquery/ui',
'Magento_Ui/js/modal/modal'
], function ($, mageTemplate) {
'use strict';
$.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<% } %>">' +
'<%= item.text %>' +
'</li>' +
'<% }); %>'
},
/** @inheritdoc */
_create: function () {
this.options.title = $('#message-system-all').attr('title');
this._super();
},
/** @inheritdoc */
openModal: function (severity) {
var superMethod = $.proxy(this._super, this);
$.ajax({
url: this.options.ajaxUrl,
type: 'GET',
data: {
severity: severity
}
}).done($.proxy(function (data) {
var tmpl = mageTemplate(this.options.systemMessageTemplate, {
data: {
items: data
}
});
tmpl = $(tmpl);
this.element.html(
$('<ul></ul>', {
'class': 'message-system-list'
}).append(tmpl)
).trigger('contentUpdated');
superMethod();
}, this));
return this;
},
/** @inheritdoc */
closeModal: function () {
this._super();
}
});
$(function () {
$('#system_messages .message-system-short .error').on('click', function () {
$('#message-system-all').systemMessageDialog('openModal', 1);
});
$('#system_messages .message-system-short .warning').on('click', function () {
$('#message-system-all').systemMessageDialog('openModal', 2);
});
});
return $.mage.systemMessageDialog;
});

View File

@ -1,8 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div css="$col.getFieldClass($row())"
html="$col.getLabelUnsanitizedHtml($row())"></div>

View File

@ -1,32 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div id="system_messages" class="message-system" collapsible visible="totalRecords">
<div class="message-system-inner" outerClick="fixLoaderHeight.bind($data, true)">
<div class="message-system-short">
<button class="message-system-action-dropdown" toggleCollapsible>
<span>
<translate args="'System Messages'"></translate>:
<text args="totalRecords"></text>
</span>
</button>
<div class="message-system-short-wrapper" if="rows[0]" repeat="foreach: [rows[0]], item: '$row'" visible="!$collapsible.opened()">
<fastForEach args="data: getVisible(), as: '$col'" >
<render args="$col.getBody()"></render>
</fastForEach>
</div>
</div>
<div class="message-system-collapsible">
<ul class="message-system-list">
<li repeat="foreach: rows, item: '$row'">
<fastForEach args="data: getVisible(), as: '$col'" >
<render args="$col.getBody()"></render>
</fastForEach>
</li>
</ul>
</div>
</div>
</div>

View File

@ -1,121 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
define([
'jquery',
'jquery/ui',
'domReady!'
], function ($) {
'use strict';
/**
* Mark notification as read via AJAX call.
*
* @param {String} notificationId
*/
var markNotificationAsRead = function (notificationId) {
var requestUrl = $('.notifications-wrapper .admin__action-dropdown-menu').attr('data-mark-as-read-url');
$.ajax({
url: requestUrl,
type: 'POST',
dataType: 'json',
data: {
id: notificationId
},
showLoader: false
});
},
notificationCount = $('.notifications-wrapper').attr('data-notification-count'),
/**
* Remove notification from the list.
*
* @param {jQuery} notificationEntry
*/
removeNotificationFromList = function (notificationEntry) {
var notificationIcon, actionElement;
notificationEntry.remove();
notificationCount--;
$('.notifications-wrapper').attr('data-notification-count', notificationCount);
if (notificationCount == 0) {// eslint-disable-line eqeqeq
// Change appearance of the bubble and its behavior when the last notification is removed
$('.notifications-wrapper .admin__action-dropdown-menu').remove();
notificationIcon = $('.notifications-wrapper .notifications-icon');
notificationIcon.removeAttr('data-toggle');
notificationIcon.off('click.dropdown');
$('.notifications-action .notifications-counter').text('').hide();
} else {
// Change top counter only for allowable range
if (notificationCount <= 99) {
$('.notifications-action .notifications-counter').text(notificationCount);
}
$('.notifications-entry-last .notifications-counter').text(notificationCount);
// Modify caption of the 'See All' link
actionElement = $('.notifications-wrapper .admin__action-dropdown-menu .last .action-more');
actionElement.text(actionElement.text().replace(/\d+/, notificationCount));
}
},
/**
* Show notification details.
*
* @param {jQuery} notificationEntry
*/
showNotificationDetails = function (notificationEntry) {
var notificationDescription = notificationEntry.find('.notifications-entry-description'),
notificationDescriptionEnd = notificationEntry.find('.notifications-entry-description-end');
if (notificationDescriptionEnd.length > 0) {
notificationDescriptionEnd.addClass('_show');
}
if (notificationDescription.hasClass('_cutted')) {
notificationDescription.removeClass('_cutted');
}
};
// Show notification description when corresponding item is clicked
$('.notifications-wrapper .admin__action-dropdown-menu .notifications-entry').on(
'click.showNotification',
function (event) {
// hide notification dropdown
$('.notifications-wrapper .notifications-icon').trigger('click.dropdown');
showNotificationDetails($(this));
event.stopPropagation();
}
);
// Remove corresponding notification from the list and mark it as read
$('.notifications-close').on('click.removeNotification', function (event) {
var notificationEntry = $(this).closest('.notifications-entry'),
notificationId = notificationEntry.attr('data-notification-id');
markNotificationAsRead(notificationId);
removeNotificationFromList(notificationEntry);
// Checking for last unread notification to hide dropdown
if (notificationCount == 0) {// eslint-disable-line eqeqeq
$('.notifications-wrapper').removeClass('active')
.find('.notifications-action')
.removeAttr('data-toggle')
.off('click.dropdown');
}
event.stopPropagation();
});
// Hide notifications bubble
if (notificationCount == 0) {// eslint-disable-line eqeqeq
$('.notifications-action .notifications-counter').hide();
} else {
$('.notifications-action .notifications-counter').show();
}
});

View File

@ -1,132 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery'
], function ($) {
'use strict';
/**
* Build window params
* @param {Object} windowParams
* @returns {String}
*/
function buildWindowParams(windowParams) {
var output = '',
coma = '',
paramName,
paramValue;
for (paramName in windowParams) {
if (windowParams[paramName]) {
paramValue = windowParams[paramName];
output += coma + paramName + '=' + paramValue;
coma = ',';
}
}
return output;
}
return function (config) {
var authWindow,
deferred = $.Deferred(),
watcherId,
stopWatcherId;
/**
* Close authorization window if already opened
*/
if (window.adobeIMSAuthWindow) {
window.adobeIMSAuthWindow.close();
}
/**
* Opens authorization window with special parameters
*/
authWindow = window.adobeIMSAuthWindow = window.open(
config.url,
'authorization_widnow',
buildWindowParams(
config.popupWindowParams || {
width: 500,
height: 300
}
)
);
/**
* Stop handle
*/
function stopHandle() {
// Clear timers
clearTimeout(stopWatcherId);
clearInterval(watcherId);
// Close window
authWindow.close();
}
/**
* Start handle
*/
function startHandle() {
var responseData;
try {
if (authWindow.document.domain !== document.domain ||
authWindow.document.readyState !== 'complete') {
return;
}
/**
* If within 10 seconds the result is not received, then reject the request
*/
stopWatcherId = setTimeout(function () {
stopHandle();
deferred.reject(new Error('Time\'s up.'));
}, config.popupWindowTimeout || 60000);
responseData = authWindow.document.body.innerHTML.match(
config.callbackParsingParams.regexpPattern
);
if (!responseData) {
return;
}
stopHandle();
if (responseData[config.callbackParsingParams.codeIndex] ===
config.callbackParsingParams.successCode) {
deferred.resolve({
isAuthorized: true,
lastAuthSuccessMessage: responseData[config.callbackParsingParams.messageIndex]
});
} else {
deferred.reject(responseData[config.callbackParsingParams.messageIndex]);
}
} catch (e) {
if (authWindow.closed) {
clearTimeout(stopWatcherId);
clearInterval(watcherId);
// eslint-disable-next-line max-depth
if (window.adobeIMSAuthWindow && window.adobeIMSAuthWindow.closed) {
deferred.reject(new Error('Authentication window was closed.'));
}
}
}
}
/**
* Watch a result 1 time per second
*/
watcherId = setInterval(startHandle, 1000);
return deferred.promise();
};
});

View File

@ -1,32 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([], function () {
'use strict';
return {
loginUrl: 'https://ims-na1.adobelogin.com/ims/authorize',
profileUrl: 'adobe_ims/user/profile',
logoutUrl: 'adobe_ims/user/logout',
manageAccountLink: 'https://account.adobe.com/',
login: {
callbackParsingParams: {
regexpPattern: /auth\[code=(success|error);message=(.+)\]/,
codeIndex: 1,
messageIndex: 2,
nameIndex: 3,
successCode: 'success',
errorCode: 'error'
},
popupWindowParams: {
width: 500,
height: 600,
top: 100,
left: 300
},
popupWindowTimeout: 10000
}
};
});

View File

@ -1,143 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'uiComponent',
'jquery',
'Magento_AdobeIms/js/action/authorization'
], function (Component, $, login) {
'use strict';
return Component.extend({
defaults: {
profileUrl: 'adobe_ims/user/profile',
logoutUrl: 'adobe_ims/user/logout',
user: {
isAuthorized: false,
name: '',
email: '',
image: ''
},
loginConfig: {
url: 'https://ims-na1.adobelogin.com/ims/authorize',
callbackParsingParams: {
regexpPattern: /auth\[code=(success|error);message=(.+)\]/,
codeIndex: 1,
messageIndex: 2,
nameIndex: 3,
successCode: 'success',
errorCode: 'error'
},
popupWindowParams: {
width: 500,
height: 600,
top: 100,
left: 300
},
popupWindowTimeout: 60000
}
},
/**
* @inheritdoc
*/
initObservable: function () {
this._super().observe(['user']);
return this;
},
/**
* Login to Adobe
*
* @return {window.Promise}
*/
login: function () {
var deferred = $.Deferred();
if (this.user().isAuthorized) {
deferred.resolve();
}
login(this.loginConfig)
.then(function (response) {
this.loadUserProfile();
deferred.resolve(response);
}.bind(this))
.fail(function (error) {
deferred.reject(error);
});
return deferred.promise();
},
/**
* Retrieve data to authorized user.
*
* @return array
*/
loadUserProfile: function () {
$.ajax({
type: 'GET',
url: this.profileUrl,
showLoader: true,
dataType: 'json',
context: this,
/**
* @param {Object} response
* @returns void
*/
success: function (response) {
this.user({
isAuthorized: true,
name: response.result.name,
email: response.result.email,
image: response.result.image
});
},
/**
* @param {Object} response
* @returns {String}
*/
error: function (response) {
return response.message;
}
});
},
/**
* Logout from adobe account
*/
logout: function () {
$.ajax({
type: 'POST',
url: this.logoutUrl,
data: {
'form_key': window.FORM_KEY
},
dataType: 'json',
context: this,
showLoader: true,
success: function () {
this.user({
isAuthorized: false,
name: '',
email: '',
image: ''
});
}.bind(this),
/**
* @param {Object} response
* @returns {String}
*/
error: function (response) {
return response.message;
}
});
}
});
});

View File

@ -1,13 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define(['ko'], function (ko) {
'use strict';
return {
isAuthorized: ko.observable(false),
name: ko.observable(''),
email: ko.observable('')
};
});

View File

@ -1,50 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<button
class="adobe-sign-in-button"
id="adobeImsSignIn"
data-role="signInBtn"
data-bind="click: login, visible: !user().isAuthorized"
type="button">
<span>Sign In</span>
</button>
<div class="adobe-user-information">
<div class="admin__action-dropdown-wrap" data-bind="collapsible">
<img class="adobe-profile-image-small"
attr="src: user().image"
data-bind="visible: user().isAuthorized"/>
<button
type="button"
data-toggle="dropdown"
class="adobe-user-name admin__action-dropdown"
data-bind="visible: user().isAuthorized, toggleCollapsible">
<span><!--ko text: user().name--><!--/ko--></span>
</button>
<ul class="admin__action-dropdown-menu adobe-user-popup" data-bind="visible: user().isAuthorized">
<li>
<img class="adobe-profile-image-large" attr="src: user().image">
</li>
<li class="adobe-user-info">
<ul>
<li><!--ko text: user().name--><!--/ko--></li>
<li><!--ko text: user().email--><!--/ko--></li>
<li><a target="_blank" href="https://account.adobe.com/profile">Manage Account</a></li>
</ul>
</li>
<li>
<button
class="adobe-sign-out-button"
id="adobeImsSignOut"
data-bind="click: logout"
data-role="signOutBtn"
type="button">
<span>Sign Out</span>
</button>
</li>
</ul>
</div>
</div>

View File

@ -1,93 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'ko',
'uiComponent',
'jquery'
], function (ko, Component, $) {
'use strict';
return Component.extend({
defaults: {
template: 'Magento_AdobeStockAdminUi/connection',
connectionFailedMessage: 'Connection test failed.',
emptyApiKeyMessage: 'Please fill the "API Key (Client ID)" field for a connection test',
apiKeyInputId: 'system_adobe_stock_integration_api_key',
url: '',
success: false,
message: '',
visible: false
},
/**
* Init observable variables
* @return {Object}
*/
initObservable: function () {
this._super()
.observe([
'success',
'message',
'visible'
]);
return this;
},
/**
* @override
*/
initialize: function () {
this._super();
this.messageClass = ko.computed(function () {
return 'message-validation message message-' + (this.success() ? 'success' : 'error');
}, this);
if (!this.success()) {
this.showMessage(false, this.connectionFailedMessage);
}
},
/**
* @param {bool} success
* @param {String} message
*/
showMessage: function (success, message) {
this.message(message);
this.success(success);
this.visible(true);
},
/**
* Send request to server to test connection to Adobe Stock API and display the result
*/
testConnection: function () {
var apiKey = document.getElementById(this.apiKeyInputId).value;
if (apiKey.length === 0) {
this.showMessage(false, this.emptyApiKeyMessage);
return;
}
this.visible(false);
$.ajax({
type: 'POST',
url: this.url,
dataType: 'json',
data: {
'api_key': apiKey
},
success: function (response) {
this.showMessage(response.success === true, response.message);
}.bind(this),
error: function () {
this.showMessage(false, this.connectionFailedMessage);
}.bind(this)
});
}
});
});

View File

@ -1,10 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div if="visible" attr="class: messageClass" translate="message"></div>
<button class="scalable" type="button" click="testConnection" data-ui-id="adobe-stock-integration-buttons-test-connection">
<span text="buttonLabel"></span>
</button>

View File

@ -1,53 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery'
], function ($) {
'use strict';
return function (requestUrl, adobeAssetId) {
var deferred = $.Deferred();
$.ajax({
type: 'GET',
url: requestUrl,
dataType: 'json',
data: {
'media_id': adobeAssetId
},
showLoader: true,
/**
* Extract the data from the response and resolve
*
* @param {Object} response
*/
success: function (response) {
deferred.resolve({
canLicense: response.result.canLicense,
message: response.result.message
});
},
/**
* Extract the error message and reject
*
* @param {Object} response
*/
error: function (response) {
var message = response.JSON ? response.JSON.message
: $.mage.__('Could not fetch licensing information.');
if (response.status === 403) {
message = $.mage.__('Your admin role does not have permissions to license an image');
}
deferred.reject(message);
}
});
return deferred.promise();
};
});

View File

@ -1,49 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery'
], function ($) {
'use strict';
return function (requestUrl, ids) {
var deferred = $.Deferred();
$.ajax({
type: 'GET',
url: requestUrl + '?ids=' + ids.join(','),
data: {
'form_key': window.FORM_KEY
},
showLoader: true,
dataType: 'json',
/**
* Resolve with the response result
*
* @param {Object} response
*/
success: function (response) {
deferred.resolve(response.result);
},
/**
* Reject with the message from response
*
* @param {Object} response
*/
error: function (response) {
var message = response.message;
if (response.status === 403) {
message = $.mage.__('Your admin role does not have permissions to license an image');
}
deferred.reject(message);
}
});
return deferred.promise();
};
});

View File

@ -1,55 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_AdobeStockImageAdminUi/js/action/save',
'Magento_AdobeStockImageAdminUi/js/confirmation/license',
'Magento_AdobeStockImageAdminUi/js/path-utility'
], function ($, saveAction, licenseConfirmation, pathUtility) {
'use strict';
return function (
requestUrl,
id,
title,
path,
contentType,
isDownloaded,
quotaMessage,
directoryPath
) {
var deferred = $.Deferred(),
destinationPath;
licenseConfirmation(
title,
quotaMessage,
isDownloaded,
pathUtility.generateImageName(title, id),
pathUtility.getImageExtension(contentType)
).then(function (fileName) {
if (typeof fileName === 'undefined') {
fileName = pathUtility.getImageNameFromPath(path);
}
destinationPath = pathUtility.buildPath(directoryPath, fileName, contentType);
saveAction(
requestUrl,
id,
destinationPath
).then(function () {
deferred.resolve(destinationPath);
}).fail(function (message) {
deferred.reject(message);
});
}).fail(function (error) {
deferred.reject(error);
});
return deferred.promise();
};
});

View File

@ -1,51 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery'
], function ($) {
'use strict';
return function (requestUrl, adobeAssetId, destinationPath) {
var deferred = $.Deferred();
$.ajax({
type: 'POST',
url: requestUrl,
dataType: 'json',
showLoader: true,
data: {
'media_id': adobeAssetId,
'destination_path': destinationPath
},
/**
* Resolve on success
*/
success: function () {
deferred.resolve();
},
/**
* Extract the error message and reject
*
* @param {Object} response
*/
error: function (response) {
var message;
if (typeof response.responseJSON === 'undefined' ||
typeof response.responseJSON.message === 'undefined'
) {
message = 'Could not save the asset!';
} else {
message = response.responseJSON.message;
}
deferred.reject(message);
}
});
return deferred.promise();
};
});

View File

@ -1,54 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_AdobeStockImageAdminUi/js/action/save',
'Magento_AdobeStockImageAdminUi/js/confirmation/saveLicensed',
'Magento_AdobeStockImageAdminUi/js/path-utility'
], function ($, saveAction, saveLicensedConfirmation, pathUtility) {
'use strict';
return function (requestUrl, id, title, path, contentType, directoryPath) {
var imageName = '',
destinationPath,
deferred = $.Deferred();
if (path !== '') {
imageName = pathUtility.getImageNameFromPath(path);
destinationPath = pathUtility.buildPath(directoryPath, imageName, contentType);
saveAction(
requestUrl,
id,
destinationPath
).then(function () {
deferred.resolve(destinationPath);
}).fail(function (message) {
deferred.reject(message);
});
return deferred.promise();
}
saveLicensedConfirmation(
pathUtility.generateImageName(title, id),
pathUtility.getImageExtension(contentType)
).then(function (fileName) {
destinationPath = pathUtility.buildPath(directoryPath, fileName, contentType);
saveAction(
requestUrl,
id,
destinationPath
).then(function () {
deferred.resolve(destinationPath);
}).fail(function (message) {
deferred.reject(message);
});
}).fail(function (error) {
deferred.reject(error);
});
return deferred.promise();
};
});

View File

@ -1,38 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_AdobeStockImageAdminUi/js/action/save',
'Magento_AdobeStockImageAdminUi/js/confirmation/save',
'Magento_AdobeStockImageAdminUi/js/path-utility'
], function ($, saveAction, saveConfirmation, pathUtility) {
'use strict';
return function (requestUrl, id, title, contentType, directoryPath) {
var deferred = $.Deferred(),
destinationPath;
saveConfirmation(
pathUtility.generateImageName(title, id),
pathUtility.getImageExtension(contentType)
).then(function (fileName) {
destinationPath = pathUtility.buildPath(directoryPath, fileName, contentType);
saveAction(
requestUrl,
id,
destinationPath
).then(function () {
deferred.resolve(destinationPath);
}).fail(function (error) {
deferred.reject(error);
});
}).fail(function (error) {
deferred.reject(error);
});
return deferred.promise();
};
});

View File

@ -1,197 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'uiLayout',
'Magento_Ui/js/grid/columns/image-preview'
], function ($, layout, imagePreview) {
'use strict';
return imagePreview.extend({
defaults: {
downloadImagePreviewUrl: 'adobe_stock/preview/download',
licenseAndDownloadUrl: 'adobe_stock/license/license',
saveLicensedAndDownloadUrl: 'adobe_stock/license/saveLicensed',
confirmationUrl: 'adobe_stock/license/confirmation',
relatedImagesUrl: 'adobe_stock/preview/relatedimages',
buyCreditsUrl: 'https://stock.adobe.com/',
mediaGallerySelector: '.media-gallery-modal:has(#search_adobe_stock)',
adobeStockModalSelector: '.adobe-search-images-modal',
activeMediaGallerySelector: 'aside.modal-slide.adobe-stock-modal._show',
modules: {
keywords: '${ $.name }_keywords',
related: '${ $.name }_related',
actions: '${ $.name }_actions'
},
viewConfig: [
{
component: 'Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/keywords',
name: '${ $.name }_keywords'
},
{
component: 'Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/related',
name: '${ $.name }_related'
},
{
component: 'Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/actions',
name: '${ $.name }_actions',
provider: '${ $.provider }',
mediaGallery: '${ $.mediaGalleryComponent }',
mediaGalleryName: '${ $.mediaGalleryName }',
mediaGalleryProvider: '${ $.mediaGalleryProvider }',
mediaGallerySortBy: '${ $.mediaGallerySortBy }',
mediaGallerySearchInput: '${ $.mediaGallerySearchInput }',
mediaGalleryListingFilters: '${ $.mediaGalleryListingFilters }',
getMediaGalleryAsset: '${ $.getMediaGalleryAsset }',
imageEditDetailsUrl: '${ $.imageEditDetailsUrl }',
listingPaging: '${ $.listingPaging }'
}
],
listens: {
'${ $.sortByComponentName }:applied': 'hide'
}
},
/**
* Initialize the component
*
* @returns {Object}
*/
initialize: function () {
this._super().initView();
$(window).on('fileDeleted.enhancedMediaGallery', this.reloadAdobeGrid.bind(this));
$(window).on('folderDeleted.enhancedMediaGallery', this.reloadAdobeGrid.bind(this));
return this;
},
/**
* Initialize child components
*
* @returns {Object}
*/
initView: function () {
layout(this.viewConfig);
return this;
},
/**
* Get previous button disabled
*
* @param {Object} record
*
* @return {Boolean}
*/
cannotViewPrevious: function (record) {
return this.related().cannotViewPrevious(record);
},
/**
* Get next button disabled
*
* @param {Object} record
*
* @return {Boolean}
*/
cannotViewNext: function (record) {
return this.related().cannotViewNext(record);
},
/**
* Return active adobe gallery selector.
*/
getAdobeModal: function () {
return $(this.activeMediaGallerySelector).find(this.adobeStockModalSelector);
},
/**
* @inheritdoc
*/
next: function (record) {
if (this.related().selectedTab()) {
this.related().nextRelated(record);
return;
}
this.keywords().hideAllKeywords();
this._super(record);
},
/**
* @inheritdoc
*/
prev: function (record) {
if (this.related().selectedTab()) {
this.related().prevRelated(record);
return;
}
this.keywords().hideAllKeywords();
this._super(record);
},
/**
* @inheritdoc
*/
show: function (record) {
this.related().selectedTab(null);
this.keywords().hideAllKeywords();
this.displayedRecord(record);
this._super(record);
this.related().loadRelatedImages(record);
},
/**
* Show related image data in the preview section
*
* @param {Object} record
*/
showRelated: function (record) {
this.keywords().hideAllKeywords();
this.displayedRecord(record);
this.updateHeight();
},
/**
* Returns attributes to display under the preview image
*
* @returns {*[]}
*/
getDisplayAttributes: function () {
if (!this.displayedRecord()) {
return [];
}
return [
{
name: 'Dimensions',
value: this.displayedRecord().width + ' x ' + this.displayedRecord().height + ' px'
},
{
name: 'File type',
value: this.displayedRecord()['content_type'].toUpperCase()
},
{
name: 'Category',
value: this.displayedRecord().category.name || 'None'
},
{
name: 'File #',
value: this.displayedRecord().id
}
];
},
/**
* Reload Adobe grid after deleting image
*/
reloadAdobeGrid: function () {
this.actions().source().reload({
refresh: true
});
}
});
});

View File

@ -1,141 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'underscore',
'Magento_Ui/js/grid/columns/overlay',
'Magento_AdobeStockImageAdminUi/js/action/getLicenseStatus'
], function ($, _, overlay, getLicenseStatus) {
'use strict';
return overlay.extend({
defaults: {
// eslint-disable-next-line max-len
provider: 'name = adobe_stock_images_listing.adobe_stock_images_listing_data_source, ns = adobe_stock_images_listing',
loginProvider: 'name = adobe-login, ns = adobe-login',
getImagesUrl: 'adobe_stock/license/getlist',
licensed: {},
modules: {
login: '${ $.loginProvider }'
},
listens: {
'${ $.provider }:data.items': 'handleItemsUpdate',
'${ $.loginProvider }:user': 'handleUserUpdate'
},
imports: {
rows: '${ $.provider }:data.items'
}
},
/**
* Init observable variables
* @return {Object}
*/
initObservable: function () {
this._super()
.observe([
'licensed'
]);
return this;
},
/**
* Updates the licensed data when items data is updated.
*
* @param {Array} items
*/
handleItemsUpdate: function (items) {
var ids = this.getIds(items);
this.updateLicensed(ids);
},
/**
* Updates the licensed data when user data is updated.
*/
handleUserUpdate: function () {
var ids = this.getIds(this.rows);
this.updateLicensed(ids);
},
/**
* Set Licensed images data.
*
* @param {Array} ids
*/
updateLicensed: function (ids) {
if (!this.isUserAuthorized() || ids.length === 0) {
this.licensed({});
return;
}
getLicenseStatus(this.getImagesUrl, ids).then(function (licensed) {
this.licensed(licensed);
}.bind(this));
},
/**
* Checks if user is logged in and authorized
*
* @returns {Boolean}
*/
isUserAuthorized: function () {
return !_.isUndefined(this.login()) && this.login().user().isAuthorized;
},
/**
* Get all ids from items array
*
* @param {Array} items
* @returns {Number[]}
*/
getIds: function (items) {
var ids = [];
items.forEach(function (record) {
ids.push(record.id);
});
return ids;
},
/**
* Returns top displacement of overlay according to image height
*
* @param {Object} record - Data to be preprocessed.
* @returns {Object}
*/
getStyles: function (record) {
var height = record.styles().height.replace('px', '') - 40;
return {
top: height + 'px'
};
},
/**
* If overlay should be visible
*
* @param {Object} row
* @returns {Boolean}
*/
isVisible: function (row) {
return this.licensed()[row.id];
},
/**
* Get overlay label
*
* @param {Object} row
* @returns {String}
*/
getLabel: function (row) {
return this.licensed()[row.id] ? 'Licensed' : '';
}
});
});

View File

@ -1,590 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'uiComponent',
'uiRegistry',
'jquery',
'underscore',
'Magento_AdobeStockImageAdminUi/js/action/save',
'Magento_AdobeStockImageAdminUi/js/action/savePreview',
'Magento_AdobeStockImageAdminUi/js/action/saveLicensed',
'Magento_AdobeStockImageAdminUi/js/action/licenseAndSave',
'Magento_AdobeStockImageAdminUi/js/action/confirmQuota',
'Magento_AdobeStockImageAdminUi/js/media-gallery',
'Magento_AdobeStockImageAdminUi/js/confirmation/buyCredits',
'Magento_AdobeStockImageAdminUi/js/action/getLicenseStatus',
'Magento_Ui/js/modal/alert'
], function (
Component,
uiRegistry,
$,
_,
saveAction,
savePreviewAction,
saveLicensedAction,
licenseAndSaveAction,
confirmQuotaAction,
mediaGallery,
buyCreditsConfirmation,
getLicenseStatus,
uiAlert
) {
'use strict';
return Component.extend({
defaults: {
template: 'Magento_AdobeStockImageAdminUi/grid/column/preview/actions',
loginProvider: 'name = adobe-login, ns = adobe-login',
mediaGallerySelector: '.media-gallery-modal:has(#search_adobe_stock)',
adobeStockModalSelector: '.adobe-search-images-modal',
downloadImagePreviewUrl: 'adobe_stock/preview/download',
licenseAndDownloadUrl: 'adobe_stock/license/license',
saveLicensedAndDownloadUrl: 'adobe_stock/license/saveLicensed',
buyCreditsUrl: 'https://stock.adobe.com/',
messageDelay: 5,
mediaGallery: '',
imageItems: [],
messages: [],
listens: {
'${ $.provider }:data.items': 'updateActions'
},
modules: {
login: '${ $.loginProvider }',
preview: '${ $.parentName }.preview',
overlay: '${ $.parentName }.overlay',
source: '${ $.provider }',
imageDirectory: '${ $.mediaGalleryName }',
mediaGallerySortBy: '${ $.mediaGallerySortBy }',
mediaGallerySearchInput: '${ $.mediaGallerySearchInput }',
mediaGalleryListingFilters: '${ $.mediaGalleryListingFilters }',
listingPaging: '${ $.listingPaging }'
},
imports: {
imageItems: '${ $.mediaGalleryProvider }:data.items'
}
},
/**
* Init observable variables
*
* @return {Object}
*/
initObservable: function () {
this._super()
.observe([
'imageItems',
'messages'
]);
return this;
},
/**
* Update displayed record data on data source update
*/
updateActions: function () {
var displayedRecord = this.preview().displayedRecord(),
updatedDisplayedRecord = this.preview().displayedRecord(),
records = this.source().data.items,
index;
if (typeof displayedRecord.id === 'undefined') {
return;
}
for (index = 0; index < records.length; index++) {
if (records[index].id === displayedRecord.id) {
updatedDisplayedRecord = records[index];
break;
}
}
this.preview().displayedRecord(updatedDisplayedRecord);
},
/**
* Returns is_downloaded flag as observable for given record
*
* @returns {observable}
*/
isDownloaded: function () {
return this.preview().displayedRecord()['is_downloaded'];
},
/**
* Is asset licensed in adobe stock in context of currently logged in account
*
* @returns {observable}
*/
isLicensed: function () {
return this.overlay().licensed()[this.preview().displayedRecord().id] && !this.isLicensedLocally();
},
/**
* Is licensed version of asset saved locally
*
* @returns {observable}
*/
isLicensedLocally: function () {
return this.preview().displayedRecord()['is_licensed_locally'];
},
/**
* Locate downloaded image in media browser
*/
openInMediaGalleryClick: function () {
this.preview().getAdobeModal().trigger('closeModal');
if (!this.isMediaBrowser()) {
this.selectImageInNewMediaGalleryBySearch(this.preview().displayedRecord().id);
} else {
this.selectDisplayedImageForOldMediaGallery(this.preview().displayedRecord().path);
}
},
/**
* Return adobe stock asset by adobe id
*
* @param {String} adobeId
*/
getAssetDetails: function (adobeId) {
return $.ajax({
url: this.getMediaGalleryAsset,
data: {
'adobe_id': adobeId
},
context: this,
showLoader: true
});
},
/**
* Select image in new media gallery via search input
*
* @param {String} imageId
*/
selectImageInNewMediaGalleryBySearch: function (imageId) {
var path;
this.mediaGalleryListingFilters().clear();
this.getAssetDetails(imageId).then(function (assetDetails) {
if (assetDetails.length === 0) {
return;
}
this.mediaGallerySearchInput().apply(assetDetails.title);
path = assetDetails.path;
path = path.substring(0, path.lastIndexOf('/'));
if (path !== '') {
this.imageDirectory().locateNode(path);
}
this.selectRecordFromMediaGalleryProvider(assetDetails.path);
}.bind(this));
},
/**
* Open recently saved image and go to first page
*/
openNewestImage: function () {
this.listingPaging().goFirst();
this.mediaGallerySortBy().selectDefaultOption();
},
/**
* Selects displayed image in media gallery for old gallery
*/
selectDisplayedImageForOldMediaGallery: function (path) {
var image = mediaGallery.locate(path);
image ? image.trigger('click') : mediaGallery.notLocated();
},
/**
* Select record by image file name
*
* @param {String} path
*/
selectRecordFromMediaGalleryProvider: function (path) {
var subscription;
subscription = this.imageItems.subscribe(function (items) {
subscription.dispose();
items.each(function (item) {
if (item.path === path) {
this.selectRecord(item);
return false;
}
}.bind(this));
}.bind(this));
setTimeout(function () {
subscription.dispose();
}, 1500);
},
/**
* Set the record as selected
*
* @param {Object} record
*/
selectRecord: function (record) {
uiRegistry.get('name =' + this.mediaGallery).select(record);
},
/**
* Save preview click handler
*/
savePreviewClick: function () {
var record = this.preview().displayedRecord();
savePreviewAction(
this.preview().downloadImagePreviewUrl,
record.id,
record.title,
record['content_type'],
this.getDestinationDirectoryPath()
).then(function (destinationPath) {
this.updateDownloadedDisplayedRecord(destinationPath);
this.reloadGrid().done(function () {
this.openInMediaGalleryClick();
}.bind(this));
}.bind(this)).fail(function (error) {
if (error) {
this.showErrorMessage(error);
}
}.bind(this));
},
/**
* Update displayed record after downloading
*
* @param {String} path
*/
updateDownloadedDisplayedRecord: function (path) {
var record = this.preview().displayedRecord();
record['is_downloaded'] = 1;
if (record.path === '') {
record.path = path;
}
this.preview().displayedRecord(record);
},
/**
* Update displayed record after licensing
*
* @param {String} path
*/
updateLicensedDisplayedRecord: function (path) {
var record = this.preview().displayedRecord();
record['is_downloaded'] = 1;
if (record.path === '') {
record.path = path;
}
record['is_licensed'] = 1;
record['is_licensed_locally'] = 1;
this.preview().displayedRecord(record);
},
/**
* Get image destination path
*
* @param {String} fileName
* @param {String} contentType
* @returns {String}
*/
getDestinationPath: function (fileName, contentType) {
return this.getDestinationDirectoryPath() + '/' + fileName + '.' + this.getImageExtension(contentType);
},
/**
* Get destination directory path
*
* @returns {String}
*/
getDestinationDirectoryPath: function () {
var activeNodePath,
activeNode;
if (this.isMediaBrowser()) {
activeNode = this.getMageMediaBrowserData().activeNode;
activeNodePath = _.isUndefined(activeNode.original.path) ? '' : activeNode.original.path;
} else {
activeNodePath = this.imageDirectory().activeNode() || '';
}
return activeNodePath;
},
/**
* Reload grid
*
* @returns {*}
*/
reloadGrid: function () {
var provider,
dataStorage;
if (this.isMediaBrowser()) {
return this.getMageMediaBrowserData().reload();
}
provider = uiRegistry.get('index = media_gallery_listing_data_source'),
dataStorage = provider.storage();
dataStorage.clearRequests();
return provider.reload();
},
/**
* Get data for media browser
*
* @returns {Undefined|Object}
*/
getMageMediaBrowserData: function () {
return $(this.preview().mediaGallerySelector).data('mageMediabrowser');
},
/**
* Is the media browser used in the content of the grid
*
* @returns {Boolean}
*/
isMediaBrowser: function () {
return typeof this.getMageMediaBrowserData() !== 'undefined';
},
/**
* Generate meaningful name image file,
* allow only alphanumerics, dashes, and underscores
*
* @param {String} title
* @param {Number} id
* @return string
*/
generateImageName: function (title, id) {
var fileName = title.substring(0, 32)
.replace(/[^a-zA-Z0-9_]/g, '-')
.replace(/-{2,}/g, '-')
.toLowerCase();
/* If the filename does not contain latin chars, use ID as a filename */
return fileName === '-' ? id : fileName;
},
/**
* Get image file extension
*
* @param {String} contentType
* @return string
*/
getImageExtension: function (contentType) {
return contentType.match(/[^/]{1,4}$/);
},
/**
* Get messages
*
* @return {Array}
*/
getMessages: function () {
return this.messages();
},
/**
* License click handler
*/
licenseClick: function () {
var record = this.preview().displayedRecord();
this.licenseProcess(
record.id,
record.title,
record.path,
record['content_type'],
this.isDownloaded()
).then(function (destinationPath) {
this.updateLicensedDisplayedRecord(destinationPath);
this.login().getUserQuota();
this.reloadGrid().done(function () {
this.openInMediaGalleryClick();
}.bind(this));
}.bind(this)).fail(function (error) {
if (error) {
uiAlert({
content: error
});
}
});
},
/**
* Process of license
*
* @param {Number} id
* @param {String} title
* @param {String} path
* @param {String} contentType
* @param {Boolean} isDownloaded
* @return {window.Promise}
*/
licenseProcess: function (id, title, path, contentType, isDownloaded) {
var deferred = $.Deferred();
this.login().login()
.then(function () {
getLicenseStatus(
this.overlay().getImagesUrl,
[id]
).then(function (licensedInfo) {
var isLicensed = licensedInfo[id] || false;
if (isLicensed) {
saveLicensedAction(
this.preview().saveLicensedAndDownloadUrl,
id,
title,
path,
contentType,
this.getDestinationDirectoryPath()
).then(function (destinationPath) {
deferred.resolve(destinationPath);
}).fail(function (error) {
deferred.reject(error);
});
} else {
confirmQuotaAction(this.preview().confirmationUrl, id).then(function (data) {
if (data.canLicense === false) {
buyCreditsConfirmation(
this.preview().buyCreditsUrl,
title,
data.message
);
} else {
licenseAndSaveAction(
this.preview().licenseAndDownloadUrl,
id,
title,
path,
contentType,
isDownloaded,
data.message,
this.getDestinationDirectoryPath()
).then(function (destinationPath) {
deferred.resolve(destinationPath);
}).fail(function (error) {
deferred.reject(error);
});
}
}.bind(this)).fail(function (error) {
deferred.reject(error);
});
}
}.bind(this)).fail(function (error) {
deferred.reject(error);
});
}.bind(this)).fail(function (error) {
deferred.reject(error);
});
return deferred.promise();
},
/**
* Save licensed click handler
*/
saveLicensedClick: function () {
var record = this.preview().displayedRecord();
if (!this.login().user().isAuthorized) {
return;
}
if (!this.isLicensed()) {
return;
}
saveLicensedAction(
this.preview().saveLicensedAndDownloadUrl,
record.id,
record.title,
record.path,
record['content_type'],
this.getDestinationDirectoryPath()
).then(function (destinationPath) {
this.updateLicensedDisplayedRecord(destinationPath);
this.login().getUserQuota();
this.reloadGrid().done(function () {
this.openInMediaGalleryClick();
}.bind(this));
}.bind(this)).fail(function (error) {
if (error) {
uiAlert({
content: error
});
}
});
},
/**
* Returns license button title depending on the existing saved preview
*
* @returns {String}
*/
getLicenseButtonTitle: function () {
return this.isDownloaded() ? $.mage.__('License') : $.mage.__('License and Save');
},
/**
* Extracts image name from its path
*
* @param {String} path
* @returns {String}
*/
getImageNameFromPath: function (path) {
var filePathArray = path.split('/'),
imageIndex = filePathArray.length - 1;
return filePathArray[imageIndex].substring(0, filePathArray[imageIndex].lastIndexOf('.'));
},
/**
* Show error message and schedule cleanup
*
* @param {String} message
*/
showErrorMessage: function (message) {
this.messages.push({
code: 'error',
messageUnsanitizedHtml: message
});
this.messagesCleanup();
},
/**
* Messages cleanup
*/
messagesCleanup: function () {
// eslint-disable-next-line no-unused-vars
var timerId;
// eslint-disable-next-line no-unused-vars
timerId = setTimeout(function () {
clearTimeout(timerId);
this.messages.removeAll();
}.bind(this), Number(this.messageDelay) * 1000);
}
});
});

View File

@ -1,80 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'uiComponent',
'underscore'
], function (Component, _) {
'use strict';
return Component.extend({
defaults: {
template: 'Magento_AdobeStockImageAdminUi/grid/column/preview/keywords',
chipsProvider: 'componentType = filtersChips, ns = ${ $.ns }',
defaultKeywordsLimit: 5,
keywordsLimit: 5,
canViewMoreKeywords: true,
modules: {
chips: '${ $.chipsProvider }',
preview: '${ $.parentName }.preview'
}
},
/**
* Init observable variables
* @return {Object}
*/
initObservable: function () {
this._super()
.observe([
'keywordsLimit',
'canViewMoreKeywords'
]);
return this;
},
/**
* Returns keywords to display under the attributes image
*
* @returns {*[]}
*/
getKeywords: function (record) {
return record.keywords;
},
/**
* Returns keywords limit to show no of keywords
*/
getKeywordsLimit: function () {
return this.keywordsLimit();
},
/**
* Show all the related keywords
*/
viewAllKeywords: function (record) {
this.keywordsLimit(record.keywords.length);
this.canViewMoreKeywords(false);
this.preview().updateHeight();
this.preview().scrollToPreview();
},
/**
* Hide all the related keywords
*/
hideAllKeywords: function () {
this.keywordsLimit(this.defaultKeywordsLimit);
this.canViewMoreKeywords(true);
},
/**
* Drop all filters and initiate search on keyword click event
*/
searchByKeyWord: function (keyword) {
_.invoke(this.chips().elems(), 'clear');
_.invoke(this.chips().elems(), 'apply', keyword);
}
});
});

View File

@ -1,410 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'uiComponent',
'underscore',
'jquery'
], function (Component, _, $) {
'use strict';
return Component.extend({
defaults: {
template: 'Magento_AdobeStockImageAdminUi/grid/column/preview/related',
filterChipsProvider: 'componentType = filters, ns = ${ $.ns }',
filterBookmarksSelector: '.admin__data-grid-action-bookmarks',
tabImagesLimit: 4,
tabsContainerId: '#adobe-stock-tabs',
serieFilterValue: '',
modelFilterValue: '',
selectedTab: null,
loader: false,
relatedImages: {
series: {},
model: {}
},
statefull: {
serieFilterValue: true,
modelFilterValue: true
},
modules: {
chips: '${ $.chipsProvider }',
filterChips: '${ $.filterChipsProvider }',
preview: '${ $.parentName }.preview'
},
exports: {
serieFilterValue: '${ $.provider }:params.filters.serie_id',
modelFilterValue: '${ $.provider }:params.filters.model_id'
}
},
/**
* Initializes related component.
*/
initialize: function () {
this._super();
this.filterChips().updateActive();
return this;
},
/**
* Disable keydown event for related content tabs
*/
disableTabsKeyDownEvent: function () {
if ($(this.tabsContainerId + ' li[role=tab]').length === 0) {
setTimeout(function () {
this.disableTabsKeyDownEvent();
}.bind(this), 100);
} else {
$(this.tabsContainerId + ' li[role=tab]').off('keydown');
}
},
/**
* Init observable variables
* @return {Object}
*/
initObservable: function () {
this._super()
.observe([
'serieFilterValue',
'modelFilterValue',
'selectedTab',
'relatedImages',
'loader'
]);
return this;
},
/**
* Check if visible container
*
* @param {Object} record
* @returns boolean
*/
isVisible: function (record) {
return this.showSeriesTab(record) && this.showModelTab(record);
},
/**
* Get image related image series.s
*
* @param {Object} record
*/
loadRelatedImages: function (record) {
var series = this.getSeries(record),
model = this.getModel(record);
if (series && series.length ||
model && model.length
) {
return;
}
$.ajax({
type: 'GET',
url: this.preview().relatedImagesUrl,
dataType: 'json',
beforeSend: function () {
this.loader(true);
}.bind(this),
data: {
'image_id': record.id,
'limit': this.tabImagesLimit
}
}).done(function (data) {
var relatedImages = this.relatedImages();
this.loader(false);
relatedImages.series[record.id] = data.result['same_series'];
relatedImages.model[record.id] = data.result['same_model'];
this.relatedImages(relatedImages);
this.preview().updateHeight();
/* Switch to the model tab if the series tab is hidden */
if (relatedImages.series[record.id].length === 0 && relatedImages.model[record.id].length > 0) {
// eslint-disable-next-line jquery-no-input-event-shorthand
$('#adobe-stock-tabs').data().mageTabs.select(1);
}
}.bind(this));
},
/**
* Returns true if the series tab should be show, false otherwise
*
* @param {Object} record
* @returns boolean
*/
showSeriesTab: function (record) {
return typeof this.relatedImages().series[record.id] === 'undefined' ||
this.relatedImages().series[record.id].length !== 0;
},
/**
* Returns true if the model tab should be show, false otherwise
*
* @param {Object} record
* @returns boolean
*/
showModelTab: function (record) {
return typeof this.relatedImages().model[record.id] === 'undefined' ||
this.relatedImages().model[record.id].length !== 0;
},
/**
* Returns series to display under the image
*
* @param {Object} record
* @returns {*[]}
*/
getSeries: function (record) {
return this.relatedImages().series[record.id] || [];
},
/**
* Check if the number of related series image is greater than 4 or not
*
* @param {Object} record
* @returns boolean
*/
canShowMoreSeriesImages: function (record) {
return this.getSeries(record).length >= this.tabImagesLimit;
},
/**
* Returns model to display under the image
*
* @param {Object} record
* @returns {*[]}
*/
getModel: function (record) {
return this.relatedImages().model[record.id] || [];
},
/**
* Check if the number of related model image is greater than 4 or not
*
* @param {Object} record
* @returns boolean
*/
canShowMoreModelImages: function (record) {
return this.getModel(record).length >= this.tabImagesLimit;
},
/**
* Filter images from serie_id
*
* @param {Object} record
*/
seeMoreFromSeries: function (record) {
if (this.isSerieFilterApplied(record)) {
this.scrollToFilter();
return;
}
this.serieFilterValue(record.id);
this.applyFilter('serie_id', record.id.toString());
},
/**
* Filter images from serie_id
*
* @param {Object} record
*/
seeMoreFromModel: function (record) {
if (this.isModelFilterApplied(record)) {
this.scrollToFilter();
return;
}
this.modelFilterValue(record.id);
this.applyFilter('model_id', record.id.toString());
},
/**
* Apply series or model id filter and scroll to top of the page
*
* @param {String} typeId
* @param {String} recordId
*/
applyFilter: function (typeId, recordId) {
var data = {};
data[typeId] = recordId;
this.filterChips().clear();
this.filterChips().setData(data, true);
this.filterChips().apply();
this.scrollToFilter();
},
/**
* Checks if the filter is applied
*
* @param {Object} record
* @returns {Boolean}
*/
isSerieFilterApplied: function (record) {
return this.filterChips().get('applied')['serie_id'] === record.id.toString();
},
/**
* Checks if the filter is applied
*
* @param {Object} record
* @returns {Boolean}
*/
isModelFilterApplied: function (record) {
return this.filterChips().get('applied')['model_id'] === record.id.toString();
},
/**
* Scrolls user window to the filter bookmarks
*/
scrollToFilter: function () {
$(this.preview().adobeStockModalSelector + ' ' + this.filterBookmarksSelector).get(0).scrollIntoView({
behavior: 'smooth',
block: 'center',
inline: 'nearest'
});
},
/**
* Next related image preview
*
* @param {Object} record
*/
nextRelated: function (record) {
var relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record),
nextRelatedIndex = _.findLastIndex(
relatedList,
{
id: this.preview().displayedRecord().id
}
) + 1,
nextRelated = relatedList[nextRelatedIndex];
if (typeof nextRelated === 'undefined') {
return;
}
this.switchImagePreviewToRelatedImage(nextRelated);
},
/**
* Previous related preview
*
* @param {Object} record
*/
prevRelated: function (record) {
var relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record),
prevRelatedIndex = _.findLastIndex(
relatedList,
{
id: this.preview().displayedRecord().id
}
) - 1,
prevRelated = relatedList[prevRelatedIndex];
if (typeof prevRelated === 'undefined') {
return;
}
this.switchImagePreviewToRelatedImage(prevRelated);
},
/**
* Get previous button disabled
*
* @param {Object} record
*
* @return {Boolean}
*/
cannotViewPrevious: function (record) {
var relatedList, prevRelatedIndex, prevRelated;
if (!this.selectedTab()) {
return false;
}
relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record);
prevRelatedIndex = _.findLastIndex(
relatedList,
{
id: this.preview().displayedRecord().id
}
) - 1;
prevRelated = relatedList[prevRelatedIndex];
return typeof prevRelated === 'undefined';
},
/**
* Get next button disabled
*
* @param {Object} record
*
* @return {Boolean}
*/
cannotViewNext: function (record) {
var relatedList, nextRelatedIndex, nextRelated;
if (!this.selectedTab()) {
return false;
}
relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record);
nextRelatedIndex = _.findLastIndex(
relatedList,
{
id: this.preview().displayedRecord().id
}
) + 1;
nextRelated = relatedList[nextRelatedIndex];
return typeof nextRelated === 'undefined';
},
/**
* Switch image preview to related image
*
* @param {Object|null} relatedImage
*/
switchImagePreviewToRelatedImage: function (relatedImage) {
if (!relatedImage) {
this.selectedTab(null);
return;
}
if (this.preview().displayedRecord().id === relatedImage.id) {
return;
}
this.preview().showRelated(relatedImage);
},
/**
* Switch image preview to series image
*
* @param {Object} record
*/
switchImagePreviewToSeriesImage: function (record) {
this.selectedTab('series');
this.switchImagePreviewToRelatedImage(record);
},
/**
* Switch image preview to model image
*
* @param {Object} record
*/
switchImagePreviewToModelImage: function (record) {
this.selectedTab('model');
this.switchImagePreviewToRelatedImage(record);
}
});
});

View File

@ -1,49 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_Ui/js/grid/paging/sizes',
'underscore'
], function (Sizes, _) {
'use strict';
return Sizes.extend({
defaults: {
value: 32,
minSize: 1,
maxSize: 64
},
exports: {
value: '${ $.provider }:params.paging.page',
options: '${ $.provider }:params.paging.options'
},
sizes: {
'32': {
value: 32,
label: 32
},
'48': {
value: 48,
label: 48
},
'64': {
value: 64,
label: 64
}
},
/**
* @inheritdoc
*/
updateArray: function () {
if (_.isUndefined(this.options)) {
this.options = this.sizes;
}
return this._super();
}
});
});

View File

@ -1,43 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Ui/js/modal/confirm'
], function ($, confirm) {
'use strict';
return function (buyCreditsUrl, recordTitle, quotaMessage) {
var confirmationContent = $.mage.__('License "' + recordTitle + '"'),
content = '<p>' + confirmationContent + '</p><p><b>' + quotaMessage + '</b></p><br>';
confirm({
title: $.mage.__('License Adobe Stock Images?'),
content: content,
buttons: [{
text: $.mage.__('Cancel'),
class: 'action-secondary action-dismiss',
/**
* Close modal
*/
click: function () {
this.closeModal();
}
},{
text: $.mage.__('Buy Credits'),
class: 'action-primary action-accept',
/**
* Close modal
*/
click: function () {
window.open(buyCreditsUrl);
this.closeModal();
}
}]
});
};
});

View File

@ -1,82 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Ui/js/modal/prompt',
'text!Magento_AdobeStockImageAdminUi/template/modal/adobe-modal-prompt-content.html'
], function ($, prompt, adobePromptContentTmpl) {
'use strict';
return function (recordTitle, quotaMessage, isPreviewDownloaded, proposedfileName, fileExtension) {
var confirmationContent = $.mage.__('License "' + recordTitle + '"'),
deferred = $.Deferred(),
displayFieldName = !isPreviewDownloaded ? '<b>' + $.mage.__('File Name') + '</b>' : '',
content = '<p>' + confirmationContent + '</p><p><b>' + quotaMessage + '</b></p><br>' + displayFieldName,
data = {
'title': $.mage.__('License Adobe Stock Images?'),
'content': content,
'visible': !isPreviewDownloaded,
'actions': {
/**
* Confirm action
*
* @param {String} fileName
*/
confirm: function (fileName) {
deferred.resolve(fileName);
}
},
'buttons': [{
text: $.mage.__('Cancel'),
class: 'action-secondary action-dismiss',
/**
* Close modal
*/
click: function () {
this.closeModal();
deferred.reject();
}
}, {
text: $.mage.__('Confirm'),
class: 'action-primary action-accept'
}]
};
prompt({
title: data.title,
content: data.content,
value: proposedfileName,
imageExtension: fileExtension,
visible: data.visible,
promptContentTmpl: adobePromptContentTmpl,
modalClass: 'adobe-stock-save-preview-prompt',
validation: true,
promptField: '[data-role="adobe-stock-image-name-field"]',
validationRules: ['required-entry', 'validate-image-name'],
attributesForm: {
novalidate: 'novalidate',
action: '',
onkeydown: 'return event.key != \'Enter\';'
},
attributesField: {
name: 'name',
'data-validate': '{required:true}',
maxlength: '128'
},
context: this,
actions: data.actions,
buttons: data.buttons
});
if (!data.visible) {
$('.adobe-stock-save-preview-prompt').trigger('focus');
}
return deferred.promise();
};
});

View File

@ -1,75 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Ui/js/modal/prompt',
'text!Magento_AdobeStockImageAdminUi/template/modal/adobe-modal-prompt-content.html'
], function ($, prompt, adobePromptContentTmpl) {
'use strict';
return function (proposedfileName, fileExtension) {
var deferred = $.Deferred(),
data = {
'title': $.mage.__('Save Preview'),
'content': $.mage.__('File Name'),
'visible': true,
'actions': {
/**
* Resolve with the specified file name
*
* @param {String} specifiedFileName
*/
confirm: function (specifiedFileName) {
deferred.resolve(specifiedFileName);
}
},
'buttons': [{
text: $.mage.__('Cancel'),
class: 'action-secondary action-dismiss',
/**
* Close modal on button click
*/
click: function () {
this.closeModal();
deferred.reject();
}
}, {
text: $.mage.__('Confirm'),
class: 'action-primary action-accept'
}]
};
prompt({
title: data.title,
content: data.content,
value: proposedfileName,
imageExtension: fileExtension,
visible: data.visible,
promptContentTmpl: adobePromptContentTmpl,
modalClass: 'adobe-stock-save-preview-prompt',
validation: true,
promptField: '[data-role="adobe-stock-image-name-field"]',
validationRules: ['required-entry', 'validate-image-name'],
attributesForm: {
novalidate: 'novalidate',
action: '',
onkeydown: 'return event.key != \'Enter\';'
},
attributesField: {
name: 'name',
'data-validate': '{required:true}',
maxlength: '128'
},
context: this,
actions: data.actions,
buttons: data.buttons
});
return deferred.promise();
};
});

View File

@ -1,77 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Ui/js/modal/prompt',
'text!Magento_AdobeStockImageAdminUi/template/modal/adobe-modal-prompt-content.html'
], function ($, prompt, adobePromptContentTmpl) {
'use strict';
return function (proposedfileName, fileExtension) {
var deferred = $.Deferred(),
data = {
'title': $.mage.__('Save'),
'content': $.mage.__('File Name'),
'visible': true,
'actions': {
/**
* Resolve with the specified file name
*
* @param {String} fileName
*/
confirm: function (fileName) {
deferred.resolve(fileName);
}
},
'buttons': [
{
text: $.mage.__('Cancel'),
class: 'action-secondary action-dismiss',
/**
* Close modal on button click
*/
click: function () {
this.closeModal();
deferred.reject();
}
},
{
text: $.mage.__('Confirm'),
class: 'action-primary action-accept'
}
]
};
prompt({
title: data.title,
content: data.content,
value: proposedfileName,
imageExtension: fileExtension,
visible: data.visible,
promptContentTmpl: adobePromptContentTmpl,
modalClass: 'adobe-stock-save-preview-prompt',
validation: true,
promptField: '[data-role="adobe-stock-image-name-field"]',
validationRules: ['required-entry', 'validate-image-name'],
attributesForm: {
novalidate: 'novalidate',
action: '',
onkeydown: 'return event.key != \'Enter\';'
},
attributesField: {
name: 'name',
'data-validate': '{required:true}',
maxlength: '128'
},
context: this,
actions: data.actions,
buttons: data.buttons
});
return deferred.promise();
};
});

View File

@ -1,120 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/* global Base64 */
define([
'jquery',
'Magento_Ui/js/modal/confirm'
], function ($, confirm) {
'use strict';
return {
jsTreeRootFolderId: 'root',
jsTreeFolderNameMaxLength: 20,
/**
* Locate downloaded image in media browser
*
* @param {String} path
*/
locate: function (path) {
var imageFolder = this.selectFolder(path),
imageFilename = path.substring(path.lastIndexOf('/') + 1),
locatedImage;
if (imageFolder.length) {
locatedImage = $('div[data-row="file"]:has(img[alt=\"' + imageFilename + '\"])');
return locatedImage.length ? locatedImage : false;
}
$.ajaxSetup({
async: true
});
},
/**
* Select folder
*
* @param {String} path
*/
selectFolder: function (path) {
var imageFolder,
pathId,
imagePath = path.replace(/^\/+/, ''),
folderPathParts = imagePath.split('/').slice(0, -1);
$.ajaxSetup({
async: false
});
if (folderPathParts.length > 1) {
this.openFolderTree(folderPathParts);
}
pathId = Base64.idEncode(folderPathParts.join('/'));
imageFolder = $('.jstree li[data-id="' + pathId + '"]').children('a');
if (!imageFolder.length) {
imageFolder = $('.jstree li[data-id="' + this.jsTreeRootFolderId + '"]')
.children('a');
}
if (imageFolder.length) {
imageFolder[0].click();
}
return imageFolder;
},
/**
* Show popup that image cannot be located
*/
notLocated: function () {
confirm({
title: $.mage.__('The image cannot be located'),
content: $.mage.__('We cannot find this image in the media gallery.'),
buttons: [{
text: $.mage.__('Ok'),
class: 'action-primary',
attr: {},
/**
* Close modal on button click
*/
click: function (event) {
this.closeModal(event);
}
}]
});
},
/**
* Open folder Tree
*
* @param {Array} folderPathParts
*/
openFolderTree: function (folderPathParts) {
var i,
pathId,
openFolderButton,
folderPath = '';
for (i = 0; i < folderPathParts.length - 1; i++) {
if (folderPath === '') {
folderPath = folderPathParts[i];
} else {
folderPath = folderPath + '/' + folderPathParts[i];
}
pathId = Base64.idEncode(folderPath);
openFolderButton = $('.jstree li[data-id="' + pathId + '"].jstree-closed').children('.jstree-icon');
if (openFolderButton.length) {
openFolderButton.click();
}
}
}
};
});

View File

@ -1,109 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'underscore',
'Magento_MediaGalleryUi/js/grid/columns/image/actions',
'Magento_MediaGalleryUi/js/action/getDetails',
'mage/translate'
], function ($, _, Action, getDetails) {
'use strict';
return Action.extend({
defaults: {
template: 'Magento_AdobeStockImageAdminUi/mediaGallery/grid/columns/image/licenseActions',
licenseAction: {
name: 'license',
title: $.mage.__('License'),
handler: 'licenseImageAction'
},
modules: {
image: '${ $.imageComponent }'
}
},
/**
* Initialize the component
*
* @returns {Object}
*/
initialize: function () {
this._super();
this.actionsList.push(this.licenseAction);
return this;
},
/**
* Init observable variables
*
* @return {Object}
*/
initObservable: function () {
this._super()
.observe([
'visible'
]);
return this;
},
/**
* License image
*
* @param {Object} record
*/
licenseImageAction: function (record) {
this.getImageRecord(record.id);
},
/**
* Check if image licensed
*
* @param {Object} record
* @param {Object} name
*/
isVisible: function (record, name) {
if (name === this.licenseAction.name) {
if (_.isUndefined(record.overlay) || record.overlay === '') {
return false;
}
return true;
}
return true;
},
/**
* Get image record and start license process
*
* @param {Number} imageId
*/
getImageRecord: function (imageId) {
getDetails(this.imageDetailsUrl, [imageId]).then(function (imageDetails) {
var id = imageDetails[imageId]['adobe_stock'][0].value;
this.image().actions().licenseProcess(
id,
imageDetails[imageId].title,
imageDetails[imageId].path,
imageDetails[imageId]['content_type'],
true
).then(function () {
this.image().actions().login().getUserQuota();
this.imageModel().reloadGrid();
this.imageModel().addMessage('success', $.mage.__('The image has been licensed.'));
}.bind(this)).fail(function (error) {
if (error) {
this.imageModel().addMessage('error', error);
}
}.bind(this));
}.bind(this)).fail(function (message) {
this.imageModel().addMessage('error', message);
}.bind(this));
}
});
});

View File

@ -1,23 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_MediaGalleryUi/js/grid/columns/image'
], function (Image) {
'use strict';
return Image.extend({
defaults: {
viewConfig: [
{
component: 'Magento_AdobeStockImageAdminUi/js/mediaGallery/grid/columns/image/licenseActions',
name: '${ $.name }_actions',
imageModelName: '${ $.name }',
imageDetailsUrl: '${ $.imageDetailsurl }',
imageComponent: '${ $.imageComponent }'
}
]
}
});
});

View File

@ -1,59 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'uiElement',
'jquery',
'mage/translate'
], function (Element, $, $t) {
'use strict';
return Element.extend({
defaults: {
containerId: '#adobe-stock-images-search-modal',
masonryComponentPath: 'adobe_stock_images_listing.adobe_stock_images_listing.adobe_stock_images_columns',
dataSourcePath: 'adobe_stock_images_listing.adobe_stock_images_listing_data_source',
modules: {
masonry: '${ $.masonryComponentPath }',
source: '${ $.dataSourcePath }'
}
},
/**
* Init component
*
* @return {exports}
*/
initialize: function () {
this._super();
$(this.containerId).modal({
type: 'slide',
buttons: [],
modalClass: 'adobe-stock-modal',
title: $t('Adobe Stock')
}).on('openModal', function () {
this.masonry().setLayoutStylesWhenLoaded();
}.bind(this));
try {
$(this.containerId).applyBindings();
} catch (e) {
//already bounded
}
$(window).on('fileDeleted.mediabrowser', this.reloadGrid.bind(this));
return this;
},
/**
* Update listing data
*/
reloadGrid: function () {
this.source().set('params.t', Date.now());
}
});
});

View File

@ -1,62 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([], function () {
'use strict';
return {
/**
* Extracts image name from its path
*
* @param {String} path
* @returns {String}
*/
getImageNameFromPath: function (path) {
var filePathArray = path.split('/'),
imageIndex = filePathArray.length - 1;
return filePathArray[imageIndex].substring(0, filePathArray[imageIndex].lastIndexOf('.'));
},
/**
* Generate meaningful name image file,
* allow only alphanumerics, dashes, and underscores
*
* @param {String} title
* @param {Number} id
* @return string
*/
generateImageName: function (title, id) {
var fileName = title.substring(0, 32)
.replace(/[^a-zA-Z0-9_]/g, '-')
.replace(/-{2,}/g, '-')
.toLowerCase();
/* If the filename does not contain latin chars, use ID as a filename */
return fileName === '-' ? id : fileName;
},
/**
* Get image file extension
*
* @param {String} contentType
* @return string
*/
getImageExtension: function (contentType) {
return contentType.match(/[^/]{1,4}$/);
},
/**
* Create path
*
* @param {String} directoryPath
* @param {String} fileName
* @param {String} contentType
* @returns {String}
*/
buildPath: function (directoryPath, fileName, contentType) {
return directoryPath + '/' + fileName + '.' + this.getImageExtension(contentType);
}
};
});

View File

@ -1,186 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_AdobeIms/js/signIn',
'Magento_AdobeIms/js/action/authorization',
'Magento_Ui/js/modal/confirm'
], function ($, signIn, auth, confirm) {
'use strict';
return signIn.extend({
defaults: {
userQuota: {},
// eslint-disable-next-line max-len
dataProvider: 'name = adobe_stock_images_listing.adobe_stock_images_listing_data_source, ns = adobe_stock_images_listing',
// eslint-disable-next-line max-len
previewProvider: 'name = adobe_stock_images_listing.adobe_stock_images_listing.adobe_stock_images_columns.preview, ns = adobe_stock_images_listing',
quotaUrl: 'adobe_stock/license/quota',
modules: {
source: '${ $.dataProvider }',
preview: '${ $.previewProvider }'
}
},
/**
* @inheritdoc
*/
initObservable: function () {
this._super().observe(['userQuota']);
return this;
},
/**
* Login to Adobe
*
* @return {*}
*/
login: function () {
var deferred = $.Deferred();
if (this.user().isAuthorized) {
return deferred.resolve();
}
auth(this.loginConfig)
.then(function (response) {
this.loadUserProfile();
deferred.resolve(response);
}.bind(this))
.fail(function (error) {
deferred.reject(error);
});
return deferred.promise();
},
/**
* Login action with popup on error..
*/
loginClick: function () {
this.login().fail(function (error) {
this.showLoginErrorPopup(error);
}.bind(this));
},
/**
* Show popup that user failed to login.
*/
showLoginErrorPopup: function (error) {
confirm({
title: $.mage.__('Couldn\'t log you in'),
content: error,
buttons: [{
text: $.mage.__('Ok'),
class: 'action-primary action-accept'
}],
actions: {
/**
* Close modal
*/
confirm: function (event) {
this.closeModal(event);
}
}
});
},
/**
* Logout from adobe account
*/
logout: function () {
$.ajax({
type: 'POST',
url: this.logoutUrl,
data: {
'form_key': window.FORM_KEY
},
dataType: 'json',
context: this,
showLoader: true,
success: function () {
this.user({
isAuthorized: false,
name: '',
email: '',
image: this.defaultProfileImage
});
}.bind(this),
/**
* @param {Object} response
* @returns {String}
*/
error: function (response) {
return response.message;
}
});
},
/**
* Retrieves full user quota.
*/
getUserQuota: function () {
$.ajax({
type: 'GET',
url: this.quotaUrl,
dataType: 'json',
context: this,
/**
* @param {Object} response
* @returns void
*/
success: function (response) {
this.userQuota(response.result);
},
/**
* @param {Object} response
* @returns {String}
*/
error: function (response) {
return response.message;
}
});
},
/**
* @inheritdoc
*/
loadUserProfile: function () {
$.ajax({
type: 'GET',
url: this.profileUrl,
dataType: 'json',
context: this,
/**
* @param {Object} response
* @returns void
*/
success: function (response) {
this.user({
isAuthorized: true,
name: response.result.name,
email: response.result.email,
image: response.result.image
});
this.getUserQuota();
},
/**
* @param {Object} response
* @returns {String}
*/
error: function (response) {
return response.message;
}
});
}
});
});

View File

@ -1,18 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'mage/translate',
'jquery/validate'
], function ($, $t) {
'use strict';
$.validator.addMethod(
'validate-image-name', function (value) {
return /^[a-zA-Z0-9\-\_]+$/i.test(value);
}, $t('Please name the file using only letters, numbers, underscores and dashes'));
});

View File

@ -1,56 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="masonry-image-preview" if="$col.isVisible($row())" data-image-preview ko-style="$col.getStyles()">
<div class="container">
<div class="action-buttons preview-buttons">
<button class="action-previous" type="button" disable="$col.cannotViewPrevious($row())" click="$col.prev.bind($col, $row())">
<span translate="'Previous'"></span>
</button>
<button class="action-next" type="button" disable="$col.cannotViewNext($row())" click="$col.next.bind($col, $row())">
<span translate="'Next'"></span>
</button>
<button class="action-close" type="button" click="$col.hide.bind($col)">
<span translate="'Close'"></span>
</button>
</div>
<div class="preview-row-content">
<img class="preview" attr="src: $col.displayedRecord().thumbnail_500_url, alt: $col.displayedRecord().title">
<div class="info">
<h3 class="title" text="$col.displayedRecord().title" if="$col.displayedRecord().title"></h3>
<div class="author" if="$col.displayedRecord().creator_name">
<span translate="'By'"></span><span text="' ' + $col.displayedRecord().creator_name" ></span>
</div>
<div class="actions">
<scope args="actions">
<render args="getTemplate()" ></render>
</scope>
</div>
</div>
</div>
<div class="attributes" data-role="image-attributes-value">
<each args="$col.getDisplayAttributes()">
<div class="attribute">
<span class="title" translate="name"></span>
<div class="value">
<span text="value"></span>
</div>
</div>
</each>
</div>
<scope args="related">
<render args="getTemplate()"></render>
</scope>
<div class="keywords-container" ko-scope="keywords">
<render args="getTemplate()"></render>
</div>
</div>
</div>

View File

@ -1,9 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div if="$col.isVisible($row())" ko-style="$col.getStyles($row())" class="masonry-image-overlay">
<span text="$col.getLabel($row())"></span>
</div>

View File

@ -1,33 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<ul class="messages" if="getMessages().length > 0">
<each args="getMessages()">
<div class="messages">
<div attr="class: 'message message-'+code">
<div data-ui-id="messages-message-error">
<span html="messageUnsanitizedHtml"></span>
</div>
</div>
</div>
</each>
</ul>
<button class="action-secondary" type="button" visible="!isDownloaded() && !isLicensed()" click="function(){ savePreviewClick() }">
<span translate="'Save Preview'"></span>
</button>
<button class="action-secondary" type="button" visible="isDownloaded()" click="function(){ openInMediaGalleryClick() }">
<span translate="'Open in Media Gallery'"></span>
</button>
<button class="action-default primary"
type="button"
attr="title: getLicenseButtonTitle()"
visible="!isLicensedLocally() && !isLicensed()" click="function () { licenseClick(); }">
<span text="getLicenseButtonTitle()"></span>
</button>
<button class="action-default primary" type="button" visible="isLicensed()" click="function () { saveLicensedClick(); }">
<span translate="'Save Licensed'"></span>
</button>

View File

@ -1,19 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="keywords">
<div class="title" translate="'Similar Keywords'"></div>
<each args="getKeywords($col.displayedRecord())">
<div class="keyword" css="{ 'hide': $index() >= $parent.getKeywordsLimit()}">
<a href="" class="value" click="function(){ $parent.searchByKeyWord(name) }">
<span text="name"></span>
</a>
</div>
</each>
<button visible="canViewMoreKeywords" click="function(){ viewAllKeywords($col.displayedRecord()) }">
<span translate="'View all'"></span>
</button>
</div>

View File

@ -1,76 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div if="isVisible($row())"
class="related-container">
<div id="adobe-stock-tabs"
class="adobe-stock-tabs"
data-bind="mageInit: {
'mage/backend/tabs': {
destination: '#adobe-stock-tabs-content',
shadowTabs: [],
}
}" afterRender="disableTabsKeyDownEvent()">
<ul class="tabs-horiz">
<li if="showSeriesTab($row())">
<a id="series_tab" attr="'href': '#series_content_' + $row().id">
<span class="title" translate="'More from this series'"></span>
</a>
</li>
<li if="showModelTab($row())">
<a id="model_tab" attr="'href': '#model_content_' + $row().id">
<span class="title" translate="'More from this model'"></span>
</a>
</li>
</ul>
</div>
<div id="adobe-stock-tabs-content"
class="adobe-stock-related-images-tab-content">
<div class="spinner related-loader" visible="loader">
<span></span><span></span><span></span><span></span>
<span></span><span></span><span></span><span></span>
</div>
<div if="showSeriesTab($row())" attr="'id': 'series_content_' + $row().id">
<each args="getSeries($row())">
<div class="thumbnail" click="function(){ $parent.switchImagePreviewToSeriesImage($data) }">
<img attr="src: thumbnail_url, alt: title">
</div>
</each>
<if args="canShowMoreSeriesImages($row())">
<div class="see-more-wrapper" click="function(){ seeMoreFromSeries($row()) }">
<div class="see-more-content">
<div class="three-dots">
<span class="dots"></span>
<span class="dots"></span>
<span class="dots"></span>
</div>
<a href="" class="see-more">See more</a>
</div>
</div>
</if>
</div>
<div if="showModelTab($row())" attr="'id': 'model_content_' + $row().id">
<each args="getModel($row())">
<div class="thumbnail" click="function(){ $parent.switchImagePreviewToModelImage($data) }">
<img attr="src: thumbnail_url, alt: title">
</div>
</each>
<if args="canShowMoreModelImages($row())">
<div class="see-more-wrapper" click="function(){ seeMoreFromModel($row()) }">
<div class="see-more-content">
<div class="three-dots">
<span class="dots"></span>
<span class="dots"></span>
<span class="dots"></span>
</div>
<a href="" class="see-more">See more</a>
</div>
</div>
</if>
</div>
</div>
</div>

View File

@ -1,26 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="admin__field admin__adobe-stock-image-checkbox" visible="visible" css="$data.additionalClasses">
<div class="admin__field-control"
css="'_with-tooltip': $data.tooltip">
<label class="admin__form-field-label" if="$data.label" attr="for: uid">
<span translate="label" attr="'data-config-scope': $data.scopeLabel"></span>
</label>
<render args="tooltipTpl" if="$data.tooltip"></render>
</div>
<div class="admin__field admin__field-option">
<input type="checkbox"
class="admin__control-checkbox"
ko-checked="$data.checked"
disable="disabled"
ko-value="value"
hasFocus="focused"
attr="id: uid, name: inputName"/>
<label class="admin__field-label" text="description" attr="for: uid"></label>
</div>
</div>

View File

@ -1,34 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="admin__data-grid-filters-current" css="_show: hasPreviews()">
<div class="admin__current-filters-title-wrap">
<span class="admin__current-filters-title" translate="'Active filters\\:'"></span>
</div>
<div class="admin__current-filters-list-wrap">
<ul class="admin__current-filters-list" data-role="filter-list">
<each args="elems">
<li outereach="previews">
<span text="label + '\\:'"></span>
<span if="typeof preview ==='string' && label === 'Color'" class="color-rectangle" ko-style="{ 'background-color' : preview }"></span>
<span if="typeof preview === 'string'" text="preview"></span>
<span if="typeof preview === 'object'">
<text args="preview[0] || '...'"></text> - <text args="preview[1] || '...'"></text>
</span>
<button class="action-remove" type="button"
data-action="grid-filter-remove-chip"
click="$parent.clear.bind($parent, elem)">
<span translate="'Remove'"></span>
</button>
</li>
</each>
</ul>
</div>
<div class="admin__current-filters-actions-wrap">
<button class="action-tertiary action-clear" type="button" click="clear" translate="'Clear all'"
attr="'data-action': hasPreviews() ? 'grid-filter-reset' : ''"></button>
</div>
</div>

View File

@ -1,17 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<label class="admin__form-field-label" if="$data.label" attr="for: uid">
<span translate="label" attr="'data-config-scope': $data.scopeLabel"></span>
</label>
<div class="admin__field-control"
visible="visible"
css="$data.additionalClasses">
<input type="hidden" class="colorpicker-spectrum" colorPicker="colorPickerConfig" disable="disabled" />
<input type="text" class="admin__control-text colorpicker-input"
ko-value="value" hasFocus="focused" disable="disabled"
attr="name: inputName, id: uid, placeholder: placeholder"/>
</div>

View File

@ -1,32 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="admin__data-grid-header" data-role="masonry-main-toolbar" afterRender="$data.setToolbarNode">
<div class="admin__data-grid-header-row">
<div class="admin__data-grid-actions-wrap" each="getRegion('dataGridActions')" render=""></div>
<each args="getRegion('dataGridFilters')" render=""></each>
</div>
<div class="admin__data-grid-header-row row row-gutter">
<div class="col-xs-2" if="hasChild('listing_massaction')" ko-scope="requestChild('listing_massaction')" render=""></div>
<div css="
'col-xs-10': hasChild('listing_massaction'),
'col-xs-12': !hasChild('listing_massaction')">
<div class="row">
<div class="col-xs-4">
<div class="masonry-results-number" ko-scope="requestChild('listing_paging')">
<render args="totalTmpl"></render>
</div>
<each args="getRegion('sorting')" render=""></each>
</div>
<div class="col-xs-8" ko-scope="requestChild('listing_paging')">
<div render=""></div>
</div>
</div>
</div>
</div>
</div>
<render args="stickyTmpl" if="$data.sticky"></render>

View File

@ -1,17 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="adobe-stock-image-details image-details-section" if="$parent.image().adobe_stock">
<h3 translate="'Adobe Stock'"></h3>
<div class="attributes">
<each args="$parent.image().adobe_stock">
<div class="attribute" if="value">
<span class="title" translate="title"></span>
<div class="value" text="value"></div>
</div>
</each>
</div>
</div>

View File

@ -1,14 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<each args="{ data: actionsList, as: 'action' }">
<li>
<a class="action-menu-item" href="" if="$parent.isVisible($row(), action.name)"
text="action.title" click="$parent[action.handler].bind($parent, $row())"
attr="{'data-ui-id': 'action-' + action.name}">
</a>
</li>
</each>

View File

@ -1,23 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<% if (data.visible) { %>
<form <%= formAttr %>>
<fieldset class="admin__fieldset">
<div class="admin__field admin__field-wide">
<% if(data.label){ %>
<label for="prompt-field-<%- data.id %>" class="admin__field-label">
<span><%= data.label %></span>
</label>
<% } %>
<div class="admin__field-control admin__field-with-image-ext">
<input type="text" data-role="adobe-stock-image-name-field" id="prompt-field-<%- data.id %>" placeholder="Enter the filename (no special characters)" class="admin__control-text" <%= inputAttr %>/>
<span class="image-ext">.<%= data.imageExtension %></span>
</div>
</div>
</fieldset>
</form>
<% } %>

View File

@ -1,58 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<button
class="adobe-sign-in-button"
id="adobeImsSignIn"
data-role="signInBtn"
click="loginClick"
visible="!user().isAuthorized"
type="button">
<span>Sign In</span>
</button>
<div class="adobe-user-information">
<div class="admin__action-dropdown-wrap" data-bind="collapsible">
<img class="adobe-profile-image-small"
attr="src: user().image"
visible="user().isAuthorized"/>
<button
type="button"
data-toggle="dropdown"
class="adobe-user-name admin__action-dropdown"
visible="user().isAuthorized"
data-bind="toggleCollapsible">
<span text="user().name"></span>
</button>
<ul class="admin__action-dropdown-menu adobe-user-popup" visible="user().isAuthorized">
<li>
<img class="adobe-profile-image-large" attr="src: user().image">
</li>
<li class="adobe-user-info">
<ul>
<li><!--ko text: user().name--><!--/ko--></li>
<li><!--ko text: user().email--><!--/ko--></li>
<li><a target="_blank" href="https://account.adobe.com/profile">Manage Account</a></li>
</ul>
</li>
<li>
<div class="adobe-user-info">
<span>AVAILABLE</span>
<p><b><!--ko text: userQuota().images--><!--/ko--></b> Images | <b><!--ko text: userQuota().credits -->
<!--/ko--></b> Credits</p>
</div>
<button
class="adobe-sign-out-button"
id="adobeImsSignOut"
click="logout"
data-bind="visible: !isGlobalSignInEnabled"
data-role="signOutBtn"
type="button">
<span>Sign Out</span>
</button>
</li>
</ul>
</div>
</div>

View File

@ -1,15 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="masonry-sorting">
<b><translate args="'Sort by'"></translate>:</b>
<select class="admin__control-select"
options="options"
optionsValue="'value'"
optionsText="'label'"
ko-value="selectedOption">
</select>
</div>

View File

@ -1,75 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
define([
'jquery',
'Magento_Ui/js/modal/alert',
'jquery/ui'
], function ($, alert) {
'use strict';
$.widget('mage.testConnection', {
options: {
url: '',
elementId: '',
successText: '',
failedText: '',
fieldMapping: ''
},
/**
* Bind handlers to events
*/
_create: function () {
this._on({
'click': $.proxy(this._connect, this)
});
},
/**
* Method triggers an AJAX request to check search engine connection
* @private
*/
_connect: function () {
var result = this.options.failedText,
element = $('#' + this.options.elementId),
self = this,
params = {},
msg = '',
fieldToCheck = this.options.fieldToCheck || 'success';
element.removeClass('success').addClass('fail');
$.each(JSON.parse(this.options.fieldMapping), function (key, el) {
params[key] = $('#' + el).val();
});
$.ajax({
url: this.options.url,
showLoader: true,
data: params,
headers: this.options.headers || {}
}).done(function (response) {
if (response[fieldToCheck]) {
element.removeClass('fail').addClass('success');
result = self.options.successText;
} else {
msg = response.errorMessage;
if (msg) {
alert({
content: msg
});
}
}
}).always(function () {
$('#' + self.options.elementId + '_result').text(result);
});
}
});
return $.mage.testConnection;
});

View File

@ -1,84 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px"
height="105px" viewBox="0 0 120 105" enable-background="new 0 0 120 105" xml:space="preserve">
<g id="Layer_1" display="none">
<rect x="2.904" y="27.946" display="inline" fill="#F06524" width="113.745" height="12.408"/>
<path display="inline" fill="#636667" d="M95.811,85.511c-0.753-2.551-1.775-5.013-3.059-7.344
c-0.207-0.387-0.134-0.884,0.191-1.208c2.857-2.869,2.857-7.489,0.013-10.346l-3.649-3.686c-2.873-2.86-7.493-2.86-10.348-0.016
c-0.334,0.336-0.828,0.409-1.228,0.193c-2.321-1.271-4.785-2.295-7.337-3.047c-0.419-0.126-0.714-0.525-0.712-0.979
c0.004-1.947-0.766-3.812-2.139-5.187c-1.37-1.377-3.233-2.148-5.176-2.148h-5.184c-4.039,0-7.312,3.274-7.312,7.314
c0.001,0.464-0.294,0.863-0.728,0.993c-2.537,0.747-5.002,1.771-7.335,3.051c-0.391,0.213-0.882,0.143-1.199-0.178
c-1.377-1.381-3.236-2.15-5.176-2.15c-1.938,0-3.799,0.77-5.168,2.143l-3.688,3.744c-2.833,2.845-2.833,7.465,0.011,10.321
c0.336,0.336,0.41,0.835,0.191,1.24c-1.269,2.312-2.294,4.772-3.045,7.324c-0.487,1.657,0.46,3.396,2.117,3.885
c1.658,0.487,3.396-0.46,3.884-2.117c0.624-2.12,1.475-4.164,2.538-6.101c1.544-2.863,1.027-6.375-1.262-8.653
c-0.405-0.407-0.405-1.082,0.009-1.497l3.686-3.742c0.181-0.182,0.449-0.291,0.727-0.291c0.279,0,0.545,0.109,0.743,0.307
c2.271,2.289,5.794,2.805,8.634,1.253c1.944-1.065,3.993-1.918,6.115-2.541c3.105-0.933,5.213-3.781,5.2-7.005
C56.126,58.473,56.6,58,57.184,58h5.184c0.281,0,0.55,0.112,0.75,0.31c0.199,0.2,0.309,0.471,0.309,0.752
c-0.012,3.217,2.098,6.065,5.185,6.992c2.138,0.631,4.187,1.482,6.129,2.545c2.854,1.546,6.369,1.026,8.646-1.269
c0.403-0.401,1.075-0.401,1.492,0.015l3.639,3.675c0.42,0.424,0.42,1.098,0.007,1.515c-2.283,2.265-2.802,5.783-1.261,8.628
c1.071,1.952,1.922,3.997,2.545,6.116c0.489,1.657,2.228,2.604,3.886,2.116C95.351,88.907,96.297,87.169,95.811,85.511z"/>
<path display="inline" fill="#636667" d="M118.29,1.486C117.337,0.536,116.046,0,114.7,0H4.843
C2.035,0.014-0.224,2.283-0.224,5.076v89.103c-0.006,1.334,0.524,2.629,1.475,3.584c0.951,0.955,2.244,1.492,3.592,1.492h109.851
c1.35,0.005,2.645-0.529,3.6-1.484c0.955-0.954,1.49-2.254,1.482-3.605V5.076C119.776,3.73,119.243,2.439,118.29,1.486z
M113.521,6.255v18.564H6.032V6.255H113.521z M41.2,93c1.493-8.922,9.23-15.729,18.576-15.729c9.348,0,17.083,6.808,18.576,15.729
H41.2z M84.673,93c-1.542-12.39-12.089-21.984-24.896-21.984C46.97,71.016,36.422,80.61,34.879,93H6.032V31.074h107.49V93H84.673z"
/>
<path display="inline" fill="#636667" d="M21.661,19.955c-1.204,1.203-2.836,1.879-4.539,1.879c-3.545,0-6.419-2.873-6.419-6.418
s2.874-6.418,6.419-6.418s6.418,2.873,6.418,6.418C23.541,17.118,22.865,18.751,21.661,19.955z"/>
<circle display="inline" fill="#636667" cx="31.611" cy="15.416" r="6.418"/>
<path display="inline" fill="#636667" d="M52.518,15.416c-0.009,3.545-2.873,6.408-6.418,6.418c-3.545,0-6.419-2.873-6.419-6.418
s2.874-6.418,6.419-6.418C49.645,8.998,52.518,11.871,52.518,15.416z"/>
</g>
<g id="Layer_2" display="none">
<g display="inline">
<path fill="#F06725" d="M99.814,64.673V46.052h13.125v18.621H99.814z M120,64.673v43.361H92.758V64.673H120z"/>
<rect y="50.855" fill="#F06725" width="9.017" height="57.181"/>
<path fill="#F06725" d="M53.04,108.034V55.046h16.718v52.988H53.04z M58.535,55.046V44.188h5.724v10.858H58.535z"/>
<rect x="18.373" y="30.743" fill="#646767" width="3.105" height="4.451"/>
<rect x="29.501" y="30.743" fill="#646767" width="3.105" height="4.451"/>
<rect x="40.586" y="30.743" fill="#646767" width="3.104" height="4.451"/>
<rect x="18.373" y="43.411" fill="#646767" width="3.105" height="4.503"/>
<rect x="29.501" y="43.411" fill="#646767" width="3.105" height="4.503"/>
<rect x="40.609" y="43.411" fill="#646767" width="3.104" height="4.503"/>
<rect x="18.373" y="56.082" fill="#646767" width="3.105" height="4.5"/>
<rect x="29.501" y="56.082" fill="#646767" width="3.105" height="4.5"/>
<rect x="40.609" y="56.082" fill="#646767" width="3.104" height="4.5"/>
<rect x="18.373" y="68.752" fill="#646767" width="3.105" height="4.501"/>
<rect x="29.501" y="68.752" fill="#646767" width="3.105" height="4.501"/>
<rect x="40.609" y="68.752" fill="#646767" width="3.104" height="4.501"/>
<rect x="18.373" y="81.422" fill="#646767" width="3.105" height="4.491"/>
<rect x="29.501" y="81.422" fill="#646767" width="3.105" height="4.491"/>
<rect x="40.586" y="81.422" fill="#646767" width="3.104" height="4.491"/>
<rect x="18.373" y="94.091" fill="#646767" width="3.105" height="4.504"/>
<rect x="29.501" y="94.091" fill="#646767" width="3.105" height="4.504"/>
<rect x="40.609" y="94.091" fill="#646767" width="3.104" height="4.504"/>
<path fill="#646767" d="M94.309,106.481V55.761h-4.378V33.247h-7.132V16.168h-3.105v17.079h-7.112v22.514h-4.378v50.721h-13.61
V19.75h-8.655V9.006h-8.859V0H24.977v9.006h-8.859V19.75H7.483v86.731H0v3.104h7.483h47.109h13.61h26.105H120v-3.104H94.309z
M75.687,36.353h11.139V55.74H75.687V36.353z M28.082,3.105h5.892v5.9h-5.892V3.105z M19.221,12.11h5.756h12.102h5.754v7.64
H19.221V12.11z M10.588,106.481V22.854h5.53h29.82h5.548v83.627H10.588z M71.309,106.481V58.868h19.896v47.613H71.309z"/>
</g>
</g>
<g id="Layer_3">
<path fill="#636768" d="M2.66,104.889h112.106c1.47,0,2.66-1.194,2.66-2.662c0-1.473-1.19-2.663-2.66-2.663H2.66
c-1.471,0-2.661,1.19-2.661,2.663C0,103.694,1.189,104.889,2.66,104.889z"/>
<rect x="2.66" y="52.421" fill="#F06725" width="12.314" height="39.343"/>
<rect x="102.453" y="31.996" fill="#F06725" width="12.313" height="59.768"/>
<rect x="35.928" y="31.25" fill="#F06725" width="12.315" height="60.514"/>
<rect x="69.187" y="50.168" fill="#F06725" width="12.323" height="41.596"/>
<circle fill="#F06725" cx="42.038" cy="11.39" r="3.76"/>
<circle fill="#F06725" cx="108.608" cy="12.135" r="3.76"/>
<path fill="#656668" d="M108.61,0.744c-6.28,0-11.387,5.11-11.387,11.389c0,0.877,0.107,1.729,0.293,2.55l-16.983,9.726
c-1.392-1.221-3.194-1.988-5.187-1.988c-1.931,0-3.681,0.728-5.054,1.882L53.252,13.614c0.145-0.722,0.222-1.464,0.222-2.227
C53.474,5.109,48.364,0,42.085,0c-6.281,0-11.39,5.109-11.39,11.391c0,1.168,0.178,2.296,0.508,3.36l-18.246,11.1
c-1.208-0.748-2.617-1.202-4.138-1.202c-4.363,0-7.913,3.549-7.913,7.911c0,4.361,3.549,7.911,7.913,7.911
c2.113,0,4.101-0.823,5.593-2.317c1.492-1.493,2.315-3.48,2.315-5.593c0-0.881-0.177-1.712-0.444-2.504l17.646-10.733
c2.07,2.129,4.959,3.457,8.156,3.457c3.601,0,6.81-1.684,8.9-4.301l16.61,10.419c-0.086,0.463-0.146,0.938-0.146,1.422
c-0.003,4.353,3.534,7.899,7.889,7.908h0.004c4.361,0,7.913-3.55,7.913-7.917c-0.003-0.43-0.063-0.841-0.128-1.251l16.774-9.605
c2.085,2.485,5.217,4.069,8.71,4.069c6.28,0,11.388-5.11,11.388-11.39C119.998,5.855,114.889,0.744,108.61,0.744z M10.648,34.389
c-0.488,0.49-1.139,0.758-1.83,0.758c-1.427,0-2.587-1.161-2.587-2.587c0-1.427,1.16-2.588,2.587-2.588
c1.426,0,2.587,1.161,2.587,2.588C11.405,33.25,11.137,33.901,10.648,34.389z M42.085,17.456c-3.345,0-6.065-2.721-6.065-6.065
c0-3.345,2.723-6.068,6.065-6.068c3.343,0,6.066,2.723,6.066,6.068C48.151,14.733,45.43,17.456,42.085,17.456z M75.347,32.903
c-1.418-0.001-2.571-1.16-2.571-2.58c0-1.419,1.157-2.576,2.578-2.578c1.421,0,2.578,1.155,2.578,2.569
C77.928,31.742,76.771,32.902,75.347,32.903z M108.61,18.2c-3.345,0-6.066-2.723-6.066-6.065c0-3.344,2.722-6.066,6.066-6.066
c3.344,0,6.066,2.723,6.066,6.066C114.677,15.478,111.954,18.2,108.61,18.2z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -1,17 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_Ui/js/form/element/abstract'
], function (Abstract) {
'use strict';
return Abstract.extend({
/** @inheritdoc */
onUpdate: function () {
this.bubble('update', this.hasChanged());
}
});
});

View File

@ -1,88 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_AdminNotification/js/grid/listing',
'Magento_Ui/js/modal/alert',
'mage/translate',
'underscore',
'jquery'
], function (Listing, uiAlert, $t, _, $) {
'use strict';
return Listing.extend({
defaults: {
isAllowed: true,
ajaxSettings: {
method: 'POST',
data: {},
url: '${ $.dismissUrl }'
}
},
/** @inheritdoc */
initialize: function () {
_.bindAll(this, 'reload', 'onError');
return this._super();
},
/**
* Dismiss all items.
*/
dismissAll: function () {
var toDismiss = [];
_.each(this.rows, function (row) {
if (row.dismiss) {
toDismiss.push(row.uuid);
}
});
toDismiss.length && this.dismiss(toDismiss);
},
/**
* Dismiss action.
*
* @param {Array} items
*/
dismiss: function (items) {
var config = _.extend({}, this.ajaxSettings);
config.data.uuid = items;
this.showLoader();
$.ajax(config)
.done(this.reload)
.fail(this.onError);
},
/**
* Success callback for dismiss request.
*/
reload: function () {
this.source.reload({
refresh: true
});
},
/**
* Error callback for dismiss request.
*
* @param {Object} xhr
*/
onError: function (xhr) {
this.hideLoader();
if (xhr.statusText === 'abort') {
return;
}
uiAlert({
content: $t('Something went wrong.')
});
}
});
});

View File

@ -1,65 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_Ui/js/form/components/insert-form',
'uiRegistry'
], function (Insert, registry) {
'use strict';
return Insert.extend({
defaults: {
modalProvider: '${ $.parentName }',
titlePrefix: '',
imports: {
changeModalTitle: '${ $.modalProvider }:state'
},
listens: {
responseData: 'afterRetry'
},
modules: {
modal: '${ $.modalProvider }',
notificationListing: '${ $.columnsProvider }'
}
},
/** @inheritdoc */
initConfig: function () {
var modalTitleProvider;
this._super();
modalTitleProvider = this.modalTitleProvider.split(':');
this.modalTitleTarget = modalTitleProvider[0];
this.modalTitlePath = modalTitleProvider[1];
},
/**
* Change modal title.
*
* @param {Boolean} change
*/
changeModalTitle: function (change) {
if (change) {
registry.get(this.modalTitleTarget, function (target) {
this.modal().setTitle(this.titlePrefix + target.get(this.modalTitlePath));
}.bind(this));
} else {
this.modal().setTitle('');
}
},
/**
* Action after retry operation.
*
* @param {Object} data
*/
afterRetry: function (data) {
if (!data.error) {
this.modal().closeModal();
this.notificationListing().reload();
}
}
});
});

View File

@ -1,9 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div css="$data.additionalClasses"
if="error"
text="error"></div>

View File

@ -1,15 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="action-menu-item action-close-wrapper">
<button class="action-close"
repeat="foreach: $col.getVisibleActions($row()._rowIndex), item: '$action'"
click="$col.getActionHandler($action())"
attr="{
title: $action().label
}"
></button>
</div>

View File

@ -1,43 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div id="system_messages" class="message-system" collapsible visible="totalRecords">
<div class="message-system-inner" outerClick="fixLoaderHeight.bind($data, true)">
<div class="message-system-short">
<button class="message-system-action-dropdown" toggleCollapsible>
<span>
<translate args="'System Messages'"></translate>:
<text args="totalRecords"></text>
</span>
</button>
<div class="message-system-short-wrapper" if="rows[0]" repeat="foreach: [rows[0]], item: '$row'" visible="!$collapsible.opened()">
<fastForEach args="data: getVisible(), as: '$col'" >
<render args="$col.getBody()"></render>
</fastForEach>
</div>
</div>
<div class="message-system-collapsible">
<ul class="message-system-list">
<li repeat="foreach: rows, item: '$row'">
<fastForEach args="data: getVisible(), as: '$col'" >
<render args="$col.getBody()"></render>
</fastForEach>
</li>
</ul>
<div class="message-system-summary" if="isAllowed">
<a class="action__message-log"
href="#"
click="dismissAll"
text="dismissAllText"></a>
<a class="action__message-log"
attr="{
href: link
}"
text="linkText"></a>
</div>
</div>
</div>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,10 +0,0 @@
/**
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
require([
'Magento_Variable/variables',
'mage/adminhtml/browser'
]);

View File

@ -1,134 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/*global FORM_KEY*/
define([
'jquery',
'chartJs',
'jquery-ui-modules/widget',
'chartjs/chartjs-adapter-moment',
'chartjs/es6-shim.min',
'moment'
], function ($, Chart) {
'use strict';
$.widget('mage.dashboardChart', {
options: {
updateUrl: '',
periodSelect: null,
periodUnits: [],
precision: 0,
type: ''
},
chart: null,
/**
* @private
*/
_create: function () {
this.createChart();
if (this.options.periodSelect) {
$(document).on('change', this.options.periodSelect, this.refreshChartData.bind(this));
this.period = $(this.options.periodSelect).val();
}
},
/**
* @public
*/
createChart: function () {
this.chart = new Chart(this.element, this.getChartSettings());
this.refreshChartData();
},
/**
* @public
*/
refreshChartData: function () {
var data = {
'form_key': FORM_KEY
};
if (this.options.periodSelect) {
this.period = data.period = $(this.options.periodSelect).val();
}
$.ajax({
url: this.options.updateUrl,
showLoader: true,
data: data,
dataType: 'json',
type: 'POST',
success: this.updateChart.bind(this)
});
},
/**
* @public
* @param {Object} response
*/
updateChart: function (response) {
$(this.element).toggle(response.data.length > 0);
$(this.element).next('.dashboard-diagram-nodata').toggle(response.data.length === 0);
this.chart.options.scales.xAxis.time.unit = this.options.periodUnits[this.period] ?
this.options.periodUnits[this.period] : 'hour';
this.chart.data.datasets[0].data = response.data;
this.chart.data.datasets[0].label = response.label;
this.chart.update();
},
/**
* @returns {Object} chart object configuration
*/
getChartSettings: function () {
return {
type: 'bar',
data: {
datasets: [{
yAxisID: 'yAxis',
xAxisID: 'xAxis',
data: [],
backgroundColor: '#f1d4b3',
borderColor: '#eb5202',
borderWidth: 1
}]
},
options: {
legend: {
onClick: this.handleChartLegendClick,
position: 'bottom'
},
scales: {
xAxis: {
offset: true,
type: 'time',
ticks: {
source: 'data'
}
},
yAxis: {
ticks: {
beginAtZero: true,
precision: this.options.precision
}
}
}
}
};
},
/**
* @public
*/
handleChartLegendClick: function () {
// don't hide dataset on clicking into legend item
}
});
return $.mage.dashboardChart;
});

View File

@ -1,59 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/*global FORM_KEY*/
define([
'jquery',
'jquery-ui-modules/widget'
], function ($) {
'use strict';
$.widget('mage.dashboardTotals', {
options: {
updateUrl: '',
periodSelect: null
},
elementId: null,
/**
* @private
*/
_create: function () {
this.elementId = $(this.element).attr('id');
if (this.options.periodSelect) {
$(document).on('change', this.options.periodSelect, $.proxy(function () {
this.refreshTotals();
}, this));
}
},
/**
* @public
*/
refreshTotals: function () {
var periodParam = '';
if (this.options.periodSelect && $(this.options.periodSelect).val()) {
periodParam = 'period/' + $(this.options.periodSelect).val() + '/';
}
$.ajax({
url: this.options.updateUrl + periodParam,
showLoader: true,
data: {
'form_key': FORM_KEY
},
dataType: 'html',
type: 'POST',
success: $.proxy(function (response) {
$('#' + this.elementId).replaceWith(response);
}, this)
});
}
});
return $.mage.dashboardTotals;
});

View File

@ -1,15 +0,0 @@
/**
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Backend/js/validate-store'
], function ($, validateStore) {
'use strict';
$.widget('mage.deleteWithConfirm', validateStore, {});
return $.mage.deleteWithConfirm;
});

View File

@ -1,147 +0,0 @@
/**
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* @api
*/
/*global byteConvert*/
define([
'jquery',
'mage/template',
'Magento_Ui/js/modal/alert',
'Magento_Ui/js/form/element/file-uploader',
'mage/translate',
'jquery/file-uploader'
], function ($, mageTemplate, alert, FileUploader) {
'use strict';
var fileUploader = new FileUploader({
dataScope: '',
isMultipleFiles: true
});
fileUploader.initUploader();
$.widget('mage.mediaUploader', {
/**
*
* @private
*/
_create: function () {
var self = this,
progressTmpl = mageTemplate('[data-template="uploader"]'),
isResizeEnabled = this.options.isResizeEnabled,
resizeConfiguration = {
action: 'resizeImage',
maxWidth: this.options.maxWidth,
maxHeight: this.options.maxHeight
};
if (!isResizeEnabled) {
resizeConfiguration = {
action: 'resizeImage'
};
}
this.element.find('input[type=file]').fileupload({
dataType: 'json',
formData: {
'form_key': window.FORM_KEY
},
dropZone: this.element.find('input[type=file]').closest('[role="dialog"]'),
sequentialUploads: true,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
maxFileSize: this.options.maxFileSize,
/**
* @param {Object} e
* @param {Object} data
*/
add: function (e, data) {
var fileSize,
tmpl;
$.each(data.files, function (index, file) {
fileSize = typeof file.size == 'undefined' ?
$.mage.__('We could not detect a size.') :
byteConvert(file.size);
data.fileId = Math.random().toString(33).substr(2, 18);
tmpl = progressTmpl({
data: {
name: file.name,
size: fileSize,
id: data.fileId
}
});
$(tmpl).appendTo(self.element);
});
$(this).fileupload('process', data).done(function () {
data.submit();
});
},
/**
* @param {Object} e
* @param {Object} data
*/
done: function (e, data) {
if (data.result && !data.result.error) {
self.element.trigger('addItem', data.result);
} else {
fileUploader.aggregateError(data.files[0].name, data.result.error);
}
self.element.find('#' + data.fileId).remove();
},
/**
* @param {Object} e
* @param {Object} data
*/
progress: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10),
progressSelector = '#' + data.fileId + ' .progressbar-container .progressbar';
self.element.find(progressSelector).css('width', progress + '%');
},
/**
* @param {Object} e
* @param {Object} data
*/
fail: function (e, data) {
var progressSelector = '#' + data.fileId;
self.element.find(progressSelector).removeClass('upload-progress').addClass('upload-failure')
.delay(2000)
.hide('highlight')
.remove();
},
stop: fileUploader.uploaderConfig.stop
});
this.element.find('input[type=file]').fileupload('option', {
processQueue: [{
action: 'loadImage',
fileTypes: /^image\/(gif|jpeg|png)$/
},
resizeConfiguration,
{
action: 'saveImage'
}]
});
}
});
return $.mage.mediaUploader;
});

View File

@ -1,50 +0,0 @@
/**
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Backend/js/validate-store'
], function ($, validateStore) {
'use strict';
$.widget('mage.saveWithConfirm', validateStore, {
/**
* Check is it need to show confirmation popup
*
* @returns {Boolean}
*/
_needConfirm: function () {
var storeData = this.settings.storeData,
/* edit store view*/
storeViewEdit = $('[name="store[store_id]"]').length,
groupId = $('[name="store[group_id]"]').val(),
isNewStoreView = !$('[name="store[store_id]"]').val(),
/* edit store */
storeEdit = $('[name="group[group_id]"]').length,
storeId = $('[name="group[group_id]"]').val(),
rootCategoryId = $('[name="group[root_category_id]"]').val(),
defaultStoreView = $('[name="group[default_store_id]"]').val(),
/* edit website */
websiteEdit = $('[name="website[website_id]"]').length,
defaultStore = $('[name="website[default_group_id]"]').val(),
/* conditions */
storeViewUpdated = storeViewEdit && (isNewStoreView || storeData['group_id'] !== groupId),
storeUpdated = storeEdit && storeId &&
(rootCategoryId !== null && storeData['root_category_id'] !== rootCategoryId ||
defaultStoreView !== null && storeData['default_store_id'] !== defaultStoreView),
websiteUpdated = websiteEdit && defaultStore !== null && storeData['default_group_id'] !== defaultStore;
return storeViewUpdated || storeUpdated || websiteUpdated;
}
});
return $.mage.saveWithConfirm;
});

View File

@ -1,127 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery'
], function ($) {
'use strict';
/**
* @param {Object} storeSwitchConfig
*/
return function (storeSwitchConfig) {
var scopeSwitcherHandler;
(function () {
var storesList = $('[data-role=stores-list]');
storesList.on('click', '[data-value]', function (event) {
var val = $(event.target).data('value'),
role = $(event.target).data('role'),
switcher = $('[data-role=' + role + ']');
event.preventDefault();
if (!switcher.val() || val !== switcher.val()) {
/* Set the value & trigger event */
switcher.val(val).trigger('change');
}
});
})($);
/**
* Switch store scope
*
* @param {Object} obj
* @return void
*/
function switchScope(obj) {
var switcher = $(obj),
scopeId = switcher.val(),
scopeParams = '',
switcherParams = {};
if (scopeId) {
scopeParams = switcher.data('param') + '/' + scopeId + '/';
}
if (obj.switchParams) {
scopeParams += obj.switchParams;
}
/**
* Reload function for switcher
*/
function reload() {
var url;
if (!storeSwitchConfig.isUsingIframe) {
if (storeSwitchConfig.switchUrl && storeSwitchConfig.switchUrl.length > 0) {
url = storeSwitchConfig.switchUrl + scopeParams;
/* eslint-disable no-undef */
setLocation(url);
}
} else {
$('#preview_selected_store').val(scopeId);
$('#preview_form').trigger('submit');
$('.store-switcher .dropdown-menu li a').each(function () {
var $this = $(this);
if ($this.data('role') === 'store-view-id' && $this.data('value') === scopeId) {
$('#store-change-button').html($this.text());
}
});
$('#store-change-button').trigger('click');
}
}
if (typeof scopeSwitcherHandler !== 'undefined') {
switcherParams = {
scopeId: scopeId,
scopeParams: scopeParams,
useConfirm: storeSwitchConfig.useConfirm
};
scopeSwitcherHandler(switcherParams);
} else if (storeSwitchConfig.useConfirm) {
require([
'Magento_Ui/js/modal/confirm',
'mage/translate'
], function (confirm, $t) {
confirm({
content: $t('Please confirm scope switching. All data that hasn\'t been saved will be lost.'),
actions: {
/**
* Confirm action
*/
confirm: function () {
reload();
},
/**
* Cancel action
*/
cancel: function () {
obj.value = storeSwitchConfig.storeId ? storeSwitchConfig.storeId : '';
}
}
});
});
} else {
reload();
}
}
window.scopeSwitcherHandler = scopeSwitcherHandler;
window.switchScope = switchScope;
};
});

View File

@ -1,48 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/* eslint-disable strict */
define([
'jquery',
'mage/mage'
], function ($) {
$.extend(true, $, {
mage: {
translate: (function () {
/**
* Key-value translations storage
* @type {Object}
* @private
*/
var _data = {};
/**
* Add new translation (two string parameters) or several translations (object)
*/
this.add = function () {
if (arguments.length > 1) {
_data[arguments[0]] = arguments[1];
} else if (typeof arguments[0] === 'object') {
$.extend(_data, arguments[0]);
}
};
/**
* Make a translation with parsing (to handle case when _data represents tuple)
* @param {String} text
* @return {String}
*/
this.translate = function (text) {
return typeof _data[text] === 'string' ? _data[text] : text;
};
return this;
}())
}
});
$.mage.__ = $.proxy($.mage.translate.translate, $.mage.translate);
return $.mage.__;
});

View File

@ -1,83 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'jquery/ui',
'mage/dataPost',
'mage/backend/validation',
'Magento_Ui/js/modal/confirm'
], function ($, jqueryUi, dataPost, validation, modalConfirm) {
'use strict';
$.widget('mage.storeValidation', {
/**
* Validation creation
* @protected
*/
_create: function () {
var form = this.element[0],
validator = $.data(form, 'validator');
if (validator && validator.settings) {
validator.settings.submitHandler = this._saveHandler;
validator.settings.confirmCallback = this._needConfirm;
$.extend(validator.settings, this.options);
$.data(form, 'validator', validator);
}
},
/**
* Check is it need to show confirmation popup
*
* @returns {Boolean}
*/
_needConfirm: function () {
return true;
},
/**
* Save form with confirmation if needed
*
* @param {Object} form
* @private
*/
_saveHandler: function (form) {
var formData = {},
requestData = {},
options = $.data(form, 'validator').settings;
if ($(form).validation('isValid')) {
$.each($(form).serializeArray(), function () {
formData[this.name] = this.value || '';
});
requestData = {
action: $(form).attr('action'),
data: formData
};
if (options.confirmCallback.call(this)) {
modalConfirm({
title: $.mage.__('Warning message'),
content: $.mage.__('This operation can take a long time'),
actions: {
/**
* 'Confirm' action handler.
*/
confirm: function () {
$('body').trigger('processStart');
dataPost().postData(requestData);
}
}
});
} else {
dataPost().postData(requestData);
}
}
}
});
return $.mage.storeValidation;
});

View File

@ -1,15 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<button class="action-delete"
data-bind="
click: function(){ $parent.processingDeleteRecord($record().index, $record().recordId); },
attr: {
title: $parent.deleteButtonLabel
}
">
<span translate="$parent.deleteButtonLabel"></span>
</button>

View File

@ -1,94 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="admin__field-complex" if="$data.addButton">
<div class="admin__field-complex-title">
<span class="label" translate="'User Agent Rules'"></span>
</div>
<div class="admin__field-complex-elements">
<render args="fallbackResetTpl" if="$data.showFallbackReset && $data.isDifferedFromDefault"></render>
<button attr="{disabled: disabled}"
class="action-secondary"
type="button"
click="processingAddChild.bind($data, false, false, false)">
<span translate="addButtonLabel"></span>
</button>
</div>
<div class="admin__field-complex-content"
translate="'User agent exceptions override product and CMS pages rules.'"></div>
</div>
<div class="admin__field admin__field-wide"
visible="visible"
disabled="disabled"
css="$data.setClasses($data)"
attr="'data-index': index">
<label if="$data.label" class="admin__field-label" attr="for: $data.uid">
<span translate="$data.label"></span>
</label>
<div class="admin__field-control" data-role="grid-wrapper">
<div class="admin__control-table-pagination" visible="!!element.getRecordCount()">
<div class="admin__data-grid-pager">
<button class="action-previous" type="button" data-bind="attr: {title: $t('Previous Page')}, click: previousPage, disable: isFirst()"></button>
<input class="admin__control-text" type="number" data-bind="attr: {id: ++ko.uid}, value: currentPage"/>
<label class="admin__control-support-text" data-bind="attr: {for: ko.uid}, text: 'of ' + pages()"></label>
<button class="action-next" type="button" data-bind="attr: {title: $t('Next Page')}, click: nextPage, disable: isLast()"></button>
</div>
</div>
<div class="admin__control-table-wrapper">
<table class="admin__dynamic-rows data-grid" data-role="grid">
<thead if="element.columnsHeader">
<tr>
<th if="$data.dndConfig.enabled"
class="data-grid-draggable-row-cell"></th>
<th repeat="foreach: labels, item: '$label'"
class="data-grid-th"
visible="$label().visible"
disable="$label().disabled"
css="setClasses($label())">
<span translate="$label().label"></span>
</th>
</tr>
</thead>
<tbody>
<tr repeat="foreach: elems, item: '$record'"
class="data-row"
css="'_odd-row': $index % 2">
<td if="dndConfig.enabled"
class="data-grid-draggable-row-cell"
template="name: dndConfig.template, data: dnd"></td>
<!-- ko foreach: { data: $record().elems(), as: 'elem'} -->
<td if="elem.template"
visible="elem.visible() && elem.formElement !== 'hidden'"
disable="elem.disabled"
css="$parent.setClasses(elem)"
template="elem.template"
attr="'data-index': index"></td>
<!-- /ko -->
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="messages">
<div class="message message-notice notice">
<span
translate="'Search strings are either normal strings or regular expressions (PCRE). They are matched in the same order as entered.'"></span>
<br/>
<span
translate="'Examples'"></span>:
<span class="code-sample">Firefox: /^mozilla/i</span>
</div>
</div>

View File

@ -1,10 +0,0 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<button class="action-tertiary"
click="element.restoreToDefault">
<span translate="'Use Default Value'"></span>
</button>

View File

@ -1,101 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
#bundle_product_container .tier {
margin-bottom: 13px;
}
#bundle_product_container .col-qty > input[type='text'] {
text-align: right;
}
#bundle_product_container .col-name {
max-width: 250px;
overflow: hidden;
text-overflow: ellipsis;
}
#bundle_product_container .col-sku {
max-width: 170px;
overflow: hidden;
text-overflow: ellipsis;
}
#bundle_product_container .col-draggable {
width: 10px;
}
#bundle_product_container .col-actions {
width: 40px;
}
#bundle_product_container .col-qty,
#bundle_product_container .col-uqty,
#bundle_product_container .col-default {
width: 70px;
}
#bundle_product_container .field-option-req .control {
top: 39px;
}
.selection-search .massaction {
display: none;
}
/* Sku, Price, Weight Fields */
.field-sku .control .sku {
display: inline-block;
width: 140px;
margin-right: 11px;
}
.field-sku .control .sku > input[type='text'] {
width: 100%;
}
.field-price .addon > .price {
display: table;
direction: rtl;
float: left;
width: 140px;
margin-right: 15px;
}
.field-price .addon > .price > * {
direction: ltr;
}
.field-price .addon > .price + .select {
float: left;
}
.field-weight .weight {
display: inline-block;
margin-right: 15px;
vertical-align: top;
width: 140px;
}
.field-weight .weight .admin__control-addon .input-text {
min-width: 10rem;
}
.field-weight .weight .admin__control-addon .input-text,
.field-weight .weight .admin__control-addon .admin__addon-suffix {
flex-basis: 10rem;
}
.ie9 .field-weight .weight .admin__control-addon .input-text {
width: 100px;
}
.weight-switcher .admin__control-addon {
width: 100%;
}
.field-weight .weight .field:first-child {
width: 100%;
}

View File

@ -1,297 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/*global FORM_KEY*/
/*global bSelection*/
/**
* @api
*/
define([
'jquery',
'Magento_Catalog/js/product/weight-handler',
'Magento_Ui/js/modal/modal',
'jquery/ui',
'mage/translate',
'Magento_Theme/js/sortable',
'prototype'
], function ($, weightHandler) {
'use strict';
$.widget('mage.bundleProduct', {
/** @inheritdoc */
_create: function () {
this._initOptionBoxes()
._initSortableSelections()
._bindCheckboxHandlers()
._initCheckboxState()
._bindAddSelectionDialog()
._hideProductTypeSwitcher();
},
/**
* @return {Object}
* @private
*/
_initOptionBoxes: function () {
var syncOptionTitle;
this.element.sortable({
axis: 'y',
handle: '[data-role=draggable-handle]',
items: '.option-box',
update: this._updateOptionBoxPositions,
tolerance: 'pointer'
});
/**
* @param {jQuery.Event} event
*/
syncOptionTitle = function (event) {
var originalValue = $(event.target).attr('data-original-value'),
currentValue = $(event.target).val(),
optionBoxTitle = $('.title > span', $(event.target).closest('.option-box')),
newOptionTitle = $.mage.__('New Option');
optionBoxTitle.text(currentValue === '' && !originalValue.length ? newOptionTitle : currentValue);
};
this._on({
'change .field-option-title input[name$="[title]"]': syncOptionTitle,
'keyup .field-option-title input[name$="[title]"]': syncOptionTitle,
'paste .field-option-title input[name$="[title]"]': syncOptionTitle
});
return this;
},
/**
* @return {Object}
* @private
*/
_initSortableSelections: function () {
this.element.find('.option-box .form-list tbody').sortable({
axis: 'y',
handle: '[data-role=draggable-handle]',
/**
* @param {jQuery.Event} event
* @param {jQuery} ui
* @return {jQuery}
*/
helper: function (event, ui) {
ui.children().each(function () {
$(this).width($(this).width());
});
return ui;
},
update: this._updateSelectionsPositions,
tolerance: 'pointer'
});
return this;
},
/**
* @return {Object}
* @private
*/
_initCheckboxState: function () {
this.element.find('.is-required').each(function () {
$(this).prop('checked', $(this).closest('.option-box').find('[name$="[required]"]').val() > 0);
});
this.element.find('.is-user-defined-qty').each(function () {
$(this).prop('checked', $(this).closest('.qty-box').find('.select').val() > 0);
});
return this;
},
/**
* @return {Object}
* @private
*/
_bindAddSelectionDialog: function () {
var widget = this;
this._on({
/**
* @param {jQuery.Event} event
*/
'click .add-selection': function (event) {
var $optionBox = $(event.target).closest('.option-box'),
$selectionGrid = $optionBox.find('.selection-search').clone(),
optionIndex = $optionBox.attr('id').replace('bundle_option_', ''),
productIds = [],
productSkus = [],
selectedProductList = {};
$optionBox.find('[name$="[product_id]"]').each(function () {
if (!$(this).closest('tr').find('[name$="[delete]"]').val()) {
productIds.push($(this).val());
productSkus.push($(this).closest('tr').find('.col-sku').text());
}
});
bSelection.gridSelection.set(optionIndex, $H({}));
bSelection.gridRemoval = $H({});
bSelection.gridSelectedProductSkus = productSkus;
$selectionGrid.on('contentUpdated', bSelection.gridUpdateCallback);
$selectionGrid.on('change', '.col-id input', function () {
var tr = $(this).closest('tr');
if ($(this).is(':checked')) {
selectedProductList[$(this).val()] = {
name: tr.find('.col-name').html().trim(),
sku: tr.find('.col-sku').html().trim(),
'product_id': $(this).val(),
'option_id': $('bundle_selection_id_' + optionIndex).val(),
'selection_price_value': 0,
'selection_qty': 1
};
} else {
delete selectedProductList[$(this).val()];
}
});
$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',
/**
* @param {jQuery.Event} e
* @param {Object} modalWindow
*/
closed: function (e, modalWindow) {
modalWindow.modal.remove();
},
buttons: [{
text: $.mage.__('Add Selected Products'),
'class': 'action-primary action-add',
/** Click action. */
click: function () {
$.each(selectedProductList, function () {
window.bSelection.addRow(optionIndex, this);
});
bSelection.gridRemoval.each(function (pair) {
$optionBox.find('.col-sku').filter(function () {
let text = $(this).text();
return text.trim() === 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',
data: {
index: optionIndex,
products: productIds,
'selected_products': productIds,
'form_key': FORM_KEY
},
/**
* @param {*} data
*/
success: function (data) {
$selectionGrid.html(data).modal('openModal');
},
context: $('body'),
showLoader: true
});
}
});
return this;
},
/**
* @private
*/
_hideProductTypeSwitcher: function () {
weightHandler.hideWeightSwitcher();
},
/**
* @return {Object}
* @private
*/
_bindCheckboxHandlers: function () {
this._on({
/**
* @param {jQuery.Event} event
*/
'change .is-required': function (event) {
var $this = $(event.target);
$this.closest('.option-box').find('[name$="[required]"]').val($this.is(':checked') ? 1 : 0);
},
/**
* @param {jQuery.Event} event
*/
'change .is-user-defined-qty': function (event) {
var $this = $(event.target);
$this.closest('.qty-box').find('.select').val($this.is(':checked') ? 1 : 0);
}
});
return this;
},
/**
* @return {Object}
* @private
*/
_updateOptionBoxPositions: function () {
$(this).find('[name^=bundle_options][name$="[position]"]').each(function (index) {
$(this).val(index);
});
return this;
},
/**
* @return {Object}
* @private
*/
_updateSelectionsPositions: function () {
$(this).find('[name^=bundle_selections][name$="[position]"]').each(function (index) {
$(this).val(index);
});
return this;
},
/**
*
* @return {Object}
*/
refreshSortableElements: function () {
this.element.sortable('refresh');
this._updateOptionBoxPositions.apply(this.element);
this._initSortableSelections();
this._initCheckboxState();
return this;
}
});
});

View File

@ -1,44 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'Magento_Catalog/catalog/type-events',
'Magento_Catalog/js/product/weight-handler'
], function ($, productType, weight) {
'use strict';
return {
/**
* Constructor component
*/
'Magento_Bundle/js/bundle-type-handler': function () {
this.bindAll();
this._initType();
},
/**
* Bind all
*/
bindAll: function () {
$(document).on('changeTypeProduct', this._initType.bind(this));
},
/**
* Init type
* @private
*/
_initType: function () {
if (
productType.type.init === 'bundle' &&
productType.type.current !== 'bundle' &&
!weight.isLocked()
) {
weight.switchWeight();
}
}
};
});

View File

@ -1,95 +0,0 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_Ui/js/form/element/single-checkbox',
'uiRegistry'
], function (Checkbox, registry) {
'use strict';
return Checkbox.extend({
defaults: {
clearing: false,
parentContainer: '',
parentSelections: '',
changer: '',
exports: {
value: '${$.parentName}:isDefaultValue'
}
},
/**
* @inheritdoc
*/
initObservable: function () {
this._super().
observe('elementTmpl');
return this;
},
/**
* @inheritdoc
*/
initConfig: function () {
this._super();
this.imports.changeType = this.retrieveParentName(this.parentContainer) + '.' + this.changer + ':value';
return this;
},
/**
* @inheritdoc
*/
onUpdate: function () {
if (this.prefer === 'radio' && this.checked() && !this.clearing) {
this.clearValues();
}
this._super();
},
/**
* Checkbox to radio type changer.
*
* @param {String} type - type to change.
*/
changeType: function (type) {
var typeMap = registry.get(this.retrieveParentName(this.parentContainer) + '.' + this.changer).typeMap;
this.prefer = typeMap[type];
this.elementTmpl(this.templates[typeMap[type]]);
},
/**
* Clears values in components like this.
*/
clearValues: function () {
var records = registry.get(this.retrieveParentName(this.parentSelections)),
index = this.index,
uid = this.uid;
records.elems.each(function (record) {
record.elems.filter(function (comp) {
return comp.index === index && comp.uid !== uid;
}).each(function (comp) {
comp.clearing = true;
comp.clear();
comp.clearing = false;
});
});
},
/**
* Retrieve name for the most global parent with provided index.
*
* @param {String} parent - parent name.
* @returns {String}
*/
retrieveParentName: function (parent) {
return this.name.replace(new RegExp('^(.+?\\.)?' + parent + '\\..+'), '$1' + parent);
}
});
});

Some files were not shown because too many files have changed in this diff Show More