surveyjs-widgets
Version:
Custom widgets for the SurveyJS library
255 lines (244 loc) • 21.8 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("widgets/jquery-bar-rating", [], factory);
else if(typeof exports === 'object')
exports["widgets/jquery-bar-rating"] = factory();
else
root["widgets/jquery-bar-rating"] = factory();
})(self, () => {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/svg-inline-loader/index.js?classPrefix!./src/images/barrating.svg":
/*!****************************************************************************************!*\
!*** ./node_modules/svg-inline-loader/index.js?classPrefix!./src/images/barrating.svg ***!
\****************************************************************************************/
/***/ ((module) => {
module.exports = "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M12.1,15l-4.6-2.4L2.9,15l0.9-5.1L0,6.3l5.2-0.7L7.5,1l2.3,4.6L15,6.3l-3.8,3.6L12.1,15z\"></path></g></svg>"
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
/*!**********************************!*\
!*** ./src/jquery-bar-rating.js ***!
\**********************************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
function init(Survey, $) {
const iconId = "icon-barrating";
const componentName = "barrating";
Survey.SvgRegistry && Survey.SvgRegistry.registerIconFromSvg(iconId, __webpack_require__(/*! svg-inline-loader?classPrefix!./images/barrating.svg */ "./node_modules/svg-inline-loader/index.js?classPrefix!./src/images/barrating.svg"), "");
$ = $ || window.$;
var widget = {
name: componentName,
title: "Bar rating",
iconName: iconId,
widgetIsLoaded: function () {
return typeof $ == "function" && !!$.fn.barrating;
},
defaultJSON: { choices: [1, 2, 3, 4, 5] },
isFit: function (question) {
return question.getType() === componentName;
},
isDefaultRender: true,
activatedByChanged: function (activatedBy) {
Survey.Serializer.addClass(
componentName,
[
{ name: "hasOther", visible: false },
{ name: "otherText", visible: false },
{ name: "optionsCaption", visible: false },
{ name: "otherErrorText", visible: false },
{ name: "storeOthersAsComment", visible: false },
{ name: "renderAs", visible: false },
{ name: "select2Config", visible: false },
],
null,
"dropdown"
);
let registerQuestion = Survey.ElementFactory.Instance.registerCustomQuestion;
if(!!registerQuestion) registerQuestion(componentName);
Survey.Serializer.addProperty(componentName, {
name: "showValues:boolean",
default: false,
category: "general",
});
Survey.Serializer.addProperty(componentName, {
name: "ratingTheme",
category: "general",
default: "css-stars",
choices: [
"fontawesome-stars",
"css-stars",
"bars-pill",
"bars-1to10",
"bars-movie",
"bars-reversed",
"bars-horizontal",
"fontawesome-stars-o",
],
});
},
afterRender: function (question, el) {
var $customSelect;
var $questionInput;
var contentContainer = $(el).is("select")
? $(el).parent().parent()[0]
: $(el).parent()[0];
var renderCustomSelect = function () {
$customSelect = $("<select class='sv-widget-select'></select>");
question.visibleChoices.forEach(function (choice) {
$customSelect.append(
'<option value="{0}">{1}</option>'.format(choice.value, choice.text)
);
});
$questionInput = $(contentContainer).find(
'[id="{0}"]'.format(question.inputId)
);
$questionInput.css("display", "none");
$questionInput.after($customSelect);
$customSelect[0].selectedIndex = -1;
};
var removeCustomSelect = function () {
$questionInput.css("display", "");
$customSelect.barrating("destroy");
$customSelect.remove();
};
var renderBarrating = function () {
$customSelect.barrating("show", {
theme: question.ratingTheme,
initialRating: question.value,
showValues: question.showValues,
showSelectedRating: false,
readonly: question.isReadOnly,
onSelect: function (value, text) {
valueChangingByWidget = true;
question.value = value;
valueChangingByWidget = false;
},
});
};
renderCustomSelect();
renderBarrating();
if (!!$customSelect.parents()[0])
$customSelect.parents()[0].style.marginBottom = "3px";
var valueChangingByWidget = false;
question.valueChangedCallback = function () {
if (
!valueChangingByWidget &&
$(contentContainer).find("select.sv-widget-select")[0].value !==
question.value
) {
$(contentContainer)
.find("select.sv-widget-select")
.barrating("set", question.value);
}
};
question.__barratingOnPropertyChangedCallback = function (
sender,
options
) {
if (options.name === "ratingTheme" || options.name === "showValues") {
$customSelect.barrating("destroy");
renderBarrating();
}
};
question.onPropertyChanged.add(
question.__barratingOnPropertyChangedCallback
);
question.readOnlyChangedCallback = function () {
removeCustomSelect();
renderCustomSelect();
renderBarrating();
};
question.visibleChoicesChangedCallback = function () {
renderBarrating();
};
},
willUnmount: function (question, el) {
var $contentContainer = $(el).is("select")
? $(el).parent().parent()
: $(el).parent();
var $el = $contentContainer.find("select.sv-widget-select");
$el.barrating("destroy");
$el.remove();
question.valueChangedCallback = undefined;
question.onPropertyChanged.remove(
question.__barratingOnPropertyChangedCallback
);
question.__barratingOnPropertyChangedCallback = undefined;
},
pdfQuestionType: "dropdown",
};
Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, "customtype");
}
if (typeof Survey !== "undefined") {
init(Survey, window.$);
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (init);
})();
/******/ return __webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy9qcXVlcnktYmFyLXJhdGluZy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsbUJBQU8sQ0FBQyw4SUFBc0Q7QUFDckk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtDQUFrQztBQUM5QyxZQUFZLG1DQUFtQztBQUMvQyxZQUFZLHdDQUF3QztBQUNwRCxZQUFZLHdDQUF3QztBQUNwRCxZQUFZLDhDQUE4QztBQUMxRCxZQUFZLGtDQUFrQztBQUM5QyxZQUFZLHVDQUF1QztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtBQUNwQztBQUNBLFNBQVM7QUFDVDtBQUNBLGlCQUFpQixFQUFFO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2ltYWdlcy9iYXJyYXRpbmcuc3ZnIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2pxdWVyeS1iYXItcmF0aW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwid2lkZ2V0cy9qcXVlcnktYmFyLXJhdGluZ1wiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJ3aWRnZXRzL2pxdWVyeS1iYXItcmF0aW5nXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIndpZGdldHMvanF1ZXJ5LWJhci1yYXRpbmdcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxnPjxwYXRoIGQ9XFxcIk0xMi4xLDE1bC00LjYtMi40TDIuOSwxNWwwLjktNS4xTDAsNi4zbDUuMi0wLjdMNy41LDFsMi4zLDQuNkwxNSw2LjNsLTMuOCwzLjZMMTIuMSwxNXpcXFwiPjwvcGF0aD48L2c+PC9zdmc+XCIiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gIGNvbnN0IGljb25JZCA9IFwiaWNvbi1iYXJyYXRpbmdcIjtcbiAgY29uc3QgY29tcG9uZW50TmFtZSA9IFwiYmFycmF0aW5nXCI7XG4gIFN1cnZleS5TdmdSZWdpc3RyeSAmJiBTdXJ2ZXkuU3ZnUmVnaXN0cnkucmVnaXN0ZXJJY29uRnJvbVN2ZyhpY29uSWQsIHJlcXVpcmUoJ3N2Zy1pbmxpbmUtbG9hZGVyP2NsYXNzUHJlZml4IS4vaW1hZ2VzL2JhcnJhdGluZy5zdmcnKSwgXCJcIik7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgdGl0bGU6IFwiQmFyIHJhdGluZ1wiLFxuICAgIGljb25OYW1lOiBpY29uSWQsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgJiYgISEkLmZuLmJhcnJhdGluZztcbiAgICB9LFxuICAgIGRlZmF1bHRKU09OOiB7IGNob2ljZXM6IFsxLCAyLCAzLCA0LCA1XSB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IGNvbXBvbmVudE5hbWU7XG4gICAgfSxcbiAgICBpc0RlZmF1bHRSZW5kZXI6IHRydWUsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5TZXJpYWxpemVyLmFkZENsYXNzKFxuICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJvdGhlckVycm9yVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJyZW5kZXJBc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzZWxlY3QyQ29uZmlnXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwiZHJvcGRvd25cIlxuICAgICAgKTtcbiAgICAgIGxldCByZWdpc3RlclF1ZXN0aW9uID0gU3VydmV5LkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyQ3VzdG9tUXVlc3Rpb247XG4gICAgICBpZighIXJlZ2lzdGVyUXVlc3Rpb24pIHJlZ2lzdGVyUXVlc3Rpb24oY29tcG9uZW50TmFtZSk7XG4gICAgICBTdXJ2ZXkuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShjb21wb25lbnROYW1lLCB7XG4gICAgICAgIG5hbWU6IFwic2hvd1ZhbHVlczpib29sZWFuXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICAgIFN1cnZleS5TZXJpYWxpemVyLmFkZFByb3BlcnR5KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgICAgbmFtZTogXCJyYXRpbmdUaGVtZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiY3NzLXN0YXJzXCIsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICBcImZvbnRhd2Vzb21lLXN0YXJzXCIsXG4gICAgICAgICAgXCJjc3Mtc3RhcnNcIixcbiAgICAgICAgICBcImJhcnMtcGlsbFwiLFxuICAgICAgICAgIFwiYmFycy0xdG8xMFwiLFxuICAgICAgICAgIFwiYmFycy1tb3ZpZVwiLFxuICAgICAgICAgIFwiYmFycy1yZXZlcnNlZFwiLFxuICAgICAgICAgIFwiYmFycy1ob3Jpem9udGFsXCIsXG4gICAgICAgICAgXCJmb250YXdlc29tZS1zdGFycy1vXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGN1c3RvbVNlbGVjdDtcbiAgICAgIHZhciAkcXVlc3Rpb25JbnB1dDtcbiAgICAgIHZhciBjb250ZW50Q29udGFpbmVyID0gJChlbCkuaXMoXCJzZWxlY3RcIilcbiAgICAgICAgPyAkKGVsKS5wYXJlbnQoKS5wYXJlbnQoKVswXVxuICAgICAgICA6ICQoZWwpLnBhcmVudCgpWzBdO1xuICAgICAgdmFyIHJlbmRlckN1c3RvbVNlbGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGN1c3RvbVNlbGVjdCA9ICQoXCI8c2VsZWN0IGNsYXNzPSdzdi13aWRnZXQtc2VsZWN0Jz48L3NlbGVjdD5cIik7XG4gICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICAgICRjdXN0b21TZWxlY3QuYXBwZW5kKFxuICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJ7MH1cIj57MX08L29wdGlvbj4nLmZvcm1hdChjaG9pY2UudmFsdWUsIGNob2ljZS50ZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICAkcXVlc3Rpb25JbnB1dCA9ICQoY29udGVudENvbnRhaW5lcikuZmluZChcbiAgICAgICAgICAnW2lkPVwiezB9XCJdJy5mb3JtYXQocXVlc3Rpb24uaW5wdXRJZClcbiAgICAgICAgKTtcblxuICAgICAgICAkcXVlc3Rpb25JbnB1dC5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgICAgICAgJHF1ZXN0aW9uSW5wdXQuYWZ0ZXIoJGN1c3RvbVNlbGVjdCk7XG4gICAgICAgICRjdXN0b21TZWxlY3RbMF0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgICAgfTtcbiAgICAgIHZhciByZW1vdmVDdXN0b21TZWxlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRxdWVzdGlvbklucHV0LmNzcyhcImRpc3BsYXlcIiwgXCJcIik7XG4gICAgICAgICRjdXN0b21TZWxlY3QuYmFycmF0aW5nKFwiZGVzdHJveVwiKTtcbiAgICAgICAgJGN1c3RvbVNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIH07XG4gICAgICB2YXIgcmVuZGVyQmFycmF0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkY3VzdG9tU2VsZWN0LmJhcnJhdGluZyhcInNob3dcIiwge1xuICAgICAgICAgIHRoZW1lOiBxdWVzdGlvbi5yYXRpbmdUaGVtZSxcbiAgICAgICAgICBpbml0aWFsUmF0aW5nOiBxdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICBzaG93VmFsdWVzOiBxdWVzdGlvbi5zaG93VmFsdWVzLFxuICAgICAgICAgIHNob3dTZWxlY3RlZFJhdGluZzogZmFsc2UsXG4gICAgICAgICAgcmVhZG9ubHk6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uICh2YWx1ZSwgdGV4dCkge1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2luZ0J5V2lkZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZUNoYW5naW5nQnlXaWRnZXQgPSBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZW5kZXJDdXN0b21TZWxlY3QoKTtcbiAgICAgIHJlbmRlckJhcnJhdGluZygpO1xuICAgICAgaWYgKCEhJGN1c3RvbVNlbGVjdC5wYXJlbnRzKClbMF0pXG4gICAgICAgICRjdXN0b21TZWxlY3QucGFyZW50cygpWzBdLnN0eWxlLm1hcmdpbkJvdHRvbSA9IFwiM3B4XCI7XG4gICAgICB2YXIgdmFsdWVDaGFuZ2luZ0J5V2lkZ2V0ID0gZmFsc2U7XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXZhbHVlQ2hhbmdpbmdCeVdpZGdldCAmJlxuICAgICAgICAgICQoY29udGVudENvbnRhaW5lcikuZmluZChcInNlbGVjdC5zdi13aWRnZXQtc2VsZWN0XCIpWzBdLnZhbHVlICE9PVxuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgJChjb250ZW50Q29udGFpbmVyKVxuICAgICAgICAgICAgLmZpbmQoXCJzZWxlY3Quc3Ytd2lkZ2V0LXNlbGVjdFwiKVxuICAgICAgICAgICAgLmJhcnJhdGluZyhcInNldFwiLCBxdWVzdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoXG4gICAgICAgIHNlbmRlcixcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IFwicmF0aW5nVGhlbWVcIiB8fCBvcHRpb25zLm5hbWUgPT09IFwic2hvd1ZhbHVlc1wiKSB7XG4gICAgICAgICAgJGN1c3RvbVNlbGVjdC5iYXJyYXRpbmcoXCJkZXN0cm95XCIpO1xuICAgICAgICAgIHJlbmRlckJhcnJhdGluZygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKFxuICAgICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2tcbiAgICAgICk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlQ3VzdG9tU2VsZWN0KCk7XG4gICAgICAgIHJlbmRlckN1c3RvbVNlbGVjdCgpO1xuICAgICAgICByZW5kZXJCYXJyYXRpbmcoKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVuZGVyQmFycmF0aW5nKCk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkY29udGVudENvbnRhaW5lciA9ICQoZWwpLmlzKFwic2VsZWN0XCIpXG4gICAgICAgID8gJChlbCkucGFyZW50KCkucGFyZW50KClcbiAgICAgICAgOiAkKGVsKS5wYXJlbnQoKTtcbiAgICAgIHZhciAkZWwgPSAkY29udGVudENvbnRhaW5lci5maW5kKFwic2VsZWN0LnN2LXdpZGdldC1zZWxlY3RcIik7XG4gICAgICAkZWwuYmFycmF0aW5nKFwiZGVzdHJveVwiKTtcbiAgICAgICRlbC5yZW1vdmUoKTtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgcXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKFxuICAgICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2tcbiAgICAgICk7XG4gICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBwZGZRdWVzdGlvblR5cGU6IFwiZHJvcGRvd25cIixcbiAgfTtcblxuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcImN1c3RvbXR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5LCB3aW5kb3cuJCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=