From a0f8dfd8caa6b8fbce4e242ded4352d0ec5b83d9 Mon Sep 17 00:00:00 2001 From: Morax <100508620+fzlzjerry@users.noreply.github.com> Date: Sat, 18 Jan 2025 19:11:35 +0800 Subject: [PATCH] refactor: improve rename functionality and enhance error handling in desktop.js (#524) - Updated the rename function to use const instead of var for better variable scoping. - Added error handling to check for the existence of elements before attempting to manipulate them. - Improved the get_file_id function to return null if the element is not found. - Enhanced the traverseDirectory function to check for null values more robustly. - Added event listeners for input handling with checks for element existence. - Implemented window dragging initialization for better user interaction. --- apps/windows/about.html | 220 ++++++++++++++++++ apps/windows/calc.html | 76 ++++++ apps/windows/camera.html | 27 +++ apps/windows/defender.html | 221 ++++++++++++++++++ apps/windows/edge.html | 70 ++++++ apps/windows/explorer.html | 73 ++++++ apps/windows/msstore.html | 138 +++++++++++ apps/windows/notepad.html | 26 +++ apps/windows/pythonEditor.html | 20 ++ apps/windows/run.html | 26 +++ apps/windows/setting.html | 371 +++++++++++++++++++++++++++++ apps/windows/taskmgr.html | 412 +++++++++++++++++++++++++++++++++ apps/windows/terminal.html | 23 ++ apps/windows/whiteboard.html | 72 ++++++ desktop.js | 112 ++++++--- package.json | 12 + pnpm-lock.yaml | 186 +++++++++++++++ scripts/extract_windows.js | 55 +++++ 18 files changed, 2103 insertions(+), 37 deletions(-) create mode 100644 apps/windows/about.html create mode 100644 apps/windows/calc.html create mode 100644 apps/windows/camera.html create mode 100644 apps/windows/defender.html create mode 100644 apps/windows/edge.html create mode 100644 apps/windows/explorer.html create mode 100644 apps/windows/msstore.html create mode 100644 apps/windows/notepad.html create mode 100644 apps/windows/pythonEditor.html create mode 100644 apps/windows/run.html create mode 100644 apps/windows/setting.html create mode 100644 apps/windows/taskmgr.html create mode 100644 apps/windows/terminal.html create mode 100644 apps/windows/whiteboard.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 scripts/extract_windows.js diff --git a/apps/windows/about.html b/apps/windows/about.html new file mode 100644 index 0000000..f0ece2c --- /dev/null +++ b/apps/windows/about.html @@ -0,0 +1,220 @@ +
+
+
+ +

关于 Windows12 网页版

+
+ + + +
+
+
+ +
+
+ +
+

Windows 12 网页版

+
+

简介

+

  Windows 12 网页版是一个开源项目,由星源原创,使用 HTML、CSS 和 JavaScript,在网络上模拟、创新操作系统。

+

  此项目已发布至 GitHub,点击此处查看

+

  若您对于该项目有任何意见或建议,请在 GitHub 上提交 issues,您的问题会被尽可能快地解决。

+

  原创作者星源,点击以了解详细

+

开源说明

+

  此项目是一个开源项目。此项目使用 EPL v2.0 开源许可。开源许可是具有法律效力的合同,请自觉遵守开源许可,尊重他人劳动。

+

  根据许可,你可以对该项目进行传播、分发、修改以及二次发布,包括个人和商业用途。

+

  但您必须给出源码来源,包括作者,项目链接等,必须使用相同的协议开源。

+

  若此项目的源码作为项目的一部分与你私有的源码一起发布时,你可以使用其它协议,但要声明 EPL 部分的内容并声明此部分继续遵循 EPL 协议

+

  不是在该项目基础上进行增加、修改的,仅参考源码的,不需要开源,但也仅供学习用途。

+

特别感谢

+

  特别感谢 @NB-Group

+

  NB-Group 为本项目的后端开发做出了重要贡献

+

  在此表示特别感谢!

+

贡献者

+

  感谢所有项目的贡献者(实时数据,计算方法:即为 Commits 次数)

+
+ + + + + + + +
+

Star

+

  感谢所有支持我们的人

+
+ + + + + + + +
+

其它

+

  此项目基于目前 Windows 版本创造,与微软的 Windows 12 正式版本不一致。

+

  此项目绝不附属于微软,且不应与微软操作系统或产品混淆,这也不是 Windows365 cloud PC。

+

  本项目中微软、Windows 和其他示范产品是微软公司的商标。

+
+
+
+

更新记录

+
+
v9.1.2 任务栏预览

+   -(更新来自 @fzlzjerry)
+   -加入任务栏窗口预览
+

+
v9.1.1 移动端适配

+   -(更新来自@NB-Group)
+   - 在移动端竖屏体验时将会提示“横屏以获得最佳体验”
+

+
v9.1.0 真正的在线新闻功能!

+   -(更新来自@lingbopro)
+   - 现在在小组件面板里有真正从网络实时获取的新闻!
+     (可能会出现卡顿,触发方式薛定谔)
+   - 顺便重构了一下新闻部分

+
+
v9.0.0 窗口背景材质超级大升级!

+   -(更新来自@NB-Group)
+   - 新材质(仿win11 Mica)非常高级!
+   - 将设置的UI更新了

+
+
v8.1.0 整理

+   -(更新来自@tjy-gitnub)
+   - 代码整理
+   - 修复一些问题

+
+
v8.0.0

+   -(更新来自@User782Tec)
+   -使用svg矢量图优化了任务管理器性能图表的绘制
+   -加入了半成品的Microsoft Store
+   -其他一些细微之处的更新

+
+
v7.4.2 AI Copilot 3.0!

+   -(更新来自@NB-Group)
+   -笑死,昨天刚修好就又寄了,这次的船新版本绝对稳定,(理论上)再也不会寄

+
+
v7.4.1 AI Copilot 2.0!

+   -(更新来自@NB-Group)
+   -修复了ai无法使用的问题

+
+
v7.4.0 AI Copilot!

+   -(更新来自@NB-Group)
+   -去掉一些奇怪的东西
+   -经过我114年的开发,AI Copilot 2.0诞生了!
+   -开源了AI后端的代码
+   -细节优化和修复

+
+
v7.3.7 细节更改

+   -加入一些奇怪的东西
+   -细节优化和修复

+
+
v7.3.6 语音识别球

+   (更新来自@NB-Group)
+   -增加语音识别球
+   -细节优化和修复

+
+
v7.3.5 整顿代码

+   -整顿代码,贡献者必须按本文件开头以及CONTRIBUTING.md的规范编辑代码,否则不予合并,感谢理解
+   -重绘新增的一些图标
+   -细节优化和修复

+
+
v7.3.4 Edge更新

+   (更新来自@lh11117)
+   -Edge 支持全屏
+   -Edge 支持收藏夹

+
+
v7.3.3 细节优化

+   细节优化

+
+
v7.3.2 细节更改

+   (更新来自 @tjy-gitnub )
+   -新增了部分本地化语言功能
+   -更新壁纸
+   -优化样式
+   -优化shutdown命令
+   -其他更新与优化
+   -修复了点击标签页无法切换焦点的问题
+   -各位可以抽时间去看看README.md,一些特殊情况

+
+
v7.3.1 Bug修复与细节优化

+   -删除changelog.md中重复的字(更新来自 @ZigaoWang )
+   -修复BIOS无法正确访问的问题(更新来自 @ludonghengsb )

+
+
v7.3.0 桌面小组件、Dock自动隐藏、计算器完善和Windows 更新

+   (更新来自 @User782Tec )
+   -新增了桌面小组件,可将小组件添加到桌面并调整位置
+   -新增了编辑模式,可快捷编辑小组件的位置,并提供了相关的快捷入口
+   -新增了窗口全屏且Dock不在使用时自动隐藏的功能
+   -为Microsoft Edge浏览器和文件资源管理器新增了后退/前进的功能
+   -又双叒叕优化计算器的精度问题与安全性问题
+   -重写更新机制,并完善 Windows 更新
+   -修复了文件资源管理器中右键文件失效的问题
+   -修复了文件资源管理器中无法正确显示文件夹中文件的问题
+   -更换了Python Editor的图标
+   -完善了开源说明
+   -其他细节与修复

+
+
v7.2.1 README更新、“关于”应用显示实时Star数量、个性化设置支持保存

+   (更新来自 @lh11117 )
+   -README更新
+   -“关于”应用显示实时Star数量
+   -个性化设置支持保存

+
+
v7.2.0 优化运行、添加Windows12应用、添加WSA

+   (更新来自 @lh11117 )
+   -优化运行
+   -添加Windows12应用
+   -添加WSA
+   -添加shutdown命令
+   -添加BIOS系统
+   -支持桌面图标删除
+   -更丰富的文件目录
+   -任务管理器支持置顶

+
+
v7.1.0 计算器进一步修复、离线页面的深色模式

+   (更新来自 @lh11117)
+   -进一步修复了计算器精度缺陷和接受输入非法内容的问题
+   -为Microsoft Edge浏览器的离线界面添加了深色模式版本
+   -其他一些细节修复

+
+
v7.0.2 计算器修复

+   (更新来自 @cong1223 和 @iewnfod)
+   -修复计算器计算加减乘除、平方、平方根等运算的精度问题(来自 @cong1223)
+   -只允许calc-input输入数字(来自 @iewnfod)

+
+
v7.0.1 资源管理器标签页、离线界面与新闻

+   -文件资源管理器的标签页(来自 @tjy-gitnub)
+   -新增了Microsoft Edge浏览器的离线界面(来自 @User782Tec)
+   -新增新闻(来自 @Nick-DL)
+   -优化部分UI
+   -细节优化和修复

+
+
v7.0.0 AI助手,新增多个应用与功能

+   -Windows 12 AI Copilot(@NB-Group提供api, @tjy-gitnub魔改)
+   -任务管理器(由 @User782Tec 提供)
+   -安全中心(由 @NB-Group 提供)
+   -适配文件系统(由 @NB-Group 提供)(别问我为啥现在才出,要问问@NB-Group)
+   -窗口云母(Mica)效果(由 @tjy-gitnub 提供,在设置中启用)
+   -文件资源管理器导航栏(由 @User782Tec 提供)
+   -任务管理器小组件(由 @User782Tec 提供)
+   -全新壁纸(由 @tjy-gitnub 提供)
+   -新增新闻(来自 @for-the-zero)
+   -修复了终端的灾难性bug
+   -优化部分UI
+   -细节优化和修复

+
+ + 更多 +
+
+
+
\ No newline at end of file diff --git a/apps/windows/calc.html b/apps/windows/calc.html new file mode 100644 index 0000000..c138b9f --- /dev/null +++ b/apps/windows/calc.html @@ -0,0 +1,76 @@ +
+
+ +

计算器

+
+ + + +
+
+
+ +
+
+
+ +
+ +
+ 𝑥² + √𝑥 + C + + + 7 + 8 + 9 + - + 4 + 5 + 6 + × + 1 + 2 + 3 + ÷ + . + 0 + + = +
+
+
\ No newline at end of file diff --git a/apps/windows/camera.html b/apps/windows/camera.html new file mode 100644 index 0000000..eac8fb2 --- /dev/null +++ b/apps/windows/camera.html @@ -0,0 +1,27 @@ +
+
+
+ +

相机

+
+ + + +
+
+
+ +
+
+
+ +
+
+
+
+
+
+ + +
+
\ No newline at end of file diff --git a/apps/windows/defender.html b/apps/windows/defender.html new file mode 100644 index 0000000..41a4a86 --- /dev/null +++ b/apps/windows/defender.html @@ -0,0 +1,221 @@ +
+
+
+ +

Windows 安全中心

+
+ + + +
+
+
+ +
+
+ +
+
+

安全性概览

+
+ + +
+
+
+
+
+
+

网络流量使用

+ 20.5 M +
+
+ + + + 30% + +
+
+
+
+
+
+

网络速度

+ 99 M/S +
+
+ + + + 99M/S + +
+
+
+
+
+
+

入侵病毒清除

+

所有病毒均被清除

+
+
+ + + + 100% + +
+
+
+
+
+
+
+
+

电脑受病毒攻击频率

+ 过去 30 天 +
+
+ +
+
+
+
+
+
+
+
+
+

网络通信比例

+ 这个月 +
+
+ + + + +
+
+ + 请求成功 + 80% +
+
+ + 请求失败 + 5% +
+
+ + 请求发出后无响应 + 19% +
+
+ + 含有病毒 + 1% +
+
+
+
+

请求记录

+ 今天 仅展示最近5次请求 +
+
+
+ Https-Get +

Get url : tjy-gitnub.github......

+
+
+
+
+ Https-Post +

Post url :api.github.com/r......

+
+
+
+
+ Https-Get +

Get url :cdn.jsdelivr.net/p......

+
+
+
+
+ Https-Get +

Get url :win12server.freeh......

+
+
+
+
+ Https-Get +

Get url :github.com/tjy-g......

+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/apps/windows/edge.html b/apps/windows/edge.html new file mode 100644 index 0000000..1b586fa --- /dev/null +++ b/apps/windows/edge.html @@ -0,0 +1,70 @@ +
+
+ +
+ +

Microsoft Edge

+
+
+
+ + + + + +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + 星源 + Bing + +
+ +
+
\ No newline at end of file diff --git a/apps/windows/explorer.html b/apps/windows/explorer.html new file mode 100644 index 0000000..4f46e25 --- /dev/null +++ b/apps/windows/explorer.html @@ -0,0 +1,73 @@ +
+
+
+ + +
+
+
+ + + +
+
+
+ +
+
+
+ + + +

+ +
+
+ +
+
+ 新建 +
+ + + + +
+ 排序方式 + 布局 +
+
+
+ +
+
+
+
+
+
\ No newline at end of file diff --git a/apps/windows/msstore.html b/apps/windows/msstore.html new file mode 100644 index 0000000..6bada03 --- /dev/null +++ b/apps/windows/msstore.html @@ -0,0 +1,138 @@ +
+
+
+ +

Microsoft Store

+
+ + + +
+
+
+ + + + + + + +
+ +
+ +
+
+
+
+
+
热门免费应用 >
+
+
+
+
+
+
+
Visual Studio Code
+
免费下载
+
+
+
+
开发
+
+
+
+
+
+
+
+
+
+
原神
+
免费下载
+
+
+
+
游戏
+
+
+
+
+
+
+
+
+
+
我的世界
+
免费下载
+
+
+
+
游戏
+
+
+
+
+
+
+
+
+
+
Krita
+
免费下载
+
+
+
+
设计
+
+
+
+
+
+
+
+
+
+
VirtualBox
+
免费下载
+
+
+
+
工具
+
+
+
+
+
+
+
+
+
+
LibreOffice
+
免费下载
+
+
+
+
办公
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/apps/windows/notepad.html b/apps/windows/notepad.html new file mode 100644 index 0000000..b47923b --- /dev/null +++ b/apps/windows/notepad.html @@ -0,0 +1,26 @@ +
+
+
+ +

记事本

+
+ + + +
+
+
+ +
+
+
+ 文件 + 编辑 + 格式 +
+
+

Type here...

+
+ 另存为 +
+
\ No newline at end of file diff --git a/apps/windows/pythonEditor.html b/apps/windows/pythonEditor.html new file mode 100644 index 0000000..1ff12ae --- /dev/null +++ b/apps/windows/pythonEditor.html @@ -0,0 +1,20 @@ +
+
+
+ +

Python Editor

+
+ + + + +
+
+
+ +
+
+
+
+
+
\ No newline at end of file diff --git a/apps/windows/run.html b/apps/windows/run.html new file mode 100644 index 0000000..6d77fdb --- /dev/null +++ b/apps/windows/run.html @@ -0,0 +1,26 @@ +
+
+ +

运行

+
+ +
+
+
+ +
+
+
+
+
Windows 将根据你所输入的名称,为你打开相应的程序、文件夹、文档或 Internet 资源。
+
+
+
打开:
+ +
+
+ 确定 + 取消 +
+
+
\ No newline at end of file diff --git a/apps/windows/setting.html b/apps/windows/setting.html new file mode 100644 index 0000000..9e4fbf4 --- /dev/null +++ b/apps/windows/setting.html @@ -0,0 +1,371 @@ +
+
+
+ +

设置

+
+ + + +
+
+
+ +
+
+ +
+ +
+

主页

+
+

+
+

Desktop-PingGai

+

瓶盖

+ 重命名 +
+
+
+


所有功能尽在 Microsoft 账户
登录后,即可在设备上使用你最喜爱的 Microsoft 应用和服务。可以备份设备、让设备更安全,并使用 Microsoft 365 应用版和云储存空间。

+
+ 登录 +
+
+
+

推荐设置
最近使用的和常用的设置

+ +
+
+

蓝牙设备
管理、添加和删除设备

+
+

蓝牙

+
+
+
+

个性化设备

+
+

个性化

+
+
+
+
+ + + + + + + + +
+

个性化

+
+ + +
+

颜色

+

设置 Windows 的主题色

+
+
+
+

当前颜色

+
+
+

自定义颜色

+
+
+ +
+
+
+ + 应用 +
+
+ +

主题

设置 Windows 的主题 想要上传自己的主题?

+
+ + + + + + +
+

圆角

设置系统界面中是否启用圆角

+
+ +
+
+

动画

系统界面元素过渡动画

+
+ +
+
+

阴影

为系统界面元素添加阴影效果

+
+ +
+
+

多窗口透明

为所有窗口开启透明效果,而不是仅用于焦点窗口 详细

+
+ +
+
+

Mica效果 (实验)

为焦点窗口开启mica效果 反馈

+
+ +
+
+

开机音乐

是否启用开机音乐

+
+ +
+
+

语音输入球

是否启用语音输入球

+
+ +
+
+
+
+ + + + + + + + + + + + +
+

隐私和安全性

+
+ + +
+

清除桌面图标

+

这将清除用户自定义的所有图标

+
+
+ + +
+

Token 管理

+

添加或删除 GitHub Access Token

+
+ +
+
+ +
+
保存 Token
+
清除 Token
+
查看 Token
+
+
您可以在这里填入您的Github Access Token来提高Github API限制访问次数,即可以更好地使用 Windows 更新、主题等功能。您的 Token 仅会存放在本地浏览器中,该数据不会传输至服务端,也更不会外泄,但请您妥善保管好自己的 Token。
+
+
+
+
+

Windows 更新

+
+ +
+
+

正在检查更新...

+

+
+ +
+
+
+

正在检查更新...

+

历史版本

查看历史版本功能

+

下载完整内容

当更新或系统出现问题,使用此项下载最新完整内容

+

自动更新

设置是否启用自动更新

+
+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/apps/windows/taskmgr.html b/apps/windows/taskmgr.html new file mode 100644 index 0000000..656bc3a --- /dev/null +++ b/apps/windows/taskmgr.html @@ -0,0 +1,412 @@ +
+
+
+ + 任务管理器 +
+ +
+
+ + + +
+
+
+ +
+
+ +
+
+
+

进程

+
+
+ + + + + + + + + + + + + +
进程名称
11.4%
CPU
11.4%
内存
11.4%
硬盘
电源使用情况
+
+
+
+

无筛选结果
请尝试使用其他名称、发布者或 PID 键入以进行筛选。

+
+ 重置筛选器 +
+
+
+
+

性能

+
+
+
+
+
+
+ +
+
+
CPU
+
+
11.4%
+
10GHz
+
+
+
+
+
+ +
+
+
内存
+
+
11.4 / 100GB
+
11.4%
+
+
+
+
+
+ +
+
+
磁盘
+
+
SSD
+
1.14%
+
+
+
+
+
+ +
+
+
Wi-Fi
+
+
WLAN
+
发送: 1145 接收: 1145 Mbps
+
+
+
+
+
+ +
+
+
GPU 0
+
+
NBidia GeForce RTX 4090Ti
+
1%
+
+
+
+
+
+
+
+
CPU
+
The Wandering Earth (R) NB (R) Quantum Chip 550W @ 8192
+
+
+
% 利用率
+
100%
+
+
+ + +
+
+
60 秒
+
0
+
+
+
+
利用率
11.4%
+
速度
1024.53 GHz
+
进程
1145
+
线程
114514
+
句柄
114514191918
+
正常运行时间
0:11:45:14
+
+
+ + + + + + + + + + + +
基准速度: 10.0 GHz
插槽: 1
内核: 32
逻辑处理器: 32
虚拟化: 已启用
L1缓存: 512 MB
L2缓存: 2.1 GB
L3缓存: 5.5 GB
+
+
+
+
+
+
内存
+
100GB
+
+
+
内存使用量
+
100GB
+
+
+ + +
+
+
60 秒
+
0
+
+
+
内存组合
+
+
+
+
+
+
+
使用中(已压缩)
11.4 GB
+
可用
88.6 GB
+
已提交
12 / 100 GB
+
已缓存
5.5 GB
+
分页缓冲池
1 GB
+
非分页缓冲池
365 MB
+
+
+ + + + + + + +
速度: 4514MHz
已使用插槽: 2 / 2
外形规格: Row of chips
为硬件保留的内存:200MB
+
+
+
+
+
+
磁盘 0 (C: D:)
+
NB++ 360G
+
+
+
活动时间
+
100%
+
+
+ + +
+
+
60 秒
+
0
+
+
+
磁盘传输速率
+
100 MB/秒
+
+
+ + +
+
+
+
活动时间
1.14%
+
平均响应时间
0.014 毫秒
+
读取速度
14 KB/秒
+
写入速度
114 KB/秒
+
+
+ + + + + + + + +
容量: 359 GB
已格式化: 359 GB
系统磁盘:
页面文件:
类型: SSD
+
+
+
+
+
+
Wi-Fi
+
NB Wireless LAN 802.11ac
+
+
+
吞吐量
+
100 Mbps
+
+
+ + +
+
+
60 秒
+
0
+
+
+
+
发送
114 Mbps
+
接收
114 Mbps
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
适配器名称: WLAN
SSID: NB Network
连接类型: 802.11ac
IPv4地址: 114.514.19.81
IPv6地址: 2CBB::2CBB:2CBB:2CBB:2CBB
信号强度: + + + +
+
+
+
+
+
+
GPU
+
NBidia GeForce RTX 9090Ti
+
+
+ +
+
3D
+
+ + +
+
+
+
Copy
+
+ + +
+
+
+
Video Decode
+
+ + +
+
+
+
Video Processing
+
+ + +
+
+
+
+
专用 GPU 内存利用率
+
16 GB
+
+
+ + +
+
+
共享 GPU 内存利用率
+
32 GB
+
+
+ + +
+
+
+
利用率
1.1%
+
专用 GPU 内存
0.1 GB / 2 GB
+
共享 GPU 内存
1.1 GB / 16 GB
+
GPU 内存
1.2 / 18 GB
+
+
+ + + + + + + + + + + + + + + + + + + +
驱动程序版本: 11.45.14.19
驱动程序日期: 2025 / 1 / 5
DirectX 版本12 (FL 12.1)
物理位置: PCI 总线 0、设备 14 、功能 0
+
+
+
+
+
+
+
+
+

设置

+
+
+
+

窗口管理

+ +
+
+
+
+
\ No newline at end of file diff --git a/apps/windows/terminal.html b/apps/windows/terminal.html new file mode 100644 index 0000000..b5bae42 --- /dev/null +++ b/apps/windows/terminal.html @@ -0,0 +1,23 @@ +
+
+
+ +

终端

+
+ + + +
+
+
+ +
+ +
+
				Microsoft Windows [版本 12.0.39035.7324]
+				(c) Microsoft Corporation。保留所有权利。
+			
+

+			
C:\Windows\System32> 
+
+
\ No newline at end of file diff --git a/apps/windows/whiteboard.html b/apps/windows/whiteboard.html new file mode 100644 index 0000000..0156577 --- /dev/null +++ b/apps/windows/whiteboard.html @@ -0,0 +1,72 @@ +
+
+
+ +

Whiteboard

+
+ + + + +
+
+
+ +
+
+ + +
+
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ +
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/desktop.js b/desktop.js index b638e52..6e0bd02 100755 --- a/desktop.js +++ b/desktop.js @@ -2203,19 +2203,35 @@ let apps = { apps.explorer.rename(path + '/' + name_); }, rename: (path) => { - var pathl = path.split('/'); - var name = pathl[pathl.length - 1]; + const pathl = path.split('/'); + const name = pathl[pathl.length - 1]; apps.explorer.old_name = name; pathl.pop(); let tmp = apps.explorer.path; pathl.forEach(name => { - tmp = tmp['folder'][name]; + tmp = tmp.folder[name]; }); - let element = document.querySelector('#' + apps.explorer.get_file_id(name)); - let img = element.querySelector('img').outerHTML; - element.innerHTML = img; - let input = document.createElement('input'); - // input.style.cssText = ''; + + const elementId = apps.explorer.get_file_id(name); + if (!elementId) { + console.warn(`Could not find element to rename: ${name}`); + return; + } + + const element = document.querySelector(`#${elementId}`); + if (!element) { + console.warn(`Could not find element with id: ${elementId}`); + return; + } + + const img = element.querySelector('img'); + if (!img) { + console.warn(`Could not find img element in: ${elementId}`); + return; + } + + element.innerHTML = img.outerHTML; + const input = document.createElement('input'); input.id = 'new_name'; input.className = 'input'; input.value = apps.explorer.old_name; @@ -2223,22 +2239,24 @@ let apps = { setTimeout(() => { $('#new_name').focus(); $('#new_name').select(); }, 200); element.classList.add('change'); - var input_ = document.getElementById('new_name'); - input_.addEventListener('keyup', function (event) { - if (event.key === 'Enter') { - event.preventDefault(); - apps.explorer.del_select(); - } - }); + const input_ = document.getElementById('new_name'); + if (input_) { + input_.addEventListener('keyup', (event) => { + if (event.key === 'Enter') { + event.preventDefault(); + apps.explorer.del_select(); + } + }); + } }, get_file_id: (name) => { //只能找到已经打开了的文件夹的元素id - var elements = document.getElementsByClassName('item'); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - if (element.innerText == name) { + const elements = document.getElementsByClassName('item'); + for (const element of elements) { + if (element.innerText === name) { return element.id; } } + return null; // Return null if element not found }, del: (path) => { var pathl = path.split('/'); @@ -2264,16 +2282,19 @@ let apps = { }); }, traverseDirectory(dir, name) { - if (dir['file'] == null && dir['folder'] == null) + if (!dir || !dir.folder || !dir.file) { return false; - for (var i = 0; i < dir['file'].length; i++) { - if (dir['file'][i]['name'] == name) { + } + // Check files + for (let i = 0; i < dir.file.length; i++) { + if (dir.file[i].name === name) { return true; } } - const keys = Object.keys(dir['folder']); - for (var i = 0; i < keys.length; i++) { - if (keys[i] == name) { + // Check folders + const keys = Object.keys(dir.folder); + for (let i = 0; i < keys.length; i++) { + if (keys[i] === name) { return true; } } @@ -4428,18 +4449,6 @@ document.getElementsByTagName('body')[0].onload = () => { } setIcon();//加载桌面图标 - // 所以这个东西为啥要在开机的时候加载? - // 不应该在python.init里面吗? - // (async function () { - // apps.python.pyodide = await loadPyodide(); - // apps.python.pyodide.runPython(` - // import sys - // import io - // `); - // })(); - // apps.pythonEditor.load(); - // apps.notepadFonts.load(); - // apps.whiteboard.load(); document.querySelectorAll('.window').forEach(w => { let qw = $(w), wc = w.classList[1]; // window: onmousedown="focwin('explorer')" ontouchstart="focwin('explorer')" @@ -4456,7 +4465,36 @@ document.getElementsByTagName('body')[0].onload = () => { qw.attr('onclick', `let os=$(this).offset();stop(event);return showcm({clientX:os.left-5,clientY:os.top+this.offsetHeight+3},'titbar','${wc}')`); qw.mousedown(stop); $(`.window.${wc}>.titbar>div>.wbtg`).mousedown(stop); + + // Add window dragging initialization + const titbar = qw.parent()[0]; + titbar.addEventListener('mousedown', (e) => { + if ($('.taskmgr>.titbar>div>input').is(':focus')) { + return; + } + let x = window.getComputedStyle(w, null).getPropertyValue('left').split('px')[0]; + let y = window.getComputedStyle(w, null).getPropertyValue('top').split('px')[0]; + if (y != 0) { + bfLeft = x; + bfTop = y; + } + deltaLeft = e.clientX - x; + deltaTop = e.clientY - y; + page.onmousemove = win_move.bind(w); + }); + titbar.addEventListener('touchstart', (e) => { + let x = window.getComputedStyle(w, null).getPropertyValue('left').split('px')[0]; + let y = window.getComputedStyle(w, null).getPropertyValue('top').split('px')[0]; + if (y != 0) { + bfLeft = x; + bfTop = y; + } + deltaLeft = e.targetTouches[0].clientX - x; + deltaTop = e.targetTouches[0].clientY - y; + page.ontouchmove = win_move.bind(w); + }); }); + document.querySelectorAll('.window>div.resize-bar').forEach(w => { for (const n of ['top', 'bottom', 'left', 'right', 'top-right', 'top-left', 'bottom-right', 'bottom-left']) { w.insertAdjacentHTML('afterbegin', `
`); diff --git a/package.json b/package.json new file mode 100644 index 0000000..56f03cc --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "win12", + "version": "1.0.0", + "description": "Windows 12 web version", + "type": "module", + "scripts": { + "extract-windows": "node scripts/extract_windows.js" + }, + "dependencies": { + "cheerio": "^1.0.0-rc.12" + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..4106375 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,186 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + cheerio: + specifier: ^1.0.0-rc.12 + version: 1.0.0 + +packages: + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + undici@6.21.1: + resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} + engines: {node: '>=18.17'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + +snapshots: + + boolbase@1.0.0: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.1 + whatwg-mimetype: 4.0.0 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.1.0: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + entities@4.5.0: {} + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.2.1 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.2.1 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + safer-buffer@2.1.2: {} + + undici@6.21.1: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} diff --git a/scripts/extract_windows.js b/scripts/extract_windows.js new file mode 100644 index 0000000..6bc5fc3 --- /dev/null +++ b/scripts/extract_windows.js @@ -0,0 +1,55 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import * as cheerio from 'cheerio'; + +// Read desktop.html +const desktopHtml = fs.readFileSync('desktop.html', 'utf8'); +const $ = cheerio.load(desktopHtml); + +// Create apps/windows directory if it doesn't exist +const windowsDir = path.join('apps', 'windows'); +if (!fs.existsSync(windowsDir)) { + fs.mkdirSync(windowsDir, { recursive: true }); +} + +// List of app names to extract +const appNames = [ + 'setting', + 'explorer', + 'calc', + 'about', + 'notepad', + 'terminal', + 'edge', + 'camera', + 'pythonEditor', + 'run', + 'whiteboard', + 'defender', + 'taskmgr', + 'msstore', + 'copilot', + 'recognition' +]; + +// Extract each app window +for (const appName of appNames) { + const windowElement = $(`.window.${appName}`); + if (windowElement.length > 0) { + // Get the HTML of the window element + const windowHtml = windowElement.toString(); + + // Write to separate file + const filePath = path.join(windowsDir, `${appName}.html`); + fs.writeFileSync(filePath, windowHtml); + console.log(`Extracted ${appName} window to ${filePath}`); + + // Remove the window from desktop.html + windowElement.remove(); + } else { + console.log(`Warning: Could not find window for ${appName}`); + } +} + +// Write the modified desktop.html back +fs.writeFileSync('desktop.html', $.html()); \ No newline at end of file