all files / src/js/bs4/ ui.js

97.5% Statements 78/80
59.26% Branches 32/54
100% Functions 23/23
97.47% Lines 77/79
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216                           428× 783× 783× 783× 783× 783× 783×   428×   555×   127× 1398× 1398× 1398×   127×   508× 508× 2286× 2286× 2286× 2286× 2286× 18288× 18288× 18288×                   2286×   508× 508× 508×             390×     390×     390×                                       291× 291× 291×       99×                 4893× 4893×                                         4080× 4020× 4020×               15×               1054×                     96×                       96× 96×                                
(function(global){global.wrappers['/Users/lqez/Dev/summernote/src/js/bs4/ui.js']=[function(require,module,exports,__dirname,__filename){ "use strict";
exports.__esModule = true;
var jquery_1 = require("jquery");
var renderer_1 = require("../base/renderer");
var editor = renderer_1["default"].create('<div class="note-editor note-frame card"/>');
var toolbar = renderer_1["default"].create('<div class="note-toolbar card-header" role="toolbar"></div>');
var editingArea = renderer_1["default"].create('<div class="note-editing-area"/>');
var codable = renderer_1["default"].create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>');
var editable = renderer_1["default"].create('<div class="note-editable card-block" contentEditable="true" role="textbox" aria-multiline="true"/>');
var statusbar = renderer_1["default"].create([
    '<output class="note-status-output" aria-live="polite"/>',
    '<div class="note-statusbar" role="status">',
    '  <output class="note-status-output" aria-live="polite"></output>',
    '  <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">',
    '    <div class="note-icon-bar"/>',
    '    <div class="note-icon-bar"/>',
    '    <div class="note-icon-bar"/>',
    '  </div>',
    '</div>',
].join(''));
var airEditor = renderer_1["default"].create('<div class="note-editor"/>');
var airEditable = renderer_1["default"].create([
    '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>',
    '<output class="note-status-output" aria-live="polite"/>',
].join(''));
var buttonGroup = renderer_1["default"].create('<div class="note-btn-group btn-group">');
var dropdown = renderer_1["default"].create('<div class="dropdown-menu" role="list">', function ($node, options) {
    var markup = jquery_1["default"].isArray(options.items) ? options.items.map(function (item) {
        var value = (typeof item === 'string') ? item : (item.value || '');
        var content = options.template ? options.template(item) : item;
        var option = (typeof item === 'object') ? item.option : undefined;
        var dataValue = 'data-value="' + value + '"';
        var dataOption = (option !== undefined) ? ' data-option="' + option + '"' : '';
        return '<a class="dropdown-item" href="#" ' + (dataValue + dataOption) + ' role="listitem" aria-label="' + value + '">' + content + '</a>';
    }).join('') : options.items;
    $node.html(markup).attr({ 'aria-label': options.title });
});
var dropdownButtonContents = function (contents) {
    return contents;
};
var dropdownCheck = renderer_1["default"].create('<div class="dropdown-menu note-check" role="list">', function ($node, options) {
    var markup = jquery_1["default"].isArray(options.items) ? options.items.map(function (item) {
        var value = (typeof item === 'string') ? item : (item.value || '');
        var content = options.template ? options.template(item) : item;
        return '<a class="dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '">' + icon(options.checkClassName) + ' ' + content + '</a>';
    }).join('') : options.items;
    $node.html(markup).attr({ 'aria-label': options.title });
});
var palette = renderer_1["default"].create('<div class="note-color-palette"/>', function ($node, options) {
    var contents = [];
    for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {
        var eventName = options.eventName;
        var colors = options.colors[row];
        var colorsName = options.colorsName[row];
        var buttons = [];
        for (var col = 0, colSize = colors.length; col < colSize; col++) {
            var color = colors[col];
            var colorName = colorsName[col];
            buttons.push([
                '<button type="button" class="note-color-btn"',
                'style="background-color:', color, '" ',
                'data-event="', eventName, '" ',
                'data-value="', color, '" ',
                'title="', colorName, '" ',
                'aria-label="', colorName, '" ',
                'data-toggle="button" tabindex="-1"></button>',
            ].join(''));
        }
        contents.push('<div class="note-color-row">' + buttons.join('') + '</div>');
    }
    $node.html(contents.join(''));
    Eif (options.tooltip) {
        $node.find('.note-color-btn').tooltip({
            container: options.container,
            trigger: 'hover',
            placement: 'bottom'
        });
    }
});
var dialog = renderer_1["default"].create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function ($node, options) {
    Iif (options.fade) {
        $node.addClass('fade');
    }
    $node.attr({
        'aria-label': options.title
    });
    $node.html([
        '<div class="modal-dialog">',
        '  <div class="modal-content">',
        (options.title
            ? '    <div class="modal-header">' +
                '      <h4 class="modal-title">' + options.title + '</h4>' +
                '      <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">&times;</button>' +
                '    </div>' : ''),
        '    <div class="modal-body">' + options.body + '</div>',
        (options.footer
            ? '    <div class="modal-footer">' + options.footer + '</div>' : ''),
        '  </div>',
        '</div>',
    ].join(''));
});
var popover = renderer_1["default"].create([
    '<div class="note-popover popover in">',
    '  <div class="arrow"/>',
    '  <div class="popover-content note-children-container"/>',
    '</div>',
].join(''), function ($node, options) {
    var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';
    $node.addClass(direction);
    Iif (options.hideArrow) {
        $node.find('.arrow').hide();
    }
});
var checkbox = renderer_1["default"].create('<div class="form-check"></div>', function ($node, options) {
    $node.html([
        '<label class="form-check-label"' + (options.id ? ' for="' + options.id + '"' : '') + '>',
        ' <input role="checkbox" type="checkbox" class="form-check-input"' + (options.id ? ' id="' + options.id + '"' : ''),
        (options.checked ? ' checked' : ''),
        ' aria-label="' + (options.text ? options.text : '') + '"',
        ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>',
        ' ' + (options.text ? options.text : '') + '</label>',
    ].join(''));
});
var icon = function (iconClassName, tagName) {
    tagName = tagName || 'i';
    return '<' + tagName + ' class="' + iconClassName + '"/>';
};
var ui = {
    editor: editor,
    toolbar: toolbar,
    editingArea: editingArea,
    codable: codable,
    editable: editable,
    statusbar: statusbar,
    airEditor: airEditor,
    airEditable: airEditable,
    buttonGroup: buttonGroup,
    dropdown: dropdown,
    dropdownButtonContents: dropdownButtonContents,
    dropdownCheck: dropdownCheck,
    palette: palette,
    dialog: dialog,
    popover: popover,
    icon: icon,
    checkbox: checkbox,
    options: {},
    button: function ($node, options) {
        return renderer_1["default"].create('<button type="button" class="note-btn btn btn-light btn-sm" role="button" tabindex="-1">', function ($node, options) {
            Eif (options && options.tooltip) {
                $node.attr({
                    title: options.tooltip,
                    'aria-label': options.tooltip
                }).tooltip({
                    container: (options.container !== undefined) ? options.container : 'body',
                    trigger: 'hover',
                    placement: 'bottom'
                }).on('click', function (e) {
                    jquery_1["default"](e.currentTarget).tooltip('hide');
                });
            }
        })($node, options);
    },
    toggleBtn: function ($btn, isEnable) {
        $btn.toggleClass('disabled', !isEnable);
        $btn.attr('disabled', !isEnable);
    },
    toggleBtnActive: function ($btn, isActive) {
        $btn.toggleClass('active', isActive);
    },
    onDialogShown: function ($dialog, handler) {
        $dialog.one('shown.bs.modal', handler);
    },
    onDialogHidden: function ($dialog, handler) {
        $dialog.one('hidden.bs.modal', handler);
    },
    showDialog: function ($dialog) {
        $dialog.modal('show');
    },
    hideDialog: function ($dialog) {
        $dialog.modal('hide');
    },
    createLayout: function ($note, options) {
        var $editor = (options.airMode ? ui.airEditor([
            ui.editingArea([
                ui.airEditable(),
            ]),
        ]) : ui.editor([
            ui.toolbar(),
            ui.editingArea([
                ui.codable(),
                ui.editable(),
            ]),
            ui.statusbar(),
        ])).render();
        $editor.insertAfter($note);
        return {
            note: $note,
            editor: $editor,
            toolbar: $editor.find('.note-toolbar'),
            editingArea: $editor.find('.note-editing-area'),
            editable: $editor.find('.note-editable'),
            codable: $editor.find('.note-codable'),
            statusbar: $editor.find('.note-statusbar')
        };
    },
    removeLayout: function ($note, layoutInfo) {
        $note.html(layoutInfo.editable.html());
        layoutInfo.editor.remove();
        $note.show();
    }
};
exports["default"] = ui;
 
},'src/js/bs4/ui.js',{"jquery":"/Users/lqez/Dev/summernote/node_modules/jquery/dist/jquery.js","../base/renderer":"/Users/lqez/Dev/summernote/src/js/base/renderer.js"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1aS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUF1QjtBQUN2Qiw2Q0FBd0M7QUFFeEMsSUFBTSxNQUFNLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztBQUM3RSxJQUFNLE9BQU8sR0FBRyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0FBQy9GLElBQU0sV0FBVyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDeEUsSUFBTSxPQUFPLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUMsdUVBQXVFLENBQUMsQ0FBQztBQUN6RyxJQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyxxR0FBcUcsQ0FBQyxDQUFDO0FBQ3hJLElBQU0sU0FBUyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2hDLHlEQUF5RDtJQUN6RCw0Q0FBNEM7SUFDNUMsbUVBQW1FO0lBQ25FLG1HQUFtRztJQUNuRyxrQ0FBa0M7SUFDbEMsa0NBQWtDO0lBQ2xDLGtDQUFrQztJQUNsQyxVQUFVO0lBQ1YsUUFBUTtDQUNULENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFWixJQUFNLFNBQVMsR0FBRyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ2hFLElBQU0sV0FBVyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2xDLDBGQUEwRjtJQUMxRix5REFBeUQ7Q0FDMUQsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVaLElBQU0sV0FBVyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFFOUUsSUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUMseUNBQXlDLEVBQUUsVUFBUyxLQUFLLEVBQUUsT0FB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QUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxFQUFFLFVBQVMsS0FBSyxFQUFFLFVBQVU7UUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUVGLHFCQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgcmVuZGVyZXIgZnJvbSAnLi4vYmFzZS9yZW5kZXJlcic7XG5cbmNvbnN0IGVkaXRvciA9IHJlbmRlcmVyLmNyZWF0ZSgnPGRpdiBjbGFzcz1cIm5vdGUtZWRpdG9yIG5vdGUtZnJhbWUgY2FyZFwiLz4nKTtcbmNvbnN0IHRvb2xiYXIgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJub3RlLXRvb2xiYXIgY2FyZC1oZWFkZXJcIiByb2xlPVwidG9vbGJhclwiPjwvZGl2PicpO1xuY29uc3QgZWRpdGluZ0FyZWEgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJub3RlLWVkaXRpbmctYXJlYVwiLz4nKTtcbmNvbnN0IGNvZGFibGUgPSByZW5kZXJlci5jcmVhdGUoJzx0ZXh0YXJlYSBjbGFzcz1cIm5vdGUtY29kYWJsZVwiIHJvbGU9XCJ0ZXh0Ym94XCIgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCIvPicpO1xuY29uc3QgZWRpdGFibGUgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJub3RlLWVkaXRhYmxlIGNhcmQtYmxvY2tcIiBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCIgcm9sZT1cInRleHRib3hcIiBhcmlhLW11bHRpbGluZT1cInRydWVcIi8+Jyk7XG5jb25zdCBzdGF0dXNiYXIgPSByZW5kZXJlci5jcmVhdGUoW1xuICAnPG91dHB1dCBjbGFzcz1cIm5vdGUtc3RhdHVzLW91dHB1dFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiLz4nLFxuICAnPGRpdiBjbGFzcz1cIm5vdGUtc3RhdHVzYmFyXCIgcm9sZT1cInN0YXR1c1wiPicsXG4gICcgIDxvdXRwdXQgY2xhc3M9XCJub3RlLXN0YXR1cy1vdXRwdXRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L291dHB1dD4nLFxuICAnICA8ZGl2IGNsYXNzPVwibm90ZS1yZXNpemViYXJcIiByb2xlPVwic2VwZXJhdG9yXCIgYXJpYS1vcmllbnRhdGlvbj1cImhvcml6b250YWxcIiBhcmlhLWxhYmVsPVwiUmVzaXplXCI+JyxcbiAgJyAgICA8ZGl2IGNsYXNzPVwibm90ZS1pY29uLWJhclwiLz4nLFxuICAnICAgIDxkaXYgY2xhc3M9XCJub3RlLWljb24tYmFyXCIvPicsXG4gICcgICAgPGRpdiBjbGFzcz1cIm5vdGUtaWNvbi1iYXJcIi8+JyxcbiAgJyAgPC9kaXY+JyxcbiAgJzwvZGl2PicsXG5dLmpvaW4oJycpKTtcblxuY29uc3QgYWlyRWRpdG9yID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwibm90ZS1lZGl0b3JcIi8+Jyk7XG5jb25zdCBhaXJFZGl0YWJsZSA9IHJlbmRlcmVyLmNyZWF0ZShbXG4gICc8ZGl2IGNsYXNzPVwibm90ZS1lZGl0YWJsZVwiIGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIiByb2xlPVwidGV4dGJveFwiIGFyaWEtbXVsdGlsaW5lPVwidHJ1ZVwiLz4nLFxuICAnPG91dHB1dCBjbGFzcz1cIm5vdGUtc3RhdHVzLW91dHB1dFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiLz4nLFxuXS5qb2luKCcnKSk7XG5cbmNvbnN0IGJ1dHRvbkdyb3VwID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwibm90ZS1idG4tZ3JvdXAgYnRuLWdyb3VwXCI+Jyk7XG5cbmNvbnN0IGRyb3Bkb3duID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJsaXN0XCI+JywgZnVuY3Rpb24oJG5vZGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgbWFya3VwID0gJC5pc0FycmF5KG9wdGlvbnMuaXRlbXMpID8gb3B0aW9ucy5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgIGNvbnN0IHZhbHVlID0gKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykgPyBpdGVtIDogKGl0ZW0udmFsdWUgfHwgJycpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBvcHRpb25zLnRlbXBsYXRlID8gb3B0aW9ucy50ZW1wbGF0ZShpdGVtKSA6IGl0ZW07XG4gICAgY29uc3Qgb3B0aW9uID0gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JykgPyBpdGVtLm9wdGlvbiA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGRhdGFWYWx1ZSA9ICdkYXRhLXZhbHVlPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICBjb25zdCBkYXRhT3B0aW9uID0gKG9wdGlvbiAhPT0gdW5kZWZpbmVkKSA/ICcgZGF0YS1vcHRpb249XCInICsgb3B0aW9uICsgJ1wiJyA6ICcnO1xuICAgIHJldHVybiAnPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIiAnICsgKGRhdGFWYWx1ZSArIGRhdGFPcHRpb24pICsgJyByb2xlPVwibGlzdGl0ZW1cIiBhcmlhLWxhYmVsPVwiJyArIHZhbHVlICsgJ1wiPicgKyBjb250ZW50ICsgJzwvYT4nO1xuICB9KS5qb2luKCcnKSA6IG9wdGlvbnMuaXRlbXM7XG5cbiAgJG5vZGUuaHRtbChtYXJrdXApLmF0dHIoeyAnYXJpYS1sYWJlbCc6IG9wdGlvbnMudGl0bGUgfSk7XG59KTtcblxuY29uc3QgZHJvcGRvd25CdXR0b25Db250ZW50cyA9IGZ1bmN0aW9uKGNvbnRlbnRzKSB7XG4gIHJldHVybiBjb250ZW50cztcbn07XG5cbmNvbnN0IGRyb3Bkb3duQ2hlY2sgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG5vdGUtY2hlY2tcIiByb2xlPVwibGlzdFwiPicsIGZ1bmN0aW9uKCRub2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG1hcmt1cCA9ICQuaXNBcnJheShvcHRpb25zLml0ZW1zKSA/IG9wdGlvbnMuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpID8gaXRlbSA6IChpdGVtLnZhbHVlIHx8ICcnKTtcbiAgICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy50ZW1wbGF0ZSA/IG9wdGlvbnMudGVtcGxhdGUoaXRlbSkgOiBpdGVtO1xuICAgIHJldHVybiAnPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIiBkYXRhLXZhbHVlPVwiJyArIHZhbHVlICsgJ1wiIHJvbGU9XCJsaXN0aXRlbVwiIGFyaWEtbGFiZWw9XCInICsgaXRlbSArICdcIj4nICsgaWNvbihvcHRpb25zLmNoZWNrQ2xhc3NOYW1lKSArICcgJyArIGNvbnRlbnQgKyAnPC9hPic7XG4gIH0pLmpvaW4oJycpIDogb3B0aW9ucy5pdGVtcztcbiAgJG5vZGUuaHRtbChtYXJrdXApLmF0dHIoeyAnYXJpYS1sYWJlbCc6IG9wdGlvbnMudGl0bGUgfSk7XG59KTtcblxuY29uc3QgcGFsZXR0ZSA9IHJlbmRlcmVyLmNyZWF0ZSgnPGRpdiBjbGFzcz1cIm5vdGUtY29sb3ItcGFsZXR0ZVwiLz4nLCBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBjb250ZW50cyA9IFtdO1xuICBmb3IgKGxldCByb3cgPSAwLCByb3dTaXplID0gb3B0aW9ucy5jb2xvcnMubGVuZ3RoOyByb3cgPCByb3dTaXplOyByb3crKykge1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IG9wdGlvbnMuZXZlbnROYW1lO1xuICAgIGNvbnN0IGNvbG9ycyA9IG9wdGlvbnMuY29sb3JzW3Jvd107XG4gICAgY29uc3QgY29sb3JzTmFtZSA9IG9wdGlvbnMuY29sb3JzTmFtZVtyb3ddO1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBbXTtcbiAgICBmb3IgKGxldCBjb2wgPSAwLCBjb2xTaXplID0gY29sb3JzLmxlbmd0aDsgY29sIDwgY29sU2l6ZTsgY29sKyspIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JzW2NvbF07XG4gICAgICBjb25zdCBjb2xvck5hbWUgPSBjb2xvcnNOYW1lW2NvbF07XG4gICAgICBidXR0b25zLnB1c2goW1xuICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3RlLWNvbG9yLWJ0blwiJyxcbiAgICAgICAgJ3N0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonLCBjb2xvciwgJ1wiICcsXG4gICAgICAgICdkYXRhLWV2ZW50PVwiJywgZXZlbnROYW1lLCAnXCIgJyxcbiAgICAgICAgJ2RhdGEtdmFsdWU9XCInLCBjb2xvciwgJ1wiICcsXG4gICAgICAgICd0aXRsZT1cIicsIGNvbG9yTmFtZSwgJ1wiICcsXG4gICAgICAgICdhcmlhLWxhYmVsPVwiJywgY29sb3JOYW1lLCAnXCIgJyxcbiAgICAgICAgJ2RhdGEtdG9nZ2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiPjwvYnV0dG9uPicsXG4gICAgICBdLmpvaW4oJycpKTtcbiAgICB9XG4gICAgY29udGVudHMucHVzaCgnPGRpdiBjbGFzcz1cIm5vdGUtY29sb3Itcm93XCI+JyArIGJ1dHRvbnMuam9pbignJykgKyAnPC9kaXY+Jyk7XG4gIH1cbiAgJG5vZGUuaHRtbChjb250ZW50cy5qb2luKCcnKSk7XG5cbiAgaWYgKG9wdGlvbnMudG9vbHRpcCkge1xuICAgICRub2RlLmZpbmQoJy5ub3RlLWNvbG9yLWJ0bicpLnRvb2x0aXAoe1xuICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgIHRyaWdnZXI6ICdob3ZlcicsXG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgIH0pO1xuICB9XG59KTtcblxuY29uc3QgZGlhbG9nID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwibW9kYWxcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIi8+JywgZnVuY3Rpb24oJG5vZGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuZmFkZSkge1xuICAgICRub2RlLmFkZENsYXNzKCdmYWRlJyk7XG4gIH1cbiAgJG5vZGUuYXR0cih7XG4gICAgJ2FyaWEtbGFiZWwnOiBvcHRpb25zLnRpdGxlLFxuICB9KTtcbiAgJG5vZGUuaHRtbChbXG4gICAgJzxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj4nLFxuICAgICcgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+JyxcbiAgICAob3B0aW9ucy50aXRsZVxuICAgICAgPyAnICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj4nICtcbiAgICAnICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj4nICsgb3B0aW9ucy50aXRsZSArICc8L2g0PicgK1xuICAgICcgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9idXR0b24+JyArXG4gICAgJyAgICA8L2Rpdj4nIDogJydcbiAgICApLFxuICAgICcgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj4nICsgb3B0aW9ucy5ib2R5ICsgJzwvZGl2PicsXG4gICAgKG9wdGlvbnMuZm9vdGVyXG4gICAgICA/ICcgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPicgKyBvcHRpb25zLmZvb3RlciArICc8L2Rpdj4nIDogJydcbiAgICApLFxuICAgICcgIDwvZGl2PicsXG4gICAgJzwvZGl2PicsXG4gIF0uam9pbignJykpO1xufSk7XG5cbmNvbnN0IHBvcG92ZXIgPSByZW5kZXJlci5jcmVhdGUoW1xuICAnPGRpdiBjbGFzcz1cIm5vdGUtcG9wb3ZlciBwb3BvdmVyIGluXCI+JyxcbiAgJyAgPGRpdiBjbGFzcz1cImFycm93XCIvPicsXG4gICcgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnQgbm90ZS1jaGlsZHJlbi1jb250YWluZXJcIi8+JyxcbiAgJzwvZGl2PicsXG5dLmpvaW4oJycpLCBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBkaXJlY3Rpb24gPSB0eXBlb2Ygb3B0aW9ucy5kaXJlY3Rpb24gIT09ICd1bmRlZmluZWQnID8gb3B0aW9ucy5kaXJlY3Rpb24gOiAnYm90dG9tJztcblxuICAkbm9kZS5hZGRDbGFzcyhkaXJlY3Rpb24pO1xuXG4gIGlmIChvcHRpb25zLmhpZGVBcnJvdykge1xuICAgICRub2RlLmZpbmQoJy5hcnJvdycpLmhpZGUoKTtcbiAgfVxufSk7XG5cbmNvbnN0IGNoZWNrYm94ID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPjwvZGl2PicsIGZ1bmN0aW9uKCRub2RlLCBvcHRpb25zKSB7XG4gICRub2RlLmh0bWwoW1xuICAgICc8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCInICsgKG9wdGlvbnMuaWQgPyAnIGZvcj1cIicgKyBvcHRpb25zLmlkICsgJ1wiJyA6ICcnKSArICc+JyxcbiAgICAnIDxpbnB1dCByb2xlPVwiY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIicgKyAob3B0aW9ucy5pZCA/ICcgaWQ9XCInICsgb3B0aW9ucy5pZCArICdcIicgOiAnJyksXG4gICAgKG9wdGlvbnMuY2hlY2tlZCA/ICcgY2hlY2tlZCcgOiAnJyksXG4gICAgJyBhcmlhLWxhYmVsPVwiJyArIChvcHRpb25zLnRleHQgPyBvcHRpb25zLnRleHQgOiAnJykgKyAnXCInLFxuICAgICcgYXJpYS1jaGVja2VkPVwiJyArIChvcHRpb25zLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnKSArICdcIi8+JyxcbiAgICAnICcgKyAob3B0aW9ucy50ZXh0ID8gb3B0aW9ucy50ZXh0IDogJycpICsgJzwvbGFiZWw+JyxcbiAgXS5qb2luKCcnKSk7XG59KTtcblxuY29uc3QgaWNvbiA9IGZ1bmN0aW9uKGljb25DbGFzc05hbWUsIHRhZ05hbWUpIHtcbiAgdGFnTmFtZSA9IHRhZ05hbWUgfHwgJ2knO1xuICByZXR1cm4gJzwnICsgdGFnTmFtZSArICcgY2xhc3M9XCInICsgaWNvbkNsYXNzTmFtZSArICdcIi8+Jztcbn07XG5cbmNvbnN0IHVpID0ge1xuICBlZGl0b3I6IGVkaXRvcixcbiAgdG9vbGJhcjogdG9vbGJhcixcbiAgZWRpdGluZ0FyZWE6IGVkaXRpbmdBcmVhLFxuICBjb2RhYmxlOiBjb2RhYmxlLFxuICBlZGl0YWJsZTogZWRpdGFibGUsXG4gIHN0YXR1c2Jhcjogc3RhdHVzYmFyLFxuICBhaXJFZGl0b3I6IGFpckVkaXRvcixcbiAgYWlyRWRpdGFibGU6IGFpckVkaXRhYmxlLFxuICBidXR0b25Hcm91cDogYnV0dG9uR3JvdXAsXG4gIGRyb3Bkb3duOiBkcm9wZG93bixcbiAgZHJvcGRvd25CdXR0b25Db250ZW50czogZHJvcGRvd25CdXR0b25Db250ZW50cyxcbiAgZHJvcGRvd25DaGVjazogZHJvcGRvd25DaGVjayxcbiAgcGFsZXR0ZTogcGFsZXR0ZSxcbiAgZGlhbG9nOiBkaWFsb2csXG4gIHBvcG92ZXI6IHBvcG92ZXIsXG4gIGljb246IGljb24sXG4gIGNoZWNrYm94OiBjaGVja2JveCxcbiAgb3B0aW9uczoge30sXG5cbiAgYnV0dG9uOiBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiByZW5kZXJlci5jcmVhdGUoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibm90ZS1idG4gYnRuIGJ0bi1saWdodCBidG4tc21cIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiPicsIGZ1bmN0aW9uKCRub2RlLCBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgJG5vZGUuYXR0cih7XG4gICAgICAgICAgdGl0bGU6IG9wdGlvbnMudG9vbHRpcCxcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IG9wdGlvbnMudG9vbHRpcCxcbiAgICAgICAgfSkudG9vbHRpcCh7XG4gICAgICAgICAgY29udGFpbmVyOiAob3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkgPyBvcHRpb25zLmNvbnRhaW5lciA6ICdib2R5JyxcbiAgICAgICAgICB0cmlnZ2VyOiAnaG92ZXInLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgIH0pLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLnRvb2x0aXAoJ2hpZGUnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkoJG5vZGUsIG9wdGlvbnMpO1xuICB9LFxuXG4gIHRvZ2dsZUJ0bjogZnVuY3Rpb24oJGJ0biwgaXNFbmFibGUpIHtcbiAgICAkYnRuLnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcsICFpc0VuYWJsZSk7XG4gICAgJGJ0bi5hdHRyKCdkaXNhYmxlZCcsICFpc0VuYWJsZSk7XG4gIH0sXG5cbiAgdG9nZ2xlQnRuQWN0aXZlOiBmdW5jdGlvbigkYnRuLCBpc0FjdGl2ZSkge1xuICAgICRidG4udG9nZ2xlQ2xhc3MoJ2FjdGl2ZScsIGlzQWN0aXZlKTtcbiAgfSxcblxuICBvbkRpYWxvZ1Nob3duOiBmdW5jdGlvbigkZGlhbG9nLCBoYW5kbGVyKSB7XG4gICAgJGRpYWxvZy5vbmUoJ3Nob3duLmJzLm1vZGFsJywgaGFuZGxlcik7XG4gIH0sXG5cbiAgb25EaWFsb2dIaWRkZW46IGZ1bmN0aW9uKCRkaWFsb2csIGhhbmRsZXIpIHtcbiAgICAkZGlhbG9nLm9uZSgnaGlkZGVuLmJzLm1vZGFsJywgaGFuZGxlcik7XG4gIH0sXG5cbiAgc2hvd0RpYWxvZzogZnVuY3Rpb24oJGRpYWxvZykge1xuICAgICRkaWFsb2cubW9kYWwoJ3Nob3cnKTtcbiAgfSxcblxuICBoaWRlRGlhbG9nOiBmdW5jdGlvbigkZGlhbG9nKSB7XG4gICAgJGRpYWxvZy5tb2RhbCgnaGlkZScpO1xuICB9LFxuXG4gIGNyZWF0ZUxheW91dDogZnVuY3Rpb24oJG5vdGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCAkZWRpdG9yID0gKG9wdGlvbnMuYWlyTW9kZSA/IHVpLmFpckVkaXRvcihbXG4gICAgICB1aS5lZGl0aW5nQXJlYShbXG4gICAgICAgIHVpLmFpckVkaXRhYmxlKCksXG4gICAgICBdKSxcbiAgICBdKSA6IHVpLmVkaXRvcihbXG4gICAgICB1aS50b29sYmFyKCksXG4gICAgICB1aS5lZGl0aW5nQXJlYShbXG4gICAgICAgIHVpLmNvZGFibGUoKSxcbiAgICAgICAgdWkuZWRpdGFibGUoKSxcbiAgICAgIF0pLFxuICAgICAgdWkuc3RhdHVzYmFyKCksXG4gICAgXSkpLnJlbmRlcigpO1xuXG4gICAgJGVkaXRvci5pbnNlcnRBZnRlcigkbm90ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm90ZTogJG5vdGUsXG4gICAgICBlZGl0b3I6ICRlZGl0b3IsXG4gICAgICB0b29sYmFyOiAkZWRpdG9yLmZpbmQoJy5ub3RlLXRvb2xiYXInKSxcbiAgICAgIGVkaXRpbmdBcmVhOiAkZWRpdG9yLmZpbmQoJy5ub3RlLWVkaXRpbmctYXJlYScpLFxuICAgICAgZWRpdGFibGU6ICRlZGl0b3IuZmluZCgnLm5vdGUtZWRpdGFibGUnKSxcbiAgICAgIGNvZGFibGU6ICRlZGl0b3IuZmluZCgnLm5vdGUtY29kYWJsZScpLFxuICAgICAgc3RhdHVzYmFyOiAkZWRpdG9yLmZpbmQoJy5ub3RlLXN0YXR1c2JhcicpLFxuICAgIH07XG4gIH0sXG5cbiAgcmVtb3ZlTGF5b3V0OiBmdW5jdGlvbigkbm90ZSwgbGF5b3V0SW5mbykge1xuICAgICRub3RlLmh0bWwobGF5b3V0SW5mby5lZGl0YWJsZS5odG1sKCkpO1xuICAgIGxheW91dEluZm8uZWRpdG9yLnJlbW92ZSgpO1xuICAgICRub3RlLnNob3coKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVpO1xuIl19