{"version":3,"file":"app-30f03248.19209f8e2b65d4b2.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/project/work-area/model-revision/model-revision-parent.scss","webpack://client-app/./src/app/project/work-area/model-revision/model-revision-parent.html","webpack://client-app/./src/app/project/work-area/model-revision/model-revision-parent.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\", \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n\";","import 'jquery-ui/ui/widgets/draggable';\r\nimport { ApiClient, RequestMethod } from \"app/services/api-client\";\r\nimport { AppContextService } from \"app/services/app-context-service\";\r\nimport { autoinject,bindable } from 'aurelia-framework';\r\nimport { Model } from \"./model/model\";\r\nimport { Revision } from \"./revision/revision\";\r\nimport {EventAggregator, Subscription} from 'aurelia-event-aggregator';\r\nimport { UserService } from \"app/services/user-service\";\r\nimport { BimViewerFileAndRevisionId, BimViewerFileDtoSplitView, BimViewerRevisionDtoSplitView, ModelById, RevisionById } from \"app/models/viewer-dtos/Dtos/bimviewer-dtos\";\r\n\r\n@autoinject\r\nexport class ModelRevisionParent {\r\n\t// JG: Jeg hader dette system - den SKAL kaldes 'project-id' i html view templaten, for at det binder til 'projectId'!\r\n @bindable projectId: string = \"\"; // JG: Det her er idiotisk, vi har flere mekanismer der sender projectIDs ind i MRP!\r\n\r\n\tprivate parentDoneLoading: boolean = false;\r\n public modelRevisionsMap: Map = new Map();\r\n private pluginModel: BimViewerFileDtoSplitView | undefined;\r\n public revisionModelView: Revision | undefined;\r\n public modelModelView: Model | undefined;\r\n private keybuttonHandling: (this: Window, ev: KeyboardEvent) => any;\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private events: EventAggregator, public apiClient: ApiClient, public appContext:AppContextService, public userService: UserService) {\r\n\t\tconsole.log('MRP someone constructing MRP');\r\n\r\n this.keybuttonHandling = (event) => {\r\n if (event.key == \"Escape\") {\r\n this.closeModelRevisionContainer();\r\n } \r\n };\r\n }\r\n\r\n\tactivate(params:any) {\r\n\t\tconsole.log('MRP activate is called.'); \r\n\t}\r\n\tasync attached() { // called second.\r\n\t\tconsole.log('MRP attached is called, this.projectId is now:', this.projectId); \r\n\t}\r\n\t\r\n\r\n\r\n async bind(params: any): Promise {\r\n console.log(\"MRP bind 42\");\r\n this.parentDoneLoading = false;\r\n let self = this;\r\n this.subscriptions = [\r\n this.events.subscribe('ModelRevision:ModelNotReady', (parameter: BimViewerFileAndRevisionId) => {self.handleModelNotReady(parameter.revisionId, parameter.model)}),\r\n this.events.subscribe('ModelRevision:ModelReady', (parameter: BimViewerFileAndRevisionId) => {self.handleModelReady(parameter.revisionId, parameter.model)}),\r\n this.events.subscribe('ModelRevision:UndoLoadModel', (model: BimViewerFileDtoSplitView) => {self.undoLoadModel(model)}),\r\n this.events.subscribe('ModelRevision:LoadModelById', (model: ModelById) => { if(model.is2d) {self.turnOn2dModelById(model.id)} else {self.turnOn3dModelById(model.id)}}),\r\n this.events.subscribe('ModelRevision:LoadRevisionById', async (revision: RevisionById) => {if(revision.is2d) {await self.turnOn2dRevisionById(revision)} else {await self.turnOn3dRevisionById(revision)}}),\r\n this.events.subscribe('ModelRevision:CloseModelRevision', () => {self.closeModelRevisionContainer()}),\r\n this.events.subscribe('ModelRevision:ModelsPressed', () => {self.showModels()}),\r\n this.events.subscribe(\"ModelRevision:HandleStateChange\", async (): Promise => { this.handleCorrectViewerSplitSize() }), //Checking if split-viewer should be resized\r\n ];\r\n\r\n try {\r\n let prjId: string = this.appContext.projectId;\r\n\r\n // this used to NOT have await, which risked that model.ts would access its 'result' before it was ready..\r\n await this.initModels(prjId);//in-bind.\r\n //this.initModels(prjId);//in-bind.\r\n\r\n this.parentDoneLoading = true;\r\n } catch (reason) {\r\n console.error(reason);\r\n }\r\n\r\n console.log('MRP.bind, this.projectId is already:', this.projectId);\r\n console.log('MRP.bind params is:', params);\r\n //console.log('MRP.bind sets projectId to ', params.projectIdForMRP);\r\n //this.projectId = params.projectIdForMRP; //projectId; // Er dette ikke dum raekkefoelge, burde vi ikke soerge for at den er i appContext?\r\n \r\n window.addEventListener('keyup', this.keybuttonHandling, false);\r\n }\r\n\r\n projectIdChanged(): void { // who fires this?\r\n\t\tconsole.trace('did anyone call MRP.projectIdChanged?');\r\n this.reload();\r\n }\r\n\r\n async turnOn3dRevisionById(currentRevision: RevisionById): Promise {\r\n\t\tconsole.log(\"MRP turnOn3dRevisionById 71\");\r\n let model: BimViewerFileDtoSplitView = this.getModels().filter((model: BimViewerFileDtoSplitView) => {\r\n return model.id == currentRevision.modelId;\r\n })[0];\r\n (await this.COSTLY_getAllRevisions('TON-3D-REV-BY-ID')).forEach((revision: BimViewerRevisionDtoSplitView) => {\r\n if (revision.id == currentRevision.revisionId) {\r\n this.revisionModelView?.open3DViewerRevisionOnStartup(revision, model);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n async turnOn2dRevisionById(currentRevision: RevisionById): Promise {\r\n\t\tconsole.log(\"MRP turnOn2dRevisionById 83\");\r\n let model: BimViewerFileDtoSplitView = this.getModels().filter((model: BimViewerFileDtoSplitView) => {\r\n return model.id == currentRevision.modelId;\r\n })[0];\r\n (await this.COSTLY_getAllRevisions('TON-2D-REV-BY-ID')).forEach((revision: BimViewerRevisionDtoSplitView) => {\r\n if (revision.id == currentRevision.revisionId) {\r\n this.revisionModelView?.open2DViewerRevisionOnStartup(revision, model);\r\n return;\r\n }\r\n });\r\n }\r\n \r\n async turnOn2dModelById(id: string): Promise {\r\n\t\tconsole.log(\"MRP turnOn2dModelById 95\");\r\n this.getModels().forEach((model: BimViewerFileDtoSplitView) => {\r\n if (model.id == id) {\r\n this.modelModelView?.open2DViewerModel(model, false, undefined);\r\n }\r\n });\r\n }\r\n\r\n turnOn3dModelById(id: string): void { // in model-revision-parent.ts\r\n\t\tconsole.log(\"MRP turnOn3dModelById 103\");\r\n this.getModels().forEach((model: BimViewerFileDtoSplitView) => {\r\n if (model.id == id) {\r\n this.modelModelView?.open3DViewerModel(model, false, undefined);\r\n }\r\n });\r\n }\r\n\r\n undoLoadModel(model: BimViewerFileDtoSplitView): void {\r\n\t\tconsole.log(\"MRP undoLoadModel 111\");\r\n let revisionIds: string[] = []; \r\n if (model != undefined) {\r\n let revisions: BimViewerRevisionDtoSplitView[] | undefined = this.modelRevisionsMap.get(model);//in-undoLoadModel\r\n if (revisions) {\r\n for (let revision of revisions) {\r\n revisionIds.push(revision.id);\r\n revision.objectsIdNotDoneLoading = undefined;\r\n revision.pressed2d = false;\r\n revision.pressed3d = false;\r\n }\r\n model.objectsIdNotDoneLoading = undefined;\r\n model.pressed2d = false;\r\n model.pressed3d = false;\r\n }\r\n }\r\n this.events.publish('3dViewer:removeRevisions', revisionIds);\r\n }\r\n\r\n unbind(): void {\r\n\t\tconsole.log(\"MRP unbind 130\");\r\n window.removeEventListener('keyup', this.keybuttonHandling, false);\r\n this.subscriptions.forEach((subscription: Subscription) => subscription.dispose());\r\n }\r\n\r\n async reload(): Promise {\r\n\t\tconsole.log(\"MRP reload 135\");\r\n\t\tlet prjId: string = this.appContext.projectId;\r\n await this.initModels(prjId);//in-reload.\r\n if (this.modelModelView != undefined) {\r\n this.modelModelView.handleReload();\r\n } \r\n if (this.revisionModelView != undefined) {\r\n this.revisionModelView.hideRevisions();\r\n }\r\n }\r\n\r\n async initModels(prjId:string): Promise { \r\n\t\tconsole.log(\"MRP initModels 145\");\r\n this.modelRevisionsMap = new Map();//in-initModels\r\n\t\tconsole.log('MRP initModels is passed prjId as:', prjId); \r\n\t\tif (!prjId) {\r\n\t\t\tconst err = 'no this.appContext.projectId in model-revision-parent.initModels()';\r\n\t\t\tconsole.trace(err);\r\n\t\t\t//throw err;\r\n\t\t}\r\n let api: RequestMethod = this.apiClient.project(prjId);\r\n\r\n // do we risk a cache-effect by using get instead of post?\r\n let modelList: BimViewerFileDtoSplitView[] = await api.get('BimViewer/GetFilesForProject').jsonResult(); \r\n\t\tconsole.log('model-revision-parent,initModels, modelList:', modelList);\r\n\r\n modelList.forEach((model: BimViewerFileDtoSplitView) => {\r\n this.modelRevisionsMap.set(model, undefined);//in-initModels\r\n\t\t\tconsole.log('MRP, modelRevisionsMap.set in initModels..');\r\n if (model.pluginUpload == true) {\r\n this.pluginModel = model;\r\n }\r\n });\r\n }\r\n\r\n getModels(): BimViewerFileDtoSplitView[] {\r\n\t\tlet modelArray = Array.from(this.modelRevisionsMap.keys());//in-getModels\r\n\t\tconsole.log(\"MRP getModels L168, #:\", modelArray.length);\r\n return modelArray;\r\n }\r\n\r\n closeModelRevisionContainer(): void {\r\n\t\tconsole.log(\"MRP closeModelRevisionContainer 172\");\r\n let container: HTMLElement | null = document.getElementById('model-revision-container');\r\n if (container) { container.style.visibility = \"hidden\"; }\r\n this.hideRevisions();//in closeModelRevisionContainer.\r\n this.closeModel_MRP('CMRC');\r\n this.modelModelView?.resetInput();\r\n this.events.publish('ViewerMenu:ChangeModelToVisible', false);\r\n }\r\n\r\n hideRevisions(): void {//UB: closeModelRevisionContainer\r\n\t\tconsole.log(\"MRP hideRevisions 183\");\r\n this.revisionModelView?.hideRevisions();\r\n }\r\n\r\n closeModel_MRP(who:string): void {\r\n\t\tconsole.log(\"MRP closeModel_MRP 187\", who);\r\n this.modelModelView?.closeModel('MRP-CloseModel');\r\n }\r\n\r\n async showRevisions(model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log(\"MRP showRevisions 191\");\r\n let priorModelId: string | undefined;\r\n if (this.revisionModelView?.currentModel != undefined) {\r\n priorModelId = this.revisionModelView.currentModel.id;\r\n }\r\n let success = await this.revisionModelView?.showRevisions(model);\r\n if (success != true) {\r\n return;\r\n }\r\n\t\t// JG: HVad er alt dette, og hvorfor skal de ikke slukkes/lukkes INDEN vi starter naeste showRevisions ovenfor?\r\n\t\t// Er det maaske saadan noget gejl med, at vi ikke kan slukke den forrige, foer vi har aabnet den naeste, eller..?\r\n if (this.revisionModelView?.currentModel != undefined && !this.revisionModelView.currentModel.isOpen) {\r\n this.modelModelView?.closeModel('MRP-showRevisions');\r\n let container: HTMLElement | null = document.getElementById('model-revision-container');\r\n if (container) {\r\n container.scrollTop = 0;\r\n return true;\r\n } \r\n }\r\n\t\t// DEN HER er da i hvert fald noget vi har skaffet lige ovenfor..?\r\n if (priorModelId != undefined && priorModelId != this.revisionModelView?.currentModel?.id) {\r\n this.modelModelView?.closePriorModel(priorModelId); \r\n }\r\n return true\r\n }\r\n\r\n async getAllRevisions_forMODEL(model: BimViewerFileDtoSplitView, who:string): Promise {\r\n\t\tlet prjId:string = this.appContext.projectId;\r\n\t\t//console.log('\\n\\nMRP, getRevisions, prjId:', prjId, 'model:', 'who:', who, model.id, model.newestRevisionDate); //this.projectId is:', this.projectId);\r\n if (model == undefined) { return; }\r\n\r\n\t\tif (this.modelRevisionsMap.get(model) != undefined) {//in-getRevisions\r\n\t\t\treturn this.modelRevisionsMap.get(model);//in-getRevisions\r\n\t\t} else {\r\n\t\t\tlet api: RequestMethod = this.apiClient.project(prjId); //this.projectId); // last ref to project in this file.\r\n\r\n\t\t\t//console.log('MRP-getRevisions, projectId?', prjId); //this.projectId);\r\n\t\t\tlet revisionList: BimViewerRevisionDtoSplitView[] = await api.get(`BimViewer/GetRevisionsForFile?fileId=${model.id}`).jsonResult();\r\n\t\t\t//console.log('model-revision-parent.getRevisions, BimViewer/GetRevisionsForFile, revisionList:', revisionList);\r\n\r\n\t\t\tif (revisionList == undefined) {\r\n\t\t\t\treturn revisionList;\r\n\t\t\t}\r\n\t\t\trevisionList = await this.userService.fillUsernames(revisionList,'getRevisions');\r\n\t\t\trevisionList = this.sortRevisions(revisionList);//in-MRP.getRevisions \r\n\t\t\tthis.modelRevisionsMap.set(model, revisionList);//in-MRP.getRevisions \r\n\t\t\t//console.log('MRP, modelRevisionsMap.set in getRevisions.., modelId:', model.id);\r\n\t\t\treturn this.modelRevisionsMap.get(model);//in-getRevisions\r\n\t\t}\r\n }\r\n\r\n sortRevisions(revisionList: BimViewerRevisionDtoSplitView[]): BimViewerRevisionDtoSplitView[] { // UB: MRP.getRevisions.\r\n\t\t//console.log(\"MRP sortRevisions 237\", revisionList.length);\r\n revisionList.sort((revision1: BimViewerRevisionDtoSplitView, revision2: BimViewerRevisionDtoSplitView) => {\r\n if (revision1.revision > revision2.revision) {\r\n return -1;\r\n } else if (revision1.revision < revision2.revision) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n return revisionList;\r\n }\r\n\r\n showModels(): boolean {\r\n\t\tconsole.log(\"MRP model-revison-parent: Showing models 250\");\r\n let revisionContainer: HTMLElement | null = document.getElementById('revision-container');\r\n if (revisionContainer) {\r\n revisionContainer.hidden = true; \r\n }\r\n let container: HTMLElement | null = document.getElementById('model-revision-container');\r\n if (container && (container.style.visibility == \"hidden\" || container.style.visibility == \"\")) {\r\n container.style.visibility = \"visible\";\r\n let modelRevisionContainer: HTMLElement | null = document.getElementById('model-revision-container');\r\n let topBarHeight: number = (40 / 2);\r\n let panelLeftLength: number | undefined = 0;\r\n if (document.getElementById('panel-left')) {\r\n panelLeftLength = document.getElementById('panel-left')?.clientWidth;\r\n }\r\n let panelRightLength: number | undefined = 0;\r\n if (document.getElementById('panel-right')) {\r\n panelRightLength = document.getElementById('panel-right')?.clientWidth;\r\n }\r\n //Subscriping on navCollapsed is not working in this case as \r\n //we need to know the width of the navbar even if it has not\r\n //been toggled after loading this view.\r\n let navigation: HTMLElement = document.getElementsByClassName('navigation')[0];\r\n let navbar: number = 275; \r\n if (navigation) {\r\n navbar = navigation.clientWidth;\r\n }\r\n\r\n let modelRevisionHeight = modelRevisionContainer?.clientHeight;\r\n let modelRevisionWidth = modelRevisionContainer?.clientWidth;\r\n if (modelRevisionHeight == 0) {\r\n //This can occur when the height of the container is set before this code is run.\r\n //It has for now only occured when going directly from Model -> click 3d -> Work-area (Viewer)\r\n modelRevisionHeight = 200;\r\n }\r\n if (modelRevisionContainer && modelRevisionWidth && modelRevisionHeight && panelLeftLength && panelRightLength) {\r\n modelRevisionContainer.style.left = (window.innerWidth - modelRevisionWidth - navbar + panelLeftLength - panelRightLength) / 2 + \"px\";\r\n modelRevisionContainer.style.top = (window.innerHeight - modelRevisionHeight - topBarHeight) / 2 + \"px\";\r\n }\r\n this.events.publish('ViewerMenu:ChangeModelToVisible', true);\r\n return true;\r\n } else {\r\n this.closeModelRevisionContainer();\r\n return false;\r\n }\r\n }\r\n\r\n async turnOn2dRevision(model: BimViewerFileDtoSplitView, revision: BimViewerRevisionDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.turnOn2dRevision-297');\r\n this.turnOff2dModel();\r\n for (let currentRevision of (await this.COSTLY_getAllRevisions('TON-2R'))) {\r\n if (currentRevision.pressed2d) { // First the prior 2d is turned off\r\n currentRevision.pressed2d = false;\r\n }\r\n if (currentRevision.id == revision.id) { // Then the new revision is turned on\r\n currentRevision.pressed2d = true;\r\n }\r\n }\r\n this.turnOn2dModel(model);\r\n }\r\n\r\n turnOn2dModel(model: BimViewerFileDtoSplitView): void {\r\n\t\tconsole.log('MRP.turnOn2dModel-310');\r\n this.getModels().forEach((currentModel: BimViewerFileDtoSplitView) => {\r\n if (currentModel.id == model.id) {\r\n currentModel.pressed2d = true;\r\n }\r\n });\r\n }\r\n\r\n async turnOff2dRevision(): Promise {\r\n\t\tconsole.log('MRP.turnOff2dRevision-318');\r\n (await this.COSTLY_getAllRevisions('TOFF-2R')).forEach((revision: BimViewerRevisionDtoSplitView) => {\r\n if (revision.pressed2d) { revision.pressed2d = false; }\r\n });\r\n }\r\n\r\n turnOff2dModel(): void {\r\n\t\tconsole.log('MRP.turnOff2dModel-324');\r\n this.getModels().forEach((model: BimViewerFileDtoSplitView) => {\r\n if (model.pressed2d) { model.pressed2d = false; }\r\n });\r\n }\r\n\r\n isAny3dRevisionOn(): boolean { return !!this.getModels().find(m => m.pressed3d); }\r\n\r\n async COSTLY_getAllRevisions(who:string): Promise {\r\n\t\t/* JG: I don't know in which cases we need all of this crap read in,\r\n\t\tbut some of them are clearly unnecessary, and I am disabling those.\r\n\t\t */\r\n\t\tconsole.log('MRP.COSTLY_getAllRevisions-332', who);\r\n let allModels: BimViewerFileDtoSplitView[] = this.getModels();\r\n\r\n\t\tlet ix=0;\r\n let allRevision: BimViewerRevisionDtoSplitView[] = [];\r\n for (let currentModel of allModels) {\r\n\t\t\tconsole.log('ALL!, GETTING', ++ix, '/', allModels.length);\r\n let revisions: BimViewerRevisionDtoSplitView[] | undefined = await this.getAllRevisions_forMODEL(currentModel,'GAR');\r\n if (revisions) {\r\n allRevision.push(...revisions);\r\n }\r\n }\r\n return allRevision;\r\n }\r\n\r\n async started3dModelLoading(model: BimViewerFileDtoSplitView, currentRevision: BimViewerRevisionDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.started3dModelLoading-344');\r\n let revision: BimViewerRevisionDtoSplitView | undefined = this.modelRevisionsMap.get(model)?.filter((revision: BimViewerRevisionDtoSplitView) => revision.id == currentRevision.id)[0];//in-started3dModelLoading\r\n\r\n if (revision && revision.objectsIdNotDoneLoading != false) { // It has never been set i.e undefined\r\n revision.objectsIdNotDoneLoading = true;\r\n }\r\n\r\n if (revision) {\r\n revision.pressed3d = true;\r\n }\r\n\r\n if (model.objectsIdNotDoneLoading == false || model.objectsIdNotDoneLoading == undefined ) { \r\n model.objectsIdNotDoneLoading = true;\r\n }\r\n model.pressed3d = true;\r\n }\r\n\r\n async model3dDoneLoading(model: BimViewerFileDtoSplitView, currentRevisionId: string): Promise {\r\n\t\tconsole.log('MRP.model3dDoneLoading-361');\r\n let objectsIdNotDoneLoading: boolean = false; \r\n let revisions: BimViewerRevisionDtoSplitView[] | undefined = await this.getAllRevisions_forMODEL(model,'M3DL');\r\n if (revisions) {\r\n for (let revision of revisions) {\r\n if (revision.id == currentRevisionId) {\r\n revision.objectsIdNotDoneLoading = false;\r\n revision.pressed3d = true;\r\n }\r\n if (revision.objectsIdNotDoneLoading) {\r\n objectsIdNotDoneLoading = true;\r\n }\r\n } \r\n model.objectsIdNotDoneLoading = objectsIdNotDoneLoading;\r\n model.pressed3d = true;\r\n }\r\n }\r\n\r\n async handleCorrectViewerSplitSize(): Promise {\r\n\t\tconsole.log('MRP.handleCorrectViewerSplitSize-379');\r\n\t\t//If just one 3d revision is turned on, and one 2d revision turned on, the screen should be split equally. \r\n\t\tlet isAny2dOn: boolean = this.getModels().filter(model => model.pressed2d). length > 0;\r\n\r\n\t\t// I don't when we REQUIRE to have all this crap read in, but the splitter-sizing is NOT one of those cases.\r\n\t\t//let itemsWith3dOnA = (await this.COSTLY_getAllRevisions('HCVSS')).filter((revision: BimViewerRevisionDtoSplitView) => revision.pressed3d == true);\r\n\t\tlet itemsWith3dOn = this.cheap_anyRevisionsWith3dOn();\r\n\r\n\t\t// JG: Apparently: WHENEVER exactly 1 3d-model is enabled, and the 2d-viewer is active, THEN reset their splitter to 50-50:\r\n\t\tif (itemsWith3dOn == 1 && isAny2dOn == true) {\r\n\t\t\tthis.events.publish('work-area-container:set-split-view-size', {top: 50, bot: 50});\r\n\t\t}\r\n }\r\n\r\n\tcheap_anyRevisionsWith3dOn():number {\r\n\t\tlet count=0;\r\n\t\tlet models = this.getModels();\r\n\t\tfor (let model of models) {\r\n\t\t\tif (!this.modelRevisionsMap.has(model)) { continue; }\r\n\t\t\tlet revisions:BimViewerRevisionDtoSplitView[]|undefined = this.modelRevisionsMap.get(model);\r\n\t\t\tif (!revisions) { continue; }\r\n\t\t\tfor (let revision of revisions) {\r\n\t\t\t\tif (revision.pressed3d) { ++count; } //return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn count; //false;\r\n\t}\r\n\r\n turnOff3dRevision(revision: BimViewerRevisionDtoSplitView): void {\r\n\t\tconsole.log('MRP.turnOff3dRevision-387');\r\n revision.pressed3d = false;\r\n }\r\n\r\n turnOff3dModel(model: BimViewerFileDtoSplitView): void {\r\n\t\tconsole.log('MRP.turnOff3dModel-391');\r\n let shouldTurnOffModel: boolean = true;\r\n if (this.modelRevisionsMap.get(model) != undefined) {//in-turnOff3dModel.\r\n this.modelRevisionsMap.get(model)?.forEach((revision: BimViewerRevisionDtoSplitView) => {//in-turnOff3dModel.\r\n if (revision.pressed3d == true) {\r\n shouldTurnOffModel = false;\r\n }\r\n });\r\n }\r\n\r\n if (shouldTurnOffModel) {\r\n model.pressed3d = false;\r\n }\r\n }\r\n\r\n async handleModelNotReady(revisionId: string, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.handleModelNotReady-406');\r\n let revision: BimViewerRevisionDtoSplitView | undefined = this.modelRevisionsMap.get(model)?.filter((revision: BimViewerRevisionDtoSplitView) => revision.id == revisionId)[0];//in-handleModelNotReady.\r\n if (revision) {\r\n revision.objectsIdNotDoneLoading = false;\r\n revision.pressed2d = false;\r\n revision.pressed3d = false;\r\n revision.isSynced = false;\r\n }\r\n\r\n model.objectsIdNotDoneLoading = false;\r\n model.pressed2d = false;\r\n model.pressed3d = false;\r\n model.isSynced = false;\r\n }\r\n\r\n async handleModelReady(revisionId: string, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.handleModelReady-421');\r\n let revision: BimViewerRevisionDtoSplitView | undefined = this.modelRevisionsMap.get(model)?.filter((revision: BimViewerRevisionDtoSplitView) => revision.id == revisionId)[0];//-in-handleModelReady.\r\n if (revision) {\r\n revision.isSynced = true;\r\n model.isSynced = true;\r\n }\r\n }\r\n\r\n isNewestPluginRevision(currentModelToCheckAgainst: BimViewerFileDtoSplitView, isThisRevisionNewest: BimViewerRevisionDtoSplitView): boolean {\r\n\t\tconsole.log('MRP.isNewestPluginRevision-429');\r\n if (currentModelToCheckAgainst == undefined) { return false; } // ( - Then we can't claim it's the newest.)\r\n\t\tif (!currentModelToCheckAgainst.pluginUpload) { return false; } // ( - If it is not a plugin-model, we can't be choosing 'its' newest plugin-rev..)\r\n\r\n\t\tlet revisions = this.modelRevisionsMap.get(currentModelToCheckAgainst);//in-isNewestPluginRevision\r\n\t\tif (!revisions) { return false; } // ( - if no revisions exist, we can't claim to hold the newest of them.)\r\n\r\n\t\t// We HAVE revisions, and the one we are asking about, matches the front one:\r\n\t\treturn revisions[0] == isThisRevisionNewest; // what kind of equality is being checked between these dicts?\r\n }\r\n\r\n}\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","ModelRevisionParent","constructor","events","apiClient","appContext","userService","projectId","parentDoneLoading","modelRevisionsMap","Map","subscriptions","console","log","this","keybuttonHandling","event","key","closeModelRevisionContainer","activate","params","async","self","subscribe","parameter","handleModelNotReady","revisionId","model","handleModelReady","undoLoadModel","is2d","turnOn2dModelById","turnOn3dModelById","revision","turnOn2dRevisionById","turnOn3dRevisionById","showModels","handleCorrectViewerSplitSize","prjId","initModels","reason","error","window","addEventListener","projectIdChanged","trace","reload","currentRevision","getModels","filter","modelId","COSTLY_getAllRevisions","forEach","revisionModelView","open3DViewerRevisionOnStartup","open2DViewerRevisionOnStartup","modelModelView","open2DViewerModel","undefined","open3DViewerModel","revisionIds","revisions","get","objectsIdNotDoneLoading","pressed2d","pressed3d","publish","unbind","removeEventListener","subscription","dispose","handleReload","hideRevisions","err","api","project","modelList","jsonResult","set","pluginUpload","pluginModel","modelArray","Array","from","keys","length","container","document","getElementById","style","visibility","closeModel_MRP","resetInput","who","closeModel","priorModelId","currentModel","showRevisions","isOpen","scrollTop","closePriorModel","revisionList","fillUsernames","sortRevisions","sort","revision1","revision2","revisionContainer","hidden","modelRevisionContainer","topBarHeight","panelLeftLength","clientWidth","panelRightLength","navigation","getElementsByClassName","navbar","modelRevisionHeight","clientHeight","modelRevisionWidth","left","innerWidth","top","innerHeight","turnOff2dModel","turnOn2dModel","isAny3dRevisionOn","find","m","allModels","ix","allRevision","getAllRevisions_forMODEL","currentRevisionId","isAny2dOn","cheap_anyRevisionsWith3dOn","bot","count","models","has","turnOff3dRevision","turnOff3dModel","shouldTurnOffModel","isSynced","isNewestPluginRevision","currentModelToCheckAgainst","isThisRevisionNewest","bindable","autoinject"],"sourceRoot":""}