@future-grid/fgp-graph
Version:
fgp-graph is a chart lib based on Dygraphs
151 lines (121 loc) • 20.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _utils = _interopRequireDefault(require("../../utils"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var Badges = function Badges(parentElement, collection, collectionSelectionListener) {
var _this = this;
_classCallCheck(this, Badges);
this.parentElement = parentElement;
this.collection = collection;
this.collectionSelectionListener = collectionSelectionListener;
_defineProperty(this, "badgesArray", []);
_defineProperty(this, "dateWindow", [0, 0]);
_defineProperty(this, "lockedCollection", void 0);
_defineProperty(this, "lockOrUnlockInterval", function (label) {
if (label && _this.collection) {
_this.collection.map(function (_coll) {
if (_coll.label === label) {
_coll.locked = !_coll.locked;
if (_coll.locked) {
// update style
_this.badgesArray.map(function (badge) {
if (_coll.name === badge.getAttribute("data-fgp-badge")) {
// change color
badge.setAttribute("class", "badge badge-pill badge-warning badge-interval");
_this.lockedCollection = _coll;
} else {
badge.setAttribute("class", "badge badge-pill badge-secondary badge-interval");
}
});
console.log("update to locked!");
} else if (!_coll.locked) {
_this.badgesArray.map(function (badge) {
if (_coll.name === badge.getAttribute("data-fgp-badge")) {
// change color
badge.setAttribute("class", "badge badge-pill badge-success badge-interval");
} else {
badge.setAttribute("class", "badge badge-pill badge-secondary badge-interval");
}
});
_this.lockedCollection = undefined; // need to find a collection base on date window
var bestCollection = _utils["default"].findBestCollection(_this.collection, _this.dateWindow);
_this.badgesArray.map(function (badge) {
if (bestCollection && bestCollection.name === badge.getAttribute("data-fgp-badge")) {
// change color
badge.setAttribute("class", "badge badge-pill badge-success badge-interval");
} else {
badge.setAttribute("class", "badge badge-pill badge-secondary badge-interval");
}
});
console.log("update to unlocked!");
}
} else {
_coll.locked = false;
}
});
}
if (_this.collectionSelectionListener && _this.collection) {
// update collections
var bestCollection = _utils["default"].findBestCollection(_this.collection, _this.dateWindow);
_this.collection.map(function (_collection) {
_collection.show = _collection.name === (bestCollection === null || bestCollection === void 0 ? void 0 : bestCollection.name);
});
_this.collectionSelectionListener(_this.collection);
}
});
_defineProperty(this, "initDom", function () {
//
var badgesContainer = document.createElement("div");
badgesContainer.setAttribute("class", "fgp-interval-labels");
_this.collection.forEach(function (coll) {
var badge = document.createElement("span");
badge.textContent = coll.label;
badge.setAttribute("data-fgp-badge", coll.name);
badge.setAttribute("class", "badge badge-pill badge-secondary badge-interval");
badge.setAttribute("data-interval-locked", "false");
badge.setAttribute("data-interval-name", coll.label);
badge.setAttribute("data-interval-value", coll.interval + "");
badge.addEventListener("click", function (e) {
if (e && e.currentTarget) {
var span = e.currentTarget;
_this.lockOrUnlockInterval(span.textContent);
}
});
badgesContainer.appendChild(badge);
_this.badgesArray.push(badge);
});
_this.parentElement.appendChild(badgesContainer);
});
_defineProperty(this, "autoSelect", function (collection) {
// console.log("update badge labels");
_this.badgesArray.map(function (badge) {
if (collection.name === badge.getAttribute("data-fgp-badge")) {
// change color
if (!_this.lockedCollection) {
badge.setAttribute("class", "badge badge-pill badge-success badge-interval");
}
} else {
badge.setAttribute("class", "badge badge-pill badge-secondary badge-interval");
}
});
});
_defineProperty(this, "setDateWindow", function (dateWindow) {
// check if different
if (_this.dateWindow[0] !== dateWindow[0] || _this.dateWindow[1] !== dateWindow[1]) {
_this.dateWindow = [dateWindow[0], dateWindow[1]]; // console.log(`badge dateWindow has been updated! `, this.dateWindow);
}
});
this.initDom();
}
/**
*
* @param label
*/
;
exports["default"] = Badges;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9leHRyYXMvdG9vbGJhci93aWRnZXRzL0JhZGdlcy50cyJdLCJuYW1lcyI6WyJCYWRnZXMiLCJwYXJlbnRFbGVtZW50IiwiY29sbGVjdGlvbiIsImNvbGxlY3Rpb25TZWxlY3Rpb25MaXN0ZW5lciIsImxhYmVsIiwibWFwIiwiX2NvbGwiLCJsb2NrZWQiLCJiYWRnZXNBcnJheSIsImJhZGdlIiwibmFtZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImxvY2tlZENvbGxlY3Rpb24iLCJjb25zb2xlIiwibG9nIiwidW5kZWZpbmVkIiwiYmVzdENvbGxlY3Rpb24iLCJ1dGlscyIsImZpbmRCZXN0Q29sbGVjdGlvbiIsImRhdGVXaW5kb3ciLCJfY29sbGVjdGlvbiIsInNob3ciLCJiYWRnZXNDb250YWluZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJmb3JFYWNoIiwiY29sbCIsInRleHRDb250ZW50IiwiaW50ZXJ2YWwiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImN1cnJlbnRUYXJnZXQiLCJzcGFuIiwibG9ja09yVW5sb2NrSW50ZXJ2YWwiLCJhcHBlbmRDaGlsZCIsInB1c2giLCJpbml0RG9tIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7Ozs7O0lBRXFCQSxNLEdBT2pCLGdCQUNXQyxhQURYLEVBRVdDLFVBRlgsRUFHV0MsMkJBSFgsRUFNRTtBQUFBOztBQUFBOztBQUFBLE9BTFNGLGFBS1QsR0FMU0EsYUFLVDtBQUFBLE9BSlNDLFVBSVQsR0FKU0EsVUFJVDtBQUFBLE9BSFNDLDJCQUdULEdBSFNBLDJCQUdUOztBQUFBLHVDQVo4QyxFQVk5Qzs7QUFBQSxzQ0FWcUMsQ0FBQyxDQUFELEVBQUksQ0FBSixDQVVyQzs7QUFBQTs7QUFBQSxnREFTNkIsVUFBQ0MsS0FBRCxFQUEwQjtBQUNyRCxRQUFJQSxLQUFLLElBQUksS0FBSSxDQUFDRixVQUFsQixFQUE4QjtBQUMxQixNQUFBLEtBQUksQ0FBQ0Es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QUFMLENBQWlCNEIsSUFBakIsQ0FBc0IzQixLQUF0QjtBQUNILEtBbkJEOztBQW9CQSxJQUFBLEtBQUksQ0FBQ1IsYUFBTCxDQUFtQmtDLFdBQW5CLENBQStCWixlQUEvQjtBQUNILEdBMUhDOztBQUFBLHNDQWdJa0IsVUFBQ3JCLFVBQUQsRUFBaUM7QUFDakQ7QUFDQSxJQUFBLEtBQUksQ0FBQ00sV0FBTCxDQUFpQkgsR0FBakIsQ0FBcUIsVUFBQUksS0FBSyxFQUFJO0FBQzFCLFVBQUlQLFVBQVUsQ0FBQ1EsSUFBWCxLQUFvQkQsS0FBSyxDQUFDRSxZQUFOLENBQW1CLGdCQUFuQixDQUF4QixFQUE4RDtBQUMxRDtBQUNBLFlBQUksQ0FBQyxLQUFJLENBQUNFLGdCQUFWLEVBQTRCO0FBQ3hCSixVQUFBQSxLQUFLLENBQUNHLFlBQU4sQ0FDSSxPQURKLEVBRUksK0NBRko7QUFJSDtBQUNKLE9BUkQsTUFRTztBQUNISCxRQUFBQSxLQUFLLENBQUNHLFlBQU4sQ0FDSSxPQURKLEVBRUksaURBRko7QUFJSDtBQUNKLEtBZkQ7QUFnQkgsR0FsSkM7O0FBQUEseUNBd0pxQixVQUFDUSxVQUFELEVBQStCO0FBQ2xEO0FBQ0EsUUFDSSxLQUFJLENBQUNBLFVBQUwsQ0FBZ0IsQ0FBaEIsTUFBdUJBLFVBQVUsQ0FBQyxDQUFELENBQWpDLElBQ0EsS0FBSSxDQUFDQSxVQUFMLENBQWdCLENBQWhCLE1BQXVCQSxVQUFVLENBQUMsQ0FBRCxDQUZyQyxFQUdFO0FBQ0UsTUFBQSxLQUFJLENBQUNBLFVBQUwsR0FBa0IsQ0FBQ0EsVUFBVSxDQUFDLENBQUQsQ0FBWCxFQUFnQkEsVUFBVSxDQUFDLENBQUQsQ0FBMUIsQ0FBbEIsQ0FERixDQUVFO0FBQ0g7QUFDSixHQWpLQzs7QUFDRSxPQUFLaUIsT0FBTDtBQUNIO0FBR0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0dyYXBoQ29sbGVjdGlvbn0gZnJvbSBcIi4uLy4uLy4uL21ldGFkYXRhL2NvbmZpZ3VyYXRpb25zXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhZGdlcyB7XG4gICAgcHJvdGVjdGVkIGJhZGdlc0FycmF5OiBBcnJheTxIVE1MU3BhbkVsZW1lbnQ+ID0gW107XG5cbiAgICBwcml2YXRlIGRhdGVXaW5kb3c6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG5cbiAgICBwcml2YXRlIGxvY2tlZENvbGxlY3Rpb24/OiBHcmFwaENvbGxlY3Rpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgICAgIHB1YmxpYyBjb2xsZWN0aW9uOiBBcnJheTxHcmFwaENvbGxlY3Rpb24+LFxuICAgICAgICBwdWJsaWMgY29sbGVjdGlvblNlbGVjdGlvbkxpc3RlbmVyPzogKFxuICAgICAgICAgICAgY29sbGVjdGlvbnM6IEFycmF5PEdyYXBoQ29sbGVjdGlvbj5cbiAgICAgICAgKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdERvbSgpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGFiZWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvY2tPclVubG9ja0ludGVydmFsID0gKGxhYmVsOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmIChsYWJlbCAmJiB0aGlzLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbi5tYXAoX2NvbGwgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChfY29sbC5sYWJlbCA9PT0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgX2NvbGwubG9ja2VkID0gIV9jb2xsLmxvY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9jb2xsLmxvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHN0eWxlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc0FycmF5Lm1hcChiYWRnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jb2xsLm5hbWUgPT09IGJhZGdlLmdldEF0dHJpYnV0ZShcImRhdGEtZmdwLWJhZGdlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSBjb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRnZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJhZGdlIGJhZGdlLXBpbGwgYmFkZ2Utd2FybmluZyBiYWRnZS1pbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9ja2VkQ29sbGVjdGlvbiA9IF9jb2xsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1zZWNvbmRhcnkgYmFkZ2UtaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVwZGF0ZSB0byBsb2NrZWQhYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9jb2xsLmxvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNBcnJheS5tYXAoYmFkZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29sbC5uYW1lID09PSBiYWRnZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZncC1iYWRnZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgY29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2Uuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXN1Y2Nlc3MgYmFkZ2UtaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1zZWNvbmRhcnkgYmFkZ2UtaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NrZWRDb2xsZWN0aW9uID0gdW5kZWZpbmVkO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gZmluZCBhIGNvbGxlY3Rpb24gYmFzZSBvbiBkYXRlIHdpbmRvd1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVzdENvbGxlY3Rpb24gPSB1dGlscy5maW5kQmVzdENvbGxlY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVdpbmRvd1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNBcnJheS5tYXAoYmFkZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdENvbGxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdENvbGxlY3Rpb24ubmFtZSA9PT0gYmFkZ2UuZ2V0QXR0cmlidXRlKFwiZGF0YS1mZ3AtYmFkZ2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1zdWNjZXNzIGJhZGdlLWludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRnZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJhZGdlIGJhZGdlLXBpbGwgYmFkZ2Utc2Vjb25kYXJ5IGJhZGdlLWludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVwZGF0ZSB0byB1bmxvY2tlZCFgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9jb2xsLmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvblNlbGVjdGlvbkxpc3RlbmVyICYmIHRoaXMuY29sbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGNvbGxlY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBiZXN0Q29sbGVjdGlvbiA9IHV0aWxzLmZpbmRCZXN0Q29sbGVjdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlV2luZG93XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLm1hcChfY29sbGVjdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgX2NvbGxlY3Rpb24uc2hvdyA9IF9jb2xsZWN0aW9uLm5hbWUgPT09IGJlc3RDb2xsZWN0aW9uPy5uYW1lO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblNlbGVjdGlvbkxpc3RlbmVyKHRoaXMuY29sbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBpbml0RG9tID0gKCkgPT4ge1xuICAgICAgICAvL1xuICAgICAgICBsZXQgYmFkZ2VzQ29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGJhZGdlc0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImZncC1pbnRlcnZhbC1sYWJlbHNcIik7XG5cbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goY29sbCA9PiB7XG4gICAgICAgICAgICBsZXQgYmFkZ2U6IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICAgICAgYmFkZ2UudGV4dENvbnRlbnQgPSBjb2xsLmxhYmVsO1xuICAgICAgICAgICAgYmFkZ2Uuc2V0QXR0cmlidXRlKFwiZGF0YS1mZ3AtYmFkZ2VcIiwgY29sbC5uYW1lKTtcbiAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgXCJiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBiYWRnZS1pbnRlcnZhbFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYmFkZ2Uuc2V0QXR0cmlidXRlKFwiZGF0YS1pbnRlcnZhbC1sb2NrZWRcIiwgXCJmYWxzZVwiKTtcbiAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcImRhdGEtaW50ZXJ2YWwtbmFtZVwiLCBjb2xsLmxhYmVsKTtcbiAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcImRhdGEtaW50ZXJ2YWwtdmFsdWVcIiwgY29sbC5pbnRlcnZhbCArIFwiXCIpO1xuICAgICAgICAgICAgYmFkZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW46IEhUTUxTcGFuRWxlbWVudCA9IDxIVE1MU3BhbkVsZW1lbnQ+ZS5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2tPclVubG9ja0ludGVydmFsKHNwYW4udGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmFkZ2VzQ29udGFpbmVyLmFwcGVuZENoaWxkKGJhZGdlKTtcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzQXJyYXkucHVzaChiYWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFkZ2VzQ29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY3VycmVudCBjb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0b1NlbGVjdCA9IChjb2xsZWN0aW9uOiBHcmFwaENvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ1cGRhdGUgYmFkZ2UgbGFiZWxzXCIpO1xuICAgICAgICB0aGlzLmJhZGdlc0FycmF5Lm1hcChiYWRnZSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5uYW1lID09PSBiYWRnZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZncC1iYWRnZVwiKSkge1xuICAgICAgICAgICAgICAgIC8vIGNoYW5nZSBjb2xvclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2NrZWRDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1zdWNjZXNzIGJhZGdlLWludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICBcImJhZGdlIGJhZGdlLXBpbGwgYmFkZ2Utc2Vjb25kYXJ5IGJhZGdlLWludGVydmFsXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogMiBudW1iZXJzXG4gICAgICogQHBhcmFtIGRhdGVXaW5kb3dcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGF0ZVdpbmRvdyA9IChkYXRlV2luZG93OiBBcnJheTxudW1iZXI+KSA9PiB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGRpZmZlcmVudFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRhdGVXaW5kb3dbMF0gIT09IGRhdGVXaW5kb3dbMF0gfHxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVdpbmRvd1sxXSAhPT0gZGF0ZVdpbmRvd1sxXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVdpbmRvdyA9IFtkYXRlV2luZG93WzBdLCBkYXRlV2luZG93WzFdXTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBiYWRnZSBkYXRlV2luZG93IGhhcyBiZWVuIHVwZGF0ZWQhIGAsIHRoaXMuZGF0ZVdpbmRvdyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19