403Webshell
Server IP : 85.158.181.41  /  Your IP : 216.73.217.12
Web Server : Apache
System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64
User : moncbefd ( 1024)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/moncbefd/www.moneta.at/admin/html/assets/javascript/engine/widgets/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/moncbefd/www.moneta.at/admin/html/assets/javascript/engine/widgets/collapser.js
'use strict';

/* --------------------------------------------------------------
 collapser.js 2016-02-19
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2016 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

/**
 * ## Collapser Widget
 *
 * This widget expands or collapses the target element. It is not visible when collapsed but visible when expanded.
 *
 * ### Options
 *
 * **Collapsed | `data-collapser-collapsed` | Boolean | Optional**
 *
 * Default state of the collapser. If no value is provided, it defaults to `false`.
 *
 * **Collapsed Icon Class | `data-collapser-collapsed_icon_class` | String | Optional**
 *
 * Default Font Awesome icon when the collapser is collapsed. If no value is provided, it defaults to **'fa-plus-square-o'**.
 *
 * **Expanded Icon Class | `data-collapser-expanded_icon_class` | String | Optional**
 *
 * Default Font Awesome icon when the collapser is expanded. If no value is provided, it defaults to **'fa-minus-square-o'**.
 *
 * **Additional Classes | `data-collapser-additional_classes` | String | Optional**
 *
 * Provide additional CSS-Classes which should be added. If no value is provided, it defaults to **'pull-right'**,
 * which applies a CSS *'float: right'* style.
 *
 * **Target Selector | `data-collapser-target_selector` | String | Required**
 *
 * Provide the target selector, which is the element thath will be collapsed or expanded.
 *
 * **Parent Selector | `data-collapser-parent_selector` | String | Optional**
 *
 * Provide a parent selector for the collapser. It's empty by default.
 *
 * ### Example
 *
 * When the page loads, the **collapser** widget will be added to the `<div>` element.
 * On click, the target selector will be shown or hidden.
 *
 * ```html
 *  <div class="headline-wrapper"
 *      data-gx-widget="collapser"
 *      data-collapser-target_selector=".content-wrapper"
 *      data-collapser-section="category_base_data"
 *      data-collapser-user_id="1"
 *      data-collapser-collapsed="true">
 *    Click This Headline
 *  </div>
 *  <div class="content-wrapper">
 *    Toggled content
 *  </div>
 * ```
 *
 * @module Admin/Widgets/collapser
 *
 * @todo Make the styling for this widget (like it is on the products site) more general. Currently, the "div" element
 * has to be wrapped in another "div" with specific CSS-Classes like ".gx-container" and ".frame-head".
 */
