/** * koglossarylinks - KOglossaryLinks is a jQuery plugin that shows glossary-style tooltips when hovered (or tapped on touchscreen devices) * @version v0.4.0 * @link https://github.com/mrmartineau/KOglossaryLinks * @license MIT */ ;(function ($, f) { var KOglossaryLinks = function () { var _ = this; _.tooltipClass = 'KOglossaryLinkTooltip'; _.element = '[data-koglossarylink]'; // Set some default options _.options = { sourceURL: '', tooltipwidth: 260, debug: false }; _.init = function (el, options) { _.options = $.extend(_.options, options); _.el = el; _.overEvent = _.supportsTouch() ? "click" : "mouseover"; _.terms = {}; if (_.options.debug) { console.log('_.options', _.options); } $.getJSON(_.options.sourceURL).then(function (data) { var jsonData = data; for (var i = 0; i < jsonData.length; i++) { _.terms[jsonData[i].term.toLowerCase()] = jsonData[i]; } if (_.options.debug) { console.log('All the terms:', _.terms); } }); _.el.on(_.overEvent, _.element, function (event) { event.preventDefault(); event.stopPropagation(); // Close all other tooltips before opening this one _.el.find(_.element).children('.' + _.tooltipClass).removeClass('is-visible'); var tooltipState = $(this).parent('.tooltipWrapper').length ? true : false; // Check if the toolip has been created already var data = $(this).data('koglossarylink') !== undefined ? $(this).data('koglossarylink').toLowerCase() : ''; var tooltipCloseMarkup = _.supportsTouch() ? '
' : ''; var toolTipTitleClass = _.supportsTouch() ? _.tooltipClass + '-title ' + _.tooltipClass + '-title--touch' : _.tooltipClass + '-title'; if ( $(this).parent('.' + _.tooltipClass).hasClass('is-visible') ) { $(this).parent('.' + _.tooltipClass).removeClass('is-visible'); } else { // Only create markup if the tooltip hasn't been created if (tooltipState) { $(this).find('.' + _.tooltipClass).addClass('is-visible'); _.positionTooltip($(this)); return; } else { if (_.terms[data] !== undefined) { var tooltip = '

' + _.terms[data].term + '

' + _.terms[data].description + '
' + tooltipCloseMarkup + '
'; $(this).wrap("").append(tooltip); $(this).find('.' + _.tooltipClass).addClass('is-visible'); _.positionTooltip($(this)); } else { if (_.options.debug) { console.log('No term found'); } } } } }); _.el.on('mouseout', _.element, function () { $(this).find('.' + _.tooltipClass).removeClass('is-visible'); }); _.el.on('click', _.element + ' .' + _.tooltipClass + '-close', function (event) { event.preventDefault(); event.stopPropagation(); $(this).parent('.' + _.tooltipClass).removeClass('is-visible'); }); $(window).resize(_.positionTooltip(_.el.find(_.element))); return _; }; _.positionTooltip = function ($el) { if ($el.offset() === undefined) { return; } var $pos = parseInt($el.offset().left, 10); var $elWidth = $el.width(); var $elCenterPoint = parseInt($pos + ($elWidth / 2), 10); var $windowWidth = $(window).width(); var halfTooltipWidth = _.options.tooltipwidth / 2; var $tooltip = $el.find('.' + _.tooltipClass); var $tooltipTriangle = $el.find('.' + _.tooltipClass + '-triangle'); var difference; var newTooltipCentre; var newArrowCentre; if ($elCenterPoint + halfTooltipWidth > $windowWidth) { // El is floating off right side difference = parseInt( (($elCenterPoint + halfTooltipWidth) - $windowWidth) + 20 , 10); newTooltipCentre = parseInt(halfTooltipWidth + (difference / 2) + 20, 10); newArrowCentre = parseInt(10 + (difference / 2), 10); if (_.options.debug) { console.log('El is floating off right side:', '\nwindow width', $windowWidth, '\nelcentrepoint', $elCenterPoint, '\ndifference', difference, '\nnewtooltipcentre', newTooltipCentre, '\nnewarrowcentre', newArrowCentre); } $tooltip.css({ marginLeft: '-' + newTooltipCentre + 'px' }); $tooltipTriangle.css({ marginLeft: newArrowCentre + 'px' }); } else if ($elCenterPoint - halfTooltipWidth < 0) { // El is floating off left side difference = parseInt($elCenterPoint, 10); newTooltipCentre = difference - 20; newArrowCentre = (halfTooltipWidth - 10) - (difference - 40); if (_.options.debug) { console.log('El is floating off left side:', '\nwindow width', $windowWidth, '\nelcentrepoint', $elCenterPoint, '\ndifference', difference, '\nnewtooltipcentre', newTooltipCentre, '\nnewarrowcentre', newArrowCentre); } $tooltip.css({ marginLeft: '-' + newTooltipCentre + 'px' }); $tooltipTriangle.css({ marginLeft: '-' + newArrowCentre + 'px' }); } else { // Reset position back to normal $tooltip.css({ marginLeft: '-' + halfTooltipWidth + 'px' }); $tooltipTriangle.css({ marginLeft: '-10px' }); } }; _.supportsTouch = function() { return ('ontouchstart' in document.documentElement) || (window.DocumentTouch && document instanceof DocumentTouch || navigator.msMaxTouchPoints ? true : false); }; }; // Create a jQuery plugin $.fn.KOglossaryLinks = function (options) { var len = this.length; return this.each(function (index) { var me = $(this), key = 'KOglossaryLinks' + (len > 1 ? '-' + ++index : ''), instance = (new KOglossaryLinks).init(me, options) ; // Invoke an KOglossaryLinks instance me.data(key, instance).data('key', key); }); }; KOglossaryLinks.version = "0.4.0"; })(jQuery, false); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS1LT2dsb3NzYXJ5TGlua3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LUtPZ2xvc3NhcnlMaW5rcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKCQsIGYpIHtcblx0dmFyIEtPZ2xvc3NhcnlMaW5rcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciBfID0gdGhpcztcblx0XHRfLnRvb2x0aXBDbGFzcyA9ICdLT2dsb3NzYXJ5TGlua1Rvb2x0aXAnO1xuXHRcdF8uZWxlbWVudCAgICAgID0gJ1tkYXRhLWtvZ2xvc3NhcnlsaW5rXSc7XG5cblx0XHQvLyBTZXQgc29tZSBkZWZhdWx0IG9wdGlvbnNcblx0XHRfLm9wdGlvbnMgPSB7XG5cdFx0XHRzb3VyY2VVUkw6ICcnLFxuXHRcdFx0dG9vbHRpcHdpZHRoOiAyNjAsXG5cdFx0XHRkZWJ1ZzogZmFsc2Vcblx0XHR9O1xuXG5cdFx0Xy5pbml0ID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG5cdFx0XHRfLm9wdGlvbnMgPSAkLmV4dGVuZChfLm9wdGlvbnMsIG9wdGlvbnMpO1xuXHRcdFx0Xy5lbCA9IGVsO1xuXHRcdFx0Xy5vdmVyRXZlbnQgPSBfLnN1cHBvcnRzVG91Y2goKSA/IFwiY2xpY2tcIiA6IFwibW91c2VvdmVyXCI7XG5cdFx0XHRfLnRlcm1zID0ge307XG5cblx0XHRcdGlmIChfLm9wdGlvbnMuZGVidWcpIHsgY29uc29sZS5sb2coJ18ub3B0aW9ucycsIF8ub3B0aW9ucyk7IH1cblxuXHRcdFx0JC5nZXRKU09OKF8ub3B0aW9ucy5zb3VyY2VVUkwpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcblx0XHRcdFx0dmFyIGpzb25EYXRhID0gZGF0YTtcblxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Xy50ZXJtc1tqc29uRGF0YVtpXS50ZXJtLnRvTG93ZXJDYXNlKCldID0ganNvbkRhdGFbaV07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKF8ub3B0aW9ucy5kZWJ1ZykgeyBjb25zb2xlLmxvZygnQWxsIHRoZSB0ZXJtczonLCBfLnRlcm1zKTsgfVxuXHRcdFx0fSk7XG5cblx0XHRcdF8uZWwub24oXy5vdmVyRXZlbnQsIF8uZWxlbWVudCwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0XHRcdC8vIENsb3NlIGFsbCBvdGhlciB0b29sdGlwcyBiZWZvcmUgb3BlbmluZyB0aGlzIG9uZVxuXHRcdFx0XHRfLmVsLmZpbmQoXy5lbGVtZW50KS5jaGlsZHJlbignLicgKyBfLnRvb2x0aXBDbGFzcykucmVtb3ZlQ2xhc3MoJ2lzLXZpc2libGUnKTtcblxuXHRcdFx0XHR2YXIgdG9vbHRpcFN0YXRlICAgICAgID0gJCh0aGlzKS5wYXJlbnQoJy50b29sdGlwV3JhcHBlcicpLmxlbmd0aCA/IHRydWUgOiBmYWxzZTsgLy8gQ2hlY2sgaWYgdGhlIHRvb2xpcCBoYXMgYmVlbiBjcmVhdGVkIGFscmVhZHlcblx0XHRcdFx0dmFyIGRhdGEgICAgICAgICAgICAgICA9ICQodGhpcykuZGF0YSgna29nbG9zc2FyeWxpbmsnKSAhPT0gdW5kZWZpbmVkID8gJCh0aGlzKS5kYXRhKCdrb2dsb3NzYXJ5bGluaycpLnRvTG93ZXJDYXNlKCkgOiAnJztcblx0XHRcdFx0dmFyIHRvb2x0aXBDbG9zZU1hcmt1cCA9IF8uc3VwcG9ydHNUb3VjaCgpID8gJzxkaXYgY2xhc3M9XCInICsgXy50b29sdGlwQ2xhc3MgKyAnLWNsb3NlIGljb24tY2xvc2VcIj48L2Rpdj4nIDogJyc7XG5cdFx0XHRcdHZhciB0b29sVGlwVGl0bGVDbGFzcyAgPSBfLnN1cHBvcnRzVG91Y2goKSA/IF8udG9vbHRpcENsYXNzICsgJy10aXRsZSAnICsgXy50b29sdGlwQ2xhc3MgKyAnLXRpdGxlLS10b3VjaCcgOiBfLnRvb2x0aXBDbGFzcyArICctdGl0bGUnO1xuXG5cdFx0XHRcdGlmICggJCh0aGlzKS5wYXJlbnQoJy4nICsgXy50b29sdGlwQ2xhc3MpLmhhc0NsYXNzKCdpcy12aXNpYmxlJykgKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoJy4nICsgXy50b29sdGlwQ2xhc3MpLnJlbW92ZUNsYXNzKCdpcy12aXNpYmxlJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT25seSBjcmVhdGUgbWFya3VwIGlmIHRoZSB0b29sdGlwIGhhc24ndCBiZWVuIGNyZWF0ZWRcblx0XHRcdFx0XHRpZiAodG9vbHRpcFN0YXRlKSB7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoJy4nICsgXy50b29sdGlwQ2xhc3MpLmFkZENsYXNzKCdpcy12aXNpYmxlJyk7XG5cdFx0XHRcdFx0XHRfLnBvc2l0aW9uVG9vbHRpcCgkKHRoaXMpKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKF8udGVybXNbZGF0YV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdG9vbHRpcCA9ICc8ZGl2IGNsYXNzPVwiJyArIF8udG9vbHRpcENsYXNzICsgJ1wiPjxoMyBjbGFzcz1cIicgKyB0b29sVGlwVGl0bGVDbGFzcyArICdcIj4nICsgXy50ZXJtc1tkYXRhXS50ZXJtICsgJzwvaDM+PGRpdiBjbGFzcz1cIicgKyBfLnRvb2x0aXBDbGFzcyArICctZGVzY3JpcHRpb25cIj4nICsgXy50ZXJtc1tkYXRhXS5kZXNjcmlwdGlvbiArICc8L2Rpdj4nICsgdG9vbHRpcENsb3NlTWFya3VwICsgJzxzcGFuIGNsYXNzPVwiJyArIF8udG9vbHRpcENsYXNzICsgJy10cmlhbmdsZVwiPjwvc3Bhbj48L2Rpdj4nO1xuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLndyYXAoXCI8c3BhbiBjbGFzcz0ndG9vbHRpcFdyYXBwZXInPjwvc3Bhbj5cIikuYXBwZW5kKHRvb2x0aXApO1xuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoJy4nICsgXy50b29sdGlwQ2xhc3MpLmFkZENsYXNzKCdpcy12aXNpYmxlJyk7XG5cdFx0XHRcdFx0XHRcdF8ucG9zaXRpb25Ub29sdGlwKCQodGhpcykpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKF8ub3B0aW9ucy5kZWJ1ZykgeyBjb25zb2xlLmxvZygnTm8gdGVybSBmb3VuZCcpOyB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Xy5lbC5vbignbW91c2VvdXQnLCBfLmVsZW1lbnQsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JCh0aGlzKS5maW5kKCcuJyArIF8udG9vbHRpcENsYXNzKS5yZW1vdmVDbGFzcygnaXMtdmlzaWJsZScpO1xuXHRcdFx0fSk7XG5cblx0XHRcdF8uZWwub24oJ2NsaWNrJywgXy5lbGVtZW50ICsgJyAuJyArIF8udG9vbHRpcENsYXNzICsgJy1jbG9zZScsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoJy4nICsgXy50b29sdGlwQ2xhc3MpLnJlbW92ZUNsYXNzKCdpcy12aXNpYmxlJyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0JCh3aW5kb3cpLnJlc2l6ZShfLnBvc2l0aW9uVG9vbHRpcChfLmVsLmZpbmQoXy5lbGVtZW50KSkpO1xuXG5cdFx0XHRyZXR1cm4gXztcblx0XHR9O1xuXG5cdFx0Xy5wb3NpdGlvblRvb2x0aXAgPSBmdW5jdGlvbiAoJGVsKSB7XG5cdFx0XHRpZiAoJGVsLm9mZnNldCgpID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9XG5cblx0XHRcdHZhciAkcG9zID0gcGFyc2VJbnQoJGVsLm9mZnNldCgpLmxlZnQsIDEwKTtcblx0XHRcdHZhciAkZWxXaWR0aCA9ICRlbC53aWR0aCgpO1xuXHRcdFx0dmFyICRlbENlbnRlclBvaW50ID0gcGFyc2VJbnQoJHBvcyArICgkZWxXaWR0aCAvIDIpLCAxMCk7XG5cdFx0XHR2YXIgJHdpbmRvd1dpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG5cdFx0XHR2YXIgaGFsZlRvb2x0aXBXaWR0aCA9IF8ub3B0aW9ucy50b29sdGlwd2lkdGggLyAyO1xuXHRcdFx0dmFyICR0b29sdGlwID0gJGVsLmZpbmQoJy4nICsgXy50b29sdGlwQ2xhc3MpO1xuXHRcdFx0dmFyICR0b29sdGlwVHJpYW5nbGUgPSAkZWwuZmluZCgnLicgKyBfLnRvb2x0aXBDbGFzcyArICctdHJpYW5nbGUnKTtcblx0XHRcdHZhciBkaWZmZXJlbmNlO1xuXHRcdFx0dmFyIG5ld1Rvb2x0aXBDZW50cmU7XG5cdFx0XHR2YXIgbmV3QXJyb3dDZW50cmU7XG5cblx0XHRcdGlmICgkZWxDZW50ZXJQb2ludCArIGhhbGZUb29sdGlwV2lkdGggPiAkd2luZG93V2lkdGgpIHtcblx0XHRcdFx0Ly8gRWwgaXMgZmxvYXRpbmcgb2ZmIHJpZ2h0IHNpZGVcblx0XHRcdFx0ZGlmZmVyZW5jZSAgICAgICA9IHBhcnNlSW50KCAoKCRlbENlbnRlclBvaW50ICsgaGFsZlRvb2x0aXBXaWR0aCkgLSAkd2luZG93V2lkdGgpICsgMjAgLCAxMCk7XG5cdFx0XHRcdG5ld1Rvb2x0aXBDZW50cmUgPSBwYXJzZUludChoYWxmVG9vbHRpcFdpZHRoICsgKGRpZmZlcmVuY2UgLyAyKSArIDIwLCAxMCk7XG5cdFx0XHRcdG5ld0Fycm93Q2VudHJlICAgPSBwYXJzZUludCgxMCArIChkaWZmZXJlbmNlIC8gMiksIDEwKTtcblxuXHRcdFx0XHRpZiAoXy5vcHRpb25zLmRlYnVnKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ0VsIGlzIGZsb2F0aW5nIG9mZiByaWdodCBzaWRlOicsICdcXG53aW5kb3cgd2lkdGgnLCAkd2luZG93V2lkdGgsICdcXG5lbGNlbnRyZXBvaW50JywgJGVsQ2VudGVyUG9pbnQsICdcXG5kaWZmZXJlbmNlJywgZGlmZmVyZW5jZSwgJ1xcbm5ld3Rvb2x0aXBjZW50cmUnLCBuZXdUb29sdGlwQ2VudHJlLCAnXFxubmV3YXJyb3djZW50cmUnLCBuZXdBcnJvd0NlbnRyZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkdG9vbHRpcC5jc3Moe1xuXHRcdFx0XHRcdG1hcmdpbkxlZnQ6ICctJyArIG5ld1Rvb2x0aXBDZW50cmUgKyAncHgnXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkdG9vbHRpcFRyaWFuZ2xlLmNzcyh7XG5cdFx0XHRcdFx0bWFyZ2luTGVmdDogbmV3QXJyb3dDZW50cmUgKyAncHgnXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCRlbENlbnRlclBvaW50IC0gaGFsZlRvb2x0aXBXaWR0aCA8IDApIHtcblx0XHRcdFx0Ly8gRWwgaXMgZmxvYXRpbmcgb2ZmIGxlZnQgc2lkZVxuXHRcdFx0XHRkaWZmZXJlbmNlICAgICAgID0gcGFyc2VJbnQoJGVsQ2VudGVyUG9pbnQsIDEwKTtcblx0XHRcdFx0bmV3VG9vbHRpcENlbnRyZSA9IGRpZmZlcmVuY2UgLSAyMDtcblx0XHRcdFx0bmV3QXJyb3dDZW50cmUgICA9IChoYWxmVG9vbHRpcFdpZHRoIC0gMTApIC0gKGRpZmZlcmVuY2UgLSA0MCk7XG5cblx0XHRcdFx0aWYgKF8ub3B0aW9ucy5kZWJ1Zykge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdFbCBpcyBmbG9hdGluZyBvZmYgbGVmdCBzaWRlOicsICdcXG53aW5kb3cgd2lkdGgnLCAkd2luZG93V2lkdGgsICdcXG5lbGNlbnRyZXBvaW50JywgJGVsQ2VudGVyUG9pbnQsICdcXG5kaWZmZXJlbmNlJywgZGlmZmVyZW5jZSwgJ1xcbm5ld3Rvb2x0aXBjZW50cmUnLCBuZXdUb29sdGlwQ2VudHJlLCAnXFxubmV3YXJyb3djZW50cmUnLCBuZXdBcnJvd0NlbnRyZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkdG9vbHRpcC5jc3Moe1xuXHRcdFx0XHRcdG1hcmdpbkxlZnQ6ICctJyArIG5ld1Rvb2x0aXBDZW50cmUgKyAncHgnXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkdG9vbHRpcFRyaWFuZ2xlLmNzcyh7XG5cdFx0XHRcdFx0bWFyZ2luTGVmdDogJy0nICsgbmV3QXJyb3dDZW50cmUgKyAncHgnXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBSZXNldCBwb3NpdGlvbiBiYWNrIHRvIG5vcm1hbFxuXHRcdFx0XHQkdG9vbHRpcC5jc3Moe1xuXHRcdFx0XHRcdG1hcmdpbkxlZnQ6ICctJyArIGhhbGZUb29sdGlwV2lkdGggKyAncHgnXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkdG9vbHRpcFRyaWFuZ2xlLmNzcyh7XG5cdFx0XHRcdFx0bWFyZ2luTGVmdDogJy0xMHB4J1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Xy5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgfHwgKHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRUb3VjaCB8fCBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyA/IHRydWUgOiBmYWxzZSk7XG5cdFx0fTtcblxuXHR9O1xuXG5cblx0Ly8gIENyZWF0ZSBhIGpRdWVyeSBwbHVnaW5cblx0JC5mbi5LT2dsb3NzYXJ5TGlua3MgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHR2YXIgbWUgPSAkKHRoaXMpLFxuXHRcdFx0XHRrZXkgPSAnS09nbG9zc2FyeUxpbmtzJyArIChsZW4gPiAxID8gJy0nICsgKytpbmRleCA6ICcnKSxcblx0XHRcdFx0aW5zdGFuY2UgPSAobmV3IEtPZ2xvc3NhcnlMaW5rcykuaW5pdChtZSwgb3B0aW9ucylcblx0XHRcdDtcblxuXHRcdFx0Ly8gIEludm9rZSBhbiBLT2dsb3NzYXJ5TGlua3MgaW5zdGFuY2Vcblx0XHRcdG1lLmRhdGEoa2V5LCBpbnN0YW5jZSkuZGF0YSgna2V5Jywga2V5KTtcblx0XHR9KTtcblx0fTtcblxuXHRLT2dsb3NzYXJ5TGlua3MudmVyc2lvbiA9IFwiMC40LjBcIjtcbn0pKGpRdWVyeSwgZmFsc2UpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9