You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
336 lines
41 KiB
JavaScript
336 lines
41 KiB
JavaScript
8 months ago
|
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||
|
/* global wpforms_edit_post_education */
|
||
|
|
||
|
/**
|
||
|
* WPForms Edit Post Education function.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
||
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
||
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
||
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
||
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
||
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
||
|
var WPFormsEditPostEducation = window.WPFormsEditPostEducation || function (document, window, $) {
|
||
|
/**
|
||
|
* Public functions and properties.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*
|
||
|
* @type {object}
|
||
|
*/
|
||
|
var app = {
|
||
|
/**
|
||
|
* Determine if the notice was showed before.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
isNoticeVisible: false,
|
||
|
/**
|
||
|
* Start the engine.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
init: function init() {
|
||
|
$(window).on('load', function () {
|
||
|
// In the case of jQuery 3.+, we need to wait for a ready event first.
|
||
|
if (typeof $.ready.then === 'function') {
|
||
|
$.ready.then(app.load);
|
||
|
} else {
|
||
|
app.load();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
/**
|
||
|
* Page load.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
load: function load() {
|
||
|
if (!app.isGutenbergEditor()) {
|
||
|
app.maybeShowClassicNotice();
|
||
|
app.bindClassicEvents();
|
||
|
return;
|
||
|
}
|
||
|
var blockLoadedInterval = setInterval(function () {
|
||
|
if (!document.querySelector('.editor-post-title__input, iframe[name="editor-canvas"]')) {
|
||
|
return;
|
||
|
}
|
||
|
clearInterval(blockLoadedInterval);
|
||
|
if (!app.isFse()) {
|
||
|
app.maybeShowGutenbergNotice();
|
||
|
app.bindGutenbergEvents();
|
||
|
return;
|
||
|
}
|
||
|
var iframe = document.querySelector('iframe[name="editor-canvas"]');
|
||
|
var observer = new MutationObserver(function () {
|
||
|
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document || {};
|
||
|
if (iframeDocument.readyState === 'complete' && iframeDocument.querySelector('.editor-post-title__input')) {
|
||
|
app.maybeShowGutenbergNotice();
|
||
|
app.bindFseEvents();
|
||
|
observer.disconnect();
|
||
|
}
|
||
|
});
|
||
|
observer.observe(document.body, {
|
||
|
subtree: true,
|
||
|
childList: true
|
||
|
});
|
||
|
}, 200);
|
||
|
},
|
||
|
/**
|
||
|
* Bind events for Classic Editor.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
bindClassicEvents: function bindClassicEvents() {
|
||
|
var $document = $(document);
|
||
|
if (!app.isNoticeVisible) {
|
||
|
$document.on('input', '#title', app.maybeShowClassicNotice);
|
||
|
}
|
||
|
$document.on('click', '.wpforms-edit-post-education-notice-close', app.closeNotice);
|
||
|
},
|
||
|
/**
|
||
|
* Bind events for Gutenberg Editor.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
bindGutenbergEvents: function bindGutenbergEvents() {
|
||
|
var $document = $(document);
|
||
|
$document.on('DOMSubtreeModified', '.edit-post-layout', app.distractionFreeModeToggle);
|
||
|
if (app.isNoticeVisible) {
|
||
|
return;
|
||
|
}
|
||
|
$document.on('input', '.editor-post-title__input', app.maybeShowGutenbergNotice).on('DOMSubtreeModified', '.editor-post-title__input', app.maybeShowGutenbergNotice);
|
||
|
},
|
||
|
/**
|
||
|
* Bind events for Gutenberg Editor in FSE mode.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
bindFseEvents: function bindFseEvents() {
|
||
|
var $iframe = $('iframe[name="editor-canvas"]');
|
||
|
$(document).on('DOMSubtreeModified', '.edit-post-layout', app.distractionFreeModeToggle);
|
||
|
$iframe.contents().on('DOMSubtreeModified', '.editor-post-title__input', app.maybeShowGutenbergNotice);
|
||
|
},
|
||
|
/**
|
||
|
* Determine if the editor is Gutenberg.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*
|
||
|
* @returns {boolean} True if the editor is Gutenberg.
|
||
|
*/
|
||
|
isGutenbergEditor: function isGutenbergEditor() {
|
||
|
return typeof wp !== 'undefined' && typeof wp.blocks !== 'undefined';
|
||
|
},
|
||
|
/**
|
||
|
* Determine if the editor is Gutenberg in FSE mode.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*
|
||
|
* @returns {boolean} True if the Gutenberg editor in FSE mode.
|
||
|
*/
|
||
|
isFse: function isFse() {
|
||
|
return Boolean($('iframe[name="editor-canvas"]').length);
|
||
|
},
|
||
|
/**
|
||
|
* Create a notice for Gutenberg.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
showGutenbergNotice: function showGutenbergNotice() {
|
||
|
wp.data.dispatch('core/notices').createInfoNotice(wpforms_edit_post_education.gutenberg_notice.template, app.getGutenbergNoticeSettings());
|
||
|
|
||
|
// The notice component doesn't have a way to add HTML id or class to the notice.
|
||
|
// Also, the notice became visible with a delay on old Gutenberg versions.
|
||
|
var hasNotice = setInterval(function () {
|
||
|
var noticeBody = $('.wpforms-edit-post-education-notice-body');
|
||
|
if (!noticeBody.length) {
|
||
|
return;
|
||
|
}
|
||
|
var $notice = noticeBody.closest('.components-notice');
|
||
|
$notice.addClass('wpforms-edit-post-education-notice');
|
||
|
$notice.find('.is-secondary, .is-link').removeClass('is-secondary').removeClass('is-link').addClass('is-primary');
|
||
|
clearInterval(hasNotice);
|
||
|
}, 100);
|
||
|
},
|
||
|
/**
|
||
|
* Get settings for the Gutenberg notice.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*
|
||
|
* @returns {object} Notice settings.
|
||
|
*/
|
||
|
getGutenbergNoticeSettings: function getGutenbergNoticeSettings() {
|
||
|
var pluginName = 'wpforms-edit-post-product-education-guide';
|
||
|
var noticeSettings = {
|
||
|
id: pluginName,
|
||
|
isDismissible: true,
|
||
|
HTML: true,
|
||
|
__unstableHTML: true,
|
||
|
actions: [{
|
||
|
className: 'wpforms-edit-post-education-notice-guide-button',
|
||
|
variant: 'primary',
|
||
|
label: wpforms_edit_post_education.gutenberg_notice.button
|
||
|
}]
|
||
|
};
|
||
|
if (!wpforms_edit_post_education.gutenberg_guide) {
|
||
|
noticeSettings.actions[0].url = wpforms_edit_post_education.gutenberg_notice.url;
|
||
|
return noticeSettings;
|
||
|
}
|
||
|
var Guide = wp.components.Guide;
|
||
|
var useState = wp.element.useState;
|
||
|
var registerPlugin = wp.plugins.registerPlugin;
|
||
|
var unregisterPlugin = wp.plugins.unregisterPlugin;
|
||
|
var GutenbergTutorial = function GutenbergTutorial() {
|
||
|
var _useState = useState(true),
|
||
|
_useState2 = _slicedToArray(_useState, 2),
|
||
|
isOpen = _useState2[0],
|
||
|
setIsOpen = _useState2[1];
|
||
|
if (!isOpen) {
|
||
|
return null;
|
||
|
}
|
||
|
return (
|
||
|
/*#__PURE__*/
|
||
|
// eslint-disable-next-line react/react-in-jsx-scope
|
||
|
React.createElement(Guide, {
|
||
|
className: "edit-post-welcome-guide",
|
||
|
onFinish: function onFinish() {
|
||
|
unregisterPlugin(pluginName);
|
||
|
setIsOpen(false);
|
||
|
},
|
||
|
pages: app.getGuidePages()
|
||
|
})
|
||
|
);
|
||
|
};
|
||
|
noticeSettings.onDismiss = app.updateUserMeta;
|
||
|
noticeSettings.actions[0].onClick = function () {
|
||
|
return registerPlugin(pluginName, {
|
||
|
render: GutenbergTutorial
|
||
|
});
|
||
|
};
|
||
|
return noticeSettings;
|
||
|
},
|
||
|
/**
|
||
|
* Get Guide pages in proper format.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*
|
||
|
* @returns {Array} Guide Pages.
|
||
|
*/
|
||
|
getGuidePages: function getGuidePages() {
|
||
|
var pages = [];
|
||
|
wpforms_edit_post_education.gutenberg_guide.forEach(function (page) {
|
||
|
pages.push({
|
||
|
/* eslint-disable react/react-in-jsx-scope */
|
||
|
content: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", {
|
||
|
className: "edit-post-welcome-guide__heading"
|
||
|
}, page.title), /*#__PURE__*/React.createElement("p", {
|
||
|
className: "edit-post-welcome-guide__text"
|
||
|
}, page.content)),
|
||
|
image: /*#__PURE__*/React.createElement("img", {
|
||
|
className: "edit-post-welcome-guide__image",
|
||
|
src: page.image,
|
||
|
alt: page.title
|
||
|
})
|
||
|
/* eslint-enable react/react-in-jsx-scope */
|
||
|
});
|
||
|
});
|
||
|
return pages;
|
||
|
},
|
||
|
/**
|
||
|
* Show notice if the page title matches some keywords for Classic Editor.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
maybeShowClassicNotice: function maybeShowClassicNotice() {
|
||
|
if (app.isNoticeVisible) {
|
||
|
return;
|
||
|
}
|
||
|
if (app.isTitleMatchKeywords($('#title').val())) {
|
||
|
app.isNoticeVisible = true;
|
||
|
$('.wpforms-edit-post-education-notice').removeClass('wpforms-hidden');
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* Show notice if the page title matches some keywords for Gutenberg Editor.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
maybeShowGutenbergNotice: function maybeShowGutenbergNotice() {
|
||
|
if (app.isNoticeVisible) {
|
||
|
return;
|
||
|
}
|
||
|
var $postTitle = app.isFse() ? $('iframe[name="editor-canvas"]').contents().find('.editor-post-title__input') : $('.editor-post-title__input');
|
||
|
var tagName = $postTitle.prop('tagName');
|
||
|
var title = tagName === 'TEXTAREA' ? $postTitle.val() : $postTitle.text();
|
||
|
if (app.isTitleMatchKeywords(title)) {
|
||
|
app.isNoticeVisible = true;
|
||
|
app.showGutenbergNotice();
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* Add notice class when the distraction mode is enabled.
|
||
|
*
|
||
|
* @since 1.8.1.2
|
||
|
*/
|
||
|
distractionFreeModeToggle: function distractionFreeModeToggle() {
|
||
|
if (!app.isNoticeVisible) {
|
||
|
return;
|
||
|
}
|
||
|
var $document = $(document);
|
||
|
var isDistractionFreeMode = Boolean($document.find('.is-distraction-free').length);
|
||
|
if (!isDistractionFreeMode) {
|
||
|
return;
|
||
|
}
|
||
|
var isNoticeHasClass = Boolean($('.wpforms-edit-post-education-notice').length);
|
||
|
if (isNoticeHasClass) {
|
||
|
return;
|
||
|
}
|
||
|
var $noticeBody = $document.find('.wpforms-edit-post-education-notice-body');
|
||
|
var $notice = $noticeBody.closest('.components-notice');
|
||
|
$notice.addClass('wpforms-edit-post-education-notice');
|
||
|
},
|
||
|
/**
|
||
|
* Determine if the title matches keywords.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*
|
||
|
* @param {string} titleValue Page title value.
|
||
|
*
|
||
|
* @returns {boolean} True if the title matches some keywords.
|
||
|
*/
|
||
|
isTitleMatchKeywords: function isTitleMatchKeywords(titleValue) {
|
||
|
var expectedTitleRegex = new RegExp(/\b(contact|form)\b/i);
|
||
|
return expectedTitleRegex.test(titleValue);
|
||
|
},
|
||
|
/**
|
||
|
* Close a notice.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
closeNotice: function closeNotice() {
|
||
|
$(this).closest('.wpforms-edit-post-education-notice').remove();
|
||
|
app.updateUserMeta();
|
||
|
},
|
||
|
/**
|
||
|
* Update user meta and don't show the notice next time.
|
||
|
*
|
||
|
* @since 1.8.1
|
||
|
*/
|
||
|
updateUserMeta: function updateUserMeta() {
|
||
|
$.post(wpforms_edit_post_education.ajax_url, {
|
||
|
action: 'wpforms_education_dismiss',
|
||
|
nonce: wpforms_edit_post_education.education_nonce,
|
||
|
section: 'edit-post-notice'
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
return app;
|
||
|
}(document, window, jQuery);
|
||
|
WPFormsEditPostEducation.init();
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsImFyciIsImkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbiIsImxlbmd0aCIsImFycjIiLCJyIiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJ1IiwiYSIsImYiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsInJldHVybiIsImlzQXJyYXkiLCJXUEZvcm1zRWRpdFBvc3RFZHVjYXRpb24iLCJ3aW5kb3ciLCJkb2N1bWVudCIsIiQiLCJhcHAiLCJpc05vdGljZVZpc2libGUiLCJpbml0Iiwib24iLCJyZWFkeSIsInRoZW4iLCJsb2FkIiwiaXNHdXRlbmJlcmdFZGl0b3IiLCJtYXliZVNob3dDbGFzc2ljTm90aWNlIiwiYmluZENsYXNzaWNFdmVudHMiLCJibG9ja0xvYWRlZEludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJxdWVyeVNlbGVjdG9yIiwiY2xlYXJJbnRlcnZhbCIsImlzRnNlIiwibWF5YmVTaG93R3V0ZW5iZXJnTm90aWNlIiwiYmluZEd1dGVuYmVyZ0V2ZW50cyIsImlmcmFtZSIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsImlmcmFtZURvY3VtZW50IiwiY29udGVudERvY3VtZW50IiwiY29udGVudFdpbmRvdyIsInJlYWR5U3RhdGUiLCJiaW5kRnNlRXZlbnRzIiwiZGlzY29ubmVjdCIsIm9ic2VydmUiLCJib2R5Iiwic3VidHJlZSIsImNoaWxkTGlzdCIsIiRkb2N1bWVudCIsImNsb3NlTm90aWNlIiwiZGlzdHJhY3Rpb25GcmVlTW9kZVRvZ2dsZSIsIiRpZnJhbWUiLCJjb250ZW50cyIsIndwIiwiYmxvY2tzIiwiQm9vbGVhbiIsInNob3dHdXRlbmJlcmdOb3RpY2UiLCJkYXRhIiwiZGlzcGF0Y2giLCJjcmVhdGVJbmZvTm90aWNlIiwid3Bmb3Jtc19lZGl0X3Bvc3RfZWR1Y2F0aW9uIiwiZ3V0ZW5iZXJnX25vdGljZSIsInRlbXBsYXRlIiwiZ2V0R3V0ZW5iZXJnTm90aWNlU2V0dGluZ3MiLCJoYXNOb3RpY2UiLCJub3RpY2VCb2R5IiwiJG5vdGljZSIsImNsb3Nlc3QiLCJhZGRDbGFzcyIsImZpbmQiLCJyZW1vdmVDbGFzcyIsInBsdWdpbk5hbWUiLCJub3RpY2VTZXR0aW5ncyIsImlkIiwiaXNEaXNtaXNzaWJsZSIsIkhUTUwiLCJfX3Vuc3RhYmxlSFRNTCIsImFjdGlvbnMiLCJjbGFzc05hbWUiLCJ2YXJpYW50IiwibGFiZWwiLCJidXR0b24iLCJndXRlbmJlcmdfZ3VpZGUiLCJ1cmwiLCJHdWlkZSIsImNvbXBvbmVudHMiLCJ1c2VTdGF0ZSIsImVsZW1lbnQiLCJyZWdpc3RlclBsdWdpbiIsInBsdWdpbnMiLCJ1bnJlZ2lzdGVyUGx1Z2luIiwiR3V0ZW5iZXJnVHV0b3JpYWwiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50Iiwib25GaW5pc2giLCJwYWdlcyIsImdldEd1aWRlUGFnZXMiLCJvbkRpc21pc3MiLCJ1cGRhdGVVc2VyTWV0YSIsIm9uQ2xpY2siLCJyZW5kZXIiLCJmb3JFYWNoIiwicGFnZSIsImNvbnRlbnQiLCJGcmFnbWVudCIsInRpdGxlIiwiaW1hZ2UiLCJzcmMiLCJhbHQiLCJpc1RpdGxlTWF0Y2hLZXl3b3JkcyIsInZhbCIsIiRwb3N0VGl0bGUiLCJ0YWdOYW1lIiwicHJvcCIsInRleHQiLCJpc0Rpc3RyYWN0aW9uRnJlZU1vZGUiLCJpc05vdGljZUhhc0NsYXNzIiwiJG5vdGljZUJvZHkiLCJ0aXRsZVZhbHVlIiwiZXhwZWN0ZWRUaXRsZVJlZ2V4IiwiUmVnRXhwIiwicmVtb3ZlIiwicG9zdCIsImFqYXhfdXJsIiwiYWN0aW9uIiwibm9uY2UiLCJlZHVjYXRpb25fbm9uY2UiLCJzZWN0aW9uIiwialF1ZXJ5Il0sInNvdXJjZXMiOlsiZmFrZV8zNzFkOGI2My5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd3Bmb3Jtc19lZGl0X3Bvc3RfZWR1Y2F0aW9uICovXG5cbi8qKlxuICogV1BGb3JtcyBFZGl0IFBvc3QgRWR1Y2F0aW9uIGZ1bmN0aW9uLlxuICpcbiAqIEBzaW5jZSAxLjguMVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgV1BGb3Jtc0VkaXRQb3N0RWR1Y2F0aW9uID0gd2luZG93LldQRm9ybXNFZGl0UG9zdEVkdWNhdGlvbiB8fCAoIGZ1bmN0aW9uKCBkb2N1bWVudCwgd2luZG93LCAkICkge1xuXG5cdC8qKlxuXHQgKiBQdWJsaWMgZnVuY3Rpb25zIGFuZCBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAc2luY2UgMS44LjFcblx0ICpcblx0ICogQHR5cGUge29iamVjdH1cblx0ICovXG5cdGNvbnN0IGFwcCA9IHtcblxuXHRcdC8qKlxuXHRcdCAqIERldGVybWluZSBpZiB0aGUgbm90aWNlIHdhcyBzaG93ZWQgYmVmb3JlLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC4xXG5cdFx0ICovXG5cdFx0aXNOb3RpY2VWaXNpYmxlOiBmYWxzZSxcblxuXHRcdC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlbmdpbmUuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44LjFcblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0JCggd2luZG93ICkub24oICdsb2FkJywgZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugb2YgalF1ZXJ5IDMuKywgd2UgbmVlZCB0byB3YWl0IGZvciBhIHJlYWR5IGV2ZW50IGZpcnN0LlxuXHRcdFx0XHRpZiAoIHR5cGVvZiAkLnJlYWR5LnRoZW4gPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdFx0JC5yZWFkeS50aGVuKCBhcHAubG9hZCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFwcC5sb2FkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUGFnZSBsb2FkLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC4xXG5cdFx0ICovXG5cdFx0bG9hZDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdGlmICggISBhcHAuaXNHdXRlbmJlcmdFZGl0b3IoKSApIHtcblx0XHRcdFx0YXBwLm1heWJlU2hvd0NsYXNzaWNOb3RpY2UoKTtcblx
|
||
|
},{}]},{},[1])
|