重新整理仓库

This commit is contained in:
一二三 2023-12-11 22:55:49 +08:00
parent 1157a65fea
commit e38b19c8ef
7 changed files with 318 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/.build/
dist/
.build/default.init.aardio
.build/mp.lock

6
default.aproj Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<project ver="35" name="SimpleNotes-aar" libEmbed="true" icon="..." ui="win" output="SimpleNotes-aar.exe" CompanyName="单位名称" FileDescription="SimpleNotes-aar" LegalCopyright="Copyright (C) 作者 2023" ProductName="SimpleNotes-aar" InternalName="SimpleNotes-aar" FileVersion="0.0.0.1" ProductVersion="0.0.0.1" publishDir="/dist/" dstrip="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true"/>
<folder name="窗体文件" path="dlg" comment="目录" embed="true"/>
</project>

17
lib/config.aardio Normal file
View File

@ -0,0 +1,17 @@
//config 配置文件
import fsys.config;
config = fsys.config("/config/");
//config = fsys.config( io.appData("/软件作者/应用程序名/") );
//不需要序列化的配置名字前请添加下划线
namespace config {
__appName = "应用程序名";
__website = "http://www.aardio.com/";
}
/**intellisense(config)
__appName = 应用程序名
__website = 官方网站
saveAll() = 写入所有配置到文件
? = 获取值时指定不以下划线开始的配置表名称,\n返回一个可自动序列化到同名配置文件的表对象。\n如果此对象名以下划线开始则可以正常读写值不会序列化为配置文件。\n否则不能对此对象直接赋值只能对配置表对象的成员赋值。\n\n配置表可自动自文件加载,退出线程前自动序列化并存入文件。\n仅序列化以字符串、数值为键的元素\n仅序列化值为字符串、数值、buffer 以及定义了 _serialize 元方法的成员。\n循环引用的值转换为 null序列化时忽略成员函数\n!fsys_table.
end intellisense**/

291
main.aardio Normal file
View File

