140 lines
19 KiB
Plaintext
140 lines
19 KiB
Plaintext
import { FilteringExtension } from "/_nuxt/@fs/D:/speckle-server/packages/viewer/dist/index.js";
|
|
import { watchTriggerable } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { useOnViewerLoadComplete } from "/_nuxt/lib/viewer/composables/viewer.ts";
|
|
import { useFilteringDataStore } from "/_nuxt/lib/viewer/composables/filtering/dataStore.ts";
|
|
|
|
import { watch, onBeforeUnmount } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
export const useFilterColoringPostSetup = () => {
|
|
const {
|
|
ui: { filters },
|
|
viewer
|
|
} = useInjectedViewerState();
|
|
const dataStore = useFilteringDataStore();
|
|
const filteringExtension = () => viewer.instance.getExtension(FilteringExtension);
|
|
const setNumericColorFilter = (filterId) => {
|
|
const filter = filters.propertyFilters.value.find((f) => f.id === filterId);
|
|
if (!filter?.filter || filter.type !== "numeric" || filter.filter.type !== "number")
|
|
return;
|
|
const numericFilter = filter.filter;
|
|
const min = parseFloat(filter.numericRange.min.toFixed(4));
|
|
const max = parseFloat(filter.numericRange.max.toFixed(4));
|
|
const finalFilteredObjectIds = new Set(dataStore.getFinalObjectIds());
|
|
const colorGroups = numericFilter.valueGroups?.filter((vg) => {
|
|
const roundedValue = parseFloat(vg.value.toFixed(4));
|
|
const inRange = roundedValue >= min && roundedValue <= max;
|
|
const isInFinalFilteredSet = finalFilteredObjectIds.has(vg.id);
|
|
return inRange && isInFinalFilteredSet;
|
|
})?.map((vg) => {
|
|
const normalizedValue = (vg.value - numericFilter.min) / (numericFilter.max - numericFilter.min);
|
|
const fromColor = { r: 59, g: 130, b: 246 };
|
|
const toColor = { r: 236, g: 72, b: 153 };
|
|
const r = Math.round(
|
|
fromColor.r + (toColor.r - fromColor.r) * normalizedValue
|
|
);
|
|
const g = Math.round(
|
|
fromColor.g + (toColor.g - fromColor.g) * normalizedValue
|
|
);
|
|
const b = Math.round(
|
|
fromColor.b + (toColor.b - fromColor.b) * normalizedValue
|
|
);
|
|
return {
|
|
objectIds: [vg.id],
|
|
color: `rgb(${r}, ${g}, ${b})`
|
|
};
|
|
}) || [];
|
|
const extension = filteringExtension();
|
|
extension.setUserObjectColors(colorGroups);
|
|
};
|
|
const setStringColorFilter = (filterId) => {
|
|
const filter = filters.propertyFilters.value.find((f) => f.id === filterId);
|
|
if (!filter?.filter || filter.type !== "string") return;
|
|
const extension = filteringExtension();
|
|
extension.setColorFilter(filter.filter);
|
|
};
|
|
const removeColorFilter = () => {
|
|
const extension = filteringExtension();
|
|
extension.removeColorFilter();
|
|
extension.removeUserObjectColors();
|
|
};
|
|
const { trigger: triggerColorFilterWatch, ignoreUpdates: ignoreColorFilterUpdates } = watchTriggerable(filters.activeColorFilterId, (newFilterId, oldFilterId) => {
|
|
if (newFilterId === oldFilterId) return;
|
|
if (!newFilterId) {
|
|
removeColorFilter();
|
|
return;
|
|
}
|
|
const filter = filters.propertyFilters.value.find((f) => f.id === newFilterId);
|
|
if (filter?.filter) {
|
|
if (filter.type === "numeric") {
|
|
setNumericColorFilter(newFilterId);
|
|
} else {
|
|
setStringColorFilter(newFilterId);
|
|
}
|
|
} else {
|
|
ignoreColorFilterUpdates(() => {
|
|
filters.activeColorFilterId.value = null;
|
|
});
|
|
}
|
|
});
|
|
watchTriggerable(
|
|
() => filters.propertyFilters.value.map((f) => ({
|
|
id: f.id,
|
|
key: f.filter?.key,
|
|
type: f.type
|
|
})),
|
|
() => {
|
|
const activeFilterId = filters.activeColorFilterId.value;
|
|
if (!activeFilterId) return;
|
|
const activeFilter = filters.propertyFilters.value.find(
|
|
(f) => f.id === activeFilterId
|
|
);
|
|
if (!activeFilter) {
|
|
ignoreColorFilterUpdates(() => {
|
|
filters.activeColorFilterId.value = null;
|
|
});
|
|
} else {
|
|
if (activeFilter.filter) {
|
|
if (activeFilter.type === "numeric") {
|
|
setNumericColorFilter(activeFilterId);
|
|
} else {
|
|
setStringColorFilter(activeFilterId);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{ deep: true }
|
|
);
|
|
watchTriggerable(
|
|
() => filters.propertyFilters.value.map((f) => f.type === "numeric" ? { id: f.id, range: f.numericRange } : null).filter(Boolean),
|
|
() => {
|
|
const activeFilterId = filters.activeColorFilterId.value;
|
|
if (!activeFilterId) return;
|
|
const activeFilter = filters.propertyFilters.value.find(
|
|
(f) => f.id === activeFilterId
|
|
);
|
|
if (activeFilter?.filter && activeFilter.type === "numeric") {
|
|
setNumericColorFilter(activeFilterId);
|
|
}
|
|
},
|
|
{ deep: true }
|
|
);
|
|
watch(
|
|
() => filters.propertyFilters.value.length,
|
|
(filterCount, prevFilterCount) => {
|
|
if (prevFilterCount > 0 && filterCount === 0) {
|
|
removeColorFilter();
|
|
}
|
|
}
|
|
);
|
|
useOnViewerLoadComplete(
|
|
() => {
|
|
triggerColorFilterWatch();
|
|
},
|
|
{ initialOnly: true }
|
|
);
|
|
onBeforeUnmount(() => {
|
|
removeColorFilter();
|
|
});
|
|
};
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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YUFBYSxJQUFJLElBQUssRUFDOUUsT0FBTyxPQUFPO0FBQUEsSUFDbkIsTUFBTTtBQUNKLFlBQU0saUJBQWlCLFFBQVEsb0JBQW9CO0FBQ25ELFVBQUksQ0FBQyxlQUFnQjtBQUVyQixZQUFNLGVBQWUsUUFBUSxnQkFBZ0IsTUFBTTtBQUFBLFFBQ2pELENBQUMsTUFBTSxFQUFFLE9BQU87QUFBQSxNQUNsQjtBQUVBLFVBQUksY0FBYyxVQUFVLGFBQWEsU0FBUyxXQUFXO0FBQzNELDhCQUFzQixjQUFjO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBQUEsSUFDQSxFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ2Y7QUFLQTtBQUFBLElBQ0UsTUFBTSxRQUFRLGdCQUFnQixNQUFNO0FBQUEsSUFDcEMsQ0FBQyxhQUFhLG9CQUFvQjtBQUNoQyxVQUFJLGtCQUFrQixLQUFLLGdCQUFnQixHQUFHO0FBQzVDLDBCQUFrQjtBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFLQTtBQUFBLElBQ0UsTUFBTTtBQUNKLDhCQUF3QjtBQUFBLElBQzFCO0FBQUEsSUFDQSxFQUFFLGFBQWEsS0FBSztBQUFBLEVBQ3RCO0FBRUEsa0JBQWdCLE1BQU07QUFDcEIsc0JBQWtCO0FBQUEsRUFDcEIsQ0FBQztBQUNIIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjb2xvcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJpbmdFeHRlbnNpb24gfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB0eXBlIHsgTnVtZXJpY1Byb3BlcnR5SW5mbyB9IGZyb20gJ0BzcGVja2xlL3ZpZXdlcidcclxuaW1wb3J0IHsgd2F0Y2hUcmlnZ2VyYWJsZSB9IGZyb20gJ0B2dWV1c2UvY29yZSdcclxuaW1wb3J0IHsgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cCdcclxuaW1wb3J0IHsgdXNlT25WaWV3ZXJMb2FkQ29tcGxldGUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvdmlld2VyJ1xyXG5pbXBvcnQgeyB1c2VGaWx0ZXJpbmdEYXRhU3RvcmUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvZmlsdGVyaW5nL2RhdGFTdG9yZSdcclxuXHJcbi8qKlxyXG4gKiBJbnRlZ3JhdGlvbiBjb21wb3NhYmxlIHRoYXQgc2V0cyB1cCB3YXRjaGVycyB0byBzeW5jIHN0YXRlIHdpdGggdGhlIHZpZXdlci5cclxuICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBkdXJpbmcgcG9zdC1zZXR1cCBhZnRlciB0aGUgdmlld2VyIGlzIGluaXRpYWxpemVkLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHVzZUZpbHRlckNvbG9yaW5nUG9zdFNldHVwID0gKCkgPT4ge1xyXG4gIGNvbnN0IHtcclxuICAgIHVpOiB7IGZpbHRlcnMgfSxcclxuICAgIHZpZXdlclxyXG4gIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuXHJcbiAgY29uc3QgZGF0YVN0b3JlID0gdXNlRmlsdGVyaW5nRGF0YVN0b3JlKClcclxuICBjb25zdCBmaWx0ZXJpbmdFeHRlbnNpb24gPSAoKSA9PiB2aWV3ZXIuaW5zdGFuY2UuZ2V0RXh0ZW5zaW9uKEZpbHRlcmluZ0V4dGVuc2lvbilcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBjb2xvciBmaWx0ZXIgZm9yIG51bWVyaWMgZmlsdGVycyB1c2luZyBzZXRVc2VyT2JqZWN0Q29sb3JzXHJcbiAgICovXHJcbiAgY29uc3Qgc2V0TnVtZXJpY0NvbG9yRmlsdGVyID0gKGZpbHRlcklkOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcnMucHJvcGVydHlGaWx0ZXJzLnZhbHVlLmZpbmQoKGYpID0+IGYuaWQgPT09IGZpbHRlcklkKVxyXG4gICAgaWYgKCFmaWx0ZXI/LmZpbHRlciB8fCBmaWx0ZXIudHlwZSAhPT0gJ251bWVyaWMnIHx8IGZpbHRlci5maWx0ZXIudHlwZSAhPT0gJ251bWJlcicpXHJcbiAgICAgIHJldHVyblxyXG5cclxuICAgIGNvbnN0IG51bWVyaWNGaWx0ZXIgPSBmaWx0ZXIuZmlsdGVyIGFzIE51bWVyaWNQcm9wZXJ0eUluZm9cclxuICAgIC8vIFVzZSB0aGUgc2FtZSByb3VuZGluZyBwcmVjaXNpb24gYXMgdGhlIGZpbHRlcmluZyBsb2dpYyB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBpc3N1ZXNcclxuICAgIGNvbnN0IG1pbiA9IHBhcnNlRmxvYXQoZmlsdGVyLm51bWVyaWNSYW5nZS5taW4udG9GaXhlZCg0KSlcclxuICAgIGNvbnN0IG1heCA9IHBhcnNlRmxvYXQoZmlsdGVyLm51bWVyaWNSYW5nZS5tYXgudG9GaXhlZCg0KSlcclxuXHJcbiAgICAvLyBHZXQgdGhlIGZpbmFsIGZpbHRlcmVkIG9iamVjdCBJRHMgZnJvbSBhbGwgYWN0aXZlIGZpbHRlcnMgdG8gZW5zdXJlIGNvbG9yaW5nIHJlc3BlY3RzIGFsbCBmaWx0ZXJzXHJcbiAgICBjb25zdCBmaW5hbEZpbHRlcmVkT2JqZWN0SWRzID0gbmV3IFNldChkYXRhU3RvcmUuZ2V0RmluYWxPYmplY3RJZHMoKSlcclxuXHJcbiAgICBjb25zdCBjb2xvckdyb3VwcyA9XHJcbiAgICAgIG51bWVyaWNGaWx0ZXIudmFsdWVHcm91cHNcclxuICAgICAgICA/LmZpbHRlcigodmcpID0+IHtcclxuICAgICAgICAgIC8vIEFwcGx5IHRoZSBzYW1lIHJvdW5kaW5nIHByZWNpc2lvbiB0byB2YWx1ZUdyb3VwIHZhbHVlcyBmb3IgY29uc2lzdGVudCBjb21wYXJpc29uXHJcbiAgICAgICAgICBjb25zdCByb3VuZGVkVmFsdWUgPSBwYXJzZUZsb2F0KHZnLnZhbHVlLnRvRml4ZWQoNCkpXHJcbiAgICAgICAgICBjb25zdCBpblJhbmdlID0gcm91bmRlZFZhbHVlID49IG1pbiAmJiByb3VuZGVkVmFsdWUgPD0gbWF4XHJcbiAgICAgICAgICAvLyBPbmx5IGluY2x1ZGUgb2JqZWN0cyB0aGF0IGFyZSBpbiB0aGUgZmluYWwgZmlsdGVyZWQgc2V0IChpbnRlcnNlY3Rpb24gb2YgYWxsIGFjdGl2ZSBmaWx0ZXJzKVxyXG4gICAgICAgICAgY29uc3QgaXNJbkZpbmFsRmlsdGVyZWRTZXQgPSBmaW5hbEZpbHRlcmVkT2JqZWN0SWRzLmhhcyh2Zy5pZClcclxuICAgICAgICAgIHJldHVybiBpblJhbmdlICYmIGlzSW5GaW5hbEZpbHRlcmVkU2V0XHJcbiAgICAgICAgfSlcclxuICAgICAgICA/Lm1hcCgodmcpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9XHJcbiAgICAgICAgICAgICh2Zy52YWx1ZSAtIG51bWVyaWNGaWx0ZXIubWluKSAvIChudW1lcmljRmlsdGVyLm1heCAtIG51bWVyaWNGaWx0ZXIubWluKVxyXG4gICAgICAgICAgY29uc3QgZnJvbUNvbG9yID0geyByOiA1OSwgZzogMTMwLCBiOiAyNDYgfSAvLyAjM2I4MmY2XHJcbiAgICAgICAgICBjb25zdCB0b0NvbG9yID0geyByOiAyMzYsIGc6IDcyLCBiOiAxNTMgfSAvLyAjZWM0ODk5XHJcblxyXG4gICAgICAgICAgY29uc3QgciA9IE1hdGgucm91bmQoXHJcbiAgICAgICAgICAgIGZyb21Db2xvci5yICsgKHRvQ29sb3IuciAtIGZyb21Db2xvci5yKSAqIG5vcm1hbGl6ZWRWYWx1ZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgY29uc3QgZyA9IE1hdGgucm91bmQoXHJcbiAgICAgICAgICAgIGZyb21Db2xvci5nICsgKHRvQ29sb3IuZyAtIGZyb21Db2xvci5nKSAqIG5vcm1hbGl6ZWRWYWx1ZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgY29uc3QgYiA9IE1hdGgucm91bmQoXHJcbiAgICAgICAgICAgIGZyb21Db2xvci5iICsgKHRvQ29sb3IuYiAtIGZyb21Db2xvci5iKSAqIG5vcm1hbGl6ZWRWYWx1ZVxyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9iamVjdElkczogW3ZnLmlkXSxcclxuICAgICAgICAgICAgY29sb3I6IGByZ2IoJHtyfSwgJHtnfSwgJHtifSlgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkgfHwgW11cclxuXHJcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWx0ZXJpbmdFeHRlbnNpb24oKVxyXG4gICAgZXh0ZW5zaW9uLnNldFVzZXJPYmplY3RDb2xvcnMoY29sb3JHcm91cHMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGNvbG9yIGZpbHRlciBmb3Igc3RyaW5nIGZpbHRlcnMgdXNpbmcgc2V0Q29sb3JGaWx0ZXJcclxuICAgKi9cclxuICBjb25zdCBzZXRTdHJpbmdDb2xvckZpbHRlciA9IChmaWx0ZXJJZDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzLnByb3BlcnR5RmlsdGVycy52YWx1ZS5maW5kKChmKSA9PiBmLmlkID09PSBmaWx0ZXJJZClcclxuICAgIGlmICghZmlsdGVyPy5maWx0ZXIgfHwgZmlsdGVyLnR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWx0ZXJpbmdFeHRlbnNpb24oKVxyXG4gICAgZXh0ZW5zaW9uLnNldENvbG9yRmlsdGVyKGZpbHRlci5maWx0ZXIpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHRoZSBhY3RpdmUgY29sb3IgZmlsdGVyIGJ5IGNhbGxpbmcgdGhlIHZpZXdlciBleHRlbnNpb25cclxuICAgKi9cclxuICBjb25zdCByZW1vdmVDb2xvckZpbHRlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbHRlcmluZ0V4dGVuc2lvbigpXHJcbiAgICBleHRlbnNpb24ucmVtb3ZlQ29sb3JGaWx0ZXIoKVxyXG4gICAgZXh0ZW5zaW9uLnJlbW92ZVVzZXJPYmplY3RDb2xvcnMoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2F0Y2ggZm9yIGNoYW5nZXMgdG8gYWN0aXZlQ29sb3JGaWx0ZXJJZCBhbmQgYXBwbHkvcmVtb3ZlIGNvbG9yIGZpbHRlcnMgYWNjb3JkaW5nbHlcclxuICAgKi9cclxuICBjb25zdCB7IHRyaWdnZXI6IHRyaWdnZXJDb2xvckZpbHRlcldhdGNoLCBpZ25vcmVVcGRhdGVzOiBpZ25vcmVDb2xvckZpbHRlclVwZGF0ZXMgfSA9XHJcbiAgICB3YXRjaFRyaWdnZXJhYmxlKGZpbHRlcnMuYWN0aXZlQ29sb3JGaWx0ZXJJZCwgKG5ld0ZpbHRlcklkLCBvbGRGaWx0ZXJJZCkgPT4ge1xyXG4gICAgICBpZiAobmV3RmlsdGVySWQgPT09IG9sZEZpbHRlcklkKSByZXR1cm5cclxuXHJcbiAgICAgIGlmICghbmV3RmlsdGVySWQpIHtcclxuICAgICAgICByZW1vdmVDb2xvckZpbHRlcigpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcnMucHJvcGVydHlGaWx0ZXJzLnZhbHVlLmZpbmQoKGYpID0+IGYuaWQgPT09IG5ld0ZpbHRlcklkKVxyXG4gICAgICBpZiAoZmlsdGVyPy5maWx0ZXIpIHtcclxuICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdudW1lcmljJykge1xyXG4gICAgICAgICAgc2V0TnVtZXJpY0NvbG9yRmlsdGVyKG5ld0ZpbHRlcklkKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXRTdHJpbmdDb2xvckZpbHRlcihuZXdGaWx0ZXJJZClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWdub3JlQ29sb3JGaWx0ZXJVcGRhdGVzKCgpID0+IHtcclxuICAgICAgICAgIGZpbHRlcnMuYWN0aXZlQ29sb3JGaWx0ZXJJZC52YWx1ZSA9IG51bGxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyB0byBwcm9wZXJ0eUZpbHRlcnMgdG8gdmFsaWRhdGUgYWN0aXZlQ29sb3JGaWx0ZXJJZFxyXG4gICAqIE9ubHkgcmUtYXBwbHkgY29sb3JzIHdoZW4gZmlsdGVyIHN0cnVjdHVyZSBjaGFuZ2VzLCBub3Qgd2hlbiB2YWx1ZXMgY2hhbmdlXHJcbiAgICovXHJcbiAgd2F0Y2hUcmlnZ2VyYWJsZShcclxuICAgICgpID0+XHJcbiAgICAgIGZpbHRlcnMucHJvcGVydHlGaWx0ZXJzLnZhbHVlLm1hcCgoZikgPT4gKHtcclxuICAgICAgICBpZDogZi5pZCxcclxuICAgICAgICBrZXk6IGYuZmlsdGVyPy5rZXksXHJcbiAgICAgICAgdHlwZTogZi50eXBlXHJcbiAgICAgIH0pKSxcclxuICAgICgpID0+IHtcclxuICAgICAgY29uc3QgYWN0aXZlRmlsdGVySWQgPSBmaWx0ZXJzLmFjdGl2ZUNvbG9yRmlsdGVySWQudmFsdWVcclxuICAgICAgaWYgKCFhY3RpdmVGaWx0ZXJJZCkgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCBhY3RpdmVGaWx0ZXIgPSBmaWx0ZXJzLnByb3BlcnR5RmlsdGVycy52YWx1ZS5maW5kKFxyXG4gICAgICAgIChmKSA9PiBmLmlkID09PSBhY3RpdmVGaWx0ZXJJZFxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAoIWFjdGl2ZUZpbHRlcikge1xyXG4gICAgICAgIGlnbm9yZUNvbG9yRmlsdGVyVXBkYXRlcygoKSA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJzLmFjdGl2ZUNvbG9yRmlsdGVySWQudmFsdWUgPSBudWxsXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoYWN0aXZlRmlsdGVyLmZpbHRlcikge1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZUZpbHRlci50eXBlID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgICAgc2V0TnVtZXJpY0NvbG9yRmlsdGVyKGFjdGl2ZUZpbHRlcklkKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2V0U3RyaW5nQ29sb3JGaWx0ZXIoYWN0aXZlRmlsdGVySWQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyBkZWVwOiB0cnVlIH1cclxuICApXHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIHRvIG51bWVyaWMgcmFuZ2UgdmFsdWVzIGFuZCByZS1hcHBseSBjb2xvciBmaWx0ZXJcclxuICAgKi9cclxuICB3YXRjaFRyaWdnZXJhYmxlKFxyXG4gICAgKCkgPT5cclxuICAgICAgZmlsdGVycy5wcm9wZXJ0eUZpbHRlcnMudmFsdWVcclxuICAgICAgICAubWFwKChmKSA9PiAoZi50eXBlID09PSAnbnVtZXJpYycgPyB7IGlkOiBmLmlkLCByYW5nZTogZi5udW1lcmljUmFuZ2UgfSA6IG51bGwpKVxyXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbiksXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcklkID0gZmlsdGVycy5hY3RpdmVDb2xvckZpbHRlcklkLnZhbHVlXHJcbiAgICAgIGlmICghYWN0aXZlRmlsdGVySWQpIHJldHVyblxyXG5cclxuICAgICAgY29uc3QgYWN0aXZlRmlsdGVyID0gZmlsdGVycy5wcm9wZXJ0eUZpbHRlcnMudmFsdWUuZmluZChcclxuICAgICAgICAoZikgPT4gZi5pZCA9PT0gYWN0aXZlRmlsdGVySWRcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKGFjdGl2ZUZpbHRlcj8uZmlsdGVyICYmIGFjdGl2ZUZpbHRlci50eXBlID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgICBzZXROdW1lcmljQ29sb3JGaWx0ZXIoYWN0aXZlRmlsdGVySWQpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7IGRlZXA6IHRydWUgfVxyXG4gIClcclxuXHJcbiAgLyoqXHJcbiAgICogV2F0Y2ggZm9yIGZpbHRlciByZXNldHMgLSB3aGVuIGFsbCBwcm9wZXJ0eSBmaWx0ZXJzIGFyZSByZW1vdmVkLCBjbGVhciBjb2xvciBmaWx0ZXJcclxuICAgKi9cclxuICB3YXRjaChcclxuICAgICgpID0+IGZpbHRlcnMucHJvcGVydHlGaWx0ZXJzLnZhbHVlLmxlbmd0aCxcclxuICAgIChmaWx0ZXJDb3VudCwgcHJldkZpbHRlckNvdW50KSA9PiB7XHJcbiAgICAgIGlmIChwcmV2RmlsdGVyQ291bnQgPiAwICYmIGZpbHRlckNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgcmVtb3ZlQ29sb3JGaWx0ZXIoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgKVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIGNvbG9yIGZpbHRlciBvbiB2aWV3ZXIgbG9hZFxyXG4gICAqL1xyXG4gIHVzZU9uVmlld2VyTG9hZENvbXBsZXRlKFxyXG4gICAgKCkgPT4ge1xyXG4gICAgICB0cmlnZ2VyQ29sb3JGaWx0ZXJXYXRjaCgpXHJcbiAgICB9LFxyXG4gICAgeyBpbml0aWFsT25seTogdHJ1ZSB9XHJcbiAgKVxyXG5cclxuICBvbkJlZm9yZVVubW91bnQoKCkgPT4ge1xyXG4gICAgcmVtb3ZlQ29sb3JGaWx0ZXIoKVxyXG4gIH0pXHJcbn1cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAvY29sb3JpbmcudHMifQ== |