Files
OrcaSlicer/resources/web/homepage/index.html
SoftFever c04be9ab37 Introducing Orca Cloud: https://cloud.orcaslicer.com (#13414)
* Add OrcaCloud sync platform and preset bundle sharing system

  Introduce OrcaCloud, a cloud sync platform for user presets, alongside
  a preset bundle system that enables sharing printer/filament/process
  profiles as local exportable bundles or subscribed cloud bundles.

  OrcaCloud platform:
  - Auth to Orca Cloud
  - Encrypted token storage (file-based or system keychain)
  - User preset sync with
  - Profile migration from default/bambu folders on first login
  - Homepage integration with entrance to cloud.orcaslicer.com

  Preset bundles:
  - Local bundle import/export with bundle_structure.json metadata
  - Subscribed cloud bundles with version-based update checking
  - Thread-safe concurrent bundle access with read-write mutex
  - Canonical bundle preset naming (_local/<id>/... and _subscribed/<id>/...)
  - Bundle presets are read-only; grouped under subheaders in combo boxes
  - PresetBundleDialog with auto-sync toggle, refresh, update notifications
  - Hyperlinked bundle names to cloud bundle pages

  Co-authored-by: Sabriel Koh <sabrielkcr@gmail.com>
  Co-authored-by: Derrick <derrick992110@gmail.com>
  Co-authored-by: Mykola Nahirnyi <mnahirnyi@amcbridge.com>
  Co-authored-by: Ian Chua <iancrb00@gmail.com>
  Co-authored-by: Draginraptor <draginraptor@gmail.com>
  Co-authored-by: ExPikaPaka <112851715+ExPikaPaka@users.noreply.github.com>
  Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
  Co-authored-by: Ocraftyone <Ocraftyone@users.noreply.github.com>
  Co-authored-by: yw4z <ywsyildiz@gmail.com>
  Co-authored-by: peterm-m <101202951+peterm-m@users.noreply.github.com>

* Fixed an issue on Windows it failed to login Orca Cloud with Google account
2026-05-01 18:01:29 +08:00

