123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * @api
- */
- define([
- 'jquery',
- 'Magento_Ui/js/modal/alert',
- 'mage/translate',
- 'prototype'
- ], function (jQuery) {
- var VarienRulesForm = new Class.create();
- VarienRulesForm.prototype = {
- initialize: function (parent, newChildUrl) {
- this.parent = $(parent);
- this.newChildUrl = newChildUrl;
- this.shownElement = null;
- this.updateElement = null;
- this.chooserSelectedItems = $H({});
- this.readOnly = false;
- var elems = this.parent.getElementsByClassName('rule-param');
- for (var i = 0; i < elems.length; i++) {
- this.initParam(elems[i]);
- }
- },
- setReadonly: function (readonly) {
- this.readOnly = readonly;
- var elems = this.parent.getElementsByClassName('rule-param-remove');
- for (var i = 0; i < elems.length; i++) {
- var element = elems[i];
- if (this.readOnly) {
- element.hide();
- } else {
- element.show();
- }
- }
- var elems = this.parent.getElementsByClassName('rule-param-new-child');
- for (var i = 0; i < elems.length; i++) {
- var element = elems[i];
- if (this.readOnly) {
- element.hide();
- } else {
- element.show();
- }
- }
- var elems = this.parent.getElementsByClassName('rule-param');
- for (var i = 0; i < elems.length; i++) {
- var container = elems[i];
- var label = Element.down(container, '.label');
- if (label) {
- if (this.readOnly) {
- label.addClassName('label-disabled');
- } else {
- label.removeClassName('label-disabled');
- }
- }
- }
- },
- initParam: function (container) {
- container.rulesObject = this;
- var label = Element.down(container, '.label');
- if (label) {
- Event.observe(label, 'click', this.showParamInputField.bind(this, container));
- }
- var elem = Element.down(container, '.element');
- if (elem) {
- var trig = elem.down('.rule-chooser-trigger');
- if (trig) {
- Event.observe(trig, 'click', this.toggleChooser.bind(this, container));
- }
- var apply = elem.down('.rule-param-apply');
- if (apply) {
- Event.observe(apply, 'click', this.hideParamInputField.bind(this, container));
- } else {
- elem = elem.down('.element-value-changer');
- elem.container = container;
- if (!elem.multiple) {
- Event.observe(elem, 'change', this.hideParamInputField.bind(this, container));
- this.changeVisibilityForValueRuleParam(elem);
- }
- Event.observe(elem, 'blur', this.hideParamInputField.bind(this, container));
- }
- }
- var remove = Element.down(container, '.rule-param-remove');
- if (remove) {
- Event.observe(remove, 'click', this.removeRuleEntry.bind(this, container));
- }
- },
- showChooserElement: function (chooser) {
- this.chooserSelectedItems = $H({});
- if (chooser.hasClassName('no-split')) {
- this.chooserSelectedItems.set(this.updateElement.value, 1);
- } else {
- var values = this.updateElement.value.split(','),
- s = '';
- for (i = 0; i < values.length; i++) {
- s = values[i].strip();
- if (s != '') {
- this.chooserSelectedItems.set(s, 1);
- }
- }
- }
- new Ajax.Request(chooser.getAttribute('url'), {
- evalScripts: true,
- parameters: {
- 'form_key': FORM_KEY, 'selected[]': this.chooserSelectedItems.keys()
- },
- onSuccess: function (transport) {
- if (this._processSuccess(transport)) {
- jQuery(chooser).html(transport.responseText);
- this.showChooserLoaded(chooser, transport);
- jQuery(chooser).trigger('contentUpdated');
- }
- }.bind(this),
- onFailure: this._processFailure.bind(this)
- });
- },
- showChooserLoaded: function (chooser, transport) {
- chooser.style.display = 'block';
- },
- showChooser: function (container, event) {
- var chooser = container.up('li');
- if (!chooser) {
- return;
- }
- chooser = chooser.down('.rule-chooser');
- if (!chooser) {
- return;
- }
- this.showChooserElement(chooser);
- },
- hideChooser: function (container, event) {
- var chooser = container.up('li');
- if (!chooser) {
- return;
- }
- chooser = chooser.down('.rule-chooser');
- if (!chooser) {
- return;
- }
- chooser.style.display = 'none';
- },
- toggleChooser: function (container, event) {
- if (this.readOnly) {
- return false;
- }
- var chooser = container.up('li').down('.rule-chooser');
- if (!chooser) {
- return;
- }
- if (chooser.style.display == 'block') {
- chooser.style.display = 'none';
- this.cleanChooser(container, event);
- } else {
- this.showChooserElement(chooser);
- }
- },
- cleanChooser: function (container, event) {
- var chooser = container.up('li').down('.rule-chooser');
- if (!chooser) {
- return;
- }
- chooser.innerHTML = '';
- },
- showParamInputField: function (container, event) {
- if (this.readOnly) {
- return false;
- }
- if (this.shownElement) {
- this.hideParamInputField(this.shownElement, event);
- }
- Element.addClassName(container, 'rule-param-edit');
- var elemContainer = Element.down(container, '.element');
- var elem = Element.down(elemContainer, 'input.input-text');
- jQuery(elem).trigger('contentUpdated');
- if (elem) {
- elem.focus();
- if (elem && elem.id && elem.id.match(/__value$/)) {
- this.updateElement = elem;
- }
- }
- var elem = Element.down(elemContainer, '.element-value-changer');
- if (elem) {
- elem.focus();
- }
- this.shownElement = container;
- },
- hideParamInputField: function (container, event) {
- Element.removeClassName(container, 'rule-param-edit');
- var label = Element.down(container, '.label'),
- elem;
- if (!container.hasClassName('rule-param-new-child')) {
- elem = Element.down(container, '.element-value-changer');
- if (elem && elem.options) {
- var selectedOptions = [];
- for (i = 0; i < elem.options.length; i++) {
- if (elem.options[i].selected) {
- selectedOptions.push(elem.options[i].text);
- }
- }
- var str = selectedOptions.join(', ');
- label.innerHTML = str != '' ? str : '...';
- }
- this.changeVisibilityForValueRuleParam(elem);
- elem = Element.down(container, 'input.input-text');
- if (elem) {
- var str = elem.value.replace(/(^\s+|\s+$)/g, '');
- elem.value = str;
- if (str == '') {
- str = '...';
- } else if (str.length > 30) {
- str = str.substr(0, 30) + '...';
- }
- label.innerHTML = str.escapeHTML();
- }
- } else {
- elem = container.down('.element-value-changer');
- if (elem.value) {
- this.addRuleNewChild(elem);
- }
- elem.value = '';
- }
- if (elem && elem.id && elem.id.match(/__value$/)) {
- this.hideChooser(container, event);
- this.updateElement = null;
- }
- this.shownElement = null;
- },
- changeVisibilityForValueRuleParam: function(elem) {
- let parsedElementId = elem.id.split('__');
- if (parsedElementId[2] != 'operator') {
- return false;
- }
- let valueElement = jQuery('#' + parsedElementId[0] + '__' + parsedElementId[1] + '__value');
- if(elem.value == '<=>') {
- valueElement.closest('.rule-param').hide();
- } else {
- valueElement.closest('.rule-param').show();
- }
- return true;
- },
- addRuleNewChild: function (elem) {
- var parent_id = elem.id.replace(/^.*__(.*)__.*$/, '$1');
- var children_ul_id = elem.id.replace(/__/g, ':').replace(/[^:]*$/, 'children').replace(/:/g, '__');
- var children_ul = $(this.parent).select('#' + children_ul_id)[0];
- var max_id = 0,
- i;
- var children_inputs = Selector.findChildElements(children_ul, $A(['input.hidden']));
- if (children_inputs.length) {
- children_inputs.each(function (el) {
- if (el.id.match(/__type$/)) {
- i = 1 * el.id.replace(/^.*__.*?([0-9]+)__.*$/, '$1');
- max_id = i > max_id ? i : max_id;
- }
- });
- }
- var new_id = parent_id + '--' + (max_id + 1);
- var new_type = elem.value;
- var new_elem = document.createElement('LI');
- new_elem.className = 'rule-param-wait';
- new_elem.innerHTML = jQuery.mage.__('This won\'t take long . . .');
- children_ul.insertBefore(new_elem, $(elem).up('li'));
- new Ajax.Request(this.newChildUrl, {
- evalScripts: true,
- parameters: {
- form_key: FORM_KEY, type: new_type.replace('/', '-'), id: new_id
- },
- onComplete: this.onAddNewChildComplete.bind(this, new_elem),
- onSuccess: function (transport) {
- if (this._processSuccess(transport)) {
- $(new_elem).update(transport.responseText);
- }
- }.bind(this),
- onFailure: this._processFailure.bind(this)
- });
- },
- _processSuccess: function (transport) {
- if (transport.responseText.isJSON()) {
- var response = transport.responseText.evalJSON();
- if (response.error) {
- alert(response.message);
- }
- if (response.ajaxExpired && response.ajaxRedirect) {
- setLocation(response.ajaxRedirect);
- }
- return false;
- }
- return true;
- },
- _processFailure: function (transport) {
- location.href = BASE_URL;
- },
- onAddNewChildComplete: function (new_elem) {
- if (this.readOnly) {
- return false;
- }
- $(new_elem).removeClassName('rule-param-wait');
- var elems = new_elem.getElementsByClassName('rule-param');
- for (var i = 0; i < elems.length; i++) {
- this.initParam(elems[i]);
- }
- },
- removeRuleEntry: function (container, event) {
- var li = Element.up(container, 'li');
- li.parentNode.removeChild(li);
- },
- chooserGridInit: function (grid) {
- //grid.reloadParams = {'selected[]':this.chooserSelectedItems.keys()};
- },
- chooserGridRowInit: function (grid, row) {
- if (!grid.reloadParams) {
- grid.reloadParams = {
- 'selected[]': this.chooserSelectedItems.keys()
- };
- }
- },
- chooserGridRowClick: function (grid, event) {
- var trElement = Event.findElement(event, 'tr');
- var isInput = Event.element(event).tagName == 'INPUT';
- if (trElement) {
- var checkbox = Element.select(trElement, 'input');
- if (checkbox[0]) {
- var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
- grid.setCheckboxChecked(checkbox[0], checked);
- }
- }
- },
- chooserGridCheckboxCheck: function (grid, element, checked) {
- if (checked) {
- if (!element.up('th')) {
- this.chooserSelectedItems.set(element.value, 1);
- }
- } else {
- this.chooserSelectedItems.unset(element.value);
- }
- grid.reloadParams = {
- 'selected[]': this.chooserSelectedItems.keys()
- };
- this.updateElement.value = this.chooserSelectedItems.keys().join(', ');
- }
- };
- return VarienRulesForm;
- });
|