1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-01-02 12:47:41 +02:00

Tools: Spellcheck Markdown documents (#10004)

This commit is contained in:
Laurent Cozic 2024-02-26 16:53:48 +00:00 committed by GitHub
parent 83599234a9
commit 28fd9c3039
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
42 changed files with 1419 additions and 1146 deletions

View File

@ -207,6 +207,22 @@ if [ "$RUN_TESTS" == "1" ]; then
fi
fi
# =============================================================================
# Spellchecking
# =============================================================================
if [ "$IS_PULL_REQUEST" == "1" ]; then
if [ "$IS_LINUX" == "1" ]; then
echo "Step: Spellchecking..."
yarn spellcheck --all
testResult=$?
if [ $testResult -ne 0 ]; then
exit $testResult
fi
fi
fi
# =============================================================================
# Find out if we should run the build or not. Electron-builder gets stuck when
# building PRs so we disable it in this case. The Linux build should provide

File diff suppressed because it is too large Load Diff

View File

@ -16,4 +16,7 @@ module.exports = {
'yarn packageJsonLint',
'yarn linter-precommit',
],
'*.{md,mdx}': [
'yarn spellcheck',
],
};

View File

@ -51,7 +51,6 @@
"releaseServer": "node packages/tools/release-server.js",
"setupNewRelease": "node ./packages/tools/setupNewRelease",
"spellcheck": "node packages/tools/spellcheck.js",
"spellcheck-base": "cspell --no-progress --no-summary --config cspell.json",
"tagServerLatest": "node packages/tools/tagServerLatest.js",
"test-ci": "yarn workspaces foreach --parallel --verbose --interlaced --jobs 2 run test-ci",
"test": "yarn workspaces foreach --parallel --verbose --interlaced --jobs 2 run test",

View File