@ -0,0 +1,291 @@
//无边框窗口
import win.ui;
/*DSG{{*/
var winform = win.form(text="Edge 浏览器控件 - web.view";right=759;bottom=469;border="none")
winform.add()
/*}}*/
import fsys.update.simpleMain;
if( fsys.update.simpleMain(
"SimpleNotes-aar",
"https://begin2019.com:3000/OTAHub/SimpleNotes-aar/raw/branch/main/version.txt", /*网址也可以改用目录名并使用服务端代码动态返回version.txt*/
"/download/update-files", /*绿色软件建议改为 io.appData("/软件厂商名/软件名字/update-files") */
function(version,description,status){
/*
version参数包含最新版本号
description包含最新版本更新说明
status参数值见下面的列表
"ready": 下载已完成并准备更新,
"updated": 已更新到新版本并准备启动新版
"complete": 当前已更新并已启动新版本主程序,所有操作已完成
"latest": 已经是最新版不需要更新
"failed": 出错了,description参数为错误信息
这个回调函数不是必须的,
在此检测更新代码之前或之后都可以在界面线程调用
fsys.update.simpleMain.onStatusChanged 订阅更新状态变更信息。
该认阅回调函数的参数与上面的回调参数相同。
*/
winform.msgbox(version);
winform.msgbox(description);
winform.msgbox(status);
} )){
return 0; //必须退出 main.aardio 以启动更新
}
import web.view;
var wb = web.view(winform);
//导出为 Javascript 中的 aardio 对象
wb.external = {
close = function(){
winform.close();
};
hitCaption = function(){
winform.hitCaption();
};
hitMin = function(){
winform.hitMin();
};
hitMax = function(){
return winform.hitMax();
};
upgrade = function(){
fsys.update.simpleMain.checkUpdate(true);
}
}
// wb.go("/res/index.html"); //直接打开资源目录下的文件
wb.html = /**
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
#title-bar {
height: 32px;
padding: 0px;
margin: 0px;
}
#title-bar .caption {
position: fixed;
top: 0px;
left: 0px;
width: 100%;
padding-left: 10px;
color: #ADADAD;
line-height: 32px;
font-size: 14px;
cursor: default;
user-select: none;
}
#title-bar .buttons {
position: fixed;
top: 1px;
right: 1px;
}
#title-bar button {
font: 14px Marlett;
color: #000000; /* 改为黑色 */
background-color: transparent;
border: none;
height: 28px;
width: 28px;
vertical-align: middle;
}
#update-btn {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAPsSURBVEhL3VR9aJVlFD/ned93970f3SBBJlQ6SZIwolZGm7E7qdTRH11ifUiYN2tSRNlWrdYgd0cSOKcrKBqFZU6SPkSIW1nJbk2lbLZQRDJiEEp/JIyw3O593uf0e9691K5bi/yvfvBw33PO757znHOec+g/D45+p+HSdeYSx6c1JLQM4sWgnmKRj+bP5feLXawnWf+MGQMsXm+yhuhJo+hVFfCoJ+KVHNJgL1OGmjzhh47184mIPiumBbjuQXO7FlrnMr1sDOUN00mwTiGTJQ6RIHAPaD1eQHd986b66apHJBUbl/S3l/HP1MUwV6IiQG2LJLxx+RzKdmHqBrvdNbQWrA8O7lD7rl9rbnCF+oS4Q4l0QH8OnJgQjSF4jRLadWAHvwS3UE1CRb8h0mflDj+gd+KGnotpak9q6kWANw7W8GfWjhsfjmvalihLY5Who46mZ796S61MaTqUNNTlGapuXC0bQ2cRKgLA+Y2+oRFfU5AKaFU8oPwXA+rw1NR/TfIeP+CG4k7VNjSgjlsdUtjvlWl1okzH8f+6FVkzLyQDFQHgMI5zxmduxe12JTQVI9OfGO7nMm6/IRJDJErUCuev4YIPIMMPL3KoPjL91YPmZnGqStKLiJ+8vVcVIvW/xn1Z8xgacHpgj3rPymEGLU1mZfqcDCE91zE0bnUXCmSQRTZVeHDh5fnRVcam00mGNimmh7Xi1lcKeHIXgJZa8bxqWQ5fKxyhhU6K7uWnbjMFtDCPeJs1U27rPvVDxA/xfINUj7u0OBIrEGg60VOcvEzHcrNUO7TFvk+UZQRD+rUKaImKlyiJtOrQoN5pzpeatCjZi6eamekkYLMcy8V8bImXOLv5U3VzleYzyQkqxQwmH85d3/BZ1G1O6HUK/Cq6P16meWktDTMda7Mcy4Uf6iryL/Y7FciRWECXwx7AOY1Smb5HXt19dYbSHu/MFTlsNN77HOjXPDHEg1Y+H1vrJYN6Z+w3KjDSd5NsVCxHNIYU/WzDqrnF9YQ6XJHdTomf0a4sGvuNfPDDAJgDQi1DPP2lWc+KwwHC8zj9Yj33YyAJyy/E2K38+NyPpRlL4kqsjTY0OW8cjKg1vn6tmY/ltgnCApxS+I9JLAiYc7lhHuzbb7pd4k6rLLO8sKFRdW6vlYwjsh2qUau3ECEn3FFM+dywOhAG+DvsvhopKxps/o4HCwUTw64ZtvqyotqmJjXx7jWSQRkydx/liv0zFRWr4nzYEtkyWFiHNRN0jz322+qszXJmw6wB/EACvyy2JyGuuFMdsycSydosJxJnxKwlOrTQLNKKtoGUiFQVwFD9HmDxZX5UJyPV/w5EfwA9C5hdvKK2PgAAAABJRU5ErkJggg==');
background-size: cover; /* 让图片填充整个按钮 */
}
#update-btn:hover {
opacity: 0.8; /* 在悬停时使图片稍微透明 */
}
#update-btn:active {
opacity: 0.6; /* 在点击时使图片更透明 */
}
#min-btn:hover {
background-color: #b6b4b4; /* 蓝色 */
}
#min-btn:active {
background-color: #979696; /* 深蓝色 */
}
#max-btn:hover {
background-color: #b6b4b4; /* 红色 */
}
#max-btn:active {
background-color: #979696/* 深红色 */
}
#close-btn:hover {
background-color: #f44336; /* 灰色 */
}
#close-btn:active {
background-color: #d32f2f; /* 深灰色 */
}
body {
font-family: 'Microsoft YaHei', Arial, sans-serif;
background-color: rgb(255, 255, 255);
margin: 0;
padding: 0;
height: 100vh;
width: 100vw;
overflow: hidden;
}
.note-container {
background-color: #fff;
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
width: 100vw;
height: 100vh;
padding: 20px;
border-radius: 8px;
box-sizing: border-box;
overflow-y: auto; /* 当内容超出容器时,显示纵向滚动条 */
}
.note-input {
width: 100%;
padding: 10px;
margin-bottom: 10px;
box-sizing: border-box;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
resize: vertical;
font-family: 'Microsoft YaHei', Arial, sans-serif;
}
.note-list {
list-style: none;
padding: 0;
margin: 0;
}
.note-item {
background-color: #f9f9f9;
padding: 10px;
margin-bottom: 10px;
border-radius: 4px;
box-sizing: border-box;
word-wrap: break-word;
white-space: pre-line;
}
.delete-btn {
background-color: #ff5858;
color: #fff;
border: none;
padding: 5px 10px;
border-radius: 4px;
cursor: pointer;
}
.note-date {
color: #888;
font-size: 12px;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<div id="title-bar">
<div class="caption" onmousedown="aardio.hitCaption()">SimpleNotes</div>
<div class="buttons">
<button id="update-btn" onclick="aardio.upgrade()"></button>
<button id="min-btn" onclick="aardio.hitMin()">0</button>
<button id="max-btn" onclick="aardio.hitMax()">1</button>
<button id="close-btn" onclick="aardio.close()">r</button>
</div>
</div>
<div id="main">
<div class="note-container">
<textarea id="noteInput" class="note-input" placeholder="添加便签..."></textarea>
<ul id="noteList" class="note-list"></ul>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
const noteInput = document.getElementById('noteInput');
const noteList = document.getElementById('noteList');
noteInput.addEventListener('keydown', function (event) {
if (event.key === 'Enter' && !event.shiftKey && noteInput.value.trim() !== '') {
addNote();
event.preventDefault();
}
});
function addNote() {
const noteText = noteInput.value.trim();
const listItem = document.createElement('li');
listItem.className = 'note-item';
// 获取当前日期和时间
const now = new Date();
const dateTime = now.toLocaleString();
// 获取星期
const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
const weekDay = weekDays[now.getDay()];
// 获取第几周
const start = new Date(now.getFullYear(), 0, 0);
const diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
const oneDay = 1000 * 60 * 60 * 24;
const day = Math.floor(diff / oneDay);
const week = Math.ceil(day / 7);
listItem.innerHTML = `<div class="note-date">w${week} ${weekDay} ${dateTime}</div> <!-- 添加日期、时间、星期和第几周 -->
<div>${noteText}</div>
<button class="delete-btn" onclick="deleteNote(this)">删除</button>
`;
noteList.prepend(listItem);
noteInput.value = '';
}
window.deleteNote = function (btn) {
const listItem = btn.parentNode;
noteList.removeChild(listItem);
};
});
</script>
</body>
</html>
**/
//添加阴影边框
import win.ui.shadow;
win.ui.shadow(winform);
//设置窗口缩放范围
import win.ui.minmax;
win.ui.minmax(winform);
//切换最大化、还原按钮
winform.adjust = function( cx,cy,wParam ) {
if( wParam == 0x2/*_SIZE_MAXIMIZED*/ ){
wb.doScript(`document.getElementById("max-btn").innerText="2";`)
}
elseif( wParam == 0x0/*_SIZE_RESTORED*/ ){
wb.doScript(`document.getElementById("max-btn").innerText="1";`)
}
};
winform.show();
win.loopMessage();