!function(){"use strict";var e=window.hostConfig||{APIHost:"https://api.bimface.com",resourceHost:"https://m.bimface.com",staticHost:"https://static.bimface.com",dataEnvType:"BIMFACE",securityApi:!0};void 0===Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n-1){r=0;var g=o.options;g.build,t.Release;var h=d(o);return s(g.staticHost,h),void c(h,n)}++r==a?n():u(e[r],i)};u(e[r],i)},l=[],u=function(e,t){if(!(l.indexOf(e.split("/").pop())>-1)){var n,o=document.getElementsByTagName("head")[0];return e.indexOf(".css")>-1?((n=document.createElement("link")).setAttribute("href",e),n.setAttribute("rel","stylesheet")):(n=document.createElement("script")).setAttribute("src",e),n.url=e,o.appendChild(n),n.addEventListener("load",(function(){l.push(this.url.split("/").pop()),t&&t({message:"success"})})),n.addEventListener("error",(function(){t&&t({element:e,message:"error"})})),n}t()};window.loadResource=c;class g extends class{constructor(e){this.indexedDB=window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.msIndexedDB,this.indexedDB||console.log("IndexedDB not supported"),this._db=null,this._opt=e}open(e,t){const n=e||this._opt.name,o=t||this._opt.version||1,a=this.indexedDB.open(n,o);return new Promise(((e,t)=>{a.onsuccess=t=>{this._db=a.result,e(this._db)},a.onupgradeneeded=e=>{let t=this._db=e.target.result;(this._opt.storeList||[]).forEach((e=>!t.objectStoreNames.contains(e)&&t.createObjectStore(e)))},a.onerror=e=>{t(e)}}))}getDB(){return new Promise(((e,t)=>{this._db?e(this._db):this.open().then(e).catch(t)}))}addObject(e,t,n){return new Promise(((o,a)=>{this.getDB().then((r=>{const i=r.transaction(e,"readwrite");i.objectStore(e).put(t,n).onsuccess=e=>{o(e.target.result)},i.onerror=e=>{a(e)}})).catch(a)}))}getObject(e,t){return new Promise(((n,o)=>{this.getDB().then((a=>{const r=a.transaction(e,"readonly");r.objectStore(e).get(t).onsuccess=e=>{let t=e.target.result;t?n(t):o(e)},r.onerror=e=>{o(e)}})).catch(o)}))}deleteObject(e,t){return new Promise(((n,o)=>{this.getDB().then((a=>{const r=a.transaction(e,"readwrite");r.objectStore(e).delete(t).onsuccess=e=>{n(e.target.result)},r.onerror=e=>{o(e)}})).catch(o)}))}clearStore(e){return new Promise(((t,n)=>{this.getDB().then((o=>{const a=o.transaction(e,"readwrite");a.objectStore(e).clear().onsuccess=e=>{t(e.target.result)},a.onerror=e=>{n(e)}})).catch(n)}))}deleteDB(e){return new Promise((t=>{this.indexedDB.deleteDatabase(e),t()}))}getAllKeys(e){return new Promise(((t,n)=>{this.getDB().then((o=>{const a=o.transaction(e,"readonly");a.objectStore(e).getAllKeys().onsuccess=e=>t(e.target.result),a.onerror=n})).catch(n)}))}getAll(e){return new Promise(((t,n)=>{this.getDB().then((o=>{const a=o.transaction(e,"readonly");a.objectStore(e).getAll().onsuccess=e=>t(e.target.result),a.onerror=n})).catch(n)}))}}{constructor(){super({name:"Bf_Loader",version:1,storeList:["d","t"]})}getDatabagInfo(e,t){return new Promise(((n,o)=>{t?this.getObject("d",e).then((e=>this.addTemp(e,t).then((()=>n(e))).catch(o))).catch(o):this.getObject("d",e).then(n).catch(o)}))}addDatabagInfo(e,t){return new Promise(((n,o)=>{const a=e.modelId,r=()=>Promise.all([this.addObject("d",e,a),this.addTemp(e,t)]).then(n).catch(o);this.getDatabagInfo(a).then((t=>{t.databagId!==e.databagId&&this.deleteDB(`Bf_${data.databagId}`),r()})).catch((()=>{r()}))}))}deleteDatabagInfo(e){return new Promise(((t,n)=>{this.deleteObject("d",e).then(t).catch(n)}))}addTemp(e,t){return new Promise(((n,o)=>{this.clearStore("t").then((()=>{this.addObject("t",e,t).then(n).catch(o)})).catch(o)}))}getTemp(e){return new Promise(((t,n)=>{this.getObject("t",e).then(t).catch(n)}))}deleteStorageByModelId(e){return new Promise((t=>{this.getDatabagInfo(e).then((n=>{let o="gisView"===n.renderType?`Bg_${n.modelId}`:`Bf_${n.databagId}`;Promise.allSettled([this.deleteDB(o),this.deleteDatabagInfo(e)]).then(t)})).catch(t)}))}getStoredModelIds(){return this.getAllKeys("d")}getStoredModelInfo(){return new Promise(((e,t)=>{this.getAll("d").then((t=>{let n=t.map((e=>{let{modelId:t,name:n,renderType:o}=e;return{modelId:t,name:n,type:o}}));e(n)})).catch(t)}))}}var h=function(e,t,n){const a=o=>{if(e.enableStorage&&e.modelId){(new g).getDatabagInfo(e.modelId,e.viewToken).then((e=>n&&n(e))).catch((()=>{console.error("[BIMFACE ERROR]: failed get model info from storage"),t&&t(o)}))}else t&&t(o)};if(!e.viewToken&&"Local"!==e.dataEnvType)return void a();const r=e.dataEnvType!==o.Local,i=r&&e.securityApi;!function(e){var t,n=Object.assign({type:"get",data:null,success:null,failure:null},e);(t=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP")).onreadystatechange=function(){if(4==t.readyState){var e=t.status;e>=200&&e<300||304==e||0===e&&"file:"===window.location.protocol?n.success&&n.success(t.responseText,t.responseXML):n.failure&&n.failure(e)}},t.open(n.type,n.url,n.async),t.send(n.data)}({type:i?"post":"get",url:r&&!i?`${e.url}?viewToken=${e.viewToken}`:e.url,async:!0,data:i?e.data:void 0,requestHeader:e.requestHeader,success:function(t){var o=JSON.parse(t);if("Local"!==e.dataEnvType&&"success"!==o.code)return o.message&&console.error(`[BIMFACE ERROR]: ${o.message}`),void a(t);if(o=o.data||o,e.enableStorage){(new g).addDatabagInfo(o,e.viewToken).then((()=>n&&n(o))).catch((()=>n&&n(o)))}else n&&n(o)},failure:a})},f=function(e,t,o){h(e,o,(function(o){var a=function(e,t){let o,a=t.version;if(e.renderVersion,/\d+?\.\d+?\.\d+/.test(a)&&a.split(".")[0]>=3){const[e,t,n]=a.split(".");"6"===t&&Number(n)<143&&(a=`Bimface@${a}`)}else if("Debug"==t.build)a="Bimface",o="Application";else if(t.sdkPath)a=o="bimface";else if(t.viewType==n.DrawingView&&"drawingView"!=e.renderType){var r=e.subRenders;if(r&&0!=r.length)for(var i=0;i{f(r,(function(n){t(w(n,e))}),n)}));f(r,(function(t){n&&n(w(t,e))}),(function(e){a&&a()}))},Storage:{getStorage(){return this.storage=this.storage||new g,this.storage},deleteStorageByModelId(e){return this.getStorage().deleteStorageByModelId(e)},getStoredModelIds(){return this.getStorage().getStoredModelIds()},getStoredModelInfo(){return this.getStorage().getStoredModelInfo()},store(e){let{url:t,viewToken:n,storeMaterialOverride:o,successCallback:a,progressCallback:r,errorCallback:i,conditions:s,storeByQueue:d}=e;const c=d&&d.enable,l=c&&(d.delay||2e3);if(!n)return;t=t||[],a=a||function(){},r=r||function(){},i=i||function(){};const u=new BimfaceSDKLoaderConfig;u.enableStorage=!0,u.viewToken=n,BimfaceSDKLoader.load(u).then((e=>{if("3DView"==e.viewType){const d=document.createElement("div"),u=new Glodon.Bimface.Viewer.Viewer3DConfig;u.domElement=d,u.enableStorage=!0;const g=new Glodon.Bimface.Viewer.Viewer3D(u),h=new Promise((t=>{g.addModel(e),c||g.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewLoading,(e=>r(e.progress)));const a=()=>{requestAnimationFrame((()=>{g.destroy(),t()}))};let i=!1;g.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded,(()=>{if(i)return;const e=()=>{i=!0;const e=g.getDefaultModel(),t=e.getCloudViewer().getModelManager().getModel(e.modelId),o=[...t._handler.layerProvider.getAllLayerIdxData().layerKeys],s=[...t._handler.layerProvider.getLayerKeyAttributes()];let d=0;const c={},u=()=>{if(r(Math.floor(100*(d+1)/o.length)),d===o.length)return void a();o[d].split("-").forEach(((e,t)=>c[s[t]]=e));const e=g.getDefaultModel();e&&e.destroy();const t=isNaN(l)?2e3:Number(l);setTimeout((()=>{g.addView(n)}),t),d++};g.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ModelAdded,(()=>{g.showExclusiveComponentsByObjectData([c],null,u)})),u()};o?g.loadMaterialOverrideSet(g.getModel().modelId,n,(function(){s?g.showExclusiveComponentsByObjectData(s,null,a):c?e():(g.showAllComponents(),g.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.DemandLoaded,a))})):s?g.showExclusiveComponentsByObjectData(s,null,a):c?e():a()}))}));Promise.all([h,g._storeData(t)]).then(a).catch(i)}})).catch()}}};window.BimfaceSDKLoader=p}();