mirror of
https://github.com/kenzok8/small-package.git
synced 2026-02-06 23:08:07 +08:00
update 2025-09-23 16:29:53
This commit is contained in:
@@ -1050,6 +1050,8 @@
|
|||||||
'clearJsonTooltip' => 'JSON-Datei löschen',
|
'clearJsonTooltip' => 'JSON-Datei löschen',
|
||||||
'traffic_monitor_title' => 'OpenWrt Echtzeit-Verkehrsmonitor',
|
'traffic_monitor_title' => 'OpenWrt Echtzeit-Verkehrsmonitor',
|
||||||
'subscriptionClearedSuccess' => 'Abonnementinformationen erfolgreich gelöscht',
|
'subscriptionClearedSuccess' => 'Abonnementinformationen erfolgreich gelöscht',
|
||||||
|
'upToDate' => 'Aktuell',
|
||||||
|
'updateAvailable' => 'Update verfügbar',
|
||||||
'save_file_error' => 'Fehler beim Speichern der Datei: {message}'
|
'save_file_error' => 'Fehler beim Speichern der Datei: {message}'
|
||||||
],
|
],
|
||||||
'fr' => [
|
'fr' => [
|
||||||
@@ -2106,6 +2108,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'Moniteur de trafic OpenWrt en temps réel',
|
'traffic_monitor_title' => 'Moniteur de trafic OpenWrt en temps réel',
|
||||||
'subscriptionClearedSuccess' => "Informations d'abonnement effacées avec succès",
|
'subscriptionClearedSuccess' => "Informations d'abonnement effacées avec succès",
|
||||||
|
'upToDate' => 'À jour',
|
||||||
|
'updateAvailable' => 'Mise à jour disponible',
|
||||||
'save_file_error' => 'Erreur de sauvegarde : {message}'
|
'save_file_error' => 'Erreur de sauvegarde : {message}'
|
||||||
],
|
],
|
||||||
'zh' => [
|
'zh' => [
|
||||||
@@ -3050,6 +3054,8 @@
|
|||||||
'clearJsonTooltip' => '清空 JSON 文件',
|
'clearJsonTooltip' => '清空 JSON 文件',
|
||||||
'traffic_monitor_title' => 'OpenWrt 实时流量监控',
|
'traffic_monitor_title' => 'OpenWrt 实时流量监控',
|
||||||
'subscriptionClearedSuccess' => '订阅信息已清空成功',
|
'subscriptionClearedSuccess' => '订阅信息已清空成功',
|
||||||
|
'upToDate' => '已最新',
|
||||||
|
'updateAvailable' => '有更新',
|
||||||
'save_file_error' => '保存文件出错:{message}'
|
'save_file_error' => '保存文件出错:{message}'
|
||||||
],
|
],
|
||||||
'en' => [
|
'en' => [
|
||||||
@@ -4181,6 +4187,8 @@
|
|||||||
'clearJsonTooltip' => 'Clear JSON file',
|
'clearJsonTooltip' => 'Clear JSON file',
|
||||||
'traffic_monitor_title' => 'OpenWrt Real-time Traffic Monitor',
|
'traffic_monitor_title' => 'OpenWrt Real-time Traffic Monitor',
|
||||||
'subscriptionClearedSuccess' => 'Subscription information cleared successfully',
|
'subscriptionClearedSuccess' => 'Subscription information cleared successfully',
|
||||||
|
'upToDate' => 'Up-to-date',
|
||||||
|
'updateAvailable' => 'Update Available',
|
||||||
'save_file_error' => 'Save error: {message}'
|
'save_file_error' => 'Save error: {message}'
|
||||||
],
|
],
|
||||||
'hk' => [
|
'hk' => [
|
||||||
@@ -5213,6 +5221,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'OpenWrt 即時流量監控',
|
'traffic_monitor_title' => 'OpenWrt 即時流量監控',
|
||||||
'subscriptionClearedSuccess' => '訂閱信息已清空成功',
|
'subscriptionClearedSuccess' => '訂閱信息已清空成功',
|
||||||
|
'upToDate' => '已最新',
|
||||||
|
'updateAvailable' => '有更新',
|
||||||
'save_file_error' => '儲存檔案時發生錯誤:{message}'
|
'save_file_error' => '儲存檔案時發生錯誤:{message}'
|
||||||
],
|
],
|
||||||
'ko' => [
|
'ko' => [
|
||||||
@@ -6283,6 +6293,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'OpenWrt 실시간 트래픽 모니터',
|
'traffic_monitor_title' => 'OpenWrt 실시간 트래픽 모니터',
|
||||||
'subscriptionClearedSuccess' => '구독 정보가 성공적으로 삭제되었습니다',
|
'subscriptionClearedSuccess' => '구독 정보가 성공적으로 삭제되었습니다',
|
||||||
|
'upToDate' => '최신',
|
||||||
|
'updateAvailable' => '업데이트 가능',
|
||||||
'save_file_error' => '파일 저장 오류: {message}'
|
'save_file_error' => '파일 저장 오류: {message}'
|
||||||
],
|
],
|
||||||
'ja' => [
|
'ja' => [
|
||||||
@@ -7340,6 +7352,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'OpenWrt リアルタイムトラフィック監視',
|
'traffic_monitor_title' => 'OpenWrt リアルタイムトラフィック監視',
|
||||||
'subscriptionClearedSuccess' => 'サブスクリプション情報が正常にクリアされました',
|
'subscriptionClearedSuccess' => 'サブスクリプション情報が正常にクリアされました',
|
||||||
|
'upToDate' => '最新',
|
||||||
|
'updateAvailable' => '更新あり',
|
||||||
'save_file_error' => 'ファイルの保存中にエラーが発生しました:{message}'
|
'save_file_error' => 'ファイルの保存中にエラーが発生しました:{message}'
|
||||||
],
|
],
|
||||||
'ru' => [
|
'ru' => [
|
||||||
@@ -8420,6 +8434,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'Монитор трафика OpenWrt в реальном времени',
|
'traffic_monitor_title' => 'Монитор трафика OpenWrt в реальном времени',
|
||||||
'subscriptionClearedSuccess' => 'Информация о подписках успешно очищена',
|
'subscriptionClearedSuccess' => 'Информация о подписках успешно очищена',
|
||||||
|
'upToDate' => 'Актуально',
|
||||||
|
'updateAvailable' => 'Доступно обновление',
|
||||||
'save_file_error' => 'Ошибка сохранения файла: {message}'
|
'save_file_error' => 'Ошибка сохранения файла: {message}'
|
||||||
],
|
],
|
||||||
'ar' => [
|
'ar' => [
|
||||||
@@ -9473,6 +9489,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'مراقب حركة المرور OpenWrt في الوقت الفعلي',
|
'traffic_monitor_title' => 'مراقب حركة المرور OpenWrt في الوقت الفعلي',
|
||||||
'subscriptionClearedSuccess' => 'تم مسح معلومات الاشتراك بنجاح',
|
'subscriptionClearedSuccess' => 'تم مسح معلومات الاشتراك بنجاح',
|
||||||
|
'upToDate' => 'محدث',
|
||||||
|
'updateAvailable' => 'تحديث متاح',
|
||||||
'save_file_error' => 'خطأ في حفظ الملف: {message}'
|
'save_file_error' => 'خطأ في حفظ الملف: {message}'
|
||||||
],
|
],
|
||||||
'es' => [
|
'es' => [
|
||||||
@@ -10567,6 +10585,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'Monitor de tráfico OpenWrt en tiempo real',
|
'traffic_monitor_title' => 'Monitor de tráfico OpenWrt en tiempo real',
|
||||||
'subscriptionClearedSuccess' => 'Información de suscripción borrada con éxito',
|
'subscriptionClearedSuccess' => 'Información de suscripción borrada con éxito',
|
||||||
|
'upToDate' => 'Actualizado',
|
||||||
|
'updateAvailable' => 'Actualización disponible',
|
||||||
'save_file_error' => 'Error al guardar: {message}'
|
'save_file_error' => 'Error al guardar: {message}'
|
||||||
],
|
],
|
||||||
'vi' => [
|
'vi' => [
|
||||||
@@ -11657,6 +11677,8 @@
|
|||||||
|
|
||||||
'traffic_monitor_title' => 'Giám sát lưu lượng OpenWrt thời gian thực',
|
'traffic_monitor_title' => 'Giám sát lưu lượng OpenWrt thời gian thực',
|
||||||
'subscriptionClearedSuccess' => 'Thông tin đăng ký đã được xóa thành công',
|
'subscriptionClearedSuccess' => 'Thông tin đăng ký đã được xóa thành công',
|
||||||
|
'upToDate' => 'Đã mới nhất',
|
||||||
|
'updateAvailable' => 'Có bản cập nhật',
|
||||||
'save_file_error' => 'Lỗi khi lưu: {message}'
|
'save_file_error' => 'Lỗi khi lưu: {message}'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ $razordVersion = getRazordVersion();
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body text-center">
|
<div class="card-body text-center">
|
||||||
<h5 class="card-title" data-translate="ui_panel_title">Ui Panel</h5>
|
<h5 class="card-title" data-translate="ui_panel_title">Ui Panel</h5>
|
||||||
<p class="card-text"><?php echo htmlspecialchars($uiVersion); ?></p>
|
<p id="uiVersion" class="card-text"><?php echo htmlspecialchars($uiVersion); ?></p>
|
||||||
<div class="d-flex justify-content-center gap-2 mt-3">
|
<div class="d-flex justify-content-center gap-2 mt-3">
|
||||||
<button class="btn btn-pink" id="checkUiButton">
|
<button class="btn btn-pink" id="checkUiButton">
|
||||||
<i class="bi bi-search"></i> <span data-translate="detect_button">Detect</span>
|
<i class="bi bi-search"></i> <span data-translate="detect_button">Detect</span>
|
||||||
@@ -181,7 +181,7 @@ $razordVersion = getRazordVersion();
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body text-center">
|
<div class="card-body text-center">
|
||||||
<h5 class="card-title" data-translate="mihomo_core_version_title">Mihomo Core Version</h5>
|
<h5 class="card-title" data-translate="mihomo_core_version_title">Mihomo Core Version</h5>
|
||||||
<p class="card-text"><?php echo htmlspecialchars($mihomoVersion); ?></p>
|
<p id="mihomoVersion" class="card-text"><?php echo htmlspecialchars($mihomoVersion); ?></p>
|
||||||
<div class="d-flex justify-content-center gap-2 mt-3">
|
<div class="d-flex justify-content-center gap-2 mt-3">
|
||||||
<button class="btn btn-pink" id="checkMihomoButton">
|
<button class="btn btn-pink" id="checkMihomoButton">
|
||||||
<i class="bi bi-search"></i> <span data-translate="detect_button">Detect</span>
|
<i class="bi bi-search"></i> <span data-translate="detect_button">Detect</span>
|
||||||
@@ -807,6 +807,108 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
showPanelSelector();
|
showPanelSelector();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
const addIndicator = (el, text, color='warning') => {
|
||||||
|
if (!el) return;
|
||||||
|
const old = el.querySelector('.version-status-indicator');
|
||||||
|
if (old) old.remove();
|
||||||
|
|
||||||
|
const span = document.createElement('span');
|
||||||
|
span.className = `ms-2 version-status-indicator text-${color}`;
|
||||||
|
span.textContent = `(${text})`;
|
||||||
|
el.appendChild(span);
|
||||||
|
};
|
||||||
|
|
||||||
|
const compareVersions = (current, latest) => {
|
||||||
|
if (!current || !latest) return false;
|
||||||
|
const clean = v => v.replace(/^v/, '').trim();
|
||||||
|
return clean(current) === clean(latest);
|
||||||
|
};
|
||||||
|
|
||||||
|
const singBoxEl = document.getElementById('singBoxCorever');
|
||||||
|
const singBoxCurrent = "<?php echo htmlspecialchars($singBoxVersion); ?>";
|
||||||
|
let singBoxUrl = '';
|
||||||
|
if (singBoxCurrent && /^v/.test(singBoxCurrent) && /-.+/.test(singBoxCurrent)) singBoxUrl = 'update_singbox_core.php';
|
||||||
|
else if (singBoxCurrent && /-.+/.test(singBoxCurrent)) singBoxUrl = 'update_singbox_preview.php';
|
||||||
|
else if (singBoxCurrent && !/[a-zA-Z]/.test(singBoxCurrent)) singBoxUrl = 'update_singbox_stable.php';
|
||||||
|
|
||||||
|
if (singBoxUrl && singBoxEl) {
|
||||||
|
fetch(singBoxUrl + '?check_version=true')
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(text => {
|
||||||
|
const match = text.trim().match(/Latest version:\s*([^\s]+)/);
|
||||||
|
if (match && match[1]) {
|
||||||
|
const latest = match[1];
|
||||||
|
const statusText = compareVersions(singBoxCurrent, latest)
|
||||||
|
? "<?php echo $translations['upToDate'] ?? 'Up-to-date'; ?>"
|
||||||
|
: "<?php echo $translations['updateAvailable'] ?? 'Update Available'; ?>: " + latest;
|
||||||
|
addIndicator(singBoxEl, statusText, compareVersions(singBoxCurrent, latest) ? 'success' : 'warning');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
const mihomoEl = document.getElementById('mihomoVersion');
|
||||||
|
const mihomoCurrent = "<?php echo htmlspecialchars($mihomoVersion); ?>";
|
||||||
|
const mihomoType = "<?php echo htmlspecialchars($mihomoType); ?>";
|
||||||
|
let mihomoUrl = '';
|
||||||
|
if (mihomoType === 'Stable') mihomoUrl = 'update_mihomo_stable.php';
|
||||||
|
else if (mihomoType === 'Preview') mihomoUrl = 'update_mihomo_preview.php';
|
||||||
|
|
||||||
|
if (mihomoUrl && mihomoEl) {
|
||||||
|
fetch(mihomoUrl + '?check_version=true')
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(text => {
|
||||||
|
const match = text.trim().match(/Latest version:\s*([^\s]+)/);
|
||||||
|
if (match && match[1]) {
|
||||||
|
const latest = match[1];
|
||||||
|
const statusText = compareVersions(mihomoCurrent, latest)
|
||||||
|
? "<?php echo $translations['upToDate'] ?? 'Up-to-date'; ?>"
|
||||||
|
: "<?php echo $translations['updateAvailable'] ?? 'Update Available'; ?>: " + latest;
|
||||||
|
addIndicator(mihomoEl, statusText, compareVersions(mihomoCurrent, latest) ? 'success' : 'warning');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
const zashboardEl = document.getElementById('uiVersion');
|
||||||
|
const zashboardCurrent = "<?php echo htmlspecialchars($uiVersion); ?>";
|
||||||
|
if (zashboardEl && zashboardCurrent) {
|
||||||
|
fetch('update_zashboard.php?check_version=true')
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(text => {
|
||||||
|
const match = text.trim().match(/Latest version:\s*([^\s]+)/);
|
||||||
|
if (match && match[1]) {
|
||||||
|
const latest = match[1];
|
||||||
|
const statusText = compareVersions(zashboardCurrent, latest)
|
||||||
|
? "<?php echo $translations['upToDate'] ?? 'Up-to-date'; ?>"
|
||||||
|
: "<?php echo $translations['updateAvailable'] ?? 'Update Available'; ?>: " + latest;
|
||||||
|
addIndicator(zashboardEl, statusText, compareVersions(zashboardCurrent, latest) ? 'success' : 'warning');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
const cliverEl = document.getElementById('cliver');
|
||||||
|
const cliverCurrent = "<?php echo htmlspecialchars(trim($cliverVersion)); ?>";
|
||||||
|
if (cliverEl && cliverCurrent) {
|
||||||
|
fetch('update_script.php?check_version=true')
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(text => {
|
||||||
|
const match = text.trim().match(/Latest version:\s*([^\s]+)/);
|
||||||
|
if (match && match[1]) {
|
||||||
|
const latest = match[1];
|
||||||
|
const statusText = compareVersions(cliverCurrent, latest)
|
||||||
|
? "<?php echo $translations['upToDate'] ?? 'Up-to-date'; ?>"
|
||||||
|
: "<?php echo $translations['updateAvailable'] ?? 'Update Available'; ?>: " + latest;
|
||||||
|
addIndicator(cliverEl, statusText, compareVersions(cliverCurrent, latest) ? 'success' : 'warning');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -896,6 +998,7 @@ function checkVersion(outputId, updateFiles, currentVersions) {
|
|||||||
versionModal.show();
|
versionModal.show();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById('checkSingboxButton').addEventListener('click', function () {
|
document.getElementById('checkSingboxButton').addEventListener('click', function () {
|
||||||
const singBoxVersion = "<?php echo htmlspecialchars(trim($singBoxVersion)); ?>";
|
const singBoxVersion = "<?php echo htmlspecialchars(trim($singBoxVersion)); ?>";
|
||||||
const singBoxType = "<?php echo htmlspecialchars($singBoxType); ?>";
|
const singBoxType = "<?php echo htmlspecialchars($singBoxType); ?>";
|
||||||
|
|||||||
@@ -5388,6 +5388,10 @@ th:hover .resizer {
|
|||||||
flex-shrink: 0
|
flex-shrink: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.shrink-1 {
|
||||||
|
flex-shrink: 1
|
||||||
|
}
|
||||||
|
|
||||||
.grow {
|
.grow {
|
||||||
flex-grow: 1
|
flex-grow: 1
|
||||||
}
|
}
|
||||||
@@ -6225,8 +6229,8 @@ th:hover .resizer {
|
|||||||
white-space: nowrap
|
white-space: nowrap
|
||||||
}
|
}
|
||||||
|
|
||||||
.whitespace-pre {
|
.whitespace-pre-wrap {
|
||||||
white-space: pre
|
white-space: pre-wrap
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-accent {
|
.text-accent {
|
||||||
File diff suppressed because one or more lines are too long
@@ -30,8 +30,8 @@
|
|||||||
name="theme-color"
|
name="theme-color"
|
||||||
content="#FFFFFF"
|
content="#FFFFFF"
|
||||||
/>
|
/>
|
||||||
<script type="module" crossorigin src="./assets/index-B2nnAVVk.js"></script>
|
<script type="module" crossorigin src="./assets/index-DgxkpWtA.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="./assets/index-FGY7-LrA.css">
|
<link rel="stylesheet" crossorigin href="./assets/index-B55WtWd_.css">
|
||||||
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
|
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
|
||||||
<body class="overflow-hidden">
|
<body class="overflow-hidden">
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
if(!self.define){let e,i={};const n=(n,s)=>(n=new URL(n+".js",s).href,i[n]||new Promise(i=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=i,document.head.appendChild(e)}else e=n,importScripts(n),i()}).then(()=>{let e=i[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(s,r)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(i[c])return;let f={};const o=e=>n(e,c),t={module:{uri:c},exports:f,require:o};i[c]=Promise.all(s.map(e=>t[e]||o(e))).then(e=>(r(...e),f))}}define(["./workbox-3e8df8c8"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-B2nnAVVk.js",revision:null},{url:"assets/index-FGY7-LrA.css",revision:null},{url:"index.html",revision:"1ac80ef931e3366bba3c01fd7c355233"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"6437e90df75a01bce95a7c03b16fc311"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
|
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise(i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()}).then(()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(n,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(i[f])return;let c={};const t=e=>s(e,f),o={module:{uri:f},exports:c,require:t};i[f]=Promise.all(n.map(e=>o[e]||t(e))).then(e=>(r(...e),c))}}define(["./workbox-3e8df8c8"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-B55WtWd_.css",revision:null},{url:"assets/index-DgxkpWtA.js",revision:null},{url:"index.html",revision:"6f034c9a7bf0f4df27b0321a9ff28c11"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"6437e90df75a01bce95a7c03b16fc311"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v1.104.0
|
v1.105.0
|
||||||
@@ -9,10 +9,10 @@ include $(TOPDIR)/rules.mk
|
|||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=natflow
|
PKG_NAME:=natflow
|
||||||
PKG_VERSION:=20250920
|
PKG_VERSION:=20250923
|
||||||
|
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/ptpt52/natflow/tar.gz/$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/ptpt52/natflow/tar.gz/$(PKG_VERSION)?
|
||||||
PKG_HASH:=6b6b015e883cb9935a2565c998d5af01cc48d90226125ae1b35d233682dd4272
|
PKG_HASH:=a4fde7ccfa9cd9eb17c259491b5a50d80ea44a04a37b2a12d398bc915a6ef942
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
|
|
||||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||||
|
|||||||
Reference in New Issue
Block a user