ignite-html/dev/framework.js

3 lines
13 KiB
JavaScript

class attribute{constructor(name,value){this.name=name,this.value=value}}class collection{constructor(items){this.siblings=[],this.children=[],this.attributes=[],this.classes=[],this.tagName=null,this.element=null;for(var i=0;i<items.length;i++)items[i]instanceof attribute?this.attributes.push(items[i]):items[i]instanceof property?this.children.push(new propertyObserver(items[i])):this.children.push(items[i])}class(...items){for(var i=0;i<items.length;i++)items[i]instanceof property?items[i].onPropertyChange.push((oldValue,newValue)=>this.onClassChanged(oldValue,newValue)):this.classes.push(items[i]);return this}div(...items){return this.siblings.push(new div(...items)),this}p(...items){return this.siblings.push(new p(...items)),this}construct(parent){parent||(parent=window.document.body),this.element=window.document.createElement(this.tagName),parent.appendChild(this.element);for(var i=0;i<this.children.length;i++)this.children[i]instanceof String||"string"==typeof this.children[i]?this.element.appendChild(document.createTextNode(this.children[i])):(this.children[i]instanceof collection||this.children[i].prototype instanceof collection||this.children[i].prototype.constructor===collection)&&this.children[i].construct(this.element);for(i=0;i<this.siblings.length;i++)this.siblings[i]instanceof String||"string"==typeof this.siblings[i]?this.parent.appendChild(document.createTextNode(this.siblings[i])):(this.siblings[i]instanceof collection||this.siblings[i].prototype instanceof collection||this.siblings[i].prototype.constructor===collection)&&this.siblings[i].construct(parent)}onClassChanged(oldValue,newValue){console.log(`Class changed, oldValue: ${oldValue} newValue: ${newValue}`),oldValue&&""!==oldValue&&" "!==oldValue&&this.element.classList.remove(oldValue),newValue&&""!==newValue&&" "!==newValue&&this.element.classList.add(newValue)}}class div extends collection{constructor(...items){super(items),this.tagName="div"}}class p extends collection{constructor(...items){super(items),this.tagName="p"}}class h1 extends collection{constructor(...items){super(items),this.tagName="h1"}}class propertyObserver extends collection{constructor(property){super([]),this.property=property,this.property.onPropertyChange.push((oldValue,newValue)=>this.onUpdateProperty(oldValue,newValue))}construct(parent){this.element=document.createTextNode(""),parent.appendChild(this.element)}onUpdateProperty(oldValue,newValue){this.element.nodeValue=newValue}}class property{constructor(){this.onPropertyChange=[],this._value=null}get value(){return this._value}set value(val){var old=this._value;this._value=val;for(var i=0;i<this.onPropertyChange.length;i++)this.onPropertyChange[i](old,val)}}var prop=new property,classProp=new property;console.log("Property:"),console.log(prop),console.log("Class Property:"),console.log(classProp);var test=new div(new h1("I am a heading").class(classProp),new p(prop)).div(new p("This is content"));test.construct(window.document.body),console.log(test);
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyYW1ld29yay5qcyJdLCJuYW1lcyI6WyJhdHRyaWJ1dGUiLCJbb2JqZWN0IE9iamVjdF0iLCJuYW1lIiwidmFsdWUiLCJ0aGlzIiwiY29sbGVjdGlvbiIsIml0ZW1zIiwic2libGluZ3MiLCJjaGlsZHJlbiIsImF0dHJpYnV0ZXMiLCJjbGFzc2VzIiwidGFnTmFtZSIsImVsZW1lbnQiLCJpIiwibGVuZ3RoIiwicHVzaCIsInByb3BlcnR5IiwicHJvcGVydHlPYnNlcnZlciIsIm9uUHJvcGVydHlDaGFuZ2UiLCJvbGRWYWx1ZSIsIm5ld1ZhbHVlIiwib25DbGFzc0NoYW5nZWQiLCJkaXYiLCJwIiwicGFyZW50Iiwid2luZG93IiwiZG9jdW1lbnQiLCJib2R5IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiU3RyaW5nIiwiY3JlYXRlVGV4dE5vZGUiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsImNvbnN0cnVjdCIsImNvbnNvbGUiLCJsb2ciLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJhZGQiLCJzdXBlciIsImgxIiwib25VcGRhdGVQcm9wZXJ0eSIsIm5vZGVWYWx1ZSIsIl92YWx1ZSIsInZhbCIsIm9sZCIsInByb3AiLCJjbGFzc1Byb3AiLCJ0ZXN0IiwiY2xhc3MiXSwibWFwcGluZ3MiOiJBQUFBLE1BQU1BLFVBQ0ZDLFlBQVlDLEtBQU1DLE9BQ2RDLEtBQUtGLEtBQU9BLEtBQ1pFLEtBQUtELE1BQVFBLE9BSXJCLE1BQU1FLFdBQ0ZKLFlBQVlLLE9BQ1JGLEtBQUtHLFNBQVcsR0FDaEJILEtBQUtJLFNBQVcsR0FDaEJKLEtBQUtLLFdBQWEsR0FDbEJMLEtBQUtNLFFBQVUsR0FDZk4sS0FBS08sUUFBVSxLQUNmUCxLQUFLUSxRQUFVLEtBRWYsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlQLE1BQU1RLE9BQVFELElBQzFCUCxNQUFNTyxhQUFjYixVQUNwQkksS0FBS0ssV0FBV00sS0FBS1QsTUFBTU8sSUFDcEJQLE1BQU1PLGFBQWNHLFNBQzNCWixLQUFLSSxTQUFTTyxLQUFLLElBQUlFLGlCQUFpQlgsTUFBTU8sS0FFOUNULEtBQUtJLFNBQVNPLEtBQUtULE1BQU1PLElBS3JDWixTQUFTSyxPQUNMLElBQUssSUFBSU8sRUFBSSxFQUFHQSxFQUFJUCxNQUFNUSxPQUFRRCxJQUMxQlAsTUFBTU8sYUFBY0csU0FDcEJWLE1BQU1PLEdBQUdLLGlCQUFpQkgsS0FBSyxDQUFDSSxTQUFVQyxXQUFhaEIsS0FBS2lCLGVBQWVGLFNBQVVDLFdBRXJGaEIsS0FBS00sUUFBUUssS0FBS1QsTUFBTU8sSUFJaEMsT0FBT1QsS0FHWEgsT0FBT0ssT0FFSCxPQURBRixLQUFLRyxTQUFTUSxLQUFLLElBQUlPLE9BQU9oQixRQUN2QkYsS0FHWEgsS0FBS0ssT0FFRCxPQURBRixLQUFLRyxTQUFTUSxLQUFLLElBQUlRLEtBQUtqQixRQUNyQkYsS0FHWEgsVUFBVXVCLFFBQ0RBLFNBQ0RBLE9BQVNDLE9BQU9DLFNBQVNDLE1BRzdCdkIsS0FBS1EsUUFBVWEsT0FBT0MsU0FBU0UsY0FBY3hCLEtBQUtPLFNBQ2xEYSxPQUFPSyxZQUFZekIsS0FBS1EsU0FFeEIsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlULEtBQUtJLFNBQVNNLE9BQVFELElBQ2xDVCxLQUFLSSxTQUFTSyxhQUFjaUIsUUFBc0MsaUJBQXJCMUIsS0FBS0ksU0FBU0ssR0FDM0RULEtBQUtRLFFBQVFpQixZQUFZSCxTQUFTSyxlQUFlM0IsS0FBS0ksU0FBU0ssTUFDeERULEtBQUtJLFNBQVNLLGFBQWNSLFlBQWNELEtBQUtJLFNBQVNLLEdBQUdtQixxQkFBcUIzQixZQUFjRCxLQUFLSSxTQUFTSyxHQUFHbUIsVUFBVUMsY0FBZ0I1QixhQUNoSkQsS0FBS0ksU0FBU0ssR0FBR3FCLFVBQVU5QixLQUFLUSxTQUl4QyxJQUFTQyxFQUFJLEVBQUdBLEVBQUlULEtBQUtHLFNBQVNPLE9BQVFELElBQ2xDVCxLQUFLRyxTQUFTTSxhQUFjaUIsUUFBc0MsaUJBQXJCMUIsS0FBS0csU0FBU00sR0FDM0RULEtBQUtvQixPQUFPSyxZQUFZSCxTQUFTSyxlQUFlM0IsS0FBS0csU0FBU00sTUFDdkRULEtBQUtHLFNBQVNNLGFBQWNSLFlBQWNELEtBQUtHLFNBQVNNLEdBQUdtQixxQkFBcUIzQixZQUFjRCxLQUFLRyxTQUFTTSxHQUFHbUIsVUFBVUMsY0FBZ0I1QixhQUNoSkQsS0FBS0csU0FBU00sR0FBR3FCLFVBQVVWLFFBS3ZDdkIsZUFBZWtCLFNBQVVDLFVBQ3JCZSxRQUFRQyxnQ0FBZ0NqQixzQkFBc0JDLFlBRTFERCxVQUF5QixLQUFiQSxVQUFnQyxNQUFiQSxVQUMvQmYsS0FBS1EsUUFBUXlCLFVBQVVDLE9BQU9uQixVQUc5QkMsVUFBeUIsS0FBYkEsVUFBZ0MsTUFBYkEsVUFDL0JoQixLQUFLUSxRQUFReUIsVUFBVUUsSUFBSW5CLFdBS3ZDLE1BQU1FLFlBQVlqQixXQUNkSixlQUFlSyxPQUNYa0MsTUFBTWxDLE9BRU5GLEtBQUtPLFFBQVUsT0FJdkIsTUFBTVksVUFBVWxCLFdBQ1pKLGVBQWVLLE9BQ1hrQyxNQUFNbEMsT0FFTkYsS0FBS08sUUFBVSxLQUl2QixNQUFNOEIsV0FBV3BDLFdBQ2JKLGVBQWVLLE9BQ1hrQyxNQUFNbEMsT0FFTkYsS0FBS08sUUFBVSxNQUl2QixNQUFNTSx5QkFBeUJaLFdBQzNCSixZQUFZZSxVQUNSd0IsTUFBTSxJQUVOcEMsS0FBS1ksU0FBV0EsU0FDaEJaLEtBQUtZLFNBQVNFLGlCQUFpQkgsS0FBSyxDQUFDSSxTQUFVQyxXQUFhaEIsS0FBS3NDLGlCQUFpQnZCLFNBQVVDLFdBR2hHbkIsVUFBVXVCLFFBQ05wQixLQUFLUSxRQUFVYyxTQUFTSyxlQUFlLElBQ3ZDUCxPQUFPSyxZQUFZekIsS0FBS1EsU0FHNUJYLGlCQUFpQmtCLFNBQVVDLFVBQ3ZCaEIsS0FBS1EsUUFBUStCLFVBQVl2QixVQUlqQyxNQUFNSixTQUNGZixjQUNJRyxLQUFLYyxpQkFBbUIsR0FDeEJkLEtBQUt3QyxPQUFTLEtBR2xCekMsWUFDSSxPQUFPQyxLQUFLd0MsT0FHaEJ6QyxVQUFVMEMsS0FDTixJQUFJQyxJQUFNMUMsS0FBS3dDLE9BQ2Z4QyxLQUFLd0MsT0FBU0MsSUFFZCxJQUFLLElBQUloQyxFQUFJLEVBQUdBLEVBQUlULEtBQUtjLGlCQUFpQkosT0FBUUQsSUFDOUNULEtBQUtjLGlCQUFpQkwsR0FBR2lDLElBQUtELE1BSzFDLElBQUlFLEtBQU8sSUFBSS9CLFNBQ1hnQyxVQUFZLElBQUloQyxTQUVwQm1CLFFBQVFDLElBQUksYUFDWkQsUUFBUUMsSUFBSVcsTUFFWlosUUFBUUMsSUFBSSxtQkFDWkQsUUFBUUMsSUFBSVksV0FFWixJQUFJQyxLQUFPLElBQUkzQixJQUNYLElBQUltQixHQUFHLGtCQUFrQlMsTUFBTUYsV0FDL0IsSUFBSXpCLEVBQUV3QixPQUNSekIsSUFBSSxJQUFJQyxFQUFFLG9CQUdaMEIsS0FBS2YsVUFBVVQsT0FBT0MsU0FBU0MsTUFHL0JRLFFBQVFDLElBQUlhIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgYXR0cmlidXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIGNvbGxlY3Rpb24ge1xyXG4gICAgY29uc3RydWN0b3IoaXRlbXMpIHtcclxuICAgICAgICB0aGlzLnNpYmxpbmdzID0gW107XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2xhc3NlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGFnTmFtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNbaV0gaW5zdGFuY2VvZiBhdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKGl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtc1tpXSBpbnN0YW5jZW9mIHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2gobmV3IHByb3BlcnR5T2JzZXJ2ZXIoaXRlbXNbaV0pKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChpdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xhc3MoLi4uaXRlbXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtc1tpXSBpbnN0YW5jZW9mIHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5vblByb3BlcnR5Q2hhbmdlLnB1c2goKG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT4gdGhpcy5vbkNsYXNzQ2hhbmdlZChvbGRWYWx1ZSwgbmV3VmFsdWUpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKGl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGl2KC4uLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5zaWJsaW5ncy5wdXNoKG5ldyBkaXYoLi4uaXRlbXMpKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwKC4uLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5zaWJsaW5ncy5wdXNoKG5ldyBwKC4uLml0ZW1zKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0KHBhcmVudCkge1xyXG4gICAgICAgIGlmICghcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWdOYW1lKTtcclxuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiB0aGlzLmNoaWxkcmVuW2ldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY2hpbGRyZW5baV0pKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgY29sbGVjdGlvbiB8fCB0aGlzLmNoaWxkcmVuW2ldLnByb3RvdHlwZSBpbnN0YW5jZW9mIGNvbGxlY3Rpb24gfHwgdGhpcy5jaGlsZHJlbltpXS5wcm90b3R5cGUuY29uc3RydWN0b3IgPT09IGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0uY29uc3RydWN0KHRoaXMuZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaWJsaW5ncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaWJsaW5nc1tpXSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgdGhpcy5zaWJsaW5nc1tpXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuc2libGluZ3NbaV0pKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNpYmxpbmdzW2ldIGluc3RhbmNlb2YgY29sbGVjdGlvbiB8fCB0aGlzLnNpYmxpbmdzW2ldLnByb3RvdHlwZSBpbnN0YW5jZW9mIGNvbGxlY3Rpb24gfHwgdGhpcy5zaWJsaW5nc1tpXS5wcm90b3R5cGUuY29uc3RydWN0b3IgPT09IGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2libGluZ3NbaV0uY29uc3RydWN0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGFzc0NoYW5nZWQob2xkVmFsdWUsIG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYENsYXNzIGNoYW5nZWQsIG9sZFZhbHVlOiAke29sZFZhbHVlfSBuZXdWYWx1ZTogJHtuZXdWYWx1ZX1gKTtcclxuXHJcbiAgICAgICAgaWYgKG9sZFZhbHVlICYmIG9sZFZhbHVlICE9PSBcIlwiICYmIG9sZFZhbHVlICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShvbGRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUgIT09IFwiXCIgJiYgbmV3VmFsdWUgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIGRpdiBleHRlbmRzIGNvbGxlY3Rpb24ge1xyXG4gICAgY29uc3RydWN0b3IoLi4uaXRlbXMpIHtcclxuICAgICAgICBzdXBlcihpdGVtcyk7XHJcblxyXG4gICAgICAgIHRoaXMudGFnTmFtZSA9IFwiZGl2XCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIHAgZXh0ZW5kcyBjb2xsZWN0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKC4uLml0ZW1zKSB7XHJcbiAgICAgICAgc3VwZXIoaXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRhZ05hbWUgPSBcInBcIjtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgaDEgZXh0ZW5kcyBjb2xsZWN0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKC4uLml0ZW1zKSB7XHJcbiAgICAgICAgc3VwZXIoaXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRhZ05hbWUgPSBcImgxXCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIHByb3BlcnR5T2JzZXJ2ZXIgZXh0ZW5kcyBjb2xsZWN0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5KSB7XHJcbiAgICAgICAgc3VwZXIoW10pO1xyXG5cclxuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5vblByb3BlcnR5Q2hhbmdlLnB1c2goKG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT4gdGhpcy5vblVwZGF0ZVByb3BlcnR5KG9sZFZhbHVlLCBuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdChwYXJlbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcclxuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBvblVwZGF0ZVByb3BlcnR5KG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5ub2RlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgcHJvcGVydHkge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlID0gW107XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHZhbHVlKHZhbCkge1xyXG4gICAgICAgIHZhciBvbGQgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9uUHJvcGVydHlDaGFuZ2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlW2ldKG9sZCwgdmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBwcm9wID0gbmV3IHByb3BlcnR5KCk7XHJcbnZhciBjbGFzc1Byb3AgPSBuZXcgcHJvcGVydHkoKTtcclxuXHJcbmNvbnNvbGUubG9nKFwiUHJvcGVydHk6XCIpO1xyXG5jb25zb2xlLmxvZyhwcm9wKTtcclxuXHJcbmNvbnNvbGUubG9nKFwiQ2xhc3MgUHJvcGVydHk6XCIpO1xyXG5jb25zb2xlLmxvZyhjbGFzc1Byb3ApO1xyXG5cclxudmFyIHRlc3QgPSBuZXcgZGl2KFxyXG4gICAgbmV3IGgxKFwiSSBhbSBhIGhlYWRpbmdcIikuY2xhc3MoY2xhc3NQcm9wKSxcclxuICAgIG5ldyBwKHByb3ApXHJcbikuZGl2KG5ldyBwKFwiVGhpcyBpcyBjb250ZW50XCIpKTtcclxuXHJcblxyXG50ZXN0LmNvbnN0cnVjdCh3aW5kb3cuZG9jdW1lbnQuYm9keSk7XHJcblxyXG5cclxuY29uc29sZS5sb2codGVzdCk7XHJcbiJdLCJmaWxlIjoiZnJhbWV3b3JrLmpzIn0=