Просмотр исходного кода

add option `File name > replacement character`
(fix #1222)

Gildas 2 лет назад
Родитель
Сommit
be2ffdc6c5

+ 4 - 0
_locales/de/messages.json

@@ -207,6 +207,10 @@
 		"message": "Zeichen",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "Ersetzungszeichen",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename": {
 		"message": "Emojis durch Text ersetzen",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/en/messages.json

@@ -207,6 +207,10 @@
 		"message": "characters",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "replacement character",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "replace emojis with text",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/es/messages.json

@@ -207,6 +207,10 @@
 		"message": "caracteres",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "carácter de reemplazo",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "reemplazar emojis con texto",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/fr/messages.json

@@ -207,6 +207,10 @@
 		"message": "caractères",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "caractère de remplacement",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "remplacer les emojis par du texte",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/it/messages.json

@@ -207,6 +207,10 @@
 		"message": "caratteri",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "carattere di sostituzione",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "sostituisci le emoji con il testo",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/ja/messages.json

@@ -207,6 +207,10 @@
 		"message": "文字数",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "置換文字",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "絵文字をテキストに置き換える",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/pl/messages.json

@@ -207,6 +207,10 @@
 		"message": "znaki",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "replacement character",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "zamień emotikony na tekst",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/pt_br/messages.json

@@ -207,6 +207,10 @@
 		"message": "caracteres",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "caractere de substituição",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "substituir emojis por texto",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/ru/messages.json

@@ -207,6 +207,10 @@
 		"message": "символов",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "replacement character",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "заменять эмодзи текстом",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/tr/messages.json

@@ -207,6 +207,10 @@
 		"message": "karakterler",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "yerine geçen karakter",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "emoji'leri metinle değiştir",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/uk/messages.json

@@ -207,6 +207,10 @@
 		"message": "символи",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "замінний символ",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "Замініть смайлики на текст",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/zh_CN/messages.json

@@ -207,6 +207,10 @@
 		"message": "字符",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "replacement character",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "用文字替换表情符号",
 		"description": "Options page label: 'replace emojis with text'"

+ 4 - 0
_locales/zh_TW/messages.json

@@ -207,6 +207,10 @@
 		"message": "字符",
 		"description": "Options page label: 'characters'"
 	},
