@sedeh/into-pipes
Version:
Have you ever wanted to transform data in different parts of your application into interactive objects without writing a single line of code?
125 lines • 18.3 kB
JavaScript
import { Component, EventEmitter } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class LikeComponent {
constructor() {
this.thumbs = "";
this.disabled = false;
this.active = true;
this.validate = (item, newValue) => true;
this.onIntoComponentChange = new EventEmitter();
}
static settingsPatterns() {
return ['like:true:true::true', 'like:true:false::true']; //show count, state, source attribute key, up/down
}
transform(source, data, args) {
this.source = source;
this.data = data;
this.showCount = (args && args.length > 0 && args[0].length && args[0] === 'true');
this.thumbsup = (args && args.length > 1 && args[1].length && args[1] === 'true');
this.key = (args && args.length > 2) ? args[2] : "";
this.thumbs = this.thumbsup ? "thumbs-up-items" : "thumbs-down-items";
this.selected = (this.getItem(this.data[this.key]) !== null);
}
keyup(event) {
const code = event.which;
if (code === 13 && !this.disabled) {
event.target.click();
}
}
addItem(id) {
const saved = localStorage.getItem(this.thumbs);
if (saved) {
const savedItems = JSON.parse(saved);
savedItems.push(id);
localStorage.setItem(this.thumbs, JSON.stringify(savedItems));
}
else {
localStorage.setItem(this.thumbs, JSON.stringify([id]));
}
this.source++;
}
removeItem(id) {
const saved = localStorage.getItem(this.thumbs);
if (saved) {
const savedItems = JSON.parse(saved);
const i = savedItems.indexOf(id);
savedItems.splice(i, 1);
localStorage.setItem(this.thumbs, JSON.stringify(savedItems));
this.source--;
}
}
getItem(id) {
const saved = localStorage.getItem(this.thumbs);
let found = null;
if (saved) {
const savedItems = JSON.parse(saved);
const i = savedItems.indexOf(id);
found = i < 0 ? null : savedItems[i];
}
return found;
}
formatterSource() {
let result = this.source;
if (this.source > 1000) {
result = (this.source / 1000).toFixed(1) + " k";
}
return result;
}
toggleCount(event) {
event.stopPropagation();
event.preventDefault();
if (!this.disabled && this.validate(this.data, !this.source)) {
this.selected = !this.selected;
if (this.selected) {
const existing = this.getItem(this.data[this.key]);
if (!existing) {
this.addItem(this.data[this.key]);
}
}
else {
this.removeItem(this.data[this.key]);
}
this.onIntoComponentChange.emit({
id: this.id,
name: this.name,
value: this.source,
type: "change",
item: this.data,
selected: this.selected,
action: this.thumbs
});
}
}
}
LikeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LikeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
LikeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LikeComponent, selector: "like-component", ngImport: i0, template: `
<a
id='like-{{id}}'
tabindex="{{active ? 0 : -1}}"
class="like"
[class.selected]="selected"
[class.disabled]="disabled"
(keyup)="keyup($event)"
(click)='toggleCount($event)'>
<span class="fa fa-thumbs-up" *ngIf="thumbsup" aria-hidden="true"></span>
<span class="fa fa-thumbs-down" *ngIf="!thumbsup" aria-hidden="true"></span>
<span class="counts" *ngIf="showCount" [textContent]="formatterSource()"></span>
</a>`, isInline: true, styles: [":host{display:table;float:left;min-height:var(--sedeh-min-height, 25px);position:relative}.like{cursor:pointer}.like.disabled{cursor:default;pointer-events:none}.like.disabled .fa{color:var(--sedeh-disabled-color, #888)}.like .counts{margin-left:var(--sedeh-margin-left, 5px)}.like .fa{margin:0}.like:focus{outline:none}.like:focus .fa{zoom:1.1;right:var(--sedeh-shift-right, 0);position:relative;color:var(--sedeh-focus-color, darkblue)}.like.selected .counts,.like.selected .fa{color:var(--sedeh-sected-color, green)}:host .like:hover,.like:hover .fa,.like:hover .fa.selected{opacity:var(--sedeh-hover-opacity, .5)}:host .like.disabled:hover,.like.disabled:hover .fa,.like.disabled:hover .fa.selected{color:var(--sedeh-disabled-color, #888)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LikeComponent, decorators: [{
type: Component,
args: [{ selector: 'like-component', template: `
<a
id='like-{{id}}'
tabindex="{{active ? 0 : -1}}"
class="like"
[class.selected]="selected"
[class.disabled]="disabled"
(keyup)="keyup($event)"
(click)='toggleCount($event)'>
<span class="fa fa-thumbs-up" *ngIf="thumbsup" aria-hidden="true"></span>
<span class="fa fa-thumbs-down" *ngIf="!thumbsup" aria-hidden="true"></span>
<span class="counts" *ngIf="showCount" [textContent]="formatterSource()"></span>
</a>`, styles: [":host{display:table;float:left;min-height:var(--sedeh-min-height, 25px);position:relative}.like{cursor:pointer}.like.disabled{cursor:default;pointer-events:none}.like.disabled .fa{color:var(--sedeh-disabled-color, #888)}.like .counts{margin-left:var(--sedeh-margin-left, 5px)}.like .fa{margin:0}.like:focus{outline:none}.like:focus .fa{zoom:1.1;right:var(--sedeh-shift-right, 0);position:relative;color:var(--sedeh-focus-color, darkblue)}.like.selected .counts,.like.selected .fa{color:var(--sedeh-sected-color, green)}:host .like:hover,.like:hover .fa,.like:hover .fa.selected{opacity:var(--sedeh-hover-opacity, .5)}:host .like.disabled:hover,.like.disabled:hover .fa,.like.disabled:hover .fa.selected{color:var(--sedeh-disabled-color, #888)}\n"] }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlrZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnRvLXBpcGVzL3NyYy9saWIvbGlrZS9saWtlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBa0N4RCxNQUFNLE9BQU8sYUFBYTtJQS9CMUI7UUF3Q0UsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQUUvQywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBdUYzQztJQXJGQyxNQUFNLENBQUMsZ0JBQWdCO1FBQ3JCLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsa0RBQWtEO0lBQzlHLENBQUM7SUFDRCxTQUFTLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxJQUFXO1FBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FB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LElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7OzJHQXBHVSxhQUFhOytGQUFiLGFBQWEsc0RBN0JaOzs7Ozs7Ozs7Ozs7U0FZTDs0RkFpQkksYUFBYTtrQkEvQnpCLFNBQVM7K0JBQ0ksZ0JBQWdCLFlBQ2hCOzs7Ozs7Ozs7Ozs7U0FZTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBpcGVDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuLi9jb21tb24vcGlwZS5jb21wb25lbnQuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWtlLWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGEgXHJcbiAgICAgICAgaWQ9J2xpa2Ute3tpZH19JyBcclxuICAgICAgICB0YWJpbmRleD1cInt7YWN0aXZlID8gMCA6IC0xfX1cIiBcclxuICAgICAgICBjbGFzcz1cImxpa2VcIiBcclxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIiBcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBcclxuICAgICAgICAoa2V5dXApPVwia2V5dXAoJGV2ZW50KVwiIFxyXG4gICAgICAgIChjbGljayk9J3RvZ2dsZUNvdW50KCRldmVudCknPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdGh1bWJzLXVwXCIgKm5nSWY9XCJ0aHVtYnN1cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRodW1icy1kb3duXCIgKm5nSWY9XCIhdGh1bWJzdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudHNcIiAqbmdJZj1cInNob3dDb3VudFwiIFt0ZXh0Q29udGVudF09XCJmb3JtYXR0ZXJTb3VyY2UoKVwiPjwvc3Bhbj5cclxuICAgIDwvYT5gLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgICAgYFxyXG4gICAgICAgIDpob3N0IHtkaXNwbGF5OnRhYmxlO2Zsb2F0OmxlZnQ7bWluLWhlaWdodDogdmFyKC0tc2VkZWgtbWluLWhlaWdodCwgMjVweCk7cG9zaXRpb246IHJlbGF0aXZlfVxyXG4gICAgICAgIC5saWtlIHtjdXJzb3I6IHBvaW50ZXI7fVxyXG4gICAgICAgIC5saWtlLmRpc2FibGVkIHtjdXJzb3I6IGRlZmF1bHQ7cG9pbnRlci1ldmVudHM6IG5vbmV9XHJcbiAgICAgICAgLmxpa2UuZGlzYWJsZWQgLmZhe2NvbG9yOiB2YXIoLS1zZWRlaC1kaXNhYmxlZC1jb2xvciwgIzg4OCk7fVxyXG4gICAgICAgIC5saWtlIC5jb3VudHN7bWFyZ2luLWxlZnQ6IHZhcigtLXNlZGVoLW1hcmdpbi1sZWZ0LCA1cHgpO31cclxuICAgICAgICAubGlrZSAuZmEge21hcmdpbjogMDt9XHJcbiAgICAgICAgLmxpa2U6Zm9jdXN7b3V0bGluZTogbm9uZTt9XHJcbiAgICAgICAgLmxpa2U6Zm9jdXMgLmZhe3pvb206IDEuMTtyaWdodDogdmFyKC0tc2VkZWgtc2hpZnQtcmlnaHQsIDApO3Bvc2l0aW9uOiByZWxhdGl2ZTtjb2xvcjogdmFyKC0tc2VkZWgtZm9jdXMtY29sb3IsIGRhcmtibHVlKTt9XHJcbiAgICAgICAgLmxpa2Uuc2VsZWN0ZWQgLmNvdW50cywgLmxpa2Uuc2VsZWN0ZWQgLmZhIHtjb2xvcjogdmFyKC0tc2VkZWgtc2VjdGVkLWNvbG9yLCBncmVlbik7fVxyXG4gICAgICAgIDpob3N0IC5saWtlOmhvdmVyLCAubGlrZTpob3ZlciAuZmEsIC5saWtlOmhvdmVyIC5mYS5zZWxlY3RlZHtvcGFjaXR5OiB2YXIoLS1zZWRlaC1ob3Zlci1vcGFjaXR5LCAwLjUpO31cclxuICAgICAgICA6aG9zdCAubGlrZS5kaXNhYmxlZDpob3ZlciwgLmxpa2UuZGlzYWJsZWQ6aG92ZXIgLmZhLCAubGlrZS5kaXNhYmxlZDpob3ZlciAuZmEuc2VsZWN0ZWR7Y29sb3I6IHZhcigtLXNlZGVoLWRpc2FibGVkLWNvbG9yLCAjODg4KTt9XHJcbiAgICAgICAgYFxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlrZUNvbXBvbmVudCBpbXBsZW1lbnRzIFBpcGVDb21wb25lbnRJbnRlcmZhY2Uge1xyXG4gIHNvdXJjZTogYW55O1xyXG4gIGlkITogc3RyaW5nO1xyXG4gIGRhdGE6IGFueTtcclxuXHRuYW1lITogc3RyaW5nO1xyXG4gIHNob3dDb3VudCE6IGJvb2xlYW47XHJcbiAgdGh1bWJzdXAhOiBib29sZWFuO1xyXG4gIHNlbGVjdGVkITogYm9vbGVhbjtcclxuICBrZXkhOiBzdHJpbmc7XHJcbiAgdGh1bWJzID0gXCJcIjtcclxuICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGFjdGl2ZSA9IHRydWU7XHJcbiAgdmFsaWRhdGUgPSAoaXRlbTogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB0cnVlO1xyXG5cclxuXHRvbkludG9Db21wb25lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHN0YXRpYyBzZXR0aW5nc1BhdHRlcm5zKCkge1xyXG4gICAgcmV0dXJuIFsnbGlrZTp0cnVlOnRydWU6OnRydWUnLCAnbGlrZTp0cnVlOmZhbHNlOjp0cnVlJ107IC8vc2hvdyBjb3VudCwgc3RhdGUsIHNvdXJjZSBhdHRyaWJ1dGUga2V5LCB1cC9kb3duXHJcbiAgfVxyXG4gIHRyYW5zZm9ybShzb3VyY2U6IGFueSwgZGF0YTogYW55LCBhcmdzOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5zaG93Q291bnQgPSAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXS5sZW5ndGggJiYgYXJnc1swXSA9PT0gJ3RydWUnKTtcclxuICAgIHRoaXMudGh1bWJzdXAgPSAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgYXJnc1sxXS5sZW5ndGggJiYgYXJnc1sxXSA9PT0gJ3RydWUnKTtcclxuICAgIHRoaXMua2V5ID0gKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAyKSA/IGFyZ3NbMl0gOiBcIlwiO1xyXG4gICAgdGhpcy50aHVtYnMgPSB0aGlzLnRodW1ic3VwID8gXCJ0aHVtYnMtdXAtaXRlbXNcIiA6IFwidGh1bWJzLWRvd24taXRlbXNcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWQgPSAodGhpcy5nZXRJdGVtKHRoaXMuZGF0YVt0aGlzLmtleV0pICE9PSBudWxsKTtcclxuICB9XHJcbiAga2V5dXAoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY29kZSA9IGV2ZW50LndoaWNoO1xyXG5cclxuICAgIGlmIChjb2RlID09PSAxMyAmJiAhdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBldmVudC50YXJnZXQuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBhZGRJdGVtKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy50aHVtYnMpO1xyXG4gICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgIGNvbnN0IHNhdmVkSXRlbXMgPSBKU09OLnBhcnNlKHNhdmVkKTtcclxuICAgICAgc2F2ZWRJdGVtcy5wdXNoKGlkKTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy50aHVtYnMsIEpTT04uc3RyaW5naWZ5KHNhdmVkSXRlbXMpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMudGh1bWJzLCBKU09OLnN0cmluZ2lmeShbaWRdKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvdXJjZSArKztcclxuICB9XHJcbiAgcHJpdmF0ZSByZW1vdmVJdGVtKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy50aHVtYnMpO1xyXG4gICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgIGNvbnN0IHNhdmVkSXRlbXMgPSBKU09OLnBhcnNlKHNhdmVkKTtcclxuICAgICAgY29uc3QgaSA9IHNhdmVkSXRlbXMuaW5kZXhPZihpZCk7XHJcbiAgICAgIHNhdmVkSXRlbXMuc3BsaWNlKGksIDEpO1xyXG5cclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy50aHVtYnMsIEpTT04uc3RyaW5naWZ5KHNhdmVkSXRlbXMpKTtcclxuICAgICAgdGhpcy5zb3VyY2UgLS07XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0SXRlbShpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMudGh1bWJzKTtcclxuICAgIGxldCBmb3VuZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgIGNvbnN0IHNhdmVkSXRlbXM6IGFueVtdID0gSlNPTi5wYXJzZShzYXZlZCk7XHJcbiAgICAgIGNvbnN0IGkgPSBzYXZlZEl0ZW1zLmluZGV4T2YoaWQpO1xyXG5cclxuICAgICAgZm91bmQgPSBpIDwgMCA/IG51bGwgOiBzYXZlZEl0ZW1zW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvdW5kO1xyXG4gIH1cclxuICBmb3JtYXR0ZXJTb3VyY2UoKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zb3VyY2U7XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPiAxMDAwKSB7XHJcbiAgICAgIHJlc3VsdCA9ICh0aGlzLnNvdXJjZS8xMDAwKS50b0ZpeGVkKDEpICsgXCIga1wiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICB0b2dnbGVDb3VudChldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnZhbGlkYXRlKHRoaXMuZGF0YSwgIXRoaXMuc291cmNlKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldEl0ZW0odGhpcy5kYXRhW3RoaXMua2V5XSk7XHJcbiAgICAgICAgaWYgKCFleGlzdGluZykge1xyXG4gICAgICAgICAgdGhpcy5hZGRJdGVtKHRoaXMuZGF0YVt0aGlzLmtleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odGhpcy5kYXRhW3RoaXMua2V5XSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vbkludG9Db21wb25lbnRDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLnNvdXJjZSxcclxuICAgICAgICB0eXBlOiBcImNoYW5nZVwiLFxyXG4gICAgICAgIGl0ZW06IHRoaXMuZGF0YSxcclxuICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcclxuICAgICAgICBhY3Rpb246IHRoaXMudGh1bWJzXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==