From 6b0586dca3c811bb6a1e86caacca137098460ca0 Mon Sep 17 00:00:00 2001 From: DCloud_LXH <283700113@qq.com> Date: Fri, 22 Oct 2021 15:15:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(H5):=20setClipboardData=E3=80=81getClipboa?= =?UTF-8?q?rdData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/uni-core/src/i18n/en.json | 2 + packages/uni-core/src/i18n/es.json | 2 + packages/uni-core/src/i18n/fr.json | 2 + packages/uni-core/src/i18n/messages.ts | 62 +++++++++++++++++-- packages/uni-core/src/i18n/zh-Hans.json | 2 + packages/uni-core/src/i18n/zh-Hant.json | 2 + packages/uni-h5-vite/lib/api.json | 2 + .../src/service/api/device/clipboard.ts | 50 +++++++++++++++ packages/uni-h5/src/service/api/index.ts | 1 + 9 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 packages/uni-h5/src/service/api/device/clipboard.ts diff --git a/packages/uni-core/src/i18n/en.json b/packages/uni-core/src/i18n/en.json index 56af72647..c5f053887 100644 --- a/packages/uni-core/src/i18n/en.json +++ b/packages/uni-core/src/i18n/en.json @@ -17,6 +17,8 @@ "uni.previewImage.save.success": "Saved successfully", "uni.previewImage.save.fail": "Save failed", "uni.setClipboardData.success": "Content copied", + "uni.setClipboardData.fail": "Copy failed, please copy manually", + "uni.getClipboardData.fail": "Reading failed, please paste manually", "uni.scanCode.title": "Scan code", "uni.scanCode.album": "Album", "uni.scanCode.fail": "Recognition failure", diff --git a/packages/uni-core/src/i18n/es.json b/packages/uni-core/src/i18n/es.json index 897fa8694..0e29efddd 100644 --- a/packages/uni-core/src/i18n/es.json +++ b/packages/uni-core/src/i18n/es.json @@ -17,6 +17,8 @@ "uni.previewImage.save.success": "Guardado exitosamente", "uni.previewImage.save.fail": "Error al guardar", "uni.setClipboardData.success": "Contenido copiado", + "uni.setClipboardData.fail": "Error al copiar, copie manualmente", + "uni.getClipboardData.fail": "Error de lectura, pegue manualmente", "uni.scanCode.title": "Código de escaneo", "uni.scanCode.album": "Álbum", "uni.scanCode.fail": "Échec de la reconnaissance", diff --git a/packages/uni-core/src/i18n/fr.json b/packages/uni-core/src/i18n/fr.json index b538eb673..3e8a5fc30 100644 --- a/packages/uni-core/src/i18n/fr.json +++ b/packages/uni-core/src/i18n/fr.json @@ -17,6 +17,8 @@ "uni.previewImage.save.success": "Enregistré avec succès", "uni.previewImage.save.fail": "Échec de la sauvegarde", "uni.setClipboardData.success": "Contenu copié", + "uni.setClipboardData.fail": "Échec de la copie, copiez manuellement", + "uni.getClipboardData.fail": "Échec de la lecture, veuillez coller manuellement", "uni.scanCode.title": "Code d’analyse", "uni.scanCode.album": "Album", "uni.scanCode.fail": "Fallo de reconocimiento", diff --git a/packages/uni-core/src/i18n/messages.ts b/packages/uni-core/src/i18n/messages.ts index 4fe0a3eb6..385c3237b 100644 --- a/packages/uni-core/src/i18n/messages.ts +++ b/packages/uni-core/src/i18n/messages.ts @@ -410,39 +410,89 @@ export const initI18nPreviewImageMsgsOnce = /*#__PURE__*/ once(() => { }) export const initI18nSetClipboardDataMsgsOnce = /*#__PURE__*/ once(() => { const name = 'uni.setClipboardData.' - const keys = ['success'] + const keys = ['success', 'fail'] if (__UNI_FEATURE_I18N_EN__) { useI18n().add( LOCALE_EN, - normalizeMessages(name, keys, ['Content copied']), + normalizeMessages(name, keys, [ + 'Content copied', + 'Copy failed, please copy manually', + ]), false ) } if (__UNI_FEATURE_I18N_ES__) { useI18n().add( LOCALE_ES, - normalizeMessages(name, keys, ['Contenido copiado']), + normalizeMessages(name, keys, [ + 'Contenido copiado', + 'Error al copiar, copie manualmente', + ]), false ) } if (__UNI_FEATURE_I18N_FR__) { useI18n().add( LOCALE_FR, - normalizeMessages(name, keys, ['Contenu copié']), + normalizeMessages(name, keys, [ + 'Contenu copié', + 'Échec de la copie, copiez manuellement', + ]), + false + ) + } + if (__UNI_FEATURE_I18N_ZH_HANS__) { + useI18n().add( + LOCALE_ZH_HANS, + normalizeMessages(name, keys, ['内容已复制', '复制失败,请手动复制']), + false + ) + } + if (__UNI_FEATURE_I18N_ZH_HANT__) { + useI18n().add( + LOCALE_ZH_HANT, + normalizeMessages(name, keys, ['內容已復制', '復制失敗,請手動復製']), + false + ) + } +}) +export const initI18nGetClipboardDataMsgsOnce = /*#__PURE__*/ once(() => { + const name = 'uni.getClipboardData.' + const keys = ['fail'] + if (__UNI_FEATURE_I18N_EN__) { + useI18n().add( + LOCALE_EN, + normalizeMessages(name, keys, ['Reading failed, please paste manually']), + false + ) + } + if (__UNI_FEATURE_I18N_ES__) { + useI18n().add( + LOCALE_ES, + normalizeMessages(name, keys, ['Error de lectura, pegue manualmente']), + false + ) + } + if (__UNI_FEATURE_I18N_FR__) { + useI18n().add( + LOCALE_FR, + normalizeMessages(name, keys, [ + 'Échec de la lecture, veuillez coller manuellement', + ]), false ) } if (__UNI_FEATURE_I18N_ZH_HANS__) { useI18n().add( LOCALE_ZH_HANS, - normalizeMessages(name, keys, ['内容已复制']), + normalizeMessages(name, keys, ['读取失败,请手动粘贴']), false ) } if (__UNI_FEATURE_I18N_ZH_HANT__) { useI18n().add( LOCALE_ZH_HANT, - normalizeMessages(name, keys, ['內容已復制']), + normalizeMessages(name, keys, ['讀取失敗,請手動粘貼']), false ) } diff --git a/packages/uni-core/src/i18n/zh-Hans.json b/packages/uni-core/src/i18n/zh-Hans.json index a04b5c5e7..f6ade87d8 100644 --- a/packages/uni-core/src/i18n/zh-Hans.json +++ b/packages/uni-core/src/i18n/zh-Hans.json @@ -17,6 +17,8 @@ "uni.previewImage.save.success": "保存图像到相册成功", "uni.previewImage.save.fail": "保存图像到相册失败", "uni.setClipboardData.success": "内容已复制", + "uni.setClipboardData.fail": "复制失败,请手动复制", + "uni.getClipboardData.fail": "读取失败,请手动粘贴", "uni.scanCode.title": "扫码", "uni.scanCode.album": "相册", "uni.scanCode.fail": "识别失败", diff --git a/packages/uni-core/src/i18n/zh-Hant.json b/packages/uni-core/src/i18n/zh-Hant.json index 0f091f306..857144362 100644 --- a/packages/uni-core/src/i18n/zh-Hant.json +++ b/packages/uni-core/src/i18n/zh-Hant.json @@ -17,6 +17,8 @@ "uni.previewImage.save.success": "保存圖像到相冊成功", "uni.previewImage.save.fail": "保存圖像到相冊失敗", "uni.setClipboardData.success": "內容已復制", + "uni.setClipboardData.fail": "復制失敗,請手動復製", + "uni.getClipboardData.fail": "讀取失敗,請手動粘貼", "uni.scanCode.title": "掃碼", "uni.scanCode.album": "相冊", "uni.scanCode.fail": "識別失敗", diff --git a/packages/uni-h5-vite/lib/api.json b/packages/uni-h5-vite/lib/api.json index 939d16e6e..621caeb18 100644 --- a/packages/uni-h5-vite/lib/api.json +++ b/packages/uni-h5-vite/lib/api.json @@ -30,6 +30,7 @@ "createSelectorQuery", "createVideoContext", "downloadFile", + "getClipboardData", "getFileInfo", "getImageInfo", "getLeftWindowStyle", @@ -103,6 +104,7 @@ "saveVideoToPhotosAlbum", "scanCode", "sendSocketMessage", + "setClipboardData", "setKeepScreenOn", "setLeftWindowStyle", "setLocale", diff --git a/packages/uni-h5/src/service/api/device/clipboard.ts b/packages/uni-h5/src/service/api/device/clipboard.ts new file mode 100644 index 000000000..5239e3433 --- /dev/null +++ b/packages/uni-h5/src/service/api/device/clipboard.ts @@ -0,0 +1,50 @@ +import { + API_GET_CLIPBOARD_DATA, + API_SET_CLIPBOARD_DATA, + API_TYPE_GET_CLIPBOARD_DATA, + API_TYPE_SET_CLIPBOARD_DATA, + SetClipboardDataOptions, + SetClipboardDataProtocol, + defineAsyncApi, +} from '@dcloudio/uni-api' +import { showModal } from '../../api/ui/popup/showModal' +import { + useI18n, + initI18nSetClipboardDataMsgsOnce, + initI18nGetClipboardDataMsgsOnce, +} from '@dcloudio/uni-core' + +export const getClipboardData = defineAsyncApi( + API_GET_CLIPBOARD_DATA, + async (_, { resolve, reject }) => { + initI18nGetClipboardDataMsgsOnce() + const { t } = useI18n() + try { + const data = await navigator.clipboard.readText() + resolve({ data }) + } catch (error: any) { + reject(`${error} ${t('uni.getClipboardData.fail')}`) + } + } +) + +export const setClipboardData = defineAsyncApi( + API_SET_CLIPBOARD_DATA, + async ({ data }, { resolve, reject }) => { + initI18nSetClipboardDataMsgsOnce() + const { t } = useI18n() + try { + await navigator.clipboard.writeText(data) + resolve() + } catch (error) { + reject() + showModal({ + title: t('uni.setClipboardData.fail'), + content: data, + editable: true, + }) + } + }, + SetClipboardDataProtocol, + SetClipboardDataOptions +) diff --git a/packages/uni-h5/src/service/api/index.ts b/packages/uni-h5/src/service/api/index.ts index e439495c7..d963b4e75 100644 --- a/packages/uni-h5/src/service/api/index.ts +++ b/packages/uni-h5/src/service/api/index.ts @@ -20,6 +20,7 @@ export * from './device/network' export * from './device/accelerometer' export * from './device/compass' export * from './device/vibrate' +export * from './device/clipboard' export * from './storage/storage' -- GitLab