- {t("Download a JSON style to your computer.")}
+ {t("Save the JSON style to your computer.")}
@@ -140,17 +180,23 @@ class ModalExportInternal extends React.Component
{
-
- {t("Download Style")}
+
+ {t("Save")}
+
+
+
+ {t("Save as")}
-
- {t("Download HTML")}
+
+ {t("Create HTML")}
diff --git a/src/components/ModalOpen.tsx b/src/components/ModalOpen.tsx
index d2450336..2761d14e 100644
--- a/src/components/ModalOpen.tsx
+++ b/src/components/ModalOpen.tsx
@@ -1,7 +1,6 @@
import React, { FormEvent } from 'react'
import {MdFileUpload} from 'react-icons/md'
import {MdAddCircleOutline} from 'react-icons/md'
-import FileReaderInput, { Result } from 'react-file-reader-input'
import { Trans, WithTranslation, withTranslation } from 'react-i18next';
import ModalLoading from './ModalLoading'
@@ -47,6 +46,7 @@ type ModalOpenInternalProps = {
isOpen: boolean
onOpenToggle(...args: unknown[]): unknown
onStyleOpen(...args: unknown[]): unknown
+ fileHandle: FileSystemFileHandle | null
} & WithTranslation;
type ModalOpenState = {
@@ -135,29 +135,37 @@ class ModalOpenInternal extends React.Component {
- const [, file] = files[0];
- const reader = new FileReader();
-
+ onOpenFile = async () => {
this.clearError();
- reader.readAsText(file, "UTF-8");
- reader.onload = e => {
- let mapStyle;
- try {
- mapStyle = JSON.parse(e.target?.result as string)
- }
- catch(err) {
- this.setState({
- error: (err as Error).toString()
- });
- return;
- }
- mapStyle = style.ensureStyleValidity(mapStyle)
- this.props.onStyleOpen(mapStyle);
- this.onOpenToggle();
+ const pickerOpts: OpenFilePickerOptions = {
+ types: [
+ {
+ description: "json",
+ accept: { "application/json": [".json"] },
+ },
+ ],
+ multiple: false,
+ };
+
+ const [fileHandle] = await window.showOpenFilePicker(pickerOpts) as Array;
+ const file = await fileHandle.getFile();
+ const content = await file.text();
+
+ let mapStyle;
+ try {
+ mapStyle = JSON.parse(content)
+ } catch (err) {
+ this.setState({
+ error: (err as Error).toString()
+ });
+ return;
}
- reader.onerror = e => console.log(e.target);
+ mapStyle = style.ensureStyleValidity(mapStyle)
+
+ this.props.onStyleOpen(mapStyle, fileHandle);
+ this.onOpenToggle();
+ return file;
}
onOpenToggle() {
@@ -196,7 +204,7 @@ class ModalOpenInternal extends React.Component
{errorElement}
- {t("Upload Style")}
- {t("Upload a JSON style from your computer.")}
-
- {t("Upload")}
-
+ {t("Open local Style")}
+ {t("Open a local JSON style from your computer.")}
+
+ {t("Open Style")}
+
+
diff --git a/src/locales/README.md b/src/locales/README.md
index 6e456701..f031262b 100644
--- a/src/locales/README.md
+++ b/src/locales/README.md
@@ -1,6 +1,6 @@
## Internationalization
-The process of internationlization is pretty straight forward for Maputnik.
+The process of internationalization is pretty straight forward for Maputnik.
## Add a new language
diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json
index 1aaab7f6..75072939 100644
--- a/src/locales/de/translation.json
+++ b/src/locales/de/translation.json
@@ -29,7 +29,7 @@
"Map view": "Kartenansicht",
"Maputnik on GitHub": "Maputnik auf GitHub",
"Open": "Öffnen",
- "Export": "Exportieren",
+ "Save": "Speichern",
"Data Sources": "Datenquellen",
"Style Settings": "Stileinstellungen",
"View": "Ansicht",
@@ -81,17 +81,14 @@
"Close modal": "Modale Fenster schließen",
"Debug": "Debug",
"Options": "Optionen",
- "<0>Open in OSM0> — Opens the current view on openstreetmap.org": "<0>In OSM öffnen0> — Öffnet die aktuelle Ansicht auf openstreetmap.org",
- "Export Style": "Stil exportieren",
- "Download Style": "Stil herunterladen",
- "Download a JSON style to your computer.": "Lade einen JSON-Stil auf deinen Computer herunter.",
- "Download HTML": "HTML herunterladen",
+ "Save Style": "Stil Speichern",
+ "Save the JSON style to your computer.": "Speichere den JSON Stil auf deinem Computer.",
+ "Save as": "Speichern unter",
+ "Create HTML": "HTML erstellen",
"Cancel": "Abbrechen",
"Open Style": "Stil öffnen",
- "Upload Style": "Stil hochladen",
- "Upload a JSON style from your computer.": "Lade einen JSON-Stil von deinem Computer hoch.",
- "Style file": "Stildatei",
- "Upload": "Hochladen",
+ "Open local Style": "Lokalen Stil öffnen",
+ "Open a local JSON style from your computer.": "Öffne einen lokalen JSON Stil von deinem Computer.",
"Load from URL": "Von URL laden",
"Load from a URL. Note that the URL must have <1>CORS enabled1>.": "Von einer URL laden. Beachte, dass die URL <1>CORS aktiviert1> haben muss.",
"Style URL": "Stil-URL",
diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json
index bcbf8d8c..e4957469 100644
--- a/src/locales/fr/translation.json
+++ b/src/locales/fr/translation.json
@@ -29,7 +29,7 @@
"Map view": "Vue de la carte",
"Maputnik on GitHub": "Maputnik sur GitHub",
"Open": "Ouvrir",
- "Export": "Exporter",
+ "Save": "Enregistrer",
"Data Sources": "Sources de données",
"Style Settings": "Paramètres du style",
"View": "Vue",
@@ -81,17 +81,14 @@
"Close modal": "Fermer la fenêtre modale",
"Debug": "Déboguer",
"Options": "Options",
- "<0>Open in OSM0> — Opens the current view on openstreetmap.org": "<0>Ouvrir dans OSM0> — Ouvre la vue actuelle sur openstreetmap.org",
- "Export Style": "Exporter le style",
- "Download Style": "Télécharger le style",
- "Download a JSON style to your computer.": "Téléchargez un style JSON sur votre ordinateur.",
- "Download HTML": "Télécharger HTML",
+ "Save Style": "Enregistrer le style",
+ "Save the JSON style to your computer.": "Enregistrer le style JSON sur votre ordinateur.",
+ "Save as": "Enregistrer sous",
+ "Create HTML": "Créer le HTML",
"Cancel": "Annuler",
"Open Style": "Ouvrir le style",
- "Upload Style": "Transférer un style",
- "Upload a JSON style from your computer.": "Transférer un style JSON depuis votre ordinateur.",
- "Style file": "Fichier de style",
- "Upload": "Transférer",
+ "Open local Style": "Ouvrir un style local",
+ "Open a local JSON style from your computer.": "Ouvrir un style JSON local depuis votre ordinateur.",
"Load from URL": "Charger depuis une URL",
"Load from a URL. Note that the URL must have <1>CORS enabled1>.": "Charger depuis une URL. Notez que l'URL doit avoir les <1>CORS activés1>.",
"Style URL": "URL du style",
diff --git a/src/locales/he/translation.json b/src/locales/he/translation.json
index 561eda93..5ed72d4d 100644
--- a/src/locales/he/translation.json
+++ b/src/locales/he/translation.json
@@ -29,7 +29,7 @@
"Map view": "תצוגת מפה",
"Maputnik on GitHub": "מפוטניק בגיטהב",
"Open": "פתיחה",
- "Export": "ייצוא",
+ "Save": "שמור",
"Data Sources": "מקורות מידע",
"Style Settings": "הגדרות הסטייל",
"View": "תצוגה",
@@ -81,16 +81,14 @@
"Close modal": "סגירת חלונית",
"Debug": "דיבאג",
"Options": "אפשרויות",
- "Export Style": "ייצוא של הסטייל",
- "Download Style": "הורדה של הסטייל",
- "Download a JSON style to your computer.": "הורדה של הסטייל למחשב",
- "Download HTML": "הורדה כ-HTML",
+ "Save Style": "שמירת הסטייל",
+ "Save the JSON style to your computer.": "שמירת הסטייל JSON במחשב שלך.",
+ "Save as": "שמירה בשם",
+ "Create HTML": "צור HTML",
"Cancel": "ביטול",
"Open Style": "פתיחת סטייל",
- "Upload Style": "העלאה של סטייל",
- "Upload a JSON style from your computer.": "העלאה של סטייל מהמחשב",
- "Style file": "קובץ סטייל",
- "Upload": "העלאה",
+ "Open local Style": "פתיחת סטייל מקומי",
+ "Open a local JSON style from your computer.": "פתיחת סטייל JSON מקומי מהמחשב שלך.",
"Load from URL": "פתיחה מתוך כתובת",
"Load from a URL. Note that the URL must have <1>CORS enabled1>.": "פתיחה מכתובת, שימו לב: הכתובת צריכה לתמוך ב- CORS",
"Style URL": "כתוסת סטייל",
diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json
index a2b48a0f..ba380259 100644
--- a/src/locales/ja/translation.json
+++ b/src/locales/ja/translation.json
@@ -29,7 +29,7 @@
"Map view": "地図画面",
"Maputnik on GitHub": "GitHubのMaputnik",
"Open": "開く",
- "Export": "エクスポート",
+ "Save": "保存",
"Data Sources": "データソース",
"Style Settings": "スタイル設定",
"View": "表示",
@@ -81,16 +81,14 @@
"Close modal": "モーダルを閉じる",
"Debug": "デバッグ",
"Options": "設定",
- "Export Style": "スタイルをエクスポート",
- "Download Style": "スタイルをダウンロード",
- "Download a JSON style to your computer.": "パソコンにJSONスタイルをダウンロードします。",
- "Download HTML": "HTMLをダウンロード",
+ "Save Style": "スタイルを保存",
+ "Save the JSON style to your computer.": "JSONスタイルをコンピュータに保存します。",
+ "Save as": "名前を付けて保存",
+ "Create HTML": "HTMLを作成",
"Cancel": "キャンセル",
"Open Style": "スタイルを開く",
- "Upload Style": "スタイルをアップロードする",
- "Upload a JSON style from your computer.": "JSONスタイルをパソコンからアップロードする",
- "Style file": "スタイルファイル",
- "Upload": "アップロード",
+ "Open local Style": "ローカルスタイルを開く",
+ "Open a local JSON style from your computer.": "コンピュータからローカルJSONスタイルを開きます。",
"Load from URL": "URLから読み込む",
"Load from a URL. Note that the URL must have <1>CORS enabled1>.": "URLから読み込む。注意: URLは <1>CORSを有効にする1> 必要があります。",
"Style URL": "スタイルURL",
diff --git a/src/locales/zh/translation.json b/src/locales/zh/translation.json
index fc93a80a..63a76063 100644
--- a/src/locales/zh/translation.json
+++ b/src/locales/zh/translation.json
@@ -29,7 +29,7 @@
"Map view": "地图视图",
"Maputnik on GitHub": "GitHub上的Maputnik",
"Open": "打开",
- "Export": "导出",
+ "Save": "保存",
"Data Sources": "数据源",
"Style Settings": "样式设置",
"View": "视图",
@@ -81,16 +81,14 @@
"Close modal": "关闭模态框",
"Debug": "调试",
"Options": "选项",
- "Export Style": "导出样式",
- "Download Style": "下载样式",
- "Download a JSON style to your computer.": "将JSON样式下载到您的电脑。",
- "Download HTML": "下载HTML",
+ "Save Style": "保存样式",
+ "Save the JSON style to your computer.": "将JSON样式保存到您的计算机。",
+ "Save as": "另存为",
+ "Create HTML": "创建HTML",
"Cancel": "取消",
"Open Style": "打开样式",
- "Upload Style": "上传样式",
- "Upload a JSON style from your computer.": "从您的电脑上传JSON样式。",
- "Style file": "样式文件",
- "Upload": "上传",
+ "Open local Style": "打开本地样式",
+ "Open a local JSON style from your computer.": "从您的计算机打开本地JSON样式。",
"Load from URL": "从URL加载",
"Load from a URL. Note that the URL must have <1>CORS enabled1>.": "从URL加载。注意:URL必须启用 <1>CORS1>。",
"Style URL": "样式URL",
diff --git a/tsconfig.json b/tsconfig.json
index 24f33888..46f4ef8f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,7 +3,7 @@
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
- "types": ["geojson"],
+ "types": ["geojson", "@types/wicg-file-system-access"],
"module": "ESNext",
"skipLibCheck": true,
@@ -27,7 +27,7 @@
"ts-node": {
"compilerOptions": {
"module": "ESNext",
- "moduleResolution": "Node"
+ "moduleResolution": "Node",
}
}
-}
\ No newline at end of file
+}