quick create
This commit is contained in:
parent
e970b010fc
commit
7563e02872
115
frontend/app.js
115
frontend/app.js
|
|
@ -43,8 +43,23 @@ const LOCAL_SETTINGS = {
|
||||||
hideUnderscoreFolders: { key: 'hideUnderscoreFolders', type: 'boolean', default: false },
|
hideUnderscoreFolders: { key: 'hideUnderscoreFolders', type: 'boolean', default: false },
|
||||||
tabInsertsTab: { key: 'tabInsertsTab', type: 'boolean', default: false },
|
tabInsertsTab: { key: 'tabInsertsTab', type: 'boolean', default: false },
|
||||||
sidebarPanelCollapsed: { key: 'sidebarPanelCollapsed', type: 'boolean', default: false },
|
sidebarPanelCollapsed: { key: 'sidebarPanelCollapsed', type: 'boolean', default: false },
|
||||||
|
// When true, the New Note name modal opens with a yyyymmddHHMMSS title pre-selected
|
||||||
|
// (Zettelkasten-style). Press Enter to accept, or type to replace. See issue #217.
|
||||||
|
autoFillNoteTitle: { key: 'autoFillNoteTitle', type: 'boolean', default: false },
|
||||||
// String settings
|
// String settings
|
||||||
sortMode: { key: 'sortMode', type: 'string', default: 'a-z' },
|
sortMode: { key: 'sortMode', type: 'string', default: 'a-z' },
|
||||||
|
// What clicking + (or the top-level New button) does. 'chooser' preserves the
|
||||||
|
// current dropdown-with-4-options behaviour; the other values dispatch straight
|
||||||
|
// to that creation flow. Shift+click always falls back to 'chooser'. See #217.
|
||||||
|
newButtonAction: {
|
||||||
|
key: 'newButtonAction', type: 'string', default: 'chooser',
|
||||||
|
valid: ['chooser', 'note', 'folder', 'template', 'drawing']
|
||||||
|
},
|
||||||
|
// Name of the last template that successfully created a note. Used to pre-select
|
||||||
|
// it the next time the "Create from Template" modal opens, so the common case of
|
||||||
|
// "I always use the same template" is one click less. Cleared / ignored silently
|
||||||
|
// if the template no longer exists.
|
||||||
|
lastUsedTemplate: { key: 'lastUsedTemplate', type: 'string', default: '' },
|
||||||
// Number settings with validation
|
// Number settings with validation
|
||||||
sidebarWidth: { key: 'sidebarWidth', type: 'number', default: CONFIG.DEFAULT_SIDEBAR_WIDTH, min: 200, max: 600 },
|
sidebarWidth: { key: 'sidebarWidth', type: 'number', default: CONFIG.DEFAULT_SIDEBAR_WIDTH, min: 200, max: 600 },
|
||||||
editorWidth: { key: 'editorWidth', type: 'number', default: 50, min: 20, max: 80 },
|
editorWidth: { key: 'editorWidth', type: 'number', default: 50, min: 20, max: 80 },
|
||||||
|
|
@ -408,6 +423,12 @@ function noteApp() {
|
||||||
availableTemplates: [],
|
availableTemplates: [],
|
||||||
selectedTemplate: '',
|
selectedTemplate: '',
|
||||||
newTemplateNoteName: '',
|
newTemplateNoteName: '',
|
||||||
|
// Persisted via LOCAL_SETTINGS; hydrated by loadLocalSettings() at app init.
|
||||||
|
// Inline defaults below mirror the LOCAL_SETTINGS defaults so the reactive
|
||||||
|
// proxy has the right type/shape before hydration runs. See issue #217.
|
||||||
|
newButtonAction: 'chooser',
|
||||||
|
autoFillNoteTitle: false,
|
||||||
|
lastUsedTemplate: '',
|
||||||
|
|
||||||
// New note / folder name modal (replaces window.prompt)
|
// New note / folder name modal (replaces window.prompt)
|
||||||
showCreateNameModal: false,
|
showCreateNameModal: false,
|
||||||
|
|
@ -1742,6 +1763,11 @@ function noteApp() {
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
|
||||||
|
// Remember for pre-selection next time openTemplateModal() runs (see #217).
|
||||||
|
// Captured BEFORE the reset below so the name is still available.
|
||||||
|
this.lastUsedTemplate = this.selectedTemplate;
|
||||||
|
try { localStorage.setItem('lastUsedTemplate', this.selectedTemplate); } catch (_) {}
|
||||||
|
|
||||||
// Close modal and reset state
|
// Close modal and reset state
|
||||||
this.showTemplateModal = false;
|
this.showTemplateModal = false;
|
||||||
this.selectedTemplate = '';
|
this.selectedTemplate = '';
|
||||||
|
|
@ -4570,16 +4596,49 @@ function noteApp() {
|
||||||
// DROPDOWN MENU SYSTEM
|
// DROPDOWN MENU SYSTEM
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
||||||
|
// Entry point for every "+" button and the top-level "New" button. Either opens
|
||||||
|
// the type-chooser dropdown (default behaviour) or dispatches straight to a
|
||||||
|
// single creation flow, depending on the user's `newButtonAction` setting.
|
||||||
|
//
|
||||||
|
// Shift+click ALWAYS forces the chooser regardless of configured default — a
|
||||||
|
// single discoverable escape hatch (mentioned in the settings description) that
|
||||||
|
// saves users from needing to open Settings just to reach the other modes once
|
||||||
|
// in a while. See issue #217.
|
||||||
|
//
|
||||||
|
// Folder context (dropdownTargetFolder) is set by the calling site BEFORE this
|
||||||
|
// method runs; each dispatched action reads it via inferredNewItemTargetFolder()
|
||||||
|
// and clears the dropdown state itself, so we don't call closeDropdown() here.
|
||||||
toggleNewDropdown(event) {
|
toggleNewDropdown(event) {
|
||||||
this.showNewDropdown = true; // Always open (or keep open)
|
const wantsChooser =
|
||||||
|
(event && event.shiftKey) ||
|
||||||
|
!this.newButtonAction ||
|
||||||
|
this.newButtonAction === 'chooser';
|
||||||
|
|
||||||
|
if (wantsChooser) {
|
||||||
|
this._openNewDropdownChooser(event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (this.newButtonAction) {
|
||||||
|
case 'note': this.createNote(); break;
|
||||||
|
case 'folder': this.createFolder(); break;
|
||||||
|
case 'template': this.openTemplateModal(); break;
|
||||||
|
case 'drawing': this.createNewDrawing(); break;
|
||||||
|
default: this._openNewDropdownChooser(event);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Open the type-chooser dropdown anchored next to the clicking element. Extracted
|
||||||
|
// verbatim from the original toggleNewDropdown body so existing positioning logic
|
||||||
|
// is preserved bit-for-bit; the new routing layer above is a thin wrapper.
|
||||||
|
_openNewDropdownChooser(event) {
|
||||||
|
this.showNewDropdown = true;
|
||||||
|
|
||||||
if (event && event.target) {
|
if (event && event.target) {
|
||||||
const rect = event.target.getBoundingClientRect();
|
const rect = event.target.getBoundingClientRect();
|
||||||
// Position dropdown next to the clicked element
|
let top = rect.bottom + 4;
|
||||||
let top = rect.bottom + 4; // 4px spacing
|
|
||||||
let left = rect.left;
|
let left = rect.left;
|
||||||
|
|
||||||
// Keep dropdown on screen
|
|
||||||
const dropdownWidth = 200;
|
const dropdownWidth = 200;
|
||||||
const dropdownHeight = 150;
|
const dropdownHeight = 150;
|
||||||
if (left + dropdownWidth > window.innerWidth) {
|
if (left + dropdownWidth > window.innerWidth) {
|
||||||
|
|
@ -4593,6 +4652,37 @@ function noteApp() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Open "Create from Template" modal. Shared by:
|
||||||
|
// - the type-chooser dropdown's "from template" button
|
||||||
|
// - the quick-dispatch path from toggleNewDropdown()
|
||||||
|
// so both paths consistently pre-select the last-used template (if it still
|
||||||
|
// exists) AND pre-fill the name when autoFillNoteTitle is on, matching the
|
||||||
|
// plain New Note popup behaviour. dropdownTargetFolder is intentionally NOT
|
||||||
|
// cleared — it's read at submit time by createNoteFromTemplate() via
|
||||||
|
// inferredNewItemTargetFolder(). See issue #217.
|
||||||
|
openTemplateModal() {
|
||||||
|
this.showNewDropdown = false;
|
||||||
|
this.mobileSidebarOpen = false;
|
||||||
|
const hasLastUsed = !!this.lastUsedTemplate &&
|
||||||
|
this.availableTemplates.some(t => t.name === this.lastUsedTemplate);
|
||||||
|
this.selectedTemplate = hasLastUsed ? this.lastUsedTemplate : '';
|
||||||
|
this.newTemplateNoteName = this.autoFillNoteTitle ? this._autoTitleTimestamp() : '';
|
||||||
|
this.showTemplateModal = true;
|
||||||
|
// If a template was pre-selected the modal can be submitted with Enter
|
||||||
|
// alone, so focus the name input and select its contents (so typing
|
||||||
|
// immediately replaces). When no template is pre-selected the user has
|
||||||
|
// to pick one first, so we don't steal focus from the dropdown.
|
||||||
|
if (hasLastUsed) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
const el = document.getElementById('template-note-name-input');
|
||||||
|
if (el) {
|
||||||
|
el.focus();
|
||||||
|
el.select();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
closeDropdown() {
|
closeDropdown() {
|
||||||
this.showNewDropdown = false;
|
this.showNewDropdown = false;
|
||||||
this.dropdownTargetFolder = null; // Reset folder context
|
this.dropdownTargetFolder = null; // Reset folder context
|
||||||
|
|
@ -4653,7 +4743,12 @@ function noteApp() {
|
||||||
this.mobileSidebarOpen = false;
|
this.mobileSidebarOpen = false;
|
||||||
this.createNameModalKind = kind;
|
this.createNameModalKind = kind;
|
||||||
this.createNameModalTargetFolder = targetFolder;
|
this.createNameModalTargetFolder = targetFolder;
|
||||||
this.createNameModalInput = '';
|
// Auto-fill title with a yyyymmddHHMMSS timestamp when the user opted in
|
||||||
|
// (notes only; doesn't make sense for folders). The input gets .select()'d
|
||||||
|
// below, so typing anything immediately replaces it — Enter accepts it as
|
||||||
|
// a Zettelkasten-style filename. See issue #217.
|
||||||
|
this.createNameModalInput =
|
||||||
|
(kind === 'note' && this.autoFillNoteTitle) ? this._autoTitleTimestamp() : '';
|
||||||
this.showCreateNameModal = true;
|
this.showCreateNameModal = true;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
const el = document.getElementById('create-name-modal-input');
|
const el = document.getElementById('create-name-modal-input');
|
||||||
|
|
@ -4664,6 +4759,16 @@ function noteApp() {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Zettelkasten convention: yyyymmddHHMMSS — compact, sorts chronologically,
|
||||||
|
// and contains no characters that need escaping on any filesystem. Local
|
||||||
|
// time deliberately (matches what users see on the clock).
|
||||||
|
_autoTitleTimestamp() {
|
||||||
|
const d = new Date();
|
||||||
|
const pad = (n) => String(n).padStart(2, '0');
|
||||||
|
return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}` +
|
||||||
|
`${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;
|
||||||
|
},
|
||||||
|
|
||||||
closeCreateNameModal() {
|
closeCreateNameModal() {
|
||||||
this.showCreateNameModal = false;
|
this.showCreateNameModal = false;
|
||||||
this.createNameModalInput = '';
|
this.createNameModalInput = '';
|
||||||
|
|
|
||||||
|
|
@ -2228,6 +2228,46 @@
|
||||||
<p class="text-xs mt-1" style="color: var(--text-tertiary);" x-text="t('settings.tab_inserts_tab_desc')"></p>
|
<p class="text-xs mt-1" style="color: var(--text-tertiary);" x-text="t('settings.tab_inserts_tab_desc')"></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- + / New button action (issue #217). Lets the user skip the
|
||||||
|
type-chooser dropdown when they almost always create the same
|
||||||
|
kind of thing. Persisted in LOCAL_SETTINGS.newButtonAction. -->
|
||||||
|
<div class="mb-4">
|
||||||
|
<label class="block text-xs font-medium mb-2" style="color: var(--text-secondary);" x-text="t('settings.new_button_action')"></label>
|
||||||
|
<select
|
||||||
|
x-model="newButtonAction"
|
||||||
|
@change="localStorage.setItem('newButtonAction', newButtonAction)"
|
||||||
|
class="w-full px-3 py-2 rounded border text-sm"
|
||||||
|
style="background-color: var(--bg-tertiary); color: var(--text-primary); border-color: var(--border-primary);"
|
||||||
|
>
|
||||||
|
<option value="chooser" x-text="t('settings.new_button_option_chooser')"></option>
|
||||||
|
<option value="note" x-text="t('settings.new_button_option_note')"></option>
|
||||||
|
<option value="folder" x-text="t('settings.new_button_option_folder')"></option>
|
||||||
|
<option value="template" x-text="t('settings.new_button_option_template')"></option>
|
||||||
|
<option value="drawing" x-text="t('settings.new_button_option_drawing')"></option>
|
||||||
|
</select>
|
||||||
|
<p class="text-xs mt-1" style="color: var(--text-tertiary);" x-text="t('settings.new_button_action_desc')"></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Auto-fill new-note title with timestamp (issue #217). Only
|
||||||
|
applies to plain-note creation (folder/template have their
|
||||||
|
own naming flows). Persisted as autoFillNoteTitle. -->
|
||||||
|
<div class="mb-4">
|
||||||
|
<label class="flex items-center justify-between cursor-pointer">
|
||||||
|
<span class="text-xs font-medium" style="color: var(--text-secondary);" x-text="t('settings.auto_fill_note_title')"></span>
|
||||||
|
<div
|
||||||
|
@click="autoFillNoteTitle = !autoFillNoteTitle; localStorage.setItem('autoFillNoteTitle', autoFillNoteTitle)"
|
||||||
|
class="relative w-10 h-5 rounded-full transition-colors cursor-pointer"
|
||||||
|
:style="autoFillNoteTitle ? 'background-color: var(--accent-primary)' : 'background-color: var(--bg-tertiary)'"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="absolute top-0.5 left-0.5 w-4 h-4 rounded-full transition-transform"
|
||||||
|
:style="'background-color: var(--bg-primary);' + (autoFillNoteTitle ? ' transform: translateX(20px);' : '')"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<p class="text-xs mt-1" style="color: var(--text-tertiary);" x-text="t('settings.auto_fill_note_title_desc')"></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Logout (if auth enabled) - uses authEnabled from main app state -->
|
<!-- Logout (if auth enabled) - uses authEnabled from main app state -->
|
||||||
<div x-show="authEnabled" class="mb-4">
|
<div x-show="authEnabled" class="mb-4">
|
||||||
<label class="block text-xs font-medium mb-2" style="color: var(--text-secondary);" x-text="t('settings.account')"></label>
|
<label class="block text-xs font-medium mb-2" style="color: var(--text-secondary);" x-text="t('settings.account')"></label>
|
||||||
|
|
@ -3449,7 +3489,7 @@
|
||||||
<span x-text="t('sidebar.new_folder')"></span>
|
<span x-text="t('sidebar.new_folder')"></span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click.stop="showTemplateModal = true; showNewDropdown = false; mobileSidebarOpen = false"
|
@click.stop="openTemplateModal()"
|
||||||
class="w-full px-4 py-2.5 text-sm text-left flex items-center gap-3 transition-colors"
|
class="w-full px-4 py-2.5 text-sm text-left flex items-center gap-3 transition-colors"
|
||||||
style="color: var(--text-primary);"
|
style="color: var(--text-primary);"
|
||||||
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
||||||
|
|
@ -3505,6 +3545,7 @@
|
||||||
<label class="block text-sm font-medium mb-2" style="color: var(--text-secondary);" x-text="t('notes.prompt_name')">
|
<label class="block text-sm font-medium mb-2" style="color: var(--text-secondary);" x-text="t('notes.prompt_name')">
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
|
id="template-note-name-input"
|
||||||
x-model="newTemplateNoteName"
|
x-model="newTemplateNoteName"
|
||||||
type="text"
|
type="text"
|
||||||
:placeholder="t('notes.input_placeholder')"
|
:placeholder="t('notes.input_placeholder')"
|
||||||
|
|
@ -3538,7 +3579,7 @@
|
||||||
:disabled="!selectedTemplate || !newTemplateNoteName.trim() || availableTemplates.length === 0"
|
:disabled="!selectedTemplate || !newTemplateNoteName.trim() || availableTemplates.length === 0"
|
||||||
class="flex-1 px-4 py-2 rounded font-medium text-white transition-colors"
|
class="flex-1 px-4 py-2 rounded font-medium text-white transition-colors"
|
||||||
style="background-color: var(--accent-primary);"
|
style="background-color: var(--accent-primary);"
|
||||||
:style="(!selectedTemplate || !newTemplateNoteName.trim() || availableTemplates.length === 0) ? 'opacity: 0.5; cursor: not-allowed;' : ''"
|
:style="(!selectedTemplate || !newTemplateNoteName.trim() || availableTemplates.length === 0) ? { opacity: '0.5', cursor: 'not-allowed' } : {}"
|
||||||
onmouseover="if(!this.disabled) this.style.backgroundColor='var(--accent-hover)'"
|
onmouseover="if(!this.disabled) this.style.backgroundColor='var(--accent-hover)'"
|
||||||
onmouseout="if(!this.disabled) this.style.backgroundColor='var(--accent-primary)'"
|
onmouseout="if(!this.disabled) this.style.backgroundColor='var(--accent-primary)'"
|
||||||
x-text="t('templates.create_note')"
|
x-text="t('templates.create_note')"
|
||||||
|
|
@ -3657,6 +3698,7 @@
|
||||||
<div x-show="showConfirmModal"
|
<div x-show="showConfirmModal"
|
||||||
@click.self="confirmModalCancel()"
|
@click.self="confirmModalCancel()"
|
||||||
@keydown.escape.window="showConfirmModal && confirmModalCancel()"
|
@keydown.escape.window="showConfirmModal && confirmModalCancel()"
|
||||||
|
@keydown.enter.window="if (showConfirmModal) { $event.preventDefault(); confirmModalConfirm(); }"
|
||||||
class="fixed inset-0 flex items-center justify-center p-4"
|
class="fixed inset-0 flex items-center justify-center p-4"
|
||||||
style="background-color: rgba(0, 0, 0, 0.5); z-index: 1250;"
|
style="background-color: rgba(0, 0, 0, 0.5); z-index: 1250;"
|
||||||
x-cloak>
|
x-cloak>
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,16 @@
|
||||||
"hide_underscore_folders": "Systemordner ausblenden",
|
"hide_underscore_folders": "Systemordner ausblenden",
|
||||||
"hide_underscore_folders_desc": "_attachments, _templates und andere Unterstrich-Ordner ausblenden",
|
"hide_underscore_folders_desc": "_attachments, _templates und andere Unterstrich-Ordner ausblenden",
|
||||||
"tab_inserts_tab": "Tab-Taste fügt Tab ein",
|
"tab_inserts_tab": "Tab-Taste fügt Tab ein",
|
||||||
"tab_inserts_tab_desc": "Tab drücken, um ein Tabulatorzeichen einzufügen statt den Fokus zu wechseln"
|
"tab_inserts_tab_desc": "Tab drücken, um ein Tabulatorzeichen einzufügen statt den Fokus zu wechseln",
|
||||||
|
"new_button_action": "Wenn du auf + klickst",
|
||||||
|
"new_button_action_desc": "Umschalt+Klick zeigt immer die Auswahl.",
|
||||||
|
"new_button_option_chooser": "Auswahl anzeigen (Standard)",
|
||||||
|
"new_button_option_note": "Neue Notiz",
|
||||||
|
"new_button_option_folder": "Neuer Ordner",
|
||||||
|
"new_button_option_template": "Neue Notiz aus Vorlage",
|
||||||
|
"new_button_option_drawing": "Neue Zeichnung",
|
||||||
|
"auto_fill_note_title": "Titel mit Zeitstempel",
|
||||||
|
"auto_fill_note_title_desc": "jjjjmmttHHMMSS. Enter akzeptiert, Tippen ersetzt."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Startseite",
|
"title": "Startseite",
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,16 @@
|
||||||
"hide_underscore_folders": "Hide system folders",
|
"hide_underscore_folders": "Hide system folders",
|
||||||
"hide_underscore_folders_desc": "Hide _attachments, _templates and other underscore folders from sidebar",
|
"hide_underscore_folders_desc": "Hide _attachments, _templates and other underscore folders from sidebar",
|
||||||
"tab_inserts_tab": "Tab key inserts tab",
|
"tab_inserts_tab": "Tab key inserts tab",
|
||||||
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus"
|
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus",
|
||||||
|
"new_button_action": "When you click +",
|
||||||
|
"new_button_action_desc": "Shift+click always shows the chooser.",
|
||||||
|
"new_button_option_chooser": "Show chooser (default)",
|
||||||
|
"new_button_option_note": "New note",
|
||||||
|
"new_button_option_folder": "New folder",
|
||||||
|
"new_button_option_template": "New note from template",
|
||||||
|
"new_button_option_drawing": "New drawing",
|
||||||
|
"auto_fill_note_title": "Auto-fill title with timestamp",
|
||||||
|
"auto_fill_note_title_desc": "yyyymmddHHMMSS. Enter to accept, type to replace."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,16 @@
|
||||||
"hide_underscore_folders": "Hide system folders",
|
"hide_underscore_folders": "Hide system folders",
|
||||||
"hide_underscore_folders_desc": "Hide _attachments, _templates and other underscore folders from sidebar",
|
"hide_underscore_folders_desc": "Hide _attachments, _templates and other underscore folders from sidebar",
|
||||||
"tab_inserts_tab": "Tab key inserts tab",
|
"tab_inserts_tab": "Tab key inserts tab",
|
||||||
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus"
|
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus",
|
||||||
|
"new_button_action": "When you click +",
|
||||||
|
"new_button_action_desc": "Shift+click always shows the chooser.",
|
||||||
|
"new_button_option_chooser": "Show chooser (default)",
|
||||||
|
"new_button_option_note": "New note",
|
||||||
|
"new_button_option_folder": "New folder",
|
||||||
|
"new_button_option_template": "New note from template",
|
||||||
|
"new_button_option_drawing": "New drawing",
|
||||||
|
"auto_fill_note_title": "Auto-fill title with timestamp",
|
||||||
|
"auto_fill_note_title_desc": "yyyymmddHHMMSS. Enter to accept, type to replace."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,16 @@
|
||||||
"hide_underscore_folders": "Ocultar carpetas de sistema",
|
"hide_underscore_folders": "Ocultar carpetas de sistema",
|
||||||
"hide_underscore_folders_desc": "Ocultar _attachments, _templates y otras carpetas con guion bajo",
|
"hide_underscore_folders_desc": "Ocultar _attachments, _templates y otras carpetas con guion bajo",
|
||||||
"tab_inserts_tab": "Tabulador inserta tabulación",
|
"tab_inserts_tab": "Tabulador inserta tabulación",
|
||||||
"tab_inserts_tab_desc": "Pulsa Tab para insertar un tabulador en lugar de cambiar el foco"
|
"tab_inserts_tab_desc": "Pulsa Tab para insertar un tabulador en lugar de cambiar el foco",
|
||||||
|
"new_button_action": "Cuando haces clic en +",
|
||||||
|
"new_button_action_desc": "Mayús+clic siempre muestra el selector.",
|
||||||
|
"new_button_option_chooser": "Mostrar selector (por defecto)",
|
||||||
|
"new_button_option_note": "Nueva nota",
|
||||||
|
"new_button_option_folder": "Nueva carpeta",
|
||||||
|
"new_button_option_template": "Nueva nota desde plantilla",
|
||||||
|
"new_button_option_drawing": "Nuevo dibujo",
|
||||||
|
"auto_fill_note_title": "Título con marca de tiempo",
|
||||||
|
"auto_fill_note_title_desc": "aaaammddHHMMSS. Intro acepta, escribe para reemplazar."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Inicio",
|
"title": "Inicio",
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,16 @@
|
||||||
"hide_underscore_folders": "Masquer les dossiers système",
|
"hide_underscore_folders": "Masquer les dossiers système",
|
||||||
"hide_underscore_folders_desc": "Masquer _attachments, _templates et autres dossiers préfixés",
|
"hide_underscore_folders_desc": "Masquer _attachments, _templates et autres dossiers préfixés",
|
||||||
"tab_inserts_tab": "Tab insère une tabulation",
|
"tab_inserts_tab": "Tab insère une tabulation",
|
||||||
"tab_inserts_tab_desc": "Appuyez sur Tab pour insérer une tabulation au lieu de changer le focus"
|
"tab_inserts_tab_desc": "Appuyez sur Tab pour insérer une tabulation au lieu de changer le focus",
|
||||||
|
"new_button_action": "Quand vous cliquez sur +",
|
||||||
|
"new_button_action_desc": "Maj+clic affiche toujours le sélecteur.",
|
||||||
|
"new_button_option_chooser": "Afficher le sélecteur (par défaut)",
|
||||||
|
"new_button_option_note": "Nouvelle note",
|
||||||
|
"new_button_option_folder": "Nouveau dossier",
|
||||||
|
"new_button_option_template": "Nouvelle note depuis un modèle",
|
||||||
|
"new_button_option_drawing": "Nouveau dessin",
|
||||||
|
"auto_fill_note_title": "Titre avec horodatage",
|
||||||
|
"auto_fill_note_title_desc": "aaaammjjHHMMSS. Entrée accepte, tapez pour remplacer."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Accueil",
|
"title": "Accueil",
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,16 @@
|
||||||
"hide_underscore_folders": "Rendszermappák elrejtése",
|
"hide_underscore_folders": "Rendszermappák elrejtése",
|
||||||
"hide_underscore_folders_desc": "_attachments, _templates és más aláhúzásos mappák elrejtése",
|
"hide_underscore_folders_desc": "_attachments, _templates és más aláhúzásos mappák elrejtése",
|
||||||
"tab_inserts_tab": "Tab billentyű több helyet hagy a szövegben",
|
"tab_inserts_tab": "Tab billentyű több helyet hagy a szövegben",
|
||||||
"tab_inserts_tab_desc": "Nyomd meg a Tab-ot, hogy több helyet hagyj a szövegben a fókuszváltás helyett"
|
"tab_inserts_tab_desc": "Nyomd meg a Tab-ot, hogy több helyet hagyj a szövegben a fókuszváltás helyett",
|
||||||
|
"new_button_action": "A + gombra kattintáskor",
|
||||||
|
"new_button_action_desc": "Shift+kattintás mindig megmutatja a választót.",
|
||||||
|
"new_button_option_chooser": "Választó megjelenítése (alapértelmezett)",
|
||||||
|
"new_button_option_note": "Új jegyzet",
|
||||||
|
"new_button_option_folder": "Új mappa",
|
||||||
|
"new_button_option_template": "Új jegyzet sablonból",
|
||||||
|
"new_button_option_drawing": "Új rajz",
|
||||||
|
"auto_fill_note_title": "Cím kitöltése időbélyeggel",
|
||||||
|
"auto_fill_note_title_desc": "éééé.hh.nn.ÓÓ.PP.MM. Enter elfogad, gépelés felülír."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Főoldal",
|
"title": "Főoldal",
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,16 @@
|
||||||
"hide_underscore_folders": "Nascondi cartelle di sistema",
|
"hide_underscore_folders": "Nascondi cartelle di sistema",
|
||||||
"hide_underscore_folders_desc": "Nascondi _attachments, _templates e altre cartelle con underscore",
|
"hide_underscore_folders_desc": "Nascondi _attachments, _templates e altre cartelle con underscore",
|
||||||
"tab_inserts_tab": "Tab inserisce tabulazione",
|
"tab_inserts_tab": "Tab inserisce tabulazione",
|
||||||
"tab_inserts_tab_desc": "Premi Tab per inserire una tabulazione invece di cambiare focus"
|
"tab_inserts_tab_desc": "Premi Tab per inserire una tabulazione invece di cambiare focus",
|
||||||
|
"new_button_action": "Quando clicchi su +",
|
||||||
|
"new_button_action_desc": "Shift+clic mostra sempre il selettore.",
|
||||||
|
"new_button_option_chooser": "Mostra selettore (predefinito)",
|
||||||
|
"new_button_option_note": "Nuova nota",
|
||||||
|
"new_button_option_folder": "Nuova cartella",
|
||||||
|
"new_button_option_template": "Nuova nota da modello",
|
||||||
|
"new_button_option_drawing": "Nuovo disegno",
|
||||||
|
"auto_fill_note_title": "Compila titolo con timestamp",
|
||||||
|
"auto_fill_note_title_desc": "aaaammddHHMMSS. Invio accetta, digita per sostituire."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,16 @@
|
||||||
"hide_underscore_folders": "システムフォルダを非表示",
|
"hide_underscore_folders": "システムフォルダを非表示",
|
||||||
"hide_underscore_folders_desc": "_attachments、_templatesなどのフォルダをサイドバーから非表示",
|
"hide_underscore_folders_desc": "_attachments、_templatesなどのフォルダをサイドバーから非表示",
|
||||||
"tab_inserts_tab": "Tabキーでタブを挿入",
|
"tab_inserts_tab": "Tabキーでタブを挿入",
|
||||||
"tab_inserts_tab_desc": "Tabキーでフォーカス移動ではなくタブ文字を挿入"
|
"tab_inserts_tab_desc": "Tabキーでフォーカス移動ではなくタブ文字を挿入",
|
||||||
|
"new_button_action": "+ をクリックしたとき",
|
||||||
|
"new_button_action_desc": "Shift+クリックで常にセレクタが開きます。",
|
||||||
|
"new_button_option_chooser": "セレクタを表示(デフォルト)",
|
||||||
|
"new_button_option_note": "新規ノート",
|
||||||
|
"new_button_option_folder": "新規フォルダ",
|
||||||
|
"new_button_option_template": "テンプレートから新規ノート",
|
||||||
|
"new_button_option_drawing": "新規お絵描き",
|
||||||
|
"auto_fill_note_title": "タイトルに日時を自動入力",
|
||||||
|
"auto_fill_note_title_desc": "yyyymmddHHMMSS。Enterで確定、入力で置換。"
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "ホーム",
|
"title": "ホーム",
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,16 @@
|
||||||
"hide_underscore_folders": "Скрыть системные папки",
|
"hide_underscore_folders": "Скрыть системные папки",
|
||||||
"hide_underscore_folders_desc": "Скрыть _attachments, _templates и другие папки с подчёркиванием",
|
"hide_underscore_folders_desc": "Скрыть _attachments, _templates и другие папки с подчёркиванием",
|
||||||
"tab_inserts_tab": "Tab вставляет табуляцию",
|
"tab_inserts_tab": "Tab вставляет табуляцию",
|
||||||
"tab_inserts_tab_desc": "Нажмите Tab для вставки табуляции вместо переключения фокуса"
|
"tab_inserts_tab_desc": "Нажмите Tab для вставки табуляции вместо переключения фокуса",
|
||||||
|
"new_button_action": "При нажатии +",
|
||||||
|
"new_button_action_desc": "Shift+клик всегда показывает селектор.",
|
||||||
|
"new_button_option_chooser": "Показать селектор (по умолчанию)",
|
||||||
|
"new_button_option_note": "Новая заметка",
|
||||||
|
"new_button_option_folder": "Новая папка",
|
||||||
|
"new_button_option_template": "Новая заметка из шаблона",
|
||||||
|
"new_button_option_drawing": "Новый рисунок",
|
||||||
|
"auto_fill_note_title": "Метка времени в названии",
|
||||||
|
"auto_fill_note_title_desc": "ггггммддЧЧММСС. Enter — принять, печатать — заменить."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,16 @@
|
||||||
"hide_underscore_folders": "Skrij sistemske mape",
|
"hide_underscore_folders": "Skrij sistemske mape",
|
||||||
"hide_underscore_folders_desc": "Skrij _attachments, _templates in druge mape s podčrtajem",
|
"hide_underscore_folders_desc": "Skrij _attachments, _templates in druge mape s podčrtajem",
|
||||||
"tab_inserts_tab": "Tipka Tab vstavi tabulator",
|
"tab_inserts_tab": "Tipka Tab vstavi tabulator",
|
||||||
"tab_inserts_tab_desc": "Pritisnite Tab za vstavljanje tabulatorja namesto premikanja fokusa"
|
"tab_inserts_tab_desc": "Pritisnite Tab za vstavljanje tabulatorja namesto premikanja fokusa",
|
||||||
|
"new_button_action": "Ko kliknete +",
|
||||||
|
"new_button_action_desc": "Shift+klik vedno pokaže izbirnik.",
|
||||||
|
"new_button_option_chooser": "Pokaži izbirnik (privzeto)",
|
||||||
|
"new_button_option_note": "Nova zabeležka",
|
||||||
|
"new_button_option_folder": "Nova mapa",
|
||||||
|
"new_button_option_template": "Nova zabeležka iz predloge",
|
||||||
|
"new_button_option_drawing": "Nova risba",
|
||||||
|
"auto_fill_note_title": "Časovni žig v naslovu",
|
||||||
|
"auto_fill_note_title_desc": "llllmmddUUMMSS. Enter potrdi, tipkanje zamenja."
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Domov",
|
"title": "Domov",
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,16 @@
|
||||||
"hide_underscore_folders": "隐藏系统文件夹",
|
"hide_underscore_folders": "隐藏系统文件夹",
|
||||||
"hide_underscore_folders_desc": "从侧边栏隐藏 _attachments、_templates 等下划线文件夹",
|
"hide_underscore_folders_desc": "从侧边栏隐藏 _attachments、_templates 等下划线文件夹",
|
||||||
"tab_inserts_tab": "Tab键插入制表符",
|
"tab_inserts_tab": "Tab键插入制表符",
|
||||||
"tab_inserts_tab_desc": "按Tab键插入制表符而不是切换焦点"
|
"tab_inserts_tab_desc": "按Tab键插入制表符而不是切换焦点",
|
||||||
|
"new_button_action": "点击 + 时",
|
||||||
|
"new_button_action_desc": "Shift+点击始终显示选择器。",
|
||||||
|
"new_button_option_chooser": "显示选择器(默认)",
|
||||||
|
"new_button_option_note": "新建笔记",
|
||||||
|
"new_button_option_folder": "新建文件夹",
|
||||||
|
"new_button_option_template": "从模板新建笔记",
|
||||||
|
"new_button_option_drawing": "新建绘图",
|
||||||
|
"auto_fill_note_title": "用时间戳自动填充标题",
|
||||||
|
"auto_fill_note_title_desc": "yyyymmddHHMMSS。Enter 接受,输入以替换。"
|
||||||
},
|
},
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "首页",
|
"title": "首页",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue