190 lines
23 KiB
Plaintext
190 lines
23 KiB
Plaintext
import { FilteringExtension, SelectionExtension } 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 { HighlightExtension } from "/_nuxt/lib/viewer/composables/setup/highlighting.ts";
|
|
import { getTargetObjectIds } from "/_nuxt/lib/object-sidebar/helpers.ts";
|
|
|
|
import { ref, shallowRef, computed, onBeforeUnmount, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
export const useFiltersSetup = () => {
|
|
const isolatedObjectIds = ref([]);
|
|
const hiddenObjectIds = ref([]);
|
|
const selectedObjects = shallowRef([]);
|
|
const propertyFilters = ref([]);
|
|
const filteredObjectsCount = ref(0);
|
|
const activeColorFilterId = ref(null);
|
|
const hasAnyFiltersApplied = computed(() => {
|
|
if (propertyFilters.value.some(
|
|
(filter) => filter.isApplied || filter.selectedValues && filter.selectedValues.length > 0
|
|
))
|
|
return true;
|
|
return false;
|
|
});
|
|
const isolatedObjectsSet = computed(() => {
|
|
return new Set(isolatedObjectIds.value);
|
|
});
|
|
return {
|
|
filters: {
|
|
isolatedObjectIds,
|
|
hiddenObjectIds,
|
|
selectedObjects,
|
|
propertyFilters,
|
|
filteredObjectsCount,
|
|
activeColorFilterId,
|
|
hasAnyFiltersApplied,
|
|
isolatedObjectsSet
|
|
}
|
|
};
|
|
};
|
|
export const useManualFilteringPostSetup = () => {
|
|
const {
|
|
ui: { filters },
|
|
viewer: { instance }
|
|
} = useInjectedViewerState();
|
|
const filteringExtension = () => instance.getExtension(FilteringExtension);
|
|
const preserveSelectionHighlightFilter = (filterFn) => {
|
|
const selectionExtension = instance.getExtension(SelectionExtension);
|
|
const highlightExtension = instance.getExtension(HighlightExtension);
|
|
const selectedObjects = selectionExtension.getSelectedObjects().flatMap((obj) => getTargetObjectIds(obj));
|
|
const highlightedObjects = highlightExtension?.getSelectedObjects().flatMap((obj) => getTargetObjectIds(obj)) || [];
|
|
if (selectedObjects.length) selectionExtension.clearSelection();
|
|
if (highlightedObjects.length && highlightExtension) {
|
|
highlightExtension.clearSelection();
|
|
}
|
|
const result = filterFn();
|
|
if (selectedObjects.length) {
|
|
selectionExtension.selectObjects(selectedObjects);
|
|
}
|
|
if (highlightedObjects.length && highlightExtension) {
|
|
highlightExtension.selectObjects(highlightedObjects);
|
|
}
|
|
return result;
|
|
};
|
|
const { trigger: triggerIsolationWatch } = watchTriggerable(
|
|
filters.isolatedObjectIds,
|
|
(newIds, oldIds) => {
|
|
if (!newIds || !oldIds) {
|
|
return;
|
|
}
|
|
preserveSelectionHighlightFilter(() => {
|
|
const extension = filteringExtension();
|
|
const toIsolate = newIds.filter((id) => !oldIds.includes(id));
|
|
if (toIsolate.length > 0) {
|
|
extension.isolateObjects(toIsolate, "manual-isolation", true, true);
|
|
}
|
|
const toUnIsolate = oldIds.filter((id) => !newIds.includes(id));
|
|
if (toUnIsolate.length > 0) {
|
|
extension.unIsolateObjects(toUnIsolate, "manual-isolation", true, true);
|
|
}
|
|
});
|
|
},
|
|
{ deep: true }
|
|
);
|
|
const { trigger: triggerHidingWatch } = watchTriggerable(
|
|
filters.hiddenObjectIds,
|
|
(newIds, oldIds) => {
|
|
if (!newIds || !oldIds) return;
|
|
preserveSelectionHighlightFilter(() => {
|
|
const extension = filteringExtension();
|
|
const toHide = newIds.filter((id) => !oldIds.includes(id));
|
|
if (toHide.length > 0) {
|
|
extension.hideObjects(toHide, "manual-hiding", false, false);
|
|
}
|
|
const toShow = oldIds.filter((id) => !newIds.includes(id));
|
|
if (toShow.length > 0) {
|
|
extension.showObjects(toShow, "manual-hiding", false);
|
|
}
|
|
});
|
|
},
|
|
{ deep: true }
|
|
);
|
|
useOnViewerLoadComplete(
|
|
() => {
|
|
triggerIsolationWatch();
|
|
triggerHidingWatch();
|
|
},
|
|
{ initialOnly: true }
|
|
);
|
|
onBeforeUnmount(() => {
|
|
const extension = filteringExtension();
|
|
if (filters.isolatedObjectIds.value.length > 0) {
|
|
extension.unIsolateObjects(
|
|
filters.isolatedObjectIds.value,
|
|
"manual-isolation",
|
|
true,
|
|
true
|
|
);
|
|
}
|
|
if (filters.hiddenObjectIds.value.length > 0) {
|
|
extension.showObjects(filters.hiddenObjectIds.value, "manual-hiding", false);
|
|
}
|
|
});
|
|
};
|
|
export const usePropertyFilteringPostSetup = () => {
|
|
const {
|
|
ui: { filters },
|
|
viewer: { instance }
|
|
} = useInjectedViewerState();
|
|
const dataStore = useFilteringDataStore();
|
|
const filteringExtension = () => instance.getExtension(FilteringExtension);
|
|
const applyPropertyFilters = () => {
|
|
const objectIds = dataStore.getFinalObjectIds();
|
|
filters.isolatedObjectIds.value = objectIds;
|
|
filters.filteredObjectsCount.value = objectIds.length;
|
|
};
|
|
const { trigger: triggerDataSlicesWatch } = watchTriggerable(
|
|
dataStore.dataSlices,
|
|
(newSlices, oldSlices) => {
|
|
if (newSlices === oldSlices) return;
|
|
applyPropertyFilters();
|
|
},
|
|
{ deep: true }
|
|
);
|
|
watchTriggerable(
|
|
() => filters.filteredObjectsCount.value,
|
|
() => {
|
|
const extension = filteringExtension();
|
|
const objectIds = dataStore.getFinalObjectIds();
|
|
const hasAppliedFilters = filters.propertyFilters.value.some(
|
|
(filter) => filter.isApplied
|
|
);
|
|
if (objectIds.length > 0) {
|
|
extension.isolateObjects(objectIds, "property-filters", false, true);
|
|
} else if (hasAppliedFilters) {
|
|
extension.isolateObjects(
|
|
["no-match-ghost-all"],
|
|
"property-filters",
|
|
false,
|
|
true
|
|
);
|
|
}
|
|
}
|
|
);
|
|
watchTriggerable(dataStore.currentFilterLogic, (newLogic, oldLogic) => {
|
|
if (newLogic !== oldLogic) {
|
|
dataStore.computeSliceIntersections();
|
|
applyPropertyFilters();
|
|
}
|
|
});
|
|
watch(
|
|
() => filters.propertyFilters.value.length,
|
|
(filterCount, prevFilterCount) => {
|
|
if (prevFilterCount > 0 && filterCount === 0) {
|
|
const extension = filteringExtension();
|
|
extension.resetFilters();
|
|
}
|
|
}
|
|
);
|
|
useOnViewerLoadComplete(
|
|
() => {
|
|
triggerDataSlicesWatch();
|
|
},
|
|
{ initialOnly: true }
|
|
);
|
|
onBeforeUnmount(() => {
|
|
filteringExtension().resetFilters();
|
|
});
|
|
};
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBR0EsU0FBUyxvQkFBb0IsMEJBQTBCO0FBQ3ZELFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsK0JBQStCO0FBQ3hDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsMEJBQTBCOzs7QUFLNUIsYUFBTSxrQkFBa0IsTUFBTTtBQUNuQyxRQUFNLG9CQUFvQixJQUFJLENBQUMsQ0FBYTtBQUM1QyxRQUFNLGtCQUFrQixJQUFJLENBQUMsQ0FBYTtBQUMxQyxRQUFNLGtCQUFrQixXQUFpQyxDQUFDLENBQUM7QUFFM0QsUUFBTSxrQkFBa0IsSUFBa0IsQ0FBQyxDQUFDO0FBQzVDLFFBQU0sdUJBQXVCLElBQUksQ0FBQztBQUVsQyxRQUFNLHNCQUFzQixJQUFtQixJQUFJO0FBRW5ELFFBQU0sdUJBQXVCLFNBQVMsTUFBTTtBQUMxQyxRQUNFLGdCQUFnQixNQUFNO0FBQUEsTUFDcEIsQ0FBQyxXQUNDLE9BQU8sYUFDTixPQUFPLGtCQUFrQixPQUFPLGVBQWUsU0FBUztBQUFBLElBQzdEO0FBRUEsYUFBTztBQUNULFdBQU87QUFBQSxFQUNULENBQUM7QUFFRCxRQUFNLHFCQUFxQixTQUFTLE1BQU07QUFDeEMsV0FBTyxJQUFJLElBQUksa0JBQWtCLEtBQUs7QUFBQSxFQUN4QyxDQUFDO0FBRUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUtPLGFBQU0sOEJBQThCLE1BQU07QUFDL0MsUUFBTTtBQUFBLElBQ0osSUFBSSxFQUFFLFFBQVE7QUFBQSxJQUNkLFFBQVEsRUFBRSxTQUFTO0FBQUEsRUFDckIsSUFBSSx1QkFBdUI7QUFFM0IsUUFBTSxxQkFBcUIsTUFBTSxTQUFTLGFBQWEsa0JBQWtCO0FBTXpFLFFBQU0sbUNBQW1DLENBQUksYUFBeUI7QUFDcEUsVUFBTSxxQkFBcUIsU0FBUyxhQUFhLGtCQUFrQjtBQUNuRSxVQUFNLHFCQUFxQixTQUFTLGFBQWEsa0JBQWtCO0FBR25FLFVBQU0sa0JBQWtCLG1CQUNyQixtQkFBbUIsRUFDbkIsUUFBUSxDQUFDLFFBQVEsbUJBQW1CLEdBQThCLENBQUM7QUFDdEUsVUFBTSxxQkFDSixvQkFDSSxtQkFBbUIsRUFDcEIsUUFBUSxDQUFDLFFBQVEsbUJBQW1CLEdBQThCLENBQUMsS0FBSyxDQUFDO0FBRzlFLFFBQUksZ0JBQWdCLE9BQVEsb0JBQW1CLGVBQWU7QUFDOUQsUUFBSSxtQkFBbUIsVUFBVSxvQkFBb0I7QUFDbkQseUJBQW1CLGVBQWU7QUFBQSxJQUNwQztBQUdBLFVBQU0sU0FBUyxTQUFTO0FBR3hCLFFBQUksZ0JBQWdCLFFBQVE7QUFDMUIseUJBQW1CLGNBQWMsZUFBZTtBQUFBLElBQ2xEO0FBQ0EsUUFBSSxtQkFBbUIsVUFBVSxvQkFBb0I7QUFDbkQseUJBQW1CLGNBQWMsa0JBQWtCO0FBQUEsSUFDckQ7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUtBLFFBQU0sRUFBRSxTQUFTLHNCQUFzQixJQUFJO0FBQUEsSUFDekMsUUFBUTtBQUFBLElBQ1IsQ0FBQyxRQUFRLFdBQVc7QUFDbEIsVUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO0FBQ3RCO0FBQUEsTUFDRjtBQUVBLHVDQUFpQyxNQUFNO0FBQ3JDLGNBQU0sWUFBWSxtQkFBbUI7QUFFckMsY0FBTSxZQUFZLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLFNBQVMsRUFBRSxDQUFDO0FBQzVELFlBQUksVUFBVSxTQUFTLEdBQUc7QUFDeEIsb0JBQVUsZUFBZSxXQUFXLG9CQUFvQixNQUFNLElBQUk7QUFBQSxRQUNwRTtBQUVBLGNBQU0sY0FBYyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQztBQUM5RCxZQUFJLFlBQVksU0FBUyxHQUFHO0FBQzFCLG9CQUFVLGlCQUFpQixhQUFhLG9CQUFvQixNQUFNLElBQUk7QUFBQSxRQUN4RTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDZjtBQUtBLFFBQU0sRUFBRSxTQUFTLG1CQUFtQixJQUFJO0FBQUEsSUFDdEMsUUFBUTtBQUFBLElBQ1IsQ0FBQyxRQUFRLFdBQVc7QUFDbEIsVUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFRO0FBRXhCLHVDQUFpQyxNQUFNO0FBQ3JDLGNBQU0sWUFBWSxtQkFBbUI7QUFFckMsY0FBTSxTQUFTLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLFNBQVMsRUFBRSxDQUFDO0FBQ3pELFlBQUksT0FBTyxTQUFTLEdBQUc7QUFDckIsb0JBQVUsWUFBWSxRQUFRLGlCQUFpQixPQUFPLEtBQUs7QUFBQSxRQUM3RDtBQUVBLGNBQU0sU0FBUyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQztBQUN6RCxZQUFJLE9BQU8sU0FBUyxHQUFHO0FBQ3JCLG9CQUFVLFlBQVksUUFBUSxpQkFBaUIsS0FBSztBQUFBLFFBQ3REO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUNmO0FBS0E7QUFBQSxJQUNFLE1BQU07QUFDSiw0QkFBc0I7QUFDdEIseUJBQW1CO0FBQUEsSUFDckI7QUFBQSxJQUNBLEVBQUUsYUFBYSxLQUFLO0FBQUEsRUFDdEI7QUFFQSxrQkFBZ0IsTUFBTTtBQUNwQixVQUFNLFlBQVksbUJBQW1CO0FBQ3JDLFFBQUksUUFBUSxrQkFBa0IsTUFBTSxTQUFTLEdBQUc7QUFDOUMsZ0JBQVU7QUFBQSxRQUNSLFFBQVEsa0JBQWtCO0FBQUEsUUFDMUI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxRQUFRLGdCQUFnQixNQUFNLFNBQVMsR0FBRztBQUM1QyxnQkFBVSxZQUFZLFFBQVEsZ0JBQWdCLE9BQU8saUJBQWlCLEtBQUs7QUFBQSxJQUM3RTtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBS08sYUFBTSxnQ0FBZ0MsTUFBTTtBQUNqRCxRQUFNO0FBQUEsSUFDSixJQUFJLEVBQUUsUUFBUTtBQUFBLElBQ2QsUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUNyQixJQUFJLHVCQUF1QjtBQUUzQixRQUFNLFlBQVksc0JBQXNCO0FBQ3hDLFFBQU0scUJBQXFCLE1BQU0sU0FBUyxhQUFhLGtCQUFrQjtBQUt6RSxRQUFNLHVCQUF1QixNQUFNO0FBQ2pDLFVBQU0sWUFBWSxVQUFVLGtCQUFrQjtBQUU5QyxZQUFRLGtCQUFrQixRQUFRO0FBQ2xDLFlBQVEscUJBQXFCLFFBQVEsVUFBVTtBQUFBLEVBQ2pEO0FBS0EsUUFBTSxFQUFFLFNBQVMsdUJBQXVCLElBQUk7QUFBQSxJQUMxQyxVQUFVO0FBQUEsSUFDVixDQUFDLFdBQVcsY0FBYztBQUN4QixVQUFJLGNBQWMsVUFBVztBQUU3QiwyQkFBcUI7QUFBQSxJQUN2QjtBQUFBLElBQ0EsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUNmO0FBS0E7QUFBQSxJQUNFLE1BQU0sUUFBUSxxQkFBcUI7QUFBQSxJQUNuQyxNQUFNO0FBQ0osWUFBTSxZQUFZLG1CQUFtQjtBQUNyQyxZQUFNLFlBQVksVUFBVSxrQkFBa0I7QUFFOUMsWUFBTSxvQkFBb0IsUUFBUSxnQkFBZ0IsTUFBTTtBQUFBLFFBQ3RELENBQUMsV0FBVyxPQUFPO0FBQUEsTUFDckI7QUFFQSxVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGtCQUFVLGVBQWUsV0FBVyxvQkFBb0IsT0FBTyxJQUFJO0FBQUEsTUFDckUsV0FBVyxtQkFBbUI7QUFDNUIsa0JBQVU7QUFBQSxVQUNSLENBQUMsb0JBQW9CO0FBQUEsVUFDckI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFLQSxtQkFBaUIsVUFBVSxvQkFBb0IsQ0FBQyxVQUFVLGFBQWE7QUFDckUsUUFBSSxhQUFhLFVBQVU7QUFDekIsZ0JBQVUsMEJBQTBCO0FBQ3BDLDJCQUFxQjtBQUFBLElBQ3ZCO0FBQUEsRUFDRixDQUFDO0FBS0Q7QUFBQSxJQUNFLE1BQU0sUUFBUSxnQkFBZ0IsTUFBTTtBQUFBLElBQ3BDLENBQUMsYUFBYSxvQkFBb0I7QUFDaEMsVUFBSSxrQkFBa0IsS0FBSyxnQkFBZ0IsR0FBRztBQUM1QyxjQUFNLFlBQVksbUJBQW1CO0FBQ3JDLGtCQUFVLGFBQWE7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBS0E7QUFBQSxJQUNFLE1BQU07QUFDSiw2QkFBdUI7QUFBQSxJQUN6QjtBQUFBLElBQ0EsRUFBRSxhQUFhLEtBQUs7QUFBQSxFQUN0QjtBQUVBLGtCQUFnQixNQUFNO0FBQ3BCLHVCQUFtQixFQUFFLGFBQWE7QUFBQSxFQUNwQyxDQUFDO0FBQ0giLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImZpbHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWx0ZXJEYXRhIH0gZnJvbSAnfi9saWIvdmlld2VyL2hlbHBlcnMvZmlsdGVycy90eXBlcydcclxuaW1wb3J0IHR5cGUgeyBTcGVja2xlT2JqZWN0IH0gZnJvbSAnQHNwZWNrbGUvdmlld2VyJ1xyXG5pbXBvcnQgdHlwZSB7IFJhdyB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgRmlsdGVyaW5nRXh0ZW5zaW9uLCBTZWxlY3Rpb25FeHRlbnNpb24gfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHdhdGNoVHJpZ2dlcmFibGUgfSBmcm9tICdAdnVldXNlL2NvcmUnXHJcbmltcG9ydCB7IHVzZUluamVjdGVkVmlld2VyU3RhdGUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXG5pbXBvcnQgeyB1c2VPblZpZXdlckxvYWRDb21wbGV0ZSB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy92aWV3ZXInXG5pbXBvcnQgeyB1c2VGaWx0ZXJpbmdEYXRhU3RvcmUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvZmlsdGVyaW5nL2RhdGFTdG9yZSdcbmltcG9ydCB7IEhpZ2hsaWdodEV4dGVuc2lvbiB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cC9oaWdobGlnaHRpbmcnXG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RJZHMgfSBmcm9tICd+L2xpYi9vYmplY3Qtc2lkZWJhci9oZWxwZXJzJ1xuXHJcbi8qKlxyXG4gKiBTZXR1cCBjb21wb3NhYmxlIGZvciBmaWx0ZXItcmVsYXRlZCBzdGF0ZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHVzZUZpbHRlcnNTZXR1cCA9ICgpID0+IHtcclxuICBjb25zdCBpc29sYXRlZE9iamVjdElkcyA9IHJlZihbXSBhcyBzdHJpbmdbXSlcclxuICBjb25zdCBoaWRkZW5PYmplY3RJZHMgPSByZWYoW10gYXMgc3RyaW5nW10pXHJcbiAgY29uc3Qgc2VsZWN0ZWRPYmplY3RzID0gc2hhbGxvd1JlZjxSYXc8U3BlY2tsZU9iamVjdD5bXT4oW10pXHJcblxyXG4gIGNvbnN0IHByb3BlcnR5RmlsdGVycyA9IHJlZjxGaWx0ZXJEYXRhW10+KFtdKVxyXG4gIGNvbnN0IGZpbHRlcmVkT2JqZWN0c0NvdW50ID0gcmVmKDApXHJcblxyXG4gIGNvbnN0IGFjdGl2ZUNvbG9yRmlsdGVySWQgPSByZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcclxuXHJcbiAgY29uc3QgaGFzQW55RmlsdGVyc0FwcGxpZWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHByb3BlcnR5RmlsdGVycy52YWx1ZS5zb21lKFxyXG4gICAgICAgIChmaWx0ZXIpID0+XHJcbiAgICAgICAgICBmaWx0ZXIuaXNBcHBsaWVkIHx8XHJcbiAgICAgICAgICAoZmlsdGVyLnNlbGVjdGVkVmFsdWVzICYmIGZpbHRlci5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9KVxyXG5cclxuICBjb25zdCBpc29sYXRlZE9iamVjdHNTZXQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFNldChpc29sYXRlZE9iamVjdElkcy52YWx1ZSlcclxuICB9KVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZmlsdGVyczoge1xyXG4gICAgICBpc29sYXRlZE9iamVjdElkcyxcclxuICAgICAgaGlkZGVuT2JqZWN0SWRzLFxyXG4gICAgICBzZWxlY3RlZE9iamVjdHMsXHJcbiAgICAgIHByb3BlcnR5RmlsdGVycyxcclxuICAgICAgZmlsdGVyZWRPYmplY3RzQ291bnQsXHJcbiAgICAgIGFjdGl2ZUNvbG9yRmlsdGVySWQsXHJcbiAgICAgIGhhc0FueUZpbHRlcnNBcHBsaWVkLFxyXG4gICAgICBpc29sYXRlZE9iamVjdHNTZXRcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbnRlZ3JhdGlvbiBjb21wb3NhYmxlIGZvciBtYW51YWwgb2JqZWN0IGlzb2xhdGlvbiBhbmQgaGlkaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHVzZU1hbnVhbEZpbHRlcmluZ1Bvc3RTZXR1cCA9ICgpID0+IHtcclxuICBjb25zdCB7XHJcbiAgICB1aTogeyBmaWx0ZXJzIH0sXHJcbiAgICB2aWV3ZXI6IHsgaW5zdGFuY2UgfVxyXG4gIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuXHJcbiAgY29uc3QgZmlsdGVyaW5nRXh0ZW5zaW9uID0gKCkgPT4gaW5zdGFuY2UuZ2V0RXh0ZW5zaW9uKEZpbHRlcmluZ0V4dGVuc2lvbilcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlc2VydmUgc2VsZWN0aW9uIGFuZCBoaWdobGlnaHRpbmcgc3RhdGUgZHVyaW5nIGZpbHRlcmluZyBvcGVyYXRpb25zXHJcbiAgICogVGhpcyByZXBsaWNhdGVzIExlZ2FjeVZpZXdlcidzIHByZXNlcnZlU2VsZWN0aW9uSGlnaGxpZ2h0RmlsdGVyIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgY29uc3QgcHJlc2VydmVTZWxlY3Rpb25IaWdobGlnaHRGaWx0ZXIgPSA8VD4oZmlsdGVyRm46ICgpID0+IFQpOiBUID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbkV4dGVuc2lvbiA9IGluc3RhbmNlLmdldEV4dGVuc2lvbihTZWxlY3Rpb25FeHRlbnNpb24pXHJcbiAgICBjb25zdCBoaWdobGlnaHRFeHRlbnNpb24gPSBpbnN0YW5jZS5nZXRFeHRlbnNpb24oSGlnaGxpZ2h0RXh0ZW5zaW9uKVxyXG5cclxuICAgIC8vIDEuIFNBVkUgY3VycmVudCBzdGF0ZSBmcm9tIHZpZXdlciBleHRlbnNpb25zXG4gICAgY29uc3Qgc2VsZWN0ZWRPYmplY3RzID0gc2VsZWN0aW9uRXh0ZW5zaW9uXG4gICAgICAuZ2V0U2VsZWN0ZWRPYmplY3RzKClcbiAgICAgIC5mbGF0TWFwKChvYmopID0+IGdldFRhcmdldE9iamVjdElkcyhvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKVxuICAgIGNvbnN0IGhpZ2hsaWdodGVkT2JqZWN0cyA9XG4gICAgICBoaWdobGlnaHRFeHRlbnNpb25cbiAgICAgICAgPy5nZXRTZWxlY3RlZE9iamVjdHMoKVxuICAgICAgICAuZmxhdE1hcCgob2JqKSA9PiBnZXRUYXJnZXRPYmplY3RJZHMob2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkgfHwgW11cblxyXG4gICAgLy8gMi4gQ0xFQVIgdmlld2VyIGV4dGVuc2lvbnMgZGlyZWN0bHlcclxuICAgIGlmIChzZWxlY3RlZE9iamVjdHMubGVuZ3RoKSBzZWxlY3Rpb25FeHRlbnNpb24uY2xlYXJTZWxlY3Rpb24oKVxyXG4gICAgaWYgKGhpZ2hsaWdodGVkT2JqZWN0cy5sZW5ndGggJiYgaGlnaGxpZ2h0RXh0ZW5zaW9uKSB7XHJcbiAgICAgIGhpZ2hsaWdodEV4dGVuc2lvbi5jbGVhclNlbGVjdGlvbigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gMy4gRVhFQ1VURSB0aGUgZmlsdGVyaW5nIG9wZXJhdGlvblxyXG4gICAgY29uc3QgcmVzdWx0ID0gZmlsdGVyRm4oKVxyXG5cclxuICAgIC8vIDQuIFJFU1RPUkUgdG8gdmlld2VyIGV4dGVuc2lvbnMgZGlyZWN0bHlcclxuICAgIGlmIChzZWxlY3RlZE9iamVjdHMubGVuZ3RoKSB7XHJcbiAgICAgIHNlbGVjdGlvbkV4dGVuc2lvbi5zZWxlY3RPYmplY3RzKHNlbGVjdGVkT2JqZWN0cylcclxuICAgIH1cclxuICAgIGlmIChoaWdobGlnaHRlZE9iamVjdHMubGVuZ3RoICYmIGhpZ2hsaWdodEV4dGVuc2lvbikge1xyXG4gICAgICBoaWdobGlnaHRFeHRlbnNpb24uc2VsZWN0T2JqZWN0cyhoaWdobGlnaHRlZE9iamVjdHMpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2F0Y2ggZm9yIGNoYW5nZXMgdG8gbWFudWFsbHkgaXNvbGF0ZWQgb2JqZWN0IElEc1xyXG4gICAqL1xyXG4gIGNvbnN0IHsgdHJpZ2dlcjogdHJpZ2dlcklzb2xhdGlvbldhdGNoIH0gPSB3YXRjaFRyaWdnZXJhYmxlKFxyXG4gICAgZmlsdGVycy5pc29sYXRlZE9iamVjdElkcyxcclxuICAgIChuZXdJZHMsIG9sZElkcykgPT4ge1xyXG4gICAgICBpZiAoIW5ld0lkcyB8fCAhb2xkSWRzKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHByZXNlcnZlU2VsZWN0aW9uSGlnaGxpZ2h0RmlsdGVyKCgpID0+IHtcclxuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWx0ZXJpbmdFeHRlbnNpb24oKVxyXG5cclxuICAgICAgICBjb25zdCB0b0lzb2xhdGUgPSBuZXdJZHMuZmlsdGVyKChpZCkgPT4gIW9sZElkcy5pbmNsdWRlcyhpZCkpXHJcbiAgICAgICAgaWYgKHRvSXNvbGF0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBleHRlbnNpb24uaXNvbGF0ZU9iamVjdHModG9Jc29sYXRlLCAnbWFudWFsLWlzb2xhdGlvbicsIHRydWUsIHRydWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b1VuSXNvbGF0ZSA9IG9sZElkcy5maWx0ZXIoKGlkKSA9PiAhbmV3SWRzLmluY2x1ZGVzKGlkKSlcclxuICAgICAgICBpZiAodG9Vbklzb2xhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZXh0ZW5zaW9uLnVuSXNvbGF0ZU9iamVjdHModG9Vbklzb2xhdGUsICdtYW51YWwtaXNvbGF0aW9uJywgdHJ1ZSwgdHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgeyBkZWVwOiB0cnVlIH1cclxuICApXHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIHRvIG1hbnVhbGx5IGhpZGRlbiBvYmplY3QgSURzXHJcbiAgICovXHJcbiAgY29uc3QgeyB0cmlnZ2VyOiB0cmlnZ2VySGlkaW5nV2F0Y2ggfSA9IHdhdGNoVHJpZ2dlcmFibGUoXHJcbiAgICBmaWx0ZXJzLmhpZGRlbk9iamVjdElkcyxcclxuICAgIChuZXdJZHMsIG9sZElkcykgPT4ge1xyXG4gICAgICBpZiAoIW5ld0lkcyB8fCAhb2xkSWRzKSByZXR1cm5cclxuXHJcbiAgICAgIHByZXNlcnZlU2VsZWN0aW9uSGlnaGxpZ2h0RmlsdGVyKCgpID0+IHtcclxuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWx0ZXJpbmdFeHRlbnNpb24oKVxyXG5cclxuICAgICAgICBjb25zdCB0b0hpZGUgPSBuZXdJZHMuZmlsdGVyKChpZCkgPT4gIW9sZElkcy5pbmNsdWRlcyhpZCkpXHJcbiAgICAgICAgaWYgKHRvSGlkZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBleHRlbnNpb24uaGlkZU9iamVjdHModG9IaWRlLCAnbWFudWFsLWhpZGluZycsIGZhbHNlLCBmYWxzZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvU2hvdyA9IG9sZElkcy5maWx0ZXIoKGlkKSA9PiAhbmV3SWRzLmluY2x1ZGVzKGlkKSlcclxuICAgICAgICBpZiAodG9TaG93Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGV4dGVuc2lvbi5zaG93T2JqZWN0cyh0b1Nob3csICdtYW51YWwtaGlkaW5nJywgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHsgZGVlcDogdHJ1ZSB9XHJcbiAgKVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIG1hbnVhbCBmaWx0ZXJpbmcgb24gdmlld2VyIGxvYWRcclxuICAgKi9cclxuICB1c2VPblZpZXdlckxvYWRDb21wbGV0ZShcclxuICAgICgpID0+IHtcclxuICAgICAgdHJpZ2dlcklzb2xhdGlvbldhdGNoKClcclxuICAgICAgdHJpZ2dlckhpZGluZ1dhdGNoKClcclxuICAgIH0sXHJcbiAgICB7IGluaXRpYWxPbmx5OiB0cnVlIH1cclxuICApXHJcblxyXG4gIG9uQmVmb3JlVW5tb3VudCgoKSA9PiB7XHJcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWx0ZXJpbmdFeHRlbnNpb24oKVxyXG4gICAgaWYgKGZpbHRlcnMuaXNvbGF0ZWRPYmplY3RJZHMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBleHRlbnNpb24udW5Jc29sYXRlT2JqZWN0cyhcclxuICAgICAgICBmaWx0ZXJzLmlzb2xhdGVkT2JqZWN0SWRzLnZhbHVlLFxyXG4gICAgICAgICdtYW51YWwtaXNvbGF0aW9uJyxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKGZpbHRlcnMuaGlkZGVuT2JqZWN0SWRzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgZXh0ZW5zaW9uLnNob3dPYmplY3RzKGZpbHRlcnMuaGlkZGVuT2JqZWN0SWRzLnZhbHVlLCAnbWFudWFsLWhpZGluZycsIGZhbHNlKVxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbnRlZ3JhdGlvbiBjb21wb3NhYmxlIGZvciBwcm9wZXJ0eS1iYXNlZCBmaWx0ZXJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlUHJvcGVydHlGaWx0ZXJpbmdQb3N0U2V0dXAgPSAoKSA9PiB7XHJcbiAgY29uc3Qge1xyXG4gICAgdWk6IHsgZmlsdGVycyB9LFxyXG4gICAgdmlld2VyOiB7IGluc3RhbmNlIH1cclxuICB9ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcblxyXG4gIGNvbnN0IGRhdGFTdG9yZSA9IHVzZUZpbHRlcmluZ0RhdGFTdG9yZSgpXHJcbiAgY29uc3QgZmlsdGVyaW5nRXh0ZW5zaW9uID0gKCkgPT4gaW5zdGFuY2UuZ2V0RXh0ZW5zaW9uKEZpbHRlcmluZ0V4dGVuc2lvbilcclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgcHJvcGVydHkgZmlsdGVycyB0byB0aGUgdmlld2VyIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcclxuICAgKi9cclxuICBjb25zdCBhcHBseVByb3BlcnR5RmlsdGVycyA9ICgpID0+IHtcclxuICAgIGNvbnN0IG9iamVjdElkcyA9IGRhdGFTdG9yZS5nZXRGaW5hbE9iamVjdElkcygpXHJcblxyXG4gICAgZmlsdGVycy5pc29sYXRlZE9iamVjdElkcy52YWx1ZSA9IG9iamVjdElkc1xyXG4gICAgZmlsdGVycy5maWx0ZXJlZE9iamVjdHNDb3VudC52YWx1ZSA9IG9iamVjdElkcy5sZW5ndGhcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIHRvIHByb3BlcnR5IGZpbHRlcnMgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIHZpZXdlclxyXG4gICAqL1xyXG4gIGNvbnN0IHsgdHJpZ2dlcjogdHJpZ2dlckRhdGFTbGljZXNXYXRjaCB9ID0gd2F0Y2hUcmlnZ2VyYWJsZShcclxuICAgIGRhdGFTdG9yZS5kYXRhU2xpY2VzLFxyXG4gICAgKG5ld1NsaWNlcywgb2xkU2xpY2VzKSA9PiB7XHJcbiAgICAgIGlmIChuZXdTbGljZXMgPT09IG9sZFNsaWNlcykgcmV0dXJuXHJcblxyXG4gICAgICBhcHBseVByb3BlcnR5RmlsdGVycygpXHJcbiAgICB9LFxyXG4gICAgeyBkZWVwOiB0cnVlIH1cclxuICApXHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBwcm9wZXJ0eSBmaWx0ZXIgcmVzdWx0cyBhbmQgYXBwbHkgdG8gdmlld2VyIGV4dGVuc2lvblxyXG4gICAqL1xyXG4gIHdhdGNoVHJpZ2dlcmFibGUoXHJcbiAgICAoKSA9PiBmaWx0ZXJzLmZpbHRlcmVkT2JqZWN0c0NvdW50LnZhbHVlLFxyXG4gICAgKCkgPT4ge1xyXG4gICAgICBjb25zdCBleHRlbnNpb24gPSBmaWx0ZXJpbmdFeHRlbnNpb24oKVxyXG4gICAgICBjb25zdCBvYmplY3RJZHMgPSBkYXRhU3RvcmUuZ2V0RmluYWxPYmplY3RJZHMoKVxyXG5cclxuICAgICAgY29uc3QgaGFzQXBwbGllZEZpbHRlcnMgPSBmaWx0ZXJzLnByb3BlcnR5RmlsdGVycy52YWx1ZS5zb21lKFxyXG4gICAgICAgIChmaWx0ZXIpID0+IGZpbHRlci5pc0FwcGxpZWRcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKG9iamVjdElkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZXh0ZW5zaW9uLmlzb2xhdGVPYmplY3RzKG9iamVjdElkcywgJ3Byb3BlcnR5LWZpbHRlcnMnLCBmYWxzZSwgdHJ1ZSlcclxuICAgICAgfSBlbHNlIGlmIChoYXNBcHBsaWVkRmlsdGVycykge1xyXG4gICAgICAgIGV4dGVuc2lvbi5pc29sYXRlT2JqZWN0cyhcclxuICAgICAgICAgIFsnbm8tbWF0Y2gtZ2hvc3QtYWxsJ10sXHJcbiAgICAgICAgICAncHJvcGVydHktZmlsdGVycycsXHJcbiAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICApXHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIHRvIGZpbHRlciBsb2dpYyAoQU5EL09SKVxyXG4gICAqL1xyXG4gIHdhdGNoVHJpZ2dlcmFibGUoZGF0YVN0b3JlLmN1cnJlbnRGaWx0ZXJMb2dpYywgKG5ld0xvZ2ljLCBvbGRMb2dpYykgPT4ge1xyXG4gICAgaWYgKG5ld0xvZ2ljICE9PSBvbGRMb2dpYykge1xyXG4gICAgICBkYXRhU3RvcmUuY29tcHV0ZVNsaWNlSW50ZXJzZWN0aW9ucygpXHJcbiAgICAgIGFwcGx5UHJvcGVydHlGaWx0ZXJzKClcclxuICAgIH1cclxuICB9KVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgZmlsdGVyIHJlc2V0cyAtIHdoZW4gYWxsIHByb3BlcnR5IGZpbHRlcnMgYXJlIHJlbW92ZWRcclxuICAgKi9cclxuICB3YXRjaChcclxuICAgICgpID0+IGZpbHRlcnMucHJvcGVydHlGaWx0ZXJzLnZhbHVlLmxlbmd0aCxcclxuICAgIChmaWx0ZXJDb3VudCwgcHJldkZpbHRlckNvdW50KSA9PiB7XHJcbiAgICAgIGlmIChwcmV2RmlsdGVyQ291bnQgPiAwICYmIGZpbHRlckNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsdGVyaW5nRXh0ZW5zaW9uKClcclxuICAgICAgICBleHRlbnNpb24ucmVzZXRGaWx0ZXJzKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIClcclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSBwcm9wZXJ0eSBmaWx0ZXJzIG9uIHZpZXdlciBsb2FkXHJcbiAgICovXHJcbiAgdXNlT25WaWV3ZXJMb2FkQ29tcGxldGUoXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIHRyaWdnZXJEYXRhU2xpY2VzV2F0Y2goKVxyXG4gICAgfSxcclxuICAgIHsgaW5pdGlhbE9ubHk6IHRydWUgfVxyXG4gIClcclxuXHJcbiAgb25CZWZvcmVVbm1vdW50KCgpID0+IHtcclxuICAgIGZpbHRlcmluZ0V4dGVuc2lvbigpLnJlc2V0RmlsdGVycygpXHJcbiAgfSlcclxufVxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cC9maWx0ZXJzLnRzIn0= |