all files / src/js/bs3/ ui.js

2.5% Statements 2/80
0% Branches 0/52
4.35% Functions 1/23
1.27% Lines 1/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                                                                                                                                                                                                                                                                                                                                                                                                                                            
(function(global){global.wrappers['/Users/lqez/Dev/summernote/src/js/bs3/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 panel panel-default"/>');
var toolbar = renderer_1["default"].create('<div class="note-toolbar panel-heading" role="toolbar"></div></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" 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">',
    '  <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('<ul 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 '<li role="listitem" aria-label="' + value + '"><a href="#" ' + (dataValue + dataOption) + '>' + content + '</a></li>';
    }).join('') : options.items;
    $node.html(markup).attr({ 'aria-label': options.title });
});
var dropdownButtonContents = function (contents, options) {
    return contents + ' ' + icon(options.icons.caret, 'span');
};
var dropdownCheck = renderer_1["default"].create('<ul 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 '<li role="listitem" aria-label="' + item + '"><a href="#" data-value="' + value + '">' + icon(options.checkClassName) + ' ' + content + '</a></li>';
    }).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(''));
    if (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) {
    if (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">' +
                '      <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">&times;</button>' +
                '      <h4 class="modal-title">' + options.title + '</h4>' +
                '    </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);
    if (options.hideArrow) {
        $node.find('.arrow').hide();
    }
});
var checkbox = renderer_1["default"].create('<div class="checkbox"></div>', function ($node, options) {
    $node.html([
        '<label' + (options.id ? ' for="' + options.id + '"' : '') + '>',
        ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''),
        (options.checked ? ' checked' : ''),
        ' 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,
    checkbox: checkbox,
    icon: icon,
    options: {},
    button: function ($node, options) {
        return renderer_1["default"].create('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">', function ($node, options) {
            if (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/bs3/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1aS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUF1QjtBQUN2Qiw2Q0FBd0M7QUFFeEMsSUFBTSxNQUFNLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUMsMkRBQTJELENBQUMsQ0FBQztBQUM1RixJQUFNLE9BQU8sR0FBRyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQ3ZHLElBQU0sV0FBVyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDeEUsSUFBTSxPQUFPLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUMsdUVBQXVFLENBQUMsQ0FBQztBQUN6RyxJQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLE1BQU0sQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO0FBQzdILElBQU0sU0FBUyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2hDLHlEQUF5RDtJQUN6RCw0Q0FBNEM7SUFDNUMsbUdBQW1HO0lBQ25HLGtDQUFrQztJQUNsQyxrQ0FBa0M7SUFDbEMsa0NBQWtDO0lBQ2xDLFVBQVU7SUFDVixRQUFRO0NBQ1QsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVaLElBQU0sU0FBUyxHQUFHLHFCQUFRLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDaEUsSUFBTSxXQUFXLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUM7SUFDbEMsMEZBQTBGO0lBQzFGLHlEQUF5RDtDQUMxRCxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRVosSUFBTSxXQUFXLEdBQUcscUJBQVEsQ0FBQyxNQUFNLENBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUU5RSxJQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyx3Q0FBd0MsRUFBRSxVQUFTLEtBQUssRUFBRSxPQUFPO0lBQ2hHLElBQU0s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WUFBWSxFQUFFLFVBQVMsS0FBSyxFQUFFLFVBQVU7UUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUVGLHFCQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgcmVuZGVyZXIgZnJvbSAnLi4vYmFzZS9yZW5kZXJlcic7XG5cbmNvbnN0IGVkaXRvciA9IHJlbmRlcmVyLmNyZWF0ZSgnPGRpdiBjbGFzcz1cIm5vdGUtZWRpdG9yIG5vdGUtZnJhbWUgcGFuZWwgcGFuZWwtZGVmYXVsdFwiLz4nKTtcbmNvbnN0IHRvb2xiYXIgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJub3RlLXRvb2xiYXIgcGFuZWwtaGVhZGluZ1wiIHJvbGU9XCJ0b29sYmFyXCI+PC9kaXY+PC9kaXY+Jyk7XG5jb25zdCBlZGl0aW5nQXJlYSA9IHJlbmRlcmVyLmNyZWF0ZSgnPGRpdiBjbGFzcz1cIm5vdGUtZWRpdGluZy1hcmVhXCIvPicpO1xuY29uc3QgY29kYWJsZSA9IHJlbmRlcmVyLmNyZWF0ZSgnPHRleHRhcmVhIGNsYXNzPVwibm90ZS1jb2RhYmxlXCIgcm9sZT1cInRleHRib3hcIiBhcmlhLW11bHRpbGluZT1cInRydWVcIi8+Jyk7XG5jb25zdCBlZGl0YWJsZSA9IHJlbmRlcmVyLmNyZWF0ZSgnPGRpdiBjbGFzcz1cIm5vdGUtZWRpdGFibGVcIiBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCIgcm9sZT1cInRleHRib3hcIiBhcmlhLW11bHRpbGluZT1cInRydWVcIi8+Jyk7XG5jb25zdCBzdGF0dXNiYXIgPSByZW5kZXJlci5jcmVhdGUoW1xuICAnPG91dHB1dCBjbGFzcz1cIm5vdGUtc3RhdHVzLW91dHB1dFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiLz4nLFxuICAnPGRpdiBjbGFzcz1cIm5vdGUtc3RhdHVzYmFyXCIgcm9sZT1cInN0YXR1c1wiPicsXG4gICcgIDxkaXYgY2xhc3M9XCJub3RlLXJlc2l6ZWJhclwiIHJvbGU9XCJzZXBlcmF0b3JcIiBhcmlhLW9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIGFyaWEtbGFiZWw9XCJSZXNpemVcIj4nLFxuICAnICAgIDxkaXYgY2xhc3M9XCJub3RlLWljb24tYmFyXCIvPicsXG4gICcgICAgPGRpdiBjbGFzcz1cIm5vdGUtaWNvbi1iYXJcIi8+JyxcbiAgJyAgICA8ZGl2IGNsYXNzPVwibm90ZS1pY29uLWJhclwiLz4nLFxuICAnICA8L2Rpdj4nLFxuICAnPC9kaXY+Jyxcbl0uam9pbignJykpO1xuXG5jb25zdCBhaXJFZGl0b3IgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJub3RlLWVkaXRvclwiLz4nKTtcbmNvbnN0IGFpckVkaXRhYmxlID0gcmVuZGVyZXIuY3JlYXRlKFtcbiAgJzxkaXYgY2xhc3M9XCJub3RlLWVkaXRhYmxlXCIgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiIHJvbGU9XCJ0ZXh0Ym94XCIgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCIvPicsXG4gICc8b3V0cHV0IGNsYXNzPVwibm90ZS1zdGF0dXMtb3V0cHV0XCIgYXJpYS1saXZlPVwicG9saXRlXCIvPicsXG5dLmpvaW4oJycpKTtcblxuY29uc3QgYnV0dG9uR3JvdXAgPSByZW5kZXJlci5jcmVhdGUoJzxkaXYgY2xhc3M9XCJub3RlLWJ0bi1ncm91cCBidG4tZ3JvdXBcIj4nKTtcblxuY29uc3QgZHJvcGRvd24gPSByZW5kZXJlci5jcmVhdGUoJzx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibGlzdFwiPicsIGZ1bmN0aW9uKCRub2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG1hcmt1cCA9ICQuaXNBcnJheShvcHRpb25zLml0ZW1zKSA/IG9wdGlvbnMuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpID8gaXRlbSA6IChpdGVtLnZhbHVlIHx8ICcnKTtcbiAgICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy50ZW1wbGF0ZSA/IG9wdGlvbnMudGVtcGxhdGUoaXRlbSkgOiBpdGVtO1xuICAgIGNvbnN0IG9wdGlvbiA9ICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpID8gaXRlbS5vcHRpb24gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkYXRhVmFsdWUgPSAnZGF0YS12YWx1ZT1cIicgKyB2YWx1ZSArICdcIic7XG4gICAgY29uc3QgZGF0YU9wdGlvbiA9IChvcHRpb24gIT09IHVuZGVmaW5lZCkgPyAnIGRhdGEtb3B0aW9uPVwiJyArIG9wdGlvbiArICdcIicgOiAnJztcbiAgICByZXR1cm4gJzxsaSByb2xlPVwibGlzdGl0ZW1cIiBhcmlhLWxhYmVsPVwiJyArIHZhbHVlICsgJ1wiPjxhIGhyZWY9XCIjXCIgJyArIChkYXRhVmFsdWUgKyBkYXRhT3B0aW9uKSArICc+JyArIGNvbnRlbnQgKyAnPC9hPjwvbGk+JztcbiAgfSkuam9pbignJykgOiBvcHRpb25zLml0ZW1zO1xuXG4gICRub2RlLmh0bWwobWFya3VwKS5hdHRyKHsgJ2FyaWEtbGFiZWwnOiBvcHRpb25zLnRpdGxlIH0pO1xufSk7XG5cbmNvbnN0IGRyb3Bkb3duQnV0dG9uQ29udGVudHMgPSBmdW5jdGlvbihjb250ZW50cywgb3B0aW9ucykge1xuICByZXR1cm4gY29udGVudHMgKyAnICcgKyBpY29uKG9wdGlvbnMuaWNvbnMuY2FyZXQsICdzcGFuJyk7XG59O1xuXG5jb25zdCBkcm9wZG93bkNoZWNrID0gcmVuZGVyZXIuY3JlYXRlKCc8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IG5vdGUtY2hlY2tcIiByb2xlPVwibGlzdFwiPicsIGZ1bmN0aW9uKCRub2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG1hcmt1cCA9ICQuaXNBcnJheShvcHRpb25zLml0ZW1zKSA/IG9wdGlvbnMuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpID8gaXRlbSA6IChpdGVtLnZhbHVlIHx8ICcnKTtcbiAgICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy50ZW1wbGF0ZSA/IG9wdGlvbnMudGVtcGxhdGUoaXRlbSkgOiBpdGVtO1xuICAgIHJldHVybiAnPGxpIHJvbGU9XCJsaXN0aXRlbVwiIGFyaWEtbGFiZWw9XCInICsgaXRlbSArICdcIj48YSBocmVmPVwiI1wiIGRhdGEtdmFsdWU9XCInICsgdmFsdWUgKyAnXCI+JyArIGljb24ob3B0aW9ucy5jaGVja0NsYXNzTmFtZSkgKyAnICcgKyBjb250ZW50ICsgJzwvYT48L2xpPic7XG4gIH0pLmpvaW4oJycpIDogb3B0aW9ucy5pdGVtcztcbiAgJG5vZGUuaHRtbChtYXJrdXApLmF0dHIoeyAnYXJpYS1sYWJlbCc6IG9wdGlvbnMudGl0bGUgfSk7XG59KTtcblxuY29uc3QgcGFsZXR0ZSA9IHJlbmRlcmVyLmNyZWF0ZSgnPGRpdiBjbGFzcz1cIm5vdGUtY29sb3ItcGFsZXR0ZVwiLz4nLCBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBjb250ZW50cyA9IFtdO1xuICBmb3IgKGxldCByb3cgPSAwLCByb3dTaXplID0gb3B0aW9ucy5jb2xvcnMubGVuZ3RoOyByb3cgPCByb3dTaXplOyByb3crKykge1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IG9wdGlvbnMuZXZlbnROYW1lO1xuICAgIGNvbnN0IGNvbG9ycyA9IG9wdGlvbnMuY29sb3JzW3Jvd107XG4gICAgY29uc3QgY29sb3JzTmFtZSA9IG9wdGlvbnMuY29sb3JzTmFtZVtyb3ddO1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBbXTtcbiAgICBmb3IgKGxldCBjb2wgPSAwLCBjb2xTaXplID0gY29sb3JzLmxlbmd0aDsgY29sIDwgY29sU2l6ZTsgY29sKyspIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JzW2NvbF07XG4gICAgICBjb25zdCBjb2xvck5hbWUgPSBjb2xvcnNOYW1lW2NvbF07XG4gICAgICBidXR0b25zLnB1c2goW1xuICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3RlLWNvbG9yLWJ0blwiJyxcbiAgICAgICAgJ3N0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonLCBjb2xvciwgJ1wiICcsXG4gICAgICAgICdkYXRhLWV2ZW50PVwiJywgZXZlbnROYW1lLCAnXCIgJyxcbiAgICAgICAgJ2RhdGEtdmFsdWU9XCInLCBjb2xvciwgJ1wiICcsXG4gICAgICAgICd0aXRsZT1cIicsIGNvbG9yTmFtZSwgJ1wiICcsXG4gICAgICAgICdhcmlhLWxhYmVsPVwiJywgY29sb3JOYW1lLCAnXCIgJyxcbiAgICAgICAgJ2RhdGEtdG9nZ2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiPjwvYnV0dG9uPicsXG4gICAgICBdLmpvaW4oJycpKTtcbiAgICB9XG4gICAgY29udGVudHMucHVzaCgnPGRpdiBjbGFzcz1cIm5vdGUtY29sb3Itcm93XCI+JyArIGJ1dHRvbnMuam9pbignJykgKyAnPC9kaXY+Jyk7XG4gIH1cbiAgJG5vZGUuaHRtbChjb250ZW50cy5qb2luKCcnKSk7XG5cbiAgaWYgKG9wdGlvbnMudG9vbHRpcCkge1xuICAgICRub2RlLmZpbmQoJy5ub3RlLWNvbG9yLWJ0bicpLnRvb2x0aXAoe1xuICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgIHRyaWdnZXI6ICdob3ZlcicsXG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgIH0pO1xuICB9XG59KTtcblxuY29uc3QgZGlhbG9nID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwibW9kYWxcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIi8+JywgZnVuY3Rpb24oJG5vZGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuZmFkZSkge1xuICAgICRub2RlLmFkZENsYXNzKCdmYWRlJyk7XG4gIH1cbiAgJG5vZGUuYXR0cih7XG4gICAgJ2FyaWEtbGFiZWwnOiBvcHRpb25zLnRpdGxlLFxuICB9KTtcbiAgJG5vZGUuaHRtbChbXG4gICAgJzxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj4nLFxuICAgICcgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+JyxcbiAgICAob3B0aW9ucy50aXRsZVxuICAgICAgPyAnICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj4nICtcbiAgICAnICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvYnV0dG9uPicgK1xuICAgICcgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPicgKyBvcHRpb25zLnRpdGxlICsgJzwvaDQ+JyArXG4gICAgJyAgICA8L2Rpdj4nIDogJydcbiAgICApLFxuICAgICcgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj4nICsgb3B0aW9ucy5ib2R5ICsgJzwvZGl2PicsXG4gICAgKG9wdGlvbnMuZm9vdGVyXG4gICAgICA/ICcgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPicgKyBvcHRpb25zLmZvb3RlciArICc8L2Rpdj4nIDogJydcbiAgICApLFxuICAgICcgIDwvZGl2PicsXG4gICAgJzwvZGl2PicsXG4gIF0uam9pbignJykpO1xufSk7XG5cbmNvbnN0IHBvcG92ZXIgPSByZW5kZXJlci5jcmVhdGUoW1xuICAnPGRpdiBjbGFzcz1cIm5vdGUtcG9wb3ZlciBwb3BvdmVyIGluXCI+JyxcbiAgJyAgPGRpdiBjbGFzcz1cImFycm93XCIvPicsXG4gICcgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnQgbm90ZS1jaGlsZHJlbi1jb250YWluZXJcIi8+JyxcbiAgJzwvZGl2PicsXG5dLmpvaW4oJycpLCBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBkaXJlY3Rpb24gPSB0eXBlb2Ygb3B0aW9ucy5kaXJlY3Rpb24gIT09ICd1bmRlZmluZWQnID8gb3B0aW9ucy5kaXJlY3Rpb24gOiAnYm90dG9tJztcblxuICAkbm9kZS5hZGRDbGFzcyhkaXJlY3Rpb24pO1xuXG4gIGlmIChvcHRpb25zLmhpZGVBcnJvdykge1xuICAgICRub2RlLmZpbmQoJy5hcnJvdycpLmhpZGUoKTtcbiAgfVxufSk7XG5cbmNvbnN0IGNoZWNrYm94ID0gcmVuZGVyZXIuY3JlYXRlKCc8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj4nLCBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICAkbm9kZS5odG1sKFtcbiAgICAnPGxhYmVsJyArIChvcHRpb25zLmlkID8gJyBmb3I9XCInICsgb3B0aW9ucy5pZCArICdcIicgOiAnJykgKyAnPicsXG4gICAgJyA8aW5wdXQgcm9sZT1cImNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCInICsgKG9wdGlvbnMuaWQgPyAnIGlkPVwiJyArIG9wdGlvbnMuaWQgKyAnXCInIDogJycpLFxuICAgIChvcHRpb25zLmNoZWNrZWQgPyAnIGNoZWNrZWQnIDogJycpLFxuICAgICcgYXJpYS1jaGVja2VkPVwiJyArIChvcHRpb25zLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnKSArICdcIi8+JyxcbiAgICAob3B0aW9ucy50ZXh0ID8gb3B0aW9ucy50ZXh0IDogJycpLFxuICAgICc8L2xhYmVsPicsXG4gIF0uam9pbignJykpO1xufSk7XG5cbmNvbnN0IGljb24gPSBmdW5jdGlvbihpY29uQ2xhc3NOYW1lLCB0YWdOYW1lKSB7XG4gIHRhZ05hbWUgPSB0YWdOYW1lIHx8ICdpJztcbiAgcmV0dXJuICc8JyArIHRhZ05hbWUgKyAnIGNsYXNzPVwiJyArIGljb25DbGFzc05hbWUgKyAnXCIvPic7XG59O1xuY29uc3QgdWkgPSB7XG4gIGVkaXRvcjogZWRpdG9yLFxuICB0b29sYmFyOiB0b29sYmFyLFxuICBlZGl0aW5nQXJlYTogZWRpdGluZ0FyZWEsXG4gIGNvZGFibGU6IGNvZGFibGUsXG4gIGVkaXRhYmxlOiBlZGl0YWJsZSxcbiAgc3RhdHVzYmFyOiBzdGF0dXNiYXIsXG4gIGFpckVkaXRvcjogYWlyRWRpdG9yLFxuICBhaXJFZGl0YWJsZTogYWlyRWRpdGFibGUsXG4gIGJ1dHRvbkdyb3VwOiBidXR0b25Hcm91cCxcbiAgZHJvcGRvd246IGRyb3Bkb3duLFxuICBkcm9wZG93bkJ1dHRvbkNvbnRlbnRzOiBkcm9wZG93bkJ1dHRvbkNvbnRlbnRzLFxuICBkcm9wZG93bkNoZWNrOiBkcm9wZG93bkNoZWNrLFxuICBwYWxldHRlOiBwYWxldHRlLFxuICBkaWFsb2c6IGRpYWxvZyxcbiAgcG9wb3ZlcjogcG9wb3ZlcixcbiAgY2hlY2tib3g6IGNoZWNrYm94LFxuICBpY29uOiBpY29uLFxuICBvcHRpb25zOiB7fSxcblxuICBidXR0b246IGZ1bmN0aW9uKCRub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHJlbmRlcmVyLmNyZWF0ZSgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3RlLWJ0biBidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIj4nLCBmdW5jdGlvbigkbm9kZSwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50b29sdGlwKSB7XG4gICAgICAgICRub2RlLmF0dHIoe1xuICAgICAgICAgIHRpdGxlOiBvcHRpb25zLnRvb2x0aXAsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBvcHRpb25zLnRvb2x0aXAsXG4gICAgICAgIH0pLnRvb2x0aXAoe1xuICAgICAgICAgIGNvbnRhaW5lcjogKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpID8gb3B0aW9ucy5jb250YWluZXIgOiAnYm9keScsXG4gICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICB9KS5vbignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICQoZS5jdXJyZW50VGFyZ2V0KS50b29sdGlwKCdoaWRlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKCRub2RlLCBvcHRpb25zKTtcbiAgfSxcblxuICB0b2dnbGVCdG46IGZ1bmN0aW9uKCRidG4sIGlzRW5hYmxlKSB7XG4gICAgJGJ0bi50b2dnbGVDbGFzcygnZGlzYWJsZWQnLCAhaXNFbmFibGUpO1xuICAgICRidG4uYXR0cignZGlzYWJsZWQnLCAhaXNFbmFibGUpO1xuICB9LFxuXG4gIHRvZ2dsZUJ0bkFjdGl2ZTogZnVuY3Rpb24oJGJ0biwgaXNBY3RpdmUpIHtcbiAgICAkYnRuLnRvZ2dsZUNsYXNzKCdhY3RpdmUnLCBpc0FjdGl2ZSk7XG4gIH0sXG5cbiAgb25EaWFsb2dTaG93bjogZnVuY3Rpb24oJGRpYWxvZywgaGFuZGxlcikge1xuICAgICRkaWFsb2cub25lKCdzaG93bi5icy5tb2RhbCcsIGhhbmRsZXIpO1xuICB9LFxuXG4gIG9uRGlhbG9nSGlkZGVuOiBmdW5jdGlvbigkZGlhbG9nLCBoYW5kbGVyKSB7XG4gICAgJGRpYWxvZy5vbmUoJ2hpZGRlbi5icy5tb2RhbCcsIGhhbmRsZXIpO1xuICB9LFxuXG4gIHNob3dEaWFsb2c6IGZ1bmN0aW9uKCRkaWFsb2cpIHtcbiAgICAkZGlhbG9nLm1vZGFsKCdzaG93Jyk7XG4gIH0sXG5cbiAgaGlkZURpYWxvZzogZnVuY3Rpb24oJGRpYWxvZykge1xuICAgICRkaWFsb2cubW9kYWwoJ2hpZGUnKTtcbiAgfSxcblxuICBjcmVhdGVMYXlvdXQ6IGZ1bmN0aW9uKCRub3RlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgJGVkaXRvciA9IChvcHRpb25zLmFpck1vZGUgPyB1aS5haXJFZGl0b3IoW1xuICAgICAgdWkuZWRpdGluZ0FyZWEoW1xuICAgICAgICB1aS5haXJFZGl0YWJsZSgpLFxuICAgICAgXSksXG4gICAgXSkgOiB1aS5lZGl0b3IoW1xuICAgICAgdWkudG9vbGJhcigpLFxuICAgICAgdWkuZWRpdGluZ0FyZWEoW1xuICAgICAgICB1aS5jb2RhYmxlKCksXG4gICAgICAgIHVpLmVkaXRhYmxlKCksXG4gICAgICBdKSxcbiAgICAgIHVpLnN0YXR1c2JhcigpLFxuICAgIF0pKS5yZW5kZXIoKTtcblxuICAgICRlZGl0b3IuaW5zZXJ0QWZ0ZXIoJG5vdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vdGU6ICRub3RlLFxuICAgICAgZWRpdG9yOiAkZWRpdG9yLFxuICAgICAgdG9vbGJhcjogJGVkaXRvci5maW5kKCcubm90ZS10b29sYmFyJyksXG4gICAgICBlZGl0aW5nQXJlYTogJGVkaXRvci5maW5kKCcubm90ZS1lZGl0aW5nLWFyZWEnKSxcbiAgICAgIGVkaXRhYmxlOiAkZWRpdG9yLmZpbmQoJy5ub3RlLWVkaXRhYmxlJyksXG4gICAgICBjb2RhYmxlOiAkZWRpdG9yLmZpbmQoJy5ub3RlLWNvZGFibGUnKSxcbiAgICAgIHN0YXR1c2JhcjogJGVkaXRvci5maW5kKCcubm90ZS1zdGF0dXNiYXInKSxcbiAgICB9O1xuICB9LFxuXG4gIHJlbW92ZUxheW91dDogZnVuY3Rpb24oJG5vdGUsIGxheW91dEluZm8pIHtcbiAgICAkbm90ZS5odG1sKGxheW91dEluZm8uZWRpdGFibGUuaHRtbCgpKTtcbiAgICBsYXlvdXRJbmZvLmVkaXRvci5yZW1vdmUoKTtcbiAgICAkbm90ZS5zaG93KCk7XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1aTtcbiJdfQ==