Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/amasty/feed/view/adminhtml/web/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/amasty/feed/view/adminhtml/web/js/xml-editor.js
define([
    'Amasty_Feed/js/code_mirror/lib/codemirror',
    'Amasty_Feed/js/code_mirror/addon/mode/simple',
    'prototype'
], function (CodeMirror) {
    class xmlEditorMirror {
        constructor(feedId) {
            CodeMirror.defineSimpleMode(`amasty_feed${feedId}`, {
                start: [
                    {regex: /"(?:[^\\]|\\.)*?"/, token: "atom"},
                    {
                        regex: /(?:attribute|format|optional|parent|modify)\b/,
                        token: "string"
                    },
                    {regex: /attribute|custom_field|text|images/, token: "atom"},
                    {regex: /\<!\[CDATA\[/, token: "amcdata", next: "amcdata"},
                    {regex: /\</, token: "amtag", next: "amtag"},

                    {regex: /[\{|%]/, token: "def"},
                    {regex: /[\}|%]/, token: "def"},

                ],
                amtag: [
                    {regex: /.*?>/, token: "amtag", next: "start"},
                    {regex: /.*/, token: "amtag"}
                ],
                amcdata: [
                    {regex: /.*?]]>/, token: "amcdata", next: "start"},
                    {regex: /.*/, token: "amcdata"}
                ]
            });
            this.editor = null;
            this.header =  null;
            this.footer =  null;
            this.selectedRow =  {};
            this.updateMode =  false;
            this.navigator =  {};
            this.modifyTemplate =  null;
            this.modifyConfig =  null;
            this.modifyArgs =  null;
            this.modifyCount =  0;
            this.buttons =  {
                 insert: null,
                 update: null
            };
            this.updateBtn = null;
            this.feedId = feedId;
        };

         clearSelectedRow() {
            this.updateMode = false;
            this.selectedRow = {
                tag: null,
                attribute: null,
                format: null,
                optional: null,
                parent: null
            };

            var modifyContainer = $(this.tableId + "_modify_container")

            if (modifyContainer) {
                modifyContainer.innerHTML = '';
            }
        };

        refresh () {
            if (this.editor) {
                this.editor.refresh();
                this.editor.save();
            }

            if (this.header) {
                this.header.refresh();
                this.header.save();
            }

            if (this.footer) {
                this.footer.refresh();
                this.footer.save();
            }
        };

        init (modifyTemplate, modifyConfig, modifyArgs, tableId, xmlTableId, isMerged) {
            this.modifyTemplate = modifyTemplate;
            this.modifyConfig = modifyConfig;
            this.modifyArgs = modifyArgs;
            this.tableId = tableId;
            this.xmlTable = xmlTableId;
            this.isMerged = !!isMerged;
            let textArea = $(this.tableId);
            let xmlHeader = $('feed_xml_header');
            let xmlFooter = $('feed_xml_footer');

            if (textArea) {
                this.editor = CodeMirror.fromTextArea(textArea, {
                    mode: `amasty_feed${this.feedId}`,
                    alignCDATA: true,
                    lineNumbers: false,
                    viewportMargin: Infinity
                });

                this.editor.setSize(null, 400);
            }

            if (xmlHeader) {
                this.header = CodeMirror.fromTextArea(xmlHeader, {
                    mode: `amasty_feed${this.feedId}`,
                    alignCDATA: true,
                    lineNumbers: false,
                    viewportMargin: Infinity
                });

                this.header.setSize(null, 100);
            }

            if (xmlFooter) {
                this.footer = CodeMirror.fromTextArea(xmlFooter, {
                    mode: `amasty_feed${this.feedId}`,
                    alignCDATA: true,
                    lineNumbers: false,
                    viewportMargin: Infinity
                });

                this.footer.setSize(null, 100);
            }

            this.editor.on("cursorActivity", this.cursorActivity.bind(this));

            this.clearSelectedRow();
            this.initNavigator();
            this.initButtons();
            this.updateNavigator();

            setInterval(this.refresh.bind(this), 100);
        };

        initNavigator () {
            var container = document.querySelector(`[id="${this.xmlTable}"]`);

            this.navigator = {
                tag: container.down(`[id="${this.tableId}_tag"]`),
                attribute: container.down(`[id="${this.tableId}_attribute"]`),
                format: container.down(`[id="${this.tableId}_format"]`),
                optional: container.down(`[id="${this.tableId}_optional"]`),
                parent: container.down(`[id="${this.tableId}_parent"]`)
            }
        };

        initButtons () {
            var container = document.querySelector(`[id="${this.xmlTable}"]`);

            this.buttons.insert = container.down("#insert_button");
            this.buttons.update = container.down("#update_button");

            this.buttons.insert && this.buttons.insert.observe('click', this.inserRow.bind(this));
            this.buttons.update && this.buttons.update.observe('click', this.updateRow.bind(this));
        };

        getXMLRowFormat () {
            var ret = "";

            switch (this.navigator.insert_type.value) {
                case "images":
                    ret = this.navigator.insert_image_format.value;
                    break;
                default:
                    ret = this.navigator.insert_format.value;
                    break;
            }

            return ret;
        };

        getRow () {
            if (this.isMerged) {
                var tpl = `{:attribute${(this.navigator.parent && this.navigator.parent.value === 'yes') ? '|parent' : ''}}`;
            } else {
                var tpl = '{attribute=":attribute" format=":format" parent=":parent" optional=":optional" modify=":modify"}';
            }

            var modifyArr = [];
            for (var idx = 0; idx < this.modifyCount; idx++) {
                var modify = $('field_row_' + idx + '_modify');

                if (modify) {
                    var modifyValue = modify.value;
                    var args = [];

                    if (this.modifyArgs[modifyValue]) {
                        args = this.modifyArgs[modifyValue];
                    }

                    var modifyString = modify.value;

                    if (args.length > 0) {
                        modifyString += ':';
                        var values = [];

                        for (var argIdx = 0; argIdx < args.length; argIdx++) {
                            var arg = $('field_row_' + idx + '_arg' + argIdx);
                            if (arg) {
                                values.push(arg.value);
                            }
                        }
                        modifyString += values.join("^");
                    }
                    modifyArr.push(modifyString);
                }
            }

            var repl = {
                ':tag': this.navigator.tag && this.navigator.tag.value,
                ':attribute': this.navigator.attribute && this.navigator.attribute.value,
                ':format': this.navigator.format && this.navigator.format.value,
                ':optional': this.navigator.optional && this.navigator.optional.value,
                ':parent': this.navigator.parent && this.navigator.parent.value,
                ':modify': modifyArr.join("|")
            };

            $H(repl).each(function (item) {
                tpl = tpl.replace(eval('/' + item.key + '/g'), item.value);
            });

            if (this.navigator.tag && this.navigator.tag.value) {
                tpl = "<" + this.navigator.tag.value + ">" + tpl + "</" + this.navigator.tag.value + ">";
            }

            return tpl;
        };

        updateRow () {
            var originLine = this.editor.getLine(this.editor.getCursor().line);

            var line = this.getRow();

            this.editor.replaceRange(line, {
                line: this.editor.getCursor().line,
                ch: 0
            }, {
                line: this.editor.getCursor().line,
                ch: originLine.length
            });
        };

        inserRow () {
            if (this.isMerged) {
                this.editor.replaceSelection(this.getRow());
            } else {
                this.editor.replaceSelection(this.getRow() + '\n');
            }
        };

        cursorActivity () {
            this.clearSelectedRow();

            var line = this.editor.getLine(this.editor.getCursor().line);
            var tagMatch = line.match(/<([^>]+)>(.*?)<\/\1>/);

            if (tagMatch && tagMatch.length == 3) {
                this.selectedRow.tag = tagMatch[1];
                this.updateMode = true;
            }

            var varsRe = /(attribute|format|optional|parent)="(.*?)"/g;
            var varsArr;

            while ((varsArr = varsRe.exec(line)) != null) {
                if (varsArr && varsArr.length === 3) {
                    if (this.selectedRow[varsArr[1]] !== undefined) {
                        this.selectedRow[varsArr[1]] = varsArr[2];
                    }
                    this.updateMode = true;
                }
            }

            this.restoreModify(line);
            this.updateNavigator();
        };

        restoreModify (line) {
            var varsRe = /(modify)="(.*?)"/g;
            var varsArr = varsRe.exec(line);

            if (varsArr && varsArr.length == 3) {
                var modificators = varsArr[2].split("|");
                for (var idx in modificators) {
                    var modificator = modificators[idx];
                    if (typeof(modificator) != 'function') {
                        var modificatorArr = modificator.split(/:(.+)?/, 2);

                        var modify = modificatorArr[0];

                        if ($(this.modifyConfig).indexOf(modify) != -1) {
                            var rowIndex = this.modifyItem();
                            var select = $('field_row_' + rowIndex + '_modify');
                            if (select) {
                                select.value = modify;
                                this.changeModifier(select);
                            }

                            var args = [];

                            if (this.modifyArgs[select.getValue()]) {
                                args = this.modifyArgs[select.getValue()];
                            }

                            if (args.length > 0 && modificatorArr[1]) {
                                var values = modificatorArr[1].split("^");

                                for (var idx = 0; idx < args.length; idx++) {
                                    var id = select.id.replace("_modify", "_arg" + idx);
                                    var input = $(id);
                                    if (input && values[idx]) {
                                        input.value = values[idx];
                                    }
                                }
                            }
                        }
                    }
                }
            }
        };

        updateNavigator () {
            if (!this.isMerged) {
                this.setValue(this.navigator.tag, this.selectedRow.tag);
                this.setValue(this.navigator.format, this.selectedRow.format);
                this.setValue(this.navigator.optional, this.selectedRow.optional);
            }

            this.setValue(this.navigator.attribute, this.selectedRow.attribute);
            this.setValue(this.navigator.parent, this.selectedRow.parent);

            if (this.updateMode) {
                this.buttons.update && this.buttons.update.removeClassName('hidden');
                this.buttons.insert && this.buttons.insert.addClassName('hidden');
            } else {
                this.buttons.update && this.buttons.update.addClassName('hidden');
                this.buttons.insert && this.buttons.insert.removeClassName('hidden');
            }
        };

        setValue (input, value) {
            if (value !== null) {
                input.setValue(value)
            }
        };

        modifyItem (a) {
            var container = document.querySelector(`[id="${this.tableId}_modify_container"]`);
            var data = {
                index: this.modifyCount++
            };
            if (container) {
                Element.insert(container, {
                    bottom: this.modifyTemplate({
                        data: data
                    })
                });
            }
            return data.index;
        };

        changeModifier (select) {
            var td = select.up('td');

            var args = [];

            if (this.modifyArgs[select.getValue()]) {
                args = this.modifyArgs[select.getValue()];
            }

            td.select('input').each(function (input) {
                input.hide();
            });

            for (var idx = 0; idx < args.length; idx++) {
                var id = select.id.replace("_modify", "_arg" + idx);
                var input = td.down("#" + id);
                if (input) {
                    input.show();
                    input.setAttribute('placeholder', args[idx]);
                }
            }
        };

        deleteItem (event) {
            var tr = Event.findElement(event, 'tr');
            if (tr) {
                Element.select(tr, ['input', 'select']).each(function (element) {
                    element.remove();
                });
                Element.remove(tr);
            }
            return false;
        }
    };

    return xmlEditorMirror;
});

Spamworldpro Mini