gx.widgets.module('collapser', ['user_configuration_service'], function (data) {

    'use strict';

    // ------------------------------------------------------------------------
    // VARIABLE DEFINITION
    // ------------------------------------------------------------------------

    var
    /**
     * Widget Reference
     *
     * @type {object}
     */
    $this = $(this),


    /**
     * UserConfigurationService Alias
     *
     * @type {object}
     */
    userConfigurationService = jse.libs.user_configuration_service,


    /**
     * Default Options for Widget
     *
     * @type {object}
     */
    defaults = {
        collapsed: false,
        collapsed_icon_class: 'fa-plus-square-o',
        expanded_icon_class: 'fa-minus-square-o',
        additional_classes: 'pull-right',
        parent_selector: '',
        is_button_trigger: false
    },


    /**
     * Final Widget Options
     *
     * @type {object}
     */
    options = $.extend(true, {}, defaults, data),


    /**
     * Module Object
     *
     * @type {object}
     */
    module = {};

    // ------------------------------------------------------------------------
    // PRIVATE METHODS
    // ------------------------------------------------------------------------

    /**
     * Sets the cursor to pointer
     * @private
     */
    var _setMouseCursorPointer = function _setMouseCursorPointer() {
        $this.addClass('cursor-pointer').children().addClass('cursor-pointer');
    };

    /**
     * Sets the initial visibility according to the 'collapsed' value
     * @private
     */
    var _setInitialVisibilityState = function _setInitialVisibilityState() {
        if (options.collapsed) {
            if (options.parent_selector) {
                $this.parents(options.parent_selector).next(options.target_selector).hide();
            } else {
                $this.next(options.target_selector).hide();
            }
        }
    };

    /**
     * Creates the markup for the collapser and adds the click event handler
     * @private
     */
    var _createCollapser = function _createCollapser() {
        var $button = $('<span>', { class: 'collapser ' + options.additional_classes });
        var $icon = $('<i>', { class: 'fa ' + (options.collapsed ? options.collapsed_icon_class : options.expanded_icon_class) });

        $button.append($icon).appendTo($this);

        if (options.is_button_trigger) {
            $button.on('click', _toggleVisibilityState);
        } else {
            $this.on('click', _toggleVisibilityState);
        }
    };

    /**
     * Saves the current visibility state.
     *
     * @private
     */
    var _saveVisibilityState = function _saveVisibilityState() {
        var collapseState = $this.find('.collapser > i.fa').hasClass(options.collapsed_icon_class);

        userConfigurationService.set({
            data: {
                userId: options.user_id,
                configurationKey: options.section + '_collapse',
                configurationValue: collapseState
            }
        });
    };

    // ------------------------------------------------------------------------
    // EVENT HANDLERS
    // ------------------------------------------------------------------------

    /**
     * Toggles the visibility state and switches between plus and minus icon.
     *
     * @private
     */
    var _toggleVisibilityState = function _toggleVisibilityState() {
        if (options.parent_selector) {
            $this.parents(options.parent_selector).next(options.target_selector).toggle();
        } else {
            $this.next(options.target_selector).toggle();
        }

        $this.find('.collapser > i.fa').toggleClass(options.collapsed_icon_class);
        $this.find('.collapser > i.fa').toggleClass(options.expanded_icon_class);

        _saveVisibilityState();
    };

    // ------------------------------------------------------------------------
    // INITIALIZE
    // ------------------------------------------------------------------------

    /**
     * Initialize method of the module, called by the engine.
     */
    module.init = function (done) {
        _setMouseCursorPointer();
        _setInitialVisibilityState();
        _createCollapser();
        done();
    };

    // Return data to module engine
    return module;
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbGxhcHNlci5qcyJdLCJuYW1lcyI6WyJneCIsIndpZGdldHMiLCJtb2R1bGUiLCJkYXRhIiwiJHRoaXMiLCIkIiwidXNlckNvbmZpZ3VyYXRpb25TZXJ2aWNlIiwianNlIiwibGlicyIsInVzZXJfY29uZmlndXJhdGlvbl9zZXJ2aWNlIiwiZGVmYXVsdHMiLCJjb2xsYXBzZWQiLCJjb2xsYXBzZWRfaWNvbl9jbGFzcyIsImV4cGFuZGVkX2ljb25fY2xhc3MiLCJhZGRpdGlvbmFsX2NsYXNzZXMiLCJwYXJlbnRfc2VsZWN0b3IiLCJpc19idXR0b25fdHJpZ2dlciIsIm9wdGlvbnMiLCJleHRlbmQiLCJfc2V0TW91c2VDdXJzb3JQb2ludGVyIiwiYWRkQ2xhc3MiLCJjaGlsZHJlbiIsIl9zZXRJbml0aWFsVmlzaWJpbGl0eVN0YXRlIiwicGFyZW50cyIsIm5leHQiLCJ0YXJnZXRfc2VsZWN0b3IiLCJoaWRlIiwiX2NyZWF0ZUNvbGxhcHNlciIsIiRidXR0b24iLCJjbGFzcyIsIiRpY29uIiwiYXBwZW5kIiwiYXBwZW5kVG8iLCJvbiIsIl90b2dnbGVWaXNpYmlsaXR5U3RhdGUiLCJfc2F2ZVZpc2liaWxpdHlTdGF0ZSIsImNvbGxhcHNlU3RhdGUiLCJmaW5kIiwiaGFzQ2xhc3MiLCJzZXQiLCJ1c2VySWQiLCJ1c2VyX2lkIiwiY29uZmlndXJhdGlvbktleSIsInNlY3Rpb24iLCJjb25maWd1cmF0aW9uVmFsdWUiLCJ0b2dnbGUiLCJ0b2dnbGVDbGFzcyIsImluaXQiLCJkb25lIl0sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7O0FBVUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0RBQSxHQUFHQyxPQUFILENBQVdDLE1BQVgsQ0FDSSxXQURKLEVBR0ksQ0FBQyw0QkFBRCxDQUhKLEVBS0ksVUFBVUMsSUFBVixFQUFnQjs7QUFFWjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDSTs7Ozs7QUFL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QUFnQ1MsV0FBaEMsQ0FBNEM3QixRQUFRSixtQkFBcEQ7O0FBR0FzQjtBQUNILEtBWkQ7O0FBY0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQWpDLFdBQU82QyxJQUFQLEdBQWMsVUFBVUMsSUFBVixFQUFnQjtBQUMxQjdCO0FBQ0FHO0FBQ0FLO0FBQ0FxQjtBQUNILEtBTEQ7O0FBT0E7QUFDQSxXQUFPOUMsTUFBUDtBQUNILENBN0pMIiwiZmlsZSI6ImNvbGxhcHNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gY29sbGFwc2VyLmpzIDIwMTYtMDItMTlcbiBHYW1iaW8gR21iSFxuIGh0dHA6Ly93d3cuZ2FtYmlvLmRlXG4gQ29weXJpZ2h0IChjKSAyMDE2IEdhbWJpbyBHbWJIXG4gUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpXG4gW2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWxdXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqICMjIENvbGxhcHNlciBXaWRnZXRcbiAqXG4gKiBUaGlzIHdpZGdldCBleHBhbmRzIG9yIGNvbGxhcHNlcyB0aGUgdGFyZ2V0IGVsZW1lbnQuIEl0IGlzIG5vdCB2aXNpYmxlIHdoZW4gY29sbGFwc2VkIGJ1dCB2aXNpYmxlIHdoZW4gZXhwYW5kZWQuXG4gKlxuICogIyMjIE9wdGlvbnNcbiAqXG4gKiAqKkNvbGxhcHNlZCB8IGBkYXRhLWNvbGxhcHNlci1jb2xsYXBzZWRgIHwgQm9vbGVhbiB8IE9wdGlvbmFsKipcbiAqXG4gKiBEZWZhdWx0IHN0YXRlIG9mIHRoZSBjb2xsYXBzZXIuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBkZWZhdWx0cyB0byBgZmFsc2VgLlxuICpcbiAqICoqQ29sbGFwc2VkIEljb24gQ2xhc3MgfCBgZGF0YS1jb2xsYXBzZXItY29sbGFwc2VkX2ljb25fY2xhc3NgIHwgU3RyaW5nIHwgT3B0aW9uYWwqKlxuICpcbiAqIERlZmF1bHQgRm9udCBBd2Vzb21lIGljb24gd2hlbiB0aGUgY29sbGFwc2VyIGlzIGNvbGxhcHNlZC4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvICoqJ2ZhLXBsdXMtc3F1YXJlLW8nKiouXG4gKlxuICogKipFeHBhbmRlZCBJY29uIENsYXNzIHwgYGRhdGEtY29sbGFwc2VyLWV4cGFuZGVkX2ljb25fY2xhc3NgIHwgU3RyaW5nIHwgT3B0aW9uYWwqKlxuICpcbiAqIERlZmF1bHQgRm9udCBBd2Vzb21lIGljb24gd2hlbiB0aGUgY29sbGFwc2VyIGlzIGV4cGFuZGVkLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gKionZmEtbWludXMtc3F1YXJlLW8nKiouXG4gKlxuICogKipBZGRpdGlvbmFsIENsYXNzZXMgfCBgZGF0YS1jb2xsYXBzZXItYWRkaXRpb25hbF9jbGFzc2VzYCB8IFN0cmluZyB8IE9wdGlvbmFsKipcbiAqXG4gKiBQcm92aWRlIGFkZGl0aW9uYWwgQ1NTLUNsYXNzZXMgd2hpY2ggc2hvdWxkIGJlIGFkZGVkLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gKioncHVsbC1yaWdodCcqKixcbiAqIHdoaWNoIGFwcGxpZXMgYSBDU1MgKidmbG9hdDogcmlnaHQnKiBzdHlsZS5cbiAqXG4gKiAqKlRhcmdldCBTZWxlY3RvciB8IGBkYXRhLWNvbGxhcHNlci10YXJnZXRfc2VsZWN0b3JgIHwgU3RyaW5nIHwgUmVxdWlyZWQqKlxuICpcbiAqIFByb3ZpZGUgdGhlIHRhcmdldCBzZWxlY3Rvciwgd2hpY2ggaXMgdGhlIGVsZW1lbnQgdGhhdGggd2lsbCBiZSBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuXG4gKlxuICogKipQYXJlbnQgU2VsZWN0b3IgfCBgZGF0YS1jb2xsYXBzZXItcGFyZW50X3NlbGVjdG9yYCB8IFN0cmluZyB8IE9wdGlvbmFsKipcbiAqXG4gKiBQcm92aWRlIGEgcGFyZW50IHNlbGVjdG9yIGZvciB0aGUgY29sbGFwc2VyLiBJdCdzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBXaGVuIHRoZSBwYWdlIGxvYWRzLCB0aGUgKipjb2xsYXBzZXIqKiB3aWRnZXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgYDxkaXY+YCBlbGVtZW50LlxuICogT24gY2xpY2ssIHRoZSB0YXJnZXQgc2VsZWN0b3Igd2lsbCBiZSBzaG93biBvciBoaWRkZW4uXG4gKlxuICogYGBgaHRtbFxuICogIDxkaXYgY2xhc3M9XCJoZWFkbGluZS13cmFwcGVyXCJcbiAqICAgICAgZGF0YS1neC13aWRnZXQ9XCJjb2xsYXBzZXJcIlxuICogICAgICBkYXRhLWNvbGxhcHNlci10YXJnZXRfc2VsZWN0b3I9XCIuY29udGVudC13cmFwcGVyXCJcbiAqICAgICAgZGF0YS1jb2xsYXBzZXItc2VjdGlvbj1cImNhdGVnb3J5X2Jhc2VfZGF0YVwiXG4gKiAgICAgIGRhdGEtY29sbGFwc2VyLXVzZXJfaWQ9XCIxXCJcbiAqICAgICAgZGF0YS1jb2xsYXBzZXItY29sbGFwc2VkPVwidHJ1ZVwiPlxuICogICAgQ2xpY2sgVGhpcyBIZWFkbGluZVxuICogIDwvZGl2PlxuICogIDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cbiAqICAgIFRvZ2dsZWQgY29udGVudFxuICogIDwvZGl2PlxuICogYGBgXG4gKlxuICogQG1vZHVsZSBBZG1pbi9XaWRnZXRzL2NvbGxhcHNlclxuICpcbiAqIEB0b2RvIE1ha2UgdGhlIHN0eWxpbmcgZm9yIHRoaXMgd2lkZ2V0IChsaWtlIGl0IGlzIG9uIHRoZSBwcm9kdWN0cyBzaXRlKSBtb3JlIGdlbmVyYWwuIEN1cnJlbnRseSwgdGhlIFwiZGl2XCIgZWxlbWVudFxuICogaGFzIHRvIGJlIHdyYXBwZWQgaW4gYW5vdGhlciBcImRpdlwiIHdpdGggc3BlY2lmaWMgQ1NTLUNsYXNzZXMgbGlrZSBcIi5neC1jb250YWluZXJcIiBhbmQgXCIuZnJhbWUtaGVhZFwiLlxuICovXG5neC53aWRnZXRzLm1vZHVsZShcbiAgICAnY29sbGFwc2VyJyxcblxuICAgIFsndXNlcl9jb25maWd1cmF0aW9uX3NlcnZpY2UnXSxcblxuICAgIGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBWQVJJQUJMRSBERUZJTklUSU9OXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICAgIHZhclxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaWRnZXQgUmVmZXJlbmNlXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHR5cGUge29iamVjdH1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJHRoaXMgPSAkKHRoaXMpLFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVzZXJDb25maWd1cmF0aW9uU2VydmljZSBBbGlhc1xuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHVzZXJDb25maWd1cmF0aW9uU2VydmljZSA9IGpzZS5saWJzLnVzZXJfY29uZmlndXJhdGlvbl9zZXJ2aWNlLFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIERlZmF1bHQgT3B0aW9ucyBmb3IgV2lkZ2V0XG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHR5cGUge29iamVjdH1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWRfaWNvbl9jbGFzczogJ2ZhLXBsdXMtc3F1YXJlLW8nLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkX2ljb25fY2xhc3M6ICdmYS1taW51cy1zcXVhcmUtbycsXG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbF9jbGFzc2VzOiAncHVsbC1yaWdodCcsXG4gICAgICAgICAgICAgICAgcGFyZW50X3NlbGVjdG9yOiAnJyxcbiAgICAgICAgICAgICAgICBpc19idXR0b25fdHJpZ2dlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmluYWwgV2lkZ2V0IE9wdGlvbnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIGRlZmF1bHRzLCBkYXRhKSxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNb2R1bGUgT2JqZWN0XG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHR5cGUge29iamVjdH1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbW9kdWxlID0ge307XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIC8vIFBSSVZBVEUgTUVUSE9EU1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgY3Vyc29yIHRvIHBvaW50ZXJcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBfc2V0TW91c2VDdXJzb3JQb2ludGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoJ2N1cnNvci1wb2ludGVyJykuY2hpbGRyZW4oKS5hZGRDbGFzcygnY3Vyc29yLXBvaW50ZXInKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgaW5pdGlhbCB2aXNpYmlsaXR5IGFjY29yZGluZyB0byB0aGUgJ2NvbGxhcHNlZCcgdmFsdWVcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBfc2V0SW5pdGlhbFZpc2liaWxpdHlTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmVudF9zZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnRzKG9wdGlvbnMucGFyZW50X3NlbGVjdG9yKS5uZXh0KG9wdGlvbnMudGFyZ2V0X3NlbGVjdG9yKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMubmV4dChvcHRpb25zLnRhcmdldF9zZWxlY3RvcikuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyB0aGUgbWFya3VwIGZvciB0aGUgY29sbGFwc2VyIGFuZCBhZGRzIHRoZSBjbGljayBldmVudCBoYW5kbGVyXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgX2NyZWF0ZUNvbGxhcHNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciAkYnV0dG9uID0gJCgnPHNwYW4+Jywge2NsYXNzOiBgY29sbGFwc2VyICR7b3B0aW9ucy5hZGRpdGlvbmFsX2NsYXNzZXN9YH0pO1xuICAgICAgICAgICAgdmFyICRpY29uID0gJCgnPGk+Jywge2NsYXNzOiBgZmEgJHtvcHRpb25zLmNvbGxhcHNlZCA/IG9wdGlvbnMuY29sbGFwc2VkX2ljb25fY2xhc3MgOiBvcHRpb25zLmV4cGFuZGVkX2ljb25fY2xhc3N9YH0pO1xuXG4gICAgICAgICAgICAkYnV0dG9uXG4gICAgICAgICAgICAgICAgLmFwcGVuZCgkaWNvbilcbiAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pc19idXR0b25fdHJpZ2dlcikge1xuICAgICAgICAgICAgICAgICRidXR0b24ub24oJ2NsaWNrJywgX3RvZ2dsZVZpc2liaWxpdHlTdGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICR0aGlzLm9uKCdjbGljaycsIF90b2dnbGVWaXNpYmlsaXR5U3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYXZlcyB0aGUgY3VycmVudCB2aXNpYmlsaXR5IHN0YXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIF9zYXZlVmlzaWJpbGl0eVN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbGxhcHNlU3RhdGUgPSAkdGhpcy5maW5kKCcuY29sbGFwc2VyID4gaS5mYScpLmhhc0NsYXNzKG9wdGlvbnMuY29sbGFwc2VkX2ljb25fY2xhc3MpO1xuXG4gICAgICAgICAgICB1c2VyQ29uZmlndXJhdGlvblNlcnZpY2Uuc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogb3B0aW9ucy51c2VyX2lkLFxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uS2V5OiBvcHRpb25zLnNlY3Rpb24gKyAnX2NvbGxhcHNlJyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBjb2xsYXBzZVN0YXRlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIC8vIEVWRU5UIEhBTkRMRVJTXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IHN0YXRlIGFuZCBzd2l0Y2hlcyBiZXR3ZWVuIHBsdXMgYW5kIG1pbnVzIGljb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgX3RvZ2dsZVZpc2liaWxpdHlTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmVudF9zZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudHMob3B0aW9ucy5wYXJlbnRfc2VsZWN0b3IpLm5leHQob3B0aW9ucy50YXJnZXRfc2VsZWN0b3IpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkdGhpcy5uZXh0KG9wdGlvbnMudGFyZ2V0X3NlbGVjdG9yKS50b2dnbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJHRoaXMuZmluZCgnLmNvbGxhcHNlciA+IGkuZmEnKS50b2dnbGVDbGFzcyhvcHRpb25zLmNvbGxhcHNlZF9pY29uX2NsYXNzKTtcbiAgICAgICAgICAgICR0aGlzLmZpbmQoJy5jb2xsYXBzZXIgPiBpLmZhJykudG9nZ2xlQ2xhc3Mob3B0aW9ucy5leHBhbmRlZF9pY29uX2NsYXNzKTtcblxuXG4gICAgICAgICAgICBfc2F2ZVZpc2liaWxpdHlTdGF0ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBJTklUSUFMSVpFXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbml0aWFsaXplIG1ldGhvZCBvZiB0aGUgbW9kdWxlLCBjYWxsZWQgYnkgdGhlIGVuZ2luZS5cbiAgICAgICAgICovXG4gICAgICAgIG1vZHVsZS5pbml0ID0gZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIF9zZXRNb3VzZUN1cnNvclBvaW50ZXIoKTtcbiAgICAgICAgICAgIF9zZXRJbml0aWFsVmlzaWJpbGl0eVN0YXRlKCk7XG4gICAgICAgICAgICBfY3JlYXRlQ29sbGFwc2VyKCk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmV0dXJuIGRhdGEgdG8gbW9kdWxlIGVuZ2luZVxuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH0pO1xuIl19

Youez - 2016 - github.com/yon3zu
LinuXploit