237 lines
22 KiB
Plaintext
237 lines
22 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/camera/Menu.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/menu/Item.vue";
|
|
import { default as __nuxt_component_1 } from "/_nuxt/components/viewer/layout/Panel.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createElementBlock as __createElementBlock,createBlock as __createBlock,createElementVNode as __createElementVNode,createVNode as __createVNode } 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 _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
/* Injection by vite-plugin-vue-inspector End */
|
|
import { useModel as _useModel, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import {
|
|
useInjectedViewerState,
|
|
useInjectedViewer
|
|
} from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { useCameraUtilities, useViewerShortcuts } from "/_nuxt/lib/viewer/composables/ui.ts";
|
|
import { ViewShortcuts } from "/_nuxt/lib/viewer/helpers/shortcuts/shortcuts.ts";
|
|
import { useViewerCameraControlEndTracker } from "/_nuxt/lib/viewer/composables/viewer.ts";
|
|
import { CameraController } from "/_nuxt/@fs/D:/speckle-server/packages/viewer/dist/index.js";
|
|
import { useSynchronizedCookie } from "/_nuxt/lib/common/composables/reactiveCookie.ts";
|
|
|
|
import { ref, onMounted } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ViewerCameraMenu",
|
|
props: {
|
|
"open": { type: Boolean, ...{ default: false } },
|
|
"openModifiers": {}
|
|
},
|
|
emits: ["update:open"],
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const localViewerSettings = useSynchronizedCookie(
|
|
`localViewerSettings`,
|
|
{
|
|
default: () => {
|
|
return { turntableMode: false };
|
|
}
|
|
}
|
|
);
|
|
const {
|
|
viewer: {
|
|
metadata: { views }
|
|
}
|
|
} = useInjectedViewerState();
|
|
const { instance } = useInjectedViewer();
|
|
const { getShortcutDisplayText, registerShortcuts, shortcuts } = useViewerShortcuts();
|
|
const mixpanel = useMixpanel();
|
|
const {
|
|
setView: setViewRaw,
|
|
toggleProjection,
|
|
camera: { isOrthoProjection }
|
|
} = useCameraUtilities();
|
|
const open = _useModel(__props, "open");
|
|
const activeView = ref(null);
|
|
const viewShortcuts = Object.values(ViewShortcuts);
|
|
useViewerCameraControlEndTracker(() => {
|
|
activeView.value = null;
|
|
});
|
|
const handleViewChange = (v, isShortcut = false) => {
|
|
setViewRaw(v);
|
|
activeView.value = typeof v === "string" ? v : v.id;
|
|
if (isShortcut) {
|
|
open.value = true;
|
|
}
|
|
mixpanel.track("Viewer Action", {
|
|
type: "action",
|
|
name: "set-view",
|
|
view: v?.name || v
|
|
});
|
|
};
|
|
const trackAndtoggleProjection = () => {
|
|
toggleProjection();
|
|
mixpanel.track("Viewer Action", {
|
|
type: "action",
|
|
name: "camera",
|
|
camera: isOrthoProjection ? "ortho" : "perspective"
|
|
});
|
|
};
|
|
const setViewerCameraHandlerControlsMaxPolarAngle = (angle) => {
|
|
const extension = instance.getExtension(CameraController);
|
|
if (extension) extension.options = { maximumPolarAngle: angle };
|
|
};
|
|
const toggleTurntableMode = () => {
|
|
localViewerSettings.value = {
|
|
...localViewerSettings.value,
|
|
turntableMode: !localViewerSettings.value.turntableMode
|
|
};
|
|
if (localViewerSettings.value.turntableMode) {
|
|
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI / 2);
|
|
} else {
|
|
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI);
|
|
}
|
|
};
|
|
registerShortcuts({
|
|
SetViewTop: () => handleViewChange("top", true),
|
|
SetViewFront: () => handleViewChange("front", true),
|
|
SetViewLeft: () => handleViewChange("left", true),
|
|
SetViewBack: () => handleViewChange("back", true),
|
|
SetViewRight: () => handleViewChange("right", true),
|
|
ToggleProjection: () => trackAndtoggleProjection()
|
|
});
|
|
onMounted(() => {
|
|
if (localViewerSettings.value.turntableMode) {
|
|
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI / 2);
|
|
} else {
|
|
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI);
|
|
}
|
|
});
|
|
const __returned__ = { localViewerSettings, views, instance, getShortcutDisplayText, registerShortcuts, shortcuts, mixpanel, setViewRaw, toggleProjection, isOrthoProjection, open, activeView, viewShortcuts, handleViewChange, trackAndtoggleProjection, setViewerCameraHandlerControlsMaxPolarAngle, toggleTurntableMode };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "w-64 simple-scrollbar overflow-y-auto flex flex-col",
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:4:5"
|
|
};
|
|
const _hoisted_2 = {
|
|
class: "p-1",
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:5:7"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "p-1 flex flex-col gap-1",
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:18:7"
|
|
};
|
|
const _hoisted_4 = {
|
|
key: 0,
|
|
class: "w-full border-outline-2",
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:34:7"
|
|
};
|
|
const _hoisted_5 = {
|
|
key: 1,
|
|
class: "p-1",
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:35:7"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ViewerMenuItem = __nuxt_component_0;
|
|
const _component_ViewerLayoutPanel = __nuxt_component_1;
|
|
return _openBlock(), _createBlock(_component_ViewerLayoutPanel, { "data-v-inspector": "components/viewer/camera/Menu.vue:3:3" }, {
|
|
default: _withCtx(() => [
|
|
_createElementVNode("div", _hoisted_1, [
|
|
_createElementVNode("div", _hoisted_2, [
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.viewShortcuts, (shortcut) => {
|
|
return _openBlock(), _createBlock(_component_ViewerMenuItem, {
|
|
key: shortcut.name,
|
|
label: shortcut.name,
|
|
"hide-active-tick": "",
|
|
active: $setup.activeView === shortcut.name.toLowerCase(),
|
|
shortcut: $setup.getShortcutDisplayText(shortcut, { hideName: true }),
|
|
onClick: ($event) => $setup.handleViewChange(shortcut.name.toLowerCase()),
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:6:9"
|
|
}, null, 8, ["label", "active", "shortcut", "onClick"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
))
|
|
]),
|
|
_cache[2] || (_cache[2] = _createElementVNode(
|
|
"hr",
|
|
{
|
|
class: "w-full border-outline-2",
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:17:7"
|
|
},
|
|
null,
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createElementVNode("div", _hoisted_3, [
|
|
_createVNode(_component_ViewerMenuItem, {
|
|
label: "Orthographic projection",
|
|
active: $setup.isOrthoProjection,
|
|
shortcut: $setup.getShortcutDisplayText($setup.shortcuts.ToggleProjection, { hideName: true }),
|
|
onClick: _cache[0] || (_cache[0] = ($event) => $setup.trackAndtoggleProjection()),
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:19:9"
|
|
}, null, 8, ["active", "shortcut"]),
|
|
_createVNode(_component_ViewerMenuItem, {
|
|
label: "Free orbit",
|
|
active: !$setup.localViewerSettings.turntableMode,
|
|
onClick: _cache[1] || (_cache[1] = ($event) => $setup.toggleTurntableMode()),
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:27:9"
|
|
}, null, 8, ["active"])
|
|
]),
|
|
$setup.views.length !== 0 ? (_openBlock(), _createElementBlock("hr", _hoisted_4)) : _createCommentVNode("v-if", true),
|
|
$setup.views.length !== 0 ? (_openBlock(), _createElementBlock("div", _hoisted_5, [
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.views, (view) => {
|
|
return _openBlock(), _createBlock(_component_ViewerMenuItem, {
|
|
key: view.id,
|
|
"hide-active-tick": "",
|
|
active: $setup.activeView === view.id,
|
|
label: view.name ? view.name : view.id,
|
|
onClick: ($event) => $setup.handleViewChange(view),
|
|
"data-v-inspector": "components/viewer/camera/Menu.vue:36:9"
|
|
}, null, 8, ["active", "label", "onClick"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
))
|
|
])) : _createCommentVNode("v-if", true)
|
|
])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
});
|
|
}
|
|
_sfc_main.__hmrId = "62c49a11";
|
|
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/viewer/camera/Menu.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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MUMsYUFBTSxXQUFNLG1CQUF0QixvQkFBMEgsTUFBMUgsVUFBMEg7UUFDL0csYUFBTSxXQUFNLG1CQUF2QixvQkFTTSxPQVROLFlBU007QUFBQSw2QkFSSjtBQUFBLFlBT0U7QUFBQTtBQUFBLHdCQU5lLGNBQUssQ0FBYixTQUFJO21DQURiLGFBT0U7QUFBQSxnQkFMQyxLQUFLLEtBQUs7QUFBQSxnQkFDWDtBQUFBLGdCQUNDLFFBQVEsc0JBQWUsS0FBSztBQUFBLGdCQUM1QixPQUFPLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSztBQUFBLGdCQUNwQyxTQUFLLFlBQUUsd0JBQWlCLElBQUk7QUFBQSxnQkFBRyxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTWVudS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDxWaWV3ZXJMYXlvdXRQYW5lbCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM6M1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInctNjQgc2ltcGxlLXNjcm9sbGJhciBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6NDo1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjU6N1wiPlxyXG4gICAgICAgIDxWaWV3ZXJNZW51SXRlbVxyXG4gICAgICAgICAgdi1mb3I9XCJzaG9ydGN1dCBpbiB2aWV3U2hvcnRjdXRzXCJcclxuICAgICAgICAgIDprZXk9XCJzaG9ydGN1dC5uYW1lXCJcclxuICAgICAgICAgIDpsYWJlbD1cInNob3J0Y3V0Lm5hbWVcIlxyXG4gICAgICAgICAgaGlkZS1hY3RpdmUtdGlja1xyXG4gICAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVZpZXcgPT09IHNob3J0Y3V0Lm5hbWUudG9Mb3dlckNhc2UoKVwiXHJcbiAgICAgICAgICA6c2hvcnRjdXQ9XCJnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0LCB7IGhpZGVOYW1lOiB0cnVlIH0pIGFzIHN0cmluZ1wiXHJcbiAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVWaWV3Q2hhbmdlKHNob3J0Y3V0Lm5hbWUudG9Mb3dlckNhc2UoKSBhcyBDYW5vbmljYWxWaWV3KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6Njo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxociBjbGFzcz1cInctZnVsbCBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZToxNzo3XCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMSBmbGV4IGZsZXgtY29sIGdhcC0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZToxODo3XCI+XHJcbiAgICAgICAgPFZpZXdlck1lbnVJdGVtXHJcbiAgICAgICAgICBsYWJlbD1cIk9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXCJcclxuICAgICAgICAgIDphY3RpdmU9XCJpc09ydGhvUHJvamVjdGlvblwiXHJcbiAgICAgICAgICA6c2hvcnRjdXQ9XCJcclxuICAgICAgICAgICAgZ2V0U2hvcnRjdXREaXNwbGF5VGV4dChzaG9ydGN1dHMuVG9nZ2xlUHJvamVjdGlvbiwgeyBoaWRlTmFtZTogdHJ1ZSB9KSBhcyBzdHJpbmdcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJ0cmFja0FuZHRvZ2dsZVByb2plY3Rpb24oKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6MTk6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyTWVudUl0ZW1cclxuICAgICAgICAgIGxhYmVsPVwiRnJlZSBvcmJpdFwiXHJcbiAgICAgICAgICA6YWN0aXZlPVwiIWxvY2FsVmlld2VyU2V0dGluZ3MudHVybnRhYmxlTW9kZVwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVUdXJudGFibGVNb2RlKClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjI3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGhyIHYtaWY9XCJ2aWV3cy5sZW5ndGggIT09IDBcIiBjbGFzcz1cInctZnVsbCBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZTozNDo3XCIgLz5cclxuICAgICAgPGRpdiB2LWlmPVwidmlld3MubGVuZ3RoICE9PSAwXCIgY2xhc3M9XCJwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM1OjdcIj5cclxuICAgICAgICA8Vmlld2VyTWVudUl0ZW1cclxuICAgICAgICAgIHYtZm9yPVwidmlldyBpbiB2aWV3c1wiXHJcbiAgICAgICAgICA6a2V5PVwidmlldy5pZFwiXHJcbiAgICAgICAgICBoaWRlLWFjdGl2ZS10aWNrXHJcbiAgICAgICAgICA6YWN0aXZlPVwiYWN0aXZlVmlldyA9PT0gdmlldy5pZFwiXHJcbiAgICAgICAgICA6bGFiZWw9XCJ2aWV3Lm5hbWUgPyB2aWV3Lm5hbWUgOiB2aWV3LmlkXCJcclxuICAgICAgICAgIEBjbGljaz1cImhhbmRsZVZpZXdDaGFuZ2UodmlldylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM2OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9WaWV3ZXJMYXlvdXRQYW5lbD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQ2Fub25pY2FsVmlldywgU3BlY2tsZVZpZXcgfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7XHJcbiAgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSxcclxuICB1c2VJbmplY3RlZFZpZXdlclxyXG59IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IHVzZUNhbWVyYVV0aWxpdGllcywgdXNlVmlld2VyU2hvcnRjdXRzIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy91aSdcclxuaW1wb3J0IHsgVmlld1Nob3J0Y3V0cyB9IGZyb20gJ34vbGliL3ZpZXdlci9oZWxwZXJzL3Nob3J0Y3V0cy9zaG9ydGN1dHMnXHJcbmltcG9ydCB7IHVzZVZpZXdlckNhbWVyYUNvbnRyb2xFbmRUcmFja2VyIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy92aWV3ZXInXHJcbmltcG9ydCB7IENhbWVyYUNvbnRyb2xsZXIgfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHVzZVN5bmNocm9uaXplZENvb2tpZSB9IGZyb20gJ35+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvcmVhY3RpdmVDb29raWUnXHJcblxyXG50eXBlIFZpZXdlclVzZXJTZXR0aW5ncyA9IHtcclxuICB0dXJudGFibGVNb2RlOiBib29sZWFuXHJcbn1cclxuXHJcbmNvbnN0IGxvY2FsVmlld2VyU2V0dGluZ3MgPSB1c2VTeW5jaHJvbml6ZWRDb29raWU8Vmlld2VyVXNlclNldHRpbmdzPihcclxuICBgbG9jYWxWaWV3ZXJTZXR0aW5nc2AsXHJcbiAge1xyXG4gICAgZGVmYXVsdDogKCkgPT4ge1xyXG4gICAgICByZXR1cm4geyB0dXJudGFibGVNb2RlOiBmYWxzZSB9XHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5jb25zdCB7XHJcbiAgdmlld2VyOiB7XHJcbiAgICBtZXRhZGF0YTogeyB2aWV3cyB9XHJcbiAgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbmNvbnN0IHsgaW5zdGFuY2UgfSA9IHVzZUluamVjdGVkVmlld2VyKClcclxuY29uc3QgeyBnZXRTaG9ydGN1dERpc3BsYXlUZXh0LCByZWdpc3RlclNob3J0Y3V0cywgc2hvcnRjdXRzIH0gPSB1c2VWaWV3ZXJTaG9ydGN1dHMoKVxyXG5jb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuY29uc3Qge1xyXG4gIHNldFZpZXc6IHNldFZpZXdSYXcsXHJcbiAgdG9nZ2xlUHJvamVjdGlvbixcclxuICBjYW1lcmE6IHsgaXNPcnRob1Byb2plY3Rpb24gfVxyXG59ID0gdXNlQ2FtZXJhVXRpbGl0aWVzKClcclxuXHJcbmNvbnN0IG9wZW4gPSBkZWZpbmVNb2RlbDxib29sZWFuPignb3BlbicsIHsgZGVmYXVsdDogZmFsc2UgfSlcclxuY29uc3QgYWN0aXZlVmlldyA9IHJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxyXG5jb25zdCB2aWV3U2hvcnRjdXRzID0gT2JqZWN0LnZhbHVlcyhWaWV3U2hvcnRjdXRzKVxyXG5cclxuLy8gQ2xlYXIgYWN0aXZlIHZpZXcgd2hlbiBjYW1lcmEgY29udHJvbCBlbmRzXHJcbnVzZVZpZXdlckNhbWVyYUNvbnRyb2xFbmRUcmFja2VyKCgpID0+IHtcclxuICBhY3RpdmVWaWV3LnZhbHVlID0gbnVsbFxyXG59KVxyXG5cclxuY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9ICh2OiBDYW5vbmljYWxWaWV3IHwgU3BlY2tsZVZpZXcsIGlzU2hvcnRjdXQgPSBmYWxzZSkgPT4ge1xyXG4gIHNldFZpZXdSYXcodilcclxuICBhY3RpdmVWaWV3LnZhbHVlID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHYuaWRcclxuXHJcbiAgaWYgKGlzU2hvcnRjdXQpIHtcclxuICAgIG9wZW4udmFsdWUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBtaXhwYW5lbC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NldC12aWV3JyxcclxuICAgIHZpZXc6ICh2IGFzIFNwZWNrbGVWaWV3KT8ubmFtZSB8fCB2XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgdHJhY2tBbmR0b2dnbGVQcm9qZWN0aW9uID0gKCkgPT4ge1xyXG4gIHRvZ2dsZVByb2plY3Rpb24oKVxyXG4gIG1peHBhbmVsLnRyYWNrKCdWaWV3ZXIgQWN0aW9uJywge1xyXG4gICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICBuYW1lOiAnY2FtZXJhJyxcclxuICAgIGNhbWVyYTogaXNPcnRob1Byb2plY3Rpb24gPyAnb3J0aG8nIDogJ3BlcnNwZWN0aXZlJ1xyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IHNldFZpZXdlckNhbWVyYUhhbmRsZXJDb250cm9sc01heFBvbGFyQW5nbGUgPSAoYW5nbGU6IG51bWJlcikgPT4ge1xyXG4gIGNvbnN0IGV4dGVuc2lvbiA9IGluc3RhbmNlLmdldEV4dGVuc2lvbihDYW1lcmFDb250cm9sbGVyKVxyXG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbi5vcHRpb25zID0geyBtYXhpbXVtUG9sYXJBbmdsZTogYW5nbGUgfVxyXG59XHJcblxyXG5jb25zdCB0b2dnbGVUdXJudGFibGVNb2RlID0gKCkgPT4ge1xyXG4gIGxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUgPSB7XHJcbiAgICAuLi5sb2NhbFZpZXdlclNldHRpbmdzLnZhbHVlLFxyXG4gICAgdHVybnRhYmxlTW9kZTogIWxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUudHVybnRhYmxlTW9kZVxyXG4gIH1cclxuICBpZiAobG9jYWxWaWV3ZXJTZXR0aW5ncy52YWx1ZS50dXJudGFibGVNb2RlKSB7XHJcbiAgICBzZXRWaWV3ZXJDYW1lcmFIYW5kbGVyQ29udHJvbHNNYXhQb2xhckFuZ2xlKE1hdGguUEkgLyAyKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBzZXRWaWV3ZXJDYW1lcmFIYW5kbGVyQ29udHJvbHNNYXhQb2xhckFuZ2xlKE1hdGguUEkpXHJcbiAgfVxyXG59XHJcblxyXG5yZWdpc3RlclNob3J0Y3V0cyh7XHJcbiAgU2V0Vmlld1RvcDogKCkgPT4gaGFuZGxlVmlld0NoYW5nZSgndG9wJywgdHJ1ZSksXHJcbiAgU2V0Vmlld0Zyb250OiAoKSA9PiBoYW5kbGVWaWV3Q2hhbmdlKCdmcm9udCcsIHRydWUpLFxyXG4gIFNldFZpZXdMZWZ0OiAoKSA9PiBoYW5kbGVWaWV3Q2hhbmdlKCdsZWZ0JywgdHJ1ZSksXHJcbiAgU2V0Vmlld0JhY2s6ICgpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ2JhY2snLCB0cnVlKSxcclxuICBTZXRWaWV3UmlnaHQ6ICgpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ3JpZ2h0JywgdHJ1ZSksXHJcbiAgVG9nZ2xlUHJvamVjdGlvbjogKCkgPT4gdHJhY2tBbmR0b2dnbGVQcm9qZWN0aW9uKClcclxufSlcclxuXHJcbm9uTW91bnRlZCgoKSA9PiB7XHJcbiAgaWYgKGxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUudHVybnRhYmxlTW9kZSkge1xyXG4gICAgc2V0Vmlld2VyQ2FtZXJhSGFuZGxlckNvbnRyb2xzTWF4UG9sYXJBbmdsZShNYXRoLlBJIC8gMilcclxuICB9IGVsc2Uge1xyXG4gICAgc2V0Vmlld2VyQ2FtZXJhSGFuZGxlckNvbnRyb2xzTWF4UG9sYXJBbmdsZShNYXRoLlBJKVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWUifQ== |