var m_ModelID=null; $(function () { // 向宿主请求数据(握手) TranslatePage(); RequestProjectInfo(); }); function HandleStudio(pVal) { let strCmd=pVal['command']; if(strCmd=='show_3mf_info') { const detail = pVal.model && pVal.model.model; const name = detail ? decodeURIComponent(detail.name || '').trim() : ''; const description = detail ? decodeURIComponent(detail.description || '').trim() : ''; if (!name || !description) { window.location.href = 'black.html'; return; } ShowProjectInfo( pVal['model'] ); } else if(strCmd=='clear_3mf_info') { ShowProjectInfo( null ); } else if(strCmd=='3mf_detail_set_modelid') { let ModelID=pVal['model_id']; // UpdateModelID( ModelID ); } } //Push Command to C++ function RequestProjectInfo() { var tSend={}; tSend['sequence_id']=Math.round(new Date() / 1000); tSend['command']="request_3mf_info"; SendWXMessage( JSON.stringify(tSend) ); } function safeDecode(value) { if (!value) return ''; try { return decodeURIComponent(value); } catch (err) { return value; } } function normalizeCoverName(value) { const decoded = safeDecode(value); if (!decoded) return ''; const segments = decoded.split(/[/\\]/); return segments[segments.length - 1]; } // function resetNavigation() { // const $ul = $('#sideNav ul'); // $ul.empty(); // $ul.append(''); // } // function addNavItem(anchor, label) { // const $ul = $('#sideNav ul'); // if ($ul.find(`a[href="${anchor}"]`).length === 0) { // $ul.append(``); // } // } // function removeNavItem(anchor) { // $('#sideNav ul').find(`a[href="${anchor}"]`).parent().remove(); // } function ShowProjectInfo( p3MF ) { //Check Data // resetNavigation(); if (!p3MF) { $("#projectName").text(''); $("#projectAuthor").text(''); $("#projectDescription").html(''); $('#projectGallery').hide(); $("#profileName").text(''); $("#profileAuthor").text(''); $("#profileDescript").html(''); // removeNavItem('#Accessories'); // removeNavItem('#profileName'); return; } let pModel=p3MF['model']; let pFile=p3MF['file']; let pProfile=p3MF['profile']; ShowModelInfo( pModel ); ShowFileInfo( pFile ); ShowProfileInfo( pProfile ); } function ShowModelInfo(pModel) { //==========Model Info========== // 先完整解码,再按白名单净化,保留安全样式与 https 图片 let rawName = decodeURIComponent(pModel.name); let rawAuthor = decodeURIComponent(pModel.author); let rawDesc = decodeURIComponent(pModel.description); rawDesc = HtmlDecodeFrom3MF(rawDesc); const sanitizeCfg = { ADD_TAGS: ['span','img','font','u','s','a'], ADD_ATTR: ['style','color','href','target','rel','src','alt'], ALLOWED_URI_REGEXP: /^(?:(?:https?|data|blob):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i }; if( pModel.hasOwnProperty('model_id') ) { let m_id=pModel['model_id']+''; m_ModelID = m_id.trim(); if (m_ModelID != "") { if( !$('#projectName').hasClass('link') ); $("#projectName").addClass("link"); }else { $("#projectName").removeClass("link"); } } let sModelName=DOMPurify.sanitize(rawName); let sModelAuthor=DOMPurify.sanitize(rawAuthor); let UploadType=pModel.upload_type.toLowerCase(); let sLicence=pModel.license.toUpperCase(); let sModelDesc=DOMPurify.sanitize(rawDesc, sanitizeCfg); let ModelPreviewList=pModel.preview_img; let modelImages=[]; const projectCover = normalizeCoverName(pModel.cover_img); $("#projectName").text(sModelName); $("#projectAuthor").text(sModelAuthor); $("#projectDescription").html(sModelDesc); if(ModelPreviewList && ModelPreviewList.length > 0) { const previews = ModelPreviewList.slice(); if (projectCover) { const coverIndex = previews.findIndex(function(item){ if (!item || !item.filename) return false; const filename = normalizeCoverName(item.filename); return filename === projectCover; }); if (coverIndex > 0) { const coverItem = previews.splice(coverIndex, 1)[0]; previews.unshift(coverItem); } } let TotalPreview = previews.length; for(let pn=0;pn0){ $("#bom-accessories").text("Bill of Materials (" + BTotal + ")"); ConstructFileHtml( "bom-list", pBOM ); } if (ATotal>0){ $("#assembly-accessories").text("Assembly Guide (" + ATotal + ")"); ConstructFileHtml( "assembly-list", pAssembly ); } if (OTotal>0){ $("#other-accessories").text("Other (" + OTotal + ")"); ConstructFileHtml( "other-list", pOther ); } } function ShowProfileInfo( pProfile ) { const sanitizeCfg = { ADD_TAGS: ['span','img','font','u','s','a'], ADD_ATTR: ['style','color','href','target','rel','src','alt'], ALLOWED_URI_REGEXP: /^(?:(?:https?|data|blob):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i }; let sProfileName=DOMPurify.sanitize(decodeURIComponent(pProfile.name)); let sProfileAuthor=DOMPurify.sanitize(decodeURIComponent(pProfile.author)); let sProfileDesc=HtmlDecodeFrom3MF(decodeURIComponent(pProfile.description)); sProfileDesc=DOMPurify.sanitize(sProfileDesc, sanitizeCfg); let ModelPreviewList=pProfile.preview_img; let modelImages=[]; const profileCover = normalizeCoverName(pProfile.cover_img); $("#profileName").text(sProfileName); $("#profileAuthor").text(sProfileAuthor); $("#profileDescript").html(sProfileDesc); // removeNavItem('#profileName'); // if(sProfileName) { // addNavItem('#profileName', 'Profile information'); // } if(ModelPreviewList && ModelPreviewList.length > 0) { const previews = ModelPreviewList.slice(); if (profileCover) { const coverIndex = previews.findIndex(function(item){ if (!item || !item.filename) return false; const filename = normalizeCoverName(item.filename); return filename === profileCover; }); if (coverIndex > 0) { const coverItem = previews.splice(coverIndex, 1)[0]; previews.unshift(coverItem); } } let TotalPreview = previews.length; for(let pn=0;pn=0 ){ ImgPath='img/icon_jpg.svg'; } else if( $.inArray( sTail, PngTail )>=0 ){ ImgPath='img/icon_png.svg'; } else if( $.inArray( sTail, ExcelTail )>=0 ){ ImgPath='img/icon_xcl.svg'; } else if( $.inArray( sTail, PdfTail )>=0 ){ ImgPath='img/icon_pdf.svg'; } // base64 图片不发送外部打开指令 let onclick = ''; if (tPath) { onclick = ' onClick="OnClickOpenFile(\''+tPath+'\')"'; } strHtml+='
'+tName+'
'; } $("#"+ID).html( strHtml ); if( fTotal>0 ) {$("#"+ID).show();} } function OnClickOpenFile( strFullPath ) { if (!strFullPath) return; if(isBase64String(strFullPath)) { showBase64ImageLayer(strFullPath); return; } var tSend={}; tSend['sequence_id']=Math.round(new Date() / 1000); tSend['command']="open_3mf_accessory"; tSend['accessory_path']=strFullPath; SendWXMessage( JSON.stringify(tSend) ); SendWXDebugInfo('----open accessory: '+strFullPath); } function editorBtn(){ window.location.href = 'editor.html'; } function JumpToWeb() { if(m_ModelID=='') return; var tSend={}; tSend['sequence_id']=Math.round(new Date() / 1000); tSend['command']="modelmall_model_open"; tSend['data']={}; tSend['data']['id']=m_ModelID+''; SendWXMessage( JSON.stringify(tSend) ); }