Merge branch 'main' into user-account
commit
2e1ddc9ae1
|
@ -4,6 +4,10 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
|
||||||
|
|
||||||
## ntfy server v1.30.0 (UNRELEASED)
|
## ntfy server v1.30.0 (UNRELEASED)
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
|
||||||
|
* Web: Generate random topic name button ([#453](https://github.com/binwiederhier/ntfy/issues/453), thanks to [@yardenshoham](https://github.com/yardenshoham))
|
||||||
|
|
||||||
**Bug fixes + maintenance:**
|
**Bug fixes + maintenance:**
|
||||||
|
|
||||||
* Remove `--env-topic` option from `ntfy publish` as per [deprecation](deprecations.md) (no ticket)
|
* Remove `--env-topic` option from `ntfy publish` as per [deprecation](deprecations.md) (no ticket)
|
||||||
|
|
|
@ -129,6 +129,7 @@
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Use another server",
|
"subscribe_dialog_subscribe_use_another_label": "Use another server",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Service URL",
|
"subscribe_dialog_subscribe_base_url_label": "Service URL",
|
||||||
|
"subscribe_dialog_subscribe_button_generate_topic_name": "Generate name",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Cancel",
|
"subscribe_dialog_subscribe_button_cancel": "Cancel",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Subscribe",
|
"subscribe_dialog_subscribe_button_subscribe": "Subscribe",
|
||||||
"subscribe_dialog_login_title": "Login required",
|
"subscribe_dialog_login_title": "Login required",
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
"notifications_list_item": "通知",
|
"notifications_list_item": "通知",
|
||||||
"notifications_mark_read": "標示已讀",
|
"notifications_mark_read": "標示已讀",
|
||||||
"notifications_attachment_image": "附加圖片",
|
"notifications_attachment_image": "附加圖片",
|
||||||
"notifications_attachment_copy_url_title": "複製附件URL到剪貼板",
|
"notifications_attachment_copy_url_title": "複製附件 URL 到剪貼簿",
|
||||||
"notifications_attachment_copy_url_button": "複製URL",
|
"notifications_attachment_copy_url_button": "複製 URL",
|
||||||
"notifications_attachment_open_title": "前往 {{url}}",
|
"notifications_attachment_open_title": "前往 {{url}}",
|
||||||
"notifications_attachment_open_button": "開啟附件",
|
"notifications_attachment_open_button": "開啟附件",
|
||||||
"notifications_attachment_link_expired": "下載連結已過期",
|
"notifications_attachment_link_expired": "下載連結已過期",
|
||||||
"notifications_attachment_file_video": "影片檔案",
|
"notifications_attachment_file_video": "影片檔案",
|
||||||
"notifications_attachment_file_app": "Android 應用程式檔案",
|
"notifications_attachment_file_app": "Android 應用程式檔案",
|
||||||
"notifications_attachment_file_document": "其他文件",
|
"notifications_attachment_file_document": "其他文件",
|
||||||
"notifications_click_copy_url_title": "複製連結URL到剪貼板",
|
"notifications_click_copy_url_title": "複製連結 URL 到剪貼板",
|
||||||
"notifications_click_copy_url_button": "複製連結",
|
"notifications_click_copy_url_button": "複製連結",
|
||||||
"notifications_click_open_button": "開啟連結",
|
"notifications_click_open_button": "開啟連結",
|
||||||
"notifications_actions_not_supported": "網頁程式無法支援該動作",
|
"notifications_actions_not_supported": "網頁程式無法支援該動作",
|
||||||
|
@ -27,16 +27,16 @@
|
||||||
"notifications_none_for_topic_description": "如要寄送通知到此主題,請使用 PUT 或 POST 到此主題URL。",
|
"notifications_none_for_topic_description": "如要寄送通知到此主題,請使用 PUT 或 POST 到此主題URL。",
|
||||||
"notifications_none_for_any_title": "尚未收到任何通知。",
|
"notifications_none_for_any_title": "尚未收到任何通知。",
|
||||||
"action_bar_settings": "設定",
|
"action_bar_settings": "設定",
|
||||||
"action_bar_send_test_notification": "寄送測試通知",
|
"action_bar_send_test_notification": "發送測試通知",
|
||||||
"action_bar_clear_notifications": "清除所有通知",
|
"action_bar_clear_notifications": "清除所有通知",
|
||||||
"action_bar_show_menu": "顯示選單",
|
"action_bar_show_menu": "顯示選單",
|
||||||
"nav_button_documentation": "文件",
|
"nav_button_documentation": "文件",
|
||||||
"nav_button_publish_message": "發布通知",
|
"nav_button_publish_message": "發佈通知",
|
||||||
"nav_button_muted": "通知已靜音",
|
"nav_button_muted": "通知已靜音",
|
||||||
"notifications_copied_to_clipboard": "複製到剪貼板",
|
"notifications_copied_to_clipboard": "已複製到剪貼簿",
|
||||||
"message_bar_publish": "發布訊息",
|
"message_bar_publish": "發佈訊息",
|
||||||
"message_bar_show_dialog": "顯示發布對話筐",
|
"message_bar_show_dialog": "顯示發佈對話框",
|
||||||
"message_bar_error_publishing": "無法發布通知",
|
"message_bar_error_publishing": "發佈通知時發生錯誤",
|
||||||
"nav_topics_title": "訂閱主題",
|
"nav_topics_title": "訂閱主題",
|
||||||
"nav_button_all_notifications": "所有通知",
|
"nav_button_all_notifications": "所有通知",
|
||||||
"nav_button_settings": "設定",
|
"nav_button_settings": "設定",
|
||||||
|
@ -50,7 +50,36 @@
|
||||||
"notifications_new_indicator": "新通知",
|
"notifications_new_indicator": "新通知",
|
||||||
"notifications_attachment_file_audio": "聲音檔案",
|
"notifications_attachment_file_audio": "聲音檔案",
|
||||||
"notifications_delete": "刪除",
|
"notifications_delete": "刪除",
|
||||||
"notifications_attachment_link_expires": "連結已過期 {{date}}",
|
"notifications_attachment_link_expires": "連結在 {{date}} 過期",
|
||||||
"notifications_attachment_file_image": "圖片檔案",
|
"notifications_attachment_file_image": "圖片檔案",
|
||||||
"notifications_actions_open_url_title": "前往 {{url}}"
|
"notifications_actions_open_url_title": "前往 {{url}}",
|
||||||
|
"notifications_no_subscriptions_title": "你尚未有任何訂閱。",
|
||||||
|
"notifications_example": "範例",
|
||||||
|
"notifications_more_details": "你可以在 <websiteLink>ntfy 網站</websiteLink>或者<docsLink>技術文件</docsLink>中查看更多資訊。",
|
||||||
|
"notifications_loading": "載入中…",
|
||||||
|
"publish_dialog_title_topic": "發佈到 {{topic}}",
|
||||||
|
"publish_dialog_title_no_topic": "發佈通知",
|
||||||
|
"publish_dialog_progress_uploading": "上傳中…",
|
||||||
|
"publish_dialog_priority_label": "優先度",
|
||||||
|
"publish_dialog_email_label": "電郵地址",
|
||||||
|
"publish_dialog_filename_label": "檔案名稱",
|
||||||
|
"publish_dialog_button_cancel": "取消",
|
||||||
|
"publish_dialog_button_send": "傳送",
|
||||||
|
"publish_dialog_button_cancel_sending": "取消傳送",
|
||||||
|
"subscribe_dialog_subscribe_button_cancel": "取消",
|
||||||
|
"subscribe_dialog_subscribe_button_subscribe": "訂閱",
|
||||||
|
"emoji_picker_search_clear": "清除",
|
||||||
|
"subscribe_dialog_login_password_label": "密碼",
|
||||||
|
"subscribe_dialog_login_button_back": "返回",
|
||||||
|
"subscribe_dialog_login_button_login": "登入",
|
||||||
|
"prefs_notifications_delete_after_never": "從不",
|
||||||
|
"prefs_users_add_button": "新增使用者",
|
||||||
|
"prefs_users_dialog_password_label": "密碼",
|
||||||
|
"prefs_users_dialog_title_add": "新增使用者",
|
||||||
|
"prefs_users_dialog_button_save": "儲存",
|
||||||
|
"prefs_users_dialog_button_cancel": "取消",
|
||||||
|
"error_boundary_title": "歐買尬,ntfy 壞掉了",
|
||||||
|
"notifications_none_for_any_description": "要開始發送通知到一個主題,只需要對主題 URL 發送 HTTP PUT 或者 POST,例如:",
|
||||||
|
"notifications_no_subscriptions_description": "點選 「{{linktext}}」 連結以建立或訂閱主題。完成後,你就可以使用 HTTP PUT 或者 POST 發送通知到這裡了!",
|
||||||
|
"error_boundary_description": "很抱歉 ntfy 發生錯誤了。<br/>如果你有時間,煩請到<githubLink> Github </githubLink>回報錯誤,或者到<discordLink> Discord </discordLink>或者<matrixLink> Matrix 聊天室</matrixLink>裡面告訴我們。"
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,3 +249,12 @@ export async function* fetchLinesIterator(fileURL, headers) {
|
||||||
yield chunk.substr(startIndex); // last line didn't end in a newline char
|
yield chunk.substr(startIndex); // last line didn't end in a newline char
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const randomAlphanumericString = (len) => {
|
||||||
|
const alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
|
||||||
|
let id = "";
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
id += alphabet[(Math.random() * alphabet.length) | 0];
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import DialogTitle from '@mui/material/DialogTitle';
|
||||||
import {Autocomplete, Checkbox, FormControlLabel, useMediaQuery} from "@mui/material";
|
import {Autocomplete, Checkbox, FormControlLabel, useMediaQuery} from "@mui/material";
|
||||||
import theme from "./theme";
|
import theme from "./theme";
|
||||||
import api from "../app/Api";
|
import api from "../app/Api";
|
||||||
import {topicUrl, validTopic, validUrl} from "../app/utils";
|
import {randomAlphanumericString, topicUrl, validTopic, validUrl} from "../app/utils";
|
||||||
import userManager from "../app/UserManager";
|
import userManager from "../app/UserManager";
|
||||||
import subscriptionManager from "../app/SubscriptionManager";
|
import subscriptionManager from "../app/SubscriptionManager";
|
||||||
import poller from "../app/Poller";
|
import poller from "../app/Poller";
|
||||||
|
@ -104,21 +104,26 @@ const SubscribePage = (props) => {
|
||||||
<DialogContentText>
|
<DialogContentText>
|
||||||
{t("subscribe_dialog_subscribe_description")}
|
{t("subscribe_dialog_subscribe_description")}
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
<TextField
|
<div style={{display: 'flex'}} role="row">
|
||||||
autoFocus
|
<TextField
|
||||||
margin="dense"
|
autoFocus
|
||||||
id="topic"
|
margin="dense"
|
||||||
placeholder={t("subscribe_dialog_subscribe_topic_placeholder")}
|
id="topic"
|
||||||
value={props.topic}
|
placeholder={t("subscribe_dialog_subscribe_topic_placeholder")}
|
||||||
onChange={ev => props.setTopic(ev.target.value)}
|
value={props.topic}
|
||||||
type="text"
|
onChange={ev => props.setTopic(ev.target.value)}
|
||||||
fullWidth
|
type="text"
|
||||||
variant="standard"
|
fullWidth
|
||||||
inputProps={{
|
variant="standard"
|
||||||
maxLength: 64,
|
inputProps={{
|
||||||
"aria-label": t("subscribe_dialog_subscribe_topic_placeholder")
|
maxLength: 64,
|
||||||
}}
|
"aria-label": t("subscribe_dialog_subscribe_topic_placeholder")
|
||||||
/>
|
}}
|
||||||
|
/>
|
||||||
|
<Button onClick={() => {props.setTopic(randomAlphanumericString(16))}} style={{flexShrink: "0", marginTop: "0.5em"}}>
|
||||||
|
{t("subscribe_dialog_subscribe_button_generate_topic_name")}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
<FormControlLabel
|
<FormControlLabel
|
||||||
sx={{pt: 1}}
|
sx={{pt: 1}}
|
||||||
control={
|
control={
|
||||||
|
|
Loading…
Reference in New Issue