@ -12,7 +12,7 @@ jest.mock('../../../services/bridge', () => ({
}),
}));
describe('mapStateTotitle', () => {
describe('mapStateToTitle', () => {
test('should return null if spellchecker.enabled is false', () => {

View File

@ -10,12 +10,12 @@
## Configuring the Share Extension
1. Delete *ShareViewController.h* and *ShareViewController.m* from the project. (Select files and right click, then Delete)
2. On the confirmation popup, select Move to Trash
3. Now add *ShareViewController.h* and *ShareViewController.m* from *ShareExtension/Source/ShareExtenstion*. This can be done by right clicking on the *ShareExtension* folder in Xcode and selecting Add Files to "Joplin". Double check that the ShareExtension is checked for Add to targets and click Add.
3. Now add *ShareViewController.h* and *ShareViewController.m* from *ShareExtension/Source/ShareExtension*. This can be done by right clicking on the *ShareExtension* folder in Xcode and selecting Add Files to "Joplin". Double check that the ShareExtension is checked for Add to targets and click Add.
4. Switch over to git and reset the changes done to *ShareExtension/Base.lproj/Maininterface.storyboard* and *ShareExtension/Info.plist*, as Xcode generated new versions of these files and overwrote ours.
5. Now select the ShareExtension Target and go to Signing & Capabilities
6. Click the + Capability and search for App Groups and add it
7. Back in git reset *ShareExtension/ShareExtension.entitlements* as Xcode just overwrote it. Back in Xcode you should see the app group set
8. Now switch to General, just left of Signing & Capabilites
8. Now switch to General, just left of Signing & Capabilities
9. Under Deployment Info, change the iOS version to match the Joplin target version, which is 9.0
## Configuring Joplin

View File

@ -27,10 +27,10 @@ class BackButtonService {
return this.handlers_.push(handler);
}
static removeHandler(hanlder) {
static removeHandler(handler) {
for (let i = this.handlers_.length - 1; i >= 0; i--) {
const h = this.handlers_[i];
if (h === hanlder) this.handlers_.splice(i, 1);
if (h === handler) this.handlers_.splice(i, 1);
}
}
}

View File

@ -30,10 +30,10 @@ export default class NavService {
}
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
public static removeHandler(hanlder: OnNavigateCallback) {
public static removeHandler(handler: OnNavigateCallback) {
for (let i = this.handlers_.length - 1; i >= 0; i--) {
const h = this.handlers_[i];
if (h === hanlder) this.handlers_.splice(i, 1);
if (h === handler) this.handlers_.splice(i, 1);
}
}
}

View File

@ -106,13 +106,13 @@ Fallback drivers have two write modes:
- In **ReadAndClear** mode, it's going to clear the fallback driver content every time an item is moved to the main driver. It means that over time the old storage will be cleared and all content will be on the new storage.
- In **ReadAndWrite** mode, it's going to write the content to the fallback driver too. This is purely for safey - it allows deploying the new storage (such as the filesystem or S3) but still keep the old storage up-to-date. So if something goes wrong it's possible to go back to the old storage until the new one is working.
- In **ReadAndWrite** mode, it's going to write the content to the fallback driver too. This is purely for safety - it allows deploying the new storage (such as the filesystem or S3) but still keep the old storage up-to-date. So if something goes wrong it's possible to go back to the old storage until the new one is working.
It's recommended to start with ReadAndWrite mode.
This simple setup with main and fallback driver is sufficient to start using a new storage, however old content that never gets updated will stay on the database. To migrate this content too, you can use the `storage import` command. It takes a connection string and move all items from the old storage to the new one.
For example, to move all content from the database to the filesytem:
For example, to move all content from the database to the filesystem:
docker exec -it CONTAINER_ID node packages/server/dist/app.js storage import --connection 'Type=Filesystem; Path=/path/to/dir'

View File

@ -0,0 +1,381 @@
aàáâãäåāą
AÀÁÂÃÄÅĀĄ
abbrev
ABCDEFGHIJ
Abdallah
Abhishek
Abkhazian
accel
accum
actualkeyword
adata
Adeeb
Ademar
advlist
AGSFE
Akash
Aland
Åland
alertbanner
Allaire
alse
altool
Alwasifey
aman
ambrt
Amharic
amothc
anchorpage
andrejilderda
Anjula
anjulalk
anki
annotatescrollbar
Antarctique
antarctiques
Antártico
anymore
apidoc
apidox
apos
appiconset
appimages
applewebkit
approot
arableague
Aragonés
ARITIM
armeabi
Armory
asdfasf
asrient
Asrient
asterix
atest
atestb
atleast
attribname
attribs
attribvalue
authcode
autocompleteitem
autocompleter
Autocompleter
autocompletions
AUTOEXEC
autohide
automatch
autoresize
Autoresize
autosize
Avenir
avif
awaiter
Ayiti
azamah
Azərbaycan
backoff
bahasa
Bangla
bbox
Bbox
Bêafrîka
bedwardly
beforeinput
behavior
België
Belgien
Belgique
Bénin
Bhutani
bibtex
Bihari
Bishoy
Bislama
blabla
blablablabla
blerg
blockid
bonjour
Bonjour
boohay
Bosna
BOUS
Bouvet
Bouvetøya
Bpcy
browserslist
bthqu
btns
Bulibiya
bullist
bulma
Byelorussian
bylaws
calebjohn
Calédonie
Caligraphic
callsites
Cameroun
cantdothat
Capslock
cardcontainer
cardimage
cardmenuitem
cardtext
Caribisch
CAUTOEXEC
cçćč
CÇĆČ
cdataend
cdatastart
cdot
ceaf
ceea
Celebian
centered
centrafricaine
Centrafrican
Česká
changedtitle
Charcode
charcodes
checkboxclick
checkmark
chemfive
childs
choiceitem
chromedriver
chromeframe
chromeos
Città
Clearable
clike
closebrackets
closecdata
closenamespace
closetag
Cmds
cocoapods
Cocoapods
codemirror
codepoint
codesample
colored
Colorful
colorinput
colorpicker
colorswatch
colspan
committerdate
commmand
commmmmand
commonmark
COMMONMARK
Comores
compositionend
compositionstart
compositionupdate
conflicter
connectionstring
contenteditable
contextform
contextformbutton
contextformtogglebutton
contextkey
contexttoolbar
continuelist
Contrl
Conv
convo
copyfile
copytags
corepack
cozic
Cozic
createdb
createdocument
createdocumentoptions
createfile
Creds
Crna
cronspec
cros
crypted
Curaçao
curso
customeditor
customkeymap
cyingfan
d'Ivoire
Daeraxa
Danmark
Dansk
dataimg
datauri
Datauri
dataurl
datetime
Datetime
datetimepicker
davris
dbuuid
DDTHH
deaccelerates
deflist
deindent
deinit
deintegrate
Démocratique
deselector
deserialise
Desperados
deuxième
devdependencies
dflt
dialog
Dialog
dialogbox
dialogs
Dialogs
DIALOGS
diffchecker
Dimen
Dismisable
Distill
dists
Divs
Dmytro
docid
docsize
doctypes
docu
documentfiledetail
doesnotwork
doesntexist
doesntlookright
domelementtype
domhandler
Dominicana
domutils
DONATELINKS
downarrow
dragcursor
dragdrop
draggesture
dropdownalert
dünn
Dups
dylib
dynamiclib
ecuatorial
eèéêëěēę
EÈÉÊËĚĒĘ
Eesti
efdbaeb
effet
efgh
égalité
Éire
elem
elementpath
elems
Elend
ellipsize
ELOCKED
emptylist
encryptable
endregion
enex
Enex
ENEX
ENSCOCOAERRORDOMAIN
enumber
eqeqeq
eqnsw
équatoriale
Erro
errorish
escapeplus
eslintignore
España
étiquette
EUNSPECIFIED
eventname
evermeet
evernote
Evernote
execa
expando
expirable
Expirable
expval
Færøerne
Fahrräder
FAILSAFE
fallbacks
falsey
fancymenuitem
fancytype
Fastmail
favorites
fhash
Fiber
fileoperationoptions
filepicker
Flavored
flusing
foldericon
folderid
folderkey
foldertest
foldl
fontawesome
fontface
foobar
Foobar
forall
forcewake
forecolor
formatcoords
formedness
Føroyar
fortawesome
foxmask
française
françaises
freegeoip
frontmatter
FRPP
FULLNAME
Fullpath
Gabuutih
gedit
geoip
Geoip
geoloc
geoplugin
getlastmodified
getpersisteduripermissions
gettext
Ghpcy
githubusercontent
Gora
gotchas
gradlew
Grønland
grouptoolbarbutton
Gruber
gsoc
gttest
Guåhån
guarentee
guarentees
Guiena
Guiné
Guinée
gulpfile
gumbo
Guyane
gvim
Haïti

View File

@ -0,0 +1,398 @@
haspermission
Hausa
hdpi
headerless
Heino
Heisenbug
héllô
Hercegovina
hexodotsh
hideothers
hift
highjack
highlited
historyhas
HKEY
HMRKG
hocr
hoge
homenote
horiz
hotfolder
HOWTO
Howver
hpagent
Hrvatska
htmlentities
htmlfile
htmlpack
htmlpanel
ʻĀirani
icns
iconset
iconutil
ified
Iforgot
iframes
ihack
iife
iìíîïī
IÌÍÎÏĪ
ijkl
imageeditor
imagelink
imagetools
immer
iname
Incl
infint
inflim
infty
inputi
inserttable
instanceof
Interlingue
Interp
interupting
Inteval
Inuktitut
Inupiak
Invididual
invlaid
IOERR
Ionicons
IPHONEOS
ipify
ipwho
ipwhois
iscompleted
Ísland
Italiano
Itoophiyaa
itsgone
itunes
Jabuuti
jackgruber
jcgurango
jianguoyun
joeattardi
jopext
joplinapp
JOPLINAPP
joplinbot
joplincloud
joplindev
JOPLINMOD
joplintest
joplinusercontent
Journées
jsbundles
jsdraw
Jsons
Jubair
justtesting
Kalaallit
kalba
kanban
Kashmiri
katex
Kenichi's
Kenichi
keybind
keychain
keycodes
keymapping
keymaps
keytar
Kibris
kickass
Kinyarwanda
Kirundi
Klerks
Ködörösêse
Komori
Konda
Kopiuj
Kpck
Kūki
labeled
Laothian
lastmod
Latviešu
Latvija
lcov
ldapts
leaft
leavethisalone
leftarrow
leftequilibrium
leftrightarrow
Lemmy
Lettish
Lëtzebuerg
Levithan
lezer
Liban
Libérez
libfuse
libgconf
libnotify
libnss
libsecret
libxmljs
libz
Lietuva
Lietuvių
lifecyle
lineheight
Lingala
linkg
linki
linkurl
linters
listbox
listfile
listfiles
listpreview
Logiciel
loglevel
longclick
longpress
longpresscancel
looooooong
lproj
LSTM
ltrim
Luxemburg
Maarten
Mablin
macosm
Madagasikara
Magdy
Magyarország
Maininterface
majax
Mals
managebutton
Mardown
markdowncalc
Maroc
MASTERKEY
matchesonscrollbar
matchinfo
mathchoice
mathjax
Mathjax
MATHJAX
mathllap
mathml
mathrlap
mathrm
Mauritanie
Maxiumm
Mayen
mchem
mechanim
MEDIUMINT
mediumtext
Mena
menubutton
mergeff
merlinuwe
Metadatas
Metadatum
México
mhchem
middlewares
migth
Mittal
mkbook
MKCOL
mkdir
mkdirp
mknote
mktodo
MMYY
mnop
modifié
monokai
MONOSPACE
movefile
MSBUILD
mscz
msgctxt
msgfmt
msgmerge
msgstr
msleep
mtext
mult
multicursor
multimarkdown
multimd
multistatus
multitable
Musin
mybucket
mydir
myfile
mynote
myplugin
mytag
mytaga
mytagb
mytagc
mytagd
mytest
mytoken
myvalue
nanoid
Naveen
Navier
naviji
Neaus
Nederlands
needpassword
nestedmenuitem
netinfo
newone
Nextcloud
Nishant
Nizry
njstrace
nñňń
NÑŇŃ
NOCASE
nodechange
nodir
noexpand
nojs
nolongershared
nonbreaking
noneditable
nonlatin
NONLATIN
nonprofit
Noreg
Norge
nospecialcharacters
notaduration
notanumber
notarisation
Notarisation
notarization
notarytool
notesnook
Notesnook
notetags
Notif
notindexed
notthere
nounce
Nounce
Nounces
Nowasky
nplurals
npmignore
npmjs
npmpackagejsonlintrc
numadd
numbersareok
numdec
numdiv
numlist
Numlock
nummult
numsub
Nunaat
obelix
odata
ohno
OHNO
oldppk
onattribdata
onattribend
onattribname
onattribute
oncdata
oncdataend
oncdatastart
onclosetag
oncomment
oncommentend
ondeclaration
ondoctype
onedrive
onelink
onend
onfoo
onformat
onmatch
onopentag
onopentagend
onopentagname
onparserinit
onprocessinginstruction
onselfclosingtag
ontext
ontouch
oòóôõöøō
OÒÓÔÕÖØŌ
opencdata
opendocument
opendocumenttree
opennamespace
opentag
opentagname
opentagstart
oplin
Opptionn
orignal
Oromo
Österreich
otherpackage
outdented
overidding
overriden
overscroll
padd
PAGEDOWN
PAGEUP
pageviews
pandoc
paperclip
partageable
partageables
passthrough
Päth
Pbuild
pbxproj
pcloud
pcmag
pcnalx
pddv
Pehr
Percents
père
Persistable
Perú
pfff
pgdg
PGPASSWORD
pidfile
PLUGINLEGACY
pocount
Poedit
Polska
Polski
Polynésie
popover
Popover
popperjs
Português
positionals
Postprocess
postprocessing
Potoczny's
Potoczny
powerpoint

View File

@ -0,0 +1,396 @@
Prakash
precommit
pred
preg
prerelease
Prerelease
prereleases
presigner
Pressable
prettycron
pricetag
Príncipe
privkey
processinginstruction
programatically
propfind
PROPFIND
propname
propstat
protcol
pseudoclass
pseudos
punycode
Pushto
quantityslider
Quickstart
Quintero
quot
qwer
raisebox
rbga
reactnativesafx
readerable
Readerable
READERABLE
readfile
reconsume
Redownload
reencrypt
reencrypted
Reencrypting
reencrypts
Reformatter
regedit
regexes
Regexs
Rehman
Relavent
relayouted
releasepersistableuripermission
rels
renamings
Renderable
renderered
Renderered
Replit's
replit
reponame
República
republika
République
requestheaders
resourceid
resourceidhere
resourcekey
resourcetest
resourcetype
resynced
Retr
rgba
Rhaeto
richtext
rightarrow
rightequilibrium
rightleftarrows
rightleftharpoons
rmbook
rmnote
rmusin
rnfs
RNFS
RNSAF
robocopy
Roboto
România
roule
rowid
ROWID
ROWIDs
rowspan
rscss
RSCSS
rseidelsohn
rtrim
rullzer
Ryota
safeext
safemode
Safx
salut
Sangho
sasss
Sauvegardez
SAVEPOINT
schtroumpf
Schweiz
sciurius
screenreader
Scrolllock
scrollmap
scrollview
sdcard
seafdav
Seafile
searchbar
searchcursor
searchengine
searchlimit
SEARCHOVERLAY
searchreplace
securerandom
segdir
seiyab
selectbox
selectedtext
Sénégal
Serei
Serializers
Serj
setext
settingschema
sgmldeclaration
shantanugoel
sharee
Shiftt
Shoft
shouldntendwithit
shouldstartwiththis
showpasswordbutton
Shqip
Shqipëria
Sicen
Siddhant
sidemenu
sidemenus
signaled
simplemath
simplyifing
Siswati
sizeinput
sizer
SJCL
Slovenčina
Slovenija
Slovensko
softbreaks
Solarised
SOLARIZED
someclass
someid
someidhere
someresourceid
somethingrandom
somewhereelse
sourcecode
sourceurl
SPACEBAR
spaceno
Spacify
spdfgh
spellfix
sphemy
splitbutton
splitted
sprintf
sqlts
srcdoc
srcfolder
SSSZ
Stackstorage
standardstyle
starttls
Starttls
stepsize
stevenlevithan
stex
stilltryingtohack
strack
Strato
Strikethrough
Stringifiable
subdir
subl
Suomi
Sūriyya
Svenska
Sverige
svgs
Svizra
Svizzera
synclock
synclog
Syncthing
syswide
syswidecas
taboverride
tabpanel
taga
tagb
tagc
tagkey
tagline
tagname
tagtest
Tajik
takesover
targetfolder
tbtn
Tchad
Teardown
termi
termutils
Termux
Terres
Tessarek
tessus
Testb
testcreate
testexportfolder
testid
testingconnection
testingkeychain
testocr
testunit
texify
Texify
textareas
Textcolor
textexportnote
textinput
textstyle
thaaaaaaan
Thameside
thatsok
thatsreallylongthatsreallylongthatsreallylongthats
thatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylong
Thevenard
thisisfine
Thmmss
Tiếng
Tigrinya
tiiitlllle
tini
TINYINT
tinymce
tippy
titi
titlecontent
titletitle
tkwidget
tkwidgets
tldr
TLDR
Todos
toggleblock
togglebutton
togglemenuitem
Tolu
tomatos
toolip
toolwidget
tooshort
Traduis
treshold
treymo
tripledash
tsmerge
Tsonga
tttest
Tunisie
Türkçe
Türkiye
Türkmenistan
turndown
Turndown
TWCO
typeahead
typedoc
Typora
tzip
uastring
UCCU
udostępnialne
udostępnialny
ugin
uglifycss
uglifyjs
Uighur
Uiid
unconflicted
underbrace
Undos
unenforceability
unescaping
unhighlighted
unixlike
unmocked
Unnormalized
unoverriding
Unrevert
unserialize
unserialized
unserializes
unserializing
unshares
unsharing
unspell
unusued
uparrow
uphy
urlconverter
urlinput
usemap
userchrome
usercontent
userstyle
uslug
Ustd
utems
uuidgen
uuidv
uùúûüůū
UÙÚÛÜŮŪ
valign
Valign
valpha
vars
Vars
Vaticano
vbscript
vcvarsamd
Vdovychinskiy
verison
vers
verylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongidverylongid
veryverylongclientidveryverylongclientidveryverylongclientidveryverylongclientid
veryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitleveryverylongtitle
Việt
viewbox
vimrc
Volapuk
Volívia
vosk
Vosk
votearrow
watchedicon
WCTRL
weback
webclipper
webdav
webfonts
webviews
welc
whitespaces
widder
Wifi
Withéàö
Withflags
withs
Wolof
WONTFIX
wordcount
wraping
writable
writefile
wrongclienttype
wrongpassword
wrongtype
Wuliwya
wxyz
xcallbackurl
xcassets
xcconfig
xcodeproj
xcrun
xcworkspace
xgettext
xlink
Xmark
xzvf
Yaniv
yarg
yosay
Yousafzai
yufzkns
YYYYMMDDTHH

View File

@ -0,0 +1,90 @@
zblesk
zxcvbn
zžżź
ZŽŻŹ
Ελλάδα
Ελληνικά
Κύπρος
Агентство
Антарктике
Беларусь
България
Гора
језик
Казахстан
Киргизия
Книги
Кыргызстан
Қазақстан
Македонија
Молдавия
Монгол
номер
рейтер
Рейтер
Россия
Русский
Северна
сообщило
СООБЩИЛО
Србија
српски
Україна
Црна
საქართველო
Հայաստան
ישראל
עיברית
إرتريا
اسلامي
اسلامی
افغانستان
الأُرْدُن
الإمارات
البحرين
الجزائر
السعودية
السودان
الصومال
العراق
العربيّة
ﺍﻟﻘﻤﺮي
الكويت
المتّحدة
المغرب
اليَمَن
ایران
پاکستان
تشاد
تونس
جمهوری
جيبوتي
دولة
دولتدولت
سلطنة
سوريا
عُمان
لبنان
ليبيا
موريتانيا
ⵍⵎⵖⵔⵉⴱ
ኢትዮጵያ
ኤርትራ
भारत
গণপ্রজাতন্ত্রী
লাদেশ
இலங்கை
ලංකා
คือค
คือคนไทย
ประเทศไทย
ປະຊາຊົນລາວ
မြန်မာ
កម្ពុជា
Multiling
carbone
mockup
firstname
lastname
signup
activatable

View File

@ -7,14 +7,21 @@ const main = async () => {
const argv = await yargs.argv;
const filePaths = argv._ as string[];
const processAll = !!argv.all;
if (!processAll) {
if (!filePaths || !filePaths.length) return;
}
chdir(rootDir);
let cmd = ['yarn', 'spellcheck-base'];
let cmd = [
'yarn', 'cspell',
'--no-progress',
'--no-summary',
'--config', 'cspell.json',
];
if (processAll) {
cmd.push('**/*.{ts,tsx}');
cmd.push('**/*.{ts,tsx,md,mdx}');
} else {
cmd = cmd.concat(filePaths);
}

View File

@ -10,5 +10,5 @@ Some paragraph
1. One
1. Two
2. three
2. Foud
2. Four
3. Five

View File

@ -10,5 +10,5 @@ Some paragraph
1. One
1. Two
2. three
2. Foud
2. Four
3. Five

View File

@ -1,3 +1,3 @@
# Utility package
Those are generic utility functions that can be imported from any other packages. This package however shouldn't have any dependency to any other Joplin package, so that it can be imported without having to import "lib", "renderer" and so on. This is particulary important for Docker images, so that they can be trimmed down to only what's needed.
Those are generic utility functions that can be imported from any other packages. This package however shouldn't have any dependency to any other Joplin package, so that it can be imported without having to import "lib", "renderer" and so on. This is particularly important for Docker images, so that they can be trimmed down to only what's needed.

View File

@ -27,7 +27,7 @@
- Improved: Do not allow switching the sync target if not all resources are downloaded (#9263)
- Improved: Removed ability to search by note ID to fix issue with certain plugins (#9769)
- Improved: Updated packages react-native-paper (v5.11.6)
- Fixed: Andoid: Fix crash on opening settings on some devices (#9806) (#7974 by Henry Heino)
- Fixed: Fix crash on opening settings on some devices (#9806) (#7974 by Henry Heino)
- Fixed: Clear "Some items cannot be synchronised" banner after situation is resolved (#9157)
- Fixed: Detect faster left-right swipes to open the sidemenu (#9802) (#9142 by Henry Heino)
- Fixed: Fix broken synchronisation link in welcome notes (#9804) (#9799 by Henry Heino)
@ -331,7 +331,7 @@
- Improved: Confirm closing settings with unsaved changes (#7566 by Henry Heino)
- Improved: Upgrade to React Native 0.69 (7e29804)
- Improved: Upgrade to React Native 0.70 (4bdb3d0)
- Fixed: Fixed biometics prompt on new devices (9eff7e6)
- Fixed: Fixed biometrics prompt on new devices (9eff7e6)
- Fixed: Fixed issue when floating keyboard is visible (#7593) (#6682 by Henry Heino)
- Fixed: Remove gray line around text editor (#7595) (#7594 by Henry Heino)
@ -524,7 +524,7 @@
## [android-v2.3.4](https://github.com/laurent22/joplin/releases/tag/android-v2.3.4) (Pre-release) - 2021-08-15T13:27:57Z
- Fixed: Bump hightlight.js to v11.2 (#5278) (#5245 by Roman Musin)
- Fixed: Bump highlight.js to v11.2 (#5278) (#5245 by Roman Musin)
## [android-v2.3.3](https://github.com/laurent22/joplin/releases/tag/android-v2.3.3) (Pre-release) - 2021-08-12T20:46:15Z

View File

@ -112,7 +112,7 @@
- Fixed: Fix default sync target (4b39d30)
- Fixed: Fixed potential infinite loop when Joplin Server session is invalid (c5569ef)
- Fixed: Fixed running out of memory when importing large ENEX files (#5543)
- Fixed: Ignore newline between quotes while spliting batch (#5540) (#5341 by Kingsley Yung)
- Fixed: Ignore newline between quotes while splitting batch (#5540) (#5341 by Kingsley Yung)
## [cli-v2.4.1](https://github.com/laurent22/joplin/releases/tag/cli-v2.4.1) - 2021-09-29T15:28:01Z
@ -128,7 +128,7 @@
## [cli-v2.3.2](https://github.com/laurent22/joplin/releases/tag/cli-v2.3.2) - 2021-08-16T09:38:40Z
- Improved: Improved E2EE usability by making its state a property of the sync target (#5276)
- Fixed: Bump hightlight.js to v11.2 (#5278) (#5245 by Roman Musin)
- Fixed: Bump highlight.js to v11.2 (#5278) (#5245 by Roman Musin)
- Fixed: Fixed version command so that it does not require the keychain (ca6d8ec)
## [cli-v2.2.2](https://github.com/laurent22/joplin/releases/tag/cli-v2.2.2) - 2021-08-11T15:34:56Z
@ -196,7 +196,7 @@
## [cli-v1.6.3](https://github.com/laurent22/joplin/releases/tag/cli-v1.6.3) - 2021-01-11T11:52:11Z
- New: Add more log info when a revision cannot be deleted due to still-encrypted itel
- New: Add more log info when a revision cannot be deleted due to still-encrypted item
- Improved: Do not display error message when fixing ENEX resource mime type (#4310)
- Improved: Improve support for SVG images when importing ENEX files
- Improved: Improved support for bold and italic format when importing ENEX file (#4316)
@ -378,7 +378,7 @@ IMPORTANT: If you use the web API, please note that there are a few breaking cha
- Improved: Allow exporting a note as HTML
- Improved: Improved logging during sync to allow finding bugs more easily
- Fixed: Handle WebDAV servers that do not return a last modified date (fixes mail.ru) (#2091)
- Fixed: Restaured translations that had been accidentally deleted (#2126)
- Fixed: Restored translations that had been accidentally deleted (#2126)
- Fixed: Prevent synch from happening if target dir could not be created, in local sync (#2117)
- Fixed: Handle rare case when notebook has a parent that no longer exists, which causes a crash when sorting (#2088)

View File

@ -25,7 +25,7 @@
- Improved: Hide advanced settings by default (#9730 by Henry Heino)
- Improved: Removed ability to search by note ID to fix issue with certain plugins (#9769)
- Improved: Updated packages @js-draw/material-icons (v1.15.0), follow-redirects (v1.15.4), fs-extra (v11.2.0), js-draw (v1.15.0), react, react-native-device-info (v10.12.0), react-native-image-picker (v7.1.0), react-native-paper (v5.11.6), react-native-vector-icons (v10.0.3), sharp (v0.33.1)
- Fixed: Andoid: Fix crash on opening settings on some devices (#9806) (#7974 by Henry Heino)
- Fixed: Fix crash on opening settings on some devices (#9806) (#7974 by Henry Heino)
- Fixed: Clear "Some items cannot be synchronised" banner after situation is resolved (#9157)
- Fixed: Detect faster left-right swipes to open the sidemenu (#9802) (#9142 by Henry Heino)
- Fixed: Fix AWS S3 sync error (#9696) (#8891 by Henry Heino)

View File

@ -28,7 +28,7 @@
## [server-v2.13.3](https://github.com/laurent22/joplin/releases/tag/server-v2.13.3) - 2023-11-01T16:29:32Z
- Improved: Automatically restarts the server when it crashes, with exponentiel back-off (0c8b475)
- Improved: Automatically restarts the server when it crashes, with exponential back-off (0c8b475)
- Improved: Improve parsing of uploaded content and error handling (db88dfc)
- Improved: Updated packages katex (v0.16.9), nodemailer (v6.9.6), react, sass (v1.68.0)
@ -153,7 +153,7 @@
- Improved: Make page wider only when displaying admin pages (df9c460)
- Improved: Move admin pages under /admin (#6006)
- Improved: Put admin pages under /admin (09cbe3c)
- Improved: Remove uneeded CSS file (9dbf5e0)
- Improved: Remove unneeded CSS file (9dbf5e0)
- Improved: Set NODE_ENV to "production" in Docker image (ed0f0fa)
- Improved: Set a timestamp when disabling a user (2f7ab7e)
- Improved: Simplify Docker image (#6010)
@ -279,7 +279,7 @@
## [server-v2.4.10-beta](https://github.com/laurent22/joplin/releases/tag/server-v2.4.10-beta) (Pre-release) - 2021-09-25T19:07:05Z
- Improved: Improved share service reliability and optimised performance (0175348)
- Security: Implement clickjacking defense (e3fd34e)
- Security: Implement clickjacking defence (e3fd34e)
## [server-v2.4.9](https://github.com/laurent22/joplin/releases/tag/server-v2.4.9-beta) - 2021-09-22T16:31:23Z
@ -321,7 +321,7 @@
## [server-v2.4.2](https://github.com/laurent22/joplin/releases/tag/server-v2.4.2) - 2021-08-28T17:45:41Z
- New: Add request rate limter on session and login end points (543413d)
- New: Add request rate limiter on session and login end points (543413d)
- New: Add support for user flags (82b157b)
- New: Added commands to control db migrations - list, down, up (2c79ce2)
- Improved: Display user flags in profile when logged in as admin (4394329)

View File

@ -151,7 +151,7 @@ The functionality added by these plugins is not part of the CommonMark spec so,
| [Fountain](https://fountain.io) | <code>\`\`\`fountain</code><br/>Your screenplay...<br/><code>\`\`\`</code> | Adds support for the Fountain markup language, a plain text markup language for screenwriting | no | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/fountain_plugin.jpg) |
| [Mermaid](https://mermaid-js.github.io/mermaid/) | <code>\`\`\`mermaid</code><br/>mermaid syntax...<br/><code>\`\`\`</code> | See [plugin page](https://mermaid-js.github.io/mermaid/#/examples) for full description | yes | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/mermaid.jpg) |
| [Mark](https://github.com/markdown-it/markdown-it-mark) | `==marked==` | Transforms into `<mark>marked</mark>` (highlighted) | yes | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/mark_plugin.jpg) |
| [Footnote](https://github.com/markdown-it/markdown-it-footnote) | `Simples inline footnote ^[I'm inline!]` | See [plugin page](https://github.com/markdown-it/markdown-it-footnote) for full description | yes | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/footnote_plugin.jpg) |
| [Footnote](https://github.com/markdown-it/markdown-it-footnote) | `Simple inline footnote ^[I'm inline!]` | See [plugin page](https://github.com/markdown-it/markdown-it-footnote) for full description | yes | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/footnote_plugin.jpg) |
| [TOC](https://github.com/nagaozen/markdown-it-toc-done-right) | Any of `${toc}, [[toc]], [toc], [[_toc_]]` | Adds a table of contents to the location of the toc page. Based on headings and sub-headings | yes | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/toc_plugin.jpg) |
| [Sub](https://github.com/markdown-it/markdown-it-sub) | `X~1~` | Transforms into X<sub>1</sub> | no | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/sub_plugin.jpg) |
| [Sup](https://github.com/markdown-it/markdown-it-sup) | `X^2^` | Transforms into X<sup>2</sup> | no | [View](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/md_plugins/sup_plugin.jpg) |

View File

@ -46,7 +46,7 @@ The filters are implicitly connected by and/or connectives depending on the foll
- To override this default behaviour, use the `any` filter, in which case the search terms will be connected by "OR" instead.
- There's an exception for the `notebook` filters which are connected by "OR". The reason being that no note can be in multiple notebooks at once.
Incorrect search filters are interpreted as a phrase search, e.g. misspelled `nootebook:Example` or non-existing `https://joplinapp.org`.
Incorrect search filters are interpreted as a phrase search, e.g. a misspelled filter or non-existing `https://joplinapp.org`.
## Search order

View File

@ -45,7 +45,7 @@ All providers will require a bucket, Access Key, and Secret Key.
If you provide a configuration and you receive "success!" on the "check config" then your S3 sync should work for your provider. If you do not receive success, you may need to adjust your settings, or save them, restart the app, and attempt a sync. This may reveal more clear error messaging that will help you deduce the problem.
## AWS
- URL: `https://s3.<region>.amazonaws.com/` (fill in your region, a complete list of endpoint adresses can be found [here](https://docs.aws.amazon.com/general/latest/gr/s3.html))
- URL: `https://s3.<region>.amazonaws.com/` (fill in your region, a complete list of endpoint addresses can be found [here](https://docs.aws.amazon.com/general/latest/gr/s3.html))
- Region: required
- Force Path Style: unchecked

View File

@ -51,7 +51,7 @@ First you need to setup React Native to build projects with native code. For thi
### Android
Run this to build and install the app on the emmulator:
Run this to build and install the app on the emulator:
cd packages/app-mobile/android
./gradlew installDebug # or gradlew.bat installDebug on Windows

View File

@ -54,7 +54,7 @@ const config: Config = {
### Don't set the type when it can be inferred
TypeScript can automatically detect the type so setting it explicitly in many cases is not needed, and makes the code unnecessarily verbose. We already have enabled the eslint rule `no-inferrable-types`, however it only applies to simple types such as string, number, etc. but not to function calls.
TypeScript can automatically detect the type so setting it explicitly in many cases is not needed, and makes the code unnecessarily verbose. We already have enabled the eslint rule `no-inferable-types`, however it only applies to simple types such as string, number, etc. but not to function calls.
**BAD:**
```ts

View File

@ -141,7 +141,7 @@ While it works relatively well, there is still room for improvement. In particul
- Improve relevance algorithm (give a weight to certain criteria, and allow adding new criteria more easily). In particular give more weight to recently modified notes, and less weight to completed to-dos.
- Allow fuzzy search (for example return results that contain "saerch" for the query "search")
- Allow fuzzy search (for example return results that contain "search" for the query "search")
Expected Outcome: To be defined with the student. Depending on what features they would like to implement.

View File

@ -5,8 +5,8 @@ Joplin has a young but well proven history. It all started by single idea but is
Joplin is about to make another big step to answers these demands by applying at Google Summer of Code. All students and Joplin users and developers are welcome to participate in the hopefully first year Summer of Code program with Joplin. Here's how.
Mentors, administrators and students: read [Summer of Code](https://developers.google.com/open-source/gsoc) occasionally. Also read the [Summer of Code FAQ](https://developers.google.com/open-source/gsoc/faq).
**Most IMPORTANT, read this page carefully, line by line. We don't want to quote pharagraphs from this page answering question in the forum.
Moreover, watch/subscribe the topic [GSoC 2020 live blog](https://discourse.joplinapp.org/t/gsoc-2020-live-blog/6219) as this page here contains rather static content whereas the mentioned topic is updated much more freuqently.**
**Most IMPORTANT, read this page carefully, line by line. We don't want to quote paragraphs from this page answering question in the forum.
Moreover, watch/subscribe the topic [GSoC 2020 live blog](https://discourse.joplinapp.org/t/gsoc-2020-live-blog/6219) as this page here contains rather static content whereas the mentioned topic is updated much more frequently.**
All participants will need a Google account in order to join the program. So, save time and create one now. In addition, all participants need to join the [Joplin Forum](https://discourse.joplinapp.org).
@ -63,7 +63,7 @@ First of all, please read the above referenced resources and the [GSoC FAQ](http
3. Take a look at the [list of ideas](https://github.com/laurent22/joplin/blob/dev/readme/dev/gsoc/gsoc2020/ideas.md). You can have you own idea added by posting it in the [Features category](https://discourse.joplinapp.org/c/features)
4. Come up with project that you're interested in and discuss it in [Features category](https://discourse.joplinapp.org/c/features)
5. Write a first draft and get someone to review it
6. Remember: you must link to work such as commits in your proposal. A private place will be created wihtinn the forum for that purposes.
6. Remember: you must link to work such as commits in your proposal. A private place will be created within the forum for that purposes.
7. Read [How to write a kickass proposal for GSoC](http://teom.org/blog/kde/how-to-write-a-kick-ass-proposal-for-google-summer-of-code/)
8. Submit proposal using [Google's web interface](https://summerofcode.withgoogle.com/) ahead of the deadline
9. Submit proof of enrolment well ahead of the deadline

View File

@ -176,7 +176,7 @@ Expected size of project: 175 hours
### 10. Tablet layout
On wide screens devices like tables Joplin could use a different layout, e.g. with note list always showing, or have both editor and viewer visible at the same time. What component is visible shoud be optional - for example, the user may want to see the note list, but hide the sidebar. This change will have to be implemented in such a way that it doesn't break the regular, mobile-only layout.
On wide screens devices like tables Joplin could use a different layout, e.g. with note list always showing, or have both editor and viewer visible at the same time. What component is visible should be optional - for example, the user may want to see the note list, but hide the sidebar. This change will have to be implemented in such a way that it doesn't break the regular, mobile-only layout.
Expected Outcome: A new tablet-specific layout, with sidebar, note list and editor always visible.
@ -214,7 +214,7 @@ Expected size of project: 350 hours
### 12. Email plugin
Create a plugin to fetch mail via IMAP and convert messages to notes (including attachments). The plugin should be able to filter what messages it donwloads, e.g. based on the folder.
Create a plugin to fetch mail via IMAP and convert messages to notes (including attachments). The plugin should be able to filter what messages it downloads, e.g. based on the folder.
Additional features to consider:

View File

@ -139,7 +139,7 @@ Potential Mentor(s):
### 9. Template insertion tool
Joplinc can store general templates as notes that can be used in various context. For example, it could have email templates that could be inserted into a Thunderbird email. Or code snippets that could be inserted into a text editor. The workflow will be as follow
Joplin can store general templates as notes that can be used in various context. For example, it could have email templates that could be inserted into a Thunderbird email. Or code snippets that could be inserted into a text editor. The workflow will be as follow
- User presses a global shortcut, for example Ctrl+Alt+T, from any text editor (email client, code editor, etc.)
- A floating window is opened, from which the user can pick a note

View File

@ -52,7 +52,7 @@ A typical Joplin Server installation will use the following elements:
- [Nginx](https://www.nginx.com/): It is used as a reverse proxy and for TLS termination.
- A configuration file: A `.env` file, which contains environement variables used to configure the server.
- A configuration file: A `.env` file, which contains environment variables used to configure the server.
This is a typical Joplin Server installation, but many of its components can be configured - for example it is possible to use a different database engine, or to use the filesystem instead of AWS S3. Any reverse proxy would also work - using Nginx is not required.

View File

@ -54,5 +54,5 @@ These are run by the `app-desktop` package on a full `build` (e.g. on `postinsta
- All the functions related to default plugins are located in [defaultPluginsUtils.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.ts)
- Default plugins are bundled with the app (included in the `build/` directory) and loaded from this directory.
- To allow loading `dev` and NPM versions of the plugin, default plugins are loaded after non-default plugins. The plugin service refuses to load additional copies of already-loaded plugins. As such, non-default plugins take precedence over default plugins.
- After loading is complete, we apply the default settings for each default plugin. Default settings are located in [desktopDefaultPluginsInfo.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts). The `installedDefaultPlugins` setting is used to ensure that settnigs are only overridden once.
- After loading is complete, we apply the default settings for each default plugin. Default settings are located in [desktopDefaultPluginsInfo.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts). The `installedDefaultPlugins` setting is used to ensure that settings are only overridden once.
- If the plugin is already installed by the user, then we don't apply default settings to avoid overriding user's settings.

View File

@ -36,7 +36,7 @@ All of the below fields are supported by both the exporter and the importer.
### Exporter
The exporter will export all the above fields that hold values in the database. So `due` and `completed?` will only be included for "todo" notesm `tags` will only exist for notes that include tags, etc.
The exporter will export all the above fields that hold values in the database. So `due` and `completed?` will only be included for "todo" notes `tags` will only exist for notes that include tags, etc.
### Importer

View File

@ -22,7 +22,7 @@ It is used to load and run plugins. Running plugins is platform-specific, thus t
### Plugin runner
This is the platform-specfic way to load and run a plugin. For example, on desktop, it creates a new BrowserWindow (which is a new process), then load the script inside. On Cli, for now the "vm" package is used, so the plugin actually runs within the same process.
This is the platform-specific way to load and run a plugin. For example, on desktop, it creates a new BrowserWindow (which is a new process), then load the script inside. On Cli, for now the "vm" package is used, so the plugin actually runs within the same process.
The plugin runner also initialises the sandbox proxy and injects it into the plugin code.

View File

@ -10,7 +10,7 @@ Joplin has two types of editors, two-pane Markdown Editor and WYSIWYG Editor. Tw
Since the height of a Markdown text line is not always proportional to the height of the corresponding HTML element, displayed contents in Editor and Viewer are often inconsistent.
To keep the consistency of their displayed contents, both scroll bars needed to be controlled separatedly and synchronously.
To keep the consistency of their displayed contents, both scroll bars needed to be controlled separately and synchronously.
## Feature Specifications

37
readme/dev/spellcheck.md Normal file
View File

@ -0,0 +1,37 @@
# Spellchecking using CSpell
The Markdown and TypeScript files are automatically checked using [CSpell](https://cspell.org/). The configuration is in `cspell.json`
## Manually checking spelling
Spellchecking can be manually done on the entire codebase by running `yarn spellcheck --all`, or on one or more files using `yarn spellcheck /path/to/file`
## Precommit hook
The precommit hook will automatically check spelling on newly committed files.
## Ignoring words
There are two ways to ignore words:
### Using the word list
Simply add the word to the last word list in `packages/tools/cspell/dictionary?.txt`.
Please note that there cannot be more than 400 (maybe 500) words in those lists. Beyond this, [CSpell will fail loading them](https://github.com/streetsidesoftware/cspell/issues/5222) and will no longer highlight words in VSCode. If the last dictionary contains more than 400 words, create a new one, and add a reference to it in `cspell.json`.
### Using comments
You can ignore a block of code by wrapping it in `// cSpell:disable` / `// cSpell:enable`.
Only do this when there's a large block of code that contains many words to be ignored. Otherwise prefer the word list because it means we don't pollute the code with additional comments.
Also do this when the words to be ignored are not actually words. One example is encrypted data because we don't want to add random meaningless strings to the word list.
### By ignoring paths or regexes
In `cspell.json`, use the `ignore` properties to skip certain files or folders, or to ignore text that matches a particular regex. For example, `"\[.*?\]\(https:\/\/github.com\/.*?\)"` is used to ignore all usernames in the changelogs.
## Visual Studio Code Extension
The [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) extension can be installed to automatically underline spelling mistakes. It will use the project `cspell.json` file.

View File

@ -48,7 +48,7 @@ All these details are very important because they give a clear picture of what y
It's also an easy way for everybody, even non-technical people, to get involved and help you refine your spec.
Also, if you can, provide UI mockups.
Also, if you can, provide a UI mockup.
#### Technical solution

View File

@ -3,9 +3,9 @@ url: https://www.patreon.com/posts/joplin-and-2018-21841975
published_at: 2018-10-04T08:11:23.000+00:00
---
# Joplin and Hacktobertfest 2018 🎃
# Joplin and Hacktoberfest 2018 🎃
The [Hacktobertfest event](https://hacktoberfest.digitalocean.com/) has started - it allows you to contribute to Joplin and, at the end of the month, after having done 5 PR, you'll earn a limited edition T-shirt.
The [Hacktoberfest event](https://hacktoberfest.digitalocean.com/) has started - it allows you to contribute to Joplin and, at the end of the month, after having done 5 PR, you'll earn a limited edition T-shirt.
To participate, go on [https://hacktoberfest.digitalocean.com/](https://hacktoberfest.digitalocean.com/) log in (with you github account) and you are ready to get in.

View File

@ -3,7 +3,7 @@ created: 2021-07-18T10:35:38.000+00:00
source_url: https://www.patreon.com/posts/jopin-cloud-beta-53822957
---
# The Jopin Cloud beta is now closed
# The Joplin Cloud beta is now closed
The beta program helped narrow down a few issues and should make Joplin Cloud (and Joplin Server) more reliable. More precisely:

View File

@ -11,7 +11,7 @@ source_url: https://www.patreon.com/posts/joplin-v2-5-is-58097252
Markdown + Front Matter is a format that allows attaching metadata, such as tags, creation date, or geolocation to a Markdown file. This is done by adding a block of YAML code (a "front matter") at the top of the file.
Thansk to Caleb John's efforts the Joplin desktop and CLI applications now support importing and exporting these files. When exporting, we try to preserve as much metadata as possible, while still keeping it the formatting user friendly.
Thanks to Caleb John's efforts the Joplin desktop and CLI applications now support importing and exporting these files. When exporting, we try to preserve as much metadata as possible, while still keeping it the formatting user friendly.
Here's an example, with the Front Matter at the top, delimited by "---", and the text below.

View File

@ -37,7 +37,7 @@ To get this working, you and the recipient will need to have Joplin 2.6 and the
**Improved synchronisation startup speed**
Synchronisation is also a bit faster in this release due to an optimisation on the startup process. When syncing, the app needs to acquire a lock, which may be time consuming since it requires making multiple requests. This has now been optimised so that less requests are necessary and also each request consumes less resources. This will have a postive impact on Joplin Cloud in particular, but you should also see improvements with Joplin Server and smaller improvements with the other sync targets.
Synchronisation is also a bit faster in this release due to an optimisation on the startup process. When syncing, the app needs to acquire a lock, which may be time consuming since it requires making multiple requests. This has now been optimised so that less requests are necessary and also each request consumes less resources. This will have a positive impact on Joplin Cloud in particular, but you should also see improvements with Joplin Server and smaller improvements with the other sync targets.
**Improved Markdown editor split view scrolling**