280 lines
26 KiB
Plaintext
280 lines
26 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/preview/Image.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/common/TransitioningContents.vue";
|
|
import { CommonLoadingBar as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createVNode as __createVNode,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
|
|
function _interopVNode(vnode) {
|
|
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
|
|
const data = vnode.props['data-v-inspector']
|
|
delete vnode.props['data-v-inspector']
|
|
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
|
|
}
|
|
return vnode
|
|
}
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
/* Injection by vite-plugin-vue-inspector End */
|
|
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { CommonLoadingIcon } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { useElementVisibility, useResizeObserver } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
import { usePreviewImageBlob } from "/_nuxt/lib/projects/composables/previewImage.ts";
|
|
|
|
import { ref, computed, onMounted, watch, unref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { useNuxtApp } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "PreviewImage",
|
|
props: {
|
|
previewUrl: { type: String, required: true },
|
|
panoramaOnHover: { type: Boolean, required: false, default: true },
|
|
eagerLoad: { type: Boolean, required: false, default: true }
|
|
},
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const props = __props;
|
|
const parent = ref(null);
|
|
const finalPreviewTransitioner = ref(
|
|
null
|
|
);
|
|
const { $isAppHydrated } = useNuxtApp();
|
|
const isInViewport = useElementVisibility(parent);
|
|
const basePreviewUrl = computed(() => props.previewUrl);
|
|
const {
|
|
previewUrl: finalPreviewUrl,
|
|
panoramaPreviewUrl,
|
|
shouldLoadPanorama,
|
|
isLoadingPanorama,
|
|
hasDoneFirstLoad,
|
|
isPanoramaPlaceholder
|
|
} = usePreviewImageBlob(basePreviewUrl, {
|
|
enabled: computed(() => props.eagerLoad || isInViewport.value),
|
|
eagerLoad: props.eagerLoad
|
|
});
|
|
const hovered = ref(false);
|
|
const panorama = ref(null);
|
|
const mainPreviewClasses = computed(
|
|
() => "w-full h-full bg-cover bg-no-repeat bg-center"
|
|
);
|
|
const parentWidth = ref(0);
|
|
const parentHeight = ref(0);
|
|
const setParentDimensions = () => {
|
|
const { width = 0, height = 0 } = parent.value?.getBoundingClientRect() || {};
|
|
parentWidth.value = width;
|
|
parentHeight.value = height;
|
|
};
|
|
if (true) useResizeObserver(document.body, () => setParentDimensions());
|
|
const positionMagic = ref(0);
|
|
const latestMouseEvent = ref();
|
|
const calculatePanoramaStyle = (e) => {
|
|
latestMouseEvent.value = e;
|
|
const rect = panorama.value?.getBoundingClientRect();
|
|
if (parentHeight.value === 0) setParentDimensions();
|
|
if (!rect) return;
|
|
const x = e.clientX - rect.left;
|
|
const step = rect.width / 24;
|
|
let index = Math.abs(24 - Math.round(x / step));
|
|
if (index >= 24) index = 24 - 1;
|
|
const scaleFactor = parentHeight.value / 400;
|
|
const actualWidth = scaleFactor * 700;
|
|
const widthDiff = (parentWidth.value - actualWidth) * 0.5;
|
|
positionMagic.value = -(actualWidth * (2 * index + 1) - widthDiff);
|
|
};
|
|
const shouldShowMainPreview = computed(
|
|
() => !hovered.value && finalPreviewUrl.value || isLoadingPanorama.value || !props.panoramaOnHover || isPanoramaPlaceholder.value || !panoramaPreviewUrl.value
|
|
);
|
|
const shouldShowPanoramicPreview = computed(
|
|
() => hovered.value && panoramaPreviewUrl.value && props.panoramaOnHover && !isPanoramaPlaceholder.value && $isAppHydrated.value
|
|
);
|
|
onMounted(() => setParentDimensions());
|
|
watch(hovered, (newVal) => {
|
|
if (newVal && !panoramaPreviewUrl.value && props.panoramaOnHover)
|
|
shouldLoadPanorama.value = true;
|
|
});
|
|
watch(
|
|
() => unref(panoramaPreviewUrl),
|
|
() => {
|
|
if (latestMouseEvent.value) {
|
|
calculatePanoramaStyle(latestMouseEvent.value);
|
|
}
|
|
}
|
|
);
|
|
if (true) {
|
|
watch(finalPreviewUrl, (newVal, oldVal) => {
|
|
if (newVal === oldVal) return;
|
|
finalPreviewTransitioner.value?.triggerTransition();
|
|
});
|
|
}
|
|
const __returned__ = { props, parent, finalPreviewTransitioner, $isAppHydrated, isInViewport, basePreviewUrl, finalPreviewUrl, panoramaPreviewUrl, shouldLoadPanorama, isLoadingPanorama, hasDoneFirstLoad, isPanoramaPlaceholder, hovered, panorama, mainPreviewClasses, parentWidth, parentHeight, setParentDimensions, positionMagic, latestMouseEvent, calculatePanoramaStyle, shouldShowMainPreview, shouldShowPanoramicPreview, get CommonLoadingIcon() {
|
|
return CommonLoadingIcon;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, normalizeStyle as _normalizeStyle, resolveComponent as _resolveComponent, withCtx as _withCtx, Transition as _Transition, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
key: 0,
|
|
class: "relative w-full h-full",
|
|
"data-v-inspector": "components/preview/Image.vue:23:7"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_CommonTransitioningContents = __nuxt_component_0;
|
|
const _component_CommonLoadingBar = __nuxt_component_1;
|
|
return _openBlock(), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
[
|
|
_createCommentVNode(" eslint-disable-next-line vuejs-accessibility/mouse-events-have-key-events "),
|
|
_createElementVNode(
|
|
"div",
|
|
{
|
|
ref: "parent",
|
|
class: "relative w-full h-full",
|
|
onMouseenter: _cache[0] || (_cache[0] = ($event) => $setup.hovered = true),
|
|
onMouseleave: _cache[1] || (_cache[1] = ($event) => $setup.hovered = false),
|
|
onMousemove: _cache[2] || (_cache[2] = (e) => $setup.calculatePanoramaStyle(e)),
|
|
onTouchmove: _cache[3] || (_cache[3] = (e) => $setup.calculatePanoramaStyle({
|
|
target: e.target,
|
|
clientX: e.touches[0].clientX,
|
|
clientY: e.touches[0].clientY
|
|
})),
|
|
"data-v-inspector": "components/preview/Image.vue:4:3"
|
|
},
|
|
[
|
|
_createVNode(_Transition, {
|
|
"enter-from-class": "opacity-0",
|
|
"enter-active-class": "transition duration-300",
|
|
"leave-to-class": "opacity-0",
|
|
"leave-active-class": "transition duration-300",
|
|
"data-v-inspector": "components/preview/Image.vue:17:5"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
$setup.shouldShowMainPreview ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
_createVNode(
|
|
_component_CommonTransitioningContents,
|
|
{
|
|
ref: "finalPreviewTransitioner",
|
|
class: "w-full h-full",
|
|
"data-v-inspector": "components/preview/Image.vue:24:9"
|
|
},
|
|
{
|
|
default: _withCtx(() => [
|
|
!$setup.hasDoneFirstLoad || !$setup.finalPreviewUrl?.length ? (_openBlock(), _createElementBlock(
|
|
"div",
|
|
{
|
|
key: 0,
|
|
class: _normalizeClass([$setup.mainPreviewClasses, "flex items-center justify-center"]),
|
|
"data-v-inspector": "components/preview/Image.vue:28:11"
|
|
},
|
|
[
|
|
_createVNode($setup["CommonLoadingIcon"], {
|
|
class: "opacity-50",
|
|
"data-v-inspector": "components/preview/Image.vue:32:13"
|
|
})
|
|
],
|
|
2
|
|
/* CLASS */
|
|
)) : (_openBlock(), _createElementBlock(
|
|
"div",
|
|
{
|
|
key: 1,
|
|
class: _normalizeClass($setup.mainPreviewClasses),
|
|
style: _normalizeStyle({
|
|
backgroundImage: `url('${$setup.finalPreviewUrl}')`
|
|
}),
|
|
"data-v-inspector": "components/preview/Image.vue:34:11"
|
|
},
|
|
null,
|
|
6
|
|
/* CLASS, STYLE */
|
|
))
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
},
|
|
512
|
|
/* NEED_PATCH */
|
|
)
|
|
])) : _createCommentVNode("v-if", true)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}),
|
|
_createVNode(_Transition, {
|
|
"enter-from-class": "opacity-0",
|
|
"enter-active-class": "transition duration-300",
|
|
"leave-to-class": "opacity-0",
|
|
"leave-active-class": "transition duration-300",
|
|
"data-v-inspector": "components/preview/Image.vue:44:5",
|
|
persisted: ""
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_withDirectives(_createElementVNode(
|
|
"div",
|
|
{
|
|
ref: "panorama",
|
|
style: _normalizeStyle({
|
|
display: $setup.shouldShowPanoramicPreview ? "block" : "none",
|
|
backgroundImage: $setup.panoramaPreviewUrl ? `url('${$setup.panoramaPreviewUrl}')` : void 0,
|
|
backgroundSize: "cover",
|
|
backgroundPosition: `${$setup.positionMagic}px 0`,
|
|
position: "absolute",
|
|
top: "0",
|
|
width: "100%",
|
|
height: "100%"
|
|
}),
|
|
"data-v-inspector": "components/preview/Image.vue:51:7"
|
|
},
|
|
null,
|
|
4
|
|
/* STYLE */
|
|
), [
|
|
[_vShow, $setup.shouldShowPanoramicPreview]
|
|
])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}),
|
|
_createVNode(_Transition, {
|
|
"enter-from-class": "opacity-0",
|
|
"leave-to-class": "opacity-0",
|
|
"enter-active-class": "transition duration-300",
|
|
"leave-active-class": "transition duration-300",
|
|
"data-v-inspector": "components/preview/Image.vue:68:5"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_CommonLoadingBar, {
|
|
loading: $setup.isLoadingPanorama && $setup.hovered,
|
|
class: "absolute bottom-0 w-full",
|
|
"data-v-inspector": "components/preview/Image.vue:74:7"
|
|
}, null, 8, ["loading"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
})
|
|
],
|
|
544
|
|
/* NEED_HYDRATION, NEED_PATCH */
|
|
)
|
|
],
|
|
2112
|
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
);
|
|
}
|
|
_sfc_main.__hmrId = "48724381";
|
|
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
|
|
import.meta.hot.on("file-changed", ({ file }) => {
|
|
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
|
|
});
|
|
import.meta.hot.accept((mod) => {
|
|
if (!mod) return;
|
|
const { default: updated, _rerender_only } = mod;
|
|
if (_rerender_only) {
|
|
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
|
|
} else {
|
|
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
|
|
}
|
|
});
|
|
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
|
|
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/preview/Image.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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LE9BQUs7QUFBQSxxREFBNEMsc0JBQWU7QUFBQTswQkFFOUQsb0JBQWlCO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBSzVCLGFBdUJhO0FBQUEsWUF0Qlgsb0JBQWlCO0FBQUEsWUFDakIsc0JBQW1CO0FBQUEsWUFDbkIsa0JBQWU7QUFBQSxZQUNmLHNCQUFtQjtBQUFBLFlBQTBCLG9CQUFpQjtBQUFBLFlBSmhFO0FBQUE7OEJBT0UsTUFlRTtBQUFBLDhCQWZGO0FBQUEsZ0JBZUU7QUFBQTtBQUFBLGtCQWJBLEtBQUk7QUFBQSxrQkFDSCxPQUFLO0FBQUEsNkJBQXdCLG9DQUEwQjtBQUFBLHFDQUFpRCxvQ0FBMEMseUJBQWtCLE9BQW9CO0FBQUE7MkNBQWlGLG9CQUFhO0FBQUE7Ozs7O2tCQVdwUixvQkFBaUI7QUFBQTs7Ozs7eUJBYlosaUNBQTBCO0FBQUE7Ozs7O1VBZ0J0QyxhQVVhO0FBQUEsWUFUWCxvQkFBaUI7QUFBQSxZQUNqQixrQkFBZTtBQUFBLFlBQ2Ysc0JBQW1CO0FBQUEsWUFDbkIsc0JBQW1CO0FBQUEsWUFBMEIsb0JBQWlCO0FBQUE7OEJBRTlELE1BR0U7QUFBQSxjQUhGLGFBR0U7QUFBQSxnQkFGQyxTQUFTLDRCQUFxQjtBQUFBLGdCQUMvQixPQUFNO0FBQUEsZ0JBQTJCLG9CQUFpQjtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJJbWFnZS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZWpzLWFjY2Vzc2liaWxpdHkvbW91c2UtZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAtLT5cclxuICA8ZGl2XHJcbiAgICByZWY9XCJwYXJlbnRcIlxyXG4gICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsXCJcclxuICAgIEBtb3VzZWVudGVyPVwiaG92ZXJlZCA9IHRydWVcIlxyXG4gICAgQG1vdXNlbGVhdmU9XCJob3ZlcmVkID0gZmFsc2VcIlxyXG4gICAgQG1vdXNlbW92ZT1cIihlOiBNb3VzZUV2ZW50KSA9PiBjYWxjdWxhdGVQYW5vcmFtYVN0eWxlKGUpXCJcclxuICAgIEB0b3VjaG1vdmU9XCIoZTogVG91Y2hFdmVudCkgPT5cclxuICAgICAgY2FsY3VsYXRlUGFub3JhbWFTdHlsZSh7XHJcbiAgICAgICAgdGFyZ2V0OiBlLnRhcmdldCxcclxuICAgICAgICBjbGllbnRYOiBlLnRvdWNoZXNbMF0uY2xpZW50WCxcclxuICAgICAgICBjbGllbnRZOiBlLnRvdWNoZXNbMF0uY2xpZW50WVxyXG4gICAgICB9KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjQ6M1wiXHJcbiAgPlxyXG4gICAgPFRyYW5zaXRpb25cclxuICAgICAgZW50ZXItZnJvbS1jbGFzcz1cIm9wYWNpdHktMFwiXHJcbiAgICAgIGVudGVyLWFjdGl2ZS1jbGFzcz1cInRyYW5zaXRpb24gZHVyYXRpb24tMzAwXCJcclxuICAgICAgbGVhdmUtdG8tY2xhc3M9XCJvcGFjaXR5LTBcIlxyXG4gICAgICBsZWF2ZS1hY3RpdmUtY2xhc3M9XCJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjE3OjVcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IHYtaWY9XCJzaG91bGRTaG93TWFpblByZXZpZXdcIiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcmV2aWV3L0ltYWdlLnZ1ZToyMzo3XCI+XHJcbiAgICAgICAgPENvbW1vblRyYW5zaXRpb25pbmdDb250ZW50c1xyXG4gICAgICAgICAgcmVmPVwiZmluYWxQcmV2aWV3VHJhbnNpdGlvbmVyXCJcclxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjI0OjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgdi1pZj1cIiFoYXNEb25lRmlyc3RMb2FkIHx8ICFmaW5hbFByZXZpZXdVcmw/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIlttYWluUHJldmlld0NsYXNzZXMsICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciddXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJldmlldy9JbWFnZS52dWU6Mjg6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Q29tbW9uTG9hZGluZ0ljb24gY2xhc3M9XCJvcGFjaXR5LTUwXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJldmlldy9JbWFnZS52dWU6MzI6MTNcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHYtZWxzZVxyXG4gICAgICAgICAgICA6Y2xhc3M9XCJtYWluUHJldmlld0NsYXNzZXNcIlxyXG4gICAgICAgICAgICA6c3R5bGU9XCJ7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCcke2ZpbmFsUHJldmlld1VybH0nKWBcclxuICAgICAgICAgICAgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjM0OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9Db21tb25UcmFuc2l0aW9uaW5nQ29udGVudHM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9UcmFuc2l0aW9uPlxyXG4gICAgPFRyYW5zaXRpb25cclxuICAgICAgZW50ZXItZnJvbS1jbGFzcz1cIm9wYWNpdHktMFwiXHJcbiAgICAgIGVudGVyLWFjdGl2ZS1jbGFzcz1cInRyYW5zaXRpb24gZHVyYXRpb24tMzAwXCJcclxuICAgICAgbGVhdmUtdG8tY2xhc3M9XCJvcGFjaXR5LTBcIlxyXG4gICAgICBsZWF2ZS1hY3RpdmUtY2xhc3M9XCJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjQ0OjVcIlxyXG4gICAgPlxyXG4gICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L21vdXNlLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93UGFub3JhbWljUHJldmlld1wiXHJcbiAgICAgICAgcmVmPVwicGFub3JhbWFcIlxyXG4gICAgICAgIDpzdHlsZT1cIntcclxuICAgICAgICAgIGRpc3BsYXk6IHNob3VsZFNob3dQYW5vcmFtaWNQcmV2aWV3ID8gJ2Jsb2NrJyA6ICdub25lJyxcclxuICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogcGFub3JhbWFQcmV2aWV3VXJsXHJcbiAgICAgICAgICAgID8gYHVybCgnJHtwYW5vcmFtYVByZXZpZXdVcmx9JylgXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246IGAke3Bvc2l0aW9uTWFnaWN9cHggMGAsXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgIHRvcDogJzAnLFxyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgIGhlaWdodDogJzEwMCUnXHJcbiAgICAgICAgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjUxOjdcIlxyXG4gICAgICAvPlxyXG4gICAgPC9UcmFuc2l0aW9uPlxyXG4gICAgPFRyYW5zaXRpb25cclxuICAgICAgZW50ZXItZnJvbS1jbGFzcz1cIm9wYWNpdHktMFwiXHJcbiAgICAgIGxlYXZlLXRvLWNsYXNzPVwib3BhY2l0eS0wXCJcclxuICAgICAgZW50ZXItYWN0aXZlLWNsYXNzPVwidHJhbnNpdGlvbiBkdXJhdGlvbi0zMDBcIlxyXG4gICAgICBsZWF2ZS1hY3RpdmUtY2xhc3M9XCJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjY4OjVcIlxyXG4gICAgPlxyXG4gICAgICA8Q29tbW9uTG9hZGluZ0JhclxyXG4gICAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nUGFub3JhbWEgJiYgaG92ZXJlZFwiXHJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBib3R0b20tMCB3LWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcmV2aWV3L0ltYWdlLnZ1ZTo3NDo3XCJcclxuICAgICAgLz5cclxuICAgIDwvVHJhbnNpdGlvbj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHR5cGUgeyBOdWxsYWJsZSB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgQ29tbW9uTG9hZGluZ0ljb24gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyB1c2VFbGVtZW50VmlzaWJpbGl0eSwgdXNlUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAdnVldXNlL2NvcmUnXHJcbmltcG9ydCB7IHVzZVByZXZpZXdJbWFnZUJsb2IgfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvcHJldmlld0ltYWdlJ1xyXG5cclxudHlwZSBQYW5vcmFtYVN0eWxlTW91c2VPclRvdWNoRXZlbnQgPSBQaWNrPE1vdXNlRXZlbnQsICd0YXJnZXQnIHwgJ2NsaWVudFgnIHwgJ2NsaWVudFknPlxyXG5cclxuY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoXHJcbiAgZGVmaW5lUHJvcHM8e1xyXG4gICAgcHJldmlld1VybDogc3RyaW5nXHJcbiAgICBwYW5vcmFtYU9uSG92ZXI/OiBib29sZWFuXHJcbiAgICBlYWdlckxvYWQ/OiBib29sZWFuXHJcbiAgfT4oKSxcclxuICB7XHJcbiAgICBwYW5vcmFtYU9uSG92ZXI6IHRydWUsXHJcbiAgICBlYWdlckxvYWQ6IHRydWVcclxuICB9XHJcbilcclxuXHJcbmNvbnN0IHBhcmVudCA9IHJlZihudWxsIGFzIE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PilcclxuY29uc3QgZmluYWxQcmV2aWV3VHJhbnNpdGlvbmVyID0gcmVmKFxyXG4gIG51bGwgYXMgTnVsbGFibGU8eyB0cmlnZ2VyVHJhbnNpdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPiB9PlxyXG4pXHJcblxyXG5jb25zdCB7ICRpc0FwcEh5ZHJhdGVkIH0gPSB1c2VOdXh0QXBwKClcclxuY29uc3QgaXNJblZpZXdwb3J0ID0gdXNlRWxlbWVudFZpc2liaWxpdHkocGFyZW50KVxyXG5jb25zdCBiYXNlUHJldmlld1VybCA9IGNvbXB1dGVkKCgpID0+IHByb3BzLnByZXZpZXdVcmwpXHJcbmNvbnN0IHtcclxuICBwcmV2aWV3VXJsOiBmaW5hbFByZXZpZXdVcmwsXHJcbiAgcGFub3JhbWFQcmV2aWV3VXJsLFxyXG4gIHNob3VsZExvYWRQYW5vcmFtYSxcclxuICBpc0xvYWRpbmdQYW5vcmFtYSxcclxuICBoYXNEb25lRmlyc3RMb2FkLFxyXG4gIGlzUGFub3JhbWFQbGFjZWhvbGRlclxyXG59ID0gdXNlUHJldmlld0ltYWdlQmxvYihiYXNlUHJldmlld1VybCwge1xyXG4gIGVuYWJsZWQ6IGNvbXB1dGVkKCgpID0+IHByb3BzLmVhZ2VyTG9hZCB8fCBpc0luVmlld3BvcnQudmFsdWUpLFxyXG4gIGVhZ2VyTG9hZDogcHJvcHMuZWFnZXJMb2FkXHJcbn0pXHJcblxyXG5jb25zdCBob3ZlcmVkID0gcmVmKGZhbHNlKVxyXG5jb25zdCBwYW5vcmFtYSA9IHJlZihudWxsIGFzIE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PilcclxuXHJcbmNvbnN0IG1haW5QcmV2aWV3Q2xhc3NlcyA9IGNvbXB1dGVkKFxyXG4gICgpID0+ICd3LWZ1bGwgaC1mdWxsIGJnLWNvdmVyIGJnLW5vLXJlcGVhdCBiZy1jZW50ZXInXHJcbilcclxuXHJcbmNvbnN0IHBhcmVudFdpZHRoID0gcmVmKDApXHJcbmNvbnN0IHBhcmVudEhlaWdodCA9IHJlZigwKVxyXG5jb25zdCBzZXRQYXJlbnREaW1lbnNpb25zID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwIH0gPSBwYXJlbnQudmFsdWU/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IHt9XHJcbiAgcGFyZW50V2lkdGgudmFsdWUgPSB3aWR0aFxyXG4gIHBhcmVudEhlaWdodC52YWx1ZSA9IGhlaWdodFxyXG59XHJcblxyXG5pZiAoaW1wb3J0Lm1ldGEuY2xpZW50KSB1c2VSZXNpemVPYnNlcnZlcihkb2N1bWVudC5ib2R5LCAoKSA9PiBzZXRQYXJlbnREaW1lbnNpb25zKCkpXHJcblxyXG5jb25zdCBwb3NpdGlvbk1hZ2ljID0gcmVmKDApXHJcbmNvbnN0IGxhdGVzdE1vdXNlRXZlbnQgPSByZWY8UGFub3JhbWFTdHlsZU1vdXNlT3JUb3VjaEV2ZW50PigpXHJcbmNvbnN0IGNhbGN1bGF0ZVBhbm9yYW1hU3R5bGUgPSAoZTogUGFub3JhbWFTdHlsZU1vdXNlT3JUb3VjaEV2ZW50KSA9PiB7XHJcbiAgbGF0ZXN0TW91c2VFdmVudC52YWx1ZSA9IGVcclxuICBjb25zdCByZWN0ID0gcGFub3JhbWEudmFsdWU/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgaWYgKHBhcmVudEhlaWdodC52YWx1ZSA9PT0gMCkgc2V0UGFyZW50RGltZW5zaW9ucygpXHJcbiAgaWYgKCFyZWN0KSByZXR1cm5cclxuXHJcbiAgY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdFxyXG4gIGNvbnN0IHN0ZXAgPSByZWN0LndpZHRoIC8gMjRcclxuICBsZXQgaW5kZXggPSBNYXRoLmFicygyNCAtIE1hdGgucm91bmQoeCAvIHN0ZXApKVxyXG4gIGlmIChpbmRleCA+PSAyNCkgaW5kZXggPSAyNCAtIDFcclxuXHJcbiAgY29uc3Qgc2NhbGVGYWN0b3IgPSBwYXJlbnRIZWlnaHQudmFsdWUgLyA0MDBcclxuICBjb25zdCBhY3R1YWxXaWR0aCA9IHNjYWxlRmFjdG9yICogNzAwXHJcbiAgY29uc3Qgd2lkdGhEaWZmID0gKHBhcmVudFdpZHRoLnZhbHVlIC0gYWN0dWFsV2lkdGgpICogMC41XHJcbiAgcG9zaXRpb25NYWdpYy52YWx1ZSA9IC0oYWN0dWFsV2lkdGggKiAoMiAqIGluZGV4ICsgMSkgLSB3aWR0aERpZmYpXHJcbn1cclxuXHJcbmNvbnN0IHNob3VsZFNob3dNYWluUHJldmlldyA9IGNvbXB1dGVkKFxyXG4gICgpID0+XHJcbiAgICAoIWhvdmVyZWQudmFsdWUgJiYgZmluYWxQcmV2aWV3VXJsLnZhbHVlKSB8fFxyXG4gICAgaXNMb2FkaW5nUGFub3JhbWEudmFsdWUgfHxcclxuICAgICFwcm9wcy5wYW5vcmFtYU9uSG92ZXIgfHxcclxuICAgIGlzUGFub3JhbWFQbGFjZWhvbGRlci52YWx1ZSB8fFxyXG4gICAgIXBhbm9yYW1hUHJldmlld1VybC52YWx1ZVxyXG4pXHJcblxyXG5jb25zdCBzaG91bGRTaG93UGFub3JhbWljUHJldmlldyA9IGNvbXB1dGVkKFxyXG4gICgpID0+XHJcbiAgICBob3ZlcmVkLnZhbHVlICYmXHJcbiAgICBwYW5vcmFtYVByZXZpZXdVcmwudmFsdWUgJiZcclxuICAgIHByb3BzLnBhbm9yYW1hT25Ib3ZlciAmJlxyXG4gICAgIWlzUGFub3JhbWFQbGFjZWhvbGRlci52YWx1ZSAmJlxyXG4gICAgJGlzQXBwSHlkcmF0ZWQudmFsdWVcclxuKVxyXG5cclxub25Nb3VudGVkKCgpID0+IHNldFBhcmVudERpbWVuc2lvbnMoKSlcclxuXHJcbndhdGNoKGhvdmVyZWQsIChuZXdWYWwpID0+IHtcclxuICBpZiAobmV3VmFsICYmICFwYW5vcmFtYVByZXZpZXdVcmwudmFsdWUgJiYgcHJvcHMucGFub3JhbWFPbkhvdmVyKVxyXG4gICAgc2hvdWxkTG9hZFBhbm9yYW1hLnZhbHVlID0gdHJ1ZVxyXG59KVxyXG5cclxud2F0Y2goXHJcbiAgKCkgPT4gdW5yZWYocGFub3JhbWFQcmV2aWV3VXJsKSxcclxuICAoKSA9PiB7XHJcbiAgICBpZiAobGF0ZXN0TW91c2VFdmVudC52YWx1ZSkge1xyXG4gICAgICBjYWxjdWxhdGVQYW5vcmFtYVN0eWxlKGxhdGVzdE1vdXNlRXZlbnQudmFsdWUpXHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5pZiAoaW1wb3J0Lm1ldGEuY2xpZW50KSB7XHJcbiAgLy8gVHJpZ2dlciB0cmFuc2l0aW9ucyB3aGVuIHByZXZpZXcgaW1hZ2UgY2hhbmdlc1xyXG4gIHdhdGNoKGZpbmFsUHJldmlld1VybCwgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgICBpZiAobmV3VmFsID09PSBvbGRWYWwpIHJldHVyblxyXG4gICAgZmluYWxQcmV2aWV3VHJhbnNpdGlvbmVyLnZhbHVlPy50cmlnZ2VyVHJhbnNpdGlvbigpXHJcbiAgfSlcclxufVxyXG5cclxuLy8gYXdhaXQgaW5pdCgpXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9wcmV2aWV3L0ltYWdlLnZ1ZSJ9 |