+	"optionFilenameReplacementCharacter": {
+		"message": "replacement character",
+		"description": "Options page label: 'replacement character'"
+	},
 	"optionReplaceEmojisInFilename" : {
 		"message": "用文字替換表情符號",
 		"description": "Options page label: 'replace emojis with text'"

+ 5 - 0
src/ui/bg/ui-options.js

@@ -103,6 +103,7 @@ const filenameTemplateLabel = document.getElementById("filenameTemplateLabel");
 const filenameMaxLengthLabel = document.getElementById("filenameMaxLengthLabel");
 const filenameMaxLengthBytesUnitLabel = document.getElementById("filenameMaxLengthBytesUnitLabel");
 const filenameMaxLengthCharsUnitLabel = document.getElementById("filenameMaxLengthCharsUnitLabel");
+const filenameReplacementCharacterLabel = document.getElementById("filenameReplacementCharacterLabel");
 const replaceEmojisInFilenameLabel = document.getElementById("replaceEmojisInFilenameLabel");
 const shadowEnabledLabel = document.getElementById("shadowEnabledLabel");
 const setMaxResourceSizeLabel = document.getElementById("setMaxResourceSizeLabel");
@@ -228,6 +229,7 @@ const contextMenuEnabledInput = document.getElementById("contextMenuEnabledInput
 const filenameTemplateInput = document.getElementById("filenameTemplateInput");
 const filenameMaxLengthInput = document.getElementById("filenameMaxLengthInput");
 const filenameMaxLengthUnitInput = document.getElementById("filenameMaxLengthUnitInput");
+const filenameReplacementCharacterInput = document.getElementById("filenameReplacementCharacterInput");
 const replaceEmojisInFilenameInput = document.getElementById("replaceEmojisInFilenameInput");
 const shadowEnabledInput = document.getElementById("shadowEnabledInput");
 const maxResourceSizeInput = document.getElementById("maxResourceSizeInput");
@@ -605,6 +607,7 @@ filenameTemplateLabel.textContent = browser.i18n.getMessage("optionFilenameTempl
 filenameMaxLengthLabel.textContent = browser.i18n.getMessage("optionFilenameMaxLength");
 filenameMaxLengthBytesUnitLabel.textContent = browser.i18n.getMessage("optionFilenameMaxLengthBytesUnit");
 filenameMaxLengthCharsUnitLabel.textContent = browser.i18n.getMessage("optionFilenameMaxLengthCharsUnit");
+filenameReplacementCharacterLabel.textContent = browser.i18n.getMessage("optionFilenameReplacementCharacter");
 replaceEmojisInFilenameLabel.textContent = browser.i18n.getMessage("optionReplaceEmojisInFilename");
 shadowEnabledLabel.textContent = browser.i18n.getMessage("optionDisplayShadow");
 setMaxResourceSizeLabel.textContent = browser.i18n.getMessage("optionSetMaxResourceSize");
@@ -892,6 +895,7 @@ async function refresh(profileName) {
 	filenameTemplateInput.value = profileOptions.filenameTemplate;
 	filenameMaxLengthInput.value = profileOptions.filenameMaxLength;
 	filenameMaxLengthUnitInput.value = profileOptions.filenameMaxLengthUnit;
+	filenameReplacementCharacterInput.value = profileOptions.filenameReplacementCharacter;
 	replaceEmojisInFilenameInput.checked = profileOptions.replaceEmojisInFilename;
 	shadowEnabledInput.checked = profileOptions.shadowEnabled;
 	maxResourceSizeEnabledInput.checked = profileOptions.maxResourceSizeEnabled;
@@ -1007,6 +1011,7 @@ async function update() {
 			filenameTemplate: filenameTemplateInput.value,
 			filenameMaxLength: filenameMaxLengthInput.value,
 			filenameMaxLengthUnit: filenameMaxLengthUnitInput.value,
+			filenameReplacementCharacter: filenameReplacementCharacterInput.value,
 			replaceEmojisInFilename: replaceEmojisInFilenameInput.checked,
 			shadowEnabled: shadowEnabledInput.checked,
 			maxResourceSizeEnabled: maxResourceSizeEnabledInput.checked,

+ 4 - 0
src/ui/pages/help.html

@@ -154,6 +154,10 @@
 						<p>Enter the maximum length of the filename (without the extension) and its unit (bytes or
 							characters).</p>
 					</li>
+					<li data-options-label="filenameReplacementCharacterLabel"> <span class="option">Option: replacement
+							character</span>
+						<p>Enter the character used to replace invalid characters in the filename.</p>
+					</li>
 					<li data-options-label="confirmFilenameLabel" id="confirmFilenameOption"> <span
 							class="option">Option: open the "Save as"
 							dialog to confirm the file name</span>

+ 5 - 0
src/ui/pages/options.css

@@ -76,6 +76,10 @@ select {
     min-height: 22px;
 }
 
+input.small-input {
+    max-width: 3ch;
+}
+
 input.medium-input {
     min-width: 50%;
 }
@@ -392,6 +396,7 @@ a {
     padding-left: 8px;
     padding-bottom: 2px;
     min-height: 24px;
+    align-items: center;
 }
 
 .option.vertical {

+ 6 - 0
src/ui/pages/options.html

@@ -61,6 +61,12 @@
 					</select>
 				</div>
 			</div>
+			<div class="option">
+				<label for="filenameReplacementCharacterInput" id="filenameReplacementCharacterLabel"></label>
+				<div class="option-input">
+					<input type="text" id="filenameReplacementCharacterInput" class="small-input">
+				</div>
+			</div>
 			<div class="option" id="confirmFilenameOption">
 				<label for="confirmFilenameInput" id="confirmFilenameLabel"></label>
 				<input type="checkbox" id="confirmFilenameInput">