265 lines
10 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<title>homepage</title>
<link rel="stylesheet" type="text/css" href="../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="./css/home.css" />
<link rel="stylesheet" type="text/css" href="./css/dark.css" />
<script type="text/javascript" src="../include/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="../include/json2.js"></script>
<script type="text/javascript" src="../include/globalapi.js"></script>
<link rel="stylesheet" type="text/css" href="../include/swiper/swiper-bundle.min.css" />
<script type="text/javascript" src="../include/swiper/swiper-bundle.min.js"></script>
<script type="text/javascript" src="../data/text.js"></script>
<script type="text/javascript" src="js/home.js"></script>
</head>
<body class="ZScrol" onLoad="OnInit()">
<div id="LeftBoard">
<div id="LoginArea">
<!-- Orca Login Section -->
<div id="OrcaLoginSection">
<div id="OrcaLogin1">
<div id="Icon1"><img id="BBLIcon" src="../image/logo.png" /></div> <!-- ORCA use square icon for better consistency on UI -->
<div id="LoginBtn" class="ButtonStyleRegular ButtonTypeWindow" onClick="OnLoginOrRegister()"><span class="trans" tid="t26">login</span> / <span class="trans" tid="t27">register</span></div>
</div>
<div id="OrcaLogin2">
<div>
<img id="UserAvatarIcon" src="img/c.jpg" onerror="this.onerror=null;this.src='img/c.jpg';" />
</div>
<div id="UserName" class="TextS1"></div>
<div id="LogoutBtn" class="ButtonStyleAlert ButtonTypeWindow trans" tid="t50" onClick="OnLogOut()">log out</div>
</div>
</div>
<!-- Bambu Cloud Section -->
<div id="BambuCloudSection">
<div id="BambuCloudHeader" onClick="ToggleBambuSection()">
<svg class="bambu-chevron" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.5 2.5L8 6L4.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span class="trans" tid="orca6">Bambu Cloud</span>
<span class="bambu-status-dot"></span>
</div>
<div id="BambuCloudBody">
<div id="BambuLogin1">
<div id="BambuLoginBtn" class="ButtonStyleRegular ButtonTypeWindow" onClick="OnBambuLoginOrRegister()"><span class="trans" tid="t26">login</span></div>
</div>
<div id="BambuLogin2">
<div>
<img id="BambuAvatarIcon" src="img/c.jpg" onerror="this.onerror=null;this.src='img/c.jpg';" />
</div>
<div id="BambuUserName" class="TextS1"></div>
<div id="BambuLogoutBtn" class="ButtonStyleAlert ButtonTypeWindow trans" tid="t50" onClick="OnBambuLogOut()">log out</div>
</div>
<div id="NoPluginTip">
<div id="NoPluginText"><a class="RedFont trans" tid="t76">Network plugin not detected. Click </a><a Class="LinkBtn trans" onClick="BeginDownloadNetworkPlugin()" tid="t77">here</a><a class="RedFont trans" tid="t78"> to install it.</a></div>
</div>
</div>
</div>
</div>
<div id="BtnArea">
<div menu="recent" class="BtnItem BtnItemSelected" onClick="GotoMenu('recent')">
<div class="BtnIcon "><img class="LeftIcon" src="img/i2.png" /></div>
<div class="trans" tid="t28">recent</div>
</div>
<div class="BtnItem BtnShortcut" onClick="OpenUrlInLocalBrowser('https://cloud.orcaslicer.com')">
<div class="BtnIcon "><img class="ShortcutBrandIcon" src="../image/logo.png" /></div>
<div class="ShortcutTextRow">
<div>OrcaCloud</div>
<svg class="ShortcutMark" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="M6 3.5H3.5C2.95 3.5 2.5 3.95 2.5 4.5V12.5C2.5 13.05 2.95 13.5 3.5 13.5H11.5C12.05 13.5 12.5 13.05 12.5 12.5V10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8.5 3.5H13.5V8.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.5 3.5L7 10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
</div>
</div>
</div>
<div id="RightBoard">
<div id="ContentBoard" class="ZScrol" board="recent">
<div style="height: 14px;"></div>
<div id="MenuArea">
<!-- <div class="MenuItem" onClick="OnClickModelDepot()">
<div class="MenuIcon"><img src="img/i6.png"></div>
<div>
<div class="trans TextS1" tid="t90">3D Model</div>
<div class="MenuDesc trans" tid="t91">Download 3D Models</div>
</div>
</div> -->
<div class="MenuItem" onClick="OnClickNewProject()">
<div class="MenuIcon"><img src="img/i4.png"></div>
<div>
<div class="trans TextS1" tid="t31">new project</div>
<div class="MenuDesc trans" tid="t32">create new project</div>
</div>
</div>
<div class="MenuItem" onClick="OnClickOpenProject()">
<div class="MenuIcon"><img src="img/i5.png"></div>
<div>
<div class="trans TextS1" tid="t33">open project</div>
<div class="MenuDesc">3mf</div>
</div>
</div>
</div>
<div id="DebugText"></div>
<div id="RecentFileArea">
<div id="RecentTitleBlock">
<div id="RecentTitle" class="Content-Title trans TextS1" tid="t35">recent open</div>
<div id="RecentClearAllBtn" class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="OnDeleteAllRecentFiles()">Clear all</div>
</div>
<div id="FileList">
<!-- <div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/d.png"/></div>
<div class="FileName TextS1">abcd12334abcd12334abcd12334.3mf</div>
<div class="FileDate">2021/12/27 09:22</div>
</div> -->
</div>
</div>
<div style="height: 14px;"></div>
<div id="recnet_context_menu">
<div id="CT_Delete_Bar" class="CT_Item" onClick="OnDeleteRecentFile()">
<div class="CT_Icon CT_Delete"></div>
<div class="CT_Text trans" tid="t88">clear</div>
</div>
<div id="CT_Folder_Bar" class="CT_Item " onClick="OnExploreRecentFile()" >
<div class="CT_Icon CT_Explore"></div>
<div class="CT_Text trans" tid="t89">open in explorer </div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript">
//HandleStudio(TestData);
document.onkeydown = function (event) {
var e = event || window.event || arguments.callee.caller.arguments[0];
if (e.ctrlKey && e.metaKey)
OutputKey(e.keyCode, true, false, true);
else if (e.ctrlKey)
OutputKey(e.keyCode, true, false, false);
else if (e.metaKey)
OutputKey(e.keyCode, false, false, true);
if (e.shiftKey && e.ctrlKey)
OutputKey(e.keyCode, true, true, false);
if (e.shiftKey && e.metaKey)
OutputKey(e.keyCode, false, true, true);
if (window.event) {
try { e.keyCode = 0; } catch (e) { }
e.returnValue = false;
}
};
window.addEventListener('mousewheel', function (event) {
if (event.ctrlKey === true || event.metaKey) {
event.preventDefault();
}
}, { passive: false });
</script>